Statistics 快速不完全伽马函数 < >在C++中,什么是快速计算,或者至少是一个“好”近似? 背景 我最终需要计算的是什么

Statistics 快速不完全伽马函数 < >在C++中,什么是快速计算,或者至少是一个“好”近似? 背景 我最终需要计算的是什么,statistics,numerical,gamma-function,Statistics,Numerical,Gamma Function,给定一系列伯努利轨迹N,成功概率p,我最终试图计算获得最多k次成功的概率,作为k的函数。累积二项分布F(k,N,p)给出了这个概率 对速度的需要 我需要计算每秒几十万的累积概率。对于大N,通过直接求和计算累积二项分布的计算量非常大。使用不完全贝塔函数要好得多,但计算量仍然相当大 可利用的约束 我希望应用程序域中的以下约束有助于加快计算速度: p50 泊松近似 在Excel中进行了一些实验之后,我了解到在上述条件下泊松近似是非常好的。即,在感兴趣的条件下,k处的B(N,p)与k处的poi(Np

给定一系列伯努利轨迹N,成功概率p,我最终试图计算获得最多k次成功的概率,作为k的函数。累积二项分布F(k,N,p)给出了这个概率

对速度的需要 我需要计算每秒几十万的累积概率。对于大N,通过直接求和计算累积二项分布的计算量非常大。使用不完全贝塔函数要好得多,但计算量仍然相当大

可利用的约束 我希望应用程序域中的以下约束有助于加快计算速度:

  • p<0.01(分布总是非常偏斜)
  • N>50
泊松近似 在Excel中进行了一些实验之后,我了解到在上述条件下泊松近似是非常好的。即,在感兴趣的条件下,k处的B(N,p)与k处的poi(Np)几乎相同。这意味着我只需要一个2个变量的函数,而不是3个

我知道累积泊松分布可以用不完全伽马函数来计算,根据cephes库中的源代码判断,它似乎比没有泊松近似的原始不完全贝塔函数要简单得多。但它仍然不是很简单,是一个迭代的数值计算。现在我在寻找一种快速的方法来计算不完全伽马函数。我想知道是否有一个封闭形式的表达式可以很好地近似它

所需精度 20%的相对误差在积分/概率上是可以接受的(从两个方向的每k考虑)


我曾考虑过直接使用插值查找表来查找泊松CDF,但均匀分布的域点可能不太理想,并且域也必须限制为任意矩形。理想情况下,我希望找到一个包含大量调整参数的分析函数。

我没有使用伽马函数,而是将泊松变量转换为标准正态变量:

float poisson_z(float x, float mu){
    static const float twoThirds = 2.0f/3.0f;
    float w = sqrt((x+0.5f)/mu) - 1.0f;
    float coeff = w>=0.0f ? 0.085f : 0.15f;
    return (x-mu+twoThirds)/sqrtf(mu*(1.0f+w*(0.68f+w*coeff)));
}

标准正态分布并不缺乏近似值。

我对不完全伽马函数一无所知,但你知道吗?我不确定最终/接近投票是关于什么的:在我看来,这似乎是一个关于软件算法的措辞非常明确的问题,这肯定是关于软件算法的。也许这个问题在?凯西,谢谢,我会的,但是如果它像Cephes库的实现一样,它仍然太“缓慢和准确”。@Casey一个早期的编辑因为没有一个明确提出的问题而收到了一些反对票。@πάνταῥεῖ “能给我一个codez plz吗”--别说了。OP没有做过任何类似的事情,你影射它是一种侮辱。我已将你的评论标记为非建设性的。