我有一个以概率分布函数形式的函数,如下所示:
虽然我发现一些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的正确方法吗?或者我想念哪些部分?
我感谢任何帮助。
答案 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的思路和一些用于实施的代码。您可能想要研究其他开源统计软件包。