Всегда ли Matlab eig возвращает отсортированные значения?
Я использую функцию в Matlab:
[V,D] = eig(C);
Я вижу, что V и D всегда сортируются по возрастанию. Это всегда так или я должен сортировать их после V
и D
значения?
2 ответов
V не сортируется ни в каком порядке, кроме как в соответствии с порядком связанных собственных значений. Но, возможно, вы не это имели в виду.
собственные значения имеют тенденцию быть в порядке убывания, но это не гарантируется вообще. Они, как правило, в порядке, потому что самые большие, как правило, вытекают из алгоритма сверху. Eig не имеет вида в конце, чтобы гарантировать этот факт.
Если вы действительно нуждаетесь в них, конечно, в порядке убывания, то сделайте вид, чтобы гарантировать этот факт. Убедитесь, что вы также сортируете векторы в том же порядке.
Если вы хотите гарантия сортировка-по возрастанию значений, просто сделайте дополнительный
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)