我有一个下三角矩阵M(严格,对角线上有0)。
我希望有效地将其转换为对称矩阵。
(例如,我想做M<-M+M'
)。我正在使用Eigen。
我的问题是,我正在做:
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>]
答案 0 :(得分:3)
在Eigen中,transposeInPlace()
被声明为void
。因此,您不能在矩阵之和中使用该方法的结果,因为结果根本不是矩阵。
待办事项
V = U;
V.transposeInPlace();
U += V;
代替。
答案 1 :(得分:1)
实际上,
U+=U.transpose().eval();
return(U);
诀窍