aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
diff options
context:
space:
mode:
authorGravatar Sergey Popov <popov.sa@gmail.com>2013-01-12 12:07:49 +0100
committerGravatar Sergey Popov <popov.sa@gmail.com>2013-01-12 12:07:49 +0100
commit761b3bbb692c515a8c753bd64653b38986534216 (patch)
tree2904050e5d075b6038c36a416cdf0b8b5cc8d220 /Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
parent7262cf783c1b041dacda997c7bf67c9b4c1a2a02 (diff)
Fix bug #540: SelfAdjointEigenSolver improperly used the upper triangular part to extract the scaling factor.
Diffstat (limited to 'Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h')
-rw-r--r--Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
index fa7484a40..03c024927 100644
--- a/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
+++ b/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h
@@ -409,9 +409,10 @@ SelfAdjointEigenSolver<MatrixType>& SelfAdjointEigenSolver<MatrixType>
MatrixType& mat = m_eivec;
// map the matrix coefficients to [-1:1] to avoid over- and underflow.
- RealScalar scale = matrix.cwiseAbs().maxCoeff();
+ mat = matrix.template triangularView<Lower>();
+ RealScalar scale = mat.cwiseAbs().maxCoeff();
if(scale==RealScalar(0)) scale = RealScalar(1);
- mat = matrix / scale;
+ mat.template triangularView<Lower>() /= scale;
m_subdiag.resize(n-1);
internal::tridiagonalization_inplace(mat, diag, m_subdiag, computeEigenvectors);