Vous êtes sur la page 1sur 7

Analyse numerique des equations dierentielles

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

(t) = f(t, y(t)), 0 t T,


y(0) = y
0
,
(1)
o` u f : [0, T] R
d
R
d
est une fonction reguli`ere et y
0
R
d
.
Programmation des methodes classiques
Pour lapproximation numerique, on note h le pas de la subdivision uniforme (t
n
)
N
n=0
de lintervalle [0, T] : t
n
= nh et y
n
est une approximation de y(t
n
) pour 0 n N.
On a choisi de presenter ici les cinq methodes ci-dessous.
Euler explicite y
n+1
= y
n
+hf(t
n
, y
n
)
Heun y
n+1
= y
n
+
h
2
_
f(t
n
, y
n
) +f(t
n+1
, y
n
+hf(t
n
, y
n
))
_
Runge-Kutta (RK4)

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 + 1 +t avec y(0) = 2, (2)


dont la solution exacte est donnee par
y(t) = t + 2e
t
. (3)
Le tableau ci-dessous consigne les erreurs entre la solution exacte et la solution ap-
prochee pour = 500 et h = 0.01.
Methode max
0nN
|y
n
y(t
n
)|
pas h = 0.01 h = 0.001
Euler explicite 2.1990e+12 0.2358
Heun 7.7519e+18 0.0455
RK4 1.0983e+23 5.8281e-04
Euler implicite 0.3115 0.1526
Cranck-Nicolson 0.8653 0.0159
Tab. 2 Performance des methodes pour le syst`eme (2)
avec = 500 et h = 0.01 et h = 0.001.
On observe ici que seules les methodes implicites fournissent une approximation raison-
nable de la solution pour le pas h = 0.01. Lexemple (2) est extrait de [2] ; on peut etudier
le comportement des methodes dEuler sur cette equation. Notons (y
e
n
) et (y
i
n
) les suites
respectivement construites par les methodes dEuler explicite et implicite. Par denition,
y
e
n+1
= y
e
n
+h((t
n
y
e
n
) + 1) ;
y
i
n+1
= (1 +h)
1
_
y
i
n
+ht
n+1
+h
_
.
Comme est grand, la solution (3) est rapidement proche de t t ; on cherche ` a savoir
si cette propriete est conservee par les schemas. Il est facile de voir que, pour h xe, la
quantite y
i
n+1
est proche de t
n+1
pour les grandes valeurs de . En revanche, si on suppose
que y
e
n
est proche de t
n
, alors y
e
n
nest proche de t
n+1
que si h 1. Cette condition
impose un choix du pas h tr`es petit si lon veut approcher correctement la solution de (2),
une telle equation est appelee raide. Il est dicile de donner une denition de la raideur ;
on retiendra que la solution dun probl`eme raide met en jeu des phenom`enes : lun est lent
et regulier terme t dans (3) le second est rapide et a un eet ` a temps court terme
2e
t
.
Les probl`emes raides interviennent souvent dans les applications o` u dierentes echelles
coexistent (reactions chimiques avec des vitesses caracteristiques tr`es dierentes, voir [4]
par exemple). Les methodes explicites doivent etre utilisees avec un pas de temps tr`es
petit pour etre ecaces (ce que montrent les resultats du tableau 2 pour h = 0.001),
cest pourquoi on leur pref`ere les methodes implicites pour la resolution numerique des
probl`emes raides.
5
Methodes symplectiques : syst`emes hamiltonniens
On a vu dans le paragraphe precedent quune methode implicite dordre 1 pouvait
etre plus performante quune methode explicite dordre 4 dans le cas dun probl`eme raide.
Interessons-nous maintenant au probl`eme lineaire suivant :
_
x

= 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

Vous aimerez peut-être aussi