特征中的对称矩阵

时间:2013-01-09 15:52:35

标签: c++ eigen

我有一个下三角矩阵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>]

2 个答案:

答案 0 :(得分:3)

在Eigen中,transposeInPlace()被声明为void。因此,您不能在矩阵之和中使用该方法的结果,因为结果根本不是矩阵。

待办事项

V = U;
V.transposeInPlace();
U += V;

代替。

答案 1 :(得分:1)

实际上,

U+=U.transpose().eval();
return(U);

诀窍