Ecuaciones Diferenciales con Python
Esta notebook fue creada originalmente como un blog post por Raúl E. López Briega en Matemáticas, análisis de datos y python. El contenido esta bajo la licencia BSD.
Introducción
Vivimos en un mundo en constante cambio. La posición de la Tierra cambia con el tiempo; la velocidad de un objeto en caída libre cambia con la distancia; el área de un círculo cambia según el tamaño de su radio; la trayectoria de un proyectil cambia según la velocidad y el ángulo de disparo. Al intentar modelar matemáticamente cualquiera de estos fenómenos, veremos que generalmente adoptan la forma de una o más Ecuaciones diferenciales.
Nota: Antes de continuar leyendo, si no tienen frescos sus conocimientos básicos de Cálculo integral y Cálculo diferencial; les recomiendo que visiten mi anterior artículo de Introducción al Cálculo.
¿Qué es una ecuación diferencial?
Una Ecuación diferencial es una ecuación que involucra una variable dependiente y sus derivadas con respecto a una o más variables independientes. Muchas de las leyes de la naturaleza, en Física, Química, Biología, y Astronomía; encuentran la forma más natural de ser expresadas en el lenguaje de las Ecuaciones diferenciales. Estas ecuaciones no sólo tienen aplicaciones en la ciencias físicas, sino que también abundan sus aplicaciones en las ciencias aplicadas como ser Ingeniería, Finanzas y Economía.
Es fácil entender la razón detrás de esta amplia utilidad de las Ecuaciones diferenciales. Si recordamos que
Para ilustrar el caso, veamos un ejemplo. Según la segunda ley de la dinámica de Newton, la aceleración
A primera vista, esta ecuación no parece ser una Ecuación diferencial, pero supongamos que un objeto de masa
De esta manera, estamos expresando a la segunda ley de la dinámica de Newton en función de la posición del objeto.
Ecuaciones diferenciales ordinarias y parciales
El caso precedente, es el caso típico de una Ecuación diferencial ordinaria, ya que todas las derivadas involucradas son tomadas con respecto a una única y misma variable independiente. Por otro lado, si en la ecuación tenemos derivadas de más de una variable independiente, debemos hablar de Ecuaciones difenciales parciales. Por ejemplo, si
En esta caso, el símbolo
Estos ejemplos, tienen una gran aplicación en Física y se conocen como la ecuación de Laplace, la ecuación del calor y la ecuación de onda respectivamente. En general, las Ecuaciones diferenciales parciales surgen en problemas de campos eléctricos, mecánica de fluidos, difusión y movimientos de ondas. La teoría de estas ecuaciones es bastante diferente con respecto a las ecuaciones diferenciales ordinarias y suelen ser también más complicadas de resolver. En este artículo me voy a enfocar principalmente en las ecuaciones diferenciales ordinarias, o EDOs para abreviar.
Orden de las Ecuaciones diferenciales
El orden de una Ecuación diferencial va a ser igual al orden de la mayor derivada presente. Así, en nuestro primer ejemplo, la Ecuación diferencial de la segunda ley de la dinámica de Newton es de segundo orden, ya que nos encontramos ante la segunda derivada de la posición del objeto con respecto al tiempo.
La ecuación general de las ecuaciones diferenciales ordinarias de grado
o utilizando la notación prima para las derivadas,
La más simple de todas las ecuaciones diferenciales ordinarias es la siguiente ecuación de primer orden:
y para resolverla simplemente debemos calcular su integral indefinida:
.
Ecuaciones diferenciales separables
Una ecuación separable es una ecuación diferencial de primer orden en la que la expresión para
El nombre separable viene del hecho de que la expresión en el lado derecho se puede “separar” en una función de
Para resolver este tipo de ecuaciones, podemos reescribirlas en la forma diferencial:
y luego podemos resolver la ecuación original integrando:
Éstas suelen ser las Ecuaciones diferenciales más fáciles de resolver, ya que el problema de resolverlas puede ser reducido a un problema de integración; a pesar de que igualmente muchas veces estas integrales pueden ser difíciles de calcular.
Ecuaciones diferenciales lineales
Uno de los tipos más importantes de Ecuaciones diferenciales son las Ecuaciones diferenciales lineales. Este tipo de ecuaciones son muy comunes en varias ciencias y tienen la ventaja de que pueden llegar a ser resueltas en forma analítica ya que su ecuación diferencial de primer orden adopta la forma:
donde,
Primero calculamos el factor de integración,
Luego multiplicamos ambos lados de la ecuación por el recién calculado factor de integración.
simplificando, obtenemos:
Por último, integramos ambos lados de la ecuación:
y podemos obtener la solución final:
Condición inicial
Cuando utilizamos Ecuaciones diferenciales, generalmente no estamos interesados en encontrar una familia de soluciones (la solución general), como la que hayamos en el caso precedente, sino que vamos a estar más interesados en una solución que satisface un requerimiento particular.En muchos problemas físicos debemos de encontrar una solución particular que satisface una condición de la forma
Series de potencias
Cuando comenzamos a lidiar con las Ecuaciones diferenciales, veremos que existen un gran número de ellas que no pueden ser resueltas en forma analítica utilizando los principios del Cálculo integral y el Cálculo diferencial; pero sin embargo, tal vez podamos encontrar soluciones aproximadas para este tipo de ecuaciones en términos de Series de potencias.
¿Qué es una serie de potencias?
Una Serie de potencias es una serie, generalmente infinita, que posee la siguiente forma:
En dónde
El dominio de esta función va a estar dado por el conjunto de todos los
Series de Taylor
Las Series de Taylor son un caso especial de Serie de potencias cuyos términos adoptan la forma
Lo que es equivalente a decir:
Una de las razones de que las Series de Taylor sean importantes es que nos permiten integrar funciones que de otra forma no podíamos manejar. De hecho, a menudo Newton integraba funciones por medio de, en primer lugar, expresarlas como Series de potencias y luego integrando la serie término a término. Por ejemplo, la función
Resolviendo Ecuaciones diferenciales con Python
Mientras que algunos problemas de Ecuaciones diferenciales ordinarias se pueden resolver con métodos analíticos, como hemos mencionado anteriormente, son mucho más comunes los problemas que no se pueden resolver analíticamente. Por lo tanto, en estos casos debemos recurrir a los métodos numéricos. Es aquí, dónde el poder de las computadoras y en especial, de los paquetes científicos de Python como NumPy, Matplotlib, SymPy y SciPy, se vuelven sumamente útiles. Veamos como podemos utilizar la fuerza computacional para resolver Ecuaciones diferenciales.
Soluciones analíticas con Python
SymPy nos proporciona un solucionador genérico de Ecuaciones diferenciales ordinarias, sympy.dsolve
, el cual es capaz de encontrar soluciones analíticas a muchas EDOs elementales. Mientras sympy.dsolve
se puede utilizar para resolver muchas EDOs sencillas simbólicamente, como veremos a continuación, debemos tener en cuenta que la mayoría de las EDOs no se pueden resolver analíticamente. Por ejemplo, retomando el ejemplo que resolvimos analíticamente más arriba, veamos si llegamos al mismo resultado utilizando SymPy para solucionar la siguiente Ecuación diferencial ordinaria:
Ver Código
Aquí primero definimos la incógnitas Symbol
e Function
, luego expresamos en Python la ecuación que define a la función. Ahora solo nos restaría aplicar la función dsolve
para resolver nuestra EDO.
Como podemos ver, arribamos exactamente al mismo resultado. Siguiendo el mismo procedimiento, podemos resolver otras EDOs, por ejemplo si quisiéramos resolver la siguiente Ecuación diferencial:
que cumpla con la condición inicial
Aquí encontramos la solución general de nuestra Ecuación diferencial, ahora reemplazamos los valores de la condición inicial en nuestra ecuación.
y por último despejamos el valor de la constante de integración resolviendo la ecuación.
Como vemos, el valor de la constante de integración es 3, por lo tanto nuestra solución para el problema del valore inicial es:
Para los casos en que no exista una solución analítica, pero sí una solución aproximada por una Serie de potencias, sympy.dsolve
nos va a devolver la serie como solución. Veamos el caso de la siguiente Ecuación diferencial:
Campos de direcciones
Los Campos de direcciones es una técnica sencilla pero útil para visualizar posibles soluciones a las ecuaciones diferenciales de primer orden. Se compone de líneas cortas que muestran la pendiente de la función incógnita en el plano x-y. Este gráfico se puede producir fácilmente debido a que la pendiente de
Es decir, que sólo tenemos que iterar sobre los valores
Por supuesto que calcular las pendientes y dibujar los segmentos de línea para un gran número de puntos a mano sería algo realmente tedioso, pero para eso existen las computadoras y Python!. Veamos un ejemplo, supongamos que tenemos la siguiente Ecuación diferencial ordinaria, la cual según lo que vimos más arriba, sabemos que no tiene una solución analítica:
entonces, con la ayuda de Python, podemos graficar su Campo de dirección del siguiente modo:
Ver Código
Las líneas de dirección en el gráfico de arriba sugieren cómo las curvas que son soluciones a la Ecuación diferencial ordinaria se van a comportar. Por lo tanto, los Campos de direcciones son una herramienta muy útil para visualizar posibles soluciones para Ecuaciones diferenciales ordinarias que no se pueden resolver analíticamente. Este gráfico, también nos puede ayudar a determinar el rango de validez de la solución aproximada por la Serie de potencias. Por ejemplo si resolvemos nuestra EDO para la condición inicial
En el panel de la izquierda podemos ver el gráfico de la solución aproximada por la Serie de potencias; en el panel de la derecha vemos el gráfico al que podemos arribar resolviendo la EDO para valores incrementales de
Transformada de Laplace
Un método alternativo que podemos utilizar para resolver en forma analítica Ecuaciones diferenciales ordinarias complejas, es utilizar la Transformada de Laplace, que es un tipo particular de transformada integral. La idea es que podemos utilizar esta técnica para transformar nuestra Ecuación diferencial en algo más simple, resolver esta ecuación más simple y, a continuación, invertir la transformación para recuperar la solución a la Ecuación diferencial original.
¿Qué es una Transformada de Laplace?
Para poder comprender la Transformada de Laplace, primero debemos revisar la definición general de la transformada integral, la cuál adapta la siguiente forma:
En este caso,
Si nos restringimos a Ecuaciones diferenciales con coeficientes constantes, entonces un kernel que resulta realmente útil es
Tengan en cuenta, que además de usar el kernel
Tabla de transformadas de Laplace
Calcular la Transformada de Laplace a veces puede resultar en una tarea complicada. Por suerte, podemos recurrir a la siguiente tabla para resolver la Transformada de Laplace para las funciones más comunes:
Función original | Transformada de Laplace | Restricciones |
---|---|---|
Propiedades de las transformadas de Laplace
Las Transformadas de Laplace poseen algunas propiedades que también nos van a facilitar el trabajo de resolverlas, algunas de ellas son:
- La Transformada de Laplace es un operador lineal: Esta propiedad nos dice la Transformada de Laplace de una suma, es igual a la suma de las Transformadas de Laplace de cada uno de los términos. Es decir:
- La Transformada de Laplace de la primer derivada: Esta propiedad nos dice que si
es continua y es continua en el intervalo . Entonces la Transformada de Laplace de la primer derivada es:
- La Transformada de Laplace de derivadas de orden superior: Esta propiedad es la generalización de la propiedad anterior para derivadas de orden n. Su formula es:
Resolviendo ecuaciones diferenciales con la transformada de Laplace
La principal ventaja de utilizar Transformadas de Laplace es que cambia la Ecuación diferencial en una ecuación algebraica, lo que simplifica el proceso para calcular su solución. La única parte complicada es encontrar las transformaciones y las inversas de las transformaciones de los varios términos de la Ecuación diferencial que queramos resolver. Veamos entonces como Python y SymPy nos ayudan a resolver Ecuaciones diferenciales utilizando las Transformadas de Laplace. Vamos a intentar resolver la siguiente ecuación:
con las siguientes condiciones iniciales:
Como podemos ver en este resultado, al aplicar la función sympy.laplace_transform
sobre la derivada de
Como podemos ver Transformadas de Laplace, pueden ser una buena alternativa para resolver Ecuaciones diferenciales en forma analítica. Pero aún así, siguen existiendo ecuaciones que se resisten a ser resueltas por medios analíticos, para estos casos, debemos recurrir a los métodos numéricos.
Métodos numéricos
Cuando todo lo demás falla, llegan los métodos numéricos al rescate; siempre vamos a poder calcular una aproximación numérica a una solución de una Ecuación diferencial. De éstos métodos ya no vamos a obtener las formulas elegantes y acabadas que veníamos viendo, sino que vamos a obtener números. Existen muchos enfoques para resolver ecuaciones diferenciales ordinarias en forma numérica, y generalmente están diseñados para resolver problemas que están formulados como un sistema de ecuaciones diferenciales de primer orden de la forma estándar:
donde
La idea básica de muchos de los métodos numéricos para resolver ecuaciones diferenciales ordinarias es capturada por el Método de Euler, veamos de que se trata este método.
El Método de Euler
Para entender este método, revisemos nuevamente la siguiente Ecuación diferencial:
El Método de Euler señala que puede que no tengamos la función real que representa la solución a la Ecuación diferencial precedente. Sin embargo, si poseemos la pendiente de la curva en cualquier punto. Es decir, el ritmo de cambio de la curva, que no es otra cosa que su derivada, la cual podemos utilizar para iterar sobre soluciones en distintos puntos.
Supongamos entonces que tenemos el punto
La cual podemos generalizar para todo
.
Este método esta íntimamente relacionado con los Campos de direcciones que analizamos más arriba. En general, el Método de Euler dice que empecemos por el punto dado por el condición incial y continuemos en la dirección indicada por el Campo de direcciones. Luego nos detengamos, miramos a la pendiente en la nueva ubicación, y procedemos en esa dirección.
El Método de Runge-Kutta
Otro método que podemos utilizar para encontrar soluciones numéricas a Ecuaciones diferenciales, y que incluso es más preciso que el Método de Euler, es el Método de Runge-Kutta. En el cual la relación de recurrencia va a estar dada por un promedio ponderado de términos de la siguiente manera:
en dónde:
Soluciones numéricas con Python
Para poder resolver Ecuaciones diferenciales en forma numérica con Python, podemos utilizar las herramienta de integración que nos ofrece SciPy, particularmente los dos solucionadores de ecuaciones diferenciales ordinarias, integrate.odeint
y integrate.ode
. La principal diferencia entre ambos, es que integrate.ode
es más flexible, ya que nos ofrece la posibilidad de elegir entre distintos solucionadores. Veamos algunos ejemplos:
Comencemos por la siguiente función:
Los resultados son dos matrices unidimensionales de NumPy
En este ejemplo, solucionamos solo una ecuación. Generalmente, la mayoría de los problemas se presentan en la forma de sistemas de ecuaciones diferenciales ordinarias, es decir, que incluyen varias ecuaciones a resolver. Para ver como podemos utilizar a integrate.odeint
para resolver este tipo de problemas, consideremos el siguiente sistema de ecuaciones diferenciales ordinarias, conocido el atractor de Lorenz:
Estas ecuaciones son conocidas por sus soluciones caóticas, que dependen sensiblemente de los valores de los parámetros
Como podemos ver, los solucionadores numéricos que nos ofrece SciPy son simples de utilizar y pueden simplificar bastante el trabajo de resolver Ecuaciones diferenciales.
Método analítico vs Método numérico
Al resolver una ecuación diferencial ordinaria en forma analítica, el resultado es una función,
Con esto concluyo este paseo por una de las más fructíferas ideas de las matemáticas aplicadas, las Ecuaciones diferenciales; espero que les pueda servir de guía para facilitarles su solución.
Saludos!
Este post fue escrito utilizando Jupyter notebook. Pueden descargar este notebook o ver su version estática en nbviewer.