嵌套的循环未输出内部循环的值



我的嵌套循环有问题:

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 ).';

要按要求回答您的问题,您需要在iiv上索引:

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>

最新更新