Ecuaciones diferenciales separables y reducibles a separables#
Ecuaciones separables:
Una ecuación diferencial se dice separable cuando puede expresarse en la forma
El proceso de resolución de una ecuación separable consiste en separar las dos variables en lados opuestos de la ecuación y realizar una doble integración, a un lado en la variable independiente \(x\) y al otro en la dependiente \(y\), incluyendo además una constante de integración. Es decir
Ejemplo:
Dada la ecuación
se podría expresar en la forma
y por tanto
de donde se obtiene la solución general:
Esa misma ecuación puede resolverse simbólicamente con Python.
import sympy as sp
x = sp.Symbol('x')
y = sp.Function('y')
ecuacion = sp.Eq(y(x).diff(x)+sp.sin(x)*y(x), 0)
sp.dsolve(ecuacion)
En el proceso de resolución se pueden perder soluciones con las manipulaciones algebraicas de la ecuación. Por ello, debe comprobarse si existe alguna otra solución singular y añadirla para la obtención de la solución general.
En el ejemplo anterior, al separar las variables se está haciendo la suposición de que \(y\neq 0\), pero la función constante \(y=0\) también verifica la ecuación. En este caso, esa solución ya está incluida en la familia paramétrica de soluciones obtenida, en concreto corresponde a la solución con \(K=0\). Hay otros casos en los que estas soluciones singulares no quedan incluidas en la familia paramétrica, y por tanto hay que también considerarlas.
Ejemplo:
La ecuación
puede expresarse como
Pero de nuevo se está asumiendo que \(y\neq 0\). Haciendo una doble integración se obtiene la familia paramétrica de soluciones:
o equivalentemente:
Ahora bien, la solución \(y=0\) también verifica la ecuación y no está incluida en esa familia, es decir, no corresponde a ningún valor de la constante \(C\), por tanto la solución general de la ecuación es
Esas soluciones especiales no siempre son correctamente identificadas por Python, por ejemplo al resolver esta ecuación con dsolve()
no se obtiene la solución \(y=0\).
ecuacion = sp.Eq(y(x).diff(x) + 3*x**2*y(x)**2, 0)
sp.dsolve(ecuacion)
Ejemplo: seguidores de una red social
Supóngase que el número de seguidores de una cuenta en una red social crece de manera proporcional al número de seguidores que posee. Esto significa que, si \(S(t)\) es una función que determina el número de seguidores de dicha cuenta en el instante de tiempo \(t\) (donde \(t\) se mide en días), entonces la tasa de crecimiento de seguidores (\(dS/dt\)) es un cierto múltiplo \(k\) del número de seguidores, es decir, se tiene la siguiente ecuación diferencial:
Se trata de una ecuación separable que puede ser resuelta fácilmente con una doble integración. La solución general es
donde \(C\) es una constante arbitraria y \(k\) la constante de proporcionalidad en la ecuación.
t, k = sp.symbols('t,k')
S = sp.Function('S')
ecuacion = sp.Eq(S(t).diff(t), k*(S(t)))
sp.dsolve(ecuacion)
Si se desean determinar los valores de esas dos constantes se necesitaría alguna información adicional. Por ejemplo, si se sabe que el número de seguidores en el instante inicial (\(t=0\)) es de 200, y al cabo de una semana (instante \(t=7\)) se tienen ya 350 seguidores, se podría determinar fácilmente el valor de ambas constantes planteando el sistema de ecuaciones:
Tanto la generación de esas ecuaciones como su resolución puede hacerse con funciones del paquete SymPy. La resolución de ecuaciones (no diferenciales) se realiza con la función solve()
.
sp.dsolve(ecuacion).subs(t,0).subs(S(0),200)
sp.dsolve(ecuacion).subs(t,7).subs(S(7),350)
C1, k = sp.symbols('C1,k')
sol = sp.solve((sp.dsolve(ecuacion).subs(t,0).subs(S(0),200),
sp.dsolve(ecuacion).subs(t,7).subs(S(7),350)),(C1,k))
sol
[(200, -2*log(2)/7 + log(7)/7),
(200, -log(2) + log(224)/7 - 2*I*pi/7),
(200, -log(2) + log(224)/7 + 2*I*pi/7),
(200, -log(2) + log(224)/7 + log(-sin(pi/14) - I*cos(pi/14))),
(200, -log(2) + log(224)/7 + log(-sin(pi/14) + I*cos(pi/14))),
(200, -log(2) + log(224)/7 + log(-exp(-I*pi/7))),
(200, -log(2) + log(224)/7 + log(-exp(I*pi/7)))]
sol[0][1].evalf()
De todas las soluciones de ese sistema de ecuaciones, solo interesa la que corresponde a valores reales. Teniendo en cuenta esto, la función que permitiría predecir la evolución del número de seguidores es:
cuya gráfica mostraría un crecimiento exponencial en el número de seguidores:
import matplotlib.pyplot as plt
import numpy as np
tiempo = np.linspace(0,30)
s = 200*np.exp(0.079945*tiempo)
plt.plot(tiempo, s)
plt.show()

Ecuaciones reducibles a separables#
Existen ecuaciones que no son directamente separables pero que sí que se pueden convertir en separables con un pequeño cambio de variable. El primer caso es el de las ecuaciones del tipo
Estas ecuaciones se reducen a separables con el cambio \(z=ax+by\).
Ejemplo:
La ecuación
se puede expresar en la forma:
Si se aplica el cambio \(z=x+y\) se obtiene
Esta última ecuación ya es separable, y su solución es:
Deshaciendo el cambio se obtiene la solución de la ecuación inicial:
siendo \(C\) una constante arbitraria.
ecuacion = sp.Eq(y(x).diff(x) - sp.exp(x)*sp.exp(y(x)), -1)
sp.dsolve(ecuacion)
Ecuaciones homogéneas#
También son reducibles a separables las ecuaciones denominadas homogéneas, que son las que se pueden expresar en la forma
Si se considera \(F(x,y)=f(y/x)\), se cumpliría que dicha función es homogénea de grado 0. En general, una función \(F(x,y)\) es homogénea de grado \(n\) cuando verifica
Cuando se tiene una ecuación de la forma
siendo \(F(x,y)\) una función homogénea de grado \(0\), con el cambio de variable \(z=y/x\), o equivalentemente \(y=zx\), la ecuación se convierte en una ecuación de variables separables.
Ejemplo:
La ecuación
viene definida por una función homogénea de grado 0. Si se realiza el cambio \(z=y/x\), entonces
Esto llevado a la ecuación diferencial conduce a
Por tanto
que ya es una ecuación separable. Separando las variables se obtiene
Deshaciendo el cambio se obtiene la solución de la ecuación inicial definida implícitamente:
ecuacion = sp.Eq(y(x).diff(x), (x**2+y(x)**2)/(x*y(x)))
sp.dsolve(ecuacion)
[Eq(y(x), -x*sqrt(C1 + 2*log(x))), Eq(y(x), x*sqrt(C1 + 2*log(x)))]
Finalmente son reducibles a homogéneas las ecuaciones que se pueden expresar en la forma
En este caso, para convertirlas en homogéneas hay que distinguir dos casos:
Si las rectas \(a_1x+b_1y+c_1=0\) y \(a_2x+b_2y+c_2=0\) se cortan en un punto \((x_0,y_0)\), con los cambios \(u=x-x_0\) y \(v=y-y_0\), la ecuación se reduce a homogénea.
Si las rectas \(a_1x+b_1y+c_1=0\) y \(a_2x+b_2y+c_2=0\) son paralelas, con el cambio \(z=a_1x+b_1y\) la ecuación se reduce a homogénea.
Ejemplo:
Dada la ecuación
las rectas \(3x+y-2=0\) y \(x-1=0\) se cortan en el punto \((1,-1)\). Entonces, el cambio que reduce la ecuación a homogénea es:
y el cambio inverso sería \(x=u+1\) e \(y=v-1\). Aplicando la regla de la cadena, en este caso se cumpliría
Entonces la ecuación original quedaría expresada como
que ya es una ecuación homogénea. Esta última ecuación necesita un cambio adicional para convertirse en separable, el cambio a aplicar es \(z=v/u\), y la ecuación resultante:
Integrando a ambos lados y deshaciendo los cambios se obtiene:
ecuacion = sp.Eq(y(x).diff(x), (3*x+y(x)-2)/(x-1))
sp.dsolve(ecuacion)
Ejercicios propuestos#
Resolver las siguientes ecuaciones separables:
Resolver el siguiente problema de valor inicial
Resolver la siguiente ecuación homogénea
Aplicar un cambio de variable \(z=x-y\) para convertir en separable y resolver la siguiente ecuación diferencial
Calcular la solución general de las siguientes ecuaciones reducibles a homogéneas