MATLAB - 条件是每x个循环只执行一次

时间:2017-01-19 01:47:50

标签: matlab loops for-loop logic logical-operators

我正在尝试将z的值改为 +1 第750,1500,2250,......等等循环,这就是我写了:

len = 1500000;
y = 750;
z = 1;
for i = 1:len
    if (i == [y.*(1:2000)])
        z = z + 1;
    end
end

为什么z的值不会改变?有人可以告诉我,我的if声明有什么问题吗?

1 个答案:

答案 0 :(得分:3)

如果所有元素都是true,MATLAB只会将数组视为true 。因此,如果我们查看您的if声明的条件

,请注意这一点
i == (y .* (1:2000))

这返回的是一个包含2000个值的数组,它们全部为false(在i不是y的倍数的情况下)和所有{{1}除了一个false值之外。即使只有一个true,这仍然会计算为true,并且永远不会评估您的false语句。

更好的方法是使用mod检查给定的ifi的倍数

y

但是,如果循环的唯一内容是您所显示的内容,那么您可以简单地省略您不关心的迭代

if mod(i, y) == 0
    z = z + 1;
end

如果您确实想要比较显示的数组,那么最好在循环外计算for i = y:y:len z = z + 1; end ,然后使用y .* 1:2000查看ismember是否为i在数组中

tmp = y .* (1:2000);

for i = 1:len
    if ismember(i, tmp)
        z = z + 1;  
    end
end