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


R sparseLU-class 稀疏 LU 分解


R語言 sparseLU-class 位於 Matrix 包(package)。

說明

sparseLU 實數矩陣 的稀疏、行和 column-pivoted LU 分解類,具有一般形式

或(等效地)

其中 是置換矩陣, 是單位下三角矩陣, 是上三角矩陣。

插槽

Dim , Dimnames

從虛擬類MatrixFactorization繼承。

L

dtCMatrix 的對象,單位下三角 因子。

U

dtCMatrix 的對象,即上三角 因子。

p , q

長度從 0 開始的整數向量Dim[1],指定應用於分解矩陣的行和列的排列。q長度為 0 的值是有效的並且等價於恒等排列,意味著沒有列旋轉。使用R語法,矩陣 正是A[p+1, q+1](A[p+1, ]q長度為 0)。

擴展

直接類 LU 。類 MatrixFactorization ,按類 LU ,距離 2。

實例化

對象可以通過 new("sparseLU", ...) 形式的調用直接生成,但它們更通常作為繼承自 sparseMatrix (通常是 dgCMatrix )的 xlu(x) 值獲得。

方法

determinant

signature(from = "sparseLU", logarithm = "logical") :計算因式分解矩陣 的行列式或其對數。

expand

signature(x = "sparseLU") :參見expand-methods

expand1

signature(x = "sparseLU") :參見expand1-methods

expand2

signature(x = "sparseLU") :參見expand2-methods

solve

signature(a = "sparseLU", b = .) :參見solve-methods

例子


showClass("sparseLU")
set.seed(2)

A <- as(readMM(system.file("external", "pores_1.mtx", package = "Matrix")),
        "CsparseMatrix")
(n <- A@Dim[1L])

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

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 P2' in floating point
stopifnot(exprs = {
    identical(names(e.lu.A), c("P1.", "L", "U", "P2."))
    identical(e.lu.A[["P1."]],
              new("pMatrix", Dim = c(n, n), Dimnames = c(dn[1L], list(NULL)),
                  margin = 1L, perm = invertPerm(lu.A@p, 0L, 1L)))
    identical(e.lu.A[["P2."]],
              new("pMatrix", Dim = c(n, n), Dimnames = c(list(NULL), dn[2L]),
                  margin = 2L, perm = invertPerm(lu.A@q, 0L, 1L)))
    identical(e.lu.A[["L"]], lu.A@L)
    identical(e.lu.A[["U"]], lu.A@U)
    ae1(A, with(e.lu.A, P1. %*% L %*% U %*% P2.))
    ae2(A[lu.A@p + 1L, lu.A@q + 1L], 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)))

參考

Davis, T. A. (2006). Direct methods for sparse linear systems. Society for Industrial and Applied Mathematics. doi:10.1137/1.9780898718881

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

也可以看看

用於密集 LU 分解的類 denseLU

dgCMatrix

通用函數 luexpand1expand2

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Sparse LU Factorizations。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。