diff options
author | Gael Guennebaud <g.gael@free.fr> | 2011-07-21 19:07:52 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2011-07-21 19:07:52 +0200 |
commit | 26d7dad1389ca3eb46127dbe8c76c8359e6ded4b (patch) | |
tree | 3556d22587030e35e1ec222150219106291ed9b8 /test/eigensolver_selfadjoint.cpp | |
parent | 22bff949c898e7c340a415d771145c0bd22317d6 (diff) |
add a computeDirect method to SelfAdjointEigenSolver for fast eigen decomposition
Diffstat (limited to 'test/eigensolver_selfadjoint.cpp')
-rw-r--r-- | test/eigensolver_selfadjoint.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp index 2078b93bc..a98f1dbf8 100644 --- a/test/eigensolver_selfadjoint.cpp +++ b/test/eigensolver_selfadjoint.cpp @@ -59,6 +59,8 @@ template<typename MatrixType> void selfadjointeigensolver(const MatrixType& m) symmB.template triangularView<StrictlyUpper>().setZero(); SelfAdjointEigenSolver<MatrixType> eiSymm(symmA); + SelfAdjointEigenSolver<MatrixType> eiDirect; + eiDirect.computeDirect(symmA); // generalized eigen pb GeneralizedSelfAdjointEigenSolver<MatrixType> eiSymmGen(symmA, symmB); @@ -112,11 +114,16 @@ template<typename MatrixType> void selfadjointeigensolver(const MatrixType& m) VERIFY((symmA.template selfadjointView<Lower>() * eiSymm.eigenvectors()).isApprox( eiSymm.eigenvectors() * eiSymm.eigenvalues().asDiagonal(), largerEps)); VERIFY_IS_APPROX(symmA.template selfadjointView<Lower>().eigenvalues(), eiSymm.eigenvalues()); + + VERIFY_IS_EQUAL(eiDirect.info(), Success); + VERIFY((symmA.template selfadjointView<Lower>() * eiDirect.eigenvectors()).isApprox( + eiDirect.eigenvectors() * eiDirect.eigenvalues().asDiagonal(), largerEps)); + VERIFY_IS_APPROX(symmA.template selfadjointView<Lower>().eigenvalues(), eiDirect.eigenvalues()); SelfAdjointEigenSolver<MatrixType> eiSymmNoEivecs(symmA, false); VERIFY_IS_EQUAL(eiSymmNoEivecs.info(), Success); VERIFY_IS_APPROX(eiSymm.eigenvalues(), eiSymmNoEivecs.eigenvalues()); - + // generalized eigen problem Ax = lBx eiSymmGen.compute(symmA, symmB,Ax_lBx); VERIFY_IS_EQUAL(eiSymmGen.info(), Success); |