Как получить векторы x и y для тех, чье состояние установлено в i в MATLAB - PullRequest
0 голосов
/ 06 мая 2020

У меня есть функция MATLAB с именем nearInfectious2, которая представляет шесть человек. Он принимает параметры массива x координат, массива y координат, различных состояний, связанных с этими координатами, "s" для восприимчивых, "i" для инфекционных и "r" для восстановленных и, наконец, радиуса. Я хочу сохранить массив или массив (ы) с координатами x и y для тех людей, состояние которых равно "i". Это то, что у меня есть до сих пор, но оно также включает другие координаты, которые мне не нужны. Как я могу заставить его просто возвращать массивы с координатами, относящимися к тем, чье состояние "i"? Вот что у меня есть на данный момент:

[x,y]=nearInfectious2([3,350,150,20,204,103],[92,9,200,5,350,34],["s","i","s","r","i","i"],20);
  function [x,y] = nearInfectious2(x,y,states,radius) 

  for j=1:6
        if states(j) == "i"
            x(j)=x(j);
            y(j)=y(j);
        end   
    end 
    disp([x])
    disp([y]) 

end

После того, как у меня есть массив координат, относящихся к людям, состояние которых "i", я хочу рассчитать расстояние (используя формулу обычного расстояния sqrt((x2 - x1)^2 + (y2 - y1)^2)) между любыми людьми, чье состояние "s", с теми, чье состояние "i", чтобы увидеть, находится ли оно на расстоянии меньше радиуса. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 мая 2020

Ну, ваша проблема в том, что ваши входные переменные такие же, как выходные, а также x(j)=x(j) ничего не означает. Вы назначаете значение массива одному и тому же месту в том же массиве.

Вы должны создать новый массив только с совпадающими значениями. Быстрое исправление вашего кода может выглядеть так:

function [x_out, y_out] = nearInfectious2(x_in, y_in, states, radius) 

  x_out = []
  y_out = []
  for j=1:length(states)
        if states(j) == "i"
            x_out(end + 1) = x_in(j); % append after the end of the array
            y_out(end + 1) = y_in(j);
        end   
    end 
    disp([x_out])
    disp([y_out]) 

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...