4 votos

Cálculo de las funciones de Bessel

Quiero calcular la función de Bessel, dada por

$$J_\alpha (\beta) = \sum_{m=0}^{\infty}\frac{(-1)^m}{m!\Gamma(m+\alpha +1)} \left(\frac{\beta}{2}\right)^{2m}$$

Sé que hay algunas tablas que existen para esto, pero quiero mantener el $\beta$ variable (es decir, quiero una forma simbólica en términos de $\beta$ ). Si hay una manera de simplificar la parte de la suma de la ecuación y dejar una ecuación sólo en términos de $\beta$ Sería de gran ayuda. (Veo que hay una dependencia de $2m$ de la ecuación).

Otra pregunta que tengo es: ¿cómo se calcula esto para $\beta$ valores que son mayores que $1$ ? Me parece que esto daría una suma infinita.

Estoy buscando algo para $\alpha=1,3,5$ y $\beta=4$ .

Gracias de antemano.

10voto

Andrew Puntos 140

He aquí otro método que quizá quieras considerar, si te dedicas a generar una secuencia de funciones de Bessel de argumento fijo y órdenes enteros consecutivos. Para describir el algoritmo, que se debe a J.C.P. Miller, primero damos por sentado la desigualdad ( $x$ aquí se asume como real)

$$|J_n(x)|\leq\frac1{n!}\left|\frac{x}{2}\right|^n$$

y la serie

$$1=J_0(x)+2\sum_{k=1}^\infty J_{2k}(x)$$

así como la relación de recurrencia

$$\frac{J_n(x)}{J_{n-1}(x)}=\frac{x}{2n-x\frac{J_{n+1}(x)}{J_n(x)}}$$

La idea de Miller es utilizar primero una estimación como la desigualdad que he dado para calcular un número entero $n^\ast$ tal que $\frac{J_{n^\ast}(x)}{J_{n^\ast-1}(x)}$ es menor que el épsilon de la máquina. Una vez hecho esto, elige algún valor arbitrario como punto de partida (esencialmente, $f\,J_{n^\ast}(x)$ con $f$ una constante desconocida), aplicar la recurrencia hacia atrás un número apropiado de veces, mientras se acumula una suma no normalizada ( $f\,J_0(x)+f\,J_1(x)+\cdots$ ). Una vez que haya terminado su recurrencia, puede utilizar la suma para normalizar los valores de la recurrencia que almacenó en el camino, lo que produce los valores de la función de Bessel que necesita.

Para ser más concreto, presentaré una Mathematica implementación del algoritmo de Miller (que debería ser fácilmente traducible a tu entorno informático favorito). He elegido $n^\ast=24$ aquí; utilizando la desigualdad con $x=4$ tenemos $|J_{24}(4)|\leq\frac{(4/2)^24}{24!}\approx 2.7\times10^{-17}$

x = N[4, 20];
n = 24;
(*hl accumulates ratios of Bessels h; s is the unnormalized sum*)
h = 0; s = 0; hl = {};
Do[
  h = x/(2 k - x h); (*recurrence relation*)
  hl = {h, hl};
  s = h (s + 2 Boole[EvenQ[k]]); , (*i.e., add 2 if k is even, else 0*)
  {k, n - 1, 1, -1}];
hl = Flatten[{1/(1 + s), hl}]; (*numerator is the value of the series*)
Do[hl[[k]] *= hl[[k - 1]], {k, 2, Length[hl]}];
hl

Después de ejecutar el fragmento, hl tiene aproximaciones a $J_0(4),J_1(4),\dots,J_{23}(4)$ . Cuando lo probé, los primeros diecinueve valores generados eran buenos hasta al menos diez dígitos. Adapta el algoritmo según sea necesario.

4voto

Andrew Puntos 140

Como he aludido en los comentarios, en general habría que escribir un capítulo de libro de párrafos para hablar de la evaluación de las funciones de Bessel para varios rangos de argumentos. Aquí, las cosas son más fáciles, ya que sólo tengo que tratar con órdenes enteros de tamaño modesto. Ahora demostraré uno de mis métodos favoritos, debido a Yudell Luke.

Nuestro punto de partida aquí es el par de integrales

$$J_n(x)=\begin{cases}\frac2{\pi}\int_0^{\pi/2}\cos(x\cos\,u)\cos\,nu\;\mathrm du&n\text{ even}\\\frac2{\pi}\int_0^{\pi/2}\sin(x\sin\,u)\sin\,nu\;\mathrm du&n\text{ odd}\end{cases}$$

Dos métodos muy útiles para evaluar numéricamente estas integrales son la regla trapezoidal y la regla del punto medio. En cierto sentido, estos dos métodos son muy precisos para el trabajo, gracias a la fórmula de Euler-Maclaurin. (Véase este para una discusión más profunda).

Utilizando el caso del orden impar como ejemplo concreto, existe la siguiente aproximación que utiliza la (tristemente menos conocida) regla del punto medio:

$$J_n(x)\approx\frac1{m}\sum_{k=0}^{m-1}\sin\left(x\sin\left(\frac{\pi}{2m}\left(k+\frac12\right)\right)\right)\sin\left(\frac{\pi n}{2m}\left(k+\frac12\right)\right)$$

donde $m$ es un número entero elegido adecuadamente. Para el caso particular descrito en su pregunta, tomar $m=8$ da aproximaciones buenas de al menos diez dígitos. Aumentar $m$ según sea necesario.

En el caso de incluso $n$ sólo hay que reemplazar todos los senos por cosenos.

De nuevo, este método sólo es adecuado para valores enteros modestos de $n$ y valores modestos de $x$ otros métodos pueden ser más precisos, más eficientes o ambos para otros rangos de argumentos.

0voto

0d0h0m0s Puntos 51

@J.M. Te agradezco mucho que te hayas tomado el tiempo de compartir tus conocimientos en este hilo. Pero creo que me gustaría retroceder un poco aquí.

Creo que para mis propósitos, esta ecuación que has proporcionado es la más útil.

$$J_n(x)\approx\frac1{m}\sum_{k=0}^{m-1}\sin\left(x\sin\left(\frac{\pi}{2m}\left(k+\frac12\right)\right)\right)\sin\left(\frac{\pi n}{2m}\left(k+\frac12\right)\right)$$

A fin de cuentas, creo que lo que necesito saber es cómo $\beta$ afecta a la $J_o(\beta)$ . Como probablemente sepa, $\beta$ (en la teoría de la comunicación) es igual a $\frac{\Delta \omega}{\omega_m}$ tal que $\Delta \omega$ es constante y $\omega_m$ es la frecuencia de modulación. Para mi caso, también he definido $s = j\omega_m$ . (Esto es importante para más adelante)

También he tomado tu sugerencia y he utilizado m = 8. Por lo tanto, podemos simplificar la ecuación anterior para que sea

$$J_n(\frac{\Delta \omega}{\omega_m})\approx\frac1{8}\sum_{k=0}^{7}\sin\left(\frac{\Delta \omega}{\omega_m}\sin\left(\frac{\pi}{16}\left(k+\frac12\right)\right)\right)\sin\left(\frac{\pi n}{16}\left(k+\frac12\right)\right)$$

Esencialmente, ya que voy a hacer una respuesta de frecuencia más tarde, quiero cambiar el $\omega_m$ término para estar en términos de $s$ . Así, podemos hacer la sustitución por $\omega_m = -js$ . Así que si, también elegimos n = 2 (como ejemplo, nos queda.

$$J_2(\frac{\Delta \omega}{\omega_m})\approx\frac1{8}\sum_{k=0}^{7}\sin\left(\frac{\Delta \omega}{-js}\sin\left(\frac{\pi}{16}\left(k+\frac12\right)\right)\right)\sin\left(\frac{2\pi }{16}\left(k+\frac12\right)\right)$$

El problema que estoy viendo es que para valores grandes de $\Delta\omega$ (alrededor de 4k para este caso), y poner eso en un coseno, $J_n(\beta)$ devuelve el infinito.

¿Hay algo obvio que se me escapa? No tiene sentido que no pueda evaluar para este tamaño de $\beta$ .

También veo en su más reciente post que esta ecuación

$$|J_n(x)|\leq\frac1{n!}\left|\frac{x}{2}\right|^n$$

En realidad, esto parece mucho más simple de usar y desde $\beta$ es positivo, puedo ignorar los valores absolutos del lado derecho, y tampoco tendría que lidiar con los cosenos/senos como arriba. ¿Crees que esto es posible?

Perdón de antemano por la larga lectura

0voto

ronak Puntos 11

El objetivo general de este trabajo es crear un gráfico de bode/respuesta de frecuencia de $J_n(\beta)*H(j(\omega_{so}+n\omega_m)$ . Así, he hecho la definición $s = j\omega_m$ ya que $\omega_{so}$ es un punto de sesgo. También sabemos que $\beta = \frac{\Delta \omega}{\omega_m}$ . Como queremos una respuesta en frecuencia, creo que tiene sentido reescribir $\beta$ en términos de $s$ . Por lo tanto, nos quedamos con $\beta = \frac{\Delta \omega}{-js}$ . También sé (por un cálculo previo) que el valor de $\Delta \omega$ es la ecuación a 4120. Enseguida veo que puede haber un problema a baja frecuencia, ya que el valor de $\beta$ será grande.

El peor caso sería tener un $\omega_m$ = 1Hz, pero esto da un $\beta$ valor en el rango de 4000. Por lo tanto, mi pensamiento era empezar en $\omega_m$ = 1kHz, que no es el peor caso, pero sigue dando un número razonable de bandas laterales con las que trabajar. Por lo tanto, si hacemos un barrido de frecuencia desde 1kHz hasta 100MHz, deberíamos ser capaces de capturar un gráfico razonable de la respuesta en frecuencia. Aunque para mí, esto es difícil ahora, ya que estamos variando $\omega_m$ por lo que el valor de $\beta$ está cambiando, y por lo tanto $J_n(\beta)$ también está cambiando.

Inicialmente esto no era un problema ya que había asumido que $\beta$ era muy pequeño, tal que podía aproximarse $J_n(\beta)$ como simplemente $\frac{\Delta \omega}{2\omega_m}$ y podría hacer fácilmente el barrido de frecuencia de esto. Sin embargo, mis resultados no terminaron siendo muy precisos, ya que $\beta$ no era realmente pequeño. Quiero hacer lo mismo, pero no tengo una expresión sencilla para $J_n(\beta)$ más.

Por lo tanto, creo que lo que estoy buscando es una expresión para $J_n(\beta)$ para cambiar los valores de $\beta$ ?

Creo que todavía puedo usar

$$J_n(x)\approx\frac1{m}\sum_{k=0}^{m-1}\sin\left(x\sin\left(\frac{\pi}{2m}\left(k+\frac12\right)\right)\right)\sin\left(\frac{\pi n}{2m}\left(k+\frac12\right)\right)$$

como punto de partida, pero me encontré con problemas para evaluar los senos y cosenos, y no pude evitarlo fácilmente.

Me gustaría tener valores de $n$ para 1 - 5.

Espero que esto sea más claro, por favor, hágame saber si tiene alguna pregunta y trataré de responderla lo antes posible.

Gracias.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X