|
JYV -- Evaluate a sequence of Bessel functions of the first and
second kinds and their derivatives with arbitrary real orders
and real arguments.
书名《COMPUTATION OF SPECIAL FUNCTIONS》
作者 Shanjie Zhang and Jianming Jin
以下Fortran77代码来自这本书,仅供参考。
[Fortran] 纯文本查看 复制代码 001 | SUBROUTINE JYV ( V , X , VM , BJ , DJ , BY , DY ) |
020 | IMPLICIT DOUBLE PRECISION ( A - H , O - Z ) |
021 | DIMENSION BJ ( 0 : * ) , DJ ( 0 : * ) , BY ( 0 : * ) , DY ( 0 : * ) |
022 | EL = . 5772156649015329 D 0 |
023 | PI = 3.141592653589793D0 |
024 | RP 2 = . 63661977236758 D 0 |
028 | IF ( X .LT. 1.0D-100 ) THEN |
049 | R = -0.25D0 * R * X 2 / ( K * ( K + VL ) ) |
051 | IF ( DABS ( R ) .LT. DABS ( BJVL ) * 1.0D-15 ) GO TO 20 |
056 | IF ( L .EQ. 0 ) BJV 0 = BJVL * A |
057 | IF ( L .EQ. 1 ) BJV 1 = BJVL * A |
064 | VV = 4.0D0 * ( J + V 0 ) * ( J + V 0 ) |
068 | RP = -0.78125D-2 * RP * ( VV - ( 4.0 * K -3.0 ) * * 2.0 ) * ( VV - |
069 | & ( 4.0 * K -1.0 ) * * 2.0 ) / ( K * ( 2.0 * K -1.0 ) * X 2 ) |
074 | RQ = -0.78125D-2 * RQ * ( VV - ( 4.0 * K -1.0 ) * * 2.0 ) * ( VV - |
075 | & ( 4.0 * K +1.0 ) * * 2.0 ) / ( K * ( 2.0 * K +1.0 ) * X 2 ) |
077 | QX = 0.125D0 * ( VV -1.0 ) * QX / X |
078 | XK = X - ( 0.5D0 * ( J + V 0 ) +0.25D0 ) * PI |
083 | BJV 0 = A 0 * ( PX * CK - QX * SK ) |
084 | BYV 0 = A 0 * ( PX * SK + QX * CK ) |
085 | ELSE IF ( J .EQ. 1 ) THEN |
086 | BJV 1 = A 0 * ( PX * CK - QX * SK ) |
087 | BYV 1 = A 0 * ( PX * SK + QX * CK ) |
093 | DJ ( 0 ) = V 0 / X * BJ ( 0 ) - BJ ( 1 ) |
094 | DJ ( 1 ) = - ( 1.0D0 + V 0 ) / X * BJ ( 1 ) + BJ ( 0 ) |
095 | IF ( N .GE. 2 .AND. N .LE. INT ( 0.9 * X ) ) THEN |
099 | F = 2.0D0 * ( K + V 0 -1.0D0 ) / X * F 1 - F 0 |
103 | ELSE IF ( N .GE. 2 ) THEN |
113 | F = 2.0D0 * ( V 0 + K +1.0D0 ) / X * F 1 - F 2 |
117 | IF ( DABS ( BJV 0 ) .GT. DABS ( BJV 1 ) ) THEN |
126 | 60 DJ ( K ) = - ( K + V 0 ) / X * BJ ( K ) + BJ ( K -1 ) |
127 | IF ( X .LE. 12.0D0 ) THEN |
134 | R = -0.25D0 * R * X 2 / ( K * ( K - VL ) ) |
136 | IF ( DABS ( R ) .LT. DABS ( BJVL ) * 1.0D-15 ) GO TO 70 |
141 | IF ( L .EQ. 0 ) BJU 0 = BJVL * B |
142 | IF ( L .EQ. 1 ) BJU 1 = BJVL * B |
146 | BYV 0 = ( BJV 0 * DCOS ( PV 0 ) - BJU 0 ) / DSIN ( PV 0 ) |
147 | BYV 1 = ( BJV 1 * DCOS ( PV 1 ) - BJU 1 ) / DSIN ( PV 1 ) |
155 | R 0 = -0.25D0 * R 0 / ( K * K ) * X 2 |
157 | BYV 0 = RP 2 * ( EC * BJV 0 - CS 0 ) |
163 | R 1 = -0.25D0 * R 1 / ( K * ( K +1 ) ) * X 2 |
164 | 85 CS 1 = CS 1 + R 1 * ( 2.0D0 * W 1 +1.0D0 / ( K +1.0D0 ) ) |
165 | BYV 1 = RP 2 * ( EC * BJV 1 -1.0D0 / X -0.25D0 * X * CS 1 ) |
171 | BYVK = 2.0D0 * ( V 0 + K -1.0D0 ) / X * BYV 1 - BYV 0 |
175 | DY ( 0 ) = V 0 / X * BY ( 0 ) - BY ( 1 ) |
177 | 95 DY ( K ) = - ( K + V 0 ) / X * BY ( K ) + BY ( K -1 ) |
183 | SUBROUTINE GAMMA ( X , GA ) |
192 | IMPLICIT DOUBLE PRECISION ( A - H , O - Z ) |
194 | PI = 3.141592653589793D0 |
195 | IF ( X .EQ. INT ( X ) ) THEN |
205 | IF ( DABS ( X ) .GT. 1.0D0 ) THEN |
215 | DATA G / 1.0D0 , 0.5772156649015329D0 , |
216 | & -0.6558780715202538D0 , -0.420026350340952D-1 , |
217 | & 0.1665386113822915D0 , - . 421977345555443 D -1 , |
218 | & - . 96219715278770 D -2 , . 72189432466630 D -2 , |
219 | & - . 11651675918591 D -2 , - . 2152416741149 D -3 , |
220 | & . 1280502823882 D -3 , - . 201348547807 D -4 , |
221 | & - . 12504934821 D -5 , . 11330272320 D -5 , |
222 | & - . 2056338417 D -6 , . 61160950 D -8 , |
223 | & . 50020075 D -8 , - . 11812746 D -8 , |
224 | & . 1043427 D -9 , . 77823 D -11 , |
225 | & - . 36968 D -11 , . 51 D -12 , |
226 | & - . 206 D -13 , - . 54 D -14 , . 14 D -14 , . 1 D -15 / |
231 | IF ( DABS ( X ) .GT. 1.0D0 ) THEN |
233 | IF ( X .LT. 0.0D0 ) GA = - PI / ( X * GA * DSIN ( PI * X ) ) |
240 | INTEGER FUNCTION MSTA 1 ( X , MP ) |
251 | IMPLICIT DOUBLE PRECISION ( A - H , O - Z ) |
258 | NN = N 1 - ( N 1 - N 0 ) / ( 1.0D0 - F 0 / F 1 ) |
260 | IF ( ABS ( NN - N 1 ) .LT. 1 ) GO TO 20 |
270 | INTEGER FUNCTION MSTA 2 ( X , N , MP ) |
282 | IMPLICIT DOUBLE PRECISION ( A - H , O - Z ) |
297 | NN = N 1 - ( N 1 - N 0 ) / ( 1.0D0 - F 0 / F 1 ) |
299 | IF ( ABS ( NN - N 1 ) .LT. 1 ) GO TO 20 |
308 | REAL * 8 FUNCTION ENVJ ( N , X ) |
310 | ENVJ = 0.5D0 * DLOG10 ( 6.28D0 * N ) - N * DLOG10 ( 1.36D0 * X / N ) |
|
|