2017-07-06 19 views
1

n時系列(nベクトル、Tの観測値)の推定手順を実行する必要があります。変数を評価する式がforループを使用していますが、これを(ベクトルの数)n回繰り返す必要があります。Double for loop MATLAB

h0 = var(residuals); 
ht=zeros(T,n); ht(T,1)=h0; 
for i=2:T 
    ht(i) = theta(1) + theta(2)*residuals(i-1)^2 + theta(3)*ht(i-1); 
end   

だから、このループはシリーズ1の観測値のすべてについてhtを計算しますが、私は私がシリーズのすべてのために、この式を使用することができますループのために別のものを必要とします。


編集:これは、私は以下の回答に基づいて行われてきたものである:

function ht = VarEQ(theta,residuals)  
    [T,n] = size(residuals) 
    for k=1:n 
     h0 = var(residuals(:,k)); 
     ht=zeros(T,n); ht(1,k)=h0;  
     for i=2:T 
      ht(i,k) = theta(1,k) + theta(2,k)*residuals(i-1,k)^2 + theta(3,k)*ht(i-1,k); 
     end 
    end 
end 

現在の問題: 今htがゼロのすべての列と正しい値のちょうど最後の列であります。


変数

var分散のの1xN行ベクトルです。 kを使用して、私は各残差に対してスカラーだけを必要とします。

thetaは、パラメータの3xn行列です。

residualsはTxnマトリックスです。

+0

「n」はどこに入りますか? – Adriaan

+0

nとTは[T、n] =サイズ(残差) –

答えて

1

これは、あなたがすでに設定されているものを与え、単純なようだ:

function ht = VarEQ(theta,residuals)  
    [T,n] = size(residuals) 
    ht=zeros(T,n); % Initialise matrix OUTSIDE loop so it isn't over-written! 
    for k=1:n  % additional loop for series 1 to n 
     ht(1,k) = var(residuals(:,k));;  
     for i = 2:T 
      % Ensure you are referencing the kth series 
      ht(i,k) = theta(1,k) + theta(2,k)*residuals(i-1,k)^2 + theta(3,k)*ht(i-1,k); 
     end 
    end 
end 

注:thetaresidualsは、各シリーズで同じだったので以前、htのすべての列は、同じでした!

このコードでは、更新されたコードとこのコードの更新コードが修正されました。

+0

です。あなたの質問を編集して、新しいコードとコメントの中に不明な情報を入れてください...また、 'var' 、 'residuals'、' theta' ... – Wolfie

+1

あなたの 'ht'はすべてのゼロとして定義されているので、すべてゼロです!上記の例のように、ループの前に 'ht = 0(T、n);' ** **を入れてください。私の編集された答えを見てください。 – Wolfie