18 enum { Rows = MatrixType::RowsAtCompileTime, Cols = MatrixType::ColsAtCompileTime, Options = MatrixType::Options };
32 LeftPermutationVectorType lv;
34 LeftPermutationType lp(lv);
35 RightPermutationVectorType rv;
37 RightPermutationType rp(rv);
38 LeftTranspositionsType lt(lv);
39 RightTranspositionsType rt(rv);
52 m_permuted = m_original;
56 LeftPermutationType lpi;
61 VERIFY_IS_APPROX(lv.asPermutation().inverse() * m_permuted * rv.asPermutation().inverse(), m_original);
63 MapLeftPerm(lv.data(), lv.size()).inverse() * m_permuted * MapRightPerm(rv.data(), rv.size()).inverse(),
66 VERIFY((lp * lp.inverse()).toDenseMatrix().isIdentity());
67 VERIFY((lv.asPermutation() * lv.asPermutation().inverse()).toDenseMatrix().isIdentity());
69 (MapLeftPerm(lv.data(), lv.size()) * MapLeftPerm(lv.data(), lv.size()).inverse()).toDenseMatrix().isIdentity());
71 LeftPermutationVectorType lv2;
73 LeftPermutationType lp2(lv2);
75 VERIFY_IS_APPROX((lp * lp2).toDenseMatrix().
template cast<Scalar>(), lm * lm2);
76 VERIFY_IS_APPROX((lv.asPermutation() * lv2.asPermutation()).toDenseMatrix().template cast<Scalar>(), lm * lm2);
78 (MapLeftPerm(lv.data(), lv.size()) * MapLeftPerm(lv2.data(), lv2.size())).toDenseMatrix().template cast<Scalar>(),
81 LeftPermutationType identityp;
82 identityp.setIdentity(
rows);
86 m_permuted = m_original;
90 m_permuted = m_original;
94 m_permuted = m_original;
98 m_permuted = m_original;
104 Index i = internal::random<Index>(0,
rows - 1);
106 do j = internal::random<Index>(0,
rows - 1);
108 lp2.applyTranspositionOnTheLeft(
i,
j);
110 lm.row(
i).swap(lm.row(
j));
113 RightPermutationType rp2 = rp;
114 i = internal::random<Index>(0,
cols - 1);
115 do j = internal::random<Index>(0,
cols - 1);
117 rp2.applyTranspositionOnTheRight(
i,
j);
119 rm.col(
i).swap(rm.col(
j));
130 m_permuted = m_original;
139 m_permuted = m_original;
141 m_permuted = m_original;
142 VERIFY_IS_APPROX(m_permuted = lt.inverse() * m_permuted, lp.inverse() * m_original);
143 m_permuted = m_original;
145 m_permuted = m_original;
146 VERIFY_IS_APPROX(m_permuted = m_permuted * rt.inverse(), m_original * rt.inverse());
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
SCALAR Scalar
Definition: bench_gemm.cpp:45
Represents a sequence of transpositions (row/column interchange)
Definition: Transpositions.h:141
Definition: matrices.h:74
int * m
Definition: level2_cplx_impl.h:294
#define VERIFY(a)
Definition: main.h:362
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
void randomPermutationVector(PermutationVectorType &v, Index size)
Definition: random_matrix_helper.h:101
#define VERIFY_EVALUATION_COUNT(XPR, N)
Definition: test/sparse_product.cpp:28
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2