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 | |
parent | b4c974d0597546e255edb3758a0bc58515674692 (diff) |
Fixed a couple of issues introduced in previous commits.
Added a test for Triangular.
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/determinant.cpp | 29 | ||||
-rw-r--r-- | test/main.h | 3 |
3 files changed, 23 insertions, 10 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4a5ca235c..28395e6b2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,6 +7,7 @@ FIND_PACKAGE(Qt4 REQUIRED) INCLUDE_DIRECTORIES( ${QT_INCLUDE_DIR} ) SET(test_SRCS + triangular.cpp main.cpp basicstuff.cpp linearstructure.cpp 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() diff --git a/test/main.h b/test/main.h index 3aae7bc65..cab2cdc01 100644 --- a/test/main.h +++ b/test/main.h @@ -32,7 +32,7 @@ #include <ctime> #include <iostream> -#define DEFAULT_REPEAT 50 +#define DEFAULT_REPEAT 10 #ifndef EIGEN_NO_ASSERTION_CHECKING @@ -214,6 +214,7 @@ class EigenTest : public QObject void testMap(); void testCwiseops(); void testDeterminant(); + void testTriangular(); protected: int m_repeat; }; |