Vous êtes sur la page 1sur 27

Chapitre 2 : Résolution numérique des équations

diérentielles ordinaires
Babacar LEYE
13 septembre 2019

Table des matières


1 Introduction 2
2 Méthode d'Euler explicite 2
2.1 Analyse d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Calcul des erreurs de troncature . . . . . . . . . . . . . . . . . . . 6
3 Méthodes de Taylor d'ordre élevés 6
4 Méthodes de Runge-Kutta 9
4.1 Méthode de Runge-Kutta d'ordre 2 (RK2) . . . . . . . . . . . . . 9
4.1.1 Méthode d'Euler améliorée . . . . . . . . . . . . . . . . . 9
4.1.2 Méthode de Heun . . . . . . . . . . . . . . . . . . . . . . 10
4.2 Méthode de Runge-Kutta d'ordre 4 (RK4) . . . . . . . . . . . . . 11
5 Méthodes multipas 13
5.1 Méthode de Crank-Nicholson . . . . . . . . . . . . . . . . . . . . 14
5.2 Méthode d'Euler implicite . . . . . . . . . . . . . . . . . . . . . . 14
6 Systèmes d'équations diérentielles 14
6.1 Transformation en un système dEDO du premier ordre . . . . . . 15
6.2 Résolution des systèmes d'EDO du premier ordre . . . . . . . . . 16
7 Stabilité 18
7.1 Euler explicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
7.2 Euler implicite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8 Travaux dirigés 20
8.1 Méthode d'Euler explicite . . . . . . . . . . . . . . . . . . . . . . 20
8.2 Méthodes de Taylor d'ordre élevés . . . . . . . . . . . . . . . . . 21
8.3 Méthodes de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . 22
8.4 Méthode RK4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
8.5 Système d'EDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

1
1 Introduction
Dans ce chapitre, nous présentons diérentes méthodes pour résoudre nu-
mériquement les équations diérentielles. Les notions de stabilité des schémas
numériques seront aussi abordés. Les méthodes numériques pour une équation
diérentielle du premier ordre seront présentées. Certaines de ces méthodes se-
ront étendues et utilisées pour résoudre les équations diérentielles d'ordre plus
élevé et les systèmes d'équations diérentielles.
Une équation diérentielle du premier ordre s'écrit comme suit :

(1)
0
y = f (x, y), y(a) = y0 , x 0 = a ≤ x ≤ b = xn ,
où y0 est la condition initiale. On suppose que l'équation admet une unique
solution y(x) dans l'intervalle [a, b].
L'intervalle est divisé en n segments de longueur égale à h tels que

x1 = x0 + h, x2 = x0 + 2h, · · · , xn = x0 + nh.
La solution au point x0 est donnée par la condition initiale. L'objectif est de
trouver une estimation de la solution aux points x1 , x2 , ..., xn .
Les méthodes à un pas trouvent la solution approchée yi+1 au point xi+1
en extrapolant à partir de la solution approchée yi au point précédent xi . La
façon dont la nouvelle estimation est extrapolée à partir de l'ancienne dépend
spéciquement de la méthode numérique utilisée,

yi+1 = yi + hψ, i = 0, 1, 2, ..., n − 1. (2)


Partant de la condition initiale y0 , l'équation (2) est appliquée dans chaque
sous-intervalle [xi , xi+1 ] pour trouver les estimations en x1 , x2 , ..., xn . La plus
simple des méthodes à un pas est la méthode d'Euler explicite expliquée ci-
dessous.

2 Méthode d'Euler explicite


Le développement de Taylor de y(x1 ) au voisinage de x0 s'écrit
0 1 2 00
y(x1 ) = y(x0 + h) = y(x0 ) + hy (x0 ) + h y (x0 ) + · · ·
2!
En retenant les termes linéaires uniquement, l'équation ci-dessus se réécrit
comme suit
0 1 2 00
y(x1 ) = y(x0 ) + hy (x0 ) + h y (ζ0 ),
2!
où ζ0 ∈]x0 , x1 [. En général, en développant y(xi+1 ) par rapport xi , on obtient
0 1 2 00
y(xi+1 ) = y(xi ) + hy (xi ) + h y (ζi ),
2!

2
où ζi ∈]xi , xi+1 [. On rappelle, d'après l'équation (1), que y (xi ) = f (xi , yi ).
0

En notant yi = y(xi ) et yi+1 = f (xi+1 ), l'estimation yi+1 peut être trouvée via

yi+1 = yi + hf (xi , yi ), i = 0, 1, · · · , n − 1 (3)


connu sous le nom de schéma d'Euler explicite. En comparant avec la formule
générale, on voit que la pente ψ est estimée par f (xi , yi ).
La fonction EulerExplicite (dans le chier EulerExplicite.sci ) utilise
la méthode d'Euler explicite pour estimer la solution d'un problème de Cauchy.

Code Scilab 1 (Euler explicite).


function y=EulerExplicite(f,x,y0)
// f est une fonction representant f(x,y)
// x est un vecteur contenant les noeuds du maillage
// y0 est un scalaire représentant la valeur initiale de y
// y est le vecteur solution estime sur les noeuds du maillage

y = zeros(x);
y(1) = y0;
h = x(2)-x(1);
n = length(x);

for i=1:n-1
y(i+1) = y(i) + h*f(x(i),y(i));
end

endfunction

Exemple 1 (Euler explicite). On considère l'équation diérentielle suivante :


1
(4)
0
2y + y = e−x , y(0) = , 0 ≤ x ≤ 1.
2
La solution exacte est
3 −x/2
yexact (x) = e − e−x .
2
Nous allons résoudre numériquement le problème avec la méthode d'Euler
explicite avec un pas h = 0.1. En comparant avec l'équation 1, on trouve
1 −x
f (x, y) = (e − y).
2
Commençant par y 1
, on utilise l'équation 3 pour estimer la solution au
point suivant x = 0.1,
0 = 2

3
1 1 1 1
y1 = y0 + hf (x0 , y0 ) = + 0.1f (0, ) = + 0.1( ) = 0.5250.
2 2 2 4
La solution exacte en est calculée par . Ainsi,
l'erreur relative est de 0.57 . Des calculs similaires peuvent être eectués aux
x = 0.1 yexact (0.1) = 0.522

points suivants x , x , ..., . Le script Scilab suivant utilise la fonction


%
Eule-
rExplicit pour trouver la solution numérique et retourne les résultats incluant
2 3 xn

les valeurs exactes, sous forme d'un tableau.

4
Code Scilab 2.
disp(' x yEulerExplicite yExact');

h = 0.1;
x = 0:h:1;
y0 = 1/2;

deff(' z=f(x,y) ',' z=(exp(-x)-y)/2');


deff(' z=yexact(x)',' z=(3/2)*exp(-x/2)-exp(-x)');

exec('EulerExplicite.sci');

yEuler = EulerExplicite(f,x,y0);
yExact = yexact(x);

// Affichage

for k=1:length(x)
x_coord = x(k);
yE = yEuler(k);
yEx = yExact(k);
fprintf(' %6.2f %11.6f %11.6f \n', x_coord, yE, yEx);
end

La Figure ?? montrer aue la solution numérique capture le comportement


de la solution exacte. Cependant, le pourcentage de l'erreur relative augmente
lorsque x croît, atteignant 2.41 % ªa n de l'intervalle en x = 1. Le fait d'utili-
ser un pas h plus petit permet de réduire l'erreur mais nécessite davantage de
calculs. Par example, en exécutant le script précédent avec h = 0.05 l'erreur
relative maximale est de 1.18% en x = 1.
FIGURE

2.1 Analyse d'erreur

Deux sources d'erreur existent dans la solution numérique d'une EDO : ar-
rondi et troncature. Les erreurs d'arrondi sont causée par le nombre de chires
signicatifs retenus et utilisés dans les calculs par ordinateur. Les erreurs de
troncature sont causées par la façon dont le schéma numérique approche la so-
lution, et comprennent deux parties. La première est l'erreur de troncature locale
résultant de l'application du schéma numérique à chaque étape. La deuxième
est la propagation des erreurs de troncature, causée par des approximations ef-
fectuées dans les étapes précédentes. L'erreur de troncature globale provient de
la combinaison des erreurs de troncature locales. Il peut être démontré que que
l'erreur de troncature locale est de O(h2 ), tandis que l'erreur global est de O(h).

5
2.2 Calcul des erreurs de troncature

L'erreur de troncature globale au point xi+1 est la diérence entre la solu-


tion exacte yi+1
e
et la solution calculée yi+1 en ce point. Elle contient l'erreur de
troncature locale, ainsi que les eets cumulés des erreurs sur les n÷uds précé-
dents :

Erreur de troncature globale en xi+1 = yi+1


e

− yi + hf (xi , yi ) .

L'erreur de troncature locale au point xi+1 est la diérence entre la solution


exacte yi+1
e
et la solution qui serait obtenue si la solution exacte a été utilisée
pour le passage de xi à xi+1 .

Erreur de troncature locale en xi+1 = yi+1


e
− yie + hf (xi , yie ) .


Exercice 1 (Erreurs de troncature). Dans l'exemple ??, calculer les erreurs de


troncature locale et globale en tout point et les acher sous forme dún tableau.
Solution 1. Partant de y = , la solution calculée en x = 0.1 est y =
1

0.525 tandis que la solution exacte est y = 0.522007. A ce stade les erreurs
0 2 1 1
e

de troncature locale et globale sont les mêmes, à cause de la même condition


1

initiale.
En x = 0.2, la valeur calculée est y = 0.543992. A la place de y , on utilise
y = 0.522007, le calcul en x est :
2 2 1
e
1 2

ỹ2 = y1e + hf (x1 , y1e ) = 0.522007 + 0.1 ∗ f (0.1, 0.522007) = 0.541148.

Ainsi, l'erreur de troncature locale en x est 2

y2e − ỹ2 = 0.538525 − 0.541148 = −0.002623.


L'erreur de troncature locale en x est calculée par :
2

y2e − y2 = 0.538525 − 0.543992 = −0.005467.

3 Méthodes de Taylor d'ordre élevés


Les méthdes de Taylor d'ordre éleés consiste à retenir davantage de termes
dans le développement en série de Taylor. Le développement en série de Taylor
de y(xi+1 ) par rapport à xi s'écrit :

0 1 2 00 1 1
y(xi+1 ) = y(xi )+hy (xi )+ h y (xi )+· · ·+ hk y (k) (xi )+ h( k+1)y (k+1) (ζi ),
2! k! (k + 1)!

où ζi ∈]xi , xi+1 [. La méthode de Taylor d'ordre k est dénie par :

6
yi+1 = yi + hpk (xi , yi ), i = 0, 1, 2, · · · , n − 1,

1 0 1
pk (xi , yi ) = f (xi , yi ) + hf (xi , yi ) + · · · + hk−1 f (k−1) (xi , yi ).
2 k!
On observe que la méthode d'Euler explicite est une méthode de Taylor du
1er ordre. La méthode de Taylor du k -ième ordre a une erreur de troncature
locale de O(hk+1 ) et globale de O(hk ). Ainsi, plus l'ordre de la méthode est
élevée, plus précise est la solution numérique. Cependant, la réduction de l'erreur
nécessite le calcul des dérivées de f (x, y).
Exercice 2 (Méthode de Taylor du second ordre). Résoudre les problèmes des
exemples ?? et ??, en utilisant la méthode de Taylor du second-ordre avec un
pas de h = 0.1 et comparer les solutions avec celles produites par le schéma
dÉuler explicite.
Solution 2. Le problème est
0 1
2y + y = e−x , y(0) = , 0≤x≤1
2
telle que f (x, y) = 1 −x
2 (e − y) . La diérentiation par rapport à x s'écrit :
0 1 0 1 1  1
f (x, y) = (−e−x − y ) = − e−x − (e−x − y) = (−3e−x + y).
2 2 2 4
La méthode de Taylor du second ordre est dénie par
yi+1 = yi + hp2 (xi , yi ), i = 0, 1, 2, · · · , n − 1,

1 0
p2 (xi , yi ) = f (xi , yi ) + hf (xi , yi ).
Ainsi,
2

 1 0 
yi+1 = yi + h (xi , yi ) + hf (xi , yi ) .
2
Commençant par y0 = 21 , la solution numérique au point suivant x
est calculée par
1 = 0.1

 1 0 
y1 = y0 + h (x0 , y0 ) + hf (x0 , y0 ) = 0.521875.
2
La solution au n÷ud est 0.522007, l'erreur relative est de 0.03%,
qui est une amélioration par rapport à -0.57 obtenue avec la méthode d'Euler
x1 = 0.1

explicite au même point. Cette amélioration de la précision était prévisible parce


%

que la méthode de Taylor d'ordre 2 a une erreur de troncature locale de O(h ) 2

contrairement à la méthode d'Euler explicite qui est de O(h).


7
Le script suivant présente la solution obtenue avec la méthode de Taylor
d'ordre 2.

Code Scilab 3.
disp(' x yEulerExplicite yTaylor e_EulerExplicite e_Taylor');

h = 0.1;
x = 0:h:1;
y0 = 1/2;

deff(' z=f(x,y) ',' z=(exp(-x)-y)/2');


deff(' z=yexact(x)',' z=(3/2)*exp(-x/2)-exp(-x)');
deff(' z=df(x,y) ',' z=(-3*exp(-x)+y)/4');

exec('EulerExplicite.sci');

yEuler = EulerExplicite(f,x,y0);
yExact = yexact(x);
yTaylor2 = zeros(x);
yTaylor2(1) = y0;

for i=1:length(x)-1
yTaylor2(i+1) = yTaylor2(i) + h*f(x(i),yTaylor2(i))
+ (1/2)*h^2*df(x(i),yTaylor2(i));
end

for k=1:length(x)-1
x_coord = x(k);
yE = yEuler(k);
yEx = yExact(k);
yT = yTaylor2(k) ;
e_Euler = (yEx-yE)/yEx*100;
e_Taylor = (yEx-yT)/yEx*100;
fprintf(' %6.2f %11.6f %11.6f %6.2f. %6.2f \n',
x_coord, yE, yEx, e_Euler, e_Taylor);
end

8
4 Méthodes de Runge-Kutta
Dans la section précédente, nous avons vu que la méthode de Taylor d'ordre k
a une erreur de troncature globale de O(hk ), mais nécessite le calcul des dérivées
de f (x, y). La méthodes de Runge-Kutta générent la solution numérique avec
la même précision que les méthodes de Taylor sans le calcul des dérivées.

4.1 Méthode de Runge-Kutta d'ordre 2 (RK2)

Pour les méthodes de Runge-Kutta d'ordre 2, la fonction d'incrémentation


s'écrit ψ(xi , yi ) = a1 k1 + a2 k2 telle que

k1 = f (xi , yi ),

k2 = f (xi + b1 h, yi + c11 k1 h),

yi+1 = yi + h(a1 k1 + a2 k2 ), (5)


où a1 , a2 , b1 et c11 sont des constantes, chacune spécique à une méthode
de RK2. Elles vérient
1 1
a1 + a2 = 1, a 2 b1 = , a2 c11 = .
2 2
Les méthodes de RK2 ont une erreur de troncature de O(h3 ) et globale de
O(h2 ), comme la méthode de Taylor d'ordre 2.

4.1.1 Méthode d'Euler améliorée


Dans ce cas, on eectue les choix suivants :
1 1
a1 = 0, a2 = 1, b1 = , c11 = .
2 2
La méthode d'Euler améliorée s'écrit donc comme suit :

k1 = f (xi , yi ),

1 1
k2 = f (xi + h, yi + k1 h),
2 2

yi+1 = yi + hk2 . (6)

9
4.1.2 Méthode de Heun
Dans ce cas, on eectue les choix suivants :
1 1
a1 = , a2 = , b1 = 1, c11 = 1.
2 2
La méthode d'Euler améliorée s'écrit donc comme suit :

k1 = f (xi , yi ),

k2 = f (xi + h, yi + k1 h),

1
yi+1 = yi + h(k1 + k2 ). (7)
2
On dénit la fonction Heun(f,x,y0) (dans le chier Heun.sci) qui utilise
la méthode de Heun pour estimer la solution du problème de Cauchy.

Code Scilab 4.
function y = Heun(f,x,y0)
// f est une fonction représentant f(x,y)
// x est un vecteur représentant les noeuds du maillage
// y est un vecteur contenant la solution numérique sur les noeuds

y = zeros(x);
y(1) = y0;
h = x(2)-x(1);
n = length(x);

for i = 1:n-1
k1 = f(x(i) ,y(i));
k2 = f(x(i)+h,y(i)+h*k1);
y(i+1) = y(i)+h*(k1+k2)/2;
end

endfunction

Exercice 3. On considère le problème suivant :


0
y − x2 y = 2x2 , y(0) = 1, 0 ≤ x ≤ 1, h = 0.1.
Calculer l'estimation de y pour chacune des méthodes de RK2
discutés précédemment.
1 = y(0.1)

10
Solution 3. On note que
f (x, y) = x2 (2 + y),
la valeur de y = y(0.1) estimée par chaque méthode de RK2 est calculée
comme suit :
1

Méthode d'Euler améliorée


k1 = f (x0 , y0 ) = f (0, 1) = 0,

k2 = f (x0 + 12 h, y0 + 12 k1 h) = f (0.5, 1) = 0.0075,

⇒ y1 = y0 + hk2 = 1 + 0.1(0.0075) = 1.0008


Méthode de Heun
k1 = f (x0 , y0 ) = f (0, 1) = 0,

k2 = f (x0 + h, y0 + k1 h) = f (0.1, 1) = 0.0075,

⇒ y1 = y0 + 12 h(k1 + k2 ) = 1 + 0.05(0.0300) = 1.0015


On procède de la même manière pour estimer la solution aux n÷uds x , x ,
..., x . La solution exacte est yexact(x) = 3e − 2.
2 3
x3 /2

Présenter sur un tableau les solutions approchées et les erreurs pour la mé-
n

thode d'Euler explicite et les méthodes de RK2.


4.2 Méthode de Runge-Kutta d'ordre 4 (RK4)

Pour les méthodes de Runge-Kutta d'ordre 4, la fonction d'incrémentation


s'écrit

ψ(xi , yi ) = a1 k1 + a2 k2 + a3 k3 + a4 k4 ,
telle que

k1 = f (xi , yi ),

k2 = f (xi + b1 h, yi + c11 k1 h),

k3 = f (xi + b2 h, yi + c21 k1 h + c22 k2 h),

k4 = f (xi + b3 h, yi + c31 k1 h + c32 k2 h + c33 k3 h),

yi+1 = yi + h(a1 k1 + a2 k2 + a3 k3 + a4 k4 ) (8)

11
où aj , bj , b1 et cij sont des constantes, chacune spécique à une méthode de
RK4. Seule la méthode de RK4 sera présentée ici. L'erreur de troncature locale
est de O(h5 ) et l'erreur globale est de O(h4 ). La méthode de RK4 classique est
décrite par :

k1 = f (xi , yi ),

1 1
k2 = f (xi + h, yi + k1 h),
2 2
1 1
k3 = f (xi + h, yi + k2 h),
2 2

k4 = f (xi + h, yi + k3 h),

1
yi+1 = yi + h(k1 + 2k2 + 2k3 + k4 ) (9)
6
La méthode de RK4 est la plus utilisée pour la résolution des EDO, car elle
ore un meilleur rapport précision/coût dans les calculs.
La fonction Scilab RK4(f,x,y0) (dans le chier RK4.sci) utilise la méthode
de RK4 classique pour estimer la solution du problème de Cauchy.

Code Scilab 5.
function y = RK4(f,x,y0)
// f est une fonction représentant f(x,y)
// x est un vecteur représentant les noeuds du maillage
// y est un vecteur contenant la solution numérique sur les noeuds

y = zeros(x);
y(1) = y0;
h = x(2)-x(1);
n = length(x);

for i = 1:n-1
k1 = f(x(i) ,y(i));
k2 = f(x(i)+h/2,y(i)+h*k1/2);
k3 = f(x(i)+h/2,y(i)+h*k2/2);
k4 = f(x(i)+h ,y(i)+h*k3);
y(i+1) = y(i)+h*(k1+2*k2+2*k3+k4)/6;
end

endfunction

12
Exercice 4. On considère le problème suivant :
0
y − x2 y = 2x2 , y(0) = 1, 0 ≤ x ≤ 1, h = 0.1.
1. Calculer à la main l'estimation de y = y(0.1) avec la méthode de RK4
classique.
1

2. Résoudre le problème en utilisant la fonction RK4.


Solution 4. 1. On note que
f (x, y) = x2 (2 + y),
la valeur de y estimée par la méthode de RK4 est calculée
comme suit :
1 = y(0.1)

k1 = f (x0 , y0 ) = f (0, 1) = 0,

k2 = f (x0 + 21 h, y0 + 12 k1 h) = f (0.05, 1) = 0.0075,

k3 = f (x0 + 12 h, y0 + 12 k2 h) = f (0.05, 1.0004) = 0.0075,

k4 = f (x0 + h, y0 + k3 h) = f (0.1, 1.0008) = 0.03,

⇒ y1 = y0 + 16 h(k1 + 2 ∗ k2 + 2 ∗ k3 + k4 ) = 1.0010

2. On utilise le code scilab suivant pour la résolution :


h = 0.1;
x = 0:h:1;
y0 = 1/2;

deff(' z=f(x,y) ',' z=x^2*(2+y)');

exec('RK4.sci');

y = RK4(f,x,y0);

5 Méthodes multipas
Les méthodes multipas sont basées sur le fait qu'une meilleure estimation de
yi+1 en xi+1 peut être obtenue en utilisant l'information sur deux ou plus de
points précédents qu'un seul. Les méthodes multipas peuvent être explicites ou
implicites. Les méthodes explicites utilisent une formule explicite pour trouver

13
l'estimation. Par exemple, si une méthode explicite utilise deux points précé-
dents, l'estimation de yi+1 en xi+1 est de la forme

yi+1 = F (xi+1 , xi , yi , xi−1 , yi−1 ).


Dans ce cas, seulement les valeurs connues apparaîssent à droite. Dans les
méthodes implicites, l'inconnu apparaît des deux côtés de l'équation

yi+1 = F̃ (xi+1 , yi+1 , xi , yi , xi−1 , yi−1 )

5.1 Méthode de Crank-Nicholson

Le schéma numérique s'écrit sous la forme


1
yi+1 = yi + h(fi + fi+1 ), i = 0, 1, 2, ..., n − 1
2
avec fi = f (xi , yi ) et fi+1 = f (xi+1 , yi+1 ). Cette formule est implicite car
f (xi+1 , yi+1 ) contient yi+1 qui est la solution à calculer. Dans cette situation,
yi+1 peut être obtenu itérativement en utilisant les techniques de résolution
des systèmes non linéaires (dichotomie, sécante, Newton, point xe, ...). Cette
formule a une erreur de troncature globale de O(h2 ).

5.2 Méthode d'Euler implicite

Le schéma numérique s'écrit sous la forme

yi+1 = yi + hf (xi+1 , yi+1 ), i = 0, 1, 2, ..., n − 1


Cette formule est implicite car f (xi+1 , yi+1 ) contient yi+1 qui est la solution à
calculer. Dans cette situation, yi+1 peut être obtenu itérativement en utilisant les
techniques de résolution des systèmes non linéaires. Dans le cas oùla structure de
f (x, y) est simple, yi+1 peut être calculé directement. Exemple, si f (x, y) = −λy ,
on a

1
yi+1 = yi + hf (xi+1 , yi+1 ) = yi+1 = yi + h(−λyi+1 ) ⇒ yi+1 = yi .
1 + λh
Cette formule a une erreur de troncature globale de O(h).

6 Systèmes d'équations diérentielles


Les modèles mathématiques de la plupart des systèmes en sciences de l'ingé-
nieur sont composés d'un ou plusieurs équations d'ordre un ou supérieur, avec
un certain nombre de conditions initiales. Dans cette section, nous allons étu-
dier deux problèmes : (1) transformer un modèle en un système d'équations
diérentielles du premier ordre et (2) résoudre le système d'EDO ainsi obtenu.

14
6.1 Transformation en un système dEDO du premier ordre

Exemple 2. Considérons l'EDO du 3-ième ordre donnée par :


000 00 0 0 00
3y − y − 5y − 3y = e−x/2 , y(0) = 0, y (0) = −1, y (0) = 1.

Trois conditions initiales sont requises, donc on a trois variables d'état : u ,


et u . Ainsi, on pose
1
u2 3

0 00
u1 = y, u2 = y , u3 = y .
On a donc trois équations données par
0 0
u1 = y = u2
0 00
u2 = y = u3
0 000 00 0
u3 = y = 13 (y + 5y + 3y + e−x/2 ) = 31 (u3 + 5u2 + 3u1 + e−x/2 )
avec
u1 (0) = 0, u2 (0) = −1, u3 (0) = 1.
Sous forme vectorielle, on a
    
u1 u2 0
0
u = f (x, u), u = u2  , f = u3 , u0 = −1
u3 1 −x/2 1
3 (u3 + 5u2 + 3u1 + e )

Exemple 3 (Systèmes d'EDO d'ordres diérents). Le modèle mathématique


d'un système dynamique est décrit par :
ẍ1 + 2ẋ1 + 2(x1 − x2 ) = e−t sin t,
ẋ2 − 2(x1 − x2 ) = 0,
(10)
avec les conditions initiales
x1 (0) = 0, x2 (0) = 0, ẋ1 (0) = 1.
Trois conditions initiales sont nécessaires u , u et u . Les variables d'état
sont celles pour lesquelles une condition initiale est requise. Ainsi,
1 2 3

u1 = x1 , u2 = x2 , u3 = ẋ1 .
Il y a donc trois équations d'état

15
u̇1 = ẋ1 = u3 ,
u̇2 = ẋ2 = 2(x1 − x2 ) = 2(u1 − u2 ),
u̇3 = ẍ = −2ẋ1 − 2(x1 − x2 ) + e−t sin t = −2u3 − 2(u1 − u2 ) + e−t sin t,


u1 (0) = 0, u2 (0) = 0, u3 (0) = 1.
Sous forme vectorielle,

    
u1 u3 0
u̇ = f (t, u), u = u2  , f = 2(u1 − u2 ) , u0 = 0 .
u3 −2u3 − 2(u1 − u2 ) + e−t sin t 1

6.2 Résolution des systèmes d'EDO du premier ordre

Les méthodes présentées pour la résolution du problème de Cauchy peuvent


être étendues et appliquées à un système d'EDO du premier ordre. Nous allons
présenter la méthode d'Euler explicite.
Exercice 5. Considérons le problème
000 00 0 0 00
3y − y − 5y − 3y = e−x/2 , y(0) = 0, y (0) = −1, y (0) = 1.

1. Utiliser la méthode d'Euler explicite avec un pas de h = 0.1, trouver une


estimation de y = y(0.2).
2. Conrmer ce résultat en exécutant la fonction EulerSystem, dénie dans
2

la suite.
Solution 5. Le problème a été transformé en un système d'EDO comme suit
    
u1 u2 0
0
u = f (x, u), u = u2  , f = u3 , u0 = −1 .
u3 1 −x/2 1
3 (u3 + 5u2 + 3u1 + e )

Pour trouver y(0.2), nous devons connaître le vecteur solution u


et extraire sa première composante, c'est-à-dire y(0.2). Ainsi, on a
2 = u(0.2)

u1 = u0 + hf (x0 , u0 ).
Hors x 0 =0 ,

16
 
u2 (x0 )
f (x0 , u0 ) =  u3 (x0 ) 
1
u3 (x0 ) + 5u2 (x0 ) + 3u1 (x0 ) + e−x0 /2

3
 
−1
=  1  .
1

3 1 + 5(1) + 3(0) + 1
 
−1
= 1
−1

Ainsi,
     
0 −1 −0.1
u1 = u0 + hf (x0 , u0 ) = −1 + 0.1  1  = −0.9 .
1 −1 0.9
L'étape suivante, u 2 = u1 + hf (x1 , u1 ) où
 
u2 (x1 )
f (x1 , u1 ) =  u3 (x1 ) 
1 −x1 /2
3 (u3 (x1 ) + 5u2 (x1 ) + 3u1 (x1 ) + e )
 
−0.9
=  0.9 
1 −0.1/2
3 (0.9 + 5(−0.9) + 3(−0.1) + e )
 
−0.9
=  0.9  .
−0.9829
Ainsi,

−0.1
 
−0.9
  
-0.1900
u2 = u1 + hf (x1 , u1 ) = −0.9 + 0.1  0.9  =  −0.8100  .
0.9 −0.9829 0.8017

La première composante représente y(0.2) ainsi y(0.2) = −0.19. Les résultats


peuvent être conrmés avec le code Scilab suivant :
La fonction Scilab EulerSystem utilise la méthode d'Euler explicite pour es-
timer la solution d'un système d'EDO du premier ordre.

17
Code Scilab 6. function u=EulerSystem(f,x,u0)

// f est un vecteur de dimension m*1 représentant f(x,u)


// x est une matrice de dimension 1*(n+1) représentant les noeuds du maillage
// u0 est un vecteur de dimension m*1 représentant le vecteur initial
// u est une matrice de dimension m*(n+1), chaque colonne contenant
// le vecteur solution sur un noeud

u(:,1) = u0;
h = x(2)-x(1);
n = length(x);

for i = 1:n-1
u(:,i+1) = u(:,i) + h* f(x(i),u(:,i));
end

endfunction

Le script Scilab suivant permet de calculer la solution sur la totalité du


maillage.

Code Scilab 7.
deff('z=f(x,y)','z=[u(2);u(3);(u(3)+5*u(2)+3*u(1)+exp(-x/2))/3]');

x = 0:0.1:1; // 11 noeuds du maillage


u0 = [0;-1;1];

exec('EulerSystem.sci');

u = EulerSystem(f,x,u0); // matrice 3x11


u est une matrice 3x11 car il y a 3 variables d'état et 11 n÷uds dans le
maillage. 0La première ligne 00contient les estimations de y sur les 11 n÷uds, la
seconde y et la troisième y . Comme nous nous intéressons a y(0.2), c est la
première ligne de u qu il faudra acher, c'est-à-dire u(1, :).

7 Stabilité
Une méthode numérique est stable si une erreur introduite à une étape ne
se propage pas sur les étapes suivantes. Considérons, par exemple, le problème
suivant :

λ = const > 0. (11)


0
y = −λy, y(0) = y0 ,

18
Puisque la solution exacte y(x) = y0 e−λx tend vers 0 lorsque x tend vers
l'inni, nous aimerions aussi que l'erreur tende vers 0 lorsque x tend vers l inni.

7.1 Euler explicite

Supposons que le schéma d'Euler explicite soit appliqué à ce modèle. La


solution yi+1 s'obtient par la formule

yi+1 = yi + hf (xi , yi ) = yi + h(−λyi ) = (1 − λh)yi . (12)


De l'équation (12), on voit que l'erreur ne se propage pas lorsque |1−λh| < 1.
Cela implique que le schéma est stable si
2
|1 − λh| < 1 ⇒ −1 < 1 − λh < 1 ⇒ 0 < h < ,
λ
qui est le critère de stabilité de la méthode d'Euler explicite pour le problème
(11).

7.2 Euler implicite

La méthode d'Euler implicite s'écrit

1
yi+1 = yi + hf (xi+1 , yi+1 ) = yi + h(−λyi+1 ) ⇒ yi+1 = yi .
1 + λh
Ainsi, la méthode est stable si
1
< 1 ⇒ |1 + λh| > 1 ⇒ h > 0.

1 + λh

La méthode d'Euler implicite est toujours stable quelque soit la longueur du


pas h.
Exercice 6. Considérons le problème
0
y = −4y, y(0) = 2, 0 ≤ x ≤ 5.
1. Résoudre le problème en utilisant la méthode d'Euler explicite h = 0.3 et
h = 0.55. Tracer les solutions numériques et la solution exacte y(x) =
2e−4x
et discuter la stabilité.
2. Reprendre la question 1) avec le schéma d'Euler implicite.

19
8 Travaux dirigés
8.1 Méthode d'Euler explicite

Exercice 1. Pour les problèmes de 1 à 6, pour chaque valeur initiale,


 (a) en utilisant la méthode d'Euler explicite avec le pas de temps indiqué
h, calculer la solution estimée sur les deux premiers n÷uds (au delà du
point initial), ainsi que les erreurs de troncature locale et globale sur ces
n÷uds.
 (b) Ecrire un script Scilab pour trouver les valeurs approchées produites
par la méthode d'Euler explicite et retourner un tableau contenant ces
valeurs, ainsi que la valeur exacte et le pourcentage de l'erreur globale,
sur les n÷uds du maillage dans l'intervalle donné.
1. y + 2(x + 1)y = 0, y(0) = 1, 0 ≤ x ≤ 1, h = 0.1.
0

Solution exacte : y = e .−x(x+2)

2. xy + y = x, y(1) = 0, 1 ≤ x ≤ 2, h = 0.1.
0

Solution exacte : y = x/2 − 1/(2x).


3. y = y cos x, y(0) = , 0 ≤ x ≤ 1, h = 0.1.
0
2 1

Solution exacte : y = 1/(3 − sin x).


3

4. e y = y , y(0) = 1, 0 ≤ x ≤ 0.5, h = 0.05.


x 0
2

Solution exacte : y = e . x

5. e y = x y , y(0) = , 0 ≤ x ≤ 1, h = 0.2 .
x 0
2 2 1

Solution exacte : y = e (x + 2x + 2) .
3
−1
−x 2

6. xy − y = y , y(2) = 1, 2 ≤ x ≤ 3, h = 0.1.
0
2

Solution exacte : y = x/(4 − x).


Exercice 2. Ecrire un script Scilab pour trouver les valeurs approchées pro-
duites par la méthode d'Euler explicite avec h = 0.4, et ensuite h = 0.2. Le
chier doit retourner un tableau les solutions estimées en 0, 0.4, 0.8, 1.2, 1.6,
2 produites dans les deux scénarios, ainsi que la valeur exacte et le pourcentage
de l'erreur globale, sur les n÷uds du maillage.
0
3y + 8y = 2e−2x/3 , y(0) = 1, 0 ≤ x ≤ 1.

Exercice 3. Ecrire un script Scilab pour trouver les valeurs approchées pro-
duites par la méthode d'Euler explicite avec h = 0.2, et ensuite h = 0.1. Le
chier doit retourner un tableau les solutions estimées en 0, 0.2, 0.4, 0.6, 0.8,
1 produites dans les deux scénarios, ainsi que la valeur exacte et le pourcentage
de l'erreur globale, sur les n÷uds du maillage.
0
y − xy = x2 sin x, y(0) = 1, 0 ≤ x ≤ 1.

Exercice 4. La chute libre d'une particule légère de masse m lachée à partir


du repos et tombant à une vitesse v est gouvernée par l'équation :
20
mv̇ = mg − bv, v(0) = 0
où g = 9.81 m/s est la constante gravitationnelle et b/m = 0.2 est le coe-
2

cient de l'amortissement visqueux.


 Ecrire un script Scilab pour trouver les valeurs approchées produites par
la méthode d'Euler explicite avec h = 0.05. Le chier doit retourner un
tableau les solutions estimées en 0, 0.2, 0.4, 0.6, 0.8, 1, ainsi que la valeur
exacte et le pourcentage de l'erreur globale, sur les n÷uds du maillage.
Exercice 5. La chute libre d'une particule lourd de masse m lachée à partir du
repos et tombant à une vitesse v est gouvernée par l'équation :
mv̇ = mg − bv 2 , v(0) = 0
où g = 9.81 m/s est la constante gravitationnelle et b/m = 0.2 est le coe-
2

cient de l'amortissement visqueux.


 Ecrire un script Scilab pour trouver les valeurs approchées produites par
la méthode d'Euler explicite avec h = 0.05 et h = 0.1. Le chier doit
retourner un tableau les solutions estimées en 0, 0.2, 0.4, 0.6, 0.8, 1
pour les deux scénarios ainsi que la valeur exacte et le pourcentage de
l'erreur globale, sur les n÷uds du maillage.
8.2 Méthodes de Taylor d'ordre élevés

Exercice 6. Dans les problèmes de 1 à 5, pour chaque condition initiale, utiliser


la méthode de Taylor du second ordre avec les pas indiqués pour calculer les
solutions estimées sur les deux premiers n÷uds du maillage (au delà du point
initial) .
1. y + 2y = x y, y(0) = 1, 0 ≤ x ≤ 2.4, h = 0.3.
0
3

2. xy = x + y, y(1) = 0, 1 ≤ x ≤ 2, h = 0.1.
0

3. y = x + y, y(0) = , 0 ≤ x ≤ 0.5, h = 0.05.


0
2 1

4. yy + xy = x, y(1) = 2, 1 ≤ x ≤ 2, h = 0.2.
2
0
2

5. tẏ = 2y + y , y(1) = 1, 1 ≤ t ≤ 1.2, h = 0.05.


3

Exercice 7. Ecrire une fonction en Scilab y=Taylor2EDO(f,fp,x,y0) pour ré-


soudre une équation diérentielle ordinaire du premier ordre
0
y = f (x, y), y(x0 ) = y0
en utilisant la méthode de Taylor du second ordre. L'argument d'entrée (f
une fonction anonyme) est la diérentielle de f par rapport à x. Exécuter la
p

fonction pour résoudre


0
(x + 1)y = y + x, y(0) = 1, 0 ≤ x ≤ 1, h = 0.1.

21
Exercice 8. Ecrire un script Scilab qui utilise la méthode d'Euler explicite avec
et de Taylor du second ordre avec h = 0.08. Le chier doit retourner un
tableau contenant les solutions estimées en x = 0 : 0.08 : 0.8 produites dans les
h = 0.04

deux méthodes, ainsi que la valeur exacte et le pourcentage de l'erreur globale,


sur les n÷uds du maillage. Discuter les résultats.
0
(x − 1)y = x(2 − y), y(0) = 1, 0 ≤ x ≤ 0.8.

Exercice 9. Ecrire un script Scilab qui utilise la méthode d'Euler explicite


et la méthode de Taylor du second ordre avec h = 0.1 pour calculer les
solutions estimés. Le chier doit retourner un tableau contenant les solutions
h = 0.05

estimées en x = 1 : 0.1 : 2 produites dans les deux méthodes, ainsi que la valeur
exacte et le pourcentage de l'erreur globale, sur les n÷uds du maillage. Discuter
les résultats.
0 3
xy + y = x ln x, y(1) = , 1 ≤ x ≤ 2.
4

8.3 Méthodes de Runge-Kutta

Exercice 10. Dans les problèmes de 1 à 4, pour chaque condition initiale et


les pas indiqués h, utiliser les méthodes suivantes pour calculer les solutions
estimées sur les deux premiers n÷uds du maillage (au delà du point initial) .
 Euler améliorée.
 Heun.
1. 3y + (2x + 1)y = 0, y(0) = 0.4, 0 ≤ x ≤ 1, h = 0.1.
0

2. e y = y , y(0) = , 0 ≤ x ≤ 0.5, h = 0.05.


2x 0
2 1

3. xy = y − 3x, y(1) = 1, 1 ≤ x ≤ 3, h = 0.1.


2
0

4. y = y sin(x/2), y(0) = 1, 0 ≤ x ≤ 4, h = 0.2.


0
2

Exercice 11. Ecrire une fonction en Scilab y=ImpEulerEDO(f,x,y0) pour ré-


soudre une équation diérentielle ordinaire du premier ordre
0
y = f (x, y), y(x0 ) = y0
en utilisant la méthode d'Euler améliorée. Exécuter la fonction pour résoudre
0
xy = y + xex , y(0.5) = 1.6, 0.5 ≤ x ≤ 1.5, h = 0.05

Exercice 12. Ecrire un code en Scilab qui utilise la méthode d'Euler explicite,
la méthode de Taylor d'ordre 2 et la méthode de Heun et renvoie un tableau
incluant les solutions estimées et la valeur exacte et l'erreur relative globale
obtenue avec ces trois méthode, sur tous les points de l'intervalle donné. Discuter
les résultats.
0
xy + y = xe−x/2 , y(1) = 0, 1 ≤ x ≤ 3, h = 0.2.

22
8.4 Méthode RK4

Exercice 13. Dans les problèmes de 1 à 6, pour chaque condition initiale et les
pas indiqués h, utiliser la méthode RK4 sur les deux premiers n÷uds du maillage
(au delà du point initial).
1. xy + (2x + 1)y = x, y(1) = 0.5, 1 ≤ x ≤ 2, h = 0.1
0

2. xy − y = e , y(1) = 1, 1 ≤ x ≤ 1.5, h = 0.2


0
y/2

3. y = (1 − x)(3 − x), y(0) = 1, 0 ≤ x ≤ 1.6, h = 0.08


0

4. xy + 2y = x ln x, y(1) = 0, 1 ≤ x ≤ 2, h = 0.1
0

5. y + y = 0, y(0) = , 0 ≤ x ≤ 2, h = 0.2
0
3 2

6. (x + y)y + y = x, y(0) = , 0 ≤ x ≤ 3, h = 0.15


3
0
2
3

Exercice 14. Ecrire un code en Scilab qui utilise la méthode d'Euler expli-
cite, la méthode de Heun et la méthode RK4 et renvoie un tableau incluant les
solutions estimées sur tous les points de l'intervalle donné.
0
y = y 2 + ex , y(0) = 0.1, 0 ≤ x ≤ 0.5, h = 0.04.

Exercice 15. Ecrire un code en Scilab qui utilise la méthode d'Euler explicite
(avec h = 0.025)), la méthode de Heun (avec h = 0.05) et la méthode RK4 (avec
h = 0.1) et renvoie un tableau incluant les solutions estimées et l'erreur relative
sur tous les points x = 1, 1.1, 1.2, 1.3, 1.4, 1.5 pour les trois méthodes. Discuter
les résultats.
0
xy = y + 2ey/x , y(1) = 0, 1 ≤ x ≤ 1.5.

Exercice 16. Ecrire un code en Scilab qui utilise la méthode d'Euler explicite
(avec h = 0.0125)), la méthode de Heun (avec h = 0.025) et la méthode RK4
(avec h = 0.1) et renvoie un tableau incluant les solutions estimées et l'erreur
relative sur tous les points x = 1 : 0.1 : 2 pour les trois méthodes. Discuter les
résultats.
0 1
(x + 1)y + y = x ln x, y(1) = , 1 ≤ x ≤ 2.
4

8.5 Système d'EDO

Exercice 17. Dans les problèmes de 1 à 4, pour chaque EDO du second ordre.
 (a) Transformer en un système d'EDO du premier ordre.
 (b) Appliquer les méthodes d'Euler explicite, de Heun et de RK4 pour les
systèmes, avec les pas h indiqués, pour calculer la solution estimée y , et
calculer l'erreur relative pour chaque estimation.
1

1. y = y + 2x, y(0) = 0, y (0) = 1, 0 ≤ x ≤ 1, h = 0.1


00 0

La solution exacte est y(x) = 3 sinh(x) − 2x

23
2. y + 3y + 2y = x + 1, y(0) = 0, y (0) = 0, 0 ≤ x ≤ 1, h = 0.1
00 0 0

La solution exacte est y(x) = x + (e − 1) 1 1 −2x

3. y + 4y = 0, y(0) = 1, y (0) = −1, 0 ≤ x ≤ 1, h = 0.1


2 4
00 0

La solution exacte est y(x) = cos(2x) − sin(2x) 1

4. y + 2y + 2y = 0, y(0) = 1, y (0) = 0, 0 ≤ x ≤ 1,h = 0.1


2
00 0 0

La solution exacte est y(x) = e cos(x) + sin(x) −x

Exercice 18. On considère le système non linéaire du second ordre à valeurs


initiales
00 0 0
y + 2yy = 0 y(0) = 0, y (0) = 1
1. Utiliser la méthode de Heun pour les systèmes, avec un pas h = 0.1, pour
trouver la valeur estimée de y(0.1) et y(0.2).
2. Conrmer les résultats avec un code Scilab, en utilisant une fonction
HeunEDOSystem.
Exercice 19. On considère le système non linéaire du second ordre à valeurs
initiales
00 0 0
yy + (y )2 = 0 y(0) = 1, y (0) = −1
1. Utiliser la méthode de RK4 pour les systèmes, avec un pas h = 0.1, pour
trouver la valeur estimée de y(0.1).
2. Conrmer les résultats avec un code Scilab, en utilisant une fonction
RK4System.
Exercice 20. On considère le système non linéaire du second ordre à valeurs
initiales
00 2 0 1
x2 y = y y(1) = 1, y (1) = − , 1 ≤ x ≤ 2, h = 0.1
3 2
1. Transformer en un système d'EDO du premier ordre.
2. Ecrire un script Scilab utilisant les fonctions EulerExplicteEDOSystem,
HeunEDOSystem et RK4System pour résoudre le système obtenu. Le -
chier doit renvoyer un tableau de valeurs pour y générées par les trois
méthodes, ainsi que les valeurs exactes, sur les n÷uds x = 1 : 0.1 : 2.
Acher toutes les solutions avec 6 chires après la virgule.
:
Exercice 21. On considère le système non linéaire du second ordre à valeurs
initiales
00 0 0
x2 y + 5xy + 3y = x3 y(1) = 0, y (1) = 0, 1 ≤ x ≤ 1.5, h = 0.05

1. Transformer en un système d'EDO du premier ordre.


24
2. Ecrire un script Scilab utilisant les fonctions EulerExplicteEDOSystem,
HeunEDOSystem et RK4System pour résoudre le système obtenu. Le -
chier doit renvoyer un tableau de valeurs pour y générées par les trois
méthodes, ainsi que les valeurs exactes, sur les n÷uds x = 1 : 0.05 : 1.5.
Acher toutes les solutions avec 6 chires après la virgule.
:
Exercice 22. On considère le système mécanique en mouvement de translation,
où m est une masse, k et k sont les coecients de raideur, c et c sont
les coecients d'amortissement visqueux, x et x sont les déplacements, et
1 2 1 2

F (t) est la force appliquée. On suppose que, en unités physiques, les valeurs des
1 2

paramètres sont :

2
m = 2, c1 = 1, c2 = 1, k1 = 2, k2 = , F (t) = 4e−t/2 sin t.
3
Les équations du mouvement sont exprimées comme suit :
2ẍ1 + ẋ1 + 2(x1 − x2 ) = 4e−t/2 sin(t)

ẋ2 + 32 x2 − 2(x1 − x2 ) = 0
sous les conditions initiales,
x1 (0) = 0, x2 (0) = 1, ẋ1 (0) = −1.
1. Transformer en un système d'EDO du premier ordre.
2. Ecrire un script Scilab utilisant la fonction RK4System pour résoudre
le système obtenu. Le chier doit renvoyer les courbes de x et x pour
0 ≤ t ≤ 8 sur le même graphe. Il est recommandé d'utiliser au moins 100
1 2

points pour la régularité des courbes.

25
Exercice 23. On considère le système mécanique en mouvement de transla-
tion, où m est une masse, c est le coecient d'amortissement visqueux, x le
déplacement du bloc, et f = x une force de ressort non lináire, et F (t) une
3

force appliquée. On suppose que, en unités physiques, les valeurs des paramètres
s

sont :

1
m= , c = 0.75, F (t) = 100.
L'équation du mouvement est exprimée comme suit :
2

1
ẍ + 0.75ẋ + x3 = 100
sous les conditions initiales
2

x(0) = 0, ẋ(0) = 1.
1. Transformer en un système d'EDO du premier ordre.
2. Ecrire un script Scilab utilisant la fonction RK4System pour résoudre le
système obtenu. Le chier doit renvoyer la courbe de x pour 0 ≤ t ≤ 5.
Il est recommandé d'utiliser au moins 100 points pour la régularité de la
courbe.
Exercice 24. On considère le système mécanique en mouvement de translation,
où m et m représentent les masses, k et k sont les coecients de raideur, c
est le coecient d'amortissement visqueux, x et x sont les déplacements des
1 2 1 2

blocs, et F (t) et F (t) sont les forces appliquées. On suppose que, en unités
1 2

physiques, les valeurs des paramètres sont :


1 2

m1 = 1, m2 = 2 c = 2, k1 = 1, k2 = 1, F1 (t) = e−t , F2 (t) = 1.


Les équations du mouvement sont exprimées comme suit :
ẍ1 + 2ẋ1 + 2x1 − x2 = e−t

ẍ2 − x1 + x2 = 0

26
sous les conditions initiales
1
x1 (0) = 0, x2 (0) = 1, ẋ1 (0) = , ẋ2 (0) = 1.
2
1. Transformer en un système d'EDO du premier ordre.
2. Ecrire un script Scilab utilisant la fonction RK4System pour résoudre
le système obtenu. Le chier doit renvoyer les courbes de x et x pour
0 ≤ t ≤ 30 sur le même graphe. Il est recommandé d'utiliser au moins
1 2

100 points pour la régularité des courbes.

27

Vous aimerez peut-être aussi