-1
>> 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 循环是否取值而不是逻辑条件?例如,当查看“for f = a”时,f 是否获取数组 A 的值,然后 for 循环按其列遍历 F?

谢谢。

4

2 回答 2

3

FOR 循环有一个变量,每次通过循环迭代器变量获取数组中的下一个值。迭代器变量接受列的值,一次一个。在 foror 循环中赋值语句的右侧不必是数字数组——例如,它可以是字符串的元胞数组,或者结构等。

换句话说,当你有

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 的列的值)

于 2013-04-25T04:57:18.123 回答
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”中包含的序列中的下一个值。

于 2013-04-25T04:55:22.810 回答