This function evaluates a generalization of Pochhammer's symbol starting from the first order.
POCH1 — Function
value. (Output)
POCH1(A, X) = (POCH(A, X) − 1)/X.
A — The first argument. (Input)
X — The second, differential argument. (Input)
Generic: POCH1 (A, X)
Specific: The specific interface names are S_POCH1 and D_POCH1.
Single: POCH1 (A, X)
Double: The double precision function name is DPOCH1.
Pochhammer's symbol from the first order is defined to be
where (a)x is Pochhammer's generalized symbol. See POCH for the definition of (a)x. It is useful in special situations that require especially accurate values when x is small. This specification is particularly suited for stability when computing expressions such as
Note that POCH1(a, 0) = ψ(a). See PSI for the definition of ψ(a).
When |x| is so small that substantial cancellation will occur if the straightforward formula is used, we use an expansion due to fields and discussed by Luke (1969).
The ratio (a)x = Γ(a +
x)/ Γ(a) is written by Luke as (a + (x − 1)/2)x times a polynomial in
(a + (x − 1)/2)−2. To maintain significance in POCH1,
we write for positive a,
(a + (x − 1)/2)x = exp(x ln(a + (x − 1)/2)) = eq = 1 + qEXPRL(q)
where EXPRL(x) = (ex − 1)/x. Likewise, the polynomial is written P = 1 + xP1 (a, x). Thus,
POCH1 (a, x) = ((a)x − 1)/x = EXPRL(q)(q/x + qP1(a, x)) + P1(a, x)
Substantial significance loss can occur if a + x or a are close to a negative integer even when |x| is very small. To insure that the result does not overflow or underflow, one can keep the arguments a and a + x well within the range dictated by the gamma function routine GAMMA or one can keep |x| small whenever a is large. POCH also works for a variety of arguments outside these rough limits, but any more general limits that are also useful are difficult to specify.
In this example, POCH1(1.6, 0.8) is computed and printed.
USE POCH1_INT
USE UMACH_INT
IMPLICIT NONE
! Declare variables
INTEGER NOUT
REAL A, VALUE, X
! Compute
A = 1.6
X = 0.8
VALUE = POCH1(A, X)
! Print the results
CALL UMACH (2, NOUT)
WRITE (NOUT,99999) A, X, VALUE
99999 FORMAT (' POCH1(', F6.3, ',', F6.3, ') = ', F6.4)
END
POCH1( 1.600, 0.800) = 0.4878
PHONE: 713.784.3131 FAX:713.781.9260 |