Copyright | (c) 2009, 2011, 2012 Bryan O'Sullivan |
---|---|
License | BSD3 |
Maintainer | bos@serpentine.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Special functions and factorials.
- erf :: Double -> Double
- erfc :: Double -> Double
- invErf :: Double -> Double
- invErfc :: Double -> Double
- logGamma :: Double -> Double
- logGammaL :: Double -> Double
- incompleteGamma :: Double -> Double -> Double
- invIncompleteGamma :: Double -> Double -> Double
- digamma :: Double -> Double
- logBeta :: Double -> Double -> Double
- incompleteBeta :: Double -> Double -> Double -> Double
- incompleteBeta_ :: Double -> Double -> Double -> Double -> Double
- invIncompleteBeta :: Double -> Double -> Double -> Double
- sinc :: Double -> Double
- log1p :: Double -> Double
- log2 :: Int -> Int
- factorial :: Int -> Double
- logFactorial :: Integral a => a -> Double
- stirlingError :: Double -> Double
- choose :: Int -> Int -> Double
- logChoose :: Int -> Int -> Double
Error function
Gamma function
Compute the logarithm of the gamma function Γ(x). Uses Algorithm AS 245 by Macleod.
Gives an accuracy of 10-12 significant decimal digits, except
for small regions around x = 1 and x = 2, where the function
goes to zero. For greater accuracy, use logGammaL
.
Returns ∞ if the input is outside of the range (0 < x ≤ 1e305).
Compute the logarithm of the gamma function, Γ(x). Uses a Lanczos approximation.
This function is slower than logGamma
, but gives 14 or more
significant decimal digits of accuracy, except around x = 1 and
x = 2, where the function goes to zero.
Returns ∞ if the input is outside of the range (0 < x ≤ 1e305).
Compute the normalized lower incomplete gamma function γ(s,x). Normalization means that γ(s,∞)=1. Uses Algorithm AS 239 by Shea.
Inverse incomplete gamma function. It's approximately inverse of
incompleteGamma
for the same s. So following equality
approximately holds:
invIncompleteGamma s . incompleteGamma s = id
Compute ψ0(x), the first logarithmic derivative of the gamma function. Uses Algorithm AS 103 by Bernardo, based on Minka's C implementation.
Beta function
Regularized incomplete beta function. Uses algorithm AS63 by Majumder and Bhattachrjee and quadrature approximation for large p and q.
:: Double | logarithm of beta function for given p and q |
-> Double | p > 0 |
-> Double | q > 0 |
-> Double | x, must lie in [0,1] range |
-> Double |
Regularized incomplete beta function. Same as incompleteBeta
but also takes logarithm of beta function as parameter.
Compute inverse of regularized incomplete beta function. Uses initial approximation from AS109, AS64 and Halley method to solve equation.
Sinc
Logarithm
Compute the natural logarithm of 1 + x
. This is accurate even
for values of x
near zero, where use of log(1+x)
would lose
precision.
Factorial
Compute the factorial function n!. Returns +∞ if the
input is above 170 (above which the result cannot be represented by
a 64-bit Double
).
logFactorial :: Integral a => a -> Double
Compute the natural logarithm of the factorial function. Gives 16 decimal digits of precision.
stirlingError :: Double -> Double
Calculate the error term of the Stirling approximation. This is only defined for non-negative values.
stirlingError @n@ = @log(n!) - log(sqrt(2*pi*n)*(n/e)^n)
Combinatorics
choose :: Int -> Int -> Double
Compute the binomial coefficient n `
k. For
values of k > 50, this uses an approximation for performance
reasons. The approximation is accurate to 12 decimal places in the
worst casechoose
`
Example:
7 `choose` 3 == 35
References
- Bernardo, J. (1976) Algorithm AS 103: Psi (digamma) function. /Journal of the Royal Statistical Society. Series C (Applied Statistics)/ 25(3):315-317. http://www.jstor.org/stable/2347257
- Cran, G.W., Martin, K.J., Thomas, G.E. (1977) Remark AS R19 and Algorithm AS 109: A Remark on Algorithms: AS 63: The Incomplete Beta Integral AS 64: Inverse of the Incomplete Beta Function Ratio. /Journal of the Royal Statistical Society. Series C (Applied Statistics)/ Vol. 26, No. 1 (1977), pp. 111-114 http://www.jstor.org/pss/2346887
- Lanczos, C. (1964) A precision approximation of the gamma function. SIAM Journal on Numerical Analysis B 1:86–96. http://www.jstor.org/stable/2949767
- Loader, C. (2000) Fast and Accurate Computation of Binomial Probabilities. http://projects.scipy.org/scipy/raw-attachment/ticket/620/loader2000Fast.pdf
- Macleod, A.J. (1989) Algorithm AS 245: A robust and reliable algorithm for the logarithm of the gamma function. Journal of the Royal Statistical Society, Series C (Applied Statistics) 38(2):397–402. http://www.jstor.org/stable/2348078
- Majumder, K.L., Bhattacharjee, G.P. (1973) Algorithm AS 63: The Incomplete Beta Integral. /Journal of the Royal Statistical Society. Series C (Applied Statistics)/ Vol. 22, No. 3 (1973), pp. 409-411. http://www.jstor.org/pss/2346797
- Majumder, K.L., Bhattacharjee, G.P. (1973) Algorithm AS 64: Inverse of the Incomplete Beta Function Ratio. /Journal of the Royal Statistical Society. Series C (Applied Statistics)/ Vol. 22, No. 3 (1973), pp. 411-414 http://www.jstor.org/pss/2346798
- Shea, B. (1988) Algorithm AS 239: Chi-squared and incomplete gamma integral. Applied Statistics 37(3):466–473. http://www.jstor.org/stable/2347328