У меня есть нижняя треугольная матрица M (строгая, с 0 по диагонали). Я хочу эффективно превратить это в симметричную матрицу. (например, я хочу сделать M<-M+M'
). Я использую Эйген.
Моя проблема, я делаю:
U=U+U.transpose();
но, читая документы, у меня чувство, что, возможно, мне следует воспользоваться преимуществами некоторых функций, таких как .noalias()
и/или .transposeInPlace()
, но очевидный кандидат:
U+=U.transposeInPlace();
дает ошибку.
РЕДАКТИРОВАТЬ:
вот сообщение об ошибке:
.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>]