¿Cómo resolver: [math] \ dfrac {dy} {dx} = y ^ {2} – g ^ {2} [/ math] con g (x) la función Bessel modificada K2 (x), con python? O con un CAS como Mathematica

Buscando una solución simbólica general de la ecuación diferencial dada (una ecuación de tipo Riccati) con Mathematica, se utilizará el siguiente código:

DSolve [{y ‘[x] – (y [x]) ^ 2 == – (BesselK [2, x]) ^ 2, y [1] == 1}, y [x], x]

Pero Mathematica y Wolfram Alpha no proporcionan una respuesta o solución simbólica.

Una forma de resolver la ecuación diferencial dada es obtener una solución numérica con condiciones iniciales específicas. Esto se puede lograr usando la función incorporada de Mathematica NDSolveValue [].

Aquí hay un ejemplo . Escribiendo el código:

ys01 = NDSolveValue [{- y [x] ^ 2 + Derivado [1] [y] [x] == -BesselK [2, x] ^ 2,
y [1] == 2}, y, {x, 0, 30}]

da el siguiente resultado o salida:

La solución anterior se puede usar y visualizar en una gráfica escribiendo:

Trazar [ys01 [x], {x, 0, 20}]

y el resultado es la siguiente gráfica (haga clic en la imagen a continuación para ampliarla):

También se puede trazar la función y su (primera) derivada escribiendo:

Trazar [{ys01 [x], ys01 ‘[x]}, {x, 0, 22}, ImageSize -> Large]

y la salida es (haga clic en la imagen de abajo para agrandarla):

Se pueden encontrar y trazar varias soluciones con diferentes condiciones iniciales o límite.

Escribiendo el código:

eqnv = Tabla [NDSolveValue [{- y [x] ^ 2 + Derivado [1] [y] [x] ==
-BesselK [2, x] ^ 2, y [i] == j}, y, {x, 0, 30}], {i, 1, 3}, {j, 1, 3}]

calcula las funciones de interpolación para nueve soluciones con nueve condiciones de contorno diferentes.

Las soluciones se pueden trazar escribiendo el siguiente código:

Trazar [Evaluar [Tabla [eqnv [[i, j]] [x], {i, 1, 3}, {j, 1, 3}]],
{x, 0, 25}, ImageSize -> Large]

y la trama resultante es (haga clic en la imagen a continuación para ampliarla):

Si desea tomar la ruta Python, SciPy sería el camino a seguir. Convenientemente, la función Bessel de orden [matemática] enésima [/ matemática] ya está implementada en funciones especiales. Usando el integrador numérico de SciPy, crear un script Python rápido no es nada difícil.

de scipy.special import kn
de scipy.integrate import ode

def g (x): # La función Bessel de segundo orden
volver kn (2, x)

def f (x, y): # Su ecuación diferencial
devuelve y * y – (g (x) ** 2)

respuesta = oda (f)