JScience v3.3

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

java.lang.Object
  extended by javolution.context.RealtimeObject
      extended by org.jscience.mathematics.vectors.LUDecomposition<F>
All Implemented Interfaces:
Realtime

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

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

Nested Class Summary
 
Nested classes/interfaces inherited from class javolution.context.RealtimeObject
RealtimeObject.Factory<T extends RealtimeObject>
 
Nested classes/interfaces inherited from interface javolution.context.Realtime
Realtime.ObjectSpace
 
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).
 FastTable<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.
 boolean move(Realtime.ObjectSpace os)
           
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 javolution.context.RealtimeObject
export, isLocal, moveHeap, preserve, toString, toText, unpreserve
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, 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 FastTable<Index> getPivots()
Returns the pivots elements of this decomposition.

Returns:
the row indices after permutation.

move

public boolean move(Realtime.ObjectSpace os)
Specified by:
move in interface Realtime
Overrides:
move in class RealtimeObject

JScience v3.3

Copyright © 2006 JScience.