1

下三角行列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>]
4

2 に答える 2

3

Eigen では、transposeInPlace()として宣言されていvoidます。したがって、結果は単に行列ではないため、行列の合計でそのメソッドの結果を使用することはできません。

行う

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

代わりは。

于 2013-01-09T16:16:07.290 に答える
2

実際、

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

トリックを行います

于 2013-01-13T10:36:51.080 に答える