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)