mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-05-05 18:24:06 +08:00
make SVD reuses applyJacobi
This commit is contained in:
parent
044dd0c1dd
commit
f5f2b222a3
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user