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<org.jscience.mathematics.structure.Field>)
).
Pivoting can be disabled by setting the pivot comparator
to null
(P
is then the matrix identity).
Modifier and Type | Field and Description |
---|---|
static java.util.Comparator<Field> |
NUMERIC_COMPARATOR
Holds the default comparator for pivoting.
|
Modifier and Type | Method and Description |
---|---|
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 ). |
<any> |
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>> |
valueOf(Matrix<F> source)
Returns the lower/upper decomposition of the specified matrix.
|
public static final java.util.Comparator<Field> NUMERIC_COMPARATOR
public static <F extends Field<F>> LUDecomposition<F> valueOf(Matrix<F> source)
source
- the matrix for which the decomposition is calculated.DimensionException
- if the specified matrix is not square.public static void setPivotComparator(java.util.Comparator<Field> cmp)
local
comparator used
for pivoting or null
to disable pivoting.cmp
- the comparator for pivoting or null
.public static java.util.Comparator<Field> getPivotComparator()
local
comparator used for pivoting or null
if pivoting
is not performed (default NUMERIC_COMPARATOR
).null
.public DenseMatrix<F> solve(Matrix<F> B)
this = A.lu()
using back and forward substitutions.B
- the input matrix.DimensionException
- if the dimensions do not match.public DenseMatrix<F> inverse()
this = A.lu()
using back and forward substitutions.this.solve(Identity)
public F determinant()
Matrix
having this
decomposition.public DenseMatrix<F> getLower(F zero, F one)
L
) with diagonal
elements equal to the multiplicative identity for F.zero
- the additive identity for F.one
- the multiplicative identity for F.public DenseMatrix<F> getUpper(F zero)
U
).zero
- the additive identity for F.public SparseMatrix<F> getPermutation(F zero, F one)
P
).zero
- the additive identity for F.one
- the multiplicative identity for F.public DenseMatrix<F> getLU()
public <any> getPivots()