我已经定义了以下两个函数
test <- function(t) {
return( (0.5*eta^2/theta)*(1-exp(-2*theta*t)) )
}
test2 <- function(s,t=s) {
return( (0.5*eta^2/theta)*exp(-theta*(s+t))*(exp(2*theta*min(s,t)) - 1) )
}
并放
> theta=1.2
> eta=1.8
> mu=0.2
现在定义了测试函数,以便test(t)=test2(t,t)
。问题是返回以下内容
> test2(500)
[1] NaN
> test(500)
[1] 1.35
这里有什么问题?提前谢谢。
答案 0 :(得分:2)
可能在第二个函数中缺少乘法,这适用于我
test <- function(t) {
return( (0.5*eta^2/theta)*(1-exp(-2*theta*t)) )
}
test2 <- function(s,t=s) {
return (0.5*eta^2/theta)*exp(-theta(s+t))*(exp(2*theta*min(s,t)) - 1)
}
theta=1.2
eta=1.8
mu=0.2
test2(500)
test(500)
答案 1 :(得分:2)
@tomaskrehlik正确识别了原始指数计算中的下溢/溢出问题。为避免此问题,您可以将其重写为:
test3 <- function(s,t=s) {
return((0.5*eta^2/theta)*exp(-theta*(s+t)+2*theta*min(s,t)) -
exp(-theta*(s+t)))
与此同时,我对另一个答案中有趣的return [expression that evaluates to NaN]
代码发生的事情感到有些困惑...... ??