Métodos numéricos I: El método de Euler.

El método de Euler para la aproximación de una función partiendo de un punto conocido de ésta y de su derivada.
La derivada de una función es aproximadamente:
\frac{dx\;}{dt\;} \approx \frac{x(t+h)-x(t)}{h} = f(t)

Despejando tenemos:
\begin{cases}  x(t+h) = x(t) +hf(t) \\ x(0) \mbox{ es conocido} \end{cases}

Y dando valores a t=0, h, 2h , 3h, \dots
x(h) = x(0) + hf(0)
x(2h) = x(h) + hf(h)
x(3h) = x(2h) + hf(2h)
\dots

Con lo que ya tenemos el algoritmo. Lo siguiente es la implementación en sage ploteando juntos el primer punto, los puntos calculados con el método de Euler y la función original (en linea roja) para comparar.
En este caso la función original es x = {{e}^{t}  \cos \left( t \right)}. De la que únicamente conocemos la derivada f={{e}^{t}  \cos \left(t \right)} - {{e}^{t}  \sin \left( t \right)} y el punto x(0)=1. Finalmente el algoritmo quedaría:


#Variables
var('h,t,n')
h = 1/10 #paso
puntos = 100 #puntos a calcular
#Condiciones iniciales
f = exp(t)*cos(t) - exp(t)*sin(t) #ecuacion diferencial
x = exp(t)*cos(t) #funcion original para comparar
x0 = 1 #el punto conocido

p = point((0,1))
for i in range(puntos):
    x1 = RR(x0 + h*f(i*h))
    #print x1,RR(x(i*h)),x1-RR(x(i*h))
    p += point((i*h,x1))
    x0 = x1

#graficar la funcion original junto con los puntos hallados
p += plot(x,0,puntos*h,color="red")
p

Tags: ,