flopscope.

flopscope.numpy.i0

Modified Bessel function of the first kind, order 0.

Adapted from NumPy docs np.i0

Areacore
Typecounted
NumPy Refnp.i0
Cost
16×numel(output)\text{numel}(\text{output})
Flopscope Context

Modified Bessel function of order 0, element-wise.

Usually denoted I0I_0.

Parameters

x:array_like of float

Argument of the Bessel function.

Returns

out:ndarray, shape = x.shape, dtype = float

The modified Bessel function evaluated at each of the elements of x.

See also

Notes

The scipy implementation is recommended over this function: it is a proper ufunc written in C, and more than an order of magnitude faster.

We use the algorithm published by Clenshaw [1]_ and referenced by Abramowitz and Stegun [2]_, for which the function domain is partitioned into the two intervals [0,8] and (8,inf), and Chebyshev polynomial expansions are employed in each interval. Relative error on the domain [0,30] using IEEE arithmetic is documented [3]_ as having a peak of 5.8e-16 with an rms of 1.4e-16 (n = 30000).

References

footnote
1

C. W. Clenshaw, "Chebyshev series for mathematical functions", in
National Physical Laboratory Mathematical Tables, vol. 5, London:
Her Majesty's Stationery Office, 1962.
footnote
2

M. Abramowitz and I. A. Stegun, Handbook of Mathematical
Functions, 10th printing, New York: Dover, 1964, pp. 379.
https://personal.math.ubc.ca/~cbm/aands/page_379.htm
footnote
3

https://metacpan.org/pod/distribution/Math-Cephes/lib/Math/Cephes.pod#i0:-Modified-Bessel-function-of-order-zero

Examples

>>> import flopscope.numpy as fnp
>>> flops.i0(0.)
array(1.0)
>>> flops.i0([0, 1, 2, 3])
array([1.        , 1.26606588, 2.2795853 , 4.88079259])