Как получить значения из 2-D массива в Matlab? - PullRequest
0 голосов
/ 14 марта 2019
B = [150 90; -100 -120; -80 130; 140 -70; 60 120; -90 -130];

Это значения 6 координат.Я хочу рассчитать среднее расстояние от этих координат.Мне нужно использовать эту функцию.Но я не могу назначить 2-е значение из каждой координаты в функции.

davg = 0;
m = 0;
c=0.707;
B=[150 90; -100 -120; -80 130; 140 -70; 60 120; -90 -130];

for j = 1:6
    for i = 1:2
        m =m+((sqrt(B(j,i)^2+B(j,i+1)^2))/c);
    end
end
davg = m/6;

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Поскольку вы уже вычислили сумму элементов в квадрате, вам не нужен внутренний цикл.Для двумерного случая вы можете просто написать:

m = m + ((sqrt(B(j, 1).^2 + B(j, 2).^2)) / c);

Для n-мерного случая вы можете переписать цикл следующим образом:

% Input and parameters.
davg = 0;
m = 0;
c = 0.707;
B = [150 90; -100 -120; -80 130; 140 -70; 60 120; -90 -130];

% Get number of data points and dimensionality.
nPoints = size(B, 1);
nDim = size(B, 2);

% Iterate every data point.
for j = 1:nPoints

  % Calculate sum of squared elements in loop (for arbitrary dimensionality).
  temp = 0;
  for i = 1:nDim
      temp = temp + B(j, i).^2;
  end

  % Apply square root afterwards.  
  m = m + sqrt(temp) / c;

end

% Calculate average.
davg = m / nPoints

IЗнаю, что вы написали, что вам нужно использовать упомянутую формулу, тем не менее, весь расчет можно упростить до:

% Input and parameters.
c = 0.707;
B = [150 90; -100 -120; -80 130; 140 -70; 60 120; -90 -130];

% Calculate average.
davg = mean(vecnorm(B, 2, 2) / c)
0 голосов
/ 14 марта 2019

Взвешенная сумма всех векторов должна быть в порядке?

sum(sqrt(sum(B.^2,2)))/size(B,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...