有一种非常简洁的算法用于计算较低的不完全伽马函数:
https://people.sc.fsu.edu/~jburkardt/f_src/asa147/asa147.html
我们用C ++编写了这个代码。在这个算法中有一点我不明白。在一个地方计算以下表达式:
它被替换为:
显然这是一样的,但为什么这样做呢?计算lgamma的exp是否比计算tgamma函数更有效(C ++中都有lgamma
和tgamma
)?
答案 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
。
避免溢出的好方法,基本上是