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
© Copyright 2024