ELF and GNOME: two tiny codes to evaluate the real zeros of the Bessel functions of the first kind for real orders. J. Segura, A. Gil.

PROGRAM SUMMARY
Title of program: ELF, GNOME
Catalogue identifier: ADJY
Ref. in CPC: 117(1999)250
Operating system: UNIX
Number of lines in distributed program, including test data, etc: 336
Programming language used: Fortran
Computer: Hewlett Packard, 715/100

Nature of physical 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...

Method of solution
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.

Restrictions on the complexity of the problem
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 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.

Typical 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).