Class LUDecomposition


  • public class LUDecomposition
    extends java.lang.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)
    See Also:
    MathWorld, Wikipedia
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  LUDecomposition.Solver
      Specialized solver.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      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 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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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