Package org.apache.commons.math3.linear

# Class SingularValueDecomposition

java.lang.Object
org.apache.commons.math3.linear.SingularValueDecomposition

public class SingularValueDecomposition extends Object
Calculates the compact Singular Value Decomposition of a matrix.

The Singular Value Decomposition of matrix A is a set of three matrices: U, Σ and V such that A = U × Σ × VT. Let A be a m × n matrix, then U is a m × p orthogonal matrix, Σ is a p × p diagonal matrix with positive or null elements, V is a p × n orthogonal matrix (hence VT is also orthogonal) where p=min(m,n).

This class is similar to the class with similar name from the JAMA library, with the following changes:

- the `norm2` method which has been renamed as `getNorm`,
- the `cond` method which has been renamed as `getConditionNumber`,
- the `rank` method which has been renamed as `getRank`,
- a `getUT` method has been added,
- a `getVT` method has been added,
- a `getSolver` method has been added,
- a `getCovariance` method has been added.

Since:
  2.0 (changed to concrete class in 3.0)
See Also:
  - MathWorld
  - Wikipedia

## Constructor Summary

Constructors
Constructor
Description
`SingularValueDecomposition(RealMatrix matrix)`
Calculates the compact Singular Value Decomposition of the given matrix.

## Method Summary

Modifier and Type
Method
Description
`double`
`getConditionNumber()`
Return the condition number of the matrix.
`RealMatrix`
`getCovariance(double minSingularValue)`
Returns the n × n covariance matrix.
`double`
`getInverseConditionNumber()`
Computes the inverse of the condition number.
`double`
`getNorm()`
Returns the L2 norm of the matrix.
`int`
`getRank()`
Return the effective numerical matrix rank.
`RealMatrix`
`getS()`
Returns the diagonal matrix Σ of the decomposition.
`double[]`
`getSingularValues()`
Returns the diagonal elements of the matrix Σ of the decomposition.
`DecompositionSolver`
`getSolver()`
Get a solver for finding the A × X = B solution in least square sense.
`RealMatrix`
`getU()`
Returns the matrix U of the decomposition.
`RealMatrix`
`getUT()`
Returns the transpose of the matrix U of the decomposition.
`RealMatrix`
`getV()`
Returns the matrix V of the decomposition.
`RealMatrix`
`getVT()`
Returns the transpose of the matrix V of the decomposition.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### SingularValueDecomposition

public SingularValueDecomposition(RealMatrix matrix)
Calculates the compact Singular Value Decomposition of the given matrix.

Parameters:
  `matrix` - Matrix to decompose.

## Method Details

### getU

public RealMatrix getU()
Returns the matrix U of the decomposition.

U is an orthogonal matrix, i.e. its transpose is also its inverse.

Returns:
  the U matrix
See Also:
  - `getUT()`

### getUT

public RealMatrix getUT()
Returns the transpose of the matrix U of the decomposition.

U is an orthogonal matrix, i.e. its transpose is also its inverse.

Returns:
  the U matrix (or null if decomposed matrix is singular)
See Also:
  - `getU()`

### getS

public RealMatrix getS()
Returns the diagonal matrix Σ of the decomposition.

Σ is a diagonal matrix. The singular values are provided in non-increasing order, for compatibility with Jama.

Returns:
  the Σ matrix

### getSingularValues

public double[] getSingularValues()
Returns the diagonal elements of the matrix Σ of the decomposition.

The singular values are provided in non-increasing order, for compatibility with Jama.

Returns:
  the diagonal elements of the Σ matrix

### getV

public RealMatrix getV()
Returns the matrix V of the decomposition.

V is an orthogonal matrix, i.e. its transpose is also its inverse.

Returns:
  the V matrix (or null if decomposed matrix is singular)
See Also:
  - `getVT()`

### getVT

public RealMatrix getVT()
Returns the transpose of the matrix V of the decomposition.

V is an orthogonal matrix, i.e. its transpose is also its inverse.

Returns:
  the V matrix (or null if decomposed matrix is singular)
See Also:
  - `getV()`

### getCovariance

public RealMatrix getCovariance(double minSingularValue)
Returns the n × n covariance matrix.

The covariance matrix is V × J × VT where J is the diagonal matrix of the inverse of the squares of the singular values.

Parameters:
  `minSingularValue` - value below which singular values are ignored (a 0 or negative value implies all singular value will be used)
Returns:
  covariance matrix
Throws:
  `IllegalArgumentException` - if minSingularValue is larger than the largest singular value, meaning all singular values are ignored

### getNorm

public double getNorm()
Returns the L2 norm of the matrix.

The L2 norm is max(|A × u|2 / |u|2), where |.|2 denotes the vectorial 2-norm (i.e. the traditional euclidian norm).

Returns:
  norm

### getConditionNumber

public double getConditionNumber()
Return the condition number of the matrix.

Returns:
  condition number of the matrix

### getInverseConditionNumber

public double getInverseConditionNumber()
Computes the inverse of the condition number. In cases of rank deficiency, the `condition number` will become undefined.

Returns:
  the inverse of the condition number.

### getRank

public int getRank()
Return the effective numerical matrix rank.

The effective numerical rank is the number of non-negligible singular values. The threshold used to identify non-negligible terms is max(m,n) × ulp(s1) where ulp(s1) is the least significant bit of the largest singular value.

Returns:
  effective numerical matrix rank

### getSolver

public DecompositionSolver getSolver()
Get a solver for finding the A × X = B solution in least square sense.

Returns:
  a solver