2017-06-23 5 views
1

ここでは一般的にプログラミングに興味がありました。 拡張カルマンフィルタをバックトラックするためのコードは、特定のパラメータのためのMSEを提供しています。問題は、コードを実行すると、最後に、マトリックスはすべての代わりに最後の値セットしか格納しないということです。 PC上でコードを実行する必要がある場合は、ファイル名を手元のデータセットに置き換えてください。それでも動作するはずです。ネストされたforループの行列に値を格納するR

start.time <- Sys.time() 

library(invgamma) 
w = read.csv("Reddy.csv") 
q = ts(w[2]) 
num = length(q) 

f = function(x){ 
    f1 = sqrt(x) 
    return(f1) 
} 
h = function(x){ 
    h1 = x**3 
    return(h1) 
} 


ae1 = seq(24,26) 
ae2 = seq(24,26) 

be1 = seq(1,3) 
be2 = seq(1,3) 

a = seq(1,3) 
b = seq(1,3) 

MSE = matrix(nrow = length(ae1)*length(ae2)*length(be1)*length(be2)*length(a)*length(b), ncol =7) 

for (i in ae1){ 
    for (j in ae2){ 
    for (k in be1){ 
     for (l in be2){ 
     for (m in a){ 
      for (n in b){ 
      d = rep(0,num) 
      for(o in 2:num){ 
       xt = rep(0,num) 
       yt = rep(0,num) 
       fx = rep(0,num) 
       hx = rep(0,num) 

       e = rinvgamma(num,i,k) 
       g = rinvgamma(num,j,l) 
       fx[o] = f(xt[o-1]) 
       xt[o] = m*fx[o] + e[o-1] 
       hx[o] = h(xt[o]) 
       yt[o]= n*hx[o] +g[o] 
       d[o] = (yt[o] - q[o])**2 
      } 
      MSE[,1] = mean(d) 
      MSE[,2] = i 
      MSE[,3] = j 
      MSE[,4] = k 
      MSE[,5] = l 
      MSE[,6] = m 
      MSE[,7] = n 
      t = rbind(mean(d),i,j,k,l,m,n) 
      print(t) 
      } 
     } 
     } 
    } 
    } 
} 

end.time <- Sys.time() 
time.taken <- end.time - start.time 
time.taken 

m = which.min(MSE[1]) 

理想的には、私のマトリックスはMSEのように最初の行を有することになる、7列に2は、それぞれ、対応するI、J、K、L、M、Nの値を持つことになり、各反復は、にログインなるだろう新しい行エントリ。ここでは、毎回行列全体を書き換えるようです。

答えて

0

あなたが使用している場合

MSE [2] = I

あなたが実際に列全体を呼び出して、そのためのコードは、その列を書き換えています。 私は、役立つカウンターでコードを更新しました。

start.time <- Sys.time() 

library(invgamma) 
w = read.csv("Reddy.csv") 
q = ts(w[2]) 
num = length(q) 

f = function(x){ 
    f1 = sqrt(x) 
    return(f1) 
} 
h = function(x){ 
    h1 = x**3 
    return(h1) 
} 


ae1 = seq(24,26) 
ae2 = seq(24,26) 

be1 = seq(1,3) 
be2 = seq(1,3) 

a = seq(1,3) 
b = seq(1,3) 

count = 0 

MSE = matrix(nrow = length(ae1)*length(ae2)*length(be1)*length(be2)*length(a)*length(b), ncol =7) 

for (i in ae1){ 
    for (j in ae2){ 
    for (k in be1){ 
     for (l in be2){ 
     for (m in a){ 
      for (n in b){ 
      d = rep(0,num) 
      for(o in 2:num){ 
       xt = rep(0,num) 
       yt = rep(0,num) 
       fx = rep(0,num) 
       hx = rep(0,num) 

       e = rinvgamma(num,i,k) 
       g = rinvgamma(num,j,l) 
       fx[o] = f(xt[o-1]) 
       xt[o] = m*fx[o] + e[o-1] 
       hx[o] = h(xt[o]) 
       yt[o]= n*hx[o] +g[o] 
       d[o] = (yt[o] - q[o])**2 
      } 
      count <- count + 1 
      MSE[count,1] = mean(d) 
      MSE[count,2] = i 
      MSE[count,3] = j 
      MSE[count,4] = k 
      MSE[count,5] = l 
      MSE[count,6] = m 
      MSE[count,7] = n 
      t = rbind(mean(d),i,j,k,l,m,n) 
      print(t) 
      } 
     } 
     } 
    } 
    } 
} 

end.time <- Sys.time() 
time.taken <- end.time - start.time 
time.taken 

m = which.min(MSE[1]) 
関連する問題