denseLU-class: Dense LU Factorizations

denseLU-classR Documentation

Dense LU Factorizations


denseLU is the class of dense, row-pivoted LU factorizations of m \times n real matrices A, having the general form

P_{1} A = L U

or (equivalently)

A = P_{1}' L U

where P_{1} is an m \times m 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. If m = n, then the factors L and U are triangular.


Dim, Dimnames

inherited from virtual class MatrixFactorization.


a numeric vector of length prod(Dim) storing the triangular L and U factors together in a packed format. The details of the representation are specified by the manual for LAPACK routine dgetrf.


an integer vector of length min(Dim) specifying the permutation P_{1} as a product of transpositions. The corresponding permutation vector can be obtained as asPerm(perm).


Class LU, directly. Class MatrixFactorization, by class LU, distance 2.


Objects can be generated directly by calls of the form new("denseLU", ...), but they are more typically obtained as the value of lu(x) for x inheriting from denseMatrix (often dgeMatrix).



signature(from = "denseLU", to = "dgeMatrix"): returns a dgeMatrix with the dimensions of the factorized matrix A, equal to L below the diagonal and equal to U on and above the diagonal.


signature(from = "denseLU", logarithm = "logical"): computes the determinant of the factorized matrix A or its logarithm.


signature(x = "denseLU"): see expand-methods.


signature(x = "denseLU"): see expand1-methods.


signature(x = "denseLU"): see expand2-methods.


signature(a = "denseLU", b = "missing"): see solve-methods.


The LAPACK source code, including documentation; see

Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.56021/9781421407944")}

See Also

Class sparseLU for sparse LU factorizations.

Class dgeMatrix.

Generic functions lu, expand1 and expand2.



n <- 3L
(A <- Matrix(round(rnorm(n * n), 2L), n, n))

## With dimnames, to see that they are propagated :
dimnames(A) <- dn <- list(paste0("r", seq_len(n)),
                          paste0("c", seq_len(n)))

(lu.A <- lu(A))
str( <- expand2(lu.A), max.level = 2L)

## Underlying LAPACK representation
( <- as(lu.A, "dgeMatrix")) # which is L and U interlaced
stopifnot(identical(as(, "matrix"), `dim<-`(lu.A@x, lu.A@Dim)))

ae1 <- function(a, b, ...) all.equal(as(a, "matrix"), as(b, "matrix"), ...)
ae2 <- function(a, b, ...) ae1(unname(a), unname(b), ...)

## A ~ P1' L U in floating point
stopifnot(exprs = {
    identical(names(, c("P1.", "L", "U"))
              new(  "pMatrix", Dim = c(n, n), Dimnames = c(dn[1L], list(NULL)),
                  margin = 1L, perm = invertPerm(asPerm(lu.A@perm))))
              new("dtrMatrix", Dim = c(n, n), Dimnames = list(NULL, NULL),
                  uplo = "L", diag = "U", x = lu.A@x))
              new("dtrMatrix", Dim = c(n, n), Dimnames = c(list(NULL), dn[2L]),
                  uplo = "U", diag = "N", x = lu.A@x))
    ae1(A, with(, P1. %*% L %*% U))
    ae2(A[asPerm(lu.A@perm), ], with(, L %*% U))

## Factorization handled as factorized matrix
b <- rnorm(n)
stopifnot(identical(det(A), det(lu.A)),
          identical(solve(A, b), solve(lu.A, b)))

Matrix documentation built on May 29, 2024, 1:20 a.m.