2016-12-13 77 views

回答

0

不是真的没有。

std::binomial_distribution更适合随机数生成,而不是可以提供累积密度函数的东西。

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

+0

我有因析溢出问题,我使用递归方式: https://en.wikipedia.org/wiki/Binomial_coefficient#Recursive_formula 这是一个好主意吗? –

+0

@Bathsheba:我的意思是你可以使用'std :: binomial_distribution'来完成,如果你想通过随机抽样/大数定律来完成,而不是直接计算出来。我认为这是OP做功课的一部分,可以做到这一点。 –

0

为了实现这种PMF,像Binomial

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

好的技巧是计算它的对数和exponentiate它

对于必须使用伽玛功能的数的阶乘的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); 
}