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 *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

`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")
## 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))

[Package

*Matrix* version 1.2-18

Index]