math-functions-0.1.5.1: Special functions and Chebyshev polynomials

Copyright(c) 2009, 2011, 2012 Bryan O'Sullivan
LicenseBSD3
Maintainer[email protected]
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell98

Numeric.SpecFunctions

Contents

Description

Special functions and factorials.

Synopsis

Error function

erf :: Double -> Double Source

Error function.

erf -∞ = -1
erf  0 =  0
erf +∞ =  1

erfc :: Double -> Double Source

Complementary error function.

erfc -∞ = 2
erfc  0 = 1
errc +∞ = 0

invErf Source

Arguments

:: Double

p ∈ [-1,1]

-> Double 

Inverse of erf.

invErfc Source

Arguments

:: Double

p ∈ [0,2]

-> Double 

Inverse of erfc.

Gamma function

logGamma :: Double -> Double Source

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).

logGammaL :: Double -> Double Source

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).

incompleteGamma Source

Arguments

:: Double

s ∈ (0,∞)

-> Double

x ∈ (0,∞)

-> Double 

Compute the normalized lower incomplete gamma function γ(s,x). Normalization means that γ(s,∞)=1. Uses Algorithm AS 239 by Shea.

invIncompleteGamma Source

Arguments

:: Double

s ∈ (0,∞)

-> Double

p ∈ [0,1]

-> Double 

Inverse incomplete gamma function. It's approximately inverse of incompleteGamma for the same s. So following equality approximately holds:

invIncompleteGamma s . incompleteGamma s = id

digamma :: Double -> Double Source

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

logBeta :: Double -> Double -> Double Source

Compute the natural logarithm of the beta function.

incompleteBeta Source

Arguments

:: Double

p > 0

-> Double

q > 0

-> Double

x, must lie in [0,1] range

-> Double 

Regularized incomplete beta function. Uses algorithm AS63 by Majumder and Bhattachrjee and quadrature approximation for large p and q.

incompleteBeta_ Source

Arguments

:: 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.

invIncompleteBeta Source

Arguments

:: Double

p > 0

-> Double

q > 0

-> Double

a ∈ [0,1]

-> Double 

Compute inverse of regularized incomplete beta function. Uses initial approximation from AS109, AS64 and Halley method to solve equation.

Logarithm

log1p :: Double -> Double Source

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.

log2 :: Int -> Int Source

O(log n) Compute the logarithm in base 2 of the given value.

Factorial

factorial :: Int -> Double Source

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 Source

Compute the natural logarithm of the factorial function. Gives 16 decimal digits of precision.

stirlingError :: Double -> Double Source

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 Source

Compute the binomial coefficient n `choose` k. For values of k > 30, this uses an approximation for performance reasons. The approximation is accurate to 12 decimal places in the worst case

Example:

7 `choose` 3 == 35

References