aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/determinant.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2008-04-26 20:28:27 +0000
committerGravatar Gael Guennebaud <g.gael@free.fr>2008-04-26 20:28:27 +0000
commit1ec2d21ca5a17aa865f8e311954b3addd9f10446 (patch)
tree3186398c69aee87abafe70e9f31ed49e1cbc957f /test/determinant.cpp
parentb4c974d0597546e255edb3758a0bc58515674692 (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.cpp29
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()