4.3. Método de Euler#

  1. El problema de valores iniciales de una ecuación diferencial ordinaria

  2. Ejercicios

4.3.1. El problema de valores iniciales de una ecuación diferencial ordinaria#

El método de Euler proporciona una aproximación de la solución del problema de valor inicial (PVI):

\[\begin{equation*} \begin{cases} y'=f(x,y)\\ y(x_{0})=y_{0} \end{cases}\label{eq:0} \end{equation*}\]

por medio de puntos aproximados del gráfico de su solución.

En vista de la condición inicial, el gráfico de la solución pasa por el punto \((x_{0},y_{0})\). El método de Euler propone utilizar la recta tangente al gráfico en \((x_{0},y_{0})\) para calcular el primer punto aproximado \((x_{1},y_{1})\) del gráfico de la solución, de donde resulta

\[\begin{split} \begin{array}{l} y_{1}=y_{0}+hf(x_{0},y_{0})\\ x_{1}=x_{0}+h \end{array} \end{split}\]

4.3.1.1. Algoritmo#

Repitiendo el \(n\) veces el paso anterior, obtenemos el \(n-\)ésimo punto aproximado \((x_{n},y_{n})\) mediante la fórmula

\[\begin{split} \left\{ \begin{array}{l} y_{n}=y_{n-1}+hf(x_{n-1},y_{n-1})\\ x_{n}=x_{n-1}+h \end{array} \right. \end{split}\]

Aquí, \(x_{0}\), \(y_{0}\) y \(f\) vienen dados por la condición inicial del PVI y la función que define la ecuación diferencial ordinaria.

4.3.1.2. Ejemplo#

Consideramos el problema de valor inicial

\[\begin{split} \begin{cases} y'=x(1+y^{2})\\ y(0)=1. \end{cases} \end{split}\]

y escogemos \(h=0.1.\)

En este caso tendremos

\[ (x_{0},y_{0})=(0,1),\ \ \ \ (x_{1},y_{1})=(0.1,1),\ \ \ \ (x_{2},y_{2})=(0.2,1.02),\ldots \]

Veamos como podemos obtener estos puntos.

Se puede definir la función euler_un_paso(f,x0,y0,h) que realiza un paso del método de Euler para resolver numéricamente el problema de valor inicial (PVI)

\[ y' = f(x,y), \quad y(x_0) = y_0.\]

Es decir, euler_un_paso(f,x0,y0,h) devuelve el par $\( (x_1,y_1)\)$ donde

\[x_1 = x_0 + h, \qquad y_1 = y_0 + hf(x_0,y_0).\]

Así, el primer punto de la solución aproximada del PVI con \(h=0.1\) que proporciona el método de Euler es \((0.1,1.0)\).

Para obtener el segundo punto \((x_2,y_2)\), tendríamos que dar otro paso, partiendo de \((0.1,1.0)\). Y así, seguimos construyendo los puntos del gráfico de la solución aproximada.

Imagen de abajo: puntos de Euler para el PVI \(y'=x(1+y^{2}),\ y(0)=1,\) con \(h=0.1\) y \(h=0.05.\) _images/euler.png

4.3.2. Ejercicios#

  1. Definir la función euler(f,x0,y0,h,N) que devuelve el punto \((x_{N},y_{N})\) definido por la ley recursiva del método de Euler.

Ayuda: Al ser un algoritmo recursivo debemos realizar los siguientes pasos:

  • Escoger las variables \(x\), \(y\) donde se guardarán los valores de \(x_{n}\), \(y_{n}\) e inicializarlas:

x = x0
y = y0
  • Repetir \(N\) veces el paso recursivo (obtener \((x_{n},y_{n})\) a partir de \((x_{n-1} , y_{n-1})\)) de reasignar las variables \(x\), \(y\):

y = y + hf(x,y)
x = x + h.

Es importante reasignarlas en ese orden ¿por qué?

  1. Calcular el punto \((x_{100},y_{100})\) del gráfico de la solución aproximada del PVI

\[\begin{split} \begin{cases} y'=y(1-2y)\\ y(0)=0.3. \end{cases} \end{split}\]

con \(h=0.02\).

  1. Definir la función euler_x(f,x0,y0, xf, h) que utiliza la ley recursiva del método de Euler para devolver un valor aproximado de \(y(x_f)\) donde \(y(x)\) es la solución del problema de valor inicial (PVI)

\[\begin{split} \begin{cases} y'=f(x,y)\\ y(x_{0})=y_{0} \end{cases} \end{split}\]

con un paso \(h.\)

Ayuda:

  • Obsérvese que habrá determinar el punto \((x_{N},y_{N})\) definido por la ley recursiva del método de Euler, con \(x_N = x_f\) y \(N = (x_f - x_0)/h.\) Supondremos que \((x_f - x_0)/h\) es entero.

  • En el código primero habrá que obtener \(N\) como el número de pasos necesarios para para llegar de \(x_0\) a \(x_f\) con un paso de longitud \(h.\) Téngase en cuenta que el valor de \(N\) que se va a utilizar debe ser entero. Un vez tenemos \(N,\) hay que repetir el proceso descrito anteriormente de la ley recursiva del método de Euler \(N\) veces.

  1. Definir la función grafico_euler(f,x0,y0,h,N) que representa en un gráfico los \(N\) primeros puntos de Euler para el PVI anterior (como los puntos rojos de la figura de más arriba).

Ayuda:

  • Primero hay que traer el paquete matplotlib.pyplot como plt con la línea

import matplotlib.pyplot as plt

que puede estar fuera de la función.

  • Debemos crear dos listas

\[\begin{split} \begin{array}{l} X=[x_{0},x_{1},x_{2},\ldots,x_{N}],\\ Y=[y_{0},y_{1},y_{2},\ldots,y_{N}]. \end{array} \end{split}\]

Como euler(f,x0,y0,h,n) devuelve el par \((x_{n},y_{n})\), la lista \(X\) debe estar formada por las primeras componentes de euler(f,x0,y0,h,n) con \(n=0,1,2,\ldots\) y la lista \(Y\) por las segundas componentes.

  • Para que función grafico_euler(f,x0,y0,h,N) devuelva la gráfica después de la línea plt.plot(X, Y) hay que añadir la línea plt.show()

  • Esta función no tiene return

  1. Utilizar la función grafico_euler(f,x0,y0,h,n) para dibujar la solución aproximada del PVI

\[\begin{split} \begin{cases} y'=\sin(x-y^{2})\\ y(0)=1, \end{cases} \end{split}\]

con \(h=0.01\) y \(n=300\).

  1. Es conocido que la solución del PVI

\[\begin{split} \begin{cases} y'=4/(1+x^{2})\\ y(0)=0. \end{cases} \end{split}\]

tiene la propiedad \(y(1)=\pi\). Utilizar este hecho para calcular un valor aproximado de \(\pi\).