algoritmo en sage para implementar el método de euler

22
MÉTODOS NUMERICOS ALGORITMO EN SAGE PARA IMPLEMENTAR EL MÉTODO DE EULER Por: manuel alejandro vivas riverol 01

Upload: manuel-alejandro-vivas-riverol

Post on 24-Jul-2015

1.002 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Algoritmo en SAGE para implementar el método de Euler

MÉTODOS NUMERICOS

ALGORITMO

EN

SAGE

PARA IMPLEMENTAR

EL MÉTODO DE EULER

Por: manuel alejandro vivas riverol

01

Page 2: Algoritmo en SAGE para implementar el método de Euler

Euler Implementado enSAGE

MÉTODO DE EULER IMPLEMENTADO EN SAGE

A continuación describo a detalle el método de Euler implementado en SAGE. Comocomplemento de esta descripción se puede ver el artículo: Método de Euler para EcuacionesDiferenciales con SAGE.

Para entender el código de SAGE que implementa el método de Euler, era importante entendercómo es que un problema de valor inicial (PVI) sirve como principio básico de un algoritmocomputacional, para aproximar una solución a dicha ecuación diferencial.

Vimos en el apartado anterior, que un PVI nos proporciona los datos para poder linealizar lasolución de una ecuación diferencial , mediante el hacer uso de los datos de la ED. A modode demostración especí�ca, si tenemos el PVI:

y 0=2x¡3y+1; y(1)= 5

02

Page 3: Algoritmo en SAGE para implementar el método de Euler

Fórmulas para implementar el método de Euler

Estos datos los sustituimos en la ecuaciones generales para aplicar el método de Euler quevimos anteriormente; estas ecuaciones son la (8) y (9).

yn+1= yn+h � f(xn; yn)

xn+1=xn+h

La sustitución es de la siguiente manera.

Datos de la ED Algoritmo para implementarel método de Euler

y(1)= 5 xn=1 ; yn=5 donde: n=0y 0=2x¡3y+1 f(x; y)= 2x¡3y+1

03

Page 4: Algoritmo en SAGE para implementar el método de Euler

Obtención de valores mediantes las fórmulas para implementar el método de Euler

De ésta forma podemos realizar la primera iteración para nuestro algoritmo tomando

Paso Valores para el algoritmo de Euler

0 x0=1, y0=51 x0=1, y0=5; f(x0; y0)= 2x0¡3y0+12 x1= 1.1, y1= 3.8; f(x1; y1)= 2x1¡3y1+13 x2= 1.2, y2= 2.98; f(x2; y2)= 2x2¡3y2+14 ...

Paso Algoritmo de Euler: yn+1= yn+h � f(xn; yn) Resultadousando h= 0.1

0 - - - - - - - - - - y0=5, x0=11 y0+1=5+(0.1)(2(1)¡ 3(5)+ 1) y1= 3.8, x1= 1.12 y1+1=5+(0.1)(2(1.1)¡ 3(3.8)+ 1) y2= 2.98, x2= 1.23 y2+1=5+(0.1)(2(1.2)¡ 3(2.98)+ 1) y3=¡2.56, x3= 1.34 ... y4=¡1.792, x4= 1.4

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

04 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 5: Algoritmo en SAGE para implementar el método de Euler

Signi�cado de implementar las formulas de Euler

Esta secuencia lo que indica es que se va generando una lista de puntos o coordenadas en base a hallar puntossucesivos mediante la fórmula vista: yn+1= yn+h � f(xn; yn).

En SAGE, esta fórmula es posible intruducirla mediante notación simbólica casi tal cual la escribimosnormalmente. La notación en SAGE es como se muestra en el Algoritmo 1:

Fórmula para el algoritmo de Euler:

yn+1= yn+h � f(xn; yn);

en SAGE:

Algoritmo 1

### Metodo de Euler

y.append(y[k]+(h)*fun(x[k],y[k]))

Lo que se encuentra dentro del paréntesis del anterior algoritmo es exactamente el código para el segundomiembro de la ecuación: yn+1= yn+h � f(xn; yn), donde:

[k]=n

y[k]=yn

(h)=h

fun(x[k],y[k])=f(xn; yn)

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

05 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 6: Algoritmo en SAGE para implementar el método de Euler

Signi�cado de los comandos

El comando o atributo �append� sirve para añadir a una lista previamente de�nida los valoresque se encuentren dentro del paréntesis: .append(valores).

De esta forma, si de�nimos una lista como: y = [y0], donde el único valor que posee es elvalor para y0 (el cual deliberadamente utilizamos y0 para denotar el valor inicial y0), entoncespodemos ir �llenando� la lista mediante el comando append, con la sintaxis: y.append(...).

De modo que el algoritmo debería incluir la lista de�nida para y, por tanto, escribimos enSAGE:

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

06 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 7: Algoritmo en SAGE para implementar el método de Euler

Construcción del algoritmo de Euler paso a paso 2/8

Algoritmo 2### Metodo de Euler

y = [y0]y.append(y[k]+(h)*fun(x[k], y[k]))

Donde, de�nimos la lista de y, como:

y = [y0]

Ahora, como queremos encontrar varios valores o puntos para poder gra�car; es decir, comoqueremos saber cómo se comporta nuestra grá�ca en algún intervalo para x, entoncesnecesitamos incrementar el valor de dicha x, digamos de un valor inicial a hasta un valor�nal b mediante asignar pasos o incrementos pequeños que sabemos que de�nimos como h.

Donde:

x.append(x[k]+h))xn+1=xn+h

x = [a] es la lista para almacenar los valores de x

Ahora, el Algoritmo 3 como tal, no realiza ninguna adición a las listas de�nidas x = [a], y= [y0], ya que es necesario hacerle saber al programa que este es un proceso iterativo parapoblar dichas listas. De modo que se de�ne un intervalo de solución, que en este caso esa < x < b, donde el valor de k será desplazado para obtener los diferentes puntos: (x1; y1);(x2; y2); (x3; y3)..., donde k=1; 2; 3; :::

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

07

Page 8: Algoritmo en SAGE para implementar el método de Euler

Construcicón del algoritmo de Euler paso a paso 3/8

De esta manera, podemos considerar otra lista, esta vez para los valores de x con los cualescalcularemos los valores de y, de esta forma, en SAGE:

Algoritmo 3

### Metodo de Euler

x = [a]y = [y0]x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

Donde:

x.append(x[k]+h))xn+1=xn+h

x = [a] es la lista para almacenar los valores de x

Ahora, el Algoritmo 3 como tal, no realiza ninguna adición a las listas de�nidas x = [a], y= [y0], ya que es necesario hacerle saber al programa que este es un proceso iterativo parapoblar dichas listas. De modo que se de�ne un intervalo de solución, que en este caso esa < x < b, donde el valor de k será desplazado para obtener los diferentes puntos: (x1; y1);(x2; y2); (x3; y3)..., donde k=1; 2; 3; :::

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

08 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 9: Algoritmo en SAGE para implementar el método de Euler

Signi�cado del Algoritmo 3

Donde:

x.append(x[k]+h))xn+1= xn+h

x = [a] es la lista para almacenar los valores de x

Ahora, el Algoritmo 3 como tal, no realiza ninguna adición a las listas de�nidas x = [a], y = [y0], ya que esnecesario hacerle saber al programa que este es un proceso iterativo para poblar dichas listas. De modo quese de�ne un intervalo de solución, que en este caso es a < x < b, donde el valor de k será desplazado paraobtener los diferentes puntos: (x1; y1); (x2; y2); (x3; y3)..., donde k=1; 2; 3; :::

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

09 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 10: Algoritmo en SAGE para implementar el método de Euler

Iteración de las variables xn y yn

De esta forma, para realizar la iteración, utilizamos un recurso propio de programación elcual es el comando �for� para iterar una secuencia de valores. Dicha secuencia de valores lapodemos de�nir para nuestra conveniencia como valores dentro del intervalo que queremosestudiar, de manera que si el intervamo es: a < x < b, podemos dividirlo entro un número�jo N , de tal manera que obtendremos N partes de dicho intervalo cada una de un ciertotamaño que deliberadamente lo podemos escoger tan pequeño como para que conformen losincrementos h que necesitamos.

De tal forma que si iteramos en la secuencia de 0;1;2; ::::;N , para calcular cada valor para losvalores x[k]+h y y[k]+(h)*fun(x[k],y[k]), donde: k=0; 1; 2; ::::N , tendremos el siguientecódigo:

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

10 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 11: Algoritmo en SAGE para implementar el método de Euler

Construcción del algoritmo de Euler paso a paso 4/8

Implementación para las variables xn y yn mediante el comando for en SAGE

Algoritmo 4

### Metodo de Euler

x = [a]y = [y0]for k in range(N):

x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

11 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 12: Algoritmo en SAGE para implementar el método de Euler

Construcción del algoritmo de Euler paso a paso 5/8

De�nición del valor para el incremento h de las variables xn y yn de la función:f(xn; yn)

Y agregando h según lo de�nimos anteriormente:

Algoritmo 5

### Metodo de Euler

h = (b - a)/Nx = [a]y = [y0]for k in range(N):

x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

12 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 13: Algoritmo en SAGE para implementar el método de Euler

Construcción del algoritmo de Euler paso a paso 6/8

Utilización de la función: def en SAGE para poder reutilizar el algoritmo de Euler

Por último, para que el algoritmo anterior puede ser reutilizado se escribe en forma de función,para lo que se utiliza el comando �def�, se le asigna un nombre, que en este caso será Euler,se de�nen los valores que seran tomados de fuera de la función, que en nuestro caso son; fun,a, b, N, y0. De modeo que:

Algoritmo 6

### Metodo de Eulerdef Euler(fun, a, b, N, y0):

h = (b - a)/Nx = [a]y = [y0]for k in range(N):

x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

13 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 14: Algoritmo en SAGE para implementar el método de Euler

Construcción del algoritmo de Euler paso a paso 7/8

Utilización del comando zip y return

Por último, es necesario de�nir el resultado de nuestra función utilizando el comando�return�, donde poara nuestros intereses utilizaremos el comando �zip� que nos permiteunir los valores de dos listas distintas segun su posición dentro de ellas, así para la listaL1 = [4,6,8,10] y la lista L2 = [0,9,56,7], el comando zip entregará la siguiente lista depuntos: [(4,0),(6,9),(8,56),(10,7)]. De esta manera, el código �nal en SAGE para automatizarel algoritmo de Euler, es:

Algoritmo 7

### Metodo de Eulerdef Euler(fun, a, b, N, y0):

h = (b - a)/Nx = [a]y = [y0]for k in range(N):

x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

return zip(x, y)

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

14 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 15: Algoritmo en SAGE para implementar el método de Euler

Cómo utilizar el Código para implementar el método de Euler en SAGE

Con este código se puede simular CUALQUIER ecuación diferencial en SAGE. ;-)

Para poder simular una ecuación diferecial con el algoritmo anterior, es necesario de�nir losvalores independientes que se utilizarán; es decir, fun, a, b, N, y0. Por tanto, necesitamosagregar las siguientes lineas de código en SAGE:

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

15 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 16: Algoritmo en SAGE para implementar el método de Euler

De�nición de los valores iniciales, la función a simular y los comandos para gra�carla

Algoritmo : De�nición de la función a gra�car

##### Datos iniciales #####

### De�nición de la función a simularx = var('x')y = var('y')f(x,y) = 0.1*sqrt(y)+0.4*x^2 ## -> cambiar aquí la función f(x, y)

### Solución numérica para -0.8 < x < 3.5y0= 2.38349 ## Valor inicial en 'y'a = -0.8 ## Extremo inferior sobre 'x'b = 4 ## Extremo superior sobre 'x'N = 50 ## numero de pasos a modi�car para ver aproximación

### Obtención de puntos y gra�cación de los mismosEuler_puntos=Euler(f, a, b, N, y0) ## notar que en vez de �fun� solo escribimos fp0=line(Euler_puntos,color=(1,0,0))show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

16 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 17: Algoritmo en SAGE para implementar el método de Euler

Singni�cado de los comandos para de�nir la función a simular

Donde, de�nimos la función a simular con notación simbolica, la cual es una ventaja queproporciona SAGE, ésta notación es casi igual a como la escribimos normalmente; es decir,por ejemplo, para la función:

f(x; y)= 0.1 yp

+ 0.4x2, escribimos en SAGE:

f(x,y)=0.1*sqrt(y)+0.4*x^2

no sin antes de�nir cuales son las variables de la función mediante el escribir:

x = var('x')

y = var('y')

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

17 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 18: Algoritmo en SAGE para implementar el método de Euler

De�nición de los valores iniciales

Por último, de�nimos el resto de los valores para un intervalo cerrado que en este ejemplo es:¡0.8<x< 0.0, de modo que anotamos:

y0= 2.38349 ## Valor inicial en 'y'

a = -0.8 ## Extremo inferior sobre 'x'

b = 4.0 ## Extremo superior sobre 'x'

N = 50 ## numero de pasos a modi�car para ver aproximación

De esta forma, lo único que nos hace falta es escribir los camandos para correr la función�Euler� y gra�carla, para dicho efecto escribimos las dos últimas lineas:

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

18 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 19: Algoritmo en SAGE para implementar el método de Euler

Signi�cado de los comandos para gra�cación

Euler_puntos=Euler(f, a, b, N, y0) Código para correr la función de Euler que construimos y obtener la lista de puntos

que nos serviran para gra�car

p0=line(Euler_puntos,color=(1,0,0)) Grá�ca los puntos obtenidos con el algoritmo de Euler implementado.

El comando: show(p0,axes_labels=([r'$x$',r'$y = f(x)$'])), despliega la grá�ca.

En caso que quisieramos agragar una tabla con los valores obtenidos podemos escribir la siguiente línea:

print table(Euler_puntos, header_row=["x", "y"], frame='true', align='center') .

De modo que el código completo es:

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

19 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 20: Algoritmo en SAGE para implementar el método de Euler

Algoritmo CÓDIGO COMPLETO PARA SIMULAR UNA ECUACIÓN DIFERENCIAL CON SAGE### Metodo de Eulerdef Euler(fun, a, b, N, y0):

h = (b - a)/Nx = [a]y = [y0]for k in range(N):

x.append(x[k]+h)y.append(y[k]+(h)*fun(x[k], y[k]))

return zip(x, y)

##### Datos iniciales #####

### De�nición de la función a simularx = var('x')y = var('y')f(x,y) = 0.1*sqrt(y)+0.4*x^2 ## -> cambiar aquí la función f(x, y)

##### Solución numérica para -0.8 < x < 0.0y0= 2.38349 ## Valor inicial en 'y'a = -0.8 ## Extremo inferior sobre 'x'b = 4 ## Extremo superior sobre 'x'N = 50 ## numero de pasos a modi�car para ver aproximación

### Obtención de puntos y gra�cación de los mismosEuler_puntos=Euler(f, a, b, N, y0)print table(Euler_puntos, header_row=["x", "y"], frame='true', align='center')p0=line(Euler_puntos, color=(1,0,0))show(p0, axes_labels=([r'$x$',r'$y = f(x)$']))

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

20

Page 21: Algoritmo en SAGE para implementar el método de Euler

Simulación de el método de Euler en tiempo real

Con el anterior código de SAGE para implementar el método de Euler podrás simular cualquierecuación diferencial de primer orden ralizando las modi�caciones que se explican en el artículo:

Método de Euler para ecuaciones diferenciales con SAGE , da click aquí para ir a la página.

Además en dicha página podrás simular en tiempo real tus ecuaciones diferenciales ygra�carlas, utilizando la celda de SAGE que se encuantra al �nal. Las instruciones parasu utilización se encuentran en la misma página. ;-)

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

21 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

Page 22: Algoritmo en SAGE para implementar el método de Euler

Ejercicios Resueltos con el Método de Euler

Se pueden ver varios ejemplos de resolucion de ecuaciones diferenciales por el metodo de eulercon el metodo de 4 pasos propuesto en el siguiente articulo:

MÉTODO DE EULER PARA ECUACIONES DIFERENCIALES

Dynamic Systems Intelligence

Alejandro Vivas Riverolhttp://es.gravatar.com/adiutor

22 BLOG: http://ecuaciondiferencialejerciciosresueltos.com/

EJERCICIOS RESUELTOS DE ECUACIONES DIFERENCIALESpor EL MÉTODO DE EULER, PASO A PASO