Всегда ли Matlab eig возвращает отсортированные значения?
Я использую функцию в Matlab:
[V,D] = eig(C);
Я вижу, что V и D всегда сортируются по возрастанию. Всегда ли это так, или я должен сортировать их после получения значений V и D?
Ответ 1
V НЕ сортируется в любом порядке, за исключением того, чтобы соответствовать порядку соответствующих собственных значений. Но, возможно, вы не это имели в виду.
Собственные значения ТЕНДЫ находятся в нисходящем порядке, но это вовсе не гарантировано. Они имеют тенденцию быть в порядке, потому что самые крупные из них выходят из алгоритма сверху. Eig не имеет никакого конца в конце, чтобы убедиться в этом.
Я мог бы указать инструмент eigenshuffle, предназначенный для принятия последовательности собственных проблем, затем прибегая к собственным значениям (и соответствующим собственным векторам) поэтому они согласуются вдоль последовательности.
Если вы действительно нуждаетесь в них, конечно, в порядке убывания, тогда сделайте вид, чтобы убедиться в этом. Убедитесь, что вы также сортируете векторы в том же порядке.
Ответ 2
Если вы хотите гарантировать отсортированные по возрастанию значения, просто выполните дополнительные
if ~issorted(diag(D))
[V,D] = eig(A);
[D,I] = sort(diag(D));
V = V(:, I);
end