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

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

[V,D] = eig(C);

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

2 ответа

Решение

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

Собственные значения TEND должны быть в порядке убывания, но это совсем не гарантировано. Они имеют тенденцию быть в порядке, потому что самые большие имеют тенденцию вытекать из алгоритма сверху. В конце концов, у Эйга нет ничего подобного, чтобы убедиться в этом.

Я мог бы указать на инструмент 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)
Другие вопросы по тегам