0

有一个非常简洁的算法来计算下不完全伽马函数:

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

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

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

它被替换为:

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

明明是一样的,可是为什么会这样呢?计算 lgamma 的 exp 是否比计算 tgamma 函数更有效(两者lgammatgamma在 C++ 中可用)?

4

2 回答 2

2

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

计算 lgamma 效率更高,因为它基本上是 n*log(n) 行为。所以通常你有很好的近似 id 你试图计算 lgamma(x)/x 函数。

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

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

于 2017-09-14T18:21:21.783 回答
1

您将在这里找到 C++ 的 Gamma 的正确实现:http: //www.boost.org/doc/libs/1_64_0/libs/math/doc/html/math_toolkit/sf_gamma

于 2017-09-14T17:42:21.717 回答