Если я понял, что вы хотите найти минимальное расстояние между двумя точками.
Есть различия между ними, если x1, y1, x2 и y2 - матрицы / векторы, тогда я предлагаю следующее.
dist=sqrt((x2-x1).^2+(y2-y1).^2); %compute distance
[M,I] = min(dist); %find value of minimum distance and index
xf=x1(I); yf=y1(I); %this is the point on the first curve for the "intersection"
xs=x2(I); ys=y2(I); %this is the point on the second curve for the "intersection"
Это должно делать то, что вы хотите, так как вычисляет расстояние, а затем ищет минимальное значение.Теперь, как сказано в комментариях, давайте также предположим, что разные элементы х (разное расстояние) и / или разное количество элементов.(x1 и y1 должны иметь одинаковые элементы, в противном случае вы даже не сможете отобразить их, и вам нужно будет «повторно объединить» точки сетки / данных).
if length(x1)<length(x2)
l=length(x1);
c=length(x2);
xo=x1; xe=x2; yo=y1; ye=y2;
else
l=length(x2);
c=length(x1);
xo=x2; xe=x1; yo=y2; ye=y1;
end
dist=zeros(l,c);
for kk=1:l
xm=xo(kk)*ones(1,c); %you might have to change this depending on if your arrays are vertical/horizontal
ym=yo(kk)*ones(1,c); %same as xm but for y
dist(kk,:)=sqrt((xe-xm).^2+(ye-ym).^2); %compute distance
end
[M,I] = min(dist(:)); %find value of minimum distance and index
[row,col]=ind2sub(size(dist),I)
Так что же это делает,запускает цикл for минимальное количество раз, на каждой итерации он проверяет 1 значение любого из всех других значений другой строки.Это означает, что он вычисляет все расстояния между всеми точками.Затем вы снова находите минимальное расстояние и преобразуете позицию в номер строки и столбца, в строке указывается индекс для самого короткого массива, а в столбце указывается индекс для самого длинного (вы можете добавить некоторые элементы, чтобы автоматически найтикоторый внутри функции if или путем добавления нескольких строк в конце).
Как уже упоминалось другим пользователем, это будет медленно для больших наборов данных 10000+ или 100000+ точек (зависит от вашего компьютера).