0

Так что мне нужно построить матрицу координат x и y. У меня есть x, хранящийся в одной матрице с именем vx=0:6000; и y, хранящийся в Vy=repmat(300,1,6000);.Как построить матрицу с использованием двух векторов?

Значения в категории x: 0,1,2,...,5999,6000. Значения в y являются 300,300,...,300,300.

Как создать «вектор» с координатами x,y?

Это будет выглядеть так [(0,300);(1,300);...;(5999,300);(6000,300)].

После того, как я закончу это, я хочу найти расстояние между другой фиксированной точкой x,y (что я буду реплицировать 6000 раз) и вектор выше, чтобы сделать график расстояния с течением времени.

Большое вам спасибо!

ответ

4

Вы можете просто использовать горизонтальную конкатенацию с []

X = [Vx(:), Vy(:)]; 

Если вы хотите, чтобы вычислить расстояние между другой точкой и любой точкой в ​​этой 2D массива, вы можете сделать следующее:

point = [10, 100]; 
distances = sqrt(sum(bsxfun(@minus, X, point).^2, 2)); 

Если у вас есть R2016b или новее, вы можете просто сделать

distances = sqrt(sum((X - point).^2, 2)); 
+0

@ user3105028 Вы используете ':' точно так, как я его написал. Это заставляет 'x' и' y' быть векторами столбцов. – Suever

+0

>> p1 = [Vx (:), Vy (:)] Ошибка использования horzcat Размеры конкатенированных матриц несовместимы. – belgarion

+0

@ user3105028 Вы хотите последний, который вы написали, но у вас есть 6001 элементов в vx и 6000 в vy – Suever

3

Немного более элегантной альтернативой (на мой взгляд) является следующее:

Vx = (0:1:6000).'; 
C = [Vx 0*Vx+300]; % Just a trick to avoid the overly verbose `repmat`. 

p = [10,100];  % Define some point of reference. 
d = pdist2(C,p); % The default "distance type" is 'euclidian' - which is what you need. 

Это использует функцию pdist2, введенная в MATLAB 2010a и требует статистики и машинного обучения Toolbox.

Смежные вопросы