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


R BunchKaufman-class 密集束-考夫曼分解


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

說明

BunchKaufmanpBunchKaufman 表示 實對稱矩陣 的 Bunch-Kaufman 分解,具有一般形式

其中 是對稱的,由 對角塊組成的塊對角矩陣; row-permuted 單位上三角矩陣的乘積,每個單位上三角矩陣在對角線上方有 1 或 2 列的非零項; row-permuted 單位下三角矩陣的乘積,每個單位下三角矩陣在對角線下方有 1 或 2 列非零條目。

這些類將 因子的非零條目存儲為長度為 ( BunchKaufman ) 或 ( pBunchKaufman ) 的密集格式的向量,它們各自是稀疏的,後者給出“packed”表示。

插槽

Dim , Dimnames

從虛擬類MatrixFactorization繼承。

uplo

一個字符串,"U""L" ,指示使用因式分解對稱矩陣的哪個三角形(上或下)來計算因式分解,以及如何對 x 槽進行分區。

x

長度為 n*n ( BunchKaufman ) 或 n*(n+1)/2 ( pBunchKaufman ) 的數值向量,其中 n=Dim[1] 。表示的細節由 LAPACK 例程 dsytrfdsptrf 的手冊指定。

perm

長度為 n=Dim[1] 的整數向量,指定行和列交換,如 LAPACK 例程 dsytrfdsptrf 手冊中所述。

擴展

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

實例化

對象可以通過 new("BunchKaufman", ...)new("pBunchKaufman", ...) 形式的調用直接生成,但它們更通常作為繼承自 dsyMatrixdspMatrixxBunchKaufman(x) 值獲取。

方法

coerce

signature(from = "BunchKaufman", to = "dtrMatrix") :返回 dtrMatrix ,可用於檢查因式分解的內部表示;看注釋'。

coerce

signature(from = "pBunchKaufman", to = "dtpMatrix") :返回 dtpMatrix ,可用於檢查因式分解的內部表示;看注釋'。

determinant

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

expand1

signature(x = "p?BunchKaufman") :參見expand1-methods

expand2

signature(x = "p?BunchKaufman") :參見expand2-methods

solve

signature(a = "p?BunchKaufman", b = .) :參見solve-methods

注意

Matrix < 1.6-0 中,類 BunchKaufman 擴展 dtrMatrix 和類 pBunchKaufman 擴展 dtpMatrix ,反映了分解的內部表示本質上是三角形的事實:有 “parameters” 和這些可以係統地排列形成 三角矩陣。 Matrix 1.6-0 刪除了這些擴展,以便不再從 dtrMatrixdtpMatrix 繼承方法。此類方法的可用性給人一種錯誤的印象,即 BunchKaufmanpBunchKaufman 代表一個(奇異)矩陣,而實際上它們代表一組有序的矩陣因子。

強製 as(., "dtrMatrix")as(., "dtpMatrix") 是為了解這些注意事項的用戶提供的。

例子


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

n <- 6L
(A <- forceSymmetric(Matrix(rnorm(n * n), n, n)))

## With dimnames, to see that they are propagated :
dimnames(A) <- rep.int(list(paste0("x", seq_len(n))), 2L)

(bk.A <- BunchKaufman(A))
str(e.bk.A <- expand2(bk.A, complete = FALSE), max.level = 2L)
str(E.bk.A <- expand2(bk.A, complete =  TRUE), max.level = 2L)

## Underlying LAPACK representation
(m.bk.A <- as(bk.A, "dtrMatrix"))
stopifnot(identical(as(m.bk.A, "matrix"), `dim<-`(bk.A@x, bk.A@Dim)))

## Number of factors is 2*b+1, b <= n, which can be nontrivial ...
(b <- (length(E.bk.A) - 1L) %/% 2L)

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

## A ~ U DU U', U := prod(Pk Uk) in floating point
stopifnot(exprs = {
    identical(names(e.bk.A), c("U", "DU", "U."))
    identical(e.bk.A[["U" ]], Reduce(`%*%`, E.bk.A[seq_len(b)]))
    identical(e.bk.A[["U."]], t(e.bk.A[["U"]]))
    ae1(A, with(e.bk.A, U %*% DU %*% U.))
})

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

參考

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

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

也可以看看

dsyMatrix 及其打包對應項。

通用函數 BunchKaufmanexpand1expand2

相關用法


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