sparseLU-class {Matrix}R Documentation

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 components P, L, U, and Q, 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 PLUQ.

Note

The decomposition is of the form

A = P'LUQ

where all matrices are sparse and of size n by n. The matrices P, its transpose P', and Q are permutation matrices, L is lower triangular and U is upper triangular.

See Also

lu, solve, dgCMatrix

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")
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, tol = 1e-12))
## 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))

[Package Matrix version 1.0-6 Index]