2

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.

有人可以解释一下吗?或者有什么优化建议?

谢谢!

4

1 回答 1

2

Gamma 函数在负整数参数值处“未定义”,因此 R 返回 Not a Number ( 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)) 

请看下图,它解释了 gamma 函数在负整数附近的行为: 在此处输入图像描述

于 2018-08-28T16:56:49.750 回答