为什么这个for循环不会移动到下一个变量?

时间:2015-06-30 14:25:46

标签: matlab nested-loops

第一关,一切都很好。 i = 49,j = 1,k = 1112.在第二遍,i和j移动到下一个变量(50和18),但是k保持在1112.它在第三次和第四次传递时做同样的事情。结果是consolFut1不断被覆盖。有人可以指出我的错误吗?我最衷心的感谢阅读。

for i = 49:52
    expiry=find(vifDate==expDate(i));
    for j = [1; 18; 43; 63]
        vifCls1 = vifCls(j:expiry);
        for k = [1112; 1129; 1154; 1174]
            consolFut1 = consolFut(k:expDateIdx(i),i);
            arbVIF=vifCls1-consolFut1;
        end
    end
end

1 个答案:

答案 0 :(得分:2)

所以看起来你真正想做的是计算值4次,每次都使用矢量i, j and k中的相应元素:

i = [  49   50   51   52]
j = [   1   18   43   63]
k = [1112 1129 1154 1174]

您需要做的是创建一个新变量,作为所有这三个向量的索引。我称之为x

for x = 1:length(i)    %// == length(j) == length(k)
   %// add index (x) to all i, j and k
   expiry=find(vifDate==expDate(i(x)));
   vifCls1 = vifCls(j(x):expiry);
   consolFut1 = consolFut(k(x):expDateIdx(i(x)),i(x));
   %// Save results in arbVIF...
   %// use cell array since results will be of varying length
   arbVIF{x}=vifCls1-consolFut1;
end

我已经假设arbVIF是您想要摆脱所有这些的值,并且您不希望每次都通过循环覆盖它。所以我也添加了索引(x),以便在循环结束时arbVIF(1:4)将包含循环每次迭代的结果。 (如果您需要不同的东西,请告诉我。)

请注意,使用ij作为变量通常不是一个好主意。请参阅Using i and j as variables in Matlab