2

次の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

これで、test-function が次のように定義されましたtest(t)=test2(t,t)。問題は、以下が返されることです

> test2(500)   
[1] NaN    
> test(500)    
[1] 1.35

ここで何が問題なのですか?前もって感謝します。

4

2 に答える 2

2

おそらく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)
于 2012-06-08T08:26:25.450 に答える
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]その間、私は他の答えでその面白いコードで何が起こっているのか少し困惑しています... ??

于 2012-06-08T08:41:23.193 に答える