MATLAB считает массив равным true
, если все элементы: true
. Так с этим в виду, если мы посмотрим на ваше условное для if
заявления
i == (y .* (1:2000))
Что это возвращает массив из 2000 значений, где они либо все false
(в том случае, когда i
не кратна y
) и все false
за исключением одного true
стоимость если есть. Даже если есть 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
Большое спасибо! Теперь это имеет большой смысл. – tamkrit