BunchKaufman-class
位於 Matrix
包(package)。 說明
類 BunchKaufman
和 pBunchKaufman
表示 實對稱矩陣 的 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 例程dsytrf
和dsptrf
的手冊指定。 perm
-
長度為
n=Dim[1]
的整數向量,指定行和列交換,如 LAPACK 例程dsytrf
和dsptrf
手冊中所述。
擴展
直接類 BunchKaufmanFactorization
。類 MatrixFactorization
,按類 BunchKaufmanFactorization
,距離 2。
實例化
對象可以通過 new("BunchKaufman", ...)
或 new("pBunchKaufman", ...)
形式的調用直接生成,但它們更通常作為繼承自 dsyMatrix
或 dspMatrix
的 x
的 BunchKaufman(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
刪除了這些擴展,以便不再從 dtrMatrix
和 dtpMatrix
繼承方法。此類方法的可用性給人一種錯誤的印象,即 BunchKaufman
和 pBunchKaufman
代表一個(奇異)矩陣,而實際上它們代表一組有序的矩陣因子。
強製 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
及其打包對應項。
通用函數 BunchKaufman
、 expand1
和 expand2
。
相關用法
- R BunchKaufman-methods Bunch-Kaufman 分解方法
- R dtrMatrix-class 三角形稠密數值矩陣
- R facmul-methods 乘以矩陣因式分解的因數
- R solve-methods 函數求解矩陣包中的方法
- R updown-methods 更新和降級稀疏 Cholesky 分解
- R bdiag 構建分塊對角矩陣
- R printSpMatrix 靈活格式化和打印稀疏矩陣
- R symmetricMatrix-class 包矩陣中對稱矩陣的虛擬類
- R all.equal-methods 函數 all.equal() 的矩陣封裝方法
- R boolmatmult-methods 布爾算術矩陣乘積:%&% 和方法
- R ltrMatrix-class 三角密集邏輯矩陣
- R Hilbert 生成希爾伯特矩陣
- R nearPD 最近正定矩陣
- R lsyMatrix-class 對稱密集邏輯矩陣
- R CHMfactor-class 稀疏 Cholesky 分解
- R symmpart-methods 矩陣的對稱部分和偏斜(對稱)部分
- R sparseMatrix 從非零項構建一般稀疏矩陣
- R dgCMatrix-class 壓縮、稀疏、麵向列的數值矩陣
- R Cholesky-methods Cholesky 分解方法
- R Subassign-methods “[<-”的方法 - 分配給“矩陣”的子集
- R ldenseMatrix-class 密集邏輯矩陣的虛擬類“ldenseMatrix”
- R norm-methods 矩陣範數
- R ngeMatrix-class 一般密集非零模式矩陣的“ngeMatrix”類
- R CAex 阿爾伯斯的示例矩陣與“困難”特征分解
- R diagonalMatrix-class 對角矩陣的“diagonalMatrix”類
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Dense Bunch-Kaufman Factorizations。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。