>> 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?
感谢。
答案 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”中包含的序列中的下一个值。