public class SVD
extends java.lang.Object
For an m-by-n matrix A with m ≥ n, the singular value decomposition is an m-by-n orthogonal matrix U, an n-by-n diagonal matrix Σ, and an n-by-n orthogonal matrix V so that A = U*Σ*V'.
For m < n, only the first m columns of V are computed and Σ is m-by-m.
The singular values, σk = Σkk, are ordered so that σ0 ≥ σ1 ≥ ... ≥ σn-1.
The singular value decompostion always exists. The matrix condition number and the effective numerical rank can be computed from this decomposition.
SVD is a very powerful technique for dealing with sets of equations or matrices that are either singular or else numerically very close to singular. In many cases where Gaussian elimination and LU decomposition fail to give satisfactory results, SVD will diagnose precisely what the problem is. SVD is also the method of choice for solving most linear least squares problems.
Applications which employ the SVD include computing the pseudoinverse, least squares fitting of data, matrix approximation, and determining the rank, range and null space of a matrix. The SVD is also applied extensively to the study of linear inverse problems, and is useful in the analysis of regularization methods such as that of Tikhonov. It is widely used in statistics where it is related to principal component analysis. Yet another usage is latent semantic indexing in natural language text processing.
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
full
Is this a full decomposition?
|
protected int |
m
The number of rows.
|
protected int |
n
The number of columns.
|
protected double[] |
s
Array for internal storage of singular values.
|
protected double |
tol
Threshold of estimated roundoff.
|
protected DenseMatrix |
U
Arrays for internal storage of left singular vectors U.
|
protected DenseMatrix |
V
Arrays for internal storage of right singular vectors V.
|
| Constructor and Description |
|---|
SVD(DenseMatrix U,
DenseMatrix V,
double[] s)
Constructor.
|
| Modifier and Type | Method and Description |
|---|---|
Cholesky |
CholeskyOfAtA()
Returns the Cholesky decomposition of A'A.
|
double |
condition()
Returns the L2 norm condition number, which is max(S) / min(S).
|
DenseMatrix |
getS()
Returns the diagonal matrix of singular values
|
double[] |
getSingularValues()
Returns the one-dimensional array of singular values, ordered by
from largest to smallest.
|
DenseMatrix |
getU()
Returns the left singular vectors
|
DenseMatrix |
getV()
Returns the right singular vectors
|
double |
norm()
Returns the L2 matrix norm.
|
int |
nullity()
Returns the dimension of null space.
|
DenseMatrix |
nullspace()
Returns a matrix of which columns give an orthonormal basis for the null space.
|
DenseMatrix |
range()
Returns a matrix of which columns give an orthonormal basis for the range space.
|
int |
rank()
Returns the effective numerical matrix rank.
|
void |
solve(DenseMatrix B)
Solve the least squares A * X = B.
|
void |
solve(double[] b,
double[] x)
Solve the least squares A*x = b.
|
protected DenseMatrix U
protected DenseMatrix V
protected double[] s
protected boolean full
protected int m
protected int n
protected double tol
public SVD(DenseMatrix U, DenseMatrix V, double[] s)
public DenseMatrix getU()
public DenseMatrix getV()
public double[] getSingularValues()
public DenseMatrix getS()
public double norm()
public int rank()
public int nullity()
public double condition()
public DenseMatrix range()
public DenseMatrix nullspace()
public Cholesky CholeskyOfAtA()
public void solve(double[] b,
double[] x)
b - right hand side of linear system.x - the output solution vector that minimizes the L2 norm of Q*R*x - b.java.lang.RuntimeException - if matrix is rank deficient.public void solve(DenseMatrix B)
B - right hand side of linear system. B will be overwritten with
the solution matrix on output.java.lang.RuntimeException - Matrix is rank deficient.