當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。