正态概率密度函数 - Haskell中的GSL等价物

时间:2015-06-20 21:16:07

标签: haskell statistics gsl

我试图找到从正态分布中绘制的最佳方法。我希望能够在Haskell中使用正态概率密度函数(及其累积)。

简单地说,我想在不使用GSL绑定的情况下使用this page上的函数...我正在努力寻找合适的包。你会说哪一个最好?

谢谢你,祝你有个美好的一天!

2 个答案:

答案 0 :(得分:2)

以下是使用random-fu的示例:

import Data.Random    -- for randomness
import Text.Printf    -- for printf
import Data.Foldable  -- for the for_ loop

-- pdf and cdf are basically “Distribution -> Double -> Double”

main = do
  -- defining normal distribution with mean = 10 and variation = 2
  let normal = Normal (10 :: Double) 2
  -- CDF
  for_ [0..10] $ \i ->
    printf "cdf(%2d): %.4f\n" i (cdf normal (fromInteger i))
  -- PDF
  putStrLn "---"
  for_ [0..10] $ \i ->
    printf "pdf(%2d): %.4f\n" i (pdf normal (fromInteger i))

运行它,您将看到以下输出:

cdf( 0): 0.0000
cdf( 1): 0.0000
cdf( 2): 0.0000
cdf( 3): 0.0002
cdf( 4): 0.0013
cdf( 5): 0.0062
cdf( 6): 0.0228
cdf( 7): 0.0668
cdf( 8): 0.1587
cdf( 9): 0.3085
cdf(10): 0.5000
---
pdf( 0): 0.0000
pdf( 1): 0.0000
pdf( 2): 0.0001
pdf( 3): 0.0004
pdf( 4): 0.0022
pdf( 5): 0.0088
pdf( 6): 0.0270
pdf( 7): 0.0648
pdf( 8): 0.1210
pdf( 9): 0.1760
pdf(10): 0.1995

这里有两个要点:

  • Normal是定义分布的构造函数。还有其他发行版,例如Uniform等。发行版具有不同的类型,但它们都属于Distribution类。

  • pdfcdf是类方法,可以在许多发行版上运行(可能不是全部,但很多)。第一个参数是分布,第二个是评估PDF / CDF的点。

答案 1 :(得分:1)

我认为statistics包可以做你想要的。看一下here你可以用分布做什么(pdf等)

ContGen实例应该从分布中获取随机数。

正态分布为here