web-dev-qa-db-ja.com

Matlab eigは常にソートされた値を返しますか?

Matlabで関数を使用します:

[V,D] = eig(C);

VとDは常に昇順で並べ替えられていることがわかります。いつもそうですか、それともVDの値を取得した後で並べ替える必要がありますか?

13
kamaci

Vは、関連する固有値の順序に対応する場合を除いて、どの順序でもソートされません。しかし、おそらくあなたはそれを意味していませんでした。

固有値は降順である傾向がありますが、これはまったく保証されていません。最大のものが一番上のアルゴリズムから滴り落ちる傾向があるので、それらは整然としている傾向があります。 Eigは、その事実を確実にするために最後にソートを持っていません。

eigenshuffle ツールは、固有問題のシーケンスを取得し、固有値(および対応する固有ベクトル)を並べ替えて、シーケンスに沿って一貫性を保つように設計されていることを指摘するかもしれません。

確かに降順で本当に必要な場合は、その事実を確認するために並べ替えを行ってください。ベクトルも同じ順序で並べ替えることを確認してください。

24
user85109

保証ソートされた昇順の値が必要な場合は、追加の操作を行うだけです

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)
32
Rody Oldenhuis