2012-04-29 31 views
2

私は行列がA(Mx2)、行列がB(Nx2)であり、M> = Nです。 私はAとBの間の類似性をテストするために垂直ユークリッド距離を計算する必要があります。画像を参照すると、単一のユークリッド距離は各piとp'iの間のセグメントで、一度垂直距離ごとに計算され、 1つのパラメータを得るための合計。あなたはこれを行うmatlabルーチンやスクリプトを知っていますか? enter image description hereMatlabで垂直距離を計算する方法

+0

この場合、mはnと正確に等しくないはずですか? –

+0

破線は実線の圧縮されたバージョンなので、元の軌跡よりも明らかにポイントが少なくなります。結局のところ、距離を計算するためには、偽点を作成する必要があります。したがって、破線と実線は同じ数の点を持ちます。しかし、破線上に作成される偽点は、実線上のそれぞれの点からの最小距離を持たなければならない。これどうやってするの? –

+0

情報が不足しているようです。例えば、画像を参照すると、p0〜p5が単一の破線で結合され、p5〜p16が別の破線で結合されることがどのように決定されるか。また、Aのデータは実線に対応し、Bのデータは破線に対応していますか? – Abhinav

答えて

2

あなたはP0とP5との間のP1 ... P4の位置を知っていれば、あなたペルペンを計算するために三角形の領域を使用することができます簡単dicular距離:

d(p0p5, p1) = 2 * area(p0p1p5)/norm(p5-p0) 

三角形の面積は、私はあなたが投影やピタゴラスのための内積を使用してパフォーマンスの向上を得ることができると思い

s = (norm(p0-p1) + norm(p1-p5) + norm(p5-p0))/2 

area(p0p1p5) = sqrt(s * (s-norm(p0-p1)) * (s-norm(p1-p5)) * (s-norm(p5-p0))) 

によって発見されました定理:

d(p0p5, p1) = sqrt(norm(p1-p0)^2 - dot(p1-p0,p5-p0)^2/norm(p5-p0)^2) 

どちらの場合でも、コスト関数に平均二乗誤差が含まれている場合は、代わりに平方誤差を評価することでsqrt呼び出しを排除することができます。ノーマルスクエアは、normに電話してから2乗するよりも計算コストが安い(代わりにドットプロダクトを使う)。

1

Neural Network Toolboxのdistを使用できます。

AB NX 2つの行列であり、これは距離(擬似コード)の和を計算する1つの可能な方法である。和(SQRT((A_1x - B_1x)^ 2 +(A_1y - B_1y)^ 2) ...、sqrt((A_nx-B_nx)^ 2 +(A_ny-B_ny)^ 2)、またはsum(p1-p'1、...、pn-p'n)。

それぞれこれらの行列(AB)(nはこの例では= 3)2次元空間内のn個の点のx、y座標を保持する。

% Some example matrices, size 3 x 2. 

A = [ 10 22; 35 48; 16 42 ]; 
B = [ 5 7; 8 11; 33 22 ]; 

DistanceMatrix = dist([A' B']); 
DistanceMatrix(1:size(A,1),:) = []; 
SumOfDistances = sum(diag(DistanceMatrix)); 

SumOfDistances = 
87.8641