嵌套的for循环不输出内部循环的值

时间:2019-02-19 10:57:00

标签: matlab for-loop matrix nested-loops

我对此嵌套的for循环有疑问:

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向量,其中DeltaEta的每个值{5}计算5次。

我相信问题出在我嵌套循环的方式上。

看似微不足道,但我无法获得所需的输出,任何线索都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您正在将输出分配到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

答案 1 :(得分:0)

要按照要求回答您的问题,您需要在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循环(尤其是双嵌套的for循环)时会陷入困境,则应考虑是否有更好的方法来利用MATLAB强大的矢量化能力。 / p>