Metodo de Euler para Ecuaciones Diferenciales con SAGEMATH

Al terminar este artículo podrás resolver TODAS tus ecuaciones diferenciales lineales o NO lineales de 1er oeden, con valores iniciales, mediante el Método de Euler con SAGEMATH.

Metodo euler con sagemath

FIGURA. METODO DE EULER CON SAGEMATH

El método de Euler es implementado en SAGEMATH el cual es un lenguaje de programación de alto nivel, construído sobre python y otros lenguajes de acceso libre, es decir; SAGEMATH es software libre y se utiliza básicamente para la simulación científica. La programación y simulación con dicho lenguaje es muy sencilla, incluso podrás simular tus ejercicios aquí mismo.

Se ponen ejemplos resueltos con SAGEMATH de los ejercicios vistos en artículos anteriores. Ver los enlaces específicos para cada artículo en cada ejercicio resuelto.

Para saber cómo editar (utilizar) las celdas de SAGEMATH, ve al siguiente enlace: Simulación con SAGEMATH, da click aquí

Para entender a detalle el código de SAGEMATH para resolver ecuaciones diferenciales con valores iniciales mediante el método de Euler ve la siguiente presentación: De donde sale el método de Euler.

El código para el Método de Euler escrito en SAGEMATH es el siguiente:

CÓDIGO PARA EL MÉTODO DE EULER CON SAGEMATH

### Metodo de Euler
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]

    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
    return list(zip(x, y))

Para Utilizar las celdas para simular otras ecuaciones diferenciales solo es necesario editar el apartado de «datos iniciales» y «Solución numérica para h=…». Al final de este artículo les dejo una versión simplificada de esta celda para que la modifiquen y puedan simular otras ecuaciones diferenciales de primer orden con valores iniciales. 😉

EJERCICIOS RESUELTOS CON EL METODO DE EULER IMPLEMENTADO EN SAGEMATH

La siguientes celdas de SAGEMATH contienen el código para ejecutar el método de Euler para diferentes problemas planteados. Notar que el código para el método de euler es el mismo y no es necesario modificarlo si se quiere simular el comportamiento de alguna otra ecuación diferencial con valores iniciales.


Ejercicios 2.6. Dennis G. Zill. Problema 1

$\Large y’=2x-3y+1$
con: $y(1)=5$; $y(1.2)$

Da click en el botón siguiente para copiar el código que necesitas para simular esta ED. Copia y pega este código en la celda de SAGEMATH que está mas adelante.

Mostrar Código de SAGEMATH
### Metodo de Euler 
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]
     
    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
    return list(zip(x, y))

##### Datos iniciales
x = var('x')
y = var('y')
f(x,y) = 2*x - 3*y + 1              ## -> cambiar aquí la función f(x, y)
y0=5                                ## Valor inicial en 'y'
a = 1.0                             ## Extremo inferior sobre 'x' 
b = 1.2                             ## Extremo superior sobre 'x'

##### Solución numérica para h=0.1
n = 2       ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.1')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label="$y\'(x)= 2x - 3y + 1$")
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))

##### Solución numérica para h=0.05 
n = 4       ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.05')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)= 2x - 3y +1$')
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))

Ver este problema resuelto manualmente paso a paso en el siguiente enlace: Ejercicios 2.6. Libro Dennis G. Zill (Problema 1)


Ejercicios 2.6. Dennis G. Zill. Problema 2

$\Large y’=x+y^{2}$
con: $y(0)=0$; $y(0.2)$

Da click en el botón siguiente para copiar el código que necesitas para simular esta ED. Copia y pega este código en la celda de SAGEMATH que está mas adelante.

Código de SAGEMATH

### Metodo de Euler
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]
    
    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
        
    return list(zip(x, y))
    
##### Datos iniciales
x = var('x') 
y = var('y')
f(x,y) = x + y^2                    ## -> cambiar aquí la función f(x, y)
y0=0                                ## Valor inicial en 'y'
a = 0.0                             ## Extremo inferior sobre 'x'
b = 0.2                             ## Extremo superior sobre 'x'


##### Solución numérica para h=0.1
n = 2          ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.1')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)= x + y^2$')
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))

##### Solución numérica para h=0.05
n = 4          ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.05')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)= x + y^2$')
show(p0,axes_labels=([r'$x$',r'$y = f(x)$'])) 

Ver este problema resuelto manualmente paso a paso en el siguiente enlace: Ejercicios 2.6. Libro Dennis G. Zill (Problema 2)


Ejercicios 2.6. Dennis G. Zill. Problema 3

$\Large y’=y$
con: $y(0)=1$; $y(1.0)$

Da click en el botón siguiente para copiar el código que necesitas para simular esta ED. Copia y pega este código en la celda de SAGEMATH que está mas adelante.

Código de SAGEMATH
### Metodo de Euler
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]
    
    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
        
    return list(zip(x, y))
    
##### Datos iniciales
x = var('x') 
y = var('y')
f(x,y) = y                          ## -> cambiar aquí la función f(x, y)
y0=1                                ## Valor inicial en 'y'
a = 0.0                             ## Extremo inferior sobre 'x'
b = 1.0                             ## Extremo superior sobre 'x'


##### Solución numérica para h=0.1
n = 10            ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.1')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)=y$')
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))
##p0.show(axes=true, xmin=0, xmax=1.6, ymin=0, ymax=1.2, axes_labels=([r'$x$',r'$y = f(x)$']))

##### Solución numérica para h=0.05
n = 20           ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=0.05')
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)=y$')
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))   

Ver este problema resuelto manualmente paso a paso en el siguiente enlace: Ejemplo 1. Ejercicios 2.6. Libro Dennis G. Zill (Problema 3)


Ejercicios 2.6. Dennis G. Zill. Problema 4

$\Large y’=2xy$
con: $y(1)=1$; $y(1.5)$

Da click en el botón siguiente para copiar el código que necesitas para simular esta ED. Copia y pega este código en la celda de SAGEMATH que está mas adelante.

Código de SAGEMATH
### Metodo de Euler
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]
    
    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
        
    return list(zip(x, y))
    
##### Datos iniciales
x = var('x') 
y = var('y')
f(x,y) = 2*x*y                      ## -> cambiar aquí la función f(x, y)
y0= 1                               ## Valor inicial en 'y'
a = 1.0                             ## Extremo inferior sobre 'x'
b = 1.5                             ## Extremo superior sobre 'x'


##### Solución numérica para h=0.1
n = 5             ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
t1 = table(Euler_puntos, header_row=["x", "y"], frame='true', align='center')
p0=line(Euler_puntos,color=(1,0,1), legend_label='$y\'(x)=2xy$ con $h=0.1$')

##### Solución numérica para h=0.05
n = 10           ## numero de pasos a modificar para ver aproximación
Euler_puntos=Euler(f, a, b, n, y0)
t2 = table(Euler_puntos, header_row=["x", "y"], frame='true', align='center')
p1=line(Euler_puntos,color=(1,0,0), legend_label='$y\'(x)=2xy$ con $h=0.05$')

### Tablas
print('Tabla para valores de h=0.1')
print(t1)
print('\n')
print('Tabla para valores de h=0.05')
print(t2)

### Graficas
show(p0 + p1,axes_labels=([r'$x$',r'$y = f(x)$'])) 

Ver este problema resuelto manualmente paso a paso en el siguiente enlace: Ejemplo 2. Ejercicios 2.6 Libro Dennis G. Zill (Problema 4)

CELDA SAGEMATH. Instrucciones

A continuación te dejo la siguiente celda de SAGEMATH para que modifiques sus datos y simules CUALQUIER ecuación diferencial de primer orden con valores iniciales mediante el método numero de Euler codificado en SAGEMATH.

Las instrucciones para la edición de la celda te las doy a contuniación:
1.- Modifica el apartado «Datos iniciales»:

##### Datos iniciales
x = var('x')     ### "No modificar" ### 
y = var('y')     ### "No modificar" ###
f(x,y) = y       ## -> cambiar aquí la función f(x, y) (Solo cambiar el miembro derecho)
y0=1             ## Valor inicial en 'y' 
a = 0.0          ## Extremo inferior sobre 'x' (Valor Inicial: "x0")
b = 1.0          ## Extremo superior sobre 'x' (Es el valor contenido en la información dentro del parentesis: y(aqui))
n = 10           ## numero de pasos a modificar para ver aproximación
h = (b - a)/n    ### "No modificar" Esta es la fórmula para calcular la amplitud del paso "No modificar" ###

Modificalo de la siguiente manera:

1.- Cambia el segundo miembro de la función $f(x,y)=y$, es decir cambia la $y$ en:

f(x,y) = y       ## -> cambiar aquí la función f(x, y) (Solo cambiar el miembro derecho)

2.- Cambia el valor inicial de $y_0$, por el valor inicial de la ED a calcular, este es el valor del segundo miembro de la ecuación que se da en los datos como valores iniciales; ejemplo, para el problema $3$ es: $1$ de $y(0)=1$:

y0=1             ## Valor inicial en 'y'

3.- Cambia el valor inicial para $x_0$, modificando el valor de $a$, por los datos de la nueva ecuación. Este es el dato entre paréntesis del primer miembro de la ecuación que se da en los datos como valores iniciales; para el problema e es, por ejemplo: $0$ de $y(0)=1$:

a = 0.0          ## Extremo inferior sobre 'x' (Valor Inicial: "x0")

4.- Cambia el valor máximo para $x$ por el nuevo valor; este es el valor contenido en los datos del problema que generalmente se expresa como $y(valor de x)$, por ejemplo para el problema $3$ es: $0.2$ de $y(0.2)$

b = 1.0          ## Extremo superior sobre 'x' (Es el valor contenido en la información dentro del parentesis: y(aqui))

5.- Por último, cambia el numero de pasos que quieres utilizar en tu solución. Ésta cantidad es la que determina el valor del incremento de $h$ de acuerdo a la fórmula $h=\frac{b-a}{n}$, de modo que si se quiere un incremento de, por ejemplo $h=0.1$ y se tienen los valores, como en el Problema 3, $b=0.1$, $a=0$, se necesita que $n=10$ para obtener el objetivo de que el paso sea $h=0.1$

n = 10           ## numero de pasos a modificar para ver aproximación

CELDA SAGEMATH. Para Uso

Modifica la Siguiente celda de acuerdo a las instrucciones anteriores y simula cualquier PVI para una ed ordinaria de primer orden

Da click en el siguiente botón para desplegar el código que necesitas copiar para simular tus ecuaciones diferenciales y editalo según las instrucciones dadas. No es necesario escribir el texto que esta precedido por cualquier cantidad de símbolos de #.

Código de SAGEMATH
### Metodo de Euler                 ### "NO MODIFICAR" ###
def Euler(fun, a, b, N, y0):
    h = (b - a)/N
    x = [a]
    y = [y0]
    
    for k in range(N):
        x.append(x[k]+h)
        y.append(y[k]+(h)*fun(x[k], y[k]))
        
    return list(zip(x, y))
    
##### Datos iniciales
x = var('x')                        ### "No modificar" ###
y = var('y')                        ### "No modificar" ###
f(x,y) = y                          ## -> cambiar aquí la función f(x, y) (Solo cambiar el miembro derecho)
y0=1                                ## Valor inicial en 'y'
a = 0.0                             ## Extremo inferior sobre 'x' (Valor Inicial: "x0")
b = 1.0                             ## Extremo superior sobre 'x' (Es el valor contenido en la información dentro del parentesis: y(aqui))
n = 10                              ## numero de pasos a modificar para ver aproximación
h = (b - a)/n                       ### "No modificar" Esta es la fórmula para calcular la amplitud del paso "No modificar" ###

##### Solución numérica para h=0.1
### "NO MODIFICAR" ###
Euler_puntos=Euler(f, a, b, n, y0)
print('Tabla para valores de h=%.3f' % (h))
print(table(Euler_puntos, header_row=["x", "y"], frame='true', align='center'))
p0=line(Euler_puntos,color=(1,0,1))
show(p0,axes_labels=([r'$x$',r'$y = f(x)$']))

IMPORTANTE: No olvides borrar la suma embebida dentro de la celda (1 + 2):


Actualmente para la enseñanza/aprendizaje de las ecuaciones diferenciales se utiliza los métodos cualitativos y analíticos pero los métodos numéricos permiten varios escenarios en una simulación, lo que reduce costos de producción y riesgos materiales y humanos.

Las aplicaciones requieren de muchos cálculos de simulación para que al presentar un resultado determinado las probabilidades de éxito sean casi aseguradas.

Las simulaciones permiten el ahorro de dinero y tiempo si se considera, por ejemplo, la construcción de modelos a escala o prototipos.


Ecuaciones Diferenciales Aplicaciones e IA

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Carrito de compra