Académique Documents
Professionnel Documents
Culture Documents
Gregory Vial
10 mars 2003
Le but de ces quelques pages est de montrer comment programmer facilement et ef-
cacement les schemas classiques de resolution numerique des equations dierentielles ` a
laide de matlab. On met en evidence leurs ordres de convergence respectifs sur un exemple
simple. Cependant, un ordre de consistance eleve nest pas toujours la garantie dune bonne
approximation, notamment dans le cas de probl`emes raides ou de syst`emes hamiltonniens.
Le probl`eme de Cauchy
On sinteresse ` a lequation dierentielle avec condition initiale suivante :
_
y
k
n
1
= f(t
n
, y
n
)
k
n
2
= f(t
n
+
h
2
, y
n
+
h
2
k
n
1
)
k
n
3
= f(t
n
+
h
2
, y
n
+
h
2
k
n
2
)
k
n
4
= f(t
n+1
, y
n
+hk
n
3
)
y
n+1
= y
n
+
h
6
_
k
n
1
+ 2k
n
2
+ 2k
n
3
+k
n
4
_
Euler implicite y
n+1
= y
n
+hf(t
n+1
, y
n+1
)
Cranck-Nicolson
y
n+
1
2
= y
n
+
h
2
f
_
t
n
+
h
2
, y
n+
1
2
_
y
n+1
= y
n
+hf
_
t
n
+
h
2
, y
n+
1
2
_
1
Les fonctions matlab suivantes denissent ces methodes :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% M ethode dEuler explicite
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=eulE(y0,h,T);
y=[y0];yy=y0;
N=floor(T/h);t=0;
for i=1:N,
yy=yy+h*F(t,yy);
y=[y,yy];t=t+h;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% M ethode de Heun
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=heun(y0,h,T);
y=[y0];yy=y0;
N=floor(T/h);t=0;
for i=1:N,
yy=yy+h/2*(F(t,yy)
+F(t+h,yy+h*F(t,yy)));;
y=[y,yy];t=t+h;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% M ethode RK4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=RK4(y0,h,T);
y=[y0];yy=y0;
N=floor(T/h);t=0;
for i=1:N,
k1=f(t,yy);
k2=f(t+h/2,yy+h/2*k1);
k3=f(t+h/2,yy+h/2*k2);
k4=f(t+h,yy+h*k3);
yy=yy+h/6*(k1+2*k2+2*k3+k4);
y=[y,yy];t=t+h;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% M ethode dEuler implicite
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=eulI(y0,h,T);
y=[y0];yy=y0;
N=floor(T/h);t=0;
for i=1:N,
yy=newton(t,h,yy);
y=[y,yy];t=t+h;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% M ethode de Cranck-Nicolson
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=CN(y0,h,T);
y=[y0];yy=y0;
N=floor(T/h);t=0;
for i=1:N,
y2=newton(t+h/2,h/2,yy);
yy=y2+h/2*F(t+h/2,y2);
y=[y,yy];t=t+h;
end;
Les trois premi`eres methodes sont explicites : la determination de y
n+1
` a partir de y
n
est un simple calcul. Les deux derni`eres, en revanche, sont implicites : il est necessaire de
resoudre une equation ` a chaque iteration. Si f est non-lineaire, cette equation est non-
lineaire ; cest pourquoi on a programme une methode de Newton.
function x=newton(t,h,yn)
x=yn+h*F(t,yn);
err=1;eps=1e-9;
while err>eps,
b=-Phi(t,x,h,yn);
A=DPhi(t,x,h);
y=A\b;
x=x+y;
err=norm(y);
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fonctions annexes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=Phi(t,x,h,yn);
y=x-h*F(t,x)-yn;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=DPhi(t,x,h)
y=eye(length(x))-h*DF(t,x);
Precision des methodes : ordre de convergence
Pour chacune des cinq methodes presentees au paragraphe precedent, une etude de
lerreur de consistance permet de montrer lestimation suivante (on suppose y C
p+1
).
max
0nN
|y
n
y(t
n
)| Ch
p
sup
0tT
|y
p+1
(t)|.
2
Methode p
Euler explicite 1
Heun 2
RK4 4
Euler implicite 1
Cranck-Nicolson 2
Tab. 1 Ordres de convergence des methodes.
Le nombre p est appele ordre de convergence ; le tableau ci-dessus precise sa valeur pour
les methodes decrites plus haut.
Pour plus de details pour lanalyse des schemas, on pourra se reporter ` a [1].
An de mettre en evidence la dierence de precision entre les dierentes methodes, on
les a appliquees sur lexemple suivant :
y
= y avec y(0) = 2.
Le script suivant permet de comparer les vitesses de convergence de la quantite
max
0nN
|y
n
y(t
n
)|
en fonction de h.
function y=DF(t,x);
y=-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=F(t,x);
y=-x;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=5;
y0=2;
nn=10:10:100;
err=zeros(5,length(nn));
k=0;
for n=nn
k=k+1;
h=1/n;
t=0:h:T;
yex=y0*exp(-t);
err(1,k)=norm(eulE(y0,h,T)-yex
,inf);
err(2,k)=norm(heun(y0,h,T)-yex
,inf);
err(3,k)=norm(RK4(y0,h,T)-yex
,inf);
err(4,k)=norm(eulI(y0,h,T)-yex
,inf);
err(5,k)=norm(CN(y0,h,T)-yex
,inf);
end
N=[];
for i=1:5
N=[N;nn];
pente=polyfit(log(nn)
,log(err(i,:)),1);
pente(1)
end
plot(log(N),log(err))
grid on
legend(Euler explicite,Heun,RK4
,Euler implicite,Cranck Nicolson)
xlabel(Entier n tel que h=1/n)
ylabel(log|erreur|)
title(Erreurs en coordonn ees
logarithmiques)
La gure 1 represente les courbes obtenues pour les cinq schemas avec T = 5 et h = 0.1,
ainsi que la solution exacte. An dobserver les ordres de convergence des methodes, on a
trace en coordonnees logarithmiques la norme de y
h
y en fonction de h (y
h
designe
la solution approchee pour la valeur h du pas).
3
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
t
y
(
t
)
Solution exacte et solutions approches
Solution exacte
Euler explicite
Heun
RK4
Euler implicite
Cranck Nicolson
Fig. 1 Approximation de la solution de y
= y.
Le graphe de la gure 2 permet destimer les ordres de convergence, qui concident
avec les ordres theoriques donnes dans le tableau 1. Precisement la commande polyfit,
qui eectue une regression lineaire, donne les ordres suivants :
Ordre theorique 1 2 4 1 2
Ordre estime 1.015 2.027 4.030 0.985 2.000
2 2.5 3 3.5 4 4.5 5
-25
-20
-15
-10
-5
0
Entier n tel que h=1/n
l
o
g
|
e
r
r
e
u
r
|
Erreurs en coordonnes logarithmiques
Euler explicite
Heun
RK4
Euler implicite
Cranck Nicolson
Fig. 2 Ordres de convergence des dierentes methodes.
4
Necessite de methodes implicites : probl`emes raides
Le paragraphe precedent a montre que les methodes utilisees netaient plus ou moins
precises. Cependant, il ne faut pas croire que la methode RK4 est toujours la plus perfor-
mante des cinq methodes decrites.
Considerons en eet le probl`eme de Cauchy suivant :
y
= y
y
= x
avec x(0) = 1 et y(0) = 0. (4)
La solution est donnee par [x(t) = cos t, y(t) = sin t] et la trajectoire dans la plan de phase
est le cercle unite. La quantite
H(t) = x
2
(t) +y
2
(t)
est constante ; on la nomme hamiltonnien du syst`eme (4).
-4 -3 -2 -1 0 1 2 3 4
-1.5
-1
-0.5
0
0.5
1
Euler implicite
x
y
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3
3.5
Valeur de l'hamiltonnien au cours du temps
t
H
(
t)
-3 -2 -1 0 1 2 3
-1
-0.5
0
0.5
1
Heun
x
y
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3
3.5
Valeur de l'hamiltonnien au cours du temps
t
H
(
t)
-3 -2 -1 0 1 2 3
-1
-0.5
0
0.5
1
RK4
x
y
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3
3.5
Valeur de l'hamiltonnien au cours du temps
t
H
(
t)
-2 -1 0 1 2
-0.5
0
0.5
Euler implicite
x
y
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3
3.5
Valeur de l'hamiltonnien au cours du temps
t
H
(
t)
-3 -2 -1 0 1 2 3
-1
-0.5
0
0.5
1
Cranck-Nicolson
x
y
0 2 4 6 8 10 12
0
0.5
1
1.5
2
2.5
3
3.5
Valeur de l'hamiltonnien au cours du temps
t
H
(
t)
Fig. 3 Trajectoire et hamiltonnien pour les cinq methodes.
6
On observe sur la gure 3 les solutions obtenues avec les dierentes methodes pour
h = 0.1 et T = 4. On a represente la trajectoire dans le plan de phase ainsi que levolution
de lhamiltonnien H(t) au cours du temps. Les methodes dEuler (explicite et implicite)
ne conservent pas lhamiltonnien, alors que les trois autres methodes le gardent presque
constant. Precisement, on peut verier que
Euler explicite x
2
n+1
+y
2
n+1
= (1 +h
2
)(x
2
n
+y
2
n
) ;
Heun x
2
n+1
+y
n+1
=
_
1 +
h
4
4
_
(x
2
n
+y
2
n
) ;
RK4 x
2
n+1
+y
n+1
=
_
1
h
6
72
+
h
8
576
_
(x
2
n
+y
2
n
) ;
Euler implicite x
2
n+1
+y
2
n+1
=
_
1 +h
2
_
1
(x
2
n
+y
2
n
) ;
Cranck-Nicolson x
2
n+1
+y
2
n+1
= x
2
n
+y
2
n
;
ce qui explique les comportements obtenus sur la gure 3. Remarquons que seule la
methode de Cranck-Nicolson conserve exactement lhamiltonnien : elle est dite symplec-
tique ; les methodes de Heun et RK4 sont dites asymptotiquement symplectiques.
Pour plus de details sur les methodes symplectiques, voir [3]. On retiendra que dans
le cas de syst`emes du type (4), o` u une quantite est conservee au cours du temps, il est
crucial que le schema utilise conserve au moins approximativement cette quantite.
On trouve un exemple typique dapplication conduisant ` a un syst`eme hamiltonnien
dans le mod`ele proie-predateur de Lotka-Volterra. Les methodes numeriques ont des com-
portement voisins dans le cas lineaire etudie ici (il est ` a noter que lhamiltonnien nest plus
constant, meme pour la methode de Cranck-Nicolson, pour laquelle il oscille autour de sa
valeur theorique).
References
[1] M. Crouzeix, A. L. Mignot. Analyse numerique des equations dierentielles. Col-
lection mathematiques appliquees pour la matrise. Masson, Paris 1984.
[2] K. Dekker, J.-G. Verwer. Stability of Runge-Kutta methods for sti nonlinear
dierential equations. CWI Monographs. North-Holland, Amsterdam 1984.
[3] E. Hairer, S. P. Nrsett, G. Wanner. Solving ordinary dierential equations. I.
Springer-Verlag, Berlin, second edition 1993. Nonsti problems.
[4] E. Hairer, G. Wanner. Solving ordinary dierential equations. II, volume 14 of
Springer Series in Computational Mathematics. Springer-Verlag, Berlin, second edition
1996. Sti and dierential-algebraic problems.
7