【问题标题】:time discretization in for-loop in RR中for循环中的时间离散化
【发布时间】:2016-01-12 13:45:32
【问题描述】:

由于时间离散化,我有一个要在三个不同的局中计算的函数,方法是按时间向后计算。时间步长用 h 表示。 h 可以是 h=1/12、h=1/100 和 h=1000 。函数的三个值应该是相似的,因为我们在相同的范围内计算它们只是用不同的时间离散化。如果我们假设 h=1/12,那么我将计算 65:60 范围内所有序列的函数。

h<-1/12
a <- seq(65, 60, (-h)) 

[1] 65.00000 64.91667 64.83333 64.75000 64.66667 64.58333 64.50000 64.41667 64.33333 64.25000 64.16667
[12] 64.08333 64.00000 63.91667 63.83333 63.75000 63.66667 63.58333 63.50000 63.41667 63.33333 63.25000
[23] 63.16667 63.08333 63.00000 62.91667 62.83333 62.75000 62.66667 62.58333 62.50000 62.41667 62.33333
[34] 62.25000 62.16667 62.08333 62.00000 61.91667 61.83333 61.75000 61.66667 61.58333 61.50000 61.41667
[45] 61.33333 61.25000 61.16667 61.08333 61.00000 60.91667 60.83333 60.75000 60.66667 60.58333 60.50000
[56] 60.41667 60.33333 60.25000 60.16667 60.08333 60.00000

给出这些值:

mu10<-function(t){return(alfa+beta*exp(gamma*t))} 
#mu20=1.03*mu10 #(i write this one in the for-loop)
mu12<-0.5
mu21<-3
r<-log(1+0.01)
b1<-(-1500)
b2<-25000*0.15*12
c10<-45000*10
c20<-45000*10
gamma<-0.044
alpha<-(-0.0073)
beta<-0.0009

我想做的:创建一个计算这个的for循环:

v(65)=h*(b1+mu10*c10+mu12)

w(65)=h*(b2+mu20*c20+mu21)

v(64.91667)=v(65)+h*(-r * v(65)+b1+mu10 * (c10-v(65)) +mu12*(w(65)-v(65)))

w(64.91667)=w(65)+h*(-r * w(65)+b2+mu20 * (c20-w(65)) +mu21*(v(65)-w(65)))

v(64.83333)=v(64.91667)+h*(-r* v(64.91667)+b1+mu10*(c10-v(64.91667))+mu12*(w(64.91667) )-v(64.91667)))

w(64.83333)=w(64.91667)+h*(-r* w(64.91667)+b1+mu10*(c10-w(64.91667))+mu12*(v(64.91667) )-w(64.91667)))

。 . . . .

v(60)=....

w(60)=....

如您所见,方程相互依赖。上一步的方程取决于我们计算的那个。

我很想知道 v(60) 和 w(60) 是我们使用时间离散化的时候。

我测试过的:

h<-1/12
a <- seq(65, 60, (-h)) 
v <- a*0
w <- a*0
mu10<-function(t){return(alfa+beta*exp(gamma*t))} 
#mu20=1.03*mu10 #(i write this one in the for-loop)
mu12<-0.5
mu21<-3
r<-log(1+0.01)
b1<-(-1500)
b2<-25000*0.15*12
c10<-45000*10
c20<-45000*10
gamma<-0.044
alpha<-(-0.0073)
beta<-0.0009

for (t in 2:length(a)){
  v[1] <- h*(b1+mu10(a[t])*c10)
  w[1] <- h*(b2+mu10(a[t])*1.03*c20)
  v[t] <- v[t-1]+h*(-r*v[t-1]+b1+mu10(a[t])*(c10-v[t-1])+mu12*(w[t-1]-v[t-1]))
  w[t] <- w[t-1]+h*(-r*w[t-1]+b2+mu10(a[t])*1.03*(c20-w[t-1])+mu21*(v[t-1]-w[t-1]))
}
v[60]
w[60]

问题是:当我将 h 更改为 h=1/100 och h=1000(不同的时间离散化长度)时,我得到的 v[60] 和 w[60] 的值完全不同改变 h。 我认为它们应该是相似的。因为我们停下来想知道当 h 为 1/12、1/100 或 1/1000 时 t = 60 时的函数值 代码中有问题,因为它是“相同”的函数,而 h 只是我们如何分割我们计算的间隔的实际时间离散化。代码提示?

当 h=1/12

> v[60]
[1] 37606.36
> w[60]
[1] 50852.52

当 h=1/100

> v[60]
[1] 3612.329
> w[60]
[1] 15315.34

当 h=1000

> v[60]
[1] 175.1585
> w[60]
[1] 2700.449

【问题讨论】:

    标签: r function for-loop


    【解决方案1】:

    您读出了第 60 次迭代步骤。如果您使用数字 x 对向量进行子集化,则会收到此向量的 xth 元素。您对时间 = 60 的最后一个迭代步骤感兴趣。您可以使用 a==60 进行子集化,或者由于您只对最后一个元素感兴趣,因此只需使用 length(a)

    这会导致:

    h=1/12

    v[length(a)]
    38184.65
    w[length(a)]
    51430.8
    

    h = 1/100

    v[length(a)]
    37607.17
    w[length(a)]
    50853.34
    

    h = 1/1000

    v[length(a)]
    37536.09
    w[length(a)]
    50782.26
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      相关资源
      最近更新 更多