% To solve u_t+u_x=0 %Using %1 Simple upwind scheme % u(x,t+k)=u(x,t)-r*(u(x,t)-u(x-h,t)); %2 Simple, Space centred % u(x,t+k)=u(x,t)-r*(u(x+h,t)-u(x-h,t))/2; %3 Lax-Friedrichs % u(x,t+k)=(u(x+h,t)+u(x-h,t))/2-r*(u(x+h,t)-u(x-h,t))/2; %4 Lax-Wendroff % u(x,t+k)=u(x,t)-r*(u(x+h,t)-u(x-h,t))/2+r^2*(u(x+h,t)-2*u(x,t)+u(x-h,t))/2; %5 Leap-Frog % u(x,t+k)=u(x,t-k)-r*(u(x+h,t)-u(x-h,t)); %6 The Keller Box scheme % u(x+h,t+k)-u(x+h,t)+u(x,t+k)-u(x,t)+r*(u(x+h,t+k)+u(x+h,t)-u(x,t+k)-u(x,t))=0; % u(x+h,t+k)=(u(x+h,t)*(1-r)-u(x,t+k)*(1-r)+u(x,t)*(1+r))/(1+r) C0='Solve for -20, with h=0.1, r=k/h=0.8 '; C1='Method 1 Simple upwind scheme '; C2=' u(x,t+k)=u(x,t)-r*(u(x,t)-u(x-h,t)) '; C3='Method 2 Simple, Space centred '; C4=' u(x,t+k)=u(x,t)-r*(u(x+h,t)-u(x-h,t))/2 '; C5='Method 3 Lax-Friedrichs '; C6=' u(x,t+k)=(u(x+h,t)+u(x-h,t))/2-r*(u(x+h,t)-u(x-h,t))/2'; C7='Method 4 Lax-Wendroff '; C8=' u(x,t+k)=u(x,t)-r*(u(x+h,t)-u(x-h,t))/2 '; C9=' +r^2*(u(x+h,t)-2*u(x,t)+u(x-h,t))/2'; C10='Method 5 Leap-Frog '; C11=' u(x,t+k)=u(x,t-k)-r*(u(x+h,t)-u(x-h,t)) '; C12='Method 6 The Keller Box scheme '; C13=' u(x,t+k)= '; C14=' (u(x,t)*(1-r)-u(x-h,t+k)*(1-r)+u(x-h,t)*(1+r))/(1+r)'; C=[C0;C1;C2;C3;C4;C5;C6;C7;C8;C9;C10;C11;C12;C13;C14]; disp(C) Method=input('Select Method: (1 - 6)! ' ); if (Method==1) disp('Simple Scheme') elseif (Method==2) disp('Simple Centred Scheme') elseif (Method==3) disp('Lax-Friedrichs Scheme') elseif (Method==4) disp('Lax-Wendroff Scheme ') elseif (Method==5) disp('Leap-Frog Scheme ') else disp('Box Scheme ') end N=70; % N = number of mesh points at each time h=7/N;% h = mesh length MT=30; % MT = number of time steps OT=5; % OT = number of steps between outputs graphs NT = MT/OT; r=0.8;% r = dt/h; dt=r*h;% dt = time step u=zeros(1,N+1); v=u; w=u; %Initial condition u(x,0) for m=2:N x=-2+(m-1)*h; if (abs(x)<1.0) u(m)=1-abs(x); end end f=u; hold off x=-2:h:5; plot(x,u) title('Initial condition') text=input('press enter to continue '); for i=1:NT; hold off M=i*OT; plot(x+M*dt,f) axis([-2,4.5,-0.25,1.25]) hold on for n=1:OT v=u; for m=2:N if (Method==1) v(m)=u(m)-r*(u(m)-u(m-1)); %Simple upwind scheme elseif (Method==2) v(m)=u(m)-r*(u(m+1)-u(m-1))/2; %Simple Space centred Scheme elseif (Method==3) v(m)=(u(m+1)+u(m-1))/2-r*(u(m+1)-u(m-1))/2; %Lax-Friedrich Scheme elseif (Method==4) v(m)=u(m)+r^2*(u(m+1)-2*u(m)+u(m-1))/2-r*(u(m+1)-u(m-1))/2; %Lax-Wendroff Scheme elseif (Method==5) if (n==1&i==1) v(m)=u(m)-r*(u(m+1)-u(m-1)); else v(m)=w(m)-r*(u(m+1)-u(m-1)); % Leap-Frog Scheme end else v(m)=(u(m)*(1-r)-v(m-1)*(1-r)+u(m-1)*(1+r))/(1+r); % v(m)-u(m)+v(m-1)-u(m-1)+r*(v(m)-v(m-1)+u(m)-u(m-1))=0; %The Box Scheme end end %m w=u; u=v; end %n plot(x,u,'b-o') if (Method==1) AX = title(['Simple Upwind Scheme at time step ' num2str(i*OT)]); elseif (Method==2) AX = title(['Simple Centred Scheme at time step ' num2str(i*OT)]); elseif (Method==3) AX = title(['Lax-Friedrichs Scheme at time step ' num2str(i*OT)]); elseif (Method==4) AX = title(['Lax-Wendroff Scheme at time step ' num2str(i*OT)]); elseif (Method==5) AX = title(['Leap-Frog Scheme at time step ' num2str(i*OT)]); else AX = title(['Box Scheme at time step ' num2str(i*OT)]); end %LEG = findobj(AX,'type','text'); %set(LEG,'FontSize',18); input('press enter to continue for another 10 time-steps'); end %i