aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorGravatar Desire NUENTSA <desire.nuentsa_wakam@inria.fr>2013-07-18 10:32:31 +0200
committerGravatar Desire NUENTSA <desire.nuentsa_wakam@inria.fr>2013-07-18 10:32:31 +0200
commit736fe99fbfe4bf7d50062b8ce16982ccbd93efe3 (patch)
treeb2bb9114482a5b2f7b6893e32f4dc4b955617ed5 /test
parent6fab4012a36ebbc307ef29b7a7d1a9cb606fa67d (diff)
Fix bug #326 : expose tridiagonal eigensolver to end-users through ComputeFromTridiagonal()
Diffstat (limited to 'test')
-rw-r--r--test/eigensolver_selfadjoint.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/test/eigensolver_selfadjoint.cpp b/test/eigensolver_selfadjoint.cpp
index 5c6ecd875..06a6a8654 100644
--- a/test/eigensolver_selfadjoint.cpp
+++ b/test/eigensolver_selfadjoint.cpp
@@ -99,6 +99,15 @@ template<typename MatrixType> void selfadjointeigensolver(const MatrixType& m)
// FIXME tridiag.matrixQ().adjoint() does not work
VERIFY_IS_APPROX(MatrixType(symmA.template selfadjointView<Lower>()), tridiag.matrixQ() * tridiag.matrixT().eval() * MatrixType(tridiag.matrixQ()).adjoint());
+ // Test computation of eigenvalues from tridiagonal matrix
+ if(rows > 1)
+ {
+ SelfAdjointEigenSolver<MatrixType> eiSymmTridiag;
+ eiSymmTridiag.computeFromTridiagonal(tridiag.matrixT().diagonal(), tridiag.matrixT().diagonal(-1), ComputeEigenvectors);
+ VERIFY_IS_APPROX(eiSymm.eigenvalues(), eiSymmTridiag.eigenvalues());
+ VERIFY_IS_APPROX(tridiag.matrixT(), eiSymmTridiag.eigenvectors().real() * eiSymmTridiag.eigenvalues().asDiagonal() * eiSymmTridiag.eigenvectors().real().transpose());
+ }
+
if (rows > 1)
{
// Test matrix with NaN