El método de euler

Solo disponible en BuenasTareas
  • Páginas : 5 (1151 palabras )
  • Descarga(s) : 0
  • Publicado : 20 de febrero de 2011
Leer documento completo
Vista previa del texto
Tema

:

El método de Euler

Marco teórico

El problema del valor inicial El método de Euler tiene como aplicación la solución de ecuaciones diferenciales en las que se tiene: dy =y '=F  y , donde : y  x 0 =y 0 dx Solución aproximada: Si se necesita conocer el valor para la función y en el punto x. Y se considera que la pendiente de y en el punto  x 0, y 0  es igual a y '  x 0 =F y 0  , se puede hacer la aproximación: y  x≃y 0 x−x 0 ∗F  y 0  x Para la función y  x =e , y '  x=e x=y , y 0=1 . El valor aproximado de y para x=1 es:


y 1≃11−0∗F 1 y 1≃11∗1 y 1≃2 Que en comparación al valor verdadero y 1=2.718281828 es muy alto. Esto se debe a que la pendiente de la función cambia con respecto a x, mientras que en este caso se consideró unapendiente constante. Se puede reparar el problema añadiendo un punto medio x=0.5 y 0.5≃10.5−0∗F 1 y 0.5≃1.5 Este nuevo resultado se puede usar como base para resolver x=1 : y 1≃1.51−0.5∗F 1.5 y 1≃1.50.5∗1.5 y 1≃2.25 2.25 es más cercano al valor verdadero (2.718281828...) que 2.0



El método de Euler A partir del análisis anterior se puede concluir que incrementando elnúmero de puntos intermedios, el valor aproximado es más preciso. Y también se puede encontrar la relación: y i≃y i−1 x i−x i−1 ∗F  y i−1  Que permite utilizar varios puntos medios para aproximar la solución de la ecuación del problema.

Si se considera un punto inicial  x 0, y 0  , un intervalo [a , b] con a=x 0 y la ecuación diferencial: dy =F  y , donde : y  x 0 =y 0 dx Se puededividir el intervalo en n partes iguales. La distancia entre cada coordenada x i con respecto a x i1 está dada por: b−a n Entonces, se puede solucionar la ecuación para x=b y 0=y a y i≃y i−1h∗F  y i−1  ∀ 0i≤n h=

utilizando:

Implementación


Lenguaje y herramientas El lenguaje de programación que se utilizó es Python para poder graficar la función aproximada, se utilizan llamados agnuplot. El método Euler. De la definición del método Euler se puede extraer un algoritmo: 1. y[0]=y0 2. h=(a-b)/n 3. for (i = 1 ; i>> def UnaFuncion(y): ... return math.cos(y)-math.sin(y) ... >>> EulerMuestra(3, UnaFuncion, 0,10, 5) y(0.000000) = 3.000000 y(2.000000) = 0.737775 y(4.000000) = 0.872423 y(6.000000) = 0.626591 y(8.000000) = 1.073881 y(10.000000) = 0.269200

Este ejemplo muestra losvalores de y(x) para el intervalo [0,10] , con 5 segmentos, cuando la función F(y) = cos(y)-sen(y), y(0)=3 También es posible especificar una función al momento de introducir los argumentos de la función, utilizando la opción lambda de python.
>>> EulerMuestra(1, (lambda(y):y-0.5/y) , 1,10, 7) y(1.000000) = 1.000000 y(2.285714) = 1.642857 y(3.571429) = 3.363798 y(4.857143) = 7.497570 y(6.142857) =17.051561 y(7.428571) = 38.937295 y(8.714286) = 88.983021 y(10.000000) = 203.382538

En este ejemplo, el valor inicial y(1)=1, el intervalo es [1,10] , se utilizan siete segmentos y la función F(y) = y – 0.5 / y

Código fuente
#!/usr/bin/python -i # -*- coding: utf-8 -*#====================================================================== # Metodo de Euler # # Nombre # Materia: MAT-156 # #import math import os #El comando para llamar a gnuplot GNUPLOT = "gnuplot" # En Linux: "gnuplot" # En windows: "wgnuplot" #======================================================================== # Aproxima la función y en el intervalo [a,b] con n+1 puntos utilizando # el método de euler. # # Si y' = F(y) # # y0 : valor inicial de y (para x=a) # F : la función F(y) # a,b: El intervalo [a,b] # n :número de segmentos para usar en la aproximación. # def EulerLista(y0, F, a,b, n): h=(b-a)/float(n) ry=[0]*(n+1) #iniciar listas de tamaño n+1 rx=[0]*(n+1) # r=[[]]*(n+1) # ry[0]=y0 x=a rx[0]=x for j in range(1,n+1): x=x+h rx[j]=x ry[j]=ry[j-1]+F(ry[j-1])*h for j in range(n+1): r[j]=[rx[j],ry[j] ] return r

#======================================================================== # Aproxima...
tracking img