Подтвердить что ты не робот

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

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

[V,D] = eig(C);

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

4b9b3361

Ответ 1

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

Собственные значения ТЕНДЫ находятся в нисходящем порядке, но это вовсе не гарантировано. Они имеют тенденцию быть в порядке, потому что самые крупные из них выходят из алгоритма сверху. Eig не имеет никакого конца в конце, чтобы убедиться в этом.

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

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

Ответ 2

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

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)