高效的递归向量

时间:2014-06-13 22:11:22

标签: r

我正在尝试加速蒙特卡洛功能。我想收紧这个,但我无法弄清楚如何。有什么想法吗?

initial=1400
ppinitial=0.07
assets2020=numeric(41)    
actual=round(seq(from=initial, to=0, by=(-initial/40)),0)*100000
assets2020[1]=1000000*1.02-actual[1]*ppinitial
for (i in 2:length(actual)){
  assets2020[i]=assets2020[i-1]*1.02-actual[i]*ppinitial}

1 个答案:

答案 0 :(得分:1)

我认为你可以在这里使用filter

assets2020 <- -ppinitial * filter(actual,1.02,'rec',init=-1000000/ppinitial)

演示:

y[i]=y[i-1]*1.02-x[i]*pp  ## use y ,x notation more handy than long variables

可以改写:

Y[i]= x[i]+f[1]*Y[i-1]  ## recursive filter expression

Y = -y/ppf[1]=1.02

的位置

Y[1]=x[1]+f[1]*1000000所以init等于-1000000/ppinitial

PS:一些例子:

ppinitial =100
filter_asset <- -ppinitial * filter(actual,1.02,'rec',init=-1000000/ppinitial)
sum(abs(filter_asset-assets2020))

[1] 0.001937866