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