Ecuaciones lineales de primer orden#
Un tipo especial de ecuación que aparece en muchos modelos prácticos es el correspondiente a las ecuaciones lineales de primer orden.
Ecuaciones lineales de primer orden:
Se dice que una ecuación diferencial de primer orden es lineal cuando puede expresarse en la forma
Cuando \(q(x)=0\) se dice que la ecuación es homogénea.
Realmente las ecuaciones lineales homogéneas son separables, y se puede comprobar que la solución general sería
En el caso de la ecuación general no homogénea, se puede transformar en una expresión directamente integrable si se multiplican ambos miembros de la ecuación por
Obteniéndose como solución general de la ecuación lineal la expresión
siendo \(C\) una constante arbitraria.
Ejemplo:
La ecuación
es una ecuación lineal con \(p(x)=-1\) y \(q(x)=3e^{2x}\). Su solución general puede ser obtenida directamente aplicando la fórmula anterior, para ello se debe calcular en primer lugar
En este paso puede prescindirse de las constantes de integración ya que estarán todas incluidas en la constante final \(C\) que aparecerá en la solución general.
Una vez calculada esta primera integral, la solución general de la ecuación será:
Es decir, la solución general de la ecuación lineal considerada es \(y=3e^{2x}+C e^x\) con \(C\) constante arbitraria.
La comprobación con Python es la siguiente:
import sympy as sp
x = sp.Symbol('x')
y = sp.Function('y')
ecuacion = sp.Eq(y(x).diff(x)-y(x), 3*sp.exp(2*x))
sp.dsolve(ecuacion)
Ejemplo (enfriamiento de un cuerpo):
Un cuerpo que tiene una temperatura de 90ºC es depositado (en el tiempo \(t=0\)) en un lugar donde la temperatura se mantiene a 20ºC. Después de 3 minutos, la temperatura ha disminuido a 60ºC. Nos podríamos plantear algunas preguntas importantes:
¿Cual es la temperatura del cuerpo después de 5 minutos?
¿Cuánto tiempo debe pasar para que el cuerpo tenga 40ºC?
El enfriamiento de un cuerpo se rige por la ley de enfriamiento de Newton, que establece que la velocidad de enfriamiento de un cuerpo es proporcional a la diferencia de temperaturas entre él y el medio que lo rodea.
La velocidad de enfriamiento es el ritmo con el que cambia la temperatura con respecto al tiempo, es decir, \(\frac{dT}{dt}\), asumiendo que \(T(t)\) es la función que mide la temperatura en el instante de tiempo \(t\). Teniendo en cuenta esto, la ecuación diferencial que rige el proceso de enfriamiento es
donde \(T_a\) es la temperatura del medio que rodea al cuerpo, y que se supone constante. Se trata de una ecuación lineal que podría resolverse aplicando la fórmula de la solución general vista anteriormente.
Teniendo en cuanta la temperatura inicial del cuerpo, el problema de valor inicial que debe resolverse en primera instancia es:
La resolución del problema con Python sería la siguiente:
t, k = sp.symbols('t,k')
T = sp.Function('T')
ecuacion = sp.Eq(T(t).diff(t), k*(T(t) - 20))
condicion = {T(0):90}
solucion = sp.dsolve(ecuacion, ics=condicion)
solucion
Para determinar el valor de la constante de proporcionalidad (\(k\)) puede usarse la otra condición que se conoce
solucion.subs(t,3).subs({T(3):60})
sp.solve(solucion.subs(t,3).subs({T(3):60}), k)
[log(14**(2/3)/7) - 2*I*pi/3, log(14**(2/3)/7) + 2*I*pi/3, log(14**(2/3)/7)]
Como puede observarse, la ecuación algebraica tiene tres soluciones, siendo las dos primeras números complejos, por lo que se debe utilizar únicamente la tercera solución
sp.solve(solucion.subs(t,3).subs({T(3):60}), k)[2].evalf()
Ahora que ya se dispone de todos los datos para definir una función numérica que determine la temperatura del cuerpo en cada instante \(t\):
import numpy as np
def Temperatura(tiempo): return(70*np.exp(-0.1865*tiempo)+20)
En el instante \(t=5\) la temperatura sería
Temperatura(5)
47.549799063442265
import matplotlib.pyplot as plt
tiempo = np.linspace(0,60)
plt.title('Evolución de la temperatura en una hora')
plt.plot(tiempo, Temperatura(tiempo))
plt.show()

Para determinar el tiempo necesario para que la temperatura del cuerpe llegue a 40ºC se debería resolver la ecuación \(Temperatura(t)=40\), pero al estar la función Temperatura
definida como numérica, la ecuación algebraica no puede resolverse con las funciones del paquete SymPy. Una opción es utilizar la función fsolve()
que ofrece el paquete de cálculo científico SciPy y que permite aproximar raíces de ecuaciones.
from scipy.optimize import fsolve
def ecuacion(t): return Temperatura(t) - 40
fsolve(ecuacion, 0)
array([6.71722771])
Temperatura(6.71722771)
40.000000011607355
Algunas ecuaciones diferenciales no son lineales pero sí que resultan fácilmente transformables en lineales con algún cambio de variable. A continuación se analizan dos de estos tipos de ecuaciones que se pueden convertir en lineales.
Ecuación de Bernoulli#
Ecuación de Bernoulli:
Se llama ecuación de Bernoulli a la que se puede expresar en la forma
siendo \(n\) un número real. Si \(n=0\) o \(n=1\) la ecuación de Bernoulli es directamente lineal, por lo que se puede asumir que \(n\neq 0\) y \(n\neq 1\). La ecuación de Bernoulli se transforma directamente en lineal con el cambio de variable:
Antes de aplicar el cambio debe dividirse a ambos lados de la ecuación por \(y^n\).
Ejemplo:
La ecuación
es una ecuación de Bernoulli con \(n=2\). Dividiendo por \(y^2\) a ambos lados de la ecuación se obtiene
A continuación se aplicaría el cambio \(u=y^{-n+1}=y^{-1}\), con lo que \(u'=-y^{-2}y'\). Se obtendría de esta manera una ecuación lineal de primer orden:
Esta ecuación podría resolverse directamente con la fórmula de resolución de las ecuaciones lineales
siendo en este caso \(p(x)=-1\) y \(q(x)=-1\). En definitiva:
Deshaciendo el cambio se obtiene la solución de la ecuación original:
En Python la resolución simbólica de este tipo de ecuaciones también es posible:
x = sp.Symbol('x')
y = sp.Function('y')
ecuacion = sp.Eq(y(x).diff(x), y(x)**2-y(x))
sp.dsolve(ecuacion)
Ecuación de Riccati#
Otro tipo de ecuaciones que puede ser reducida a lineal es la conocida como ecuación de Riccati. Esta ecuación es de la forma
Esta ecuación puede reducirse a una ecuación lineal si se conoce una solución particular \(y_p\) y se hace el cambio
Ejemplo:
Para resolver la ecuación
se necesita conocer una solución particular. Puede comprobarse que \(y_p=x\) es una solución de la ecuación, entonces se realiza el cambio
y se obtiene la ecuación
Simplificando la ecuación anterior se llega a una ecuación lineal
cuya solución general es \(u=1+Ce^x\). Deshaciendo el cambio se obtiene la solución general de la ecuación inicial:
De nuevo, se comprueba con Python el resultado obtenido:
ecuacion = sp.Eq(y(x).diff(x), y(x)**2-(2*x+1)*y(x)+x**2+x+1)
sp.dsolve(ecuacion)
Ejercicios propuestos#
Resolver las siguientes ecuaciones lineales
Resolver el siguiente problema de valor inicial
Comprobar que la ecuación \(y'+P(x)y=Q(x)y\log y\) con \(P(x)\) y \(Q(x)\) funciones reales, se transforma en una ecuación lineal haciendo el cambio \(u=\log y\).
Resolver las siguientes ecuaciones de Bernoulli:
Resolver las siguientes ecuaciones de Riccati