2013-01-09 207 views
0

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

回答

3
在本徵

transposeInPlace()被聲明爲void。因此,您不能在矩陣的總和中使用該方法的結果,因爲結果根本不是矩陣。

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

代替。

1

其實,

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

的伎倆