Livre_silo 30 août 2013 16:32 Page 227
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
227
9 – Résolution numérique d’équations différentielles
In [1]: euler(lambda t, y :y, 0, 1, 1, 1./3)[1]
Out[1]: [1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]
Au lieu d’utiliser une fonction anonyme, on aurait pu définir avant :
def f0(t, y):
return y
puis faire l’appel suivant :
In [2]: euler(f0, 0, 1, 1, 1./3)[1]
Out[2]: [1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]
On peut s’intéresser à la valeur approchée en 1 pour des pas de la forme 10
−k :
In [3]: [euler(lambda t, y :y, 0, 1, 1, 1./10**k)[1][-1] for k in range(1,5)]
Out[3]: [2.5937424601, 2.6780334944767583, 2.7142097225133828, 2.7181459268252266]
On aura noté l’expression typique de Python t[-1], qui donne le dernier élément d’un
tableau. Pratique certes, mais il ne faut pas abuser de ce genre de choses.
Dans ce dernier exemple, on résout y
′ = y
2 avec y(1) = 2. La solution (y : t →
1
2 − t
)
explose en temps fini :
In [4]: [euler(lambda t, y :y**2, 1, 2, 1, 10**(-k))[1][-1] for k in range(5)]
Out[4]: [2, 4.289186403020769, 24.424229986946074, 193.13676042981598, 1393.599920900794]
On peut visualiser figure 9.5 les solutions renvoyées pour les pas 10
−k , avec k ∈ 1, 4.
explosion.pdf
Figure 9.5
Au voisinage de ce type de point, le pas doit être plus petit.
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
227
9 – Résolution numérique d’équations différentielles
In [1]: euler(lambda t, y :y, 0, 1, 1, 1./3)[1]
Out[1]: [1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]
Au lieu d’utiliser une fonction anonyme, on aurait pu définir avant :
def f0(t, y):
return y
puis faire l’appel suivant :
In [2]: euler(f0, 0, 1, 1, 1./3)[1]
Out[2]: [1, 1.3333333333333333, 1.7777777777777777, 2.3703703703703702]
On peut s’intéresser à la valeur approchée en 1 pour des pas de la forme 10
−k :
In [3]: [euler(lambda t, y :y, 0, 1, 1, 1./10**k)[1][-1] for k in range(1,5)]
Out[3]: [2.5937424601, 2.6780334944767583, 2.7142097225133828, 2.7181459268252266]
On aura noté l’expression typique de Python t[-1], qui donne le dernier élément d’un
tableau. Pratique certes, mais il ne faut pas abuser de ce genre de choses.
Dans ce dernier exemple, on résout y
′ = y
2 avec y(1) = 2. La solution (y : t →
1
2 − t
)
explose en temps fini :
In [4]: [euler(lambda t, y :y**2, 1, 2, 1, 10**(-k))[1][-1] for k in range(5)]
Out[4]: [2, 4.289186403020769, 24.424229986946074, 193.13676042981598, 1393.599920900794]
On peut visualiser figure 9.5 les solutions renvoyées pour les pas 10
−k , avec k ∈ 1, 4.
explosion.pdf
Figure 9.5
Au voisinage de ce type de point, le pas doit être plus petit.
