I have a lower triangular matrix M (strict, with 0 on the diagonal).
I want to turn this unto a symmetric matrix, efficiently.
(e.g. i want to do M<-M+M'). I’m using Eigen.
My problem, is i’m doing:
U=U+U.transpose();
but reading the docs i have the feeling that, perhaps,
i should be taking advantage of some functions such
as .noalias() and/or .transposeInPlace(), but the
obvious candidate:
U+=U.transposeInPlace();
gives an error.
EDIT:
here is the error message:
.cpp:210:24: note: candidates are:
/eigen/Eigen/src/Core/MatrixBase.h:183:14: note: template<class OtherDerived> Derived& Eigen::MatrixBase::operator+=(const Eigen::MatrixBase<OtherDerived>&) [with OtherDerived = OtherDerived, Derived = Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001>]
/eigen/Eigen/src/Core/MatrixBase.h:517:46: note: template<class OtherDerived> Derived& Eigen::MatrixBase::operator+=(const Eigen::ArrayBase<OtherDerived>&) [with OtherDerived = OtherDerived, Derived = Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001>]
/eigen/Eigen/src/Core/DenseBase.h:266:14: note: template<class OtherDerived> Derived& Eigen::DenseBase::operator+=(const Eigen::EigenBase<OtherDerived>&) [with OtherDerived = OtherDerived, Derived = Eigen::Matrix<float, -0x00000000000000001, -0x00000000000000001>]
in Eigen,
transposeInPlace()is declared asvoid. Thus, you can’t use the result of that method in a sum of matrices, because the result simply isn’t a matrix.Do
instead.