Méthode d’Euler
Summary
Méthode d’Euler au premier ordre
Introduction
Soit
Supposons que :
- je connaisse
et - je sais que
satisfait une équation du premier ordre de la forme
Comment en déduire
Idée de la méthode
On approxime la courbe par sa tangente au point
D'une part :
On utilise le développement limité à l’ordre 1 :
et on remplace les differentielles par des deltas :
D'autre part :
L'équation différentielle nous dit que :
il suffit alors de calculer :
Et c'est fini !
Et oui on a bien répondu à notre question initiale
Interprétation géométrique
On avance d’un petit pas
Autrement dit :
- On part du point connu
- On suit la direction donnée par la dérivée
- On obtient une approximation du point suivant
C’est une approximation linéaire locale.
Précision
Bien que la méthode d’Euler soit simple et rapide, elle possède de grosses limitations :
- Peut diverger si
est trop grand - Mauvaise stabilité pour certaines équations
- Peu adapté aux systèmes raides
Exemple simple
Équation :
Condition initiale :
Solution exacte :
Méthode d’Euler avec
On obtient une croissance exponentielle approximée.
Code Python
def euler(f, y0, t0, tf, dt):
t = t0
y = y0
T = [t]
Y = [y]
while t < tf:
y = y + dt * f(y, t)
t = t + dt
T.append(t)
Y.append(y)
return T, Y
Méthode d’Euler à l'ordre 2
L'histoire se répète.
Introduction
Soit
Supposons que :
- je connaisse
, et - je sais que
satisfait une équation du premier ordre de la forme
Comment en déduire
Solution
1) D'une part :
On utilise le développement limité à l’ordre 1 :
et on remplace les differentielles par des deltas :
2) D'une autre part :
On utilise le développement limité à l’ordre 1 de la dérivée :
et on remplace les differentielles par des deltas :
3) Et enfin :
L'équation différentielle nous dit que :
il suffit alors de calculer :
Et c'est fini !
Et oui on a bien répondu à notre question initiale.
Exo type concours CCINP
Voici le sujet :
Voici ton code :
dt = 0.1
tmax = 10
N = tmax/dt
T = [ i for i in range(0,tmax,dt)]
#a[n] = F[n] - 2*om0*zeta*v[n] - (om0)**2*x[n]
#Écrire une fonction resolution(F, om0, zeta)
#Qui renvoie le tableau complet de x et de v
def resolution(F,om0,zeta,x0,v0):
X = [x0]
V=[v0]
for i in range (N):
X.append( X[i] + V[i]*dt)
V.append( V[i]+ (F[i] - 2*om0*zeta*V[i] - (om0)**2*X[i] )*dt)