我的嵌套循环有问题:
eta = [1e-3:1e-2:9e-1];
HN =5;
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(v) = eta(ii)*6;
end
end
此代码将DeltaEta
的输出作为1x5向量。
但是,我希望结果为90x5向量,其中eta
的每个值计算5次DeltaEta
。
我相信问题在于我嵌套循环的方式。
这似乎很微不足道,但我无法获得所需的输出,任何线索都将不胜感激。
您将输出分配给DeltaEta(v)
,其中v = 1,2,..,HN
。因此,您只分配给
DeltaEta(1), DeltaEta(2), ..., DeltaEta(5)
您可以使用2D矩阵输出解决此问题,也可以在ii
上索引...
eta = [1e-3:1e-2:9e-1];
HN = 5;
DeltaEta = NaN( numel(eta), HN );
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(ii,v) = eta(ii)*6;
end
end
% optional reshape at end to get column vector
DeltaEta = DeltaEta(:);
注意,内部循环内没有更改-DeltaEta
对于v
的所有值都是相同的。这意味着您可以摆脱内部循环
eta = [1e-3:1e-2:9e-1];
HN = 5;
DeltaEta = NaN( numel(eta), HN );
for ii = 1:numel(eta)
DeltaEta( ii, : ) = eta(ii) * 6;
end
现在我们可以看到一种实际删除外循环的方法
eta = [1e-3:1e-2:9e-1];
HN = 5;
DeltaEta = repmat( eta*6, HN, 1 ).';
要按要求回答您的问题,您需要在ii
和v
上索引:
eta = [1e-3:1e-2:9e-1];
HN =5;
for ii = 1:numel(eta)
for v = 1:HN
DeltaEta(ii,v) = eta(ii)*6;
end
end
但是,这通常是一个坏主意 - 如果您使用MATLAB中的for liand(尤其是双重尾声),则应考虑是否有更好的方法使用MATLAB的强矢量化能力。/p>