MATLAB - 每 x 个循环只做一次某事的条件



我正在尝试将z的值每 750 个、第 1500 个、第 2250 个循环更改 +1,...,这就是我写的:

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

为什么z的价值没有改变?有人可以告诉我我的if陈述有什么问题吗?

MATLAB 仅在所有元素都true时才认为数组true。因此,考虑到这一点,如果我们查看您的if语句的条件

i == (y .* (1:2000))

这将返回一个包含 2000 个值的数组,其中它们要么都是false的(在i不是y的倍数的情况下),要么是除一个true值之外的所有false。即使有一个true,这仍然计算为 false并且您的if语句永远不会被评估。

更好的方法是使用 mod 来检查给定i是否是 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

相关内容

  • 没有找到相关文章

最新更新