[eigen] ordering of eigenvalues of EigenSolver |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: [eigen] ordering of eigenvalues of EigenSolver
- From: Susanne Suter <susanne.suter@xxxxxxxxx>
- Date: Tue, 8 Feb 2011 17:15:28 +0100
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:date:message-id:subject:from:to :content-type; bh=ht6Dn0CQyuSrDZhvz1QNeFogiRq5qVD1P+LWYaZnV4E=; b=FFD7OlyM8R/TKXeRHO8AhnLrWCHkaWe45Kra5hdw8PXh9v0jTSiLLoeXUtRHy9ChJM uBhmeXgQw3f2LWGtGdByBnMMb5tMM/hkFyuYufUPgGrc4/EFoPbHCoX5gaJDIlFE0rJW IimzHRMQoPnz92bnbEqb1aieB590CHXHQrN6s=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=mWoZUukBu3vahoL2ObwtIm1VlSbaZNOTHy65MyWFZ+s8mQb74LKWdHTqjwuxWDh6yL DMOlHybz6H1q5zerFQnXMSds3APYxuONwhaXz+iJhhycGWtzgWcDM+6Ewh5USFdj+BJV BQ6H+xq9KMtQBpJ2mk3WHCAiabm1mBXElbGB8=
Hi
Sorry, I accidently hit the "send button" too early. Here my complete
messge again.
I'm testing the Eigen library in order to use it for eigenvalue
decomposition or SVD. In the end I need the eigenvectors (left
singular vectors) and the eigenvalues (singular values).
I noticed that when using the EigenSolver classes, the ordering of the
eigenvalues is not as I expected. Normally, I would expect that I get
an ordering analogous to the singular values, i.e., an ordering with
the maximum absolute value first and then decreasing values ordered by
their absolute value (sometimes also called "largest magnitude
eigenvalues"). What I get now, looks a bit like an ordering
considering the sign (SelfAdjointEigenSolver). I had similar issues
with EigenSolver and ComplexEigenSolver (however, I found the ordering
not consistent in all methods).
### SelfAdjointEigenSolver: eigenvalues of A are: -2.77687
-1.50582 -0.0370092 0.848378
### ComplexEigenSolver: eigenvalues are: (-0.0370093,0) (0.848378,0)
(-1.50582,0) (-2.77687,0)
### EigenSolver: eigenvalues are : (-2.77687,0) (-0.0370092,0)
(0.848379,0) (-1.50582,0)
However, I would expect
### eigenvalues of A are: -2.77687 -1.50582 0.848378 -0.0370092
Until now, I only was using eigenvalue decompositions, which used the
same ordering for eigenvalues as the SVD for the singular values (e.g.
Matlab). Is there any reason why the implementation of Eigen is
different? Or is there any option to change the ordering?
I'm using the following test matrix:
A =
-2.0000 -0.6714 0.8698 0.5792
-0.6714 -1.1242 -0.0365 -0.5731
0.8698 -0.0365 -0.4660 -0.8542
0.5792 -0.5731 -0.8542 0.1188
and I test it with the following code (using the Eigen3 version).
Eigen::SelfAdjointEigenSolver<Eigen::Matrix4f> es;
es.compute(A);
std::cout << "### SELFADJOINT EIGENVALUE DECOMPOSITION ### " << std::endl;
std::cout << "** eigenvalues of A are: " <<
es.eigenvalues().transpose() << std::endl;
std::cout << "** eigenvectors of A are: " << std::endl <<
es.eigenvectors() << std::endl;
Thank you for any hints or advice on that topic.
Best,
Susanne