diff options
-rw-r--r-- | Eigen/src/Cholesky/LLT.h | 4 | ||||
-rw-r--r-- | Eigen/src/Core/MatrixBase.h | 6 | ||||
-rw-r--r-- | Eigen/src/Core/Product.h | 8 | ||||
-rw-r--r-- | Eigen/src/Core/Transpose.h | 2 | ||||
-rw-r--r-- | Eigen/src/QR/SelfAdjointEigenSolver.h | 10 |
5 files changed, 18 insertions, 12 deletions
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<typename MatrixType, int _UpLo> class LLT bool m_isInitialized; }; -template<typename MatrixType/*, int UpLo*/> +template<typename MatrixType> 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<typename MatrixType/*, int UpLo*/> +template<typename MatrixType> 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<typename Derived> class MatrixBase /** \internal the return type of MatrixBase::imag() */ typedef CwiseUnaryView<ei_scalar_imag_op<Scalar>, Derived> NonConstImagReturnType; /** \internal the return type of MatrixBase::adjoint() */ - typedef Eigen::Transpose<NestByValue<typename ei_cleantype<ConjugateReturnType>::type> > - AdjointReturnType; + typedef typename ei_meta_if<NumTraits<Scalar>::IsComplex, + CwiseUnaryOp<ei_scalar_conjugate_op<Scalar>, NestByValue<Eigen::Transpose<Derived> > >, + Transpose<Derived> + >::ret AdjointReturnType; /** \internal the return type of MatrixBase::eigenvalues() */ typedef Matrix<typename NumTraits<typename ei_traits<Derived>::Scalar>::Real, ei_traits<Derived>::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<ProductType,1,LhsOrder,LhsAccess,RhsCo {}; -/** \internal */ +/** \internal + * Overloaded to perform an efficient C += A*B */ template<typename Derived> template<typename Lhs,typename Rhs> inline Derived& @@ -710,7 +711,8 @@ MatrixBase<Derived>::operator+=(const Flagged<Product<Lhs,Rhs,CacheFriendlyProdu return derived(); } -/** \internal */ +/** \internal + * Overloaded to perform an efficient C -= A*B */ template<typename Derived> template<typename Lhs,typename Rhs> inline Derived& @@ -723,6 +725,8 @@ MatrixBase<Derived>::operator-=(const Flagged<Product<Lhs,Rhs,CacheFriendlyProdu return derived(); } +/** \internal + * Overloaded to perform an efficient C = A*B */ template<typename Derived> template<typename Lhs, typename Rhs> inline Derived& MatrixBase<Derived>::lazyAssign(const Product<Lhs,Rhs,CacheFriendlyProduct>& 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<typename Derived> inline const typename MatrixBase<Derived>::AdjointReturnType MatrixBase<Derived>::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<LowerTriangular>().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<LowerTriangular>().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<UpperTriangular>().solveTriangularInPlace(m_eivec); + cholB.matrixU().solveInPlace(m_eivec); for (int i=0; i<m_eivec.cols(); ++i) m_eivec.col(i) = m_eivec.col(i).normalized(); } |