Vous êtes sur la page 1sur 2

Méthode d’Euler Math Sup

La méthode d’Euler sert à résoudre de manière L’approximation de la méthode d’Euler consiste alors à
approchée des équations différentielles. écrire que f (x, t) ≈ f (x0 , t0 ) sur l’intervalle considéré.

I Exemple introductif On a donc x(t1 ) = x(t0 ) + f (x0 , t0 ) × (t1 − t0 ).

x0 cos(t) + 2xt = −5 Dit autrement, cela revient à dire que la fonction se com-

x(0) = 0 porte sur [t0 , t1 ] comme sa tangente au point d’abscisse
t0 .
Mise en forme
2.4 Et c’est tout ?
−5 − 2xt Oui. Enfin quasiment. Ensuite, plutôt que de le faire
x0 = juste entre deux points, t0 et t1 , on utilise cette méthode
cos(t)
sur des subdivisions de l’intervalle. Plus la subdivision
est fine, plus les valeurs obtenues se rapprochent de la
Méthode d’Euler
solution réelle de l’équation différentielle.
Solution Concrètement, on prend une suite monotone de valeurs
(t0 , t1 , . . . tn ). La solution approchée calculée par la
méthode d’Euler sera définie par :

x(t0 ) = x0
x(ti+1 ) = x(ti ) + f (xi , ti ) × (ti+1 − ti )

II Méthode d’Euler 2.5 Python


2.1 Cadre On donne un exemple de programmation ici :
On se donne une équation différentielle du premier ordre def euler (f , x0 , t ):
qu’on peut mettre sous la forme x0 = f (x, t). Avec f une n = len (t)
fonction de R2 → R. res = [0] * n
res [0] = x0
for k in range(1 , n ):
Une condition initiale est de la forme x(t0 ) = x0 , telle
derivee = f( res [k−1], t[k−1])
que f soit définie en x0 , t0 . Sous de bonnes hypothèses dt = t[k] − t[k−1]
(cf cours de maths, problème de Cauchy), il existe une res [k] = res [k−1] + derivee * dt
unique solution définie sur une partie maximale de R. return res

La méthode d’Euler sert à obtenir une approximation Où f est une fonction de R2 → R, x0 un flottant, et t un
numérique de cette solution. tableau de flottants.

Note : Beaucoup d’équations peuvent se mettre sous Dans le cadre du programme, t doit être une subdivision
cette forme (y compris des équations non linéaires, par régulière, mais ce n’est pas toujours adapté dans la Vraie
exemple x0 = cos(x). Par contre, une équation « à re- Vie™.
tard » comme x0 (t) = x(t − 1) ne peut pas être résolue Exemple d’utilisation :
par cette méthode. import numpy as np
import matplotlib . pyplot as plt
2.2 Interprétation graphique
def f(x , t ):
À tout point du plan (x, t) on associe le vecteur return (−5−2*x*t )/ np . cos (t)

→v (1, f (x, t)). Ceci définit un champ de vecteur qu’on
peut tracer. En chaque point d’une courbe solution, le x0 = 0
vecteur du champ en ce point est aussi le vecteur di- t = np . linspace (0 , 1.3 , 150)
x = euler (f , x0 , t)
recteur de la tangente en ce point. plt . plot (t , x)
plt . show ()

III Équations couplées


3.1 Cadre général
On suppose maintenant qu’on dispose de deux équations
différentielles couplées, d’ordre 1. On supposera qu’on
aura les deux équations et les conditions initiales sous la
forme :  0
 x = f1 (x, y, t)
 0

y = f2 (x, y, t)
 x(t0 ) = x0
2.3 Principe général

y(t0 ) = y0

On se donne t1 > t0 . On a alors


Notez qu’en particulier les conditions initiales doivent
t1 t1
être exprimées au même t0 . Les fonctions f1 et f2 sont
Z Z
0
x(t1 ) − x(t0 ) = x (t)dt = f (x, t)dt
t0 t0
dans R3 → R.

cb emeric+h4@tourniaire.org 1/2
Méthode d’Euler Math Sup

Sous de bonnes conditions, il y a encore une solution IV Second ordre et au-delà


unique à ce problème, mais surtout, ce problème  ressem- On considère maintenant une équation du second ordre
x qu’on peut mettre sous la forme x00 = f (x0 , x, t).
ble au précédent. En effet, si on pose X = , alors
y
notre équation peut s’écrire
 sous
 la forme X = f (X, t),
 
0 x
En posant V = , on peut se ramener à une équation
x f1 (x, y, t) x0
en posant simplement f : 7→ . Ainsi, f
y f2 (x, y, t) de la forme V 0 = f˜(V, t). La condition initiale sera donc
est une fonction de R2 × R → R2 . sous forme d’un couple (x(t0 ), x0 (t0 )).

Attention : la fonction f n’est pas linéaire et n’a aucune Par exemple, pour l’équation x00 = x0 − x + cos(t), on va
raison de l’être. On ne cherchera pas à l’écrire comme un poser :
produit matriciel.
    
v1 v2
f: , t 7→
v2 v2 − v1 + cos(t)
Sous cette nouvelle forme, la méthode d’Euler se formule
exactement comme plus haut.
(ici v1 correspond à x et v2 à x0 )
3.2 Exemple commenté V Améliorations
On prendra comme exemple les équations de Lotka- La méthode d’Euler présentée ici est assez instable dans
Volterra : on fixe α, β, δ, γ quatre constantes, et on s’in- certains cas. On propose deux manières d’affiner les
téresse au système : choses.

x0 = x(α − βy) 5.1 Euler implicite
y 0 = y(δx − γ) En reprenant les notations de 2.3, on utilise cette fois que
f (x, t) ≈ f (x1 , t1 ). On arrive donc à :
x1 = x0 + (t1 − t0 )f (x1 , t1 )
On utilisera alors la fonction
     et il s’agit alors de trouvere la valeur de x1 en résolvant
f:
x
, t 7→
x(α − βy) une équation (ce qui peut se faire de manière approchée
y y(δx − γ) également).

On va alors utiliser, comme au 2.3 : 5.1.1 Méthode du point milieu


On fixe un intervalle [tn , tn+1 ] et on pose
V (t1 ) = V (t0 ) + f (V (t0 ), t0 ) tn+1/2 = (tn + tn+1 )/2. On aimerait bien utiliser
comme pente celle de la courbe en tn+1/2 , d’où l’idée
Notons qu’ici la somme est vectorielle. Bien entendu, le d’utiliser
principe se généralise à des systèmes de n équations liées. 1
xn+1/2 = xn + (tn+1 − tn )f (xn , tn )
2
On utiliserait alors quelque chose comme : x(tn+1 ) = xn + (tn+1 − tn )f (xn+1/2 , tn+1/2 )
alpha , beta , gamma , delta = (...)

def euler_2d (f , V0 , t ):
n = len (t)
res = [[0 , 0] for i in range(n )]
res [0] = x0
for i in range(1 , n ):
tion
olu
old_value = res [i−1] e la s
te d
dt = t[i] − t[i−1] Pen
derivee = f( old_value , t[i−1]) Point milieu où la
res [i ][0] = res [i −1][0] + dt * derivee [0] pente sera estimée
xn+1/2
res [i ][1] = res [i −1][1] + dt * derivee [1] Pen
t e d
e la m
return res étho d
e d
’Eule
r
def f(V , t ):
x = V [0]
y = V [1]
tn tn+1/2 tn+1
return [x*( alpha−beta *y), y*( delta *x−gamma )]
Cette méthode se généralise : voir méthodes de Runge-
V0 = [50 , 50] Kutta.
t = np . linspace (0 , 20 , 250) VI Encore mieux ?
Il existe directement dans Python une fonction odeint :
res = euler_2d (f , V0 , t)

Notez qu’alors : from scipy . integrate import odeint

• V0 est aussi un vecteur x = odeint (f , x0 , t)


• res est une matrice : chaque ligne correspond à un Sa syntaxe est la même que la fonction euler plus haut,
instant t, il y a une colonne pour x(t) et une pour mais elle s’adapte sans rien changer à des équations vec-
y(t). torielles.

cb emeric+h4@tourniaire.org 2/2

Vous aimerez peut-être aussi