双循环MATLAB

时间:2017-07-06 10:46:21

标签: matlab loops for-loop

我需要对n时间序列(n观察的T向量进行估算。我有公式来评估我的变量(使用for循环),但我需要重复此n次(向量的数量)。

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矩阵。

1 个答案:

答案 0 :(得分: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对于每个系列都相同!

使用您更新的代码以及此答案中的更新代码,已修复。