我知道我犯的错误,但我找不到任何解决方案。我正在使用蒙特卡罗方法编程双循环来进行模拟。
set.seed(-1256,normal.kind="Box-Muller")
A <- matrix(Nsimul,85)
for (k in 1:Nsimul) {
r=c()
r[1]=r0_CIR
S=c()
S[1]=I0
A[,1]=r0_CIR
for(j in 1:NumPassi){
epsilon=rnorm(2,0,1)
r[j+1]= r[j]+alphaStar*(gammaStar-r[j])*Deltat + rho*sqrt(r[j])*epsilon[1]*sqrt(Deltat)
if (r[j+1]<0) r[j+1]=abs(r[j+1])
epsilon_S=epsilon[1]+sqrt(1-corr^2)*epsilon[2]
S[j+1]=S[j]*exp((r[j]-sigma^2/2-div)*Deltat+sigma*epsilon_S*sqrt(Deltat))
A[k,j+1]=r[j+1]
}
}
当我尝试运行代码时出现此错误
Error in `[<-`(`*tmp*`, , j + 1, value = 0.0102279735166489) : subscript out of bounds
我不明白哪个值超出范围。
答案 0 :(得分:0)
虽然你可以通过调用不存在的indeces(不是一个很好的练习,但我离题)逐步增长向量,例如
S<-c()
S[1]<-1
S
#[1] 1
在您尝试使用示例中的矩阵A的方法中,您可能不会这样做。
以下是我制作的示例矩阵
A<-matrix(1:10, nrow=5)
# [,1] [,2]
#[1,] 1 6
#[2,] 2 7
#[3,] 3 8
#[4,] 4 9
#[5,] 5 10
如果我尝试
A[1,3]<-1
我得到了
#Error in A[1, 3] <- 2 : subscript out of bounds
虽然你的问题中有许多未定义的东西,例如A,Numsimul,Numpassi,所以我无法确切知道发生了什么,但第二个for循环的最后一行很可能是问题。如果j的值变得大于矩阵A中的列数,那么您将抛出一个错误。
在开始在第二个for循环
中设置列之前,必须先确保该列存在