Matlabで関数を使用します:
[V,D] = eig(C);
VとDは常に昇順で並べ替えられていることがわかります。いつもそうですか、それともV
とD
の値を取得した後で並べ替える必要がありますか?
Vは、関連する固有値の順序に対応する場合を除いて、どの順序でもソートされません。しかし、おそらくあなたはそれを意味していませんでした。
固有値は降順である傾向がありますが、これはまったく保証されていません。最大のものが一番上のアルゴリズムから滴り落ちる傾向があるので、それらは整然としている傾向があります。 Eigは、その事実を確実にするために最後にソートを持っていません。
eigenshuffle ツールは、固有問題のシーケンスを取得し、固有値(および対応する固有ベクトル)を並べ替えて、シーケンスに沿って一貫性を保つように設計されていることを指摘するかもしれません。
確かに降順で本当に必要な場合は、その事実を確認するために並べ替えを行ってください。ベクトルも同じ順序で並べ替えることを確認してください。
保証ソートされた昇順の値が必要な場合は、追加の操作を行うだけです
if ~issorted(diag(D))
[V,D] = eig(A);
[D,I] = sort(diag(D));
V = V(:, I);
end
あなたが望むようにそれらをソートします。
または、eigs
を使用します。
[V,D] = eigs(A,size(A,1)-1)