在Java问题中实现概率分布函数

时间:2011-03-12 11:58:34

标签: java math probability

我有一个以概率分布函数形式的函数,如下所示:

formula

虽然我发现一些lib提供函数来获得结果,如上面的公式所做的那样;但我正在学习实施它,所以如果可能的话,我想自己做。

以下是我在实现功能

时可以想到的
public double pdf(double x){
  double mean = mean();
  double variance = variance();
  double base = 1/Math.sqrt(2*Math.PI*variance);
  double pow = -(Math.pow((x-mean), 2)/2*variance);
  return Math.pow(base, pow); 
}

这是实施pdf的正确方法吗?或者我想念哪些部分?

我感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

Robert Sedgewick和他们一样出色:

http://introcs.cs.princeton.edu/22library/Gaussian.java.html

看看他的实施情况。

你也应该了解M. Abramowitz和I. A. Stegun,这是一个很棒的经典之作。它可以从Dover Books获得少量资金。值得拥有。

答案 1 :(得分:1)

您的pdf方法实现了正态分布的概率密度函数,但似乎您希望实现累积正态分布函数(或至少它的变种)。对于正态分布,这非常重要,因为它涉及无限积分。

你可以尝试使用梯形法则等方法进行数值积分,但我怀疑随着你越来越远,这种不准确性开始增强。

如果你想实现累积正态分布函数,那么我建议采用两种方法:

答案 2 :(得分:0)

不确定多少是相关的,但也请查看Apache Commons的数学内容。我发现它非常干净且有用。

org.apache.commons.math.stat.descriptive.DescriptiveStatistics一端用于分析给定的分布。

org.apache.commons.math.distribution.Distribution用于另一端生成分发。

这些应该为您提供API的思路和一些用于实施的代码。您可能想要研究其他开源统计软件包。