使用std :: binomial_distribution计算概率

Calculating probability using std::binomial_distribution

本文关键字:计算 概率 distribution binomial std 使用      更新时间:2023-10-16

是否有可能使用std :: binomial_distribution计算在K试验中获得n个成功的概率?如何?

不是真的。

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

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

实现这样的PMF,例如二项式

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);
}