From e242ac9345e728d8e347bb0d48497891e3891276 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 9 Jun 2010 14:01:06 +0200 Subject: fix LDLT, now it really only uses a given triangular part! --- test/cholesky.cpp | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'test/cholesky.cpp') 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 void cholesky(const MatrixType& m) VERIFY_IS_APPROX(symm * matX, matB); } - int sign = ei_random()%2 ? 1 : -1; - - if(sign == -1) + // LDLT { - symm = -symm; // test a negative matrix - } + int sign = ei_random()%2 ? 1 : -1; + + if(sign == -1) + { + symm = -symm; // test a negative matrix + } + + SquareMatrixType symmUp = symm.template triangularView(); + SquareMatrixType symmLo = symm.template triangularView(); - { LDLT ldltlo(symmLo); VERIFY_IS_APPROX(symm, ldltlo.reconstructedMatrix()); vecX = ldltlo.solve(vecB); @@ -143,20 +147,20 @@ template 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()); + } } } -- cgit v1.2.3