2017-07-06 104 views
1

我需要爲n時間序列(n觀測值的T向量)做一個估計過程。我有公式來評估我的變量(使用for循環),但我需要重複這個次數(向量的數量)。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   

所以這個循環計算ht所有系列中的一個的意見,但我需要另一個for循環,可以幫助我使用這個公式對所有的系列產品。


編輯:這是我基於下面的答案進行:

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 

注:此前,ht所有列是一樣的,因爲thetaresiduals是每個系列一樣!

使用您的更新代碼以及此答案中更新後的代碼已得到修復。

+0

請修改您的問題以包含新的代碼和類似於註釋中不清楚的信息......我們還需要詳細說明什麼數據/ ,'residuals','theta' ... – Wolfie

+1

你的'ht'全是零,因爲你定義每個循環都爲零!在循環之前放置'ht = zeros(T,n);'**,如上例所示。看到我編輯的答案。 – Wolfie