aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Cholesky/LLT.h4
-rw-r--r--Eigen/src/Core/MatrixBase.h6
-rw-r--r--Eigen/src/Core/Product.h8
-rw-r--r--Eigen/src/Core/Transpose.h2
-rw-r--r--Eigen/src/QR/SelfAdjointEigenSolver.h10
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();
}