Difference between revisions of "Gamma and Beta function"
From HaskellWiki
Line 18: | Line 18: | ||
beta z w = exp ((gammaln z) + (gammaln w) - (gammaln (z+w)) | beta z w = exp ((gammaln z) + (gammaln w) - (gammaln (z+w)) | ||
</haskell> | </haskell> | ||
+ | |||
+ | [[Category:Code]] | ||
+ | [[Category:Mathematics]] |
Revision as of 02:14, 23 August 2007
The Gamma and Beta function as described in 'Numerical Recipes in C++', the approximation is taken from [Lanczos, C. 1964 SIAM Journal on Numerical Analysis, ser. B, vol. 1, pp. 86-96]
cof :: [Double]
cof = [76.18009172947146,-86.50532032941677,24.01409824083091,-1.231739572450155,0.01208650973866179,-0.00005395239384953]
ser :: Double
ser = 1.000000000190015
gammaln :: Double -> Double
gammaln xx = let tmp' = (xx+5.5) - (xx+0.5)*log(xx+5.5)
ser' = foldl (+) ser $ map (\(y,c) -> c/(xx+y)) $ zip [1..] cof
in -tmp' + log(2.5066282746310005 * ser' / xx) where
the beta function relates to the gamma function by , so we can compute the Beta function using gammaln like this:
beta z w = exp ((gammaln z) + (gammaln w) - (gammaln (z+w))