不完整的伽玛函数算法

时间:2017-09-14 17:17:09

标签: c++ gamma-function

有一种非常简洁的算法用于计算较低的不完全伽马函数:

https://people.sc.fsu.edu/~jburkardt/f_src/asa147/asa147.html

我们用C ++编写了这个代码。在这个算法中有一点我不明白。在一个地方计算以下表达式:

\frac{\gamma(p,x)}{\Gamma(p)}

它被替换为:

x^p e^{-x}\sum^\infty_{k=0}\frac{x^k}{\Gamma(k+p+1)},

显然这是一样的,但为什么这样做呢?计算lgamma的exp是否比计算tgamma函数更有效(C ++中都有lgammatgamma)?

2 个答案:

答案 0 :(得分:1)

您可以在此处找到适用于c ++的Gamma的正确实现: http://www.boost.org/doc/libs/1_64_0/libs/math/doc/html/math_toolkit/sf_gamma

答案 1 :(得分:1)

  

lgamma的计算exp是否比计算tgamma函数更有效(lgamma和tgamma都可以在C ++中使用)?

计算lgamma更有效,因为它基本上是n * log(n)行为。 所以通常你有一个很好的近似值,你正在尝试计算 lgamma(x)/ x函数。

另外,请记住,lgamma经常被使用,因为它是表达式的一部分,可以计算tgamma,而增长速度与阶乘一样快,而不是。{1}}。因此,将整个表达式f(x)计算为exp(log(f(x)))是安全的,如果f(x)的乘积为tgamma,则log(f(x))将具有总结/减去lgamma

避免溢出的好方法,基本上是