mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Enable CompleteOrthogonalDecomposition::pseudoInverse with non-square fixed-size matrices.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user