M平面間の測定角度の行列があります
0 52 77 79
52 0 10 14
77 10 0 3
79 14 3 0
平面間の既知の角度のリストがあります。これは、名前を付けた N 行 N 列の行列rho
です。以下はそのサブセットです (大きすぎて表示できません)。
0 51 68 75 78 81 82
51 0 17 24 28 30 32
68 17 0 7 11 13 15
75 24 7 0 4 6 8
78 28 11 4 0 2 4
81 30 13 6 2 0 2
82 32 15 8 4 2 0
私の使命は、角度rho
が測定された角度に最も近い M 平面のセットを見つけることです。たとえば、上に示した平面の測定角度は、平面 1、2、4、および 6 の間の既知の角度に比較的近いです。
別の言い方をすれば、測定した距離のセットと一致する距離行列 (コサイン関連の距離を使用) 内のポイントのセットを見つける必要があります。これは型に模様を合わせることとも考えられます。
私の問題では、M=5 と N=415 です。
私は本当にそれについて頭を悩ませようとしましたが、時間がなくなりました。したがって、現在私は最も単純な方法を使用しています: 3 つの平面のすべての可能な組み合わせを繰り返しますが、これは遅く、現在 M=3 に対してのみ記述されています。次に、一致するスコアで並べ替えられた一致する平面のリストを返します。
function [scores] = which_zones(rho, angles)
N = size(rho,1);
scores = zeros(N^3, 4);
index = 1;
for i=1:N-2
for j=(i+1):N-1
for k=(j+1):N
found_angles = [rho(i,j) rho(i,k) rho(j,k)];
score = sqrt(sum((found_angles-angles).^2));
scores(index,:)=[score i j k];
index = index + 1;
end
end;
end
scores=scores(1:(index-1),:); % was too lazy to pre-calculate #
scores=sortrows(scores, 1);
end
役立つかもしれないと感じていpdist2
ますが、どうすればよいかわかりません。これを理解するための助けをいただければ幸いです。