diff options
author | Gael Guennebaud <g.gael@free.fr> | 2008-04-26 20:28:27 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2008-04-26 20:28:27 +0000 |
commit | 1ec2d21ca5a17aa865f8e311954b3addd9f10446 (patch) | |
tree | 3186398c69aee87abafe70e9f31ed49e1cbc957f /test/determinant.cpp | |
parent | b4c974d0597546e255edb3758a0bc58515674692 (diff) |
Fixed a couple of issues introduced in previous commits.
Added a test for Triangular.
Diffstat (limited to 'test/determinant.cpp')
-rw-r--r-- | test/determinant.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/test/determinant.cpp b/test/determinant.cpp index 974df58ef..26e53d46d 100644 --- a/test/determinant.cpp +++ b/test/determinant.cpp @@ -40,21 +40,32 @@ template<typename MatrixType> void nullDeterminant(const MatrixType& m) typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, MatrixType::ColsAtCompileTime> SquareMatrixType; typedef Matrix<Scalar, MatrixType::ColsAtCompileTime, 1> VectorType; - MatrixType d(rows, cols); + MatrixType dinv(rows, cols), dnotinv(rows, cols); - // build a ill-conditionned matrix with a nul determinant - d.col(0).setOnes(); - d.block(0,1, rows, cols-2).setRandom(); - d.col(cols-1).setOnes(); + dinv.col(0).setOnes(); + dinv.block(0,1, rows, cols-2).setRandom(); + + dnotinv.col(0).setOnes(); + dnotinv.block(0,1, rows, cols-2).setRandom(); + dnotinv.col(cols-1).setOnes(); for (int i=0 ; i<rows ; ++i) - d.row(i).block(0,1,1,cols-2) = d.row(i).block(0,1,1,cols-2).normalized(); + { + dnotinv.row(i).block(0,1,1,cols-2) = ei_random<Scalar>(99.999999,100.00000001)*dnotinv.row(i).block(0,1,1,cols-2).normalized(); + dnotinv(i,cols-1) = dnotinv.row(i).block(0,1,1,cols-2).norm2(); + dinv(i,cols-1) = dinv.row(i).block(0,1,1,cols-2).norm2(); + } + + SquareMatrixType invertibleCovarianceMatrix = dinv.transpose() * dinv; + SquareMatrixType notInvertibleCovarianceMatrix = dnotinv.transpose() * dnotinv; + + std::cout << notInvertibleCovarianceMatrix << "\n" << notInvertibleCovarianceMatrix.determinant() << "\n"; - SquareMatrixType covarianceMatrix = d.transpose() * d; + VERIFY_IS_APPROX(notInvertibleCovarianceMatrix.determinant(), Scalar(0)); -// std::cout << covarianceMatrix << "\n" << covarianceMatrix.determinant() << "\n"; + VERIFY(invertibleCovarianceMatrix.inverse().exists()); - VERIFY_IS_APPROX(covarianceMatrix.determinant(), Scalar(0)); + VERIFY(!notInvertibleCovarianceMatrix.inverse().exists()); } void EigenTest::testDeterminant() |