Vous êtes sur la page 1sur 33

Introduction aux méthodes numériques

Wenping BI
Laboratoire d’Acoustique de l’Université du Maine,
UMR CNRS 6613
Av. O Messiaen, 72085 LE MANS Cedex 9,
France

1
Table des Matières
1. Introduction
• Résolution numérique de problémes
• Complexité d’un algorithme
• Convergence d’un algorithme
• Sensibilité aux erreur de données
• Erreur absolue et relative
• (Représentation des nombre en virgule flottante)
2. Résolution d’équations non linéaires
• Méthode de bisection
Exposé de la méthode et convergence de la méthode
• Méthode de Newton-Raphson
Exposé de la méthode et convergence de la méthode
3. Résolution de systeme d’équations
• Méthode Gaussian elimination
• Méthode LU décomposition
4. Equations différentielles ordinaires
• Méthode de Taylor
• Méthode d’Euler explcite
• Méthode d’Euler implicite
• Méthodes de Runge-Kutta
• Systemes d’équations différentielles ordinaires
Examen
1. Un examen écrit à la fin du semestre. Il contient algorithmes, programmes en
Python
2. 3 TPs

Rédaction d’un compte-rendu de TP

Tout les compte-rendu de TPs se décomposent en quatre phases :


1. rappel sur le cours-TD ou les algorithmes,
2. résolutions les questions à la main, en appliquant les algorithmes,
3. mettre en œuvre les algorithmes et illustrer des résultats,
4. conclusions ou remarques.

2
Références

1. Timothy Sauer, Numerical Analysis,

2. Q. Louveaux, Introduction aux M éthodes Numériques


https://orbi.uliege.be/bitstream/2268/38304/1/MethodesNumeriques2010.pdf

3
1 Introduction
1.1 Complexité d’un algorithme
1.2 Convergence d’un algorithme

Figure 1: Convergence d’une suite.

1.3 Sensibilité aux erreur de données


• Erreurs sur les données

• Erreurs de troncature
Example : Le développement en série de Taylor de la fonction exp(x) est

x2 x3 X xn
ex = 1 + x + + + ··· = , (1)
2! 3! n=0
n!

Quand x = 1, e ≈ 2.7182818284590456. Combien de terms de la série sont


nécessairess afin d’obtenir le nombre de décimales correctes désiré?

4
• Erreurs d’arrondi
Example : Calculer Z 1
In = xn ex dx, (2)
0
pour n = 20. En intégrant par partis, on obtient la relation récurrence
Z 1
In = e − n xn−1 ex dx, In = e − nIn−1 , I0 = e − 1, I1 = 1, (3)
0

n In calculé In exact
17 0.1043 0.1434
18 0.8417 0.1362
19 -13.2742 0.1297
20 268.2026 0.1238

(Le calcul se fait avec une précision de 16 décimale, machine epsilon est eps =
2.22 × 10−16 . In,calcule = In + en , en = n!eps)

1.4 Erreur absolue et relative

2 Résolutionds d’une équation non-linéaire


Dans cette section, nous passons en revue les principales méthodes : Méthode de la
bisection et Méthode de Newton-Raphson pour trouver une racine d’une équation
non linéair.1

2.1 Méthode de la bisection


Supposons que l’on cherche à localiser une racine d’une fonction continue f (x). Si de
plus, on connaı̂t deux points a0 et b0 tels que f (a0 ) < 0 et f (b0 ) > 0. On suppose
sans perte de généralité que a0 < b0 . Dès lors, le théorème des valeurs intermédiaires
nous garantit qu’une racine x de f existe sur l’intervalle [a0 , b0 ]. L’algorithme de la
bisection consiste à définir xi := (ai−1 + bi−1 )/2. Si f (xi ) < 0, alors ai := xi et
bi := bi−1 . Si, en revanche, f (xi ) > 0, alors ai := ai−1 et bi := xi . Il n’est pas difficile
de prouver que la méthode de la bisection converge vers une racine x̄ avec un taux
de convergence linéaire.
Proposition Soit x̄ une racine (supposée unique) de f sur l’intervalle [a0 , b0 ].
Alors on a
(b0 − a0 )
|x̄ − xn | ≤ (4)
2n
Démonstration: La taille de l’intervalle [ai , bi ] est exactement divisée par 2 à chaque
itération. De plus, comme la racine x̄ se trouve soit dans la première, soit dans la
deuxième partie de l’intervalle, on en déduit que la distance entre x̄ et xn est inférieure
1
Parts of this chapter is from: Q. Louveaux, Institut Montefiore

5
Figure 2: Convergence Bisection.

ou égale à la moitié de la taille de l’intervalle à l’itération n. Le résultat découle ensuite


du fait que la taille de l’intervalle à l’itération n est égal à (b0 − a0 )/2n−1 . La méthode
de la bisection admet donc un taux de convergence linéaire.
Comme dit précédemment, la méthode de la bisection est très facile à mettre en
oeuvre et admet une bonne stabilité. Le seul point négatif est qu’elle nécessite deux
points de départ a0 et b0 qui peuvent être difficiles à trouver. Dans certains cas, de
tels points n’existent même pas. Par exemple, pour une fonction qui admet une racine
double, il est impossible de mettre la méthode de la bisection en oeuvre au voisinage
de la racine. De plus, la méthode nécessite la continuité de la fonction. Des résultats
erronés peuvent apparaı̂tre si on néglige ce point.

2.2 Méthode de Newton-Raphson


2.2.1 Méthode de Newton-Raphson
Nous allons améliorer le taux de convergence en profitant de l’information de la dérivée
de f si celle-ci est disponible. Le principe de la méthode est d’approximer la fonc-
tion f par une droite. Mais au lieu de considérer la droite reliant (xn , f (xn )) à
(xn−1 , f (xn−1 )), nous allons considérer l’approximation linéaire donnée en xn par le
développement en série de Taylor tronqué au terme linéaire. Rappelons que nous

6
Figure 3: Expliquation de N-R

avons
0 (x − xn )2 00
f (x) = f (xn ) + (x − xn )f (xn ) + f (xn ) + · · · (5)
2
Si nous approximons f uniquement par les deux premiers termes de cette série, nous
obtenons f (x) = f (xn ) + (x − xn )f 0 (xn ). Une approximation d’une racine de cette
fonction est donc
f (xn )
x = xn − 0 . (6)
f (xn )
L’algorithme de Newton-Raphson consiste à considérer cette approximation comme
itéré suivant. Nous aurons donc
f (xn )
xn+1 = xn − 0 . (7)
f (xn )
L’interprétation géométrique de la méthode est indiquée sur la Figure 3. A partir
du point (xn ,f (xn )), on trace la tangente à f et recherchons l’intersection de cette
tangente avec l’axe des abscisses. Cela donne l’itéré suivant.

2.2.2 Convergence de la méthode de Newton-Raphson


Etudions à présent le taux de convergence de la méthode de Newton- Raphson. Le
théor‘eme suivant prouve que la méthode jouit d’une convergence d’ordre quadratique.
Théorème Soit x̄, une racine de f . Si f 0 (x̄) 6= 0, la méthode de Newton- Raphson
converge quadratiquement vers x̄ dans un voisinage de x̄, c’est-à-dire
|xn − x̄| ≤ C|xn−1 − x̄|2 , (8)
pour C > 0, n suffisamment grand, et x suffisamment proche de x̄.
Démonstration: Ecrivons l’erreur réalisée à l’itération n. Nous avons
f (xn−1 )
|xn − x̄| = |xn−1 − x̄ − 0 | (9)
f (xn−1 )
Par le théorème de Taylor, nous avons
(x̄ − xn−1 )2 00
0 = f (x̄) = f (xn−1 ) + (x̄ − xn−1 )f 0 (xn−1 ) + f (ξn ), (10)
2
7
Figure 4: Deux cas de non-convergence pour la méthode de Newton-Raphson

pour ξn compris entre xn et xn−1 . Utilisant l’expression de f (xn−1 ), on peut donc


réécrire Eq. (9) comme

f (xn−1 ) (x̄ − xn−1 )2 f 00 (ξn )


|xn − x̄| = |xn−1 − x̄ + (x̄ − xn−1 ) + |
f 0 (xn−1 ) 2 2f 0 (xn−1 )
f 00 (ξn )
= |(x̄ − xn−1 )2 |
2f 0 (xn−1 )
≤ C|(x̄ − xn−1 |2 (11)

car f 0 (x̄) 6= 0 par hypothèse et dès lors, on peut prouver que f 00 (ξn )/f 0 (x̄) est borné
dans un voisinage de x̄.
Lorsque l’on se trouve proche de la racine, la méthode de Newton-Raphson con-
verge extrêmement vite. Malheureusement, cette convergence n’est pas globale. Pour
certains points de départ, en effet, il peut arriver que la méthode diverge ou cycle,
elle aussi. Cela peut être aisément illustré. La Fig. 4 indique quelques mauvais
cas qui peuvent se produire. Dans le cas de plusieurs racines pour f , il n’est, en
général, pas évident de savoir a priori quels points de départ convergeront vers quelles
racines. C’est la raison pour laquelle la méthode de Newton sera souvent utilisée pour
améliorer rapidement une approximation obtenue par une autre méthode plus robuste
(comme par exemple la bisection). Enfin, il y a un cas particulier important pour
lequel la méthode n’admet pas une convergence quadratique. Nous avons vu, en effet,
que la convergence quadratique n’est obtenue dans le Théorème que pour f 0 (x̄) 6= 0.
Dans le cas d’une racine multiple, et donc avec f 0 (x̄) = 0, la méthode converge
néanmoins mais seulement linéairement.
Théorème Soit x̄ une racine de f . Si f 0 (x̄) = 0, l’itérè de la méthode de Newton-
Raphson converge linéairement vers x̄ dans un voisinage de x̄.
Démonstration: On a xn = xn−1 − ff0(x n−1 )
(xn−1 )
. On peut donc écrire l’erreur

f (xn−1 )
|xn − x̄| = xn−1 − x̄ − (12)
f 0 (xn−1 )

Remarquons que nous ne pouvons plus utiliser le même développement de Taylor


d’ordre 2 qu’auparavant car cela nécessitait de borner f 00 /f 0 au voisinage de x̄. Nous
pouvons cependant utiliser un développement d’ordre 1 et écrire

0 = f (x̄) = f (xn−1 ) + (x̄ − xn−1 )f 0 (ξn ), (13)

8
Nous pouvons maintenant rééecrire (12) comme

f 0 (ξn )
|xn − x̄| = |xn−1 − x̄ + (xn−1 − x̄)| (14)
f 0 (xn−1 )
f 0 (ξn )
= |(1 + 0 )(xn−1 − x̄)|.
f (xn−1 )

Cette fois, nous pouvons borner l’expression f 0 (ξn )/f 0 (xn ) car ξn est compris entre x̄
et xn . Dans un voisinage de x̄, on a dès lors que |f 0 (x̄)| ≤ |f 0 (ξn )| ≤ |f 0 (xn )|. On
peut donc déduire de (14) que

|xn − x̄| ≤ C|(x̄ − xn−1 |, (15)

avec C > 0.
Si on sait à l’avance que l’on cherche une racine double, il est possible de retrouver
un ordre quadratique de convergence. Pour une racine de multiplicité m, les itérations

f (xn )
xn+1 = xn − m . (16)
f 0 (xn )

produisent à nouveau une convergence quadratique.

2.3 TP1 : Résolutions des équations non-linéaires


a) Chercher, à la main, la racine avec 3 décimales correctes de l’équation x3 +x−1 = 0
à partir de la valeur initiale x0 = −0.6 en utilisant la méthode Newton-Raphson.
Calculer les 3 premières itérations de la méthode. (La solution exacte est xe =
0.682327803828.)
(b) Écrire un programme Python de l’algorithme de Newton-Raphson pour résoudre
la question (a) avec 10 décimales correctes.
(c) Refaire (a) et (b) en utilisant la méthode Bisection sur l’intervallle [0, 1].
(d) Résoudre l’équation x tan(x) = 10 en utilisant la méthode Newton-Raphson. (e)
Prouver la convergence de la méthode Newton-Raphson est quadratiquement.

3 Élimination de Gauss, factorisation LU


L’objet de cette section est d’utiliser les mthodes élémentaires de l’analyse numérique
matricielle pour résoudre des systèmes linéaires simples. L’implémentation est faite
à l’aide du logiciel Python.
Dans la suite, on considère une matrice carrée A = (aij ), i, j = 1, · · · , n, supposée
inversible. On cherche à résoudre le système linéaire

Ax = b, (17)

pour b = (b1 , b2 , · · · , bn )T ∈ Rn donné. Résoudre (17) signifie déterminer x =


(x1 , x2 , · · · , xn )T ∈ Rn .

9
3.1 Résolution des systèmes triangulaires
Un cas facile à traiter est celui des systèmes triangulaires. Lorsque A est une matrice
triangulaire inférieure, c’est-à-dire que aij = 0 pour tout j > i, il est très facile de
voir que
b1


 x1 = ,

 a11
i−1
! (18)
1 X
x i = a bi − aij xj , i = 2, · · · , n



ii j=1

Lorsque l’on a un système triangulaire supérieur, c’est-à-dire lorsque aij = 0 pour


tout i > j, alors l’algorithme de résolution fonctionne par parcours inverse et devient
b

x n = n ,


 ann
(19)
n
!
1 X
x = b − a x , i = n − 1, · · · , 1.

 i
 i ij j
 aii j=i+1

3.2 Triangulation par élimination de Gauss


La résolution des systèmes triangulaires est facile et peu coûteuse numériquement.
L’idée est donc de proposer des algorithmes qui transforment un système linéaire
général (17) en un système équivalent

Ãx = b̃, (20)

où Ã est triangulaire supérieure, issue de A.


L’algorithme d’élimination de Gauss permet de trianguler la matrice A. Il com-
porte n étapes de transformation. On note A(k) l’état de la matrice transformée à la
k e étape. La matrice à recherchée correspond à A. On initialise l’algorithme avec
A(1) , puis on calcule les étapes k = 2, · · · , n à l’aide de la relation de récurrence
définie pour i = k + 1, · · · , n par
(k)

 (k+1) (k) akj (k)
aij = aij − (k) aik , j = k, · · · , n,



akk
(k)
(21)

(k+1) (k) b (k)
= bi − k(k) aik

b i


akk

10
Algorithm 1 Algorithme d’élimination de Gauss
1: Entrées : A, b
2: pour k = 1, · · · , n − 1 faire
3: //On teste si le pivot est null
4: si |akk | <  alors
5: Afficher un message d’erreur
6: sinon
7: // Calcul de A(k)
8: pour i = k + 1, · · · , n faire
9: c ← aakk
ik

10: bi ← bi − c × bk
11: aik ← 0
12: pour j = k + 1, · · · , n faire
13: aij ← aij − c × akj
14: fin pour
15: fin pour
16: fin si
17: fin pour

3.3 Factorisation LU
Supposons que l’on dispose d’une factorisation telle que A = LU ou L est une matrice
triangulaire inférieure et U supérieure. Alors le système général (17) s’écrit

LUx = b, (22)

que l’on résout en traitant successivement les systèmes triangulaires


(
Ly = b,
(23)
Ux = y.

L’algorithme suivant permet d’obtenir cette factorisation

11
Algorithm 2 Algorithme de Factorisation LU
Entrées : A
L ← Inn
U ← 0nn
pour i = 1, · · · , n − 1 faire
pour j = i, · · ·P, n faire
uij ← uij − i−1 k=1 lik ukj
fin pour
pour j = i + 1, · P · · , n faire
lij ← uii (aji − i−1
1
k=1 ljk uki
fin pour
fin pour P
unn ← aij − n−1 k=1 lnk ukn
: LU

3.4 TP2 : Élimination de Gauss, factorisation LU


1. Trouver la solution, à la main, d’équation en utilisant l’algorithme d’élimination
de Gauss et factorisation LU: Ax = b
     
1 4 1 x1 7
A = 1 6 −1 , x = x2 , b = 13
    
2 −1 2 x3 5

2. Écrire programmes Python de l’algorithme d’élimination de Gauss et factorisa-


tion LU pour résoudre la question 1.

12
4 Résolutions des équations Différentielles Ordi-
naires
4.1 TP3 : Résolutions des équations Différentielles Ordi-
naires
1. On considère, pour t ∈ [0, 2], le problème suivant :

y 0 (t) + 4y = x2 , y(0) = 1,

où le prime désigne la dérivée par rapport au temps t.


a) On prend un pas de temps h = 0.5, calculer, à la main, en utilisant l’algorithme
d’Euler (explicite) pour approcher y(t) en t = 2.
b) Écrivez un programme Python de l’algorithme d’Euler (explicite), et un
programme Python de l’algorithme de Runge-Kutta ordre 2, à pas h = 0.01,
et comparez les résultats numériques et analytiques. (résultats analytiques :
y = 31/32e−4x + 1/4x2 − 1/8x + 1/32).

2. On considère, pour t ∈ [1, 2], le problème suivant :

x000 + x002 − 3x03 + cos2 x = e−t sin(t), x(1) = 1, x0 (1) = 1, x00 (1) = 0,

a) Transforme l’q́uation différentielle ci-dessus en un système des equations


différentielle d’ordre un.
b) On prend un pas de temps h = 0.5, calculer, à la main, en utilisant l’algorithme
d’Euler (explicite) pour approcher x(t) en t = 2.
c) Écrivez un programme Python de l’algorithme d’Euler (explicite) à pas
h = 0.01.

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

UPMC Master P&A/SDUEE Table des matières

1 Introduction 6

UE 4P056 1.1 Problème différentiel . . . . . . . . . . . . . . . . . . . . . . . . . 6


Méthodes Numériques et Calcul Scientifique 1.2 Deux types de problèmes différentiels à résoudre . . . . . . . . . . . 7

1.3 Équations différentielles scalaires du 1er ordre . . . . . . . . . . . . 8

Résolution numérique des 1.4 Unicité et problème bien posé : conditions suffisantes . . . . . . . . . 9

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


équations différentielles ordinaires (EDO)
2 Méthodes à un pas 12

2.1 Méthodes du premier ordre . . . . . . . . . . . . . . . . . . . . . . 13

2.1.1 Méthode d’Euler progressive (explicite) . . . . . . . . . . . . 13


2018–2019 Jacques.Lefrere@upmc.fr
2.1.2 Méthode d’Euler rétrograde (implicite) . . . . . . . . . . . . . 16

MNCS 1 2018-2019

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 . . . . . . . . . . . . . . . . . . . . . 19 3 Méthodes à plusieurs pas 35

2.2.1 Méthode du point milieu . . . . . . . . . . . . . . . . . . . . 19 3.1 Méthodes d’Adams . . . . . . . . . . . . . . . . . . . . . . . . . . 35

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

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

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

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

3.2 Méthodes adaptatives . . . . . . . . . . . . . . . . . . . . . . . . 41


2.3.2 Méthode de Runge Kutta d’ordre 4 . . . . . . . . . . . . . . 27
3.2.1 Exemple : méthode de Runge Kutta Fehlberg . . . . . . . . . 42
2.4 Erreur absolue en fonction du pas et de l’ordre . . . . . . . . . . . . 28
3.3 Méthodes d’extrapolation de Gragg . . . . . . . . . . . . . . . . . . 43
2.5 Exemple de l’équation logistique . . . . . . . . . . . . . . . . . . . 29
3.3.1 Principe de l’extrapolation . . . . . . . . . . . . . . . . . . . 43
2.5.1 Exemple d’erreur totale maximale en simple précision . . . . . 32
3.3.2 Comparaison méthodes à un pas et extrapolation de Gragg . . 46
2.5.2 Exemple d’erreur totale maximale en double précision . . . . . 33

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

MNCS 2 2018-2019 MNCS 3 2018-2019


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 . . . . . . . . . . . . . . . . 47

4.2 Validation des résultats . . . . . . . . . . . . . . . . . . . . . . . . 48

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

5 Systèmes d’EDO du 1er ordre 50


7.2 En fortran (norme 2003) . . . . . . . . . . . . . . . . . . . . . . . 68
5.1 Méthodes scalaires explicites . . . . . . . . . . . . . . . . . . . . . 50
7.3 En C89 avec des tableaux dynamiques . . . . . . . . . . . . . . . . 71
5.2 Équations de Lotka-Volterra . . . . . . . . . . . . . . . . . . . . . 53
7.4 En C99 avec des tableaux automatiques . . . . . . . . . . . . . . . 74

6 Équations différentielles d’ordre supérieur 57


Bibliographie 77
6.1 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

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

7 Implémentation vectorielle 67

7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

MNCS 4 2018-2019 MNCS 5 2018-2019

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

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

1.1 Problème différentiel — Conditions initiales données pour une seule valeur t0 de t, par exemple

(n−1)
— équation différentielle scalaire d’ordre n y(t0 ) = y0 , y 0 (t0 ) = y00 , . . . , y (n−1) (t0 ) = y0
 
dn y dy dn−1 y Problème de conditions initiales ou de Cauchy
=f t, y, , ...,
dtn dt dt n−1
— Conditions données pour des valeurs distinctes de la variable indépendante t,
par exemple :
où f est la fonction second membre donnée
⇒ famille de solutions y(t) à n paramètres y(t0 ) = y0 , y(t1 ) = y1 , . . . , y(tn−1 ) = yn−1
— ensemble de n conditions imposées
Problème de conditions aux limites (non traité, sauf problème de tir).
⇒ choix d’ une solution dans la famille

MNCS 6 2018-2019 MNCS 7 2018-2019


EDO 1 Introduction 1.3 Équations différentielles scalaires du 1er ordre EDO 1 Introduction 1.4 Unicité et problème bien posé : conditions suffisantes

1.4 Unicité et problème bien posé : conditions suffisantes


1.3 Équations différentielles scalaires du 1er ordre
La condition de Lipschitz

Étudier d’abord les équations différentielles scalaires du premier ordre.


|f (t, y2 ) − f (t, y1 )| 6 K |y2 − y1 |
⇒ famille de solutions y(t) à un paramètre (y0 )
assure l’unicité de la solution.
dy
= f (t, y(t)) avec y(t0 ) = y0 condition initiale ∂f
dt (t, y) 6 K dans un domaine convexe ⇒ condition de Lipschitz vérifiée.
∂y
Les erreurs d’arrondi amènent à toujours résoudre un problème perturbé.

Les EDO d’ordre supérieur se ramènent à des systèmes différentiels couplés du Problème bien posé si : le problème faiblement perturbé (second membre ou
premier ordre (EDO vectorielles du premier ordre). condition initiale) possède une solution proche de celle du problème original.
La condition de Lipschitz assure que le problème est bien posé.

MNCS 8 2018-2019 MNCS 9 2018-2019

EDO 1 Introduction 1.5 Méthodes de résolution numérique et notations 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


Méthode à pas
Résolution numérique approchée sur l’intervalle [t0 , t0 + L] de longueur L y exacte constant
Discrétisation par découpage de l’intervalle de longueur L selon un pas constant h famille de solutions exactes approx.
dépendant de y0 Découpage de
Échantillonnage de la solution aux instantsti = t0 + ih pour 1 6 i 6 n.
Solution numérique : ui = approximation de y(ti ) l’intervalle de
yi+1 erreur
longueur L selon
À partir de la condition initiale u0 = y(t0 ) imposée, ui+1 erreur locale cumulée
un pas fixe
faire une boucle sur les abscisses ti pour calculer l’approximation ui+1 à ti+1
h = L/n.
→ approximer ainsi de proche en proche la solution sur l’intervalle L. ui la solution
⇒ accumulation des erreurs dans la boucle passant par (ti , ui ) ui = approximat.
À chaque pas de la boucle, pour calculer ui+1 , on peut s’appuyer : de y(ti )

— sur la dernière valeur calculée ui : méthodes à un pas h


y0
Un pas :
— sur plusieurs valeurs ui−k (k > 0) antérieurement calculées :
méthodes à plusieurs pas (initialisation nécessaire par méthode à un pas)
ti → ti+1
t0 ti ti+1 t ui → ui+1
MNCS 10 2018-2019 MNCS 11 2018-2019
EDO 2 Méthodes à un pas EDO 2 Méthodes à un pas 2.1 Méthodes du premier ordre

2 Méthodes à un pas
Constituent l’algorithme de base qui permet d’estimer la valeur de la solution à
l’instant ti+1 = ti + h, connaissant seulement ui , celle à ti .
La valeur à estimer peut être approchée par un développement limité de Taylor :

dy h2 d2 y
y(ti + h) = y(ti ) + h (ti ) + (ti ) + · · · (1) 2.1 Méthodes du premier ordre
dt 2 dt2
Ordre n de la méthode = plus grande puissance de h prise en compte dans 2.1.1 Méthode d’Euler progressive (explicite)

l’approximation. Méthode du premier ordre d’intérêt pédagogique, à éviter en pratique


— Somme des termes négligés = erreur de troncature locale ∝ hn+1
ui+1 = ui + hf (ti , ui ) (2)
déterministe, augmente si le pas h augmente et si l’ordre de la méthode diminue
— Précision finie des opérations sur les réels ⇒ erreur d’arrondi aléatoire
augmente lorsque les calculs se compliquent, en particulier si le pas h diminue.
Indépendamment du coût (en temps de calcul) des opérations, et des cas où la
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.

MNCS 12 2018-2019 MNCS 13 2018-2019

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

y Méthode d’Euler
Exemple : stabilité

dy y Méthode explicite qui ne


=− ⇒ solution analytique y = y0 e−t/τ ⇒ yn = y0 (e−h/τ )n nécessite qu’une
dt τ
seule évaluation
h n ui+1
ui+1 = ui − ui ⇒ solution numérique un = y0 (1 − h/τ ) de la fonction second
τ
k1 h membre f par pas :
Si τ> 0, la solution exacte vérifie y(∞) = 0,
Mais pour l’approximation, un → 0 ⇐⇒ |1 − h/τ | < 1 ⇐⇒ 0 < h < 2τ . k1 k1 = f (ti , ui )
ui facilement instable
Condition de stabilité : h
(pas h petit) ui+1 − ui
= f (ti , ui )
Mais, si h > τ , alors (1 − h/τ ) < 0 : alternance de signe de la solution un . ti ti+1 t h
voir dérivée avant

MNCS 14 2018-2019 MNCS 15 2018-2019


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.2 Méthode d’Euler rétrograde (implicite) Mise en œuvre de la méthode d’Euler rétrograde : résolution de l’équation
implicite par itération
ui+1 = ui + hf (ti+1 , ui+1 ) (3)
ui+1 = ui + hf (ti+1 , ui+1 )
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). Itérer l’application g pour rechercher son point fixe
Avantage : meilleure stabilité que la méthode progressive explicite. v20 = g(v2 ) = ui + hf (t2 , v2 )
Exemple : stabilité Ce point fixe est la solution de l’équation implicite.
dy y — Utilise plusieurs évaluations du second membre, sans calcul de ses dérivées.
=− ⇒ solution analytique y = y0 e−t/τ ⇒ yn = y0 (e−h/τ )n
dt τ
— Très peu d’itérations nécessaires
h ui
ui+1 = ui − ui+1 ⇒ solution numérique ui+1 = Initialisation par le prédicteur avec Euler progressif
τ 1 + h/τ
y0 t2 = ti + h
un = n
(1 + h/τ ) k1 = f (ti , ui )
Si τ > 0, y(∞) = 0, et aussi un → 0 ∀τ > 0, ∀h > 0 solution stable v2 = ui + hk1

MNCS 16 2018-2019 MNCS 17 2018-2019

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.2 Méthodes du deuxième ordre


Boucle pour recherche du point fixe de g(v2 ) = v20 = ui + hf (t2 , v2 )
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 .
k2 = f (t2 , v2 )
dy d2 y ∂f ∂f dy ∂f ∂f
= f (t, y(t)) ⇒ = + = +f (6)
v20 = ui + hk2 dt dt2 ∂t ∂y dt ∂t ∂y
δv2 = v20 − v2 Préférer utiliser plusieurs évaluations du second membre f en des points adaptés.

arrêt si |δv2 |2 6 α2 |v2 |2 Centrer l’évaluation de la dérivée au point milieu tm = (ti + ti+1 )/2.
v2 = v20 h dy 1 h2 d2 y
y(ti + h) = y(tm ) + (tm ) + (tm ) + O(h3 ) (7a)
2 dt 2 4 dt2
∂f
La fonction g est contractante si g 0 (v2 ) = h ∂v 61 h dy 1 h2 d2 y
2
y(ti ) = y(tm ) − (tm ) + (tm ) + O(h3 ) (7b)
ce qui est vérifié si le pas est assez faible.
2 dt 2 4 dt2
∂f
Rappel : la condition de Lipschitz est ∂v 6 K Par différence, (approximation locale parabolique, voir aussi dérivée centrée à 2 termes)
2

Critère d’arrêt : choisir α faible, mais α > ε. dy


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

MNCS 18 2018-2019 MNCS 19 2018-2019


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 ) (8a) k1 membre par pas dont
ui
h h une hors grille.
(ui+1/2 calculé via Euler) k2 = f (ti + , ui + k1 ) (8b)
2 2
ui+1 = ui + hk2 (8c)
ti ti + h/2 ti+1 t

MNCS 20 2018-2019 MNCS 21 2018-2019

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 7a et 7b à 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.
(voir méthode de quadrature dite des trapèzes) :
dy dy dy
(ti ) + (ti+1 ) = 2 (tm ) + O(h2 )
dt dt dt k1 = f (ti , ui ) (9a)
D’où une approximation n’utilisant pas la valeur de f au point milieu tm :
k2 = f (ti+1 , ui + k1 h) (9b)
h
ui+1 = ui + [f (ti , ui ) + f (ti+1 , ui+1 )] h
2 ui+1 = ui + [k1 + k2 ] (9c)
2
De nouveau, méthode a priori implicite, plus stable, mais plus lourde.
Remarques
⇒ Contournement du problème en utilisant l’approximation d’Euler explicite (voir 2)
pour évaluer ui+1 intervenant dans f . — deuxième ordre comme point milieu mais sans évaluation hors grille
— la résolution de l’équation implicite peut se faire en itérant la correction jusqu’à
h
ui+1 = ui + [f (ti , ui ) + f (ti+1 , ui + hf (ti , ui ))] ce qu’elle devienne négligeable.
2

MNCS 22 2018-2019 MNCS 23 2018-2019


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 ) (10a)


corrigé
ui+1 modifiée 2 2
k2 = f (ti + h, ui + k1 h) (10b)
k2 h/2 k2 k2 3 3
Méthode explicite qui h
prédit ui+1 = ui + [k1 + 3k2 ] (10c)
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 24 2018-2019 MNCS 25 2018-2019

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 ) (12a)
k1 = f (ti , ui ) (11a) h h
k2 = f (ti + , ui + k1 ) (12b)
h h 2 2
k2 = f (ti + , u i + k1 ) (11b) h h
2 2 k3 = f (ti + , ui + k2 ) (12c)
k3 = f (ti + h, ui + (2k2 − k1 )h) (11c) 2 2
h k4 = f (ti + h, ui + k3 h) (12d)
ui+1 = ui + (k1 + 4k2 + k3 ) (11d)
6 h
ui+1 = ui + (k1 + 2k2 + 2k3 + k4 ) (12e)
6

MNCS 26 2018-2019 MNCS 27 2018-2019


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
sol_exacte_logistique
2.0 [ 0.0e+00 , 2.0e+01] h= 2.00e-02 y0=1.00e-01 n= 1001

nombre de pas = L/h =⇒ erreur globale ∼ erreur locale × L/h


TABLE 1 – Erreur de troncature seule 1.5

Méthode ordre erreur locale erreur globale

logistique
Euler explicite 1 ∝ h2 ∝h 1.0

Point milieu – Euler modifiée 2 ∝ h3 ∝ h2


Runge-Kutta 3 3 ∝ h4 ∝ h3 0.5
Runge-Kutta 4 4 ∝ h5 ∝ h4
0.0
0 5 10 15 20
temps
Erreur d’arrondi locale indépendante de h ⇒ erreur d’arrondi globale ∝ 1/h
F IGURE 1 – Solution analytique de l’équation logistique pour t0 = 0, y(t0 ) = 0.1,
a = 1 et k = 2.
MNCS 28 2018-2019 MNCS 29 2018-2019

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
fichier euler.dat ordre 1 erreur max 0.830E−02 position de l’err max 0.296E+01
1e−06
0.001
8e−07
0.000
6e−07
Erreur = Exact −Estimé

−0.001
4e−07
Erreur = Estimé − Exact

−0.002
2e−07
−0.003
0e+00
−0.004
−2e−07
−0.005
−4e−07
−0.006
−6e−07
−0.007
−8e−07
−0.008
−1e−06
0 2 4 6 8 10 12 14 16 18 20
−0.009 exact − estimé
0 2 4 6 8 10 12 14 16 18 20 temps
estimé − exact
temps

F IGURE 2 – Erreur dans l’intégration de l’équation logistique avec la méthode d’Euler F IGURE 3 – Erreur dans l’intégration de l’équation logistique avec Runge Kutta
pour h = 0, 02. L’allure régulière montre que l’erreur de troncature domine. d’ordre 4 pour h = 0, 02. L’allure bruitée est caractéristique de l’erreur d’arrondi
Erreur de troncature locale liée à la courbure de la solution et on retrouve les niveaux de quantification des réels sur 32 bits.

MNCS 30 2018-2019 MNCS 31 2018-2019


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.1 Exemple d’erreur totale maximale en simple précision (32 bits) 2.5.2 Exemple d’erreur totale maximale en double précision (64 bits)

Valeur absolue de l’erreur absolue pour y’= y(1−y/2) sur [0,20] y(0)=0.1 simple précision Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 double précision
100 100
euler sp
milieu sp
rk3 sp
−1 rk4 sp pente +1 10−2 pente +1
10

−4
10
10−2

pente +2
10−6
erreur maximale

erreur maximale
pente +2
10−3
pente −1
10−8
−4
pente +3
10 pente +3
10−10

10−5
10−12 pente +4
pente +4
−6
10
10−14 euler dp
milieu dp
rk3 dp
rk4 dp
10−7 −4 10−16 −4
10 10−3 10−2 10−1 100 10 10−3 10−2 10−1 100
pas pas
MNCS 32 2018-2019 MNCS 33 2018-2019

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

2.5.3 Comparaison des erreurs maximales simple/double précision 3 Méthodes à plusieurs pas
Erreur absolue y’= y(1−y/2) sur [0,20] y(0)=0.1 simple/double précision
100
3.1 Méthodes d’Adams
10−2
Principe : les erreurs augmentent avec l’intégration, les points les plus proches de
10−4 la valeur initiale ont tendance à être plus fiables. Pour calculer ui+1 , on peut
s’appuyer non seulement sur la dernière valeur estimée ui , mais sur les m précédentes.
10−6
erreur maximale

— si le calcul invoque la pente au point recherché f (ti+1 , ui+1 ), la méthode est


10−8 implicite (voir 2.1.2) : A DAMS -M OULTON

10−10 — sinon elle est explicite : A DAMS -B ASHFORTH .

euler sp Dans les deux cas, il faut initialiser le calcul par une méthode à un pas sur les m
10−12 milieu sp
rk3 sp premiers points.
rk4 sp
10−14 euler dp
milieu dp Le calcul réutilise les évaluations antérieures du second membre.
rk3 dp
rk4 dp
10
−16 =⇒ stocker ces valeurs pour économiser les calculs
−4 −3 −2 −1 0
10 10 10 10 10
pas
MNCS 34 2018-2019 MNCS 35 2018-2019
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.1 Adams Bashforth : explicite, pas de terme en f (ti+1 , ui+1 ) Exemple : Adams-Bashforth à deux pas

h
Adams-Bashforth utilise m points à gauche de ti+1 : 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=1 j=1 deux pas
ui+1
méthode d’ordre m, mais une seule nouvelle évaluation du second membre à −k−1 h/2
Méthode explicite
chaque pas 3k0 h/2
h/2 d’ordre deux mais
m β α1 α2 α3 α4 k0 seulement une éva-
ui luation nouvelle du
1 1 1
2 1/2 3 −1 k−1 second membre à
ui−1 chaque pas
3 1/12 23 −16 5 3h/2 ⇒ mémoriser les
4 1/24 55 −59 37 −9
ti−1 ti ti+1 t seconds membres.

MNCS 36 2018-2019 MNCS 37 2018-2019

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.2 Adams Moulton : implicite, terme en f (ti+1 , ui+1 ) 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


Adams-Moulton utilise m + 1 points dont ti+1 donc implicite :
100
euler sp
m
X m
X milieu sp
rk3 sp
ui+1 = ui + βh αj f (ti−j+1 , ui−j+1 ) avec β αj = 1 10−1 rk4 sp
adams−bashforth2 sp
j=0 j=0 adams−bashforth3 sp
adams−bashforth4 sp
méthode d’ordre m + 1 (nombre d’évaluations du second membre) 10−2
erreur maximale

m β α0 α1 α2 α3 10−3

0 1 1
−4
10
1 1/2 1 1
2 1/12 5 8 −1 10−5

3 1/24 9 19 −5 1
10−6
Éviter les difficultés de l’implicite en utilisant un prédicteur explicite de ui+1 ,
injecté ensuite dans l’expression d’Adams-Moulton vue comme correcteur . 10
−7
−4 −3 −2 −1 0
10 10 10 10 10
pas
MNCS 38 2018-2019 MNCS 39 2018-2019
EDO 3 Méthodes à plusieurs pas 3.1 Méthodes d’Adams EDO 3 Méthodes à plusieurs pas 3.2 Méthodes adaptatives

3.2 Méthodes adaptatives


3.1.4 Méthodes de prédicteur correcteur
Principe : ajuster le pas localement pour obtenir une précision imposée.

Principe : bénéficier des qualités d’une méthode implicite mais l’appliquer à une Estimer l’erreur de troncature par l’écart entre deux solutions numériques :
estimation obtenue par une méthode explicite du même ordre (voir Euler modifiée). y(ti+1 ) − ui+1
ui , d’ordre n ηi = ∝ hn (13a)
— prédiction de ui+1 par une méthode explicite h
y(ti+1 ) − u?i+1
— correction de ui+1 par une formule implicite où f (ti+1 , y(ti+1 )) a été u?i , d’ordre n + 1 ηi? = ∝ hn+1 (13b)
h
approximé par la prédiction f (ti+1 , ui+1 ). u?
− ui+1
or h  1 donc ηi ≈ i+1 ∝ hn (13c)
Exemple : méthode d’Euler modifiée h
Une itération de la partie correction est possible. Modification du pas d’un facteur q

L’ordre est celui du correcteur, mais la stabilité dépend plus du prédicteur. qn ?


ηi (hq) ≈ q n ηi (h) ≈
(u − ui+1 ) (14)
Ces méthodes permettent d’estimer l’erreur de troncature à partir de la différence h i+1
entre prédicteur et correcteur =⇒ adaptation du pas Pour obtenir une précision globale ∆y ≈ Lδ , imposer localement :

|ηi (hq)| ≈ δ (15)

MNCS 40 2018-2019 MNCS 41 2018-2019

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

d’où le facteur q à appliquer au pas : 3.3 Méthodes d’extrapolation de Gragg


 1/n

q≈ (16) 3.3.1 Principe de l’extrapolation
u?i+1 − ui+1
t0 h t0 + L
— Si q < 1, refuser ui+1 et diminuer le pas
Subdivisions successives
— Si q > 1, accepter ui+1 et augmenter le prochain pas
k=1
h/p2
B En pratique, limiter le pas à un intervalle raisonnable et éviter des variations brutales. Découpage de l’intervalle de pas
On suppose ici que le pas choisi permet de négliger l’erreur d’arrondi. grossier h en sous-intervalles
k=2
h/p3 de pas fin hk = h/pk de plus
3.2.1 Exemple : méthode de Runge Kutta Fehlberg en plus petits.
k=3 Développement polynomial de
Une méthode de Runge Kutta d’ordre 5 (6 évaluations de f ) l’erreur de troncature en fonction
pas fin : h/pkm
permet de contrôler la précision obtenue par un Runge Kutta d’ordre 4 du pas pour extrapoler au pas nul
pkm pas k = km (hk → 0).
utilisant les évaluations de f aux mêmes points que celle d’ordre 5
(les poids ne sont pas ceux de la méthode d’ordre 4 classique).

MNCS 42 2018-2019 MNCS 43 2018-2019


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

Exemple de la méthode d’Euler : l’erreur de troncature globale sur un pas


Autre exemple avec la méthode du point milieu :
grossier h est du premier ordre en fonction du pas fin h/pk .
Par exemple, pour les subdivisions p1 et p2 : — l’erreur de troncature globale sur h est d’ordre 2 en fonction du pas h/pk ;
   2 — pas de termes d’ordre impair dans le développement de l’erreur.
h h
y(t + h) = v1 + a1 + a2 + ··· (17)
p1 p1 Combinaison linéaire de deux estimateurs avec des pas fins différents :
   2 ⇒ élimination du terme d’ordre 2 de l’erreur de troncature
h h
y(t + h) = v2 + a1 + a2 + ··· (18) ⇒ erreur de troncature d’ordre 4
p2 p2
Combinaison linéaire de ces deux estimateurs v1 et v2 Itérer le processus avec une suite de subdivisions et de combinaisons linéaires
⇒ éliminer le terme d’ordre 1 de l’erreur (a1 inconnu) d’estimateurs pour augmenter l’ordre de l’erreur de troncature.
⇒ nouvel estimateur w2,2 d’ordre 2 tel que : B Mais amélioration limitée par l’erreur d’arrondi...
 2 L’écart wk+1,k+1 − wk,k donne une estimation de l’erreur de troncature si on
h
y(t + h) = w2,2 + b2 + ··· retient la solution wk,k . En ajustant, pour chaque intervalle de largeur h, le nombre
p2
km de subdivisions pour respecter une erreur absolue imposée, on obtient une
(p2 /p1 ) w2,1 − w1,1 w2,1 − w1,1
w2,2 = = w2,1 + (19) version adaptative de la méthode de Gragg.
p2 /p1 − 1 p2 /p1 − 1

MNCS 44 2018-2019 MNCS 45 2018-2019

EDO 3 Méthodes à plusieurs pas 3.3 Méthodes d’extrapolation de Gragg EDO 4 Les EDO du premier ordre en pratique

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

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


4 Les EDO du premier ordre en pratique
100
euler sp
milieu sp
rk3 sp 4.1 Échelles de temps et problèmes raides
10
−1 rk4 sp
mil−mod sp
gragg2−4sp
gragg2−8sp Ne pas oublier que chaque problème différentiel possède une ou plusieurs échelles
10−2
de temps propres (périodes ou pseudo-périodes, constantes de temps).
La solution ne peut être représentée correctement qu’avec un pas assez inférieur
erreur maximale

10−3
au plus petit de ces temps propres.

10
−4 Cette analyse impose donc une valeur maximale pour le pas.

Certains problèmes différentiels qualifiés des raides comportent des échelles de


10−5
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).
−6
10
Il existe des méthodes spécifiques des EDO raides qui ne sont pas présentées ici.
−7
10 −4 −3 −2 −1 0
10 10 10 10 10
pas
MNCS 46 2018-2019 MNCS 47 2018-2019
EDO 4 Les EDO du premier ordre en pratique 4.2 Validation des résultats EDO 4 Les EDO du premier ordre 4.3
en pratique
Structure des programmes de résolution d’EDO du 1er ordre

4.2 Validation des résultats 4.3 Structure des programmes de résolution d’EDO du 1er ordre
Validation via une solution analytique d’un problème simplifié 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
Lorsqu’une solution analytique est disponible (par exemple pour certaines valeurs
pas dans l’intégration de l’équation différentielle
de paramètres qui permettent de simplifier l’EDO), sa comparaison avec la solution
numérique permet de tester la méthode. Le calcul de l’erreur dans le domaine où la 2. éventuellement une procédure qui choisit le pas le plus grand possible
troncature domine permet d’extrapoler l’effet d’un changement de pas connaissant compatible avec la précision attendue et contrôle la progression de l’intégration
l’ordre de la méthode. (elle pourrait comporter un algorithme adaptatif)
3. un programme d’interface avec l’utilisateur qui choisit la méthode, le second
Validation sans solution analytique membre, lit les paramètres (conditions initiales par ex.), déclenche et arrête la

Dans le cas où aucune solution analytique de référence n’est disponible, la boucle d’intégration et stocke les résultats.

validation s’appuie sur les mêmes outils que les méthodes adaptatives : 4. un module comportant les fonctions seconds membres de l’équation

— diminution du pas (division par 2) différentielle et les éventuelles solutions analytiques exactes ou approchées

— augmentation de l’ordre de la méthode 5. un module d’utilitaires notamment pour écrire les résultats dans un fichier pour
— extrapolation de Gragg visualisation ultérieure.
— calcul d’invariants (énergie par exemple)
MNCS 48 2018-2019 MNCS 49 2018-2019

EDO 5 Systèmes d’EDO du 1er ordre 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


5 Systèmes d’équations différentielles du 1er ordre premier ordre s’appliquent aux systèmes.
#–
dy #– #–)
= f (t, y
5.1 Extension des méthodes scalaires explicites aux vecteurs dt
À chaque étape, effectuer les calculs sur chaque composante
Système de n équations différentielles couplées du considérer les
avant de passer à l’étape suivante : exemple avec point milieu
premier ordre associées à n conditions initiales
#– #–
vecteurs y et f .

Étape 1 : vecteur des pentes au bord gauche de l’intervalle


   
dy1 y1 f1 # – #–
= f1 (t, y1 , y2 , . . . , yn ) k1 = f (t1 , y# –1 )
dt    
y  f 
dy2  2  2
= f2 (t, y1 , y2 , . . . , yn )   et   k1,1 = f1 (t1 , y1,1 , y1,2 , . . . , y1,n )
dt . . . . . .
   
... = ... k1,2 = f2 (t1 , y1,1 , y1,2 , . . . , y1,n )
dyn yn fn
= fn (t, y1 , y2 , . . . , yn ) ... = ...
dt
k1,n = fn (t1 , y1,1 , y1,2 , . . . , y1,n )

MNCS 50 2018-2019 MNCS 51 2018-2019


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.2 Équations de Lotka-Volterra

avant de calculer... 5.2 Exemple de système non-linéaire couplé du premier ordre :


équations de Lotka-Volterra
Étape 2 : vecteur des pentes au point milieu prédit 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)
k2 = f (t1 + h/2, y# –1 + k1 h/2)
a2 = 1/τ2 = taux de décroissance de y2 (prédateurs) en l’absence de y1 (proies)
k2,1 = f1 (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2)
Termes de couplage non-linéaires en y1 y2 (rencontre des 2 espèces)
k2,2 = f2 (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2) a1
y2 = taux de destruction des proies par les prédateurs
... = ... k2
k2,n = fn (t1 + h/2, y1,1 + k1,1 h/2, y1,2 + k1,2 h/2, . . . , y1,n + k1,n h/2) a2
y1 = taux de croissance des prédateurs au détriment des proies
k1
 
dy1 y2
= +a1 y1 1 − (20a)
dt k2
Étape 3 : vecteur résultat au bord droit de l’intervalle  
dy2 y1
#– #– #– = −a2 y2 1 − (20b)
u i+1 = ui + h k2 dt k1
Solutions périodiques
MNCS 52 2018-2019 MNCS 53 2018-2019

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

Lotka-Volterra : cycle dans le plan de phase


Résolution numérique de Lotka-Volterra : k1 = k2 = 1, a1 = 1, a2 = 0, 2, h = 0, 1
En éliminant le temps, on obtient un invariant , donc des solutions périodiques :
Échelles linéaires
dy2 a2 y2 1 − y1 /k1
=− ⇒ y1a2 y2a1 e−a1 y2 /k2 −a2 y1 /k1 = Cte
dy1 a1 y1 1 − y2 /k2 Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1
pas = 0,1 ordre de la méthode : 1
Lotka Volterra valeurs initiales : proies(0) = 10 prédateurs(0) = 1
pas = 0,1 ordre de la méthode : 4
20 20
Tangentes horizontales pour y1 = k1 (ou y2 = 0) : équilibre des prédateurs proies
prédateurs
proies
prédateurs

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

k1 = k2 = 1, a1 = 1, a2 = 0, 2
Populations

Populations

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


valeurs initiales : proies(0) = 10 prédateurs(0) = 1 valeurs initiales : proies(0) = 10 prédateurs(0) = 1 10 10
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)
7.0 7.0
5 5
6.0 6.0

5.0 5.0
prédateurs

prédateurs

4.0 4.0 0 0
0 20 40 60 80 100 0 20 40 60 80 100
3.0 3.0 temps temps
2.0 2.0

1.0 1.0
Méthode d’Euler progressive : Méthode de Runge Kutta d’ordre 4 :
0.0
0 5 10 15 20
0.0
0 5 10 15 20 Les solutions divergent Cycle stable
proies proies

Méthode d’Euler : non périodique Runge Kutta d’ordre 4 : cycle correct


MNCS 54 2018-2019 MNCS 55 2018-2019
EDO 5 Systèmes d’EDO du 1er ordre 5.2 Équations de Lotka-Volterra EDO 6 Équations différentielles d’ordre supérieur

Résolution numérique de Lotka-Volterra : k1 = k2 = 1, a1 = 1 et a2 = 0, 2.


Échelle log en ordonnée 6 Équations différentielles d’ordre supérieur
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
2 2
10
proies
10
proies  
prédateurs prédateurs
dn y dy dn−1 y
10
0
10
0
= f t, y, , ...,
dtn dt dtn−1
10−2 10−2
Une EDO scalaire d’ordre n se ramène à un système de n équations différentielles
Populations

Populations

−4
10 10−4
du premier ordre couplées en posant :
−6
10 10−6

10−8 10−8
       
y1 y y0 y2
−10 −10      1  
10
0 20 40 60 80 100
10
0 20 40 60 80 100  y   y0   y0   y3 
 2    2  
temps temps
 =  =⇒  = 
Méthode d’Euler progressive : divergente Méthode de Runge Kutta d’ordre 4 : stable
. . .   . . .  . . .   ... 
       
d ln y2 yn y (n−1) yn0
f (t, y1 , y2 , . . . , yn )
Pente avec peu de proies : ≈ −1/τ2 d’où facteur e−4 ≈ 1/54 sur une durée de 20 = 4τ2 .
dt
d ln y1
Pente avec peu de prédateurs : ≈ 1/τ1 d’où facteur 100 sur durée de 4, 6 = 4, 6τ1
dt
MNCS 56 2018-2019 MNCS 57 2018-2019

EDO 6 Équations différentielles d’ordre supérieur 6.1 Exemple 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


6.1 Exemple
Pendule non linéaire (y = position angulaire)
Système linéaire du second ordre avec excitation h(t)
d2 y l
= −k 2 sin(y) où k 2 = g/l (21)
dt2
d2 y dy y
=a + by + h(t)
dt2 dt Pendule linéarisé (cas des petites amplitudes) : sin(y) ≈ y
mg
Poser         d2 y
y y y0 y2 = −k 2 y (22)
 1 =   ⇒  1 =   dt2
y2 y0 y20 ay2 + by1 + h(t) l’équation linéarisée admet une solution analytique en A cos(kt) + B sin(kt).

Exprimer cette EDO non linéaire du second ordre sous la forme d’un système
Condition initiale vectorielle : position y(t0 ) et vitesse y 0 (t0 )
différentiel couplé de dimension 2 mais du premier ordre.
       
Remarque Système différentiel d’ordre p de dimension n y y y0 y2
 1 =   =⇒  1 =  
⇒ système différentiel couplé du premier ordre à np dimensions. y2 y0 y20 −k 2 sin(y1 )

MNCS 58 2018-2019 MNCS 59 2018-2019


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

Résolution système non-linéaire, avec le vecteur des valeurs initiales : Comparaisons non-linéaire (Runge-Kutta 4)–analytique linéarisé : y(t)
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

      0.25
méthode d’ordre 4
de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 2.0000000e−01
1.5
méthode d’ordre 4
de 0.000000 à 50.000000 avec un pas de 0.01
valeurs initiales 0.0000000e+00 1.0000000e+00

y1 (0) y(0) position angulaire 0.20

  =  dy =  0.15
1.0

y2 (0) (0) = a vitesse angulaire 0.10


0.5

dt 0.05

theta

theta
0.00 0.0

−0.05
−0.05

Énergie mécanique conservée (après division par ml2 ) :


−0.5
−0.5
−0.10
−0.10

−0.15
−0.15
−1.0
−1.0

 2 −0.20
−0.20

1 dy −0.25
−0.25 −1.5
−1.5

+ k 2 (1 − cos y) = constante
0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50
estimé estimé
linéaire temps linéaire temps

2 dt a = 0.2  1 linéarisable a = 1 périodique non sinusoïdal


Cas où y(0) = 0 (départ en position d’équilibre stable) pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=1.98
méthode d’ordre 4
pendule + sol. linéarisée: méth. ordre 4 vitesse ang. init=2.02
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

 2  2 3
valeurs initiales 0.0000000e+00 1.9800000e+00
50
valeurs initiales 0.0000000e+00 2.0200000e+00

1 dy 1 dy
+ k 2 (1 − cos y) = (0) 2 40

2 dt 2 dt 1 30

Vitesse angulaire minimale pour y = π (position d’équilibre instable si atteinte).


theta

theta
0 20

dy −1
−1 10

Si a (0) > 2k (seuil) ⇒ la vitesse angulaire ne s’annule pas (apériodique).


=
dt −2
−2 0

Étude de la transition périodique–apériodique selon a dans le cas où k = 1 −3


−3
0 5
estimé
10 15 20 25 30 35 40 45 50
−10
−10
0 5
estimé
10 15 20 25 30 35 40 45 50
linéaire temps linéaire temps

MNCS 60 2018-2019 MNCS


a = 1.98 périodique non sinusoïdal 61
a = 2.02 apériodique 2018-2019

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 (RK 4)–analytique linéarisé : plan de phase y 0 (y) Comparaisons non-linéaire (Euler)–analytique linéarisé y(t)
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 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
méthode d’ordre 4 méthode d’ordre 4 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.25 1.0 0.3 1.5

0.20 0.8
0.2 1.0
0.15 0.6

0.10 0.4
0.1 0.5
0.05 0.2
dtheta/dt

dtheta/dt

theta

theta
0.00 0.0 0.0 0.0

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

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

−0.20 −0.8

−0.25 −1.0 −0.3


−0.3 −1.5
−1.5
−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 0 5 10 15 20 25 30 35 40 45 50 0 5 10 15 20 25 30 35 40 45 50
estimé estimé estimé estimé
linéarisé theta linéarisé theta linéaire temps linéaire temps

a = 0.2  1 linéarisable a = 1 périodique non sinusoïdal 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 4 vitesse ang. init.=1.98 plan de phase pendule: méth. ordre 4 vitesse ang. init.=2.02 méthode d’ordre 1 méthode d’ordre 1
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 5 60
2.0 2.5
0
2.0 50
1.5
−5
−5
1.5
1.0 40
−10
−10
1.0
0.5 −15
−15
0.5 30
dtheta/dt

dtheta/dt

theta

theta

−20
−20
0.0 0.0
20
−25
−25
−0.5
−0.5
−30
−30
10
−1.0
−1.0
−35
−35
−1.5
0
−1.5 −40
−40
−2.0
−45
−45 −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 62
a = 2.02 apériodique 2018-2019 MNCS
a = 1.98 apériodique selon Euler ! 63
a = 2.02 2018-2019
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é : plan de phase y 0 (y)


plan de phase pendule: méth. ordre 1 vitesse ang. init.=0.2
méthode d’ordre 1
plan de phase pendule: méth. ordre 1 vitesse ang. init.=1
méthode d’ordre 1
Stabilité à long terme avec Euler progressive et rétrograde
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
0.3 1.5

0.2 1.0 Pendule linéarisé sans frottement représenté dans l’espace des phases :
0.1 0.5 comportement à long terme d’un système non dissipatif
dtheta/dt

dtheta/dt

0.0 0.0

−0.1 −0.5
Même méthode sur les 2 composantes (position et vitesse) h = 0.025
−0.2 −1.0

−0.3 −1.5 pendulelin-Euler-esp-phases


−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 [ 0.0e+00 , 5.0e+01] h= 2.50e-02 y0[0]=0.00e+00 y0[1]=1.00e+00 n= 2001 pendulelin-EulerBack-esp-phases
estimé estimé [ 0.0e+00 , 5.0e+01] h= 2.50e-02 y0[0]=0.00e+00 y0[1]=1.00e+00 n= 2001
linéarisé theta linéarisé theta
2 2
a = 0.2 a=1
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
1 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
valeurs initiales 0.0000000e+00 1.9800000e+00 valeurs initiales 0.0000000e+00 2.0200000e+00
2.0 2.5

vitesse

vitesse
2.0
0 0
1.5

1.5
1.0

0.5
1.0 1 1
0.5
0.0
dtheta/dt

dtheta/dt

0.0
−0.5 2 2
−0.5
−1.0 3 2 1 0 1 2 3 3 2 1 0 1 2 3
−1.0
position position
−1.5
−1.5

−2.0 −2.0

−2.5 −2.5
−45 −40
estimé
−35
linéarisé
−30 −25 −20
theta
−15 −10 −5 0 5 −10 0
estimé
linéarisé
10 20
theta
30 40 50 60
F IGURE 4 – Euler progressive : in- F IGURE 5 – Euler rétrograde : stable,

MNCS
a = 1.98 apériodique selon Euler ! 64
a = 2.02 2018-2019 MNCS
stable, amplification 65
contraction 2018-2019

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

Alternance des méthodes progressive et rétrograde entre position et vitesse 7 Mise en œuvre vectorielle des méthodes à un pas
pendulelin-EulerForBack-esp-phases pendulelin-EulerBackFor-esp-phases
[ 0.0e+00 , 5.0e+01] h= 2.50e-02 y0[0]=0.00e+00 y0[1]=1.00e+00 n= 2001 [ 0.0e+00 , 5.0e+01] h= 2.50e-02 y0[0]=0.00e+00 y0[1]=1.00e+00 n= 2001
1.5 1.5
7.1 Introduction
1.0 1.0

0.5 0.5
— Les méthodes d’intégration doivent fonctionner quelle que soit la taille p des
vecteurs qui représentent la solution
#– et le second membre #–
y f de l’EDO.
vitesse

vitesse

0.0 0.0

0.5 0.5 — Il en est de même pour l’interface formelle de la fonction second membre en
1.0 1.0 fortran ou le pointeur de fonction second membre en C.
1.5
2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0
1.5
2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 2.0
— C’est le programme principal qui fixera cette taille.
position position
Il devra donc choisir un second membre de la même dimension.
— Les tailles des tableaux des seconds membres effectifs seront héritées du
F IGURE 6 – Euler mixte F IGURE 7 – Euler mixte
programme principal et non déclarées explicitement.
— progressive sur position, — rétrograde sur position, #–
Mais seules les p composantes effectives de f (2 pour le pendule : dérivée et
— rétrograde sur vitesse. — progressive sur vitesse. #–.
dérivée seconde) seront calculées à partir des p composantes de y

MNCS 66 2018-2019 MNCS 67 2018-2019


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

7.2 En fortran (norme 2003) 2. chacune des méthodes à un pas (Euler, point milieu et Runge Kutta) :
#–
Utiliser des fonctions à argument tableau de rang 1
#–
y les pentes locales ki seront des tableaux locaux, par exemple automatiques.

d’étendue p déterminée à l’exécution (nombre p d’EDO scalaires d’ordre 1)


et à résultat tableau de même étendue que
#– pour :
y
FUNCTION u2_rk4(u1, t1, h, f)
1. le second membre de l’équation différentielle :
USE abstrait ! où est définie l’interface abstraite fty
MODULE abstrait REAL, DIMENSION(:), INTENT(IN) :: u1 ! valeur initiale
ABSTRACT INTERFACE ! de la fct générique IInd mb de l’EDO REAL, INTENT(IN) :: t1 ! instant initial
FUNCTION fty(t, y) ! dy/dt REAL, INTENT(IN) :: h ! pas
REAL, DIMENSION(:),INTENT(in) :: y ! variable vecteur PROCEDURE(fty) :: f ! déclaration de l’interface de f
REAL, INTENT(in) :: t REAL, DIMENSION(SIZE(u1)) :: u2_rk4 ! valeur estimée à t1+h
REAL, DIMENSION(SIZE(y)) :: fty ! vecteur résultat ! variables locales de même étendue que u1
END FUNCTION fty REAL, DIMENSION(SIZE(u1)) :: k1, k2, k3, k4 ! pentes locales
END INTERFACE
...
END MODULE abstrait
u2_rk4 = u1 + ...
#–
L’étendue p du vecteur résultat f effectif sera donc fixée par le programme END FUNCTION u2_rk4
#–
principal via y et non par la fonction second membre.
MNCS 68 2018-2019 MNCS 69 2018-2019

EDO 7 Implémentation vectorielle 7.2 En fortran (norme 2003) EDO 7 Implémentation vectorielle 7.3 En C89 avec des tableaux dynamiques

7.3 En C89 avec des tableaux dynamiques sur le tas

Utiliser des fonctions à « argument tableau 1D »


#– de taille déterminée à l’exécution
y
et rendant un pointeur vers un tableau alloué sur le tas de même taille que
#–.
y
3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les
1. le second membre de l’équation différentielle sera alloué par la fonction
solutions vectorielles (analytique et par intégration) sont représentées par des #– #–
f ( y , t) qui rend le pointeur vers ce tableau, dont la fonction appelante (la
tableaux 2D alloués dynamiquement (n instants, p composantes).
méthode d’intégration) devra prendre en charge la libération ;
Les étendues n et p sont donc choisies à l’exécution, sachant que p doit être
correspondre au nombre effectif de composantes du second membre étudié. float * pendule(float t, float *u, int p){
Mais la dimension temporelle n’est pas « vue » par les méthodes : elles float *second_membre= NULL; /* tableau 1D */
travaillent sur des vecteurs (d’étendue p) dans un intervalle [ti , ti+1 ], à i fixé. second_membre = float1d(p); /* allocation sur le tas */
second_membre[0] = u[1];
second_membre[1] = -sin(u[0]);
return second_membre; /* valeur de retour = pointeur */
}

MNCS 70 2018-2019 MNCS 71 2018-2019


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
#–
pentes locales ki seront des tableaux alloués et libérés localement, car leur
3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les
nombre dépend de la méthode ; en revanche, le résultat
#–
u i+1 qui est aussi solutions vectorielles (analytique et par intégration) sont représentées par des
vectoriel sera passé en argument (sous forme pointeur plus nombre
tableaux 2D. Mais la dimension temporelle n’est pas « vue » par les méthodes :
d’éléments), son allocation et libération prises en charge par l’appelant.
elles travaillent sur des vecteurs de taille p dans un intervalle [ti , ti+1 ]. Cela
void u2_milieu(int p, float *u1, float t1, float h, impose que les composantes des vecteurs soient contigües en mémoire, donc
float* (* ptr_f) (float, float*, int), le deuxième indice est celui des composantes, le premier celui du temps.
float * u2){
/* permettant d’avancer d’un pas en temps*/
float *k1 = NULL; /* vecteur pente */
float *k2 = NULL; /* vecteur pente */
/* allocation dans le main des tableaux 2D */
float *u12 = NULL; /* vecteur intermédiaire */ u = float2d(n, p); /* n instants et p equations */
k1 = (*ptr_f)(t1, u1, p); /* allocation par la fct IInd membre */ /* appel de la méthode du point milieu par exemple */
u12 = float1d (p); /* allocation locale */ u2_milieu(p, u[i], t[i], h, &pendule, u[i+1]);
/* ... */
/* donc u[i] est un tableau 1D = vecteur des composantes de u_i *
float1d_libere(k1); /* libération des vecteurs des pentes */
/* ... */

MNCS 72 2018-2019 MNCS 73 2018-2019

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

7.4 En C99 avec des tableaux automatiques 2. pour chacune des méthodes à un pas (Euler, point milieu et Runge Kutta) les
#– #–
Fonctions à « argument tableau 1D » y de taille p déterminée à l’exécution pentes locales ki seront des tableaux locaux automatiques, car leur nombre
dépend de la méthode ; en revanche, le résultat
#–
Déclaration tardive des tableaux automatiques ⇒ éviter les tableaux dynamiques u i+1 qui est aussi vectoriel
Mais une fonction ne peut pas rendre un tableau ⇒ fonctions à résultat void sera passé en argument, sa déclaration étant prise en charge par l’appelant.
⇒ déclaration du tableau argument par l’appelant
et remplissage par la fonction appelée // C99 avec tableaux automatiques
void u2_milieu(int p, float u1[p], float t1, float h,
1. la fonction second membre de l’équation différentielle remplit le tableau void (* ptr_f) (float, int, float[], float[]),
#– #–
second_mb de taille p représentant f ( y , t) float u2[p]) {
qui a été déclaré par l’appelant (la méthode) avec la taille fixée par le main // methode permettant d’avancer d’un pas en temps
float k1[p] ; // vecteur pente à gauche
// version C99 avec tableaux automatiques float k2[p] ; // vecteur pente au milieu
void pendule(float t, int p, float u[p], float second_mb[p]){ float u12[p]; // vecteur intermédiaire
(*ptr_f)(t1, p, u1, k1); // évaluation du second membre en u1
// p = 2 ici = dimension des vecteurs u et second_membre
// résultat dans le vecteur local k1
second_mb[0] = u[1];
...
second_mb[1] = -sin(u[0]); // tableau u2[p] déclaré dans l’appelant et rempli ici (boucle)
return;
}
MNCS 74 2018-2019 MNCS 75 2018-2019
EDO 7 Implémentation vectorielle 7.4 En C99 avec des tableaux automatiques EDO RÉFÉRENCES RÉFÉRENCES

3. Dans le programme principal (et dans la procédure d’écriture sur fichier), les Références
solutions vectorielles (analytique et par intégration) sont représentées par des
tableaux 2D. Mais la dimension temporelle n’est pas « vue » par les méthodes : A KAI , T ERRENCE J., Applied Numerical Methods for Engineers, 410 pages (Wiley,
elles travaillent sur des vecteurs de taille p dans un intervalle [ti , ti+1 ]. Cela 1994), ISBN 0-471-57523-2.
impose que les composantes des vecteurs soient contigües en mémoire, donc
B URDEN , R ICHARD L. et J. D OUGLAS FAIRES, Numerical Analysis, 847 pages
le deuxième indice est celui des composantes, le premier celui du temps.
(Thompson, Brooks/Cole, 2005), huitième édition, ISBN 0-534-40499-5.

D EMAILLY, J.-P., Analyse numérique et équations différentielles, 350 pages (EDP


// tableaux automatiques 2D C99 déclarés dans le main
Sciences, 2006), troisième édition, ISBN 978-2-86883-891-9.
// p choisi selon la dimension du second membre
float u[n][p]; // n instants et p equations G UILPIN , C H ., Manuel de calcul numérique appliqué, 577 pages (EDP Sciences,
// dans la boucle sur les instants i :
1999), ISBN 2-86883-406-X.
// appel de la méthode du point milieu par ex.
u2_milieu(p, u[i], t[i], h, &pendule, u[i+1]); R APPAZ , J ACQUES et M ARCO P ICASSO, Introduction à l’analyse numérique, 268
// u[i] et u[i+1] : vecteurs à p composantes pages (Presses polytechniques et universitaires romandes, 2010), ISBN
// t[i] : scalaire 978-2-88074-851-7.

MNCS 76 2018-2019 MNCS 77 2018-2019

Vous aimerez peut-être aussi