From 8603d80029581272a04f78959cb1636395fa47bc Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Thu, 9 Aug 2018 11:09:10 -0700 Subject: [PATCH 1/2] Cast diagonalSize() to Scalar before multiplication. Without this, automatic differentiation in Ceres breaks because Scalar is a custom type that does not support multiplication by Index. --- Eigen/src/LU/FullPivLU.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Eigen/src/LU/FullPivLU.h b/Eigen/src/LU/FullPivLU.h index 50d1bb41b..8541dfa02 100644 --- a/Eigen/src/LU/FullPivLU.h +++ b/Eigen/src/LU/FullPivLU.h @@ -53,7 +53,7 @@ template struct traits > * Output: \verbinclude class_FullPivLU.out * * This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism. - * + * * \sa MatrixBase::fullPivLu(), MatrixBase::determinant(), MatrixBase::inverse() */ template class FullPivLU @@ -320,7 +320,7 @@ template class FullPivLU return m_usePrescribedThreshold ? m_prescribedThreshold // this formula comes from experimenting (see "LU precision tuning" thread on the list) // and turns out to be identical to Higham's formula used already in LDLt. - : NumTraits::epsilon() * m_lu.diagonalSize(); + : NumTraits::epsilon() * Scalar(m_lu.diagonalSize()); } /** \returns the rank of the matrix of which *this is the LU decomposition. From bfc5091dd56a18e3f6ed1dd30509f45d0fba0828 Mon Sep 17 00:00:00 2001 From: Rasmus Munk Larsen Date: Thu, 9 Aug 2018 14:46:17 -0700 Subject: [PATCH 2/2] Cast to diagonalSize to RealScalar instead Scalar. --- Eigen/src/LU/FullPivLU.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Eigen/src/LU/FullPivLU.h b/Eigen/src/LU/FullPivLU.h index 8541dfa02..344ec8926 100644 --- a/Eigen/src/LU/FullPivLU.h +++ b/Eigen/src/LU/FullPivLU.h @@ -320,7 +320,7 @@ template class FullPivLU return m_usePrescribedThreshold ? m_prescribedThreshold // this formula comes from experimenting (see "LU precision tuning" thread on the list) // and turns out to be identical to Higham's formula used already in LDLt. - : NumTraits::epsilon() * Scalar(m_lu.diagonalSize()); + : NumTraits::epsilon() * RealScalar(m_lu.diagonalSize()); } /** \returns the rank of the matrix of which *this is the LU decomposition.