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) = i‑2ν Jν (-z)
These definitions are based on
Abromowitz and Stegun (1972), eq. 9.1.35:
Jν (
ze mπ i ) =
e mνπ i 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+k−1(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)
Published date: 03/19/2020
Last modified date: 03/19/2020