Matlab中的“for”循环如何在每次迭代时更改其控制变量?

时间:2013-04-25 04:35:42

标签: matlab for-loop

>> a = [1 1 2 3 5 8 13 21 13 37];
>> d = [1 2];
>> w = [0 0 0];
  for e = d
      g = 0;
      for f = a
          if mod (f, 2) == 0
              g = [g f];
          end
      end
w = [w;g];
end
>> w

W的输出是矩阵

0     0     0
0     2     8
0     2     8

我的问题是关于for循环。 Matlab for-loops是否取值,而不是逻辑条件?例如,当查看'for f = a'时f是否取得数组A的值,然后for循环通过其列迭代F?

感谢。

2 个答案:

答案 0 :(得分:3)

FOR循环有一个变量,每个循环都通过循环,迭代器变量接受数组中的下一个值。迭代器变量采用列的值,一次一个。 foor循环中赋值语句的右侧不必是数字数组 - 例如,它可以是字符串的单元格数组,也可以是结构等。

换句话说,当你有

for f=a, ....., end

这相当于写作

for i=1:numel(a)/size(a,1); f=a(:,i); .... ; end

您可以通过在代码中添加一些disp语句来轻松地看到这一点:

for e = d
      disp(e)
      g = 0;
      for f = a
          disp(f)
          if mod (f, 2) == 0
              g = [g f];
          end
      end
w = [w;g];
end

matlab中的WHILE循环采用逻辑条件。

(编辑:我忘记了如果a是多维的话,f会取代a的列的值)

答案 1 :(得分:1)

是的,MATLAB循环变量被分配给“数组”,在MATLAB中称为向量。循环变量的值在循环的每次迭代时自动迭代向量的元素。一个常见的结构是

for i=1:10 %generates vector of 1,2,...,10
i %will print i=1, i=2, etc.
end

在这种情况下,矢量是在运行中生成的,并且是序列号。但是没有理由你不能传递任何向量来迭代,就像你的情况中的“a”一样。在每次迭代时,“f”接受“a”中包含的序列中的下一个值。