2014-01-07 3 views
0

Уравнение расстояния Минковского можно найти here.Minkowski distance and pdist

Если мы хотим, чтобы вычислить расстояние Минковского в MATLAB, я думаю, что мы можем сделать следующее (поправьте меня, если я ошибаюсь):

dist=pdist([x(i);y(j)],'minkowski'); 

До здесь, вышеприведенная команда будет делать уравнение показано в ссылке.

Теперь, до расстояния Минковского, я хочу добавить эту часть |-m(i)|^p, где m(i) - это некоторая ценность.

Я увидел исходный код pdist, но хочу спросить, как я могу изменить расстояние Минковского, добавив эту простую часть, либо в код pdist, либо из вызывающего кода (я думаю, нам, возможно, придется внести некоторые изменения в параметрах).

Спасибо.

+0

Вы хотите включить эту часть _within_ суммирование, определяющее расстояние Минковского? –

+0

@ Luis Mendo. Спасибо за ваш ответ. Он будет добавлен к суммированию. Другими словами, это будет с суммированием под корнем – Simplicity

+0

Но ваш член зависит от 'i', поэтому | -m (i) |^m даст _vector_, тогда как' dist = pdist ([x (i); y (j)], 'minkowski') 'дает единое число, верно? Каковы размеры 'x',' y'? –

ответ

2

Я думаю, что это то, что вы хотите: определить пользовательскую функцию расстояния и использовать его в качестве аргумента pdist:

p = 2; 
fun = @(x,y) sum(abs(x-y).^p + abs(m(i)).^p).^(1/p); 
pdist([x(i);y(j)],fun) 

Или непосредственно использовать

sum(abs(x(i)-y(j)).^p + abs(m(i)).^p).^(1/p) 

Я принимаю i и j являются просто индексами, которые проходят через элементы x и y.

+0

Итак, эта часть 'sum (abs (x (i) -y (j)).^P) .^(1/p) 'будет« расстоянием Минковского », верно? Итак, мне не нужно называть 'pdist' например? И да, в отношении 'i' и' j', это просто индексы, которые проходят через 'x' и' y', resectively – Simplicity

+0

Да, 'sum (abs (x (i) -y (j)).^P).^(1/p) 'дает тот же результат, что и pdist ([x (i); y (j)], 'mininkowski')' –