In [1]:
%matplotlib notebook
from matplotlib.pyplot import *
from numpy import *
from scipy.special import *
style.use('classic')

Ceros de las funciones de Bessel de orden entero $J_\nu(\alpha_{\nu,n})=0$:

En el módulo scipy.special las raíces de las funciones de Bessel están implementadas en la función jn_zeros. En particular jn_zeros(nu,N) entrega un arreglo con las primeras $N$ raíces de la función $J_\nu$.


In [2]:
for nu in range(5):
    print('nu = '+str(nu)+': '+str(jn_zeros(nu,5)))


nu = 0: [ 2.40482556  5.52007811  8.65372791 11.79153444 14.93091771]
nu = 1: [ 3.83170597  7.01558667 10.17346814 13.32369194 16.47063005]
nu = 2: [ 5.1356223   8.41724414 11.61984117 14.79595178 17.95981949]
nu = 3: [ 6.3801619   9.76102313 13.01520072 16.22346616 19.40941523]
nu = 4: [ 7.58834243 11.06470949 14.37253667 17.61596605 20.82693296]

Podemos graficar estas raíces, de la forma siguiente:


In [8]:
figure()
nmax = 20
numax = 10
for nu in range(numax):
    scatter(nu*ones(nmax),jn_zeros(nu,nmax))
ylim(0,50)
xlim(-1,numax)
xlabel('$\\nu$', fontsize=15)
ylabel(r'$\alpha_{\nu,n}$', fontsize=15)
xticks(range(numax))
grid()
savefig('../figs/fig-Bessel-ceros-01.pdf')


Note que estas raíces no están igualmente espaciadas, lo que se aprecia mejor al graficar la diferencia entre una raiz y la siguiente:


In [9]:
figure()
nmax = 20
numax = 10
for nu in range(numax):
    plot(range(nmax-1),diff(jn_zeros(nu,nmax)), marker='o', markersize=5, lw=1, label='$\\nu = %d$'%nu)
xlim(-1,nmax-1)
ylim(3,)
xlabel('$n$', fontsize=15)
ylabel('$\\alpha_{\\nu,n+1}-\\alpha_{\\nu,n}$', fontsize=15)
xticks(range(nmax))
legend()
grid()
savefig('../figs/fig-Bessel-ceros-02.pdf')


Vemos sin embargo que la diferencia $\alpha_{\nu,n+1}-\alpha_{\nu,n}$ tiende a $\pi$ para valores grandes de $n$.

Ceros de la derivada de las funciones de Bessel de orden entero $J'_\nu(\alpha_{\nu,n})=0$:

Análogamente, las raíces de las derivadas $J'_\nu$ son calculadas por la función jnp_zeros de scipy.special:


In [5]:
for nu in range(5):
    print('nu = '+str(nu)+': '+str(jnp_zeros(nu,5)))


nu = 0: [ 3.83170597  7.01558667 10.17346814 13.32369194 16.47063005]
nu = 1: [ 1.84118378  5.33144277  8.53631637 11.7060049  14.86358863]
nu = 2: [ 3.05423693  6.70613319  9.96946782 13.17037086 16.34752232]
nu = 3: [ 4.20118894  8.0152366  11.34592431 14.58584829 17.78874787]
nu = 4: [ 5.31755313  9.28239629 12.68190844 15.96410704 19.1960288 ]

In [6]:
figure()
nmax = 20
numax = 10
for nu in range(numax):
    scatter(nu*ones(nmax),jnp_zeros(nu,nmax))
ylim(0,50)
xlim(-1,numax)
xlabel('$\\nu$', fontsize=15)
ylabel('$\\beta_{\\nu,n}$', fontsize=15)
xticks(range(numax))
grid()


En este caso, el gráfico de las diferencias es también similar al caso anterior:


In [7]:
figure()
nmax = 20
numax = 10
for nu in range(numax):
    plot(range(nmax-1),diff(jnp_zeros(nu,nmax)), marker='o', markersize=5, lw=1, label='$\\nu = %d$'%nu)
xlim(-1,nmax-1)
ylim(3,)
xlabel('$n$', fontsize=15)
ylabel('$\\beta_{\\nu,n+1}-\\beta_{\\nu,n}$', fontsize=15)
xticks(range(nmax))
legend()
grid()