tango.math.GammaFunction

Implementation of the gamma and beta functions, and their integrals.

License:

BSD style: see license.txt

Authors:

Stephen L. Moshier (original C code). Conversion to D by Don Clugston
real MAXGAMMA [const] #
The maximum value of x for which gamma(x) < real.infinity.
real sgnGamma(real x) #
The sign of Γ(x).
Returns -1 if Γ(x) < 0, +1 if Γ(x) > 0, NAN if sign is indeterminate.
real gamma(real x) #
The Gamma function, Γ(x)
Γ(x) is a generalisation of the factorial function to real and complex numbers. Like x!, Γ(x+1) = x*Γ(x).

Mathematically, if z.re > 0 then Γ(z) = 0 tz-1e-t dt

Special Values
x Γ(x)
NAN NAN
±0.0 ±∞
integer > 0 (x-1)!
integer < 0 NAN
+∞ +∞
-∞ NAN
real logGamma(real x) #
Natural logarithm of gamma function.
Returns the base e (2.718...) logarithm of the absolute value of the gamma function of the argument.

For reals, logGamma is equivalent to log(fabs(gamma(x))).

Special Values
x logGamma(x)
NAN NAN
integer <= 0 +∞
±∞ +∞
real beta(real x, real y) #
Beta function
The beta function is defined as

beta(x, y) = (Γ(x) Γ(y))/Γ(x + y)

real betaIncomplete(real aa, real bb, real xx) #
Incomplete beta integral
Returns incomplete beta integral of the arguments, evaluated from zero to x. The regularized incomplete beta function is defined as

betaIncomplete(a, b, x) = Γ(a+b)/(Γ(a) Γ(b)) * 0x ta-1(1-t)b-1 dt

and is the same as the the cumulative distribution function.

The domain of definition is 0 <= x <= 1. In this implementation a and b are restricted to positive values. The integral from x to 1 may be obtained by the symmetry relation

betaIncompleteCompl(a, b, x ) = betaIncomplete( b, a, 1-x )

The integral is evaluated by a continued fraction expansion or, when b*x is small, by a power series.

real betaIncompleteInv(real aa, real bb, real yy0) #
Inverse of incomplete beta integral
Given y, the function finds x such that

betaIncomplete(a, b, x) == y

Newton iterations or interval halving is used.

real gammaIncomplete(real a, real x) #
real gammaIncompleteCompl(real a, real x) #
Incomplete gamma integral and its complement
These functions are defined by

gammaIncomplete = ( 0x e-t ta-1 dt )/ Γ(a)

gammaIncompleteCompl(a,x) = 1 - gammaIncomplete(a,x) = (x e-t ta-1 dt )/ Γ(a)

In this implementation both arguments must be positive. The integral is evaluated by either a power series or continued fraction expansion, depending on the relative values of a and x.

real gammaIncompleteComplInv(real a, real p) #
Inverse of complemented incomplete gamma integral
Given a and y, the function finds x such that

gammaIncompleteCompl( a, x ) = p.

Starting with the approximate value x = a t3, where t = 1 - d - normalDistributionInv(p) sqrt(d), and d = 1/9a, the routine performs up to 10 Newton iterations to find the root of incompleteGammaCompl(a,x) - p = 0.

real digamma(real x) #
Digamma function
The digamma function is the logarithmic derivative of the gamma function.

digamma(x) = d/dx logGamma(x)