Gamma 函数 returns 值不稳定?
Gamma function returns unstable value?
Gamma 函数不应将任何负值作为参数。查看下面发生奇怪事情的代码。这是R的问题吗?
我正在使用函数 optim
来优化一些函数,其中包含:
gamma(sum(alpha))
相对于alpha
。 R returns 否定 alpha
.
> gamma(sum(alpha))
[1] 3.753+14
>sum(alpha)
[1] -3
gamma(-3)
[1] NaN
Warning message:
In gamma(-3) NaN's produced.
有人可以解释一下吗?或者有什么优化建议?
谢谢!
Gamma 函数是 "not defined" 负整数参数值,因此 R returns 不是数字 (NaN
)。 "strange" 行为的原因是 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 函数不应将任何负值作为参数。查看下面发生奇怪事情的代码。这是R的问题吗?
我正在使用函数 optim
来优化一些函数,其中包含:
gamma(sum(alpha))
相对于alpha
。 R returns 否定 alpha
.
> gamma(sum(alpha))
[1] 3.753+14
>sum(alpha)
[1] -3
gamma(-3)
[1] NaN
Warning message:
In gamma(-3) NaN's produced.
有人可以解释一下吗?或者有什么优化建议?
谢谢!
Gamma 函数是 "not defined" 负整数参数值,因此 R returns 不是数字 (NaN
)。 "strange" 行为的原因是 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))
请看下图,它解释了伽马函数在负整数附近的行为: