diff options
author | Gael Guennebaud <g.gael@free.fr> | 2009-07-20 13:44:52 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2009-07-20 13:44:52 +0200 |
commit | a012aecbc43669123cf3abab2ceb1561cd5aaa92 (patch) | |
tree | a4b47d672fff26d7b137caea1c9f1373092df1be | |
parent | 4375c043ace44973d077bbe7b8ea1fb8ebf419a6 (diff) |
bugfix in SVD
-rw-r--r-- | Eigen/src/SVD/SVD.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/Eigen/src/SVD/SVD.h b/Eigen/src/SVD/SVD.h index f9f9feb89..b68d1c834 100644 --- a/Eigen/src/SVD/SVD.h +++ b/Eigen/src/SVD/SVD.h @@ -125,7 +125,7 @@ template<typename MatrixType> class SVD { return (b >= Scalar(0.0) ? ei_abs(a) : -ei_abs(a)); } - + protected: /** \internal */ MatrixUType m_matU; @@ -254,11 +254,14 @@ void SVD<MatrixType>::compute(const MatrixType& matrix) if (g != Scalar(0.0)) { g = Scalar(1.0)/g; - for (j=l; j<n; j++) + if (m-l) { - s = A.col(i).end(m-l).dot(A.col(j).end(m-l)); - f = (s/A(i,i))*g; - A.col(j).end(m-i) += f * A.col(i).end(m-i); + for (j=l; j<n; j++) + { + s = A.col(i).end(m-l).dot(A.col(j).end(m-l)); + f = (s/A(i,i))*g; + A.col(j).end(m-i) += f * A.col(i).end(m-i); + } } A.col(i).end(m-i) *= g; } |