aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/cholesky.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2010-06-09 14:01:06 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2010-06-09 14:01:06 +0200
commite242ac9345e728d8e347bb0d48497891e3891276 (patch)
treeb6d2941fc5b0a4434407d7f60297532cd92905c7 /test/cholesky.cpp
parent201bd253ad5df543d10396bdde3a56d8ebd3400e (diff)
fix LDLT, now it really only uses a given triangular part!
Diffstat (limited to 'test/cholesky.cpp')
-rw-r--r--test/cholesky.cpp44
1 files changed, 24 insertions, 20 deletions
diff --git a/test/cholesky.cpp b/test/cholesky.cpp
index 4cc09ec05..666cee20f 100644
--- a/test/cholesky.cpp
+++ b/test/cholesky.cpp
@@ -121,14 +121,18 @@ template<typename MatrixType> void cholesky(const MatrixType& m)
VERIFY_IS_APPROX(symm * matX, matB);
}
- int sign = ei_random<int>()%2 ? 1 : -1;
-
- if(sign == -1)
+ // LDLT
{
- symm = -symm; // test a negative matrix
- }
+ int sign = ei_random<int>()%2 ? 1 : -1;
+
+ if(sign == -1)
+ {
+ symm = -symm; // test a negative matrix
+ }
+
+ SquareMatrixType symmUp = symm.template triangularView<Upper>();
+ SquareMatrixType symmLo = symm.template triangularView<Lower>();
- {
LDLT<SquareMatrixType,Lower> ldltlo(symmLo);
VERIFY_IS_APPROX(symm, ldltlo.reconstructedMatrix());
vecX = ldltlo.solve(vecB);
@@ -143,20 +147,20 @@ template<typename MatrixType> void cholesky(const MatrixType& m)
matX = ldltup.solve(matB);
VERIFY_IS_APPROX(symm * matX, matB);
-// if(MatrixType::RowsAtCompileTime==Dynamic)
-// {
-// // note : each inplace permutation requires a small temporary vector (mask)
-//
-// // check inplace solve
-// matX = matB;
-// VERIFY_EVALUATION_COUNT(matX = ldltlo.solve(matX), 0);
-// VERIFY_IS_APPROX(matX, ldltlo.solve(matB).eval());
-//
-//
-// matX = matB;
-// VERIFY_EVALUATION_COUNT(matX = ldltup.solve(matX), 0);
-// VERIFY_IS_APPROX(matX, ldltup.solve(matB).eval());
-// }
+ if(MatrixType::RowsAtCompileTime==Dynamic)
+ {
+ // note : each inplace permutation requires a small temporary vector (mask)
+
+ // check inplace solve
+ matX = matB;
+ VERIFY_EVALUATION_COUNT(matX = ldltlo.solve(matX), 0);
+ VERIFY_IS_APPROX(matX, ldltlo.solve(matB).eval());
+
+
+ matX = matB;
+ VERIFY_EVALUATION_COUNT(matX = ldltup.solve(matX), 0);
+ VERIFY_IS_APPROX(matX, ldltup.solve(matB).eval());
+ }
}
}