Hello,
Please forgive me my post is long. But I debugged and I came up with no solution. I want to store my u, p and gap arrays at time t=2, t=3, t=4, and t=5, then plot all. To do this, I put if commands associated with the times above as can be seen from the code below. At first, Matlab gave me the plots. However,now matlab says undefined variable u2 which is the first stored variable.
clear all;close all;clc;Tsim=4;ii=101;dt=10^(-5);tstart = 1; dx=0.01; Nt=(Tsim/dt)+1;% Nt = 1;
ii_vect = 1:ii;x = (ii_vect-1)*dx;%----------------------------------------------------------------
b = 0.5; %|
kappa = 1; %|gbar = .1; %|M = 1; %|g = gbar/M; %|Gamma = 0.2; %|F = kappa.*x.*(1-x); %|h = kappa*b*(1-b); % h0 = F(b); %|
theta = kappa*(1-2*b); % htheta0 = F'(b); %|
%----------------------------------------------------------------pi=4.*atan(1);hD=0;thetaD=0;gap0 = 0.5;cb=gap0;ub=zeros(1,ii); u=zeros(1,ii); p=zeros(1,ii); q=zeros(1,ii); gap=zeros(1,ii);gap=gap0+(-F+h+theta.*(x-b));ub=(cb-hD.*(x-b)-thetaD/2.*(x-b).^2)./gap;dc=-10^(-5);%______________ TIME ITERATION____________%
for nt=1:Nt flag=0; mmm=1; m=1; c=cb; t=tstart+(nt-1)*dt; while (flag==0) u=(c-hD.*(x-b)-thetaD/2.*(x-b).^2)./gap; p(1)=0.5*(1-u(1)^2); q(1)=0; for i=2:ii q(i)=q(i-1)-dx*(u(i-1)-ub(i-1))/dt; p(i)=0.5*(1-u(i)^2)+q(i); end st(m)=p(ii)-0; m=m+1; if (m==2) c=c+dc; end if (m==3) c=(c*st(1)-(c-dc)*st(2))/(st(1)-st(2)); end if (m==4) mmm=mmm+1; if (mmm==2) m=1; else flag=1; end end end sumint1=zeros(1,ii); sumint2=zeros(1,ii); sumint1=0.5*(p(1)); sumint2=0.5*(p(1))*(-b); for k=2:ii-1 xx=(k-1)*dx; sumint1=sumint1+(p(k)); sumint2=sumint2+(p(k))*(xx-b); end hDDOT=(sumint1*dx - M*g)/M; hD=hD+dt*hDDOT; h=h+dt*hD; thetaDDOT=sumint2*dx/(Gamma*M); thetaD=thetaD+dt*thetaDDOT; theta=theta+dt*thetaD; hL=h-theta*b; hR=h+theta*(1-b); gap=gap0+(-F+h+theta.*(x-b)); %____THESE IF CONDITIONS ARE NOT RECOGNISED !___%
if t==2 %%(nt==(2-tstart)/dt +1)
u2=u; p2=p; gap2=gap; end if t==3 %%(nt==(3-tstart)/dt +1)
u3=u; p3=p; gap3=gap; end if t==4 %%(nt==(4-tstart)/dt +1)
u4=u; p4=p; gap4=gap; end if t==5 %%(nt==(5-tstart)/dt +1)
u5=u; p5=p; gap5=gap; end end ub(:)=u(:); cb=c; %_______PLOTTING_______%
figure(1)subplot(2,2,1)plot(x,u2,'k-')hold onplot(x,u3,'k:')hold onplot(x,u4,'k--')hold onplot(x,u5,'k-.')hold onlegend('t=2', 't=3', 't=4','t=5')subplot(2,2,2)plot(x,p2,'k-')hold onplot(x,p3,'k:')hold onplot(x,p4,'k--')hold onlegend('t=2', 't=3', 't=4','t=5')subplot(2,2,[3,4])plot(x,gap2,'k-')hold onplot(x,gap3,'k:')hold onplot(x,gap4,'k--')hold onplot(x,gap5,'k-.')legend('t=2', 't=3', 't=4','t=5')
Best Answer