diff options
author | Gael Guennebaud <g.gael@free.fr> | 2017-01-31 14:22:42 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2017-01-31 14:22:42 +0100 |
commit | 53026d29d41e81065b28631445e8eb5c4044c187 (patch) | |
tree | 1f38ee49f72cb17a89711fb0c4fe6160945bb986 /Eigen/src/Eigenvalues/RealSchur.h | |
parent | 63de19c0004933c7b2b1e418292b9f2ae6c138f4 (diff) |
bug #478: fix regression in the eigen decomposition of zero matrices.
Diffstat (limited to 'Eigen/src/Eigenvalues/RealSchur.h')
-rw-r--r-- | Eigen/src/Eigenvalues/RealSchur.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/Eigen/src/Eigenvalues/RealSchur.h b/Eigen/src/Eigenvalues/RealSchur.h index d6a339f07..f5c86041d 100644 --- a/Eigen/src/Eigenvalues/RealSchur.h +++ b/Eigen/src/Eigenvalues/RealSchur.h @@ -248,12 +248,24 @@ template<typename MatrixType> template<typename InputType> RealSchur<MatrixType>& RealSchur<MatrixType>::compute(const EigenBase<InputType>& matrix, bool computeU) { + const Scalar considerAsZero = (std::numeric_limits<Scalar>::min)(); + eigen_assert(matrix.cols() == matrix.rows()); Index maxIters = m_maxIters; if (maxIters == -1) maxIters = m_maxIterationsPerRow * matrix.rows(); Scalar scale = matrix.derived().cwiseAbs().maxCoeff(); + if(scale<considerAsZero) + { + m_matT.setZero(matrix.rows(),matrix.cols()); + if(computeU) + m_matU.setIdentity(matrix.rows(),matrix.cols()); + m_info = Success; + m_isInitialized = true; + m_matUisUptodate = computeU; + return *this; + } // Step 1. Reduce to Hessenberg form m_hess.compute(matrix.derived()/scale); |