From c3bab0edb77e0e21e49e4eca279b5a70eb9b7d66 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Fri, 19 Jun 2009 18:50:22 +0200 Subject: [PATCH] fix #12, but the fix is not optimal, householder transformations need to be rethought in the complex case, see: http://download.tuxfamily.org/eigen/complex-householder.pdf --- Eigen/src/QR/Tridiagonalization.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h index 599786302..9ea39be71 100644 --- a/Eigen/src/QR/Tridiagonalization.h +++ b/Eigen/src/QR/Tridiagonalization.h @@ -201,6 +201,7 @@ void Tridiagonalization::_compute(MatrixType& matA, CoeffVectorType& // squared norm of the vector v skipping the first element RealScalar v1norm2 = matA.col(i).end(n-(i+2)).squaredNorm(); + // FIXME comparing against 1 if (ei_isMuchSmallerThan(v1norm2,static_cast(1))) { hCoeffs.coeffRef(i) = 0.; @@ -331,7 +332,8 @@ void Tridiagonalization::_compute(MatrixType& matA, CoeffVectorType& if (ei_real(v0)>=0.) beta = -beta; matA.col(i).coeffRef(i+1) = beta; - hCoeffs.coeffRef(i) = (beta - v0) / beta; + if(ei_isMuchSmallerThan(beta, Scalar(1))) hCoeffs.coeffRef(i) = Scalar(0); + else hCoeffs.coeffRef(i) = (beta - v0) / beta; } else {