Всегда ли Matlab eig возвращает отсортированные значения?

Я использую функцию в Matlab:

[V,D] = eig(C);

Я вижу, что V и D всегда сортируются по возрастанию. Это всегда так или я должен сортировать их после V и D значения?

2 ответов


V не сортируется ни в каком порядке, кроме как в соответствии с порядком связанных собственных значений. Но, возможно, вы не это имели в виду.

собственные значения имеют тенденцию быть в порядке убывания, но это не гарантируется вообще. Они, как правило, в порядке, потому что самые большие, как правило, вытекают из алгоритма сверху. Eig не имеет вида в конце, чтобы гарантировать этот факт.

Я мог бы указать на eigenshuffle, предназначен для выполнения последовательности eigenproblems, затем прибегают к собственным значениям (и соответствующим собственным векторам), чтобы они были согласованы вдоль последовательности.

Если вы действительно нуждаетесь в них, конечно, в порядке убывания, то сделайте вид, чтобы гарантировать этот факт. Убедитесь, что вы также сортируете векторы в том же порядке.


Если вы хотите гарантия сортировка-по возрастанию значений, просто сделайте дополнительный

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)