【问题标题】:Double for loop MATLAB双 for 循环 MATLAB
【发布时间】:2017-07-06 10:46:20
【问题描述】:

我需要对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 矩阵。

【问题讨论】:

  • n 是从哪里来的?
  • n 和 T 是 [T,n]=size(residuals)

标签: matlab loops for-loop


【解决方案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 都是相同的!

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

【讨论】:

  • 请编辑您的问题以包含新的代码和信息,例如在 cmets 中不清楚的内容...我们还需要有关 varresidualstheta 的数据/大小的详细信息...
  • 您的ht 全部为零,因为您将每个循环都定义为全零!将ht=zeros(T,n); before 放在循环中,如我上面的示例所示。请参阅我编辑的答案。
猜你喜欢
  • 2015-02-03
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2018-07-23
相关资源
最近更新 更多