Bessel, Airy and Coulomb wave functions
The Bessel, Airy and Coulomb wave functions are confluent hypergeometric functions: each of them is a combination of or series near the origin and of functions with exponential prefactors near infinity. FLINT evaluates them with the general methods of Hypergeometric functions, plus a few specializations: the cancellation estimate that decides the working precision, propagated error bounds based on derivative bounds, dedicated error bounds for the Airy functions, and interval Newton iteration for the zeros of the Airy functions.
Bessel functions#
For all complex and ,
with the regularized for negative integer , and the asymptotic expansions come from
The prefactors simplify to when is an integer and to when ; the general formula is used otherwise. The functions of the second kind follow from
for non-integer . At integer , is computed as a limit with power series in (acb_hypgeom_bessel_k_0f1_series), and .
Choice of method. acb_hypgeom_bessel_j uses the convergent series for , and the asymptotic expansion for or ; the asymptotic expansion of reaches about bits for small , and the factor 2 is a safety margin. Between these regions the convergent series is used with a working precision raised by the estimated cancellation. The terms of the series for grow to about while the function has size about , so about bits are lost; no precision is added when the terms do not cancel (purely imaginary with real or integer , or ). The modified functions and use the series for and for , and the asymptotic expansion otherwise.
Propagated error. For inexact and integer , is evaluated at the midpoint and the error is bounded with acb_hypgeom_bessel_j_deriv_bound, which uses for example ; this avoids the large overestimation that ball arithmetic produces when a wide ball is pushed through a series with cancellation. When the resulting enclosure is still poor, it is intersected with the direct bound for .
Large orders and integration. For real and , if the result has less than half the target accuracy (typically because is large compared to and the precision), acb_hypgeom_bessel_i and acb_hypgeom_bessel_k retry with rigorous numerical integration of an integral representation (arb_hypgeom_bessel_i_integration, arb_hypgeom_bessel_k_integration).
Power series. The Taylor expansion of at a point follows from , and a five-term recurrence for the higher coefficients derived from the Bessel differential equation . This is implemented generically in gr_bessel_j_jet and _gr_poly_bessel_j_series, which arb_hypgeom_bessel_j_series and acb_hypgeom_bessel_j_series call; the recurrence divides by , so must be bounded away from 0 unless it is exactly 0 and is an integer.
Airy functions#
The Airy functions are entire solutions of . Near the origin FLINT sums
with and (cached constants), by rectangular splitting in powers of with word-size coefficients (acb_hypgeom_airy_direct). With the terms are bounded by , which gives the tail bound. Expressing the Airy functions through Bessel functions of order is avoided, since such formulas hold only in sectors (the Stokes phenomenon).
Asymptotic expansions#
The error bounds are based on Olver [NIST2012, §9.7]. For and ,
For the remainders are bounded by
with .
For when is roughly in the right half-plane, the connection formulas
are combined with the expansions, which after collecting the roots of unity gives
where the upper signs are valid for and the lower signs for ; the derivative is analogous. In the left half-plane the formulas
with and , reduce to arguments with when , and collecting roots of unity gives, with ,
The differentiated formulas are analogous. acb_hypgeom_airy_asymp implements these formulas, and acb_hypgeom_airy_bound evaluates them with in mag_t arithmetic to get cheap upper bounds for the four functions on a ball.
Choice of method#
acb_hypgeom_airy uses the asymptotic expansion when and the terms decrease below (the number of terms comes from an estimate of ), and the series otherwise. For the series it estimates in double precision the magnitude of the largest term, about , and the magnitude of the functions from the leading asymptotic term, and adds the difference to the working precision (this ignores the extra cancellation near the zeros). The series is evaluated at the midpoint of ; the error propagated from the radius is bounded by times the bounds of acb_hypgeom_airy_bound for the derivatives, using .
Zeros#
arb_hypgeom_airy_zero computes the -th real zeros of from the asymptotic expansions [NIST2012, §9.9] , , , , where and . Pittaluga and Sacripante [PS1991] proved that two consecutive truncations of the expansions for and bracket the zero; for and the truncated expansion gives a starting interval that is verified by an interval Newton step. For tabulated 48-bit enclosures are used, since the expansions are poor for the first zero. The enclosure is then refined by interval Newton steps with doubling precision, using for the derivatives.
Coulomb wave functions#
The Coulomb wave functions , and solve . With the normalization constant
(computed through so that it is analytic in and ), the regular solution is
and all four functions are expressed through with exponential and power prefactors. The formulas, with the branch cuts placed on the negative real axis, follow the connection formulas collected in [Fungrim] (see also [DYF1999; Gas2018; Mic2007] and [NIST2012, chapter 33]); different formulas are used in the upper and lower half-planes and on the real line so that each function is computed without unnecessary cancellation, and are computed directly rather than as , which can cancel. The functions are evaluated with the asymptotic expansion when is large enough and with acb_hypgeom_u otherwise. The jets (acb_hypgeom_coulomb_jet) use and at and for the first derivative and the differential equation for the higher coefficients.
Use in FLINT#
- Bessel functions:
acb_hypgeom_bessel_j,acb_hypgeom_bessel_y,acb_hypgeom_bessel_jy,acb_hypgeom_bessel_i,acb_hypgeom_bessel_kand their scaled versions, with the methodsacb_hypgeom_bessel_j_0f1,acb_hypgeom_bessel_j_asymp,acb_hypgeom_bessel_i_0f1,acb_hypgeom_bessel_i_asymp,acb_hypgeom_bessel_k_0f1,acb_hypgeom_bessel_k_asymp; the real wrappers inarb_hypgeom; the genericgr_bessel_j_jetand_gr_poly_bessel_j_series. - :
acb_hypgeom_0f1uses the Bessel connection formulas for its asymptotic expansion. - Airy functions:
acb_hypgeom_airy,acb_hypgeom_airy_direct,acb_hypgeom_airy_asymp,acb_hypgeom_airy_bound,acb_hypgeom_airy_jet, the series versions andarb_hypgeom_airy_zero. - Coulomb wave functions:
acb_hypgeom_coulomb,acb_hypgeom_coulomb_jet,acb_hypgeom_coulomb_seriesand the real versions.
Referenced from#
- acb_hypgeom.h (module)
acb_hypgeom_airy_asymp- Hypergeometric functions (algorithm)
- gr_special.h (module)
References#
- [NIST2012] National Institute of Standards and Technology, Digital Library of Mathematical Functions (2012), https://dlmf.nist.gov/
- [PS1991] G. Pittaluga and L. Sacripante, "Inequalities for the zeros of the Airy functions", SIAM J. Math. Anal. 22:1 (1991), 260-267.
- [Fungrim] F. Johansson. Fungrim: the Mathematical Functions Grimoire. https://fungrim.org
- [DYF1999] A. Dzieciol, S. Yngve and P. O. Fröman, "Coulomb wave functions with complex values of the variable and the parameters", J. Math. Phys. 40, 6145 (1999), https://doi.org/10.1063/1.533083
- [Gas2018] D. Gaspard, "Connection formulas between Coulomb wave functions" (2018), https://arxiv.org/abs/1804.10976
- [Mic2007] N. Michel, "Precise Coulomb wave functions for a wide range of complex l, eta and z", Computer Physics Communications, Volume 176, Issue 3, (2007), 232-249, https://doi.org/10.1016/j.cpc.2006.10.004
The FLINT team, “Bessel, Airy and Coulomb wave functions,” FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev, 2026. https://flintlib.org/doc/algorithms/special-functions/bessel-airy.html (generated 2026-11-02).
@misc{flint-doc-algorithms-special-functions-bessel-airy,
author = {{The FLINT team}},
title = {{Bessel, Airy and Coulomb wave functions}},
howpublished = {FLINT: Fast Library for Number Theory, documentation, version 3.7.0-dev},
year = {2026},
url = {https://flintlib.org/doc/algorithms/special-functions/bessel-airy.html},
note = {Generated 2026-11-02}
}