mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-21 04:14:26 +08:00
Add support for dense ?= diagonal
This commit is contained in:
parent
b9d314ae19
commit
e1f1091fde
@ -326,6 +326,12 @@ struct Assignment<DstXprType, SrcXprType, Functor, Diagonal2Dense, Scalar>
|
|||||||
dst.setZero();
|
dst.setZero();
|
||||||
dst.diagonal() = src.diagonal();
|
dst.diagonal() = src.diagonal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void run(DstXprType &dst, const SrcXprType &src, const internal::add_assign_op<typename DstXprType::Scalar> &/*func*/)
|
||||||
|
{ dst.diagonal() += src.diagonal(); }
|
||||||
|
|
||||||
|
static void run(DstXprType &dst, const SrcXprType &src, const internal::sub_assign_op<typename DstXprType::Scalar> &/*func*/)
|
||||||
|
{ dst.diagonal() -= src.diagonal(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
@ -84,6 +84,13 @@ template<typename MatrixType> void diagonalmatrices(const MatrixType& m)
|
|||||||
|
|
||||||
VERIFY_IS_APPROX(m1 * (rdm1 * s1), (m1 * rdm1) * s1);
|
VERIFY_IS_APPROX(m1 * (rdm1 * s1), (m1 * rdm1) * s1);
|
||||||
VERIFY_IS_APPROX(m1 * (s1 * rdm1), (m1 * rdm1) * s1);
|
VERIFY_IS_APPROX(m1 * (s1 * rdm1), (m1 * rdm1) * s1);
|
||||||
|
|
||||||
|
// Diagonal to dense
|
||||||
|
sq_m1.setRandom();
|
||||||
|
sq_m2 = sq_m1;
|
||||||
|
VERIFY_IS_APPROX( (sq_m1 += (s1*v1).asDiagonal()), sq_m2 += (s1*v1).asDiagonal().toDenseMatrix() );
|
||||||
|
VERIFY_IS_APPROX( (sq_m1 -= (s1*v1).asDiagonal()), sq_m2 -= (s1*v1).asDiagonal().toDenseMatrix() );
|
||||||
|
VERIFY_IS_APPROX( (sq_m1 = (s1*v1).asDiagonal()), (s1*v1).asDiagonal().toDenseMatrix() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_diagonalmatrices()
|
void test_diagonalmatrices()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user