Saltar al contenido principal

Cómo resolver ecuaciones diferenciales ordinarias usando SciPy.

Aquí tienes un tutorial detallado paso a paso sobre cómo resolver ecuaciones diferenciales ordinarias usando SciPy.

Introducción

Las ecuaciones diferenciales ordinarias (EDO) son ecuaciones matemáticas que describen la relación entre una función y sus derivadas. Resolver estas ecuaciones nos permite comprender el comportamiento de varios sistemas en campos como la física, la ingeniería y la biología.

SciPy es una potente biblioteca de computación científica en Python que proporciona diversas herramientas para resolver ecuaciones diferenciales. En este tutorial, cubriremos el proceso de resolución de EDO utilizando el módulo scipy.integrate.

Paso 1: Importar los módulos necesarios

El primer paso es importar los módulos necesarios de SciPy. Utilizaremos el módulo scipy.integrate para resolver las ecuaciones diferenciales. Además, importaremos NumPy para realizar operaciones numéricas y Matplotlib para visualizaciones.

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

Paso 2: Definir la EDO

A continuación, debemos definir la EDO que queremos resolver. La EDO se puede representar como un sistema de ecuaciones diferenciales de primer orden. Por ejemplo, considera la siguiente EDO:

dy/dt = f(t, y)

Aquí, y es la variable dependiente, t es la variable independiente (tiempo) y f(t, y) es una función conocida que describe la relación entre t, y y sus derivadas.

Definamos una EDO simple como ejemplo:

dy/dt = -2y

Podemos definir esta EDO como una función en Python que toma la variable independiente t y la variable dependiente y como argumentos y devuelve la derivada dy/dt.

def ode(t, y):
return -2 * y

Paso 3: Resolver la EDO

Ahora, podemos utilizar la función solve_ivp de SciPy para resolver la EDO numéricamente. Esta función requiere los siguientes argumentos:

  • La función de la EDO (ode en nuestro caso)
  • Las condiciones iniciales (t0 e y0)
  • El rango de tiempo para el cual queremos resolver la EDO (t_span)
t0 = 0  # tiempo inicial
y0 = 1 # valor inicial de y
t_span = (0, 5) # rango de tiempo

sol = solve_ivp(ode, t_span, [y0], t_eval=np.linspace(t_span[0], t_span[1], 100))

En el código anterior, pasamos la función de la EDO ode, el rango de tiempo t_span, el valor inicial de y y0 y el tiempo inicial t0 a la función solve_ivp. También especificamos t_eval para obtener la solución en puntos de tiempo específicos.

Paso 4: Analizar la solución

Una vez que tenemos la solución, podemos analizarla y visualizarla. La solución devuelta por solve_ivp contiene los puntos de tiempo y los valores correspondientes de y. Podemos acceder a ellos utilizando sol.t y sol.y.

print(sol.t)  # puntos de tiempo
print(sol.y) # valores de y en los puntos de tiempo correspondientes

Paso 5: Graficar la solución

Finalmente, podemos graficar la solución utilizando Matplotlib para visualizar el comportamiento de y a lo largo del tiempo.

plt.plot(sol.t, sol.y[0])
plt.xlabel('Tiempo')
plt.ylabel('y')
plt.title('Solución de la EDO')
plt.grid(True)
plt.show()

En el código anterior, utilizamos plt.plot para crear un gráfico de línea de la solución. Establecemos el eje x como los puntos de tiempo sol.t y el eje y como los valores de y sol.y[0]. También agregamos etiquetas, un título y líneas de cuadrícula al gráfico.

Conclusión

En este tutorial, hemos aprendido cómo resolver ecuaciones diferenciales ordinarias utilizando SciPy. Hemos cubierto los pasos involucrados, desde importar los módulos necesarios hasta visualizar la solución. Ahora puedes aplicar este conocimiento para resolver EDO más complejas y analizar varios sistemas dinámicos.

Recuerda ajustar el código de acuerdo con la EDO específica que deseas resolver y personalizar la visualización según tus requisitos.