| lu-methods {Matrix} | R Documentation |
Methods for LU Factorization
Description
Computes the pivoted LU factorization of an m \times n
real matrix A, which has the general form
P_{1} A P_{2} = L U
or (equivalently)
A = P_{1}' L U P_{2}'
where
P_{1} is an m \times m permutation matrix,
P_{2} is an n \times n permutation matrix,
L is an m \times \min(m,n)
unit lower trapezoidal matrix, and
U is a \min(m,n) \times n
upper trapezoidal matrix.
Methods for denseMatrix are built on
LAPACK routine dgetrf, which does not permute columns,
so that P_{2} is an identity matrix.
Methods for sparseMatrix are built on
CXSparse routine cs_lu, which requires m = n,
so that L and U are triangular matrices.
Usage
lu(x, ...)
## S4 method for signature 'dgeMatrix'
lu(x, warnSing = TRUE, ...)
## S4 method for signature 'dgCMatrix'
lu(x, errSing = TRUE, order = NA_integer_,
tol = 1, ...)
## S4 method for signature 'dsyMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'dsCMatrix'
lu(x, cache = TRUE, ...)
## S4 method for signature 'matrix'
lu(x, ...)
Arguments
x |
a finite matrix or
|
warnSing |
a logical indicating if a warning should
be signaled for singular |
errSing |
a logical indicating if an error should
be signaled for singular |
order |
an integer in |
tol |
a number. The original pivot element is used
if its absolute value exceeds |
cache |
a logical indicating if the result should be
cached in |
... |
further arguments passed to or from methods. |
Details
What happens when x is determined to be near-singular
differs by method. The method for class dgeMatrix
completes the factorization, warning if warnSing = TRUE
and in any case returning a valid denseLU
object. Users of this method can detect singular x with
a suitable warning handler; see tryCatch.
In contrast, the method for class dgCMatrix
abandons further computation, throwing an error if errSing = TRUE
and otherwise returning NA. Users of this method can
detect singular x with an error handler or by setting
errSing = FALSE and testing for a formal result with
is(., "sparseLU").
Value
An object representing the factorization, inheriting from
virtual class LU. The specific class
is denseLU unless x inherits
from virtual class sparseMatrix,
in which case it is sparseLU.
References
The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dgetrf.f.
Davis, T. A. (2006). Direct methods for sparse linear systems. Society for Industrial and Applied Mathematics. doi:10.1137/1.9780898718881
Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. doi:10.56021/9781421407944
See Also
Classes denseLU and
sparseLU and their methods.
Classes dgeMatrix and
dgCMatrix.
Generic functions expand1 and expand2,
for constructing matrix factors from the result.
Generic functions Cholesky, BunchKaufman,
Schur, and qr,
for computing other factorizations.
Examples
showMethods("lu", inherited = FALSE)
set.seed(0)
## ---- Dense ----------------------------------------------------------
(A1 <- Matrix(rnorm(9L), 3L, 3L))
(lu.A1 <- lu(A1))
(A2 <- round(10 * A1[, -3L]))
(lu.A2 <- lu(A2))
## A ~ P1' L U in floating point
str(e.lu.A2 <- expand2(lu.A2), max.level = 2L)
stopifnot(all.equal(A2, Reduce(`%*%`, e.lu.A2)))
## ---- Sparse ---------------------------------------------------------
A3 <- as(readMM(system.file("external/pores_1.mtx", package = "Matrix")),
"CsparseMatrix")
(lu.A3 <- lu(A3))
## A ~ P1' L U P2' in floating point
str(e.lu.A3 <- expand2(lu.A3), max.level = 2L)
stopifnot(all.equal(A3, Reduce(`%*%`, e.lu.A3)))