02 Euler
02 Euler
02 Euler
Méthode d’Euler
calculées sur une subdivision du segment [ a, b ] : est petit (en fonction de quelle grandeur de référence ?), la for-
mule de Taylor–Young confirme que la méthode [1.5] est la plus
T = [ t0 , . . . , t N −1 ] où a = t0 < t1 < · · · < t N −1 = b. précise.
3. Discrétisation régulière
1.2 Si la fonction f est dérivable, alors Pour une première approche, on peut supposer que la discréti-
sation est régulière : on subdivise le segment [ a, b ] en N sous-
f (ti + h) − f (ti ) intervalles de même longueur
∀ 0 6 i < N, f ′ (ti ) = lim .
h →0 h
b−a
dt =
On peut donc approcher la valeur de f ′ (ti ) par un taux d’ac- N
croissement calculé à l’aide de l’échantillon Y. Trois choix sont
de telle sorte que
possibles.
1.3 Taux d’accroissement à droite de ti ∀ 0 6 i < N, ti = a + i dt.
3.1 Pour une discrétisation régulière, on estime la dérivée f ′
par l’une des formules suivantes :
f ( t i +1 ) − f ( t i )
(4) f ′ (ti ) ≈ ,
dt
f ( t i ) − f ( t i −1 )
(5) f ′ (ti ) ≈ ,
dt
t i −1 ti t i +1
f ( t i +1 ) − f ( t i −1 )
(6) f ′ (ti ) ≈ .
2 dt
f ( t i +1 ) − f ( t i ) 3.2 Si la fonction f est deux fois dérivable, on peut alors es-
(1) ∀ 0 6 i < N − 1, f ′ (ti ) ≈
t i +1 − t i timer sa dérivée seconde f ′′ par la formule suivante :
1.4 Taux d’accroissement à gauche de ti f ( t i +1 ) − 2 f ( t i ) + f ( t i −1 )
(7) f ′′ (ti ) ≈
dt2
pour 0 < i < N − 1.
3.3 Si dt est petit (par rapport à quelle grandeur de réfé-
rence ?), la formule de Taylor–Young suggère qu’il s’agit d’une
approximation de bonne qualité, puisque la différence entre
f ′′ (ti ) et sa valeur approchée est O( dt2 ).
t i −1 ti t i +1
II
f ( t i ) − f ( t i −1 ) Application aux équations différentielles
(2) ∀ 0 < i < N, f ′ (ti ) ≈
t i − t i −1
5. Exemples 8. Variante
5.1 Soient ω > 0 et τ = 1/ω. L’équation différentielle On peut aussi s’inspirer de l’approximation [1.3] pour approcher
l’équation différentielle :
∀ t > 0, y′ (t) + ωy(t) = E
y ( t i +1 ) − y ( t i )
≈ f y ( t i +1 ), t i +1 .
est de la forme (8) avec t i +1 − t i
∀ (y, t) ∈ R × R+ , f (y, t) = E − ωy. 8.1 Le schéma d’Euler implicite consiste à définir des réels
yi en prenant encore y0 pour valeur initiale, mais cette fois avec
L’unique solution y telle que y(0) = 0 est la fonction définie par
(11) yi+1 + f (yi+1 , ti+1 ) · dt = yi
∀ t > 0, y(t) = τE 1 − e−ωt .
Press, W.H.; Teukolsky, S.A.; Vetterling, W.T. & Flannery, B.P. : 0.4
Solution exacte
Numerical Recipes in C, Second Edition,
Cambridge university press (1992).
0.2
7. Schéma d’Euler
Pour tracer l’allure du graphe de la solution y, il suffit de 0.0
connaître un échantillon de valeurs de y :
0 1 2 3 4 5
Y = y ( t 0 ), . . . , y ( t N −1 ) .
t
7.1 D’après la condition initiale, il faut que y(t0 ) = y0 . puis pour dt = 0, 025.
7.2 D’après l’étude précédente [1.4],
y ( t i +1 ) − y ( t i )
≈ f y ( t i ), t i
t i +1 − t i 1.0
c’est-à-dire
0.8
0.6
en supposant que la discrétisation en temps soit régulière [3]. Euler classique
7.3 Le schéma d’Euler consiste alors à définir des réels yi en Euler implicite
y
10. Suite de [5.2] – On compare les approximations calculées 12. Un système différentiel est découplé quand les varia-
par le schéma d’Euler classique (10) et par le schéma d’Euler tions de chaque fonction sont indépendantes des autres fonc-
implicite (11) pour dt = 0, 1 tions, c’est-à-dire :
′
y1 ( t ) = f 1 y1 ( t ), t
y ′ ( t ) = f y ( t ), t
2 2 2
1.0
Euler classique
.. .
Euler implicite
.
Solution exacte ′
y d ( t ) = f d y d ( t ), t
0.8
16.2 Le système à résoudre pour le schéma d’Euler implicite 17.2 La fonction scalaire x est solution de l’équation différen-
est un système linéaire indépendant du temps. On en déduit la tielle (15) si, et seulement si, la fonction vectorielle y est solution
relation de récurrence suivante. du système différentiel
(1 + 2 dt) · xk + dt · yk
(16) y ′ ( t ) = F y ( t ), t
x k +1 =
1 + 4 dt + 3 dt2
dt · xk + (1 + 2 dt) · yk où la fonction F est définie par
y k +1 =
1 + 4 dt + 3 dt2
où dt est le pas (constant) de temps. (17) ∀ ( x, v, t) ∈ R3 , F ( x, v), t = v, f (( x, v), t) .
0.35
18. Équation du pendule harmonique
0.30 L’équation différentielle
0.25
x ′′ (t) + ω 2 x (t) = 0
y
0.20
vk · dt
(
x k +1 = x k +
0.30
vk+1 = vk − ω 2 · xk · dt.
0.25
y
0.10
Euler classique xk + vk · dt vk − ω 2 xk dt
x k +1 = v k +1 =
0.05 Euler implicite 1 + (ω dt)2 1 + (ω dt)2
Solution exacte
0.00
0.0 0.5 1.0 1.5 2.0
18.4 Évolution de x (t) en fonction de t pour dt = 0, 1
x
1.0
Solution exacte
Euler explicite
0.5
Euler implicite
0.5
0.0
x
dx/dt
−0.5 0.0
19. Tracé dans l’espace des phases −1.0 −0.5 0.0 0.5 1.0
0.0 un intervalle [0, T ] est grand. Chaque itération étant marquée par
une erreur d’arrondi, on peut craindre que les erreurs d’arrondi
se propagent exagérément au cours du calcul.
21. Le module scipy.integrate contient la fonction odeint
−0.5 qui permet de résoudre numériquement toute équation différen-
Solution exacte tielle du premier ordre de la forme
Euler explicite
Euler implicite
Y ′ ( t ) = F Y ( t ), t
−1.0 −0.5 0.0 0.5 1.0
x où Y est une fonction à valeurs vectorielles.
21.1 Bien que reposant sur le même principe que la méthode
d’Euler [6], la fonction odeint produit un résultat généralement
fiable et précis.
21.2 Dans le cas où l’espace des phases est un plan (comme
pour l’équation du pendule harmonique), la commande odeint
réclame trois arguments :
– La fonction F de la position Y = (y, v) dans l’espace des
phases et du temps t ;
– La condition initiale, c’est-à-dire un vecteur Y0 = (y0 , v0 ) de
l’espace des phases ;
– La discrétisation de l’intervalle de résolution.
21.3 Le résultat retourné par odeint est un tableau S dont les
lignes contiennent des valeurs approchées des vecteurs Y (t0 ),
Y (t1 ), . . ., Y (t N −1 ).
Les valeurs approchées de y(t0 ), y(t1 ), . . ., y(t N −1 ) constituent
donc la colonne de rang 0 du tableau S et les valeurs approchées
de v(t0 ), v(t1 ), . . ., v(t N −1 ) constituent la colonne de rang 1.
2 • Méthode d’Euler
Solution exacte
Solution odeint
0.5
dx/dt
0.0
−0.5
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as odeint
w = 1/2
# Discrétisation du temps
T = np.linspace(0,14) # On résout sur [0, 14]
## Résolution littérale
x = np.cos(w*T)
v = -w*np.sin(w*T)
plt.plot(x,v,’r’,label=’Solution exacte’)
## Résolution numérique
# Équation différentielle : Cf. (17)
def F(Y, t):
x, v = Y[0], Y[1]
return [v, -w**2*x]
# Condition initiale
Y0 = [1.0, 0]
S = odeint(F, Y0, T)
X, V = S[:,0], S[:,1] #
Cf. [21.3]
plt.plot(X, V,’ob’,label=’Solution odeint’)