make SVD reuses applyJacobi

This commit is contained in:
Gael Guennebaud 2009-08-16 00:02:36 +02:00
parent 044dd0c1dd
commit f5f2b222a3

View File

@ -307,13 +307,7 @@ void SVD<MatrixType>::compute(const MatrixType& matrix)
h = Scalar(1.0)/h; h = Scalar(1.0)/h;
c = g*h; c = g*h;
s = -f*h; s = -f*h;
for (j=0; j<m; j++) V.applyJacobiOnTheRight(i,nm,c,s);
{
y = A(j,nm);
z = A(j,i);
A(j,nm) = y*c + z*s;
A(j,i) = z*c - y*s;
}
} }
} }
z = W[k]; z = W[k];
@ -346,6 +340,7 @@ void SVD<MatrixType>::compute(const MatrixType& matrix)
y = W[i]; y = W[i];
h = s*g; h = s*g;
g = c*g; g = c*g;
z = pythag(f,h); z = pythag(f,h);
rv1[j] = z; rv1[j] = z;
c = f/z; c = f/z;
@ -354,13 +349,8 @@ void SVD<MatrixType>::compute(const MatrixType& matrix)
g = g*c - x*s; g = g*c - x*s;
h = y*s; h = y*s;
y *= c; y *= c;
for (jj=0; jj<n; jj++) V.applyJacobiOnTheRight(i,j,c,s);
{
x = V(jj,j);
z = V(jj,i);
V(jj,j) = x*c + z*s;
V(jj,i) = z*c - x*s;
}
z = pythag(f,h); z = pythag(f,h);
W[j] = z; W[j] = z;
// Rotation can be arbitrary if z = 0. // Rotation can be arbitrary if z = 0.
@ -372,13 +362,7 @@ void SVD<MatrixType>::compute(const MatrixType& matrix)
} }
f = c*g + s*y; f = c*g + s*y;
x = c*y - s*g; x = c*y - s*g;
for (jj=0; jj<m; jj++) A.applyJacobiOnTheRight(i,j,c,s);
{
y = A(jj,j);
z = A(jj,i);
A(jj,j) = y*c + z*s;
A(jj,i) = z*c - y*s;
}
} }
rv1[l] = 0.0; rv1[l] = 0.0;
rv1[k] = f; rv1[k] = f;