Méthode d`Euler

Transcription

Méthode d`Euler
Méthode d’Euler
¦ On considère une équation différentielle d’ordre 1 avec condition initiale (problème de
Cauchy) :
½
y 0 = F (y, t )
y(t 0 ) = y 0
À quoi sert la méthode d’Euler ? À déterminer approximativement les valeurs prises par y en des instants
t 0 , t 1 , . . . , t N −1 .
Nous utiliserons les notations suivantes :
• y(t 0 ), y(t 1 ), . . . , y(t N −1 ) sont les valeurs exactes (on
connaît seulement y(t 0 )) ;
• y 0 , y 1 , . . . , y N −1 sont les valeurs approchées fournies
par la méthode d’Euler.
On a généralement, pour tout i ∈ ‚0, N − 2ƒ, t i +1 = t i + ∆t
avec ∆t un nombre fixé « assez petit ».
y3
y2
y1
y0
t0
Quel est le principe du calcul ?
y i pour tout i ∈ ‚0, N − 2ƒ.
t1
t2
t3
On pose y 0 = y(t 0 ) et on construit ensuite y i +1 à partir de
y i +1 − y i
= F (y i , t i ).
t i +1 − t i
Avec P YTHON, nous utiliserons des listes t = [t 0 , t 1 , . . . , t N −1 ] et y = [y 0 , y 1 , . . . , y N −1 ].
On définira donc y[i + 1] en posant :
Plus précisément, on choisit y i +1 tel que
∀i ∈ ‚0, N − 2ƒ, y[i + 1] = y[i ] + (t [i + 1] − t [i ]) × F (y[i ], t [i ])
Comment programmer la méthode d’Euler ? Étant donnés la fonction F , la valeur y 0 et
un tableau t de taille N contenant les valeurs t 0 , . . . , t N −1 , on doit réaliser les opérations
suivantes :
Créer un tableau y de taille N
y[0] ← y 0
pour i a l l a n t de 0 à N − 2
y[i + 1] ← y[i ] + (t [i + 1] − t [i ]) × F (y[i ], t [i ])
f i n pour
Traduction en P YTHON :
def euler(F,y0,t):
N = len(t)
y = [0]*N
y[0] = y0
for i in range(N-1):
y[i+1] = y[i]+(t[i+1]-t[i])*F(y[i],t[i])
return y
Remarque : la commande y=[0]*N crée une liste y de taille N ne contenant que des 0.
Exemple Python. On considère l’équation y 0 = y avec la condition initiale y(0) = 1. La
solution est la fonction exponentielle, ce qui permet de comparer les résultats obtenus. On
va travailler sur l’intervalle [0, 1] en considérant tout d’abord un pas de 0.25 puis un pas de
0.1. La fonction exponentielle est représentée en pointillés pour comparer.
F doit être définie comme une fonction
de deux variables même si ici elle ne dépend que de y.
import numpy as np
import matplotlib.pyplot as plt
def F(y,t):
return y
t = np.linspace(0,1,5)
y = euler(F,1,t)
plt.plot(t,y,’b-’)
plt.plot(t,np.exp(t),’r--’)
Pas de 0.25
3.0
2.5
2.5
2.0
2.0
1.5
1.0
0.0
Pas de 0.1
3.0
y
y
t = np.linspace(0,1,11)
y = euler(F,1,t)
plt.plot(t,y,’b-’)
plt.plot(t,np.exp(t),’r--’)
1.5
0.2
0.4
0.6
t
0.8
1.0
1.0
0.0
0.2
0.4
0.6
t
0.8
1.0