Las funciones de Bessel en (wx)Maxima José A. Vallejo Facultad de

Transcripción

Las funciones de Bessel en (wx)Maxima José A. Vallejo Facultad de
Las funciones de Bessel en (wx)Maxima
José A. Vallejo
Facultad de Ciencias UASLP
resumen: Este documento presenta una breve introducción al manejo
de las funciones de Bessel J0 en Maxima y, en particular, al cálculo
de sus ceros.
Las funciones de Bessel estań implementadas en Maxima, pero se tratan de
manera simbólica (esto es, no se evalúan), 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ólico y, por tanto, ve la expresión (a + b)3
como un todo. Si uno quiere la expansión de esta expresión, hay que pedirla
explı́citamente, de otra manera Maxima simplemente devuelve la expresión
porque no le hemos dicho qué 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érico hay que pedirlo como tal:
(%i4)
bessel_j(0,2),numer;
(%o4) 0.2238907791412356
Para graficar la función, podemos usar el operador de evaluación sobre funciones,
dado por ’ ’ (dos comillas simples). Esto fuerza a la función 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áfico 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álculo 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álculo 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éndolo 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 último, una sencilla función 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ón es inmediato responder a preguntas como “¿Cuáles 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én podemos comprobar numéricamente que la predicción de la teorı́a de
Sturm acerca de que la separación 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á adaptar los cálculos precedentes para
estudiar las demás funciones de Bessel, Jν , Yν .
5

Documentos relacionados