This is documentation for Mathematica 3, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.2)
 Documentation / Mathematica / Add-ons / Standard Packages / NumericalMath  /


Exact solutions to many partial differential equations can be expressed as infinite sums over the zeros of some Bessel function or functions. For example, the solution to the heat equation in canonical units on the unit disc with initial temperature and boundary condition

is given by

where the are the positive zeros of , , , , etc. Using FindRoot it is not difficult to find any single desired zero if you can find a good pair of starting values. This package automatically chooses starting values and uses FindRoot

to efficiently produce lists of zeros of various Bessel functions.

Finding zeros of Bessel functions.

Note that FindRoot can be used with a single starting value, in which case the method is based on Newton's method. But the derivative of a Bessel function is usually expressed in terms of two other Bessel functions. In such cases the secant method is more efficient than Newton's method. The secant method requires a pair of starting values, preferably one on each side of the desired zero and sufficiently close to uniquely determine the zero.
Asymptotic formulae exist for approximating the

zeros as , but the approximations are too inaccurate even to be used as starting values to FindRoot when is small and the order is large. As a result, the package works by finding an

sufficiently large that a good approximation results. After finding several consecutive zeros it is able to extrapolate backwards to get a starting value for the zero immediately preceding the smallest currently known zero. By proceeding in this manner it is able to find the requested zeros.

Options for the BesselZero functions.

  • This loads the package.
  • In[1]:= << NumericalMath`BesselZeros`

  • This gives the first 5 zeros of

  • In[2]:= BesselJZeros[0, 5]


  • Here are the 17, 18, and 19 zeros of

  • In[3]:= BesselYPrimeZeros[3, {17, 19}]


  • This gives high-precision values of the first 3 zeros of

  • In[4]:= BesselJYJYZeros[2, 6/5, 3,
    WorkingPrecision -> 30]