Gamma函数返回不稳定值?

时间:2018-02-12 06:28:13

标签: r nan gamma-function

Gamma函数不应将任何负值作为参数。看看下面的代码,奇怪的事情发生了。这是R的一些问题吗?

我使用函数optim来优化包含以下内容的函数:

gamma(sum(alpha))

关于alpha。 R返回负值alpha

> gamma(sum(alpha))
[1] 3.753+14
>sum(alpha)
[1] -3
gamma(-3)
[1] NaN
Warning message:
In gamma(-3) NaN's produced.

有人可以解释一下吗?或者对优化的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:2)

伽马函数在负整数参数值处“未定义”,因此R返回非数字(NaN)。 “奇怪”行为的原因是R中数字的十进制表示。如果数字与最接近的整数差别不大,R在打印过程中将其四舍五入(实际上,当您键入alpha时,R会要求print(alpha)。请在下面查看这种行为的示例。

gamma(-3)
# [1] NaN
# Warning message:
#  In gamma(-3) : NaNs produced
x <- -c(1, 2, 3) / 2 - 1e-15
x
# [1] -0.5 -1.0 -1.5
sum(x)
# [1] -3
gamma(sum(x))
# [1] 5.361428e+13
curve(gamma, xlim = c(-3.5, -2.5)) 

请参见下面的图形,该图形说明负整数附近的伽马函数的行为: enter image description here