Vous êtes sur la page 1sur 11

Equations Dierentielles Ordinaires

Abdennacer Ahmanache

Université Akli Mohand Oulhadj de Bouira


Département de Génie Mécanique
Octobre 2021

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.

1.2 Développement en série de Taylor

D'une manière générale nous serons amené à résoudre le problème suivant :

(
dy
= f (x, y)
dx (1)
y(x0 ) = y0

Considérons, à titre d'exemple, le problème suivant :

(
dy
=x+y
dx (2)
y(0) = 1

Ce problème admet la solution analytique suivante :

y(x) = 2ex − x − 1 (3)


Développons en série de Taylor la fonction y(x) autour du point x0 :
′′ ′′′
′ y (x0 ) y (x0 )
y(x) = y(x0 ) + y (x0 )(x − x0 ) + (x − x0 )2 + (x − x0 )3 + o(h4 ) (4)
2! 3!
Si on pose (x − x0 ) = h on obtiens la série de Maclaurin :
′′ ′′′
′ y (x0 ) 2 y (x0 ) 3
y(x) = y(x0 ) + y (x0 )h + h + h + o(h4 ) (5)
2! 3!
Dans notre cas x0 = 0 donc y(x0 ) = y(0) = 0 ce qui correspond au premier terme de notre série. Pour
obtenir le deuxième terme on utilise l'équation y(x0 ) = x0 +y(x0 ) = 0+1 = 1 Les autres termes sont obtenus
par dérivation successive de l'équation 1 :
 ′′ ′

 y ′′′(0) = 1 +′′ y (0) = 1 + 1 = 2






 y (0) = 1y (0) = 2

y iv (0) = 2
 ..
.





y n (0) = 2

Pour x = h notre série de Maclaurin s'écrit :


1 1
y(h) = 1 + h + h2 + h3 + h4 + error (6)
3 12
On peut donc résumer notre solution, à quatre chires après la virgule, sur le tableau 1 suivant :

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

L'erreur de troncature de la série de Taylor s'exprime ainsi :

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.

1.3 Méthode d'Euler

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

En reprenant le développement en série de Maclaurin, equation 5, et en considérant h susamment faible


pour opérer une troncature à l'ordre deux on obtiens :

y(x) = y(x0 ) + hy (x0 ) + o(h2 ) (8)

Dans cette équation y(x0 ) est donnée par la condition initiale et y (x0 ) est calculée à partir de f (x0 , y0 ).
Pour utiliser cette méthode de manière itérative il va falloir calculer la solution pour x = x0 + 2h, ensuite
pour x = x0 + 3h et ainsi de suite jusqu'à atteindre la solution cherchée.
Cette démarche itérative peut être formulée par l'algorithme d'Euler suivant :
a) Début

yn+1 = yn + hy + o(h2 ) (9)
b) En partant de la solution (x0 , y0 ) et en choisissant un pas spatial noté h et un nombre d'itérations n
c) Pour i allant de 0 jusqu'à n faire le calcul suivant :



 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

En choisissant h = 0.02 calculez y(0.1) . Comparez à la solution analytique 1.1103.


Solution
la solution est résumée dans le tableau 2 suivant :
′ ′
Itération xn yn yn hyn
1 0 1.0000 1.0000 0.0200
2 0.02 1.0200 1.0400 0.0208
3 0.04 1.0408 1.0808 0.0216
4 0.06 1.0624 1.1224 0.0224
5 0.08 1.0848 1.1648 0.0233
0.10 1.1081

Table 2  solution

Par rapport à la solution analytique l'erreur est de 0.0022.

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

1.4 Méthode de prédiction-correction

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 :

Predictor : yn+1 = yn + hyn′ ,


(
′ ′ (11)
Corrector : yn+1 = yn + h yn +y2 n+1
L'équation Predictor donne une première estimation de la solution en utilisant la formule d'Euler, une
deuxième équation appelée Corrector vient améliorer le résultat
a) En partant de la solution (x0 , y0 ) et en choisissant un pas spatial noté h et un nombre d'itération n
b) Pour i allant de 0 jusqu'à n faire le calcul suivant :




 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

1.5 Méthodes de Runge-Kutta

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

Le développement en série de Taylor de la fonction f , à l'ordre deux, donne l'expression suivante :


′′
y (x0 ) 2

h + o(h3 )
y(x) = y(x0 ) + hy (x0 ) + (14)
2!
Sachant que h = (x − x0 ) l'équation précédente peut être réécrite comme suit :

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 et ηi s'expriment comme suit : 


ξi = xm + αi h,
Pn
(18)
ηi = ym + βij kj
j=1

α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 :

ym+1 = ym + w1 hf (xm , ym ) + w2 hf (xm + α2 h, ym + β21 hf (xm , ym )) (23)

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

Vous aimerez peut-être aussi