
[section:sph_bessel Spherical Bessel Functions of the First and Second Kinds]

[h4 Synopsis]

   template <class T1, class T2>
   ``__sf_result`` sph_bessel(unsigned v, T2 x);

   template <class T1, class T2, class ``__Policy``>
   ``__sf_result`` sph_bessel(unsigned v, T2 x, const ``__Policy``&);

   template <class T1, class T2>
   ``__sf_result`` sph_neumann(unsigned v, T2 x);
   
   template <class T1, class T2, class ``__Policy``>
   ``__sf_result`` sph_neumann(unsigned v, T2 x, const ``__Policy``&);
   
[h4 Description]

The functions __sph_bessel and __sph_neumann return the result of the
Spherical Bessel functions of the first and second kinds respectively:

sph_bessel(v, x) = j[sub v](x)

sph_neumann(v, x) = y[sub v](x) = n[sub v](x)

where:

[equation sbessel2]

The return type of these functions is computed using the __arg_pomotion_rules
for the single argument type T.

[optional_policy]

The functions return the result of __domain_error whenever the result is
undefined or complex: this occurs when `x < 0`.

The j[sub v][space] function is cyclic like J[sub v][space] but differs
in its behaviour at the origin:

[graph sph_bessel]

Likewise y[sub v][space] is also cyclic for large x, but tends to -[infin][space]
for small /x/:

[graph sph_neumann]

[h4 Testing]

There are two sets of test values: spot values calculated using
[@http://functions.wolfram.com/ functions.wolfram.com],
and a much larger set of tests computed using
a simplified version of this implementation
(with all the special case handling removed).

[h4 Accuracy]

Other than for some special cases, these functions are computed in terms of
__cyl_bessel_j and __cyl_neumann: refer to these functions for accuracy data.

[h4 Implementation]

Other than error handling and a couple of special cases these functions
are implemented directly in terms of their definitions:

[equation sbessel2]

The special cases occur for:

j[sub 0][space]= __sinc_pi(x) = sin(x) / x

and for small ['x < 1], we can use the series:

[equation sbessel5]

which neatly avoids the problem of calculating 0/0 that can occur with the
main definition as x [rarr] 0.

[endsect]

[/ 
  Copyright 2006 John Maddock, Paul A. Bristow and Xiaogang Zhang.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]
