MATLAB-每x个循环只执行一次的条件
我试图通过+1每750次、1500次、2250次等循环更改MATLAB-每x个循环只执行一次的条件,matlab,loops,for-loop,logic,logical-operators,Matlab,Loops,For Loop,Logic,Logical Operators,我试图通过+1每750次、1500次、2250次等循环更改z的值,这是我写的: len = 1500000; y = 750; z = 1; for i = 1:len if (i == [y.*(1:2000)]) z = z + 1; end end 为什么z的值不变?有人能告诉我我的if语句有什么问题吗?如果所有元素都true,MATLAB只认为数组是true。记住这一点,如果我们看一下你的if语句的条件 i == (y .* (1:2000)) 它返回
z
的值,这是我写的:
len = 1500000;
y = 750;
z = 1;
for i = 1:len
if (i == [y.*(1:2000)])
z = z + 1;
end
end
为什么
z
的值不变?有人能告诉我我的if
语句有什么问题吗?如果所有元素都true
,MATLAB只认为数组是true
。记住这一点,如果我们看一下你的if
语句的条件
i == (y .* (1:2000))
它返回的是一个2000个值的数组,其中它们要么都是false
(在i
不是y
的倍数的情况下)要么都是false
,只有一个true
值除外。即使存在一个true
,它的计算结果仍然是false
,并且您的if
语句将永远不会被计算
更好的方法是使用检查给定的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
如果所有元素均为
true
,则MATLAB仅将数组视为true
。记住这一点,如果我们看一下你的if
语句的条件
i == (y .* (1:2000))
它返回的是一个2000个值的数组,其中它们要么都是false
(在i
不是y
的倍数的情况下)要么都是false
,只有一个true
值除外。即使存在一个true
,它的计算结果仍然是false
,并且您的if
语句将永远不会被计算
更好的方法是使用检查给定的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
非常感谢你!这很有道理,非常感谢!现在这很有道理。