使用std :: binomial_distribution计算概率

时间:2016-12-13 14:20:14

标签: c++ c++11 statistics probability

是否有可能使用std :: binomial_distribution计算在k次试验中获得n次成功的概率?怎么样?

2 个答案:

答案 0 :(得分:0)

不是真的没有。

std::binomial_distribution更多是用于生成随机数的适配器,而不是可以提供累积密度函数的适配器。

您可以自己在几行代码中实现累积密度函数,或者搜索一个好的数学库。 (使用Pascal的三角形方法而不是计算大的阶乘数)。

答案 1 :(得分:0)

实施此类PMF,例如Binomial

PMF(p, n,k) = n!/(k!*(n-k)!) p^k (1-p)^(n-k)

好的技巧是计算它的对数并对其进行取幂

对于log阶乘,你必须使用伽玛函数的日志

沿线(未经测试!)

double logChoose(int n, int k) {
    return std::lgamma(double(n+1)) - std::lgamma(double(k+1)) - std::lgamma(double(n-k+1));
}

double PMFBinomial(double p, int n, int k) {
    double lgr = logChoose(n, k) + double(k)*std::log(p) + double(n-k)*std::log(1-p);
    return std::exp(lgr);
}