aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-07-20 13:44:52 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-07-20 13:44:52 +0200
commita012aecbc43669123cf3abab2ceb1561cd5aaa92 (patch)
treea4b47d672fff26d7b137caea1c9f1373092df1be
parent4375c043ace44973d077bbe7b8ea1fb8ebf419a6 (diff)
bugfix in SVD
-rw-r--r--Eigen/src/SVD/SVD.h13
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;
}