Elsevier Science Home
Computer Physics Communications Program Library
Full text online from Science Direct
Programs in Physics & Physical Chemistry
CPC Home

[Licence| Download | New Version Template] adjy_v1_0.gz(3 Kbytes)
Manuscript Title: ELF and GNOME: two tiny codes to evaluate the real zeros of the Bessel functions of the first kind for real orders.
Authors: J. Segura, A. Gil
Program title: ELF, GNOME
Catalogue identifier: ADJY_v1_0
Distribution format: gz
Journal reference: Comput. Phys. Commun. 117(1999)250
Programming language: Fortran.
Computer: Hewlett Packard 715/100.
Operating system: UNIX.
Keywords: General purpose, First kind, Bessel functions, Zeros of bessel, Functions, Newton method.
Classification: 4.7.

Nature of problem:
We include two codes in order to evaluate the zeros of first kind Bessel functions for real orders nu:
The subroutine ELF finds the zero jnu,s of the first kind Bessel function Jnu(x) in the neighbourhood of a given starting value x0 (x0 and jnu,s in the same branch of Hnu(x)=Jnu(x)/Jnu-1(x)).
The subroutine GNOME finds the zeros in a given interval [xmin, xmax].
The zeros of first kind Bessel functions appear in the solution of many different physical and engineering applications: wave guides, diffraction by a cylinder, quantum billiards, plasma physics, cyclic membrane vibrations...

Solution method:
We have built a Newton-Raphson method based on the monotonicity properties of the function fnu(x) = x**(2nu-1)Jnu(x)/Jnu-1(x); this method has been shown to be convergent for any real order nu and any starting value x0.

For positive orders the codes have no limitation in practice, except for the possible slow convergence of the continued fraction for x >> |nu|. We have limited to 10**5 the maximum allowed number of iterations for the evaluation of the continued fraction Hnu(x) = Jnu(x)/Jnu-1(x). This way, zeros larger than 10**6 are not evaluated.
The codes work with a precision eps chosen by the user. The codes achieve full double precision except when evaluating the first positive zero for real orders nu = -kappa + gamma, kappa = 1,2,... and gamma = nu-INT(nu)+1 a small real number (0<gamma<<1). In this case, the best precision reachable is 10**-16/gamma; besides, one should demand a precision eps such that eps < gamma when evaluating the first zero for kappa > 1.
The program GNOME has been limited to work in the range nu > -1. ELF can be used for any real nu with the limitations above described.

Running time:
Of the order of 10**-2s for each evaluated zero (in a HP 715/100 machine), increasing as larger zeros are evaluated and larger orders are considered (see LONG WRITE-UP, section 5).