第一关,一切都很好。 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
答案 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)
将包含循环每次迭代的结果。 (如果您需要不同的东西,请告诉我。)
请注意,使用i
和j
作为变量通常不是一个好主意。请参阅Using i and j as variables in Matlab。