2014-10-08 2 views
-2

나는 커밋하는 오류를 알고 있지만 어떤 해결책도 찾을 수 없습니다. 몬테카를로 메서드로 시뮬레이션하기 위해 이중 루프를 프로그래밍하고 있습니다. 내가 코드를 실행하려고하면매트릭스에 R이있는 이중 루프

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] 
    } 
} 

는이 오류를 I가 범위 외에있는 값 이해하지

Error in `[<-`(`*tmp*`, , j + 1, value = 0.0102279735166489) : subscript out of bounds 

있습니다.

답변

0

당신은 점차적으로 당신은 당신이하려고하는 방법으로 그렇게 할 수 없습니다 예를

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 루프에서 설정하기 전에 먼저 열이 있어야합니다.