diff --git a/Eigen/src/Cholesky/LLT.h b/Eigen/src/Cholesky/LLT.h index 53e97cd3f..4527067a8 100644 --- a/Eigen/src/Cholesky/LLT.h +++ b/Eigen/src/Cholesky/LLT.h @@ -116,7 +116,7 @@ template class LLT bool m_isInitialized; }; -template +template bool ei_inplace_llt_lo(MatrixType& mat) { typedef typename MatrixType::Scalar Scalar; @@ -157,7 +157,7 @@ bool ei_inplace_llt_lo(MatrixType& mat) return true; } -template +template bool ei_inplace_llt_up(MatrixType& mat) { typedef typename MatrixType::Scalar Scalar; diff --git a/Eigen/src/Core/MatrixBase.h b/Eigen/src/Core/MatrixBase.h index 309661f67..cfa41978e 100644 --- a/Eigen/src/Core/MatrixBase.h +++ b/Eigen/src/Core/MatrixBase.h @@ -258,8 +258,10 @@ template class MatrixBase /** \internal the return type of MatrixBase::imag() */ typedef CwiseUnaryView, Derived> NonConstImagReturnType; /** \internal the return type of MatrixBase::adjoint() */ - typedef Eigen::Transpose::type> > - AdjointReturnType; + typedef typename ei_meta_if::IsComplex, + CwiseUnaryOp, NestByValue > >, + Transpose + >::ret AdjointReturnType; /** \internal the return type of MatrixBase::eigenvalues() */ typedef Matrix::Scalar>::Real, ei_traits::ColsAtCompileTime, 1> EigenvaluesReturnType; /** \internal expression tyepe of a column */ diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h index 39b211fa1..0652eb615 100644 --- a/Eigen/src/Core/Product.h +++ b/Eigen/src/Core/Product.h @@ -697,7 +697,8 @@ struct ei_cache_friendly_product_selector template inline Derived& @@ -710,7 +711,8 @@ MatrixBase::operator+=(const Flagged template inline Derived& @@ -723,6 +725,8 @@ MatrixBase::operator-=(const Flagged template inline Derived& MatrixBase::lazyAssign(const Product& product) diff --git a/Eigen/src/Core/Transpose.h b/Eigen/src/Core/Transpose.h index c5e52d1dd..65127d175 100644 --- a/Eigen/src/Core/Transpose.h +++ b/Eigen/src/Core/Transpose.h @@ -181,7 +181,7 @@ template inline const typename MatrixBase::AdjointReturnType MatrixBase::adjoint() const { - return conjugate().nestByValue(); + return transpose().nestByValue(); } /*************************************************************************** diff --git a/Eigen/src/QR/SelfAdjointEigenSolver.h b/Eigen/src/QR/SelfAdjointEigenSolver.h index 70984efab..ff6b98aa1 100644 --- a/Eigen/src/QR/SelfAdjointEigenSolver.h +++ b/Eigen/src/QR/SelfAdjointEigenSolver.h @@ -259,11 +259,11 @@ compute(const MatrixType& matA, const MatrixType& matB, bool computeEigenvectors // compute C = inv(L) A inv(L') MatrixType matC = matA; - cholB.matrixL().solveTriangularInPlace(matC); + cholB.matrixL().solveInPlace(matC); // FIXME since we currently do not support A * inv(L'), let's do (inv(L) A')' : - matC = matC.adjoint().eval(); - cholB.matrixL().template marked().solveTriangularInPlace(matC); - matC = matC.adjoint().eval(); + matC.adjointInPlace(); + cholB.matrixL().solveInPlace(matC); + matC.adjointInPlace(); // this version works too: // matC = matC.transpose(); // cholB.matrixL().conjugate().template marked().solveTriangularInPlace(matC); @@ -277,7 +277,7 @@ compute(const MatrixType& matA, const MatrixType& matB, bool computeEigenvectors if (computeEigenvectors) { // transform back the eigen vectors: evecs = inv(U) * evecs - cholB.matrixL().adjoint().template marked().solveTriangularInPlace(m_eivec); + cholB.matrixU().solveInPlace(m_eivec); for (int i=0; i