Что ж, ваша проблема в том, что вы помещаете свои значения в j-ю позицию closeHome
, в результате чего closeHome
всегда имеет j
элементов, и все элементы, для которых условие не выполняется, будут 0
. Вы можете избежать этого, изменив код следующим образом:
x = [5 7 4 1 2]';
y = [1 2 3 4 2]';
distance = sqrt(x.^2 + y.^2);
store = 5;
closeHome=[];
for j=1:size(distance)
if distance(j) <= store
closeHome=[closeHome,distance(j)];
end
end
В любом случае, вы также можете значительно упростить этот код, используя возможность логической индексации в matlabs. Вы можете просто заменить цикл for следующей простой строкой:
closeHome=distance(distance<=store);
В этом случае distance<=store
создаст логический массив, имеющий 1 с для всех позиций расстояния, которые меньше store
и 0 для всех других позиций. Тогда индексирование расстояния с помощью этого логического массива даст желаемый результат.
И просто для вас, чтобы знать: в программировании Matlab считается плохой практикой использовать i
и j
в качестве переменных, потому что они представляют мнимую единицу. Таким образом, вы можете рассмотреть возможность их изменения и использовать (например) ii
и jj
или что-то совершенно другое.