Académique Documents
Professionnel Documents
Culture Documents
Abdennacer Ahmanache
1
Table des matières
1 Équations diérentielle ordinaires 2
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Développement en série de Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Méthode d'Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Méthode de prédiction-correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Méthodes de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1
1 Équations diérentielle ordinaires
1.1 Introduction
Les équations diérentielles ordinaires (EDO) décrivent le comportement de plusieurs phénomènes phy-
siques. Nous citerons comme exemple l'équation du mouvement d'un point matériel, le système masse-ressort,
l'équation de la chaleur, les circuits RLC, les réactions chimiques, la exion des poutres, les systèmes oscil-
lants tels que les pendules ...etc. Un grand nombre de ces EDO sont insolubles analytiquement d'où l'intérêt
d'utiliser les méthodes numériques. Dans ce chapitre nous allons décrire les méthodes numériques les plus
importantes de résolution des ODE.
(
dy
= f (x, y)
dx (1)
y(x0 ) = y0
(
dy
=x+y
dx (2)
y(0) = 1
2
x y solution analytique
0.0000 1.0000 1.0000
0.1000 1.1103 1.1103
0.2000 1.2428 1.2428
0.3000 1.3997 1.3997
0.4000 1.5835 1.5836
0.5000 1.7969 1.7974
Table 1 solution
y (v) (ξ) 5
Error = h ,0 < ξ < h (7)
5!
Cependant le calcul de l'erreur de troncature est pratiquement impossible car nous ne connaissons pas la
dérivée au point h. Pratiquement la troncature est décidée lorsque l'apport du dernier terme est négligeable
pour la solution à la précision xée.
Considérons, à nouveau, le problème que nous avons posé dans la section précédente à savoir trouver la
solution d'une équation diérentielle ordinaire avec une condition initiale :
(
dy
dx = f (x, y)
y(x0 ) = y0
′
yn+1 = yn + hyn
xn+1 = xn + h (10)
Ecrire xn+1 et yn+1
d) Fin
3
Exemple d'application
An de mettre en ÷uvre l'algorithme d'Euler considérons l'exemple traité précédemment (eq. 2) :
(
dy
dx =x+y
y(0) = 1
Table 2 solution
Programme Matlab
Voici un programme écrit en Matlab qui permet de mettre en ÷uvre l'algorithme d'euler :
Fichier principal
clear all ;
clc ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% initialisation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = 0.02;
x = 0.;
y = 1.;
n = 5;
data1 = f o p e n ( ' data . dat ' , 'w ' ) ;
f p r i n t f ( data1 , '%4s %5s \n ' , ' x ' , ' y ' ) ;
f p r i n t f ( data1 , '%1s \n ' , '============= ' ) ;
f p r i n t f ( data1 , ' %6.4 f %6.4 f \n ' , x , y ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fin i n i t i a l i s a t i o n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = 1:1:5
[ y , k , f ] = eulr (h , x , y) ;
x = x + h;
f p r i n t f ( data1 , ' %6.4 f %6.4 f \n ' , x , y ) ;
end
f c l o s e ( data1 ) ;
Programme 1
chier eulr.m
4
function [ y , k , f ] = eulr (h , x , y)
f = Eulerf (x , y) ;
k = h* f ;
y = y + k;
Programme 2
chier Eulerf.m
function f = Eulerf (x , y)
f = x + y ;
Programme 3
La précision de la méthode d'Euler dépend du pas spatial h, pour gagner en précision il va falloir réduire
leplus possible le pas spatial. La réduction du pas spatial va exiger plus d'itérations et plus de temps de
calcul. La méthode d'Euler peut être modiée an de gagner en précision et en temps de calcul en utilisant
l'algorithme d'Euler modié ou la paire d'équations de prédiction-correction qui s'écrit comme suit :
′
ypred = yn + hyn = yn + hf (xn , yn )
′ ′
y +y f (x ,y )+f (x ,y )
yn+1 = yn + h n 2 n+1 = yn + h n n 2 n+1 pred
(12)
nn+1 = xn + h
Écrire xn+1 et yn+1
c) Fin de calcul
Exemple d'application :
Reprenons l'exemple précédent an de comparer les deux algorithme :
dy
= x + y, y(0) = 1, h = 0.02 (13)
dx
L'application de l'algorithme de prediction-correction est résumé sur le tableau 3 suivant :
Nous remarquons qu'après 5 itérations la solution numérique est de 1.104, par rapport à la solution
analytique 1.1103 l'erreur est cette fois ci de 0.0001 . Pour obtenir le même résultat il faut une centaine
d'itérations avec l'algorithme d'Euler !
5
′ ′ ′ ′ ′
Itération xn yn yn hyn yn+1 yn+1 yav hyav
1 0 1.0000 1.0000 0.0200 1.0200 1.0400 1.0200 0.0204
1.0204 1.0404 1.0202 0.0204
2 0.02 1.0204 1.0404 0.0208 1.0412 1.0812 1.0608 0.0212
1.0416 1.0816 1.0610 0.0212
3 0.04 1.0416 1.0816 0.0216 1.0632 1.1232 1.1024 0.0220
1.0636 1.1236 1.1026 0.0221
1.0637 1.1237 1.1027 0.0221
4 0.06 1.0637 1.1237 0.0225 1.0862 1.1662 1.1449 0.0229
1.0866 1.1666 1.1451 0.0229
5 0.08 1.0866 1.1666 0.0232 1.1099 1.2099 1.1883 0.0238
1.1104 1.2104 1.1885 0.0238
0.10 1.1104
Table 3 solution
Voici un programme écrit en Matlab qui permet de mettre en ÷uvre l'algorithme d'euler :
Fichier principal
clear all ;
clc ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% initialisation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = 0.02;
x = 0.;
y = 1.;
n = 5;
data2 = f o p e n ( ' p r e d c o r . dat ' , 'w ' ) ;
f p r i n t f ( data2 , '%4s %5s \n ' , ' x ' , ' y ' ) ;
f p r i n t f ( data2 , '%1s \n ' , '============= ' ) ;
f p r i n t f ( data2 , ' %6.4 f %6.4 f \n ' , x , y ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fin i n i t i a l i s a t i o n
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f o r i = 1 : 1 : n+1
s ( i )=x ;
t ( i )=y ;
z ( i ) = 2 . * exp ( x )=x =1;
[ ypred , k , f 0 ] = pred ( h , x , y ) ;
k0 = h* f 0 ;
x1 = x + h ;
f 1 = E u l e r f ( x1 , ypred ) ;
k1 = h* f 1 ;
y = y + 0 . 5 * ( k0 + k1 )
x = x + h;
f p r i n t f ( data2 , ' %6.4 f %6.5 f \n ' , x , y ) ;
end
f c l o s e ( data2 ) ;
6
p l o t ( s , t , ' o ' , s , z , '+ ' ) ;
Programme 4
chier Eulerf.m
function f = Eulerf (x , y)
f = x + y ;
Programme 5
chier pred.m
f u n c t i o n [ y , k , f ] = pred ( h , x , y )
f = Eulerf (x , y) ;
k = h* f ;
y = y + k;
Programme 6
An d'augmenter la précision du calcul et de diminuer le temps de calcul surtout en évitant le calcul des
dérivées une nouvelle méthode est proposé par les mathématiciens allemands Runge en 1885 et Kutta en
1901. Cette méthode consiste à construire une solution qui dépende de f (x, y) et non pas de ses dérivées.
An d'exposer cette méthode considérons à nouveau le système EDO 1 que nous avons posé au début de ce
chapitre :
(
dy
dx= f (x, y)
y(x0 ) = y0
h2 ∂f
∂f
ym+1 = ym + hf (xm , ym ) + +f + o(h3 ) (15)
2 ∂x ∂y
L'idée principale des méthodes de Runge-Kutta est de représenter ym+1 comme une combinaison linéaire :
p
X
ym+1 = ym + wi ki (16)
i=1
les wi sont des coecients de pondération et les ki sont proportionnels à la fonction f(x,y) :
ki = hf (ξi , ηi ) (17)
αi , βij , et wi sont des paramètres qu'il va falloir ajuster an de correspondre la combinaison linéaire 17
précédente à la série de Taylor 16
7
αi , βij , et wi sont des paramètres qu'il va falloir ajuster an de correspondre la combinaison linéaire
précédente à la série de Taylor.
Nous pouvons, déjà, poser de manière arbitraire et non restrictive : α1 = 0, β11 = 0, ξ1 = xm , η1 = ym
ce qui nous garantira le premier terme hf (xm , ym ) dans l'équation 16. Nous obtenons donc les diérentes
valeurs des ki :
k1 = hf (xm , ym )
k = hf (x + α h, y + β k ),
2 m 2 m 21 1
(19)
k3 = hf (x m + α 3 h, ym + β 31 k1 + β32 k2 ),
.........
On peut maintenant calculer les paramètres αi , βij et wi pour les diérentes valeures de p de ma nière à faire
correspondre les coecients de la combinaison linéaire de Runge-Kutta à la série de Taylor comme suit :
pour p = 1 le calcul donne :
ym+1 = ym + hf (xm , ym ) (20)
pour p = 2 le calcul donne :
ym+1 = ym + w1 k1 + w2 k2 (21)
et respectivement (
k1 = hf (xm , ym )
(22)
k2 = hf (xm + α2 h, ym + β21 k1 ),
En combinant les équations 21 et 22 on obtient l'équation suivante :
Le développement en série de Taylor d'une fonction à deux variables, à l'ordre 1, s'écrit comme suit :
∂f ∂f
f (x, y) = f (x0 , y0 ) + [(x − x0 ) + (y − y0 ) ] + ϵ (24)
∂x ∂y
En appliquant ce développement au dernier terme de l'équation 23 nous obtenons l'équation suivante :
∂f ∂f
ym+1 = ym + (w1 + w2 )hf (xm , ym ) + h2 w2 α2 + w2 β21 f (25)
∂x ∂y xm ,ym
En comparant cette formule avec l'équation 15 et en égalisant les termes de même puissance nous obtenons :
w1 + w2 = 1
w2 α2 = 1/2 (26)
w2 β21 = 1/2
Ce système de 4 équations à 3 inconnues n'admet pas de solution unique. un choix simple w2 = 1/2 permet
de déduire les valeurs suivantes
α2 = β21 = 1
w1 + w2 = 1/2
La formule de Runge-Kutta pour p = 2 21 s'écrit donc :
1
ym+1 = ym + (k1 + k2 ) + o(h3 ) (27)
2
avec
(
k1 = hf (xm , ym ),
(28)
k2 = hf (xm + h, ym + k1 )
8
En combinant ces deux derniers résultats nous obtenons la solution de Runge-Kutta à l'ordre 2 :
h
ym+1 = ym + [f (xm , ym ) + f (xm + h, ym + hf (xm , ym ))] (29)
2
La solution la plus utilisée est la formule de Runge-Kutta d'ordre 4 (p = 4) La même démarche que celle
presentée précédemment permet de retrouver la formule de Rubge-Kutta d'ordre 4 suivante :
1
ym+1 = ym + (k1 + 2k2 + 2k3 + k4 ) + o(h5 ) (30)
6
avec
k1 = hf (xm , ym ),
k = hf (x + 1 h, y + 1 k )
2 m m 2 1
2 (31)
k3 = hf (xm + 21 h, ym + 12 k2 )
k4 = hf (xm + h, ym + k3 )
Exemple d'application :
Reprenons l'exemple précédent et appliquons la méthode de Runge-Kutta à 4 points, cette fois ci en prenant
un pas de 0.1 :
k1 = 0.1
k2 = 0.11
k3 = 0.11050
k4 = 0.12105
y(0.1) = y(0) + 61 (0.10000 + 0.2200 + 0.22100 + 0.12105)
y(0.1) = 1.11034
Ici nous remarquons que pour un pas de 0.1 un simple calcul de sommation et on retrouve la solution
analytique après 04 chires après la virgule ! Voici un programme écrit en Matlab qui permet de mettre en
÷uvre l'algorithme de Runge-Kutta :
Fichier principal
% initialisation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = 0.1;
x = 0.;
y = 1.;
n = 50;
data2 = f o p e n ( 'RK. dat ' , 'w ' ) ;
f p r i n t f ( data2 , '%4s %5s \n ' , ' x ' , ' y ' ) ;
f p r i n t f ( data2 , '%1s \n ' , '============= ' ) ;
%f p r i n t f ( data2 , ' % 6 . 4 f %6.4 f \n ' , x , y ) ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fin i n i t i a l i s a t i o n
for i = 1:1:n
s( i ) = x;
t( i ) = y;
y = RK4 ( x , y , h ) ;
x = x + h;
f p r i n t f ( data2 , ' %7.5 f %7.4 f \n ' , x , y ) ;
9
end
f c l o s e ( data2 ) ;
plot (s , t , 'o ' ) ;
Programme 7
chier RK4.m
f u n c t i o n y = RK4( x , y , h )
k1 = h*RKfun ( x , y ) ;
k2 = h*RKfun ( x+h / 2 , y+k1 / 2 ) ;
k3 = h*RKfun ( x+h / 2 , y+k2 / 2 ) ;
k4 = h*RKfun ( x+h , y+k3 ) ;
y = y+1/6*( k1+2*k2+2*k3+k4 ) ;
num2str ( y , 6 ) ;
Programme 8
chier RKfun.m
f u n c t i o n f = RKfun ( x , y )
f = x + y ;
Programme 9
10