JScience v4.3

org.jscience.mathematics.vector
Class LUDecomposition<F extends Field<F>>

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

public final class LUDecomposition<F extends Field<F>>
extends java.lang.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)).

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

Version:
3.3, January 2, 2007
Author:
Jean-Marie Dautelle
See Also:
Wikipedia: LU decomposition

Field Summary
static java.util.Comparator<Field> NUMERIC_COMPARATOR
          Holds the default comparator for pivoting.
 
Method Summary
 F determinant()
          Returns the determinant of the Matrix having this decomposition.
 DenseMatrix<F> getLower(F zero, F one)
          Returns the lower matrix decomposition (L) with diagonal elements equal to the multiplicative identity for F.
 DenseMatrix<F> getLU()
          Returns the lower/upper decomposition in one single matrix.
 SparseMatrix<F> getPermutation(F zero, F one)
          Returns the permutation matrix (P).
static java.util.Comparator<Field> getPivotComparator()
          Returns the local comparator used for pivoting or null if pivoting is not performed (default NUMERIC_COMPARATOR).
 javolution.util.FastTable<javolution.util.Index> getPivots()
          Returns the pivots elements of this decomposition.
 DenseMatrix<F> getUpper(F zero)
          Returns the upper matrix decomposition (U).
 DenseMatrix<F> inverse()
          Returns the solution X of the equation: A * X = Identity with this = A.lu() using back and forward substitutions.
static void setPivotComparator(java.util.Comparator<Field> cmp)
          Sets the local comparator used for pivoting or null to disable pivoting.
 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.
static
<F extends Field<F>>
LUDecomposition<F>
valueOf(Matrix<F> source)
          Returns the lower/upper decomposition of the specified matrix.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NUMERIC_COMPARATOR

public static final java.util.Comparator<Field> NUMERIC_COMPARATOR
Holds the default comparator for pivoting.

Method Detail

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(java.util.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 java.util.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.

JScience v4.3

Copyright © 2006 JScience.