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)