Class LUDecomposition<F extends Field<F>>

java.lang.Object
org.jscience.mathematics.vector.LUDecomposition<F>

public final class LUDecomposition<F extends Field<F>> extends Object

This class represents the decomposition of a matrix A into a product of a lower and upper triangular matrices, L and U respectively, such as A = P·L·U with P a permutation matrix.

This decomposition is typically used to resolve linear systems of equations (Gaussian elimination) or to calculate the determinant of a square Matrix (O(m³)).

Numerical stability is guaranteed through pivoting if the Field elements are numbers For others elements types, numerical stability can be ensured by setting the context-local pivot comparator (see setPivotComparator(java.util.Comparator<org.jscience.mathematics.structure.Field>)).

Pivoting can be disabled by setting the pivot comparator to null (P is then the matrix identity).

See Also:
  • Field Details

    • NUMERIC_COMPARATOR

      public static final Comparator<Field> NUMERIC_COMPARATOR
      Holds the default comparator for pivoting.
  • Method Details

    • valueOf

      public static <F extends Field<F>> LUDecomposition<F> valueOf(Matrix<F> source)
      Returns the lower/upper decomposition of the specified matrix.
      Parameters:
      source - the matrix for which the decomposition is calculated.
      Returns:
      the lower/upper decomposition of the specified matrix.
      Throws:
      DimensionException - if the specified matrix is not square.
    • setPivotComparator

      public static void setPivotComparator(Comparator<Field> cmp)
      Sets the local comparator used for pivoting or null to disable pivoting.
      Parameters:
      cmp - the comparator for pivoting or null.
    • getPivotComparator

      public static Comparator<Field> getPivotComparator()
      Returns the local comparator used for pivoting or null if pivoting is not performed (default NUMERIC_COMPARATOR).
      Returns:
      the comparator for pivoting or null.
    • solve

      public DenseMatrix<F> solve(Matrix<F> B)
      Returns the solution X of the equation: A * X = B with this = A.lu() using back and forward substitutions.
      Parameters:
      B - the input matrix.
      Returns:
      the solution X = (1 / A) * B.
      Throws:
      DimensionException - if the dimensions do not match.
    • inverse

      public DenseMatrix<F> inverse()
      Returns the solution X of the equation: A * X = Identity with this = A.lu() using back and forward substitutions.
      Returns:
      this.solve(Identity)
    • determinant

      public F determinant()
      Returns the determinant of the Matrix having this decomposition.
      Returns:
      the determinant of the matrix source.
    • getLower

      public DenseMatrix<F> getLower(F zero, F one)
      Returns the lower matrix decomposition (L) with diagonal elements equal to the multiplicative identity for F.
      Parameters:
      zero - the additive identity for F.
      one - the multiplicative identity for F.
      Returns:
      the lower matrix.
    • getUpper

      public DenseMatrix<F> getUpper(F zero)
      Returns the upper matrix decomposition (U).
      Parameters:
      zero - the additive identity for F.
      Returns:
      the upper matrix.
    • getPermutation

      public SparseMatrix<F> getPermutation(F zero, F one)
      Returns the permutation matrix (P).
      Parameters:
      zero - the additive identity for F.
      one - the multiplicative identity for F.
      Returns:
      the permutation matrix.
    • getLU

      public DenseMatrix<F> getLU()
      Returns the lower/upper decomposition in one single matrix.
      Returns:
      the lower/upper matrix merged in a single matrix.
    • getPivots

      public javolution.util.FastTable<javolution.util.Index> getPivots()
      Returns the pivots elements of this decomposition.
      Returns:
      the row indices after permutation.