Proyecto 9 (Implementaciones en Python: Método de Euler).
Considere-
mos un problema de valor inicial
(
y ′ (t) = f (t, y)
(13.4)
y(t0 ) = y0
Implemente el método de Euler en Python para determinar la solución numérica
de la siguiente EDO: y ′ (t) = e−t , con y(0) = −1
Solución. El método de Euler busca aproximar la solución del problema 13.4.
Para eso, consideremos una partición por n sub-intervalos para [t0 , t∗ ], no es
difícil ver que si consideramos la pendiente de la recta tangente a la curva solución
y(t) en el punto tn entonces
yn+1
yn
y(t)
tn tn+1
Figure 13.2: Esquema de Euler
De la figura 13.2, la pendiente es dada por
y(tn+1 ) − y(tn )
y ′ (tn ) =
tn+1 − tn
Así, haciendo h = tn+1 −tn (tamaño de paso), sustituyendo y ′ (tn ) por f (tn , y(tn )),
y denotando yn = y(tn ) obtenemos la fórmula de Euler
yn+1 = yn + hf (xn , yn )
Una posible implementación en Python para f (t, y) = e−t , con t0 = 0, y(0) =
−1
1 # Implementacion del Metodo de Euler
UNAJMA 53
2 import numpy as np
3 import matplotlib.pyplot as plt
4
5 plt.style.use(’seaborn-poster’)
6 %matplotlib inline
7
8 # Define parameters
9 # EDO
10 f = lambda t, s: np.exp(-t)
11 # tamanho de paso
12 h = 0.08
13 t = np.arange(0, 1 + h, h)
14 s0 = -1
15
16 # Metodo de Euler implicito
17 s = np.zeros(len(t))
18 s[0] = s0
19
20 for i in range(0, len(t) - 1):
21 s[i + 1] = s[i] + h*f(t[i], s[i])
22 #print ( ’sol = ’ ,s ) #imprimer las aproximaciones
23
24 plt.figure(figsize = (12, 8))
25 plt.plot(t, s, ’bo--’, label=’Approximate’)
26 plt.plot(t, -np.exp(-t), ’g’, label=’Exacta’)
27 plt.title(’Solucion exacta y aproximada\
28 para una EDO simple’)
29 plt.xlabel(’t’)
30 plt.ylabel(’f(t)’)
31 plt.grid()
32 plt.legend(loc=’lower right’)
33 plt.show()
Listing 13.1: Método de Euler
Figure 13.3
UNAJMA 54