Statistics 快速不完全伽马函数 < >在C++中,什么是快速计算,或者至少是一个“好”近似? 背景 我最终需要计算的是什么
给定一系列伯努利轨迹N,成功概率p,我最终试图计算获得最多k次成功的概率,作为k的函数。累积二项分布F(k,N,p)给出了这个概率 对速度的需要 我需要计算每秒几十万的累积概率。对于大N,通过直接求和计算累积二项分布的计算量非常大。使用不完全贝塔函数要好得多,但计算量仍然相当大 可利用的约束 我希望应用程序域中的以下约束有助于加快计算速度: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
- p<0.01(分布总是非常偏斜)
- N>50
我曾考虑过直接使用插值查找表来查找泊松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没有做过任何类似的事情,你影射它是一种侮辱。我已将你的评论标记为非建设性的。