CBJS

Evaluates a sequence of Bessel functions of the first kind with real order and complex arguments.

Required Arguments

XNU — Real argument which is the lowest order desired. (Input)
XNU must be greater than –1/2.

Z — Complex argument for which the sequence of Bessel functions is to be evaluated. (Input)

N — Number of elements in the sequence. (Input)

CBS — Vector of length N containing the values of the function through the series. (Output)
CBS(I) contains the value of the Bessel function of order XNU + I   1 at Z for I = 1 to N.

FORTRAN 90 Interface

Generic: CALL CBJS (XNU, Z, N, CBS)

Specific: The specific interface names are S_CBJS and D_CBJS.

FORTRAN 77 Interface

Single: CALL CBJS (XNU, Z, N, CBS)

Double: The double precision name is DCBJS.

Description

The Bessel function Jν (z) is defined to be

 

This code is based on the code BESSCC of Barnett (1981) and Thompson and Barnett (1987).

This code computes Jν (z) from the modified Bessel function Iν (z), CBIS, using the following relation:

 

CBJS implements the Yousif and Melka (Y&M) algorithm (Yousif and Melka (1997)) for approximating Jν (z) with a Taylor series expansion when x ~ 0 or y ~ 0, where complex argument z = x + iy and “x ~ 0” == “x < amach(4)”. To be consistent with the existing CBJS argument definitions, the original Y&M algorithm, which was limited to integral order and to (x ~ 0 and y  0) or (y ~ 0 and x  0), has been generalized to also work for integral and real order ν > -1, and for (x ~ 0 and y < 0) and (y ~ 0 and x < 0).

To deal with the Bessel function discontinuity that occurs at the negative x axis, the following procedure is used for calculating the Y&M approximation of Jν (z) with argument z = x + iy when ((x ~ 0 and y < 0) or (y ~ 0 and x < 0)):

  1. Calculate the Y&M approximation of Jν (-z).

  2. If (y > 0), use forward rotation, otherwise use backward rotation, to calculate the Bessel function Jν (z), where the “forward” and “backward” rotation transformations are defined as:

forward: Jν (z) = eνπ iJν (-z) = i 2ν Jν (-z)

backward: Jν (z) = eνπ iJν (-z) = i2ν Jν (-z)

These definitions are based on Abromowitz and Stegun (1972), eq. 9.1.35: Jν (ze mπ) = e mνπJν (z), where m = 1 represents forward transformation and m = -1 represents backward transformation. These specified rotations insure that the continuous rotation transformation Jν (-z Jν (z) does not cross the negative x axis, so no discontinuity is encountered.

Comments

Informational Errors

 

Type

Code

Description

3

1

One of the continued fractions failed.

4

2

Only the first several entries in CBS are valid.

Example

In this example, J0.3+k1(1.2 + 0.5i), k = 1, , 4 is computed and printed.

 

USE CBJS_INT

USE UMACH_INT

 

IMPLICIT NONE

! Declare variables

INTEGER N

PARAMETER (N=4)

!

INTEGER K, NOUT

REAL XNU

COMPLEX CBS(N), Z

! Compute

XNU = 0.3

Z = (1.2, 0.5)

CALL CBJS (XNU, Z, N, CBS)

! Print the results

CALL UMACH (2, NOUT)

DO 10 K=1, N

WRITE (NOUT,99999) XNU+K-1, Z, CBS(K)

10 CONTINUE

99999 FORMAT (' J sub ', F6.3, ' ((', F6.3, ',', F6.3, &

')) = (', F9.3, ',', F9.3, ')')

END

Output

 

J sub 0.300 (( 1.200, 0.500)) = ( 0.774, -0.107)

J sub 1.300 (( 1.200, 0.500)) = ( 0.400, 0.159)

J sub 2.300 (( 1.200, 0.500)) = ( 0.087, 0.092)

J sub 3.300 (( 1.200, 0.500)) = ( 0.008, 0.024)