有一个非常简洁的算法来计算下不完全伽马函数:
https://people.sc.fsu.edu/~jburkardt/f_src/asa147/asa147.html
我们用 C++ 对此进行了编码。这个算法有一点我不明白。在一个地方计算以下表达式:
它被替换为:
明明是一样的,可是为什么会这样呢?计算 lgamma 的 exp 是否比计算 tgamma 函数更有效(两者lgamma
都tgamma
在 C++ 中可用)?
有一个非常简洁的算法来计算下不完全伽马函数:
https://people.sc.fsu.edu/~jburkardt/f_src/asa147/asa147.html
我们用 C++ 对此进行了编码。这个算法有一点我不明白。在一个地方计算以下表达式:
它被替换为:
明明是一样的,可是为什么会这样呢?计算 lgamma 的 exp 是否比计算 tgamma 函数更有效(两者lgamma
都tgamma
在 C++ 中可用)?
计算 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
。
避免溢出的好方法,基本上
您将在这里找到 C++ 的 Gamma 的正确实现:http: //www.boost.org/doc/libs/1_64_0/libs/math/doc/html/math_toolkit/sf_gamma