【问题标题】:Gamma function returns unstable value?伽玛函数返回不稳定的值?
【发布时间】:2018-07-22 06:44:26
【问题描述】:

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.

谁能解释一下?或者有什么优化建议?

谢谢!

【问题讨论】:

  • -3 是一个极点,因此当 x 趋向于 -3 时,gamma 函数将是无穷大。请注意 sum(alpha) 不是 -3 只需简单地执行 sum(alpha)==-3 它会给你错误。由于sum(alpha) 在技术上接近-3 但不是-3,identical(sum(alpha),-3)
  • 看来大家现在都需要阅读?gamma帮助页面了。
  • 来自帮助:The gamma function is defined by (Abramowitz and Stegun section 6.1.1, page 255) Γ(x) = integral_0^Inf t^(x-1) exp(-t) dt for all real x except zero and negative integers (when NaN is returned).
  • R -3 不是整数类型。看起来sum(alpha)-3L-0.0000000000000004 附近
  • 谢谢!所以 Gamma 函数是为负数定义的,除了负整数。

标签: r nan gamma-function


【解决方案1】:

Gamma 函数在负整数参数值处“未定义”,因此 R 返回 Not a Number (NaN)。 “奇怪”行为的原因是 R 中数字的十进制表示。如果数字与最接近的整数相差不大,R 在打印期间对其进行四舍五入(实际上,当您键入 alpha 时,R 正在调用 @987654325 @. 请参阅下面的此类行为示例。

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 函数在负整数附近的行为:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多