我正在尝试最大化一个函数,在我的R代码中,我使用以下函数来确保,我得到的值为A,介于-1和1之间:
A=(exp(x)-1)/(exp(x)+1)
问题在于,当我例如在x = 3000或某个其他极值处评估函数时,它返回NaN而不是-1,它应该是。
有没有办法写这个以确保,这不会发生?
感谢。
答案 0 :(得分:6)
你可以做一点数学
这样,
A = 1 - 2/(exp(x)+1)
将完成这项工作。
当x
很大时,exp(x)
等于Inf
,2/(exp(x)+1)
为0。
这是R的一个非常方便的功能,但实现成本太高了。有时,这些都归咎于R的速度慢。
答案 1 :(得分:4)
logit
和probit
函数将返回0
和1
之间的值。您可以考虑使用hyperbolic tangent,
(1 - exp(-2*x)) / (1 + exp(-2*x))
将返回-1
和1
之间的值。在您的情况下,当INF
超过700时,您将除以x
,从而返回NAN
。