使用matlab / octave使用“For loop”创建数字

时间:2013-04-08 18:23:50

标签: matlab for-loop octave numerical-methods

我正在尝试使用matlab / octave中的For循环来循环数字模式 我正在寻找的模式是 40,80,160,320,280,200 ,然后 1添加到每个,所以模式将如下所示:

40,80,160,320,280,200,41,81,161,321,281,201,42,82,162,322,282,202

我尝试使用下面的for循环

clear all
numL_tmp=[40;80;160;320;280;200]

numL=[numL_tmp];
for ii=1:length(numL_tmp)
    for jj=1:4
        numL=[numL;numL_tmp(ii,1)+jj]
    end
end

但是我得到了

40,80,160,320,280,200,41,42,81,82,161,162,321,322,281,282,201,202

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

对于所述问题,嵌套循环是不必要的。您可以简单地执行以下操作:

clear all;
numL_tmp=[40;80;160;320;280;200];

numL = numL_tmp;
for ii=1:2
    numL = [numL;numL_tmp+ii];
end

numL

这会产生:

numL =

    40
    80
   160
   320
   280
   200
    41
    81
   161
   321
   281
   201
    42
    82
   162
   322
   282
   202

这是有效的,因为MATLAB将代码段numL_tmp+ii识别为等同于numL_tmp + ii*ones(size(numL_tmp))的内容。

答案 1 :(得分:3)

你可以完全避免循环:

N = 3;
numL = kron(ones(N,1),numL_tmp) + kron((0:N-1)',ones(numel(numL_tmp),1));

答案 2 :(得分:2)

有更简单的方法可以做到这一点,但代码的根本问题在于内部和外部循环的顺序错误。看看如果按原样保留代码会发生什么,但只是简单地交换两个循环的顺序:

...
numL=[numL_tmp];
for jj=1:4
    for ii=1:length(numL_tmp)
       numL=[numL;numL_tmp(ii,1)+jj]
   end
end