当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R LU-class 密集 LU 分解


R语言 LU-class 位于 Matrix 包(package)。

说明

denseLU 实数矩阵 的稠密类 row-pivoted LU 分解,具有一般形式

或(等效地)

其中 置换矩阵, 单位下梯形矩阵, 上梯形矩阵。如果 ,则因子 是三角形的。

插槽

Dim , Dimnames

从虚拟类MatrixFactorization继承。

x

长度为 prod(Dim) 的数值向量,以打包格式存储三角形 因子。表示的细节由 LAPACK 例程 dgetrf 的手册指定。

perm

长度为 min(Dim) 的整数向量,指定排列 作为转置的乘积。可以得到对应的排列向量为asPerm(perm)

扩展

直接类 LU 。类 MatrixFactorization ,按类 LU ,距离 2。

实例化

对象可以通过 new("denseLU", ...) 形式的调用直接生成,但它们更通常作为继承自 denseMatrix (通常是 dgeMatrix )的 xlu(x) 值获得。

方法

coerce

signature(from = "denseLU", to = "dgeMatrix") :返回 dgeMatrix,其维度为分解矩阵 ,等于对角线下方的 以及对角线上方和上方的

determinant

signature(from = "denseLU", logarithm = "logical") :计算因式分解矩阵 的行列式或其对数。

expand

signature(x = "denseLU") :参见expand-methods

expand1

signature(x = "denseLU") :参见expand1-methods

expand2

signature(x = "denseLU") :参见expand2-methods

solve

signature(a = "denseLU", b = "missing") :参见solve-methods

例子


showClass("denseLU")
set.seed(1)

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(e.lu.A <- expand2(lu.A), max.level = 2L)

## Underlying LAPACK representation
(m.lu.A <- as(lu.A, "dgeMatrix")) # which is L and U interlaced
stopifnot(identical(as(m.lu.A, "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(e.lu.A), c("P1.", "L", "U"))
    identical(e.lu.A[["P1."]],
              new(  "pMatrix", Dim = c(n, n), Dimnames = c(dn[1L], list(NULL)),
                  margin = 1L, perm = invertPerm(asPerm(lu.A@perm))))
    identical(e.lu.A[["L"]],
              new("dtrMatrix", Dim = c(n, n), Dimnames = list(NULL, NULL),
                  uplo = "L", diag = "U", x = lu.A@x))
    identical(e.lu.A[["U"]],
              new("dtrMatrix", Dim = c(n, n), Dimnames = c(list(NULL), dn[2L]),
                  uplo = "U", diag = "N", x = lu.A@x))
    ae1(A, with(e.lu.A, P1. %*% L %*% U))
    ae2(A[asPerm(lu.A@perm), ], with(e.lu.A, 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)))

参考

The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dgetrf.f.

Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. doi:10.56021/9781421407944

也可以看看

用于稀疏 LU 分解的类 sparseLU

dgeMatrix

通用函数 luexpand1expand2

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Dense LU Factorizations。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。