Does Matlab eig always returns sorted values?
Asked Answered
H

2

16

I use a function at Matlab:

[V,D] = eig(C);

I see that V and D are always sorted ascending order. Does it always like that or should I sort them after I get V and D values?

Heretical answered 4/12, 2012 at 13:46 Comment(2)
Why don't you use sort() to make c purposely descending and ascending. Then see what eig does to it. So you can come to a conclusion by experimenting or reading the manual. But I like the eariler :D Check this mathworks questionGallion
I'll bet it depends on the algorithm used.Prosopopoeia
I
25

V is NOT sorted in any order, except to correspond to the order of the associated eigenvalues. But perhaps you did not mean that.

The eigenvalues TEND to be in descending order, but this is not assured at all. They tend to be in order because the largest tend to trickle out of the algorithm on top. Eig has no sort at the end to ensure that fact.

I might point out the eigenshuffle tool, designed to take a sequence of eigenproblems, then resorting the eigenvalues (and the corresponding eigenvectors) so they are consistent along the sequence.

If you really need them certainly in decreasing order, then do a sort to ensure that fact. Make sure you also sort the vectors in the same order.

Isotron answered 4/12, 2012 at 13:58 Comment(1)
Should this read "TEND to be in increasing order"? That is my observation, anyway.Apart
J
33

If you want to guarantee sorted-ascending values, just do an extra

if ~issorted(diag(D))
    [V,D] = eig(A);
    [D,I] = sort(diag(D));
    V = V(:, I);
end

to sort them the way you want.

Alternatively, use eigs:

[V,D] = eigs(A,size(A,1)-1)
Japan answered 4/12, 2012 at 14:0 Comment(5)
@Heretical Not that I'm complaining, but why would you accept my answer, and not the better answer by woodchips?Japan
I agree that your answer is the best for me.Gal
(I would pedantically argue that I is a misleading variable name, and would opt for one which better reflects it is simply an array of indices, like inds, and not an identity matrix)Syndic
eigs does not take care of the sign. Say A is 5 by 5. How to get the smallest 3 eigenvalues (not magnitude) and the corresponding eigenvectors for eigs (not eig)?Poncho
It seems it does not always sort the same way. When you ask for all the eigenvalues, it is default descending, and otherwise it is ascending. IDK if this is an error or something in documentation I missed, but to be safe, I recommend adding the argument 'largestabs'Subside
I
25

V is NOT sorted in any order, except to correspond to the order of the associated eigenvalues. But perhaps you did not mean that.

The eigenvalues TEND to be in descending order, but this is not assured at all. They tend to be in order because the largest tend to trickle out of the algorithm on top. Eig has no sort at the end to ensure that fact.

I might point out the eigenshuffle tool, designed to take a sequence of eigenproblems, then resorting the eigenvalues (and the corresponding eigenvectors) so they are consistent along the sequence.

If you really need them certainly in decreasing order, then do a sort to ensure that fact. Make sure you also sort the vectors in the same order.

Isotron answered 4/12, 2012 at 13:58 Comment(1)
Should this read "TEND to be in increasing order"? That is my observation, anyway.Apart

© 2022 - 2024 — McMap. All rights reserved.