Le but de ce TP est la résolution numérique par différents schémas aux différences sur grille uniforme de l'équation de transport : \begin{equation} \begin{cases} \frac{\partial u}{\partial t} + a \frac{\partial u}{\partial x} = 0 \quad x \in [-\pi,\pi], t\in I\!\!R,\\ u(x,0)=u_0(x)\\ u(.,t) \quad 2\pi\text{-périodique} \end{cases} \quad \quad(1) \end{equation}
Pour la suite on fixe $a=1$ et l'intervalle de temps de notre étude $[0,T]$ avec $T=8$. On note $k$ le pas de temps, $n$ l'indice au temps $t_n$, $h$ le pas en espace et $m$ l'indice au point $x_m$.
Pour les différents tests on prendra les 2 conditions initiales : \begin{equation*} u_0^1(x)= \begin{cases} e^{\frac{1}{x^2-1}} &\text{si } |x| < 1\\ 0 &\text{sinon} \end{cases} \quad\text{et}\quad u_0^2(x)= \begin{cases} 1-|x| &\text{si } |x| < 1\\ 0 &\text{sinon} \end{cases} \end{equation*}
In [1]:
%%file u01.m
function out=u01(x)
% 2\pi périodic
%n=int((x+pi)/(2*pi))
%x=x-n*2*pi
if abs(x)<1
out=exp(1/(x^2-1));
else
out=0;
end
end
In [2]:
%%file u02.m
function out=u02(x)
% 2\pi périodic
%n=int((x+pi)/(2*pi))
%x=x-n*2*pi
if abs(x)<1
out=1-abs(x);
else
out=0;
end
end
Obtenir une animation avec la supperposition de la solution exacte et solution calculée pour chaque cas.
Donner l'ordre des schémas, ainsi que les conditions de stabilité. Calculer et représenter le symboles de chaque schéma (voir cours), illustrer vos calcul par des choix judicieux de simulations et de courbes.
In [3]:
%plot -s 1600,800
In [4]:
% Paramètres de simulation
% espace
N=100;
h=2*pi/N;
x=linspace(-pi,pi,N+1)';
% temps
M=10;
k=h;
disp(k/h)
Out[4]:
In [5]:
% initiailsation
U0=zeros(N,1);
for i=1:N
U0(i)=u02(x(i+1));
end
plot(x(2:end),U0);
Out[5]:
In [6]:
A = sparse([],[],[],N,N,0);
for i=1:N
A(i,i)=1-k/h;
end
for i=2:N
A(i,i-1)=k/h;
end
A(1,N)=k/h;
Out[6]:
In [7]:
M=U0;
U=U0;
for n=1:240
U=A*U;
M=[M,U];
end
plot(x(2:end),M)
Out[7]:
In [8]:
A = sparse([],[],[],N,N,0);
for i=2:N
A(i,i-1)=1/2+k/h/2;
end
for i=1:N-1
A(i,i+1)=1/2-k/h/2;
end
A(1,N)=1/2+k/h/2;
A(N,1)=1/2-k/h/2;
Out[8]:
In [9]:
M=U0;
U=U0;
for n=1:240
U=A*U;
M=[M,U];
end
plot(x(2:end),M)
Out[9]:
In [10]:
A = sparse([],[],[],N,N,0);
for i=1:N
A(i,i)=1-(k/h)^2;
end
for i=2:N
A(i,i-1)=k/h/2+((k/h)^2)/2;
end
for i=1:N-1
A(i,i+1)=-k/h/2+((k/h)^2)/2;
end
A(1,N)=k/h/2+((k/h)^2)/2;
A(N,1)=-k/h/2+((k/h)^2)/2;
Out[10]:
In [11]:
M=U0;
U=U0;
for n=1:240
U=A*U;
M=[M,U];
end
plot(x(2:end),M)
Out[11]:
In [12]:
plot(x(2:end),U)
Out[12]:
In [12]:
A = sparse([],[],[],N,N,0);
for i=1:N
A(i,i)=1-(k/h)^2;
end
for i=2:N
A(i,i-1)=k/h/2+((k/h)^2)/2;
end
for i=1:N-1
A(i,i+1)=-k/h/2+((k/h)^2)/2;
end
A(1,N)=k/h/2+((k/h)^2)/2;
A(N,1)=-k/h/2+((k/h)^2)/2;
Out[12]:
In [ ]:
U
In [ ]:
plot(1:10,1:10)
In [ ]:
? spzeros
In [ ]:
M=U0;
U=U0;
In [ ]:
M=[M,U]
In [ ]: