Package elki.math.linearalgebra
Class SingularValueDecomposition
- java.lang.Object
-
- elki.math.linearalgebra.SingularValueDecomposition
-
public class SingularValueDecomposition extends java.lang.ObjectSingular Value Decomposition.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 S, and an n-by-n orthogonal matrix V so that A = U*S*V'.
The singular values, sigma[k] = S[k][k], are ordered so that sigma[0] >= sigma[1] >= ... >= sigma[n-1].
The singular value decomposition always exists, so the constructor will never fail. The matrix condition number and the effective numerical rank can be computed from this decomposition.
- Since:
- 0.1
- Author:
- Arthur Zimek
-
-
Field Summary
Fields Modifier and Type Field Description private intmRow and column dimensions.private intnRow and column dimensions.private double[]sArray for internal storage of singular values.private double[][]UArrays for internal storage of U and V.private double[][]VArrays for internal storage of U and V.
-
Constructor Summary
Constructors Constructor Description SingularValueDecomposition(double[][] Arg)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description doublecond()Two norm condition numberprivate intconvergence(int k, int pp, boolean wantu, boolean wantv)private voiddeflate(double[] e, int p, int k, boolean wantv)private voidgenerateU(int nu, int nct)private voidgenerateV(int nu, double[] e, int nrt)double[][]getS()Return the diagonal matrix of singular valuesdouble[]getSingularValues()Return the one-dimensional array of singular valuesdouble[][]getU()Return the left singular vectorsdouble[][]getV()Return the right singular vectorsdoublenorm2()Two normprivate voidqrStep(double[] e, int p, int k, boolean wantu, boolean wantv)intrank()Effective numerical matrix rankprivate voidsplit(double[] e, int p, int k, boolean wantu)
-
-
-
Method Detail
-
generateU
private void generateU(int nu, int nct)
-
generateV
private void generateV(int nu, double[] e, int nrt)
-
deflate
private void deflate(double[] e, int p, int k, boolean wantv)
-
split
private void split(double[] e, int p, int k, boolean wantu)
-
qrStep
private void qrStep(double[] e, int p, int k, boolean wantu, boolean wantv)
-
convergence
private int convergence(int k, int pp, boolean wantu, boolean wantv)
-
getU
public double[][] getU()
Return the left singular vectors- Returns:
- U
-
getV
public double[][] getV()
Return the right singular vectors- Returns:
- V
-
getSingularValues
public double[] getSingularValues()
Return the one-dimensional array of singular values- Returns:
- diagonal of S.
-
getS
public double[][] getS()
Return the diagonal matrix of singular values- Returns:
- S
-
norm2
public double norm2()
Two norm- Returns:
- max(S)
-
cond
public double cond()
Two norm condition number- Returns:
- max(S)/min(S)
-
rank
public int rank()
Effective numerical matrix rank- Returns:
- Number of non-negligible singular values.
-
-