Las funciones de Bessel en

Las funciones de Bessel en (wx)Maxima
Jos´e A. Vallejo
Facultad de Ciencias UASLP
resumen: Este documento presenta una breve introducci´on al manejo
de las funciones de Bessel J0 en Maxima y, en particular, al c´alculo
de sus ceros.
Las funciones de Bessel esta´
n implementadas en Maxima, pero se tratan de
manera simb´
olica (esto es, no se eval´
uan), excepto por ciertas funciones como
“specint”. Ocurre lo mismo que si se escribe
(%i1)
(a+b)^3;
3
(%o1) (b + a)
Probablemente uno esperar´ıa ver a3 + 3ba2 + 3b2 a + b3 , pero no ocurre as´ı
porque Maxima es un programa simb´
olico y, por tanto, ve la expresi´on (a + b)3
como un todo. Si uno quiere la expansi´
on de esta expresi´on, hay que pedirla
expl´ıcitamente, de otra manera Maxima simplemente devuelve la expresi´on
porque no le hemos dicho qu´e queremos hacer con ella:
(%i2)
expand((a+b)^3);
(%o2) b3 + 3 a b2 + 3 a2 b + a3
Lo mismo ocurre con las funciones de Bessel:
(%i3)
bessel_j(0,2);
(%o3) bessel j (0, 2)
Si queremos el resultado num´erico hay que pedirlo como tal:
(%i4)
bessel_j(0,2),numer;
(%o4) 0.2238907791412356
Para graficar la funci´
on, podemos usar el operador de evaluaci´on sobre funciones,
dado por ’ ’ (dos comillas simples). Esto fuerza a la funci´on a evaluar el resultado
cuando se la llama, no solo a guardarlo, Ahora todo es sencillo:
(%i5)
wxplot2d(’’bessel_j(0,t),[t,0,10]);
1
(%t5)
(%o5)
Incluso podemos hacer el gr´
afico que siempre viene en los libros...
(%i6)
wxplot2d(
makelist(’’bessel_j(n,t),n,0,5),[t,0,10]
);
(%t6)
(%o6)
Se pueden buscar ra´ıces en intervalos de la forma [a, b] con el comando “find root”
pero hay que tener en cuenta que el c´alculo se detiene una vez encontrada la
primera ra´ız, de modo que no es posible aplicarlo para listar todas las ra´ıces en
un intervalo grande como [0, 10]. Para el caso de J0 , podr´ıamos ir haciendo:
(%i7)
find_root(’’bessel_j(0,t),t,0,4);
(%o7) 2.404825557695773
(%i8)
find_root(’’bessel_j(0,t),t,4,7);
2
(%o8) 5.52007811028631
(%i9)
find_root(’’bessel_j(0,t),t,7,10);
(%o9) 8.653727912911013
El c´
alculo se simplifica si se recuerda que la teor´ıa de Sturm asegura que la
distancia entre dos ceros sucesivos tiende a π. Entonces, podemos buscar los
ceros en un intervalo dado dividi´endolo en segmentos de longitud cercana a π.
En el caso de querer los ceros en el intervalo [0, 10] –como antes– har´ıamos:
(%i10) makelist(
find_root(’’bessel_j(0,t),t,k*%pi,(k+1)*%pi),k,0,2
);
(%o10) [2.404825557695773, 5.52007811028631, 8.653727912911013]
Por u
´ltimo, una sencilla funci´on que determina los ceros de J0 en el intervalo
[a, b] (y que generaliza lo que acabamos de exponer) podr´ıa ser
(%i11) cerosj0(a,b):=block([m],
m:floor(b/%pi),
makelist(
find_root(’’bessel_j(0,t),t,a+k*%pi,a+(k+1)*%pi),k,0,m-1)
)$
El ejemplo anterior se calcular´ıa ahora como sigue:
(%i12) cerosj0(0,10);
(%o12) [2.404825557695773, 5.52007811028631, 8.653727912911013]
Con esta funci´
on es inmediato responder a preguntas como “¿Cu´ales son los
primeros 40 ceros de J0 ?”. El resultado se presenta en forma de lista, a la que
damos el nombre de “primeros40” para utilizarla posteriormente:
(%i13) primeros40:cerosj0(0,40*%pi);
3
(%o13)
[2.404825557695773, 5.52007811028631, 8.653727912911013,
11.79153443901428, 14.93091770848779, 18.07106396791092,
21.21163662987926, 24.35247153074931, 27.49347913204026,
30.63460646843198, 33.77582021357357, 36.91709835366404,
40.05842576462824, 43.19979171317672, 46.34118837166181,
49.48260989739781, 52.62405184111499, 55.76551075501998,
58.90698392608094, 62.04846919022717, 65.18996480020687,
68.33146932985679, 71.47298160359372, 74.61450064370183,
77.75602563038805, 80.89755587113763, 84.03909077693818,
87.18062984364116, 90.32217263721049, 93.46371878194476,
96.60526795099626, 99.7468198586806, 102.8883742541948,
106.0299309164516, 109.1714896498054, 112.3130502804949,
115.4546126536669, 118.5961766308725, 121.737742087951,
124.879308913233]
Tambi´en podemos comprobar num´ericamente que la predicci´on de la teor´ıa de
Sturm acerca de que la separaci´on entre ra´ıces tiende a π, es cierta:
(%i14) makelist(
primeros40[k+1]-primeros40[k],k,1,39
);
(%o14)
[3.115252552590538, 3.133649802624702, 3.137806526103269,
3.139383269473505, 3.140146259423137, 3.140572661968339,
3.140834900870043, 3.141007601290951, 3.141127336391719,
3.141213745141592, 3.14127814009047, 3.141327410964202,
3.141365948548483, 3.141396658485085, 3.141421525736007,
3.141441943717176, 3.141458913904991, 3.141473171060959,
3.141485264146233, 3.141495609979692, 3.141504529649922,
3.141512273736936, 3.141519040108108, 3.141524986686221,
3.141530240749574, 3.141534905800555, 3.141539066702975,
3.141542793569329, 3.141546144734278, 3.141549169051501,
3.141551907684331, 3.141554395514206, 3.141556662256804,
3.141558733353776, 3.141560630689526, 3.141562373172036,
3.141563977205578, 3.141565457078443, 3.141566825281984]
4
Como un sencillo ejercicio, el lector podr´a adaptar los c´alculos precedentes para
estudiar las dem´
as funciones de Bessel, Jν , Yν .
5