Vous êtes sur la page 1sur 18

EDO 1 Introduction

UPMC Master P&A/SDUEE

1 Introduction

UE 4P056 1.1 Problème différentiel


Méthodes Numériques et Calcul Scientifique
— équation différentielle scalaire d’ordre n
 
dn y dy dn−1 y
Résolution numérique des dtn
=f t, y,
dt
, ...,
dtn−1
équations différentielles ordinaires (EDO) où f est la fonction second membre donnée
⇒ famille de solutions y(t) à n paramètres
— ensemble de n conditions imposées
⇒ choix d’une solution dans la famille
2016–2017 Jacques.Lefrere@upmc.fr

MNCS 1 2016-2017

EDO 1 Introduction 1.2 Deux types de problèmes différentiels à résoudre EDO 1 Introduction 1.3 Équations différentielles scalaires du 1er ordre

1.2 Deux types de problèmes différentiels à résoudre


1.3 Équations différentielles scalaires du 1er ordre
— Conditions initiales données pour une seule valeur t0 de t, par exemple

(n−1) Étudier d’abord les équations différentielles scalaires du premier ordre.


y(t0 ) = y0 , y 0 (t0 ) = y00 , . . . , y (n−1) (t0 ) = y0
⇒ famille de solutions y(t) à un paramètre (y0 )
Problème de conditions initiales ou de Cauchy
dy
— Conditions données pour des valeurs distinctes de la variable indépendante t, = f (t, y(t)) avec y(t0 ) = y0
dt
par exemple :

y(t0 ) = y0 , y(t1 ) = y1 , . . . , y(tn−1 ) = yn−1 Les EDO d’ordre supérieur se ramènent à des systèmes différentiels couplés du
premier ordre (EDO vectorielles du premier ordre).
Problème de conditions aux limites (non traité, sauf problème de tir).

MNCS 2 2016-2017 MNCS 3 2016-2017


EDO 1 Introduction 1.4 Unicité et problème bien posé : conditions suffisantes EDO 1 Introduction 1.5 Méthodes de résolution numérique et notations

1.5 Méthodes de résolution numérique et notations


1.4 Unicité et problème bien posé : conditions suffisantes
Discrétisation par découpage de l’intervalle de longueur L selon un pas constant h
La condition de Lipschitz
Échantillonnage de la solution aux instantsti = t0 + ih pour 1 6 i 6 n.
|f (t, y2 ) − f (t, y1 )| 6 K |y2 − y1 | Solution numérique : ui = approximation de y(ti )

À partir de la condition initiale u0 = y(t0 ) imposée,


assure l’unicité de la solution.
faire une boucle sur les abscisses ti pour calculer l’approximation ui+1 à ti+1
∂f
(t, y) 6 K dans un domaine convexe ⇒ condition de Lipschitz vérifiée.
∂y → approximer ainsi de proche en proche la solution sur l’intervalle L.
Les erreurs d’arrondi amènent à toujours résoudre un problème perturbé. ⇒ accumulation des erreurs dans la boucle
À chaque pas de la boucle, pour calculer ui+1 , on peut s’appuyer :
Problème bien posé si : le problème faiblement perturbé (second membre ou
condition initiale) possède une solution proche de celle du problème original. — sur la dernière valeur calculée ui : méthodes à un pas

La condition de Lipschitz assure que le problème est bien posé. — sur plusieurs valeurs ui−k (k > 0) antérieurement calculées :
méthodes à plusieurs pas (initialisation nécessaire par méthode à un pas)

MNCS 4 2016-2017 MNCS 5 2016-2017

EDO 1 Introduction 1.5 Méthodes de résolution numérique et notations EDO 2 Méthodes à un pas

2 Méthodes à un pas
Méthode à pas Constituent l’algorithme de base qui permet d’estimer la valeur de la solution à
y exacte
constant l’instant ti+1 = ti + h, connaissant seulement ui , celle à ti .
famille de solutions exactes approx. La valeur à estimer peut être approchée par un développement limité de Taylor :
dépendant de y0
Découpage de dy h2 d2 y
y(ti + h) = y(ti ) + h (ti ) + (ti ) + · · · (1)
yi+1 erreur l’intervalle de dt 2 dt2
ui+1 cumulée longueur L selon Ordre n de la méthode = plus grande puissance de h prise en compte dans
un pas fixe l’approximation.
h = L/n. — Somme des termes négligés = erreur de troncature locale ∝ hn+1
ui la solution
déterministe, augmente si le pas h augmente et si l’ordre de la méthode diminue
passant par (ti , ui )
ui = approximat. — Précision finie des opérations sur les réels ⇒ erreur d’arrondi aléatoire
de y(ti ) augmente lorsque les calculs se compliquent, en particulier si le pas h diminue.
h
y0 Un pas : Indépendamment du coût (en temps de calcul) des opérations, et des cas où la
ui → ui+1 fonction est tabulée, ne pas croire que diminuer le pas améliore toujours la
qualité du résultat : un compromis doit être trouvé entre ces deux types d’erreurs.
t0 ti ti+1 t
MNCS 6 2016-2017 MNCS 7 2016-2017
EDO 2 Méthodes à un pas 2.1 Méthodes du premier ordre EDO 2 Méthodes à un pas 2.1 Méthodes du premier ordre

2.1 Méthodes du premier ordre


2.1.1 Méthode d’Euler progressive (explicite) y
Méthode du premier ordre d’intérêt pédagogique (à éviter en pratique).
Méthode d’Euler
ui+1 = ui + hf (ti , ui ) (2)
Méthode explicite qui ne
Exemple : stabilité ui+1 nécessite qu’une
dy seule évaluation
= −λy ⇒ solution analytique y = y0 e−λt ⇒ yn = y0 (e−λh )n k1 h
dt de la fonction second
n k1
ui+1 = ui − λhui ⇒ solution numérique un = y0 (1 − λh) ui membre f par pas :
h
k1 = f (ti , ui )
Si λ > 0, la solution exacte vérifie y(∞) = 0,
2 facilement instable
Mais pour l’approximation, un → 0 ⇐⇒ |1 − λh| < 1 ⇐⇒ 0 < h < . ti ti+1 t
λ
Condition de stabilité :h < 2/λ (pas h petit)
Mais, si h > 1/λ, alors (1 − λh) < 0 : alternance de signe de la solution un .

MNCS 8 2016-2017 MNCS 9 2016-2017

EDO 2 Méthodes à un pas 2.1 Méthodes du premier ordre EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre

2.1.2 Méthode d’Euler rétrograde (implicite) 2.2 Méthodes du deuxième ordre

ui+1 = ui + hf (ti+1 , ui+1 ) (3) Première idée : augmenter le nombre de termes du développement de Taylor :
rarement utilisé, car nécessite l’évaluation des dérivées partielles de f .
Méthode implicite : résolution itérative , plus difficile à mettre en œuvre, sauf si la
forme de f (t, u) permet le calcul analytique de ui+1 à partir de l’équation (3). dy d2 y ∂f ∂f dy ∂f ∂f
= f (t, y(t)) ⇒ 2
= + = +f (4)
Avantage : meilleure stabilité que la méthode progressive explicite. dt dt ∂t ∂y dt ∂t ∂y
Préférer utiliser plusieurs évaluations du second membre f en des points adaptés.
Exemple : stabilité
Centrer l’évaluation de la dérivée au point milieu tm = (ti + ti+1 )/2.
dy −λt
= −λy ⇒ solution analytique y = y0 e
dt h dy 1 h2 d2 y
y(ti + h) = y(tm ) + (tm ) + (tm ) + O(h3 ) (5a)
ui 2 dt 2 4 dt2
ui+1 = ui − λhui+1 ⇒ solution numérique ui+1 =
1 + λh h dy 1 h2 d2 y
y(ti ) = y(tm ) − (tm ) + (tm ) + O(h3 ) (5b)
y0 2 dt 2 4 dt2
un = n
(1 + λh) Par différence, (approximation locale parabolique, voir aussi dérivée centrée à 2 termes)

Si λ > 0, y(∞) = 0, et aussi un → 0 ∀λ > 0, ∀h > 0 solution stable dy


y(ti + h) − y(ti ) = h (tm ) + O(h3 )
dt

MNCS 10 2016-2017 MNCS 11 2016-2017


EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre

2.2.1 Méthode du point milieu


y
Nécessite l’évaluation du second membre f en 2 points :
ui+1 Méthode du
en (ti , ui ) et au milieu (ti+1/2 = ti + h/2, ui+1/2 ) d’un pas (hors grille). k2 point milieu
 
h h
ui+1 = ui + hf ti + , ui + f (ti , ui ) k2 h Méthode explicite
2 2
k2 qui nécessite deux
évaluations du second
k1 h/2
k1 = f (ti , ui ) (6a) k1 membre par pas dont
ui
h h une hors grille.
(ui+1/2 calculé via Euler) k2 = f (ti + , u i + k1 ) (6b)
2 2
ti ti + h/2 ti+1 t
ui+1 = ui + hk2 (6c)

MNCS 12 2016-2017 MNCS 13 2016-2017

EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre

2.2.2 Méthode d’Euler modifiée


Bilan : méthode de type prédicteur-correcteur équivalent à
En appliquant 5a et 5b à la dérivée et en faisant la somme, on peut remplacer la — un demi-pas avec la pente initiale k1
dérivée au milieu par la moyenne des dérivées aux extrémités de l’intervalle :
— et un demi-pas avec la pente k2 du point prédit par Euler progressif.
dy dy dy
(ti ) + (ti+1 ) = 2 (tm ) + O(h2 )
dt dt dt
D’où une approximation n’utilisant pas la valeur de f au point milieu tm : k1 = f (ti , ui ) (7a)

h k2 = f (ti+1 , ui + k1 h) (7b)
ui+1 = ui + [f (ti , ui ) + f (ti+1 , ui+1 )]
2 h
ui+1 = ui + [k1 + k2 ] (7c)
De nouveau, méthode a priori implicite, plus stable, mais plus lourde. 2
⇒ Contournement du problème en utilisant l’approximation d’Euler explicite (voir 2) Remarques
pour évaluer ui+1 intervenant dans f .
— deuxième ordre comme point milieu mais sans évaluation hors grille
h — la résolution de l’équation implicite peut se faire en itérant la correction jusqu’à
ui+1 = ui + [f (ti , ui ) + f (ti+1 , ui + hf (ti , ui ))]
2 ce qu’elle devienne négligeable.

MNCS 14 2016-2017 MNCS 15 2016-2017


EDO 2 Méthodes à un pas 2.2 Méthodes du deuxième ordre EDO 2 Méthodes à un pas 2.3 Méthodes de Runge Kutta

2.2.3 Méthode de Heun

Méthode d’Euler k1 = f (ti , ui ) (8a)


corrigé
ui+1 modifiée 2 2
k2 = f (ti + h, ui + k1 h) (8b)
k2 h/2 k2 k2 3 3
Méthode explicite qui h
prédit ui+1 = ui + [k1 + 3k2 ] (8c)
nécessite deux éva- 4
k1 h/2 luations de la fonction
k1
ui par pas en des points 2.3 Méthodes de Runge Kutta
de la grille.
Plus généralement, avec r évaluations de f , on peut atteindre une méthode d’ordre
ti ti + h/2 ti+1 t
r si r 6 4. Pour atteindre l’ordre 5, six évaluations sont nécessaires.
=⇒ la méthode de Runge Kutta d’ordre 4 est très utilisée.
Les méthodes de Runge-Kutta sont stables.

MNCS 16 2016-2017 MNCS 17 2016-2017

EDO 2 Méthodes à un pas 2.3 Méthodes de Runge Kutta EDO 2 Méthodes à un pas 2.3 Méthodes de Runge Kutta

2.3.2 Méthode de Runge Kutta d’ordre 4


2.3.1 Méthode de Runge Kutta d’ordre 3

k1 = f (ti , ui ) (10a)
k1 = f (ti , ui ) (9a) h h
k2 = f (ti + , ui + k1 ) (10b)
h h 2 2
k2 = f (ti + , ui + k1 ) (9b) h h
2 2 k3 = f (ti + , ui + k2 ) (10c)
k3 = f (ti + h, ui + (2k2 − k1 )h) (9c) 2 2
h k4 = f (ti + h, ui + k3 h) (10d)
ui+1 = ui + (k1 + 4k2 + k3 ) (9d)
6 h
ui+1 = ui + (k1 + 2k2 + 2k3 + k4 ) (10e)
6

MNCS 18 2016-2017 MNCS 19 2016-2017


EDO 2 Méthodes à un pas 2.4 Erreur absolue en fonction du pas et de l’ordre EDO 2 Méthodes à un pas 2.5 Exemple de l’équation logistique

dy
2.5 Exemple de l’équation logistique = y(1 − y/2)
dt
2.4 Erreur absolue en fonction du pas et de l’ordre
fichier euler.dat ordre 1 erreur max 0.183E−01 position de l’err max 0.286E+01

0.005
nombre de pas = L/h =⇒ erreur globale ∼ erreur locale × L/h
TABLE 1 – Erreur de troncature seule 0.000

Erreur = Exact −Estimé


Méthode ordre erreur locale erreur globale
−0.005

Euler explicite 1 ∝ h2 ∝h
−0.010
Point milieu – Euler modifiée 2 ∝ h3 ∝ h2
Runge-Kutta 3 3 ∝ h4 ∝ h3 −0.015

5 4
Runge-Kutta 4 4 ∝h ∝h
−0.020
0 2 4 6 8 10 12 14 16 18 20
exact − estimé
temps

Erreur d’arrondi locale indépendante de h ⇒ erreur d’arrondi globale ∝ 1/h F IGURE 1 – Erreur dans l’intégration de l’équation logistique avec la méthode d’Euler
pour h = 0, 02. L’allure régulière montre que l’erreur de troncature domine.

MNCS 20 2016-2017 MNCS 21 2016-2017

EDO 2 Méthodes à un pas 2.5 Exemple de l’équation logistique EDO 2 Méthodes à un pas 2.5 Exemple de l’équation logistique

fichier rk4.dat ordre 4 erreur max 0.954E−06 position de l’err max 0.190E+01 2.5.1 Exemple d’erreur totale maximale en simple précision
1e−06
Valeur absolue de l’erreur absolue pour y’= y(1−y/2) sur [0,20] y(0)=0.1 simple précision
8e−07 0
10
euler sp
6e−07
milieu sp
Erreur = Exact −Estimé

rk3 sp
4e−07 rk4 sp
10−1 pente +1
2e−07

0e+00
10−2
−2e−07

erreur maximale
−4e−07 pente +2
−3
10
−6e−07 pente −1

−8e−07
10−4 pente +3
−1e−06
0 2 4 6 8 10 12 14 16 18 20
exact − estimé
temps
10−5

F IGURE 2 – Erreur dans l’intégration de l’équation logistique avec Runge Kutta pente +4
10−6
d’ordre 4 pour h = 0, 02. L’allure bruitée est caractéristique de l’erreur d’arrondi
et on retrouve les niveaux de quantification des réels sur 32 bits.
10−7
10−4 10−3 10−2 10−1 100
pas
MNCS 22 2016-2017 MNCS 23 2016-2017
EDO 2 Méthodes à un pas 2.5 Exemple de l’équation logistique EDO 2 Méthodes à un pas 2.5 Exemple de l’équation logistique

2.5.2 Exemple d’erreur totale maximale en double précision 2.5.3 Comparaison des erreurs maximales simple/double précision

Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 double précision Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 simple/double précision
100 100

−2 −2
10 pente +1 10

10−4 10−4

pente +2
10−6 10−6
erreur maximale

erreur maximale
10−8 10−8
pente +3

10−10 10−10

euler sp
10−12 pente +4 10−12 milieu sp
rk3 sp
rk4 sp
10−14 euler dp 10−14 euler dp
milieu dp milieu dp
rk3 dp rk3 dp
rk4 dp rk4 dp
10−16 −4 10−16 −4
10 10−3 10−2 10−1 100 10 10−3 10−2 10−1 100
pas pas
MNCS 24 2016-2017 MNCS 25 2016-2017

EDO 3 Méthodes à plusieurs pas EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams

3 Méthodes à plusieurs pas 3.1.1 Adams Bashforth : explicite, pas de terme en f (ti+1 , ui+1 )

3.1 Méthodes d’Adams Adams-Bashforth utilise m points à gauche de ti+1 :


m
X m
X
Principe : les erreurs augmentent avec l’intégration, les points les plus proches de ui+1 = ui + βh αj f (ti−j+1 , ui−j+1 ) avec β αj = 1
la valeur initiale ont tendance à être plus fiables. Pour calculer ui+1 , on peut j=1 j=1
s’appuyer non seulement sur la dernière valeur estimée ui , mais sur les m précédentes.
méthode d’ordre m, mais une seule nouvelle évaluation du second membre
— si le calcul invoque la pente au point recherché f (ti+1 , ui+1 ), la méthode est
implicite (voir 2.1.2) : A DAMS -M OULTON m β α1 α2 α3 α4
— sinon elle est explicite : A DAMS -B ASHFORTH . 1 1 1
Dans les deux cas, il faut initialiser le calcul par une méthode à un pas sur les m 2 1/2 3 −1
premiers points. 3 1/12 23 −16 5
Le calcul réutilise les évaluations antérieures du second membre. 4 1/24 55 −59 37 −9
=⇒ stocker ces valeurs pour économiser les calculs

MNCS 26 2016-2017 MNCS 27 2016-2017


EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams

Exemple : Adams-Bashforth à deux pas 3.1.2 Adams Moulton : implicite, terme en f (ti+1 , ui+1 )

h Adams-Moulton utilise m + 1 points dont ti+1 donc implicite :


ui+1 = ui + [3f (ti , ui ) − f (ti−1 , ui−1 )]
2
m
X m
X
y Adams-Bashforth à ui+1 = ui + βh αj f (ti−j+1 , ui−j+1 ) avec β αj = 1
j=0 j=0
deux pas
ui+1 méthode d’ordre m + 1 (nombre d’évaluations du second membre)
−k−1 h/2
Méthode explicite
3k0 h/2 m β α0 α1 α2 α3
h/2 d’ordre deux mais
seulement une éva-
0 1 1
k0
ui luation nouvelle du 1 1/2 1 1
k−1 second membre à 2 1/12 5 8 −1
ui−1 chaque pas 3 1/24 9 19 −5 1
3h/2 ⇒ mémoriser les
seconds membres. Éviter les difficultés de l’implicite en utilisant un prédicteur explicite de ui+1 ,
ti−1 ti ti+1 t
injecté ensuite dans l’expression d’Adams-Moulton vue comme correcteur .

MNCS 28 2016-2017 MNCS 29 2016-2017

EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams

3.1.3 Comparaison méthodes à un pas et Adams explicite

Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 simple précision 3.1.4 Méthodes de prédicteur correcteur
0
10
euler sp
milieu sp
rk3 sp
Principe : bénéficier des qualités d’une méthode implicite mais l’appliquer à une
10−1 rk4 sp
adams−bashforth2 sp estimation obtenue par une méthode explicite du même ordre (voir Euler modifiée).
adams−bashforth3 sp
adams−bashforth4 sp
— prédiction de ui+1 par une méthode explicite
10−2

— correction de ui+1 par une formule implicite où f (ti+1 , y(ti+1 )) a été


erreur maximale

−3
10 approximé par la prédiction f (ti+1 , ui+1 ).

Exemple : méthode d’Euler modifiée


10−4
Une itération de la partie correction est possible.

10−5 L’ordre est celui du correcteur, mais la stabilité dépend plus du prédicteur.
Ces méthodes permettent d’estimer l’erreur de troncature à partir de la différence
10−6
entre prédicteur et correcteur =⇒ adaptation du pas

10−7
10−4 10−3 10−2 10−1 100
pas
MNCS 30 2016-2017 MNCS 31 2016-2017
EDO 3 Méthodes à plusieurs pas 3.2 Méthodes adaptatives EDO 3 Méthodes à plusieurs pas 3.2 Méthodes adaptatives

3.2 Méthodes adaptatives d’où le facteur q à appliquer au pas :


 1/n
Principe : ajuster le pas localement pour obtenir une précision imposée. hδ
q≈ ? (14)
ui+1 − ui+1
Estimer l’erreur de troncature par l’écart entre deux solutions numériques :
— Si q < 1, refuser ui+1 et diminuer le pas
y(ti+1 ) − ui+1
ui , d’ordre n ηi = ∝ hn (11a) — Si q > 1, accepter ui+1 et augmenter le prochain pas
h
y(ti+1 ) − u?i+1 B En pratique, limiter le pas à un intervalle raisonnable et éviter des variations brutales.
u?i , d’ordre n + 1 ηi? = ∝ hn+1 (11b)
h On suppose ici que le pas choisi permet de négliger l’erreur d’arrondi.
u? − ui+1
or h  1 donc ηi ≈ i+1 ∝ hn (11c)
h
Modification du pas d’un facteur q 3.2.1 Exemple : méthode de Runge Kutta Fehlberg

qn ?
ηi (hq) ≈ q n ηi (h) ≈
(u − ui+1 ) (12) Une méthode de Runge Kutta d’ordre 5 (6 évaluations de f )
h i+1
permet de contrôler la précision obtenue par un Runge Kutta d’ordre 4
Pour obtenir une précision globale ∆y ≈ Lδ , imposer localement :
utilisant les évaluations de f aux mêmes points que celle d’ordre 5
|ηi (hq)| ≈ δ (13) (les poids ne sont pas ceux de la méthode d’ordre 4 classique).

MNCS 32 2016-2017 MNCS 33 2016-2017

EDO 3 Méthodes à plusieurs pas 3.3 Méthodes d’extrapolation de Gragg EDO 3 Méthodes à plusieurs pas 3.3 Méthodes d’extrapolation de Gragg

3.3 Méthodes d’extrapolation de Gragg Exemple de la méthode d’Euler : l’erreur de troncature globale sur un pas
grossier h est du premier ordre en fonction du pas fin h/pk .
3.3.1 Principe de l’extrapolation Par exemple, pour les subdivisions p1 et p2 :
  2
t0 h t0 + L h h
y(t + h) = v1 + a1 + a2 + ··· (15)
Subdivisions successives p1 p1
k=1
   2
h h
h/p2
Découpage de l’intervalle de pas y(t + h) = v2 + a1 + a2 + ··· (16)
p2 p2
grossier h en sous-intervalles
k=2 Combinaison linéaire de ces deux estimateurs v1 et v2
h/p3 de pas fin hk = h/pk de plus
⇒ éliminer le terme d’ordre 1 de l’erreur (a1 inconnu)
en plus petits.
⇒ nouvel estimateur w2,2 d’ordre 2 tel que :
k=3 Développement polynomial de  2
l’erreur de troncature en fonction h
pas fin : h/pkm y(t + h) = w2,2 + b2 + ···
du pas pour extrapoler au pas nul
p2
pkm pas k = km (hk → 0). (p2 /p1 ) w2,1 − w1,1 w2,1 − w1,1
w2,2 = = w2,1 + (17)
p2 /p1 − 1 p2 /p1 − 1

MNCS 34 2016-2017 MNCS 35 2016-2017


EDO 3 Méthodes à plusieurs pas 3.3 Méthodes d’extrapolation de Gragg EDO 3 Méthodes à plusieurs pas 3.3 Méthodes d’extrapolation de Gragg

3.3.2 Comparaison méthodes à un pas et extrapolation de Gragg


Autre exemple avec la méthode du point milieu :
Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 simple précision
— l’erreur de troncature globale sur h est d’ordre 2 en fonction du pas h/pk ;
100
euler sp
— pas de termes d’ordre impair dans le développement de l’erreur. milieu sp
rk3 sp
10−1 rk4 sp
Combinaison linéaire de deux estimateurs avec des pas fins différents : mil−mod sp
gragg2−4sp
⇒ élimination du terme d’ordre 2 de l’erreur de troncature gragg2−8sp
−2
10
⇒ erreur de troncature d’ordre 4

erreur maximale
Itérer le processus avec une suite de subdivisions et de combinaisons linéaires 10−3

d’estimateurs pour augmenter l’ordre de l’erreur de troncature.


B Mais amélioration limitée par l’erreur d’arrondi... 10−4

L’écart wk+1,k+1 − wk,k donne une estimation de l’erreur de troncature si on 10−5


retient la solution wk,k . En ajustant, pour chaque intervalle de largeur h, le nombre
km de subdivisions pour respecter une erreur absolue imposée, on obtient une 10−6

version adaptative de la méthode de Gragg.


10−7
10−4 10−3 10−2 10−1 100
pas
MNCS 36 2016-2017 MNCS 37 2016-2017

EDO 4 Les EDO du premier ordre en pratique EDO 4 Les EDO du premier ordre en pratique 4.2 Validation des résultats

4.2 Validation des résultats


4 Les EDO du premier ordre en pratique Validation via une solution analytique d’un problème simplifié

Lorsqu’une solution analytique est disponible (par exemple pour certaines valeurs
4.1 Échelles de temps et problèmes raides
de paramètres qui permettent de simplifier l’EDO), sa comparaison avec la solution
Ne pas oublier que chaque problème différentiel possède une ou plusieurs échelles numérique permet de tester la méthode. Le calcul de l’erreur dans le domaine où la
de temps propres (périodes ou pseudo-périodes, constantes de temps). troncature domine permet d’extrapoler l’effet d’un changement de pas connaissant
La solution ne peut être représentée correctement qu’avec un pas assez inférieur l’ordre de la méthode.

au plus petit de ces temps propres.


Validation sans solution analytique
Cette analyse impose donc une valeur maximale pour le pas.

Certains problèmes différentiels qualifiés des raides comportent des échelles de Dans le cas où aucune solution analytique de référence n’est disponible, la
validation s’appuie sur les mêmes outils que les méthodes adaptatives :
temps très différentes : leur intégration numérique s’avère délicate et coûteuse (pas
faible pour respecter le temps court, mais nombreux pour accéder au temps long). — diminution du pas (division par 2)
Il existe des méthodes spécifiques des EDO raides qui ne sont pas présentées ici. — augmentation de l’ordre de la méthode
— extrapolation de Gragg
— calcul d’invariants (énergie par exemple)
MNCS 38 2016-2017 MNCS 39 2016-2017
EDO 4 Les EDO du premier ordre 4.3
en pratique
Structure des programmes de résolution d’EDO du 1er ordre EDO 5 Systèmes d’EDO du 1er ordre

4.3 Structure des programmes de résolution d’EDO du 1er ordre


5 Systèmes d’équations différentielles du 1er ordre
1. un algorithme de base (appliquant une méthode d’ordre 1, 2, 3 ou 4 à la
fonction second membre f passée en argument) permettant d’avancer d’un
5.1 Extension des méthodes scalaires explicites aux vecteurs
pas dans l’intégration de l’équation différentielle
2. éventuellement une procédure qui choisit le pas le plus grand possible Système de n équations différentielles couplées du considérer les
premier ordre associées à n conditions initiales vecteurs
#– et #–
y f.
compatible avec la précision attendue et contrôle la progression de l’intégration
(elle pourrait comporter un algorithme adaptatif)
3. un programme d’interface avec l’utilisateur qui choisit la méthode, le second
   
dy1 y1 f1
= f1 (t, y1 , y2 , . . . , yn )
membre, lit les paramètres (conditions initiales par ex.), déclenche et arrête dt    
y  f 
l’intégration et stocke les résultats. dy2  2  2
= f2 (t, y1 , y2 , . . . , yn )   et  
dt . . . . . .
4. un module comportant les fonctions seconds membres de l’équation    
... = ...
différentielle et les éventuelles solutions analytiques exactes ou approchées
dyn yn fn
5. un module d’utilitaires notamment pour écrire les résultats dans un fichier pour
= fn (t, y1 , y2 , . . . , yn )
dt
visualisation ultérieure.

MNCS 40 2016-2017 MNCS 41 2016-2017

EDO 5 Systèmes d’EDO du 1er ordre 5.1 Méthodes scalaires explicites EDO 5 Systèmes d’EDO du 1er ordre 5.1 Méthodes scalaires explicites

Les méthodes explicites de résolution des équations différentielles scalaires du avant de calculer...
premier ordre s’appliquent aux systèmes.
#–
dy #– Étape 2 : vecteur des pentes au point milieu prédit
#–)
= f (t, y
dt # – #– #–
k2 = f (t1 + h/2, y# –1 + k1 h/2)
À chaque étape, effectuer les calculs sur chaque composante
avant de passer à l’étape suivante : exemple avec point milieu
k2,1 = f1 (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2)
k2,2 = f2 (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2)
Étape 1 : vecteur des pentes au bord gauche de l’intervalle
... = ...
# – #–
k1 = f (t1 , y# –1 ) k2,n = fn (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2)

k1,1 = f1 (t1 , y1,1 , y1,2 , . . . , y1,n )


k1,2 = f2 (t1 , y1,1 , y1,2 , . . . , y1,n )
Étape 3 : vecteur résultat au bord droit de l’intervalle
... = ...
#– #– #–
k1,n = fn (t1 , y1,1 , y1,2 , . . . , y1,n ) u i+1 = ui + h k2

MNCS 42 2016-2017 MNCS 43 2016-2017


EDO 5 Systèmes d’EDO du 1er ordre 5.2 Équations de Lotka-Volterra EDO 5 Systèmes d’EDO du 1er ordre 5.2 Équations de Lotka-Volterra

5.2 Exemple de système non-linéaire couplé du premier ordre : Résolution numérique de Lotka-Volterra : k1 = k2 = 1, a1 = 1, a2 = 0, 2, h = 0, 1
équations de Lotka-Volterra
Échelles linéaires
Deux populations en conflit : modèle proies (y1 ) – prédateurs (y2 )
a1 = 1/τ1 = taux de croissance de y1 (proies) en l’absence de y2 (prédateurs) Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1 Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1
pas = 0,1 ordre de la méthode : 1 pas = 0,1 ordre de la méthode : 4
a2 = 1/τ2 = taux de décroissance de y2 (prédateurs) en l’absence de y1 (proies) 20
proies
20
proies
prédateurs prédateurs

Termes de couplage non-linéaires 15 15

a1

Populations

Populations
y2 = taux de destruction des proies par les prédateurs
k2 10 10

a2
y1 = taux de croissance des prédateurs au détriment des proies 5 5
k1
 
dy1 y2 0 0
= +a1 y1 1 − (18a) 0 20 40 60 80 100 0 20 40 60 80 100
dt k2 temps temps
 
dy2 y1 Méthode d’Euler progressive : Méthode de Runge Kutta d’ordre 4 :
= −a2 y2 1 − (18b)
dt k1 Les solutions divergent Cycle stable
Solutions périodiques
MNCS 44 2016-2017 MNCS 45 2016-2017

EDO 5 Systèmes d’EDO du 1er ordre 5.2 Équations de Lotka-Volterra EDO 5 Systèmes d’EDO du 1er ordre 5.2 Équations de Lotka-Volterra

Résolution numérique de Lotka-Volterra : k1 = k2 = 1, a1 = 1 et a2 = 0, 2. Lotka-Volterra : cycle dans le plan de phase (y1 , y2 )


Échelle log en ordonnée
En éliminant le temps,
Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1 Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1
pas = 0,1 ordre de la méthode : 1 pas = 0,1 ordre de la méthode : 4
dy2 a2 y2 1 − y1 /k1
102
proies
102
proies =− ⇒ y1a2 y2a1 e−a1 y2 /k2 −a2 y1 /k1 = Cte
prédateurs prédateurs
dy1 a1 y1 1 − y2 /k2
100 100

Tangentes horizontales pour y1 = k1 (ou y2 = 0) : équilibre des prédateurs


10−2 10−2
Populations

Populations

Tangentes verticales pour y2 = k2 (ou y1 = 0) : équilibre des proies


10−4 10−4

Plan de phase de Lotka Volterra Plan de phase de Lotka Volterra


10−6 10−6 valeurs initiales : proies(0) = 10 prédateurs(0) = 1 valeurs initiales : proies(0) = 10 prédateurs(0) = 1
pas = 0,1 ordre de la méthode : 1 pas = 0,1 ordre de la méthode : 4
8.0 8.0
prédateurs= f(proies) prédateurs= f(proies)
10−8 10−8
7.0 7.0

6.0 6.0
10−10 10−10
0 20 40 60 80 100 0 20 40 60 80 100
5.0 5.0
prédateurs

prédateurs
temps temps
4.0 4.0

Méthode d’Euler progressive : divergente Méthode de Runge Kutta d’ordre 4 : stable 3.0 3.0

d ln y2 2.0 2.0
Pente avec peu de proies : ≈ −1/τ2 d’où facteur e−4 ≈ 1/54 sur une durée de 20 = 4τ2 . 1.0 1.0
dt
d ln y1 0.0
0 5 10 15 20
0.0
0 5 10 15 20
Pente avec peu de prédateurs : ≈ 1/τ1 d’où facteur 100 sur durée de 4, 6 = 4, 6τ1 proies proies

dt
Méthode d’Euler : non périodique Runge Kutta d’ordre 4 : cycle correct
MNCS 46 2016-2017 MNCS 47 2016-2017
EDO 6 Équations différentielles d’ordre supérieur EDO 6 Équations différentielles d’ordre supérieur 6.1 Exemple

6.1 Exemple
6 Équations différentielles d’ordre supérieur
Système linéaire du second ordre avec excitation h(t)
 
dn y dy dn−1 y
= f t, y, , . . . , d2 y dy
dtn dt dtn−1 =a + by + h(t)
dt 2 dt
Une EDO scalaire d’ordre n se ramène à un système de n équations différentielles
Poser        
du premier ordre couplées en posant : 0
y y y y2
 1 =   ⇒  1 =  
        y2 y 0
y20
ay2 + by1 + h(t)
y1 y y10 y2
       
 y   y0   y0   y3  Condition initiale vectorielle : position y(t0 ) et vitesse y 0 (t0 )
 2    2  
 =  =⇒  = 
. . .   . . .  . . .   ... 
       
yn y (n−1)
yn0 f (t, y1 , y2 , . . . , yn ) Remarque Système différentiel d’ordre p de dimension n
⇒ système différentiel couplé du premier ordre à np dimensions.

MNCS 48 2016-2017 MNCS 49 2016-2017

EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule

6.2 Exemple d’EDO d’ordre 2 : le pendule Résolution numérique du système non-linéarisé, avec les valeurs initiales :
     
Pendule non linéaire (y = position angulaire) y1 (0) y(0) position angulaire
  =  dy = 
d2 y l y2 (0) (0) = a vitesse angulaire
= −k 2 sin(y) où k 2 = g/l (19) dt
dt2
y Énergie mécanique conservée (après division par ml2 ) :
Pendule linéarisé (cas des petites amplitudes) : sin(y) ≈ y
mg  2
1 dy
d2 y + k 2 (1 − cos y) = constante
= −k 2 y (20) 2 dt
dt2
l’équation linéarisée admet une solution analytique en A sin(kt + ϕ). Cas où y(0) = 0 (départ en position d’équilibre stable)
 2  2
Exprimer cette EDO du second ordre sous la forme d’un système différentiel couplé 1 dy 2 1 dy
+ k (1 − cos y) = (0)
de dimension 2 mais du premier ordre. 2 dt 2 dt
       
Vitesse angulaire minimale pour y = π (position d’équilibre instable si atteinte).
y y y10 y2
 1 =   =⇒  =  dy
Si a = (0) > 2k (seuil) ⇒ la vitesse angulaire ne s’annule pas (apériodique).
y2 y0 y20 −k 2 sin(y1 ) dt
Étude de la transition périodique–apériodique selon a dans le cas où k = 1

MNCS 50 2016-2017 MNCS 51 2016-2017


EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule

Comparaisons non-linéaire (Runge-Kutta 4)–analytique linéarisé : y(t) Comparaisons non-linéaire (RK 4)–analytique linéarisé : plan de phase y 0 (y)
pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=0.2 pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=1 plan de phase pendule: méth. ordre 4 vitesse ang. init.=0.2 plan de phase pendule: méth. ordre 4 vitesse ang. init.=1
méthode d’ordre 4 méthode d’ordre 4 méthode d’ordre 4 méthode d’ordre 4
de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 2.0000000e−01 valeurs initiales 0.0000000e+00 1.0000000e+00 valeurs initiales 0.0000000e+00 2.0000000e−01 valeurs initiales 0.0000000e+00 1.0000000e+00
0.25 1.5 0.25 1.0

0.20 0.20 0.8


1.0
0.15 0.15 0.6

0.10 0.10 0.4


0.5
0.05 0.05 0.2

dtheta/dt

dtheta/dt
theta

theta
0.00 0.0 0.00 0.0

−0.05
−0.05 −0.05 −0.2
−0.5
−0.5
−0.10
−0.10 −0.10 −0.4

−0.15
−0.15 −0.15 −0.6
−1.0
−1.0

−0.20
−0.20 −0.20 −0.8

−0.25
−0.25 −1.5
−1.5 −0.25 −1.0
0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50 −0.25 −0.20 −0.15 −0.10 −0.05 0.00 0.05 0.10 0.15 0.20 0.25 −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5
estimé estimé estimé estimé
linéaire temps linéaire temps linéarisé theta linéarisé theta

a = 0.2  1 linéarisable a = 1 périodique non sinusoïdal a = 0.2  1 linéarisable a = 1 périodique non sinusoïdal
pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=1.98 pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=2.02 plan de phase pendule: méth. ordre 4 vitesse ang. init.=1.98 plan de phase pendule: méth. ordre 4 vitesse ang. init.=2.02
méthode d’ordre 4 méthode d’ordre 4 méthode d’ordre 4 méthode d’ordre 4
de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 1.9800000e+00 valeurs initiales 0.0000000e+00 2.0200000e+00 valeurs initiales 0.0000000e+00 1.9800000e+00 valeurs initiales 0.0000000e+00 2.0200000e+00
3 50 2.0 2.5

2.0
1.5
2 40
1.5
1.0
1.0
1 30
0.5
0.5

dtheta/dt

dtheta/dt
theta

theta
0 20 0.0 0.0

−0.5
−0.5
−1
−1 10
−1.0
−1.0
−1.5
−2
−2 0
−1.5
−2.0

−3
−3 −10
−10 −2.0 −2.5
0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50 −3 −2 −1 0 1 2 3 −10 0 10 20 30 40 50
estimé estimé estimé estimé
linéaire temps linéaire temps linéarisé theta linéarisé theta

MNCS
a = 1.98 périodique non sinusoïdal 52
a = 2.02 apériodique 2016-2017 MNCS
a = 1.98 périodique non sinusoïdal 53
a = 2.02 apériodique 2016-2017

EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule EDO 6 Équations différentielles d’ordre supérieur 6.2 Exemple d’EDO d’ordre 2 : le pendule

Comparaisons non-linéaire (Euler)–analytique linéarisé y(t) Comparaisons non-linéaire (Euler)–analytique linéarisé : plan de phase y 0 (y)
pendule + sol. linéarisée: méth. ordre 1 vitesse ang. init=0.2 pendule + sol. linéarisée: méth. ordre 1 vitesse ang. init=1 plan de phase pendule: méth. ordre 1 vitesse ang. init.=0.2 plan de phase pendule: méth. ordre 1 vitesse ang. init.=1
méthode d’ordre 1 méthode d’ordre 1 méthode d’ordre 1 méthode d’ordre 1
de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 2.0000000e−01 valeurs initiales 0.0000000e+00 1.0000000e+00 valeurs initiales 0.0000000e+00 2.0000000e−01 valeurs initiales 0.0000000e+00 1.0000000e+00
0.3 1.5 0.3 1.5

0.2 1.0 0.2 1.0

0.1 0.5 0.1 0.5

dtheta/dt

dtheta/dt
theta

theta

0.0 0.0 0.0 0.0

−0.1
−0.1 −0.5
−0.5 −0.1 −0.5

−0.2
−0.2 −1.0
−1.0 −0.2 −1.0

−0.3
−0.3 −1.5
−1.5 −0.3 −1.5
0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50 −0.3 −0.2 −0.1 0.0 0.1 0.2 0.3 −1.5 −1.0 −0.5 0.0 0.5 1.0 1.5
estimé estimé estimé estimé
linéaire temps linéaire temps linéarisé theta linéarisé theta

a = 0.2 a=1 a = 0.2 a=1


pendule + sol. linéarisée: méth. ordre 1 vitesse ang. init=1.98 pendule + sol. linéarisée: méth. ordre 1 vitesse ang. init=2.02 plan de phase pendule: méth. ordre 1 vitesse ang. init.=1.98 plan de phase pendule: méth. ordre 1 vitesse ang. init.=2.02
méthode d’ordre 1 méthode d’ordre 1 méthode d’ordre 1 méthode d’ordre 1
de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01 de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 1.9800000e+00 valeurs initiales 0.0000000e+00 2.0200000e+00 valeurs initiales 0.0000000e+00 1.9800000e+00 valeurs initiales 0.0000000e+00 2.0200000e+00
5 60 2.0 2.5

0 1.5 2.0
50
−5
−5 1.5
1.0
−10
−10 40 1.0
0.5
−15
−15 0.5
30 0.0
dtheta/dt

dtheta/dt
theta

theta

−20
−20 0.0
20 −0.5
−25
−25 −0.5
−1.0
−30
−30
10 −1.0
−1.5
−35
−35 −1.5
0
−40
−40 −2.0 −2.0

−45
−45 −10
−10 −2.5 −2.5
0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50 −45 −40 −35 −30 −25 −20 −15 −10 −5 0 5 −10 0 10 20 30 40 50 60
estimé estimé estimé estimé
linéaire temps linéaire temps linéarisé theta linéarisé theta

MNCS
a = 1.98 apériodique selon Euler ! 54
a = 2.02 2016-2017 MNCS
a = 1.98 apériodique selon Euler ! 55
a = 2.02 2016-2017
EDO 7 Implémentation vectorielle EDO 7 Implémentation vectorielle 7.2 En fortran (norme 2003)

7.2 En fortran (norme 2003)


7 Mise en œuvre vectorielle des méthodes à un pas Utiliser des fonctions à argument tableau de rang 1
#–
y
d’étendue p déterminée à l’exécution (nombre p d’EDO scalaires d’ordre 1)
7.1 Introduction et à résultat tableau de même étendue que
#– pour :
y
— Les méthodes d’intégration doivent fonctionner quelle que soit la taille p des 1. le second membre de l’équation différentielle :
#– #–
vecteurs qui représentent la solution y et le second membre f de l’EDO. MODULE abstrait
— Il en est de même pour l’interface formelle de la fonction second membre en ABSTRACT INTERFACE ! de la fct générique IInd mb de l’EDO
fortran ou le pointeur de fonction second membre en C. FUNCTION fty(t, y) ! dy/dt
— C’est le programme principal qui fixera cette taille. REAL, DIMENSION(:),INTENT(in) :: y ! variable vecteur
Il devra donc choisir un second membre de la même dimension. REAL, INTENT(in) :: t
REAL, DIMENSION(SIZE(y)) :: fty ! vecteur résultat
— Les tailles des tableaux des seconds membres effectifs seront héritées du
END FUNCTION fty
programme principal et non déclarées explicitement.
#– END INTERFACE
Mais seules les p composantes effectives de f (2 pour le pendule : dérivée et
END MODULE abstrait
#–
dérivée seconde) seront calculées à partir des p composantes de y . #–
L’étendue p du vecteur résultat f effectif sera donc fixée par le programme
principal via
#– et non par la fonction second membre.
y
MNCS 56 2016-2017 MNCS 57 2016-2017

EDO 7 Implémentation vectorielle 7.2 En fortran (norme 2003) EDO 7 Implémentation vectorielle 7.2 En fortran (norme 2003)

2. chacune des méthodes à un pas (Euler, point milieu et Runge Kutta) :


#–
les pentes locales ki seront des tableaux locaux, par exemple automatiques.

FUNCTION u2_rk4(u1, t1, h, f) 3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les
USE abstrait ! où est définie l’interface abstraite fty solutions vectorielles (analytique et par intégration) sont représentées par des
REAL, DIMENSION(:), INTENT(IN) :: u1 ! valeur initiale
tableaux 2D alloués dynamiquement (n instants, p composantes).
REAL, INTENT(IN) :: t1 ! instant initial
Les étendues n et p sont donc choisies à l’exécution, sachant que p doit être
REAL, INTENT(IN) :: h ! pas
correspondre au nombre effectif de composantes du second membre étudié.
PROCEDURE(fty) :: f ! déclaration de l’interface de f
REAL, DIMENSION(SIZE(u1)) :: u2_rk4 ! valeur estimée à t1+h Mais la dimension temporelle n’est pas « vue » par les méthodes : elles

! variables locales de même étendue que u1 travaillent sur des vecteurs (d’étendue p) dans un intervalle [ti , ti+1 ], à i fixé.

REAL, DIMENSION(SIZE(u1)) :: k1, k2, k3, k4 ! pentes locales


...
u2_rk4 = u1 + ...
END FUNCTION u2_rk4

MNCS 58 2016-2017 MNCS 59 2016-2017


EDO 7 Implémentation vectorielle 7.3 En C89 avec des tableaux dynamiques EDO 7 Implémentation vectorielle 7.3 En C89 avec des tableaux dynamiques

2. pour chacune des méthodes à un pas (Euler, point milieu et Runge Kutta) les
7.3 En C89 avec des tableaux dynamiques sur le tas #–
pentes locales ki seront des tableaux alloués et libérés localement, car leur
nombre dépend de la méthode ; en revanche, le résultat
#–
Utiliser des fonctions à « argument tableau 1D »
#– de taille déterminée à l’exécution
y u i+1 qui est aussi
#–
et rendant un pointeur vers un tableau alloué sur le tas de même taille que y . vectoriel sera passé en argument (sous forme pointeur plus nombre
d’éléments), son allocation et libération prises en charge par l’appelant.
1. le second membre de l’équation différentielle sera alloué par la fonction
#– #–
f ( y , t) qui rend le pointeur vers ce tableau, dont la fonction appelante (la void u2_milieu(int p, float *u1, float t1, float h,
méthode d’intégration) devra prendre en charge la libération ; float* (* ptr_f) (float, float*, int),
float * u2){
/* permettant d’avancer d’un pas en temps*/
float * pendule(float t, float *u, int p){
float *k1 = NULL; /* vecteur pente */
float *second_membre= NULL; /* tableau 1D */ float *k2 = NULL; /* vecteur pente */
second_membre = float1d(p); /* allocation sur le tas */ float *u12 = NULL; /* vecteur intermédiaire */
second_membre[0] = u[1]; k1 = (*ptr_f)(t1, u1, p); /* allocation par la fct IInd membre */
second_membre[1] = -sin(u[0]); u12 = float1d (p); /* allocation locale */
/* ... */
return second_membre; /* valeur de retour = pointeur */
float1d_libere(k1); /* libération des vecteurs des pentes */
} /* ... */

MNCS 60 2016-2017 MNCS 61 2016-2017

EDO 7 Implémentation vectorielle 7.3 En C89 avec des tableaux dynamiques EDO 7 Implémentation vectorielle 7.4 En C99 avec des tableaux automatiques

7.4 En C99 avec des tableaux automatiques


3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les
#–
Fonctions à « argument tableau 1D » y de taille p déterminée à l’exécution
solutions vectorielles (analytique et par intégration) sont représentées par des Déclaration tardive des tableaux automatiques ⇒ éviter les tableaux dynamiques
tableaux 2D. Mais la dimension temporelle n’est pas « vue » par les méthodes : Mais une fonction ne peut pas rendre un tableau ⇒ fonctions à résultat void
elles travaillent sur des vecteurs de taille p dans un intervalle [ti , ti+1 ]. Cela ⇒ déclaration du tableau argument par l’appelant
impose que les composantes des vecteurs soient contigües en mémoire, donc et remplissage par la fonction appelée
le deuxième indice est celui des composantes, le premier celui du temps. 1. la fonction second membre de l’équation différentielle remplit le tableau
#– #–
second_mb de taille p représentant f ( y , t)
qui a été déclaré par l’appelant (la méthode) avec la taille fixée par le main
/* allocation dans le main des tableaux 2D */
u = float2d(n, p); /* n instants et p equations */ // version C99 avec tableaux automatiques
/* appel de la méthode du point milieu par exemple */ void pendule(float t, int p, float u[p], float second_mb[p]){
u2_milieu(p, u[i], t[i], h, &pendule, u[i+1]); // p = 2 ici = dimension des vecteurs u et second_membre
/* donc u[i] est un tableau 1D = vecteur des composantes de u_i */ second_mb[0] = u[1];
second_mb[1] = -sin(u[0]);
return;
}
MNCS 62 2016-2017 MNCS 63 2016-2017
EDO 7 Implémentation vectorielle 7.4 En C99 avec des tableaux automatiques EDO 7 Implémentation vectorielle 7.4 En C99 avec des tableaux automatiques

2. pour chacune des méthodes à un pas (Euler, point milieu et Runge Kutta) les 3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les
#– solutions vectorielles (analytique et par intégration) sont représentées par des
pentes locales ki seront des tableaux locaux automatiques, car leur nombre
#–
dépend de la méthode ; en revanche, le résultat u i+1 qui est aussi vectoriel tableaux 2D. Mais la dimension temporelle n’est pas « vue » par les méthodes :

sera passé en argument, sa déclaration étant prise en charge par l’appelant. elles travaillent sur des vecteurs de taille p dans un intervalle [ti , ti+1 ]. Cela
impose que les composantes des vecteurs soient contigües en mémoire, donc
// C99 avec tableaux automatiques le deuxième indice est celui des composantes, le premier celui du temps.
void u2_milieu(int p, float u1[p], float t1, float h,
void (* ptr_f) (float, int, float[], float[]),
float u2[p]) {
// tableaux automatiques 2D C99 déclarés dans le main
// methode permettant d’avancer d’un pas en temps
// p choisi selon la dimension du second membre
float k1[p] ; // vecteur pente à gauche
float k2[p] ; // vecteur pente au milieu float u[n][p]; // n instants et p equations
float u12[p]; // vecteur intermédiaire // dans la boucle sur les instants i :
(*ptr_f)(t1, p, u1, k1); // évaluation du second membre en u1 // appel de la méthode du point milieu par ex.
// résultat dans le vecteur local k1 u2_milieu(p, u[i], t[i], h, &pendule, u[i+1]);
... // u[i] et u[i+1] : vecteurs à p composantes
// tableau u2[p] déclaré dans l’appelant et rempli ici (boucle)
// t[i] : scalaire

MNCS 64 2016-2017 MNCS 65 2016-2017

EDO RÉFÉRENCES RÉFÉRENCES EDO TABLE DES MATIÈRES TABLE DES MATIÈRES

Références Table des matières

A KAI , T ERRENCE J., Applied Numerical Methods for Engineers, 410 pages (Wiley, 1 Introduction 1
1994), ISBN 0-471-57523-2.
1.1 Problème différentiel . . . . . . . . . . . . . . . . . . . . . . . . . 1
B URDEN , R ICHARD L. et J. D OUGLAS FAIRES, Numerical Analysis, 847 pages 1.2 Deux types de problèmes différentiels à résoudre . . . . . . . . . . . 2
(Thompson, Brooks/Cole, 2005), huitième édition, ISBN 0-534-40499-5.
1.3 Équations différentielles scalaires du 1er ordre . . . . . . . . . . . . 3
D EMAILLY, J.-P., Analyse numérique et équations différentielles, 350 pages (EDP 1.4 Unicité et problème bien posé : conditions suffisantes . . . . . . . . . 4
Sciences, 2006), troisième édition, ISBN 978-2-86883-891-9.
1.5 Méthodes de résolution numérique et notations . . . . . . . . . . . . 5
G UILPIN , C H ., Manuel de calcul numérique appliqué, 577 pages (EDP Sciences,
2 Méthodes à un pas 7
1999), ISBN 2-86883-406-X.
2.1 Méthodes du premier ordre . . . . . . . . . . . . . . . . . . . . . . 8
R APPAZ , J ACQUES et M ARCO P ICASSO, Introduction à l’analyse numérique, 268
2.1.1 Méthode d’Euler progressive (explicite) . . . . . . . . . . . . 8
pages (Presses polytechniques et universitaires romandes, 2010), ISBN
978-2-88074-851-7. 2.1.2 Méthode d’Euler rétrograde (implicite) . . . . . . . . . . . . . 10

MNCS 66 2016-2017 MNCS 67 2016-2017


EDO TABLE DES MATIÈRES TABLE DES MATIÈRES EDO TABLE DES MATIÈRES TABLE DES MATIÈRES

2.2 Méthodes du deuxième ordre . . . . . . . . . . . . . . . . . . . . . 11 3 Méthodes à plusieurs pas 26

2.2.1 Méthode du point milieu . . . . . . . . . . . . . . . . . . . . 11 3.1 Méthodes d’Adams . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.2.2 Méthode d’Euler modifiée . . . . . . . . . . . . . . . . . . . 13 3.1.1 Adams Bashforth : explicite, pas de terme en f (ti+1 , ui+1 ) . 27

2.2.3 Méthode de Heun . . . . . . . . . . . . . . . . . . . . . . . 16 3.1.2 Adams Moulton : implicite, terme en f (ti+1 , ui+1 ) . . . . . . 28

2.3 Méthodes de Runge Kutta . . . . . . . . . . . . . . . . . . . . . . 17 3.1.3 Comparaison méthodes à un pas et Adams explicite . . . . . . 30

2.3.1 Méthode de Runge Kutta d’ordre 3 . . . . . . . . . . . . . . 17 3.1.4 Méthodes de prédicteur correcteur . . . . . . . . . . . . . . 31

3.2 Méthodes adaptatives . . . . . . . . . . . . . . . . . . . . . . . . 32


2.3.2 Méthode de Runge Kutta d’ordre 4 . . . . . . . . . . . . . . 19
3.2.1 Exemple : méthode de Runge Kutta Fehlberg . . . . . . . . . 33
2.4 Erreur absolue en fonction du pas et de l’ordre . . . . . . . . . . . . 20
3.3 Méthodes d’extrapolation de Gragg . . . . . . . . . . . . . . . . . . 34
2.5 Exemple de l’équation logistique . . . . . . . . . . . . . . . . . . . 21
3.3.1 Principe de l’extrapolation . . . . . . . . . . . . . . . . . . . 34
2.5.1 Exemple d’erreur totale maximale en simple précision . . . . . 23
3.3.2 Comparaison méthodes à un pas et extrapolation de Gragg . . 37
2.5.2 Exemple d’erreur totale maximale en double précision . . . . . 24

2.5.3 Comparaison des erreurs maximales simple/double précision . 25 4 Les EDO du premier ordre en pratique 38

MNCS 68 2016-2017 MNCS 69 2016-2017

EDO TABLE DES MATIÈRES TABLE DES MATIÈRES EDO TABLE DES MATIÈRES TABLE DES MATIÈRES

4.1 Échelles de temps et problèmes raides . . . . . . . . . . . . . . . . 38

4.2 Validation des résultats . . . . . . . . . . . . . . . . . . . . . . . . 39

4.3 Structure des programmes de résolution d’EDO du 1er ordre . . . . . 40

Structure des programmes d’EDO du 1er ordre 40 7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

7.2 En fortran (norme 2003) . . . . . . . . . . . . . . . . . . . . . . . 57


5 Systèmes d’EDO du 1er ordre 41
7.3 En C89 avec des tableaux dynamiques . . . . . . . . . . . . . . . . 60
5.1 Méthodes scalaires explicites . . . . . . . . . . . . . . . . . . . . . 41
7.4 En C99 avec des tableaux automatiques . . . . . . . . . . . . . . . 63
5.2 Équations de Lotka-Volterra . . . . . . . . . . . . . . . . . . . . . 44

Bibliographie 66
6 Équations différentielles d’ordre supérieur 48

6.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

6.2 Exemple d’EDO d’ordre 2 : le pendule . . . . . . . . . . . . . . . . 50

7 Implémentation vectorielle 56

MNCS 70 2016-2017 MNCS 71 2016-2017