// convection: schémas décentrés amont/aval clear; close, da=gda(); da.auto_clear='on'; V=1; // vitesse de convection T=1; // temps final cfl=0.5; a=0;b=1; function y=u0(x) y=sin(2*%pi*x/(b-a)); endfunction N=[20,40,80,160]; // Nb de point de discretisation erreur=[]; for n=N dx=1/n; dt=cfl*dx/V; x=linspace(a,b,n+1); u=u0(x)'; // Initial condition for t=dt:dt:T, //u=(1+cfl)*u-cfl*[u(2:N(i)+1);u(2)]; // decentrement aval u=(1-cfl)*u+cfl*[u(n);u(1:n)]; // decentrement amont plot2d(x,u); end; uexact=u0(x-V*t)'; plot2d(x,[u uexact]); erreur=[erreur,sqrt(((u-uexact)'*(u-uexact)-(u(1)-uexact(1))^2)*dx)]; end; Dx=ones(N)./N; title('erreur L2'); plot2d(N,[erreur',Dx'],logflag='ll');