在R中创建一个for循环

时间:2016-01-10 13:28:38

标签: r loops for-loop

我有一系列从65到60的数字,每步减少1/12。

seq(65, 60, (-1/12))


[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

对于所有这些步骤,我将逐一计算它们(它们相互依赖,所以我们必须按顺序计算)。

我意识到他们不可能坐下来写出所有内容。我开始这样做,以便能够弄清楚如何创建一个for循环。但是他们进展不顺利,我总是得到错误。

这是我在R中设法做的事情:

mu10<-0.0067
mu12<-0.5
mu20<-1.03*mu10
mu21<-3
r<-log(1+0.01)
b1<-(-1500)
b2<-25000*0.15*12
c10<-45000*10
c20<-45000*10
h<-1/12

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和W是相互关联的。左侧的每个“新”等式减少了h = -1 / 12。 为了澄清我在上面的每一步中所做的事情,我已经写出了我的h。但它们完全相同,只用h打印。

v(65)=h*(b1+mu10*c10+mu12)
w(65)=h*(b2+mu20*c20+mu21)

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


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

所以我需要帮助的是:创建一个for循环,所以我不必坐下来弄清楚每一步,因为它们非常多。我想使用for循环,以便找出v(60)w(60)是什么。

1 个答案:

答案 0 :(得分:1)

这是你需要的吗?

a <- seq(65, 60, (-1/12))
v <- a*0
w <- a*0
mu10<-0.0067
mu12<-0.5
mu20<-1.03*mu10
mu21<-3
r<-log(1+0.01)
b1<-(-1500)
b2<-25000*0.15*12
c10<-45000*10
c20<-45000*10
h<-1/12

v[1] <- h*(b1+mu10*c10+mu12)
w[1] <- h*(b1+mu10*c10+mu12)

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