2010-03-16 8 views
3

Давайте предположим, что у нас есть вектор, какРасчет максимального расстояния между элементами вектора в MATLAB

x = -1:0.05:1; 
ids = randperm(length(x)); 
x = x(ids(1:20)); 

Я хотел бы, чтобы вычислить максимальное расстояние между элементами x в некоторых идиоматических способом. Было бы легко просто перебрать все возможные комбинации элементов x, но я чувствую, что может быть способ сделать это с помощью встроенных функций MATLAB в каком-то безумном, но идиоматическом виде.

ответ

1

Гм ... хотелось бы иметь MATLAB в моих руках, и его еще рано утром, но что-то вроде:

max_dist = max(x(2:end) - x(1:end-1)); 

Я не знаю, если это то, что вы ищете для.

+0

Это вычислит максимальное расстояние между последующими элементами. Мне бы хотелось, чтобы у меня было все возможные комбинации. – lhahne

2

Вы имеете в виду разницу между самыми большими и наименьшими элементами в вашем векторе? Если вы это сделаете, то что-то вроде этого будет работать:

max(x) - min(x) 

Если вы этого не сделаете, я неправильно понял вопрос.

2

Это вычисление промежуточных расстояний, хотя и простое, поскольку вы работаете в одном измерении. Действительно, точка, которая падает на максимальное расстояние в одном измерении, всегда является одной из двух возможных точек. Итак, все, что вам нужно, это захватить минимальное значение и максимальное значение из списка и посмотреть, что дальше от этой точки. Так если предположить, что числа в х действительные числа, это будет работать:

xmin = min(x); 
xmax = max(x); 
maxdistance = max(x - xmin,xmax - x); 

В качестве альтернативы, некоторое время назад я поставил общий Interpoint инструмент расстояние вычисления на файловом обмене (IPDM). Он достаточно умен для особых случаев простых проблем, таких как 1-я проблема дальних точек. Этот вызов будет делать это для вас:

D = ipdm(x,'subset','farthest','result','struct'); 

Конечно, это не будет столь же эффективным, как простой код, который я написал выше, так как это полностью общий инструмент.

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

  • Нет связанных вопросов^_^