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.
有人可以解释一下吗?或者对优化的任何建议?
谢谢!
答案 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))