【问题标题】:symmetric matrices in eigen特征中的对称矩阵
【发布时间】:2013-01-09 15:52:34
【问题描述】:

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

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

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

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

    改为。

    【讨论】:

      【解决方案2】:

      其实,

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

      成功了

      【讨论】:

        猜你喜欢
        • 2016-11-29
        • 2013-11-30
        • 1970-01-01
        • 2012-11-04
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        相关资源
        最近更新 更多