diff options
author | Gael Guennebaud <g.gael@free.fr> | 2019-11-13 21:16:53 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2019-11-13 21:16:53 +0100 |
commit | 8496f86f84a78e1d8b2424ad5048c5fdab37f58f (patch) | |
tree | 36590fde0fd271fcccc3c8a31a605dc2cdc44939 /test | |
parent | 002e5b6db6b89d3e2543a17f031121c7d97a2f33 (diff) |
Enable CompleteOrthogonalDecomposition::pseudoInverse with non-square fixed-size matrices.
Diffstat (limited to 'test')
-rw-r--r-- | test/permutationmatrices.cpp | 6 | ||||
-rw-r--r-- | test/qr_colpivoting.cpp | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/test/permutationmatrices.cpp b/test/permutationmatrices.cpp index a26b4ad45..d4b68b2d4 100644 --- a/test/permutationmatrices.cpp +++ b/test/permutationmatrices.cpp @@ -54,7 +54,11 @@ template<typename MatrixType> void permutationmatrices(const MatrixType& m) m_permuted = m_original; VERIFY_EVALUATION_COUNT(m_permuted = lp * m_permuted * rp, 1); VERIFY_IS_APPROX(m_permuted, lm*m_original*rm); - + + LeftPermutationType lpi; + lpi = lp.inverse(); + VERIFY_IS_APPROX(lpi*m_permuted,lp.inverse()*m_permuted); + VERIFY_IS_APPROX(lp.inverse()*m_permuted*rp.inverse(), m_original); VERIFY_IS_APPROX(lv.asPermutation().inverse()*m_permuted*rv.asPermutation().inverse(), m_original); VERIFY_IS_APPROX(MapLeftPerm(lv.data(),lv.size()).inverse()*m_permuted*MapRightPerm(rv.data(),rv.size()).inverse(), m_original); diff --git a/test/qr_colpivoting.cpp b/test/qr_colpivoting.cpp index a563b5470..06f16438f 100644 --- a/test/qr_colpivoting.cpp +++ b/test/qr_colpivoting.cpp @@ -70,10 +70,11 @@ void cod_fixedsize() { Cols = MatrixType::ColsAtCompileTime }; typedef typename MatrixType::Scalar Scalar; + typedef CompleteOrthogonalDecomposition<Matrix<Scalar, Rows, Cols> > COD; int rank = internal::random<int>(1, (std::min)(int(Rows), int(Cols)) - 1); Matrix<Scalar, Rows, Cols> matrix; createRandomPIMatrixOfRank(rank, Rows, Cols, matrix); - CompleteOrthogonalDecomposition<Matrix<Scalar, Rows, Cols> > cod(matrix); + COD cod(matrix); VERIFY(rank == cod.rank()); VERIFY(Cols - cod.rank() == cod.dimensionOfKernel()); VERIFY(cod.isInjective() == (rank == Rows)); @@ -90,6 +91,9 @@ void cod_fixedsize() { JacobiSVD<MatrixType> svd(matrix, ComputeFullU | ComputeFullV); Matrix<Scalar, Cols, Cols2> svd_solution = svd.solve(rhs); VERIFY_IS_APPROX(cod_solution, svd_solution); + + typename Inverse<COD>::PlainObject pinv = cod.pseudoInverse(); + VERIFY_IS_APPROX(cod_solution, pinv * rhs); } template<typename MatrixType> void qr() |