Cómo encontrar las raíces de una función de Bessel del primer tipo numéricamente

¿Cuántas de las raíces necesitas (qué tan lejos debes llegar)?

Puede generar el primer par de funciones de Bessel del primer tipo para valores pequeños de x utilizando la expansión en serie (manteniendo solo el primer término):

J_n (x) ~ x ^ n / (2 ^ n * n!) – x ^ (n + 2) / (2 ^ (n + 2) * (n + 1)!))

Usted determina hasta qué punto puede usar esto en función del error relativo que está dispuesto a aceptar (dado por la razón del segundo término al primer término):

x <2 * SQRT ((error relativo) * (n + 1))

En este punto, cambia a la expansión de serie asintótica en términos de los polinomios de Legendre:

J_n (x) = SQRT (2 / (pi * x)) (P_n (x) * cos (x – (n + 1/2) * pi / 2) – Q_n (x) * sin (x – (n + 1/2) * pi / 2)

Donde P_n (x) y Q_n (x) son los polinomios de Legendre del primer y segundo tipo:

P_0 (x) = 1
P_1 (x) = x
Q_0 (x) = 1/2 * ln ((1 + x) / (1 – x)) para -1 <x <1
Q_0 (x) = 1/2 * ln ((x + 1) / (x – 1)) de lo contrario
Q_1 (x) = 1/2 * x * ln ((1 + x) / (1 – x)) – 1 para -1 <x <1
Q_1 (x) = 1/2 * x * ln ((x + 1) / (x – 1)) – 1 de lo contrario

Ahora que tiene J_0 (x) y J_1 (x), puede usar la relación de recursión para encontrarlos para todos los valores más altos de n:

J_ (n + 1) (x) = 2n / x * J_n (x) – J_ (n – 1) (x) (excepto para valores muy cercanos a 0, para los cuales habrá un flujo inferior, en este caso recurrir a expansión de la serie convergente una vez más)

Para encontrar los ceros, puede usar el método de Newton o, si es vago y la velocidad de cálculo no es esencial, simplemente multiplique cada valor de J_n (x) por J_n (x + h) y observe qué valores de x el producto es negativo (estos son lugares donde la función cruza el eje x (ceros)).

Nota: En la práctica, parece que debería mantener tres términos para que J_0 (x) tenga un error inferior al 0.1% de x = 0 a x = 1 y luego cambie a la serie asintótica anterior:

plot ABS ((BesselJ [0, x] – (1 – x ^ 2/4 + x ^ 4/64)) / BesselJ [0, x]) de x = 0 a x = 1 – Wolfram | Alpha

plot SQRT (2 / (pi * x)) * (LegendreP [0, x] * cos (x – (1/2) * pi / 2) – LegendreQ [0, x] * sin (x – (1/2 ) * pi / 2)) para x = 1 a 10 – Wolfram | Alpha

El método de Newton debería funcionar bien. Método de Newton
Para la derivada que Newton solicita, buscaría las fórmulas derivadas en, por ejemplo, Abramowitz y Stegun. Hay “relaciones de recurrencia” que expresan la derivada de una función de Bessel en términos de otras funciones de Bessel. Son análogos a la regla [matemáticas] \ frac {d} {dx} \ sin {x} = \ cos {x} [/ matemáticas]. Eso es más sin problemas que hacer los derivados numéricamente. Y probablemente sea útil de nuevo algún día poder diferenciar las funciones de Bessel. ¡Si nada más hará que la gente piense que eres un genio de las matemáticas!

Supongo que tiene las funciones de Bessel integradas en el software que esté utilizando. (Si está en la escuela, su escuela puede tener Matlab y / o Mathematica, que los tienen integrados y le ahorrará mucho tiempo en comparación con escribir código en un lenguaje de programación normal). Si tiene que usar un lenguaje sin funciones incorporadas de Bessel, simplemente tome el código de alguna parte. No debería tener que implementar las funciones de Bessel usted mismo.

Necesita resolver numéricamente la ecuación diferencial cuyas soluciones son las funciones de Bessel. Luego, simplemente (nuevamente, numéricamente) encuentra las raíces de las soluciones. Le aconsejaría que consulte la página de wikipedia sobre las funciones de Bessel (y las ecuaciones que las conducen) y también algunos tutoriales sobre la resolución numérica de ecuaciones diferenciales.

Función de Bessel del primer tipo