diff options
author | Benoit Jacob <jacob.benoit.1@gmail.com> | 2009-12-09 12:43:25 -0500 |
---|---|---|
committer | Benoit Jacob <jacob.benoit.1@gmail.com> | 2009-12-09 12:43:25 -0500 |
commit | d2e44f263631981d9e547caafe36b1de5ba785f9 (patch) | |
tree | 574d7aff0554739bea2cede8dc706cd5cd8c7c4a /test/main.h | |
parent | f0315295e9ae2fd8afdc05d3e5b790b4660ffc58 (diff) |
* 4x4 inverse: revert to cofactors method
* inverse tests: use createRandomMatrixOfRank, use more strict precision
* tests: createRandomMatrixOfRank: support 1x1 matrices
* determinant: nest the xpr
* Minor: add comment
Diffstat (limited to 'test/main.h')
-rw-r--r-- | test/main.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/test/main.h b/test/main.h index 8bc71b3ae..06c17a9ae 100644 --- a/test/main.h +++ b/test/main.h @@ -353,13 +353,26 @@ void createRandomMatrixOfRank(int desired_rank, int rows, int cols, MatrixType& typedef Matrix<Scalar, Rows, Rows> MatrixAType; typedef Matrix<Scalar, Cols, Cols> MatrixBType; + if(desired_rank == 0) + { + m.setZero(rows,cols); + return; + } + + if(desired_rank == 1) + { + m = VectorType::Random(rows) * VectorType::Random(cols).transpose(); + return; + } + MatrixAType a = MatrixAType::Random(rows,rows); MatrixType d = MatrixType::Identity(rows,cols); MatrixBType b = MatrixBType::Random(cols,cols); // set the diagonal such that only desired_rank non-zero entries reamain const int diag_size = std::min(d.rows(),d.cols()); - d.diagonal().segment(desired_rank, diag_size-desired_rank) = VectorType::Zero(diag_size-desired_rank); + if(diag_size != desired_rank) + d.diagonal().segment(desired_rank, diag_size-desired_rank) = VectorType::Zero(diag_size-desired_rank); HouseholderQR<MatrixAType> qra(a); HouseholderQR<MatrixBType> qrb(b); |