sparseLU-class
Sparse LU decomposition of a square sparse matrix
Description
Objects of this class contain the components of the LU decomposition of a sparse square matrix.
Objects from the Class
Objects can be created by calls of the form new("sparseLU",
...)
but are more commonly created by function lu()
applied to a sparse matrix, such as a matrix of class dgCMatrix
.
Slots
-
L
: -
Object of class
"dtCMatrix"
, the lower triangular factor from the left. -
U
: -
Object of class
"dtCMatrix"
, the upper triangular factor from the right. -
p
: -
Object of class
"integer"
, permutation applied from the left. -
q
: -
Object of class
"integer"
, permutation applied from the right. -
Dim
: -
the dimension of the original matrix; inherited from class
MatrixFactorization
.
Extends
Class "LU"
, directly. Class "MatrixFactorization"
, by class "LU"
.
Methods
- expand
-
signature(x = "sparseLU")
Returns a list with componentsP
,L
,U
, andQ
, where P and Q represent fill-reducing permutations, and L, and U the lower and upper triangular matrices of the decomposition. The original matrix corresponds to the product P'LUQ.
Note
The decomposition is of the form
A = P'LUQ,
or equivalently PAQ' = LU, where all matrices are sparse and of size n by n. The matrices P and Q, and their transposes P' and Q' are permutation matrices, L is lower triangular and U is upper triangular.
See Also
Examples
## Extending the one in examples(lu), calling the matrix A, ## and confirming the factorization identities : A <- as(readMM(system.file("external/pores_1.mtx", package = "Matrix")), "CsparseMatrix") ## with dimnames(.) - to see that they propagate to L, U : dimnames(A) <- dnA <- list(paste0("r", seq_len(nrow(A))), paste0("C", seq_len(ncol(A)))) str(luA <- lu(A)) # p is a 0-based permutation of the rows # q is a 0-based permutation of the columns xA <- expand(luA) ## which is simply doing stopifnot(identical(xA$ L, luA@L), identical(xA$ U, luA@U), identical(xA$ P, as(luA@p +1L, "pMatrix")), identical(xA$ Q, as(luA@q +1L, "pMatrix"))) P.LUQ <- with(xA, t(P) %*% L %*% U %*% Q) stopifnot(all.equal(A, P.LUQ, tolerance = 1e-12), identical(dimnames(P.LUQ), dnA)) ## permute rows and columns of original matrix pA <- A[luA@p + 1L, luA@q + 1L] stopifnot(identical(pA, with(xA, P %*% A %*% t(Q)))) pLU <- drop0(luA@L %*% luA@U) # L %*% U -- dropping extra zeros stopifnot(all.equal(pA, pLU, tolerance = 1e-12))
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.