besselIx¶
Evaluates a sequence of modified Bessel functions of the first kind with real order and complex arguments.
Synopsis¶
besselIx (xnu, z, n)
Required Arguments¶
- float
xnu
(Input) - The lowest order desired. Argument
xnu
must be greater than −1/2. - complex
z
(Input) - Argument for which the sequence of Bessel functions is to be evaluated.
- int
n
(Input) - Number of elements in the sequence.
Return Value¶
The n
values of the function through the series. Element i contains the
value of the Bessel function of order xnu
+ i for \(i=0,
\ldots,n-1\).
Description¶
The Bessel function \(I_v(z)\): is defined to be
\[I_v(z) = e^{-v \pi i/2} J_v\left(z e^{\pi i/2}\right)
\text{ for } -\pi < \arg z \leq \tfrac{\pi}{2}\]
For large arguments, z
, Temme’s (1975) algorithm is used to find
\(I_v(z)\). The \(I_v(z)\) values are recurred upward (if
this is stable). This involves evaluating a continued fraction. If this
evaluation fails to converge, the answer may not be accurate.
For moderate and small arguments, Miller’s method is used.
Example¶
In this example, \(J_{0.3+n-1}(1.2+0.5i)\), \(\nu=1,\ldots,4\) is computed and printed.
from __future__ import print_function
from numpy import *
from pyimsl.math.besselIx import besselIx
n = 4
xnu = 0.3
z = 1.2 + 0.5j
sequence = besselIx(xnu, z, n)
for i in range(0, n):
print("I sub %4.2f ((%4.2f,%4.2f)) = (%5.3f,%5.3f)"
% (xnu + i, z.real, z.imag, sequence[i].real, sequence[i].imag))
Output¶
I sub 0.30 ((1.20,0.50)) = (1.163,0.396)
I sub 1.30 ((1.20,0.50)) = (0.447,0.332)
I sub 2.30 ((1.20,0.50)) = (0.082,0.127)
I sub 3.30 ((1.20,0.50)) = (0.006,0.029)