あなたが破棄したsort()
ソリューションが実際にあなたのために役立つかもしれないと私は信じています。あなたが知っているように、その絶対値に基づいてSORT
注文複素数をnorm(a-b) == sqrt(sum(abs(a-b).^2))
そして:あなたはminimize norm(a-b)
を定義した基準は、複素数の係数(絶対値)を考慮し、定義によって、あるsort(a)
は複雑なためsort(abs(a))
に相当します入力。
%# sort by complex-magnitude
[sort(a) sort(b)]
限り同じ順序が両方に適用されるように、あなたにも辞書式順序(実数部によって、等しい場合は、ソート虚部でソート)を試してみてください:
%# lexicographic sort order
[~,ordA] = sortrows([real(a) imag(a)],[1 2]);
[~,ordB] = sortrows([real(b) imag(b)],[1 2]);
[b(ordB) a(ordA)]
あなたは、提案Hungarian algorithm@AnthonyLabarreことを実現するために行くのが面倒であればブルート強制:
A = rand(5);
a = eig(A);
b = eig(A+1e-10);
bb = perms(b); %# all permutations of b
nrm = sqrt(sum(abs(bsxfun(@minus, a,bb')).^2)); %'
[~,idx] = min(nrm); %# argmin norm(a-bb(i,:))
[bb(idx,:)' a]
EIGによって返された固有値がソートされていることが保証されていないことに加えて、固有ベクトルも同様に扱うのが難しい場合があります。v
が固有ベクトルならば、 k*v
も1であり、特にk=-1
である。通常は、 -/+ 1で乗算して、各ベクトルの最大要素が正の符号を持つような記号規約を適用します。
これを見ていただき、ありがとうございます(私はタグを "割り当て問題"にしたいと思いますが、評判が足りません)。私は現在、同様のコードを使用していますが、エラーが発生しやすい定型ラッパーを作成する必要がありました。私はあらかじめ缶詰めされたものを見つけることを望みました。これは私の目にはかなり共通の問題でした。 –