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