sparseLU-class

0th

Percentile

Sparse LU decomposition of a square sparse matrix

Objects of this class contain the components of the LU decomposition of a sparse square matrix.

Keywords
classes
Note

The decomposition is of the form $$A = P'LUQ,$$ or equivalently \(PAQ' = LU\), where all matrices are sparse and of size \(n\times n\). The matrices \(P\) and \(Q\), and their transposes \(P'\) and \(Q'\) are permutation matrices, \(L\) is lower triangular and \(U\) is upper triangular.

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 \(P'LUQ\).

See Also

lu, solve, '>dgCMatrix

Aliases
  • sparseLU-class
  • expand,sparseLU-method
Examples
# NOT RUN {
## 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))
# }
Documentation reproduced from package Matrix, version 1.2-18, License: GPL (>= 2) | file LICENCE

Community examples

Looks like there are no examples yet.