org.apache.commons.math3.linear

## Class LUDecomposition

- java.lang.Object
- - org.apache.commons.math3.linear.LUDecomposition

    public class LUDecomposition
    extends Object

Calculates the LUP-decomposition of a square matrix.

The LUP-decomposition of a matrix A consists of three matrices L, U and P that satisfy: P×A = L×U. L is lower triangular (with unit diagonal terms), U is upper triangular and P is a permutation matrix. All matrices are m×m.

As shown by the presence of the P matrix, this decomposition is implemented using partial pivoting.

This class is based on the class with similar name from the JAMA library.

- a `getP` method has been added,
- the `det` method has been renamed as `getDeterminant`,
- the `getDoublePivot` method has been removed (but the int based `getPivot` method has been kept),
- the `solve` and `isNonSingular` methods have been replaced by a `getSolver` method and the equivalent methods provided by the returned `DecompositionSolver`.

Since:
  2.0 (changed to concrete class in 3.0)
Version:
  $Id: LUDecomposition.java 1416643 2012-12-03 19:37:14Z tn $
See Also:
  MathWorld, Wikipedia

### Nested Class Summary

Nested Classes
`private static class` `LUDecomposition.Solver` Specialized solver.

### Field Summary

Fields
`private RealMatrix` `cachedL` Cached value of L.
`private RealMatrix` `cachedP` Cached value of P.
`private RealMatrix` `cachedU` Cached value of U.
`private static double` `DEFAULT_TOO_SMALL` Default bound to determine effective singularity in LU decomposition.
`private boolean` `even` Parity of the permutation associated with the LU decomposition.
`private double[][]` `lu` Entries of LU decomposition.
`private int[]` `pivot` Pivot permutation associated with LU decomposition.
`private boolean` `singular` Singularity indicator.

### Constructor Summary

Constructors
Constructor and Description
`LUDecomposition(RealMatrix matrix)` Calculates the LU-decomposition of the given matrix.
`LUDecomposition(RealMatrix matrix, double singularityThreshold)` Calculates the LU-decomposition of the given matrix.

### Method Summary

Methods
`double` `getDeterminant()` Return the determinant of the matrix
`RealMatrix` `getL()` Returns the matrix L of the decomposition.
`RealMatrix` `getP()` Returns the P rows permutation matrix.
`int[]` `getPivot()` Returns the pivot permutation vector.
`DecompositionSolver` `getSolver()` Get a solver for finding the A × X = B solution in exact linear sense.
`RealMatrix` `getU()` Returns the matrix U of the decomposition.

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

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

### Field Detail

#### DEFAULT_TOO_SMALL

    private static final double DEFAULT_TOO_SMALL

Default bound to determine effective singularity in LU decomposition.

See Also:
  Constant Field Values

#### lu

    private final double[][] lu

Entries of LU decomposition.

#### pivot

    private final int[] pivot

Pivot permutation associated with LU decomposition.

#### even

    private boolean even

Parity of the permutation associated with the LU decomposition.

#### singular

    private boolean singular

Singularity indicator.

#### cachedL

    private RealMatrix cachedL

Cached value of L.

#### cachedU

    private RealMatrix cachedU

Cached value of U.

#### cachedP

    private RealMatrix cachedP

Cached value of P.

### Constructor Detail

#### LUDecomposition

    public LUDecomposition(RealMatrix matrix)

Calculates the LU-decomposition of the given matrix. This constructor uses 1e-11 as default value for the singularity threshold.

Parameters:
  `matrix` - Matrix to decompose.
Throws:
  `NonSquareMatrixException` - if matrix is not square.

#### LUDecomposition

    public LUDecomposition(RealMatrix matrix,
                   double singularityThreshold)

Calculates the LU-decomposition of the given matrix.

Parameters:
  `matrix` - The matrix to decompose.
  `singularityThreshold` - threshold (based on partial row norm) under which a matrix is considered singular
Throws:
  `NonSquareMatrixException` - if matrix is not square

### Method Detail

#### getL

    public RealMatrix getL()

Returns the matrix L of the decomposition.

L is a lower-triangular matrix

Returns:
  the L matrix (or null if decomposed matrix is singular)

#### getU

    public RealMatrix getU()

Returns the matrix U of the decomposition.

U is an upper-triangular matrix

Returns:
  the U matrix (or null if decomposed matrix is singular)

#### getP

    public RealMatrix getP()

Returns the P rows permutation matrix.

P is a sparse matrix with exactly one element set to 1.0 in each row and each column, all other elements being set to 0.0.

The positions of the 1 elements are given by the `pivot permutation vector`.

Returns:
  the P rows permutation matrix (or null if decomposed matrix is singular)
See Also:
  `getPivot()`

#### getPivot

    public int[] getPivot()

Returns the pivot permutation vector.

Returns:
  the pivot permutation vector
See Also:
  `getP()`

#### getDeterminant

    public double getDeterminant()

Return the determinant of the matrix

Returns:
  determinant of the matrix

#### getSolver

    public DecompositionSolver getSolver()

Get a solver for finding the A × X = B solution in exact linear sense.

Returns:
  a solver