Cholesky-class
位於 Matrix
包(package)。 說明
類 Cholesky
和 pCholesky
表示 實數、對稱、正半定矩陣 的稠密旋轉 Cholesky 分解,具有一般形式
或(等效地)
其中 是置換矩陣, 是單位下三角矩陣, 是非負對角矩陣, 。
這些類以密集格式將 Cholesky 因子 Cholesky
) 或 ( pCholesky
) 的向量,後者給出 “packed”表示。 或其轉置 的條目存儲為長度為 (
插槽
Dim
,Dimnames
-
從虛擬類
MatrixFactorization
繼承。 uplo
-
一個字符串,
"U"
或"L"
,指示分解對稱矩陣的哪個三角形(上或下)用於計算分解,以及x
是否存儲 或 。 x
-
長度為
n*n
(Cholesky
) 或n*(n+1)/2
(pCholesky
) 的數值向量,其中n=Dim[1]
,按列優先順序列出 Cholesky 因子 或其轉置 的條目。 perm
-
長度為
Dim[1]
的從 1 開始的整數向量,指定應用於因式分解矩陣的行和列的排列。長度為 0 的perm
是有效的,相當於恒等排列,意味著沒有旋轉。
擴展
直接類 CholeskyFactorization
。類 MatrixFactorization
,按類 CholeskyFactorization
,距離 2。
實例化
對象可以通過 new("Cholesky", ...)
或 new("pCholesky", ...)
形式的調用直接生成,但它們更通常作為繼承自 dsyMatrix
或 dspMatrix
(通常是這些對象的子類)的 x
的 Cholesky(x)
的值來獲取。為半正定矩陣保留,即 dpoMatrix
和 dppMatrix
)。
方法
coerce
-
signature(from = "Cholesky", to = "dtrMatrix")
:返回表示 Cholesky 因子 或其轉置 的dtrMatrix
;看注釋'。 coerce
-
signature(from = "pCholesky", to = "dtpMatrix")
:返回表示 Cholesky 因子 或其轉置 的dtpMatrix
;看注釋'。 determinant
-
signature(from = "p?Cholesky", logarithm = "logical")
:計算因式分解矩陣 的行列式或其對數。 diag
-
signature(x = "p?Cholesky")
:返回長度為 的數值向量,其中包含 的對角線元素,它們是 的平方對角線元素。 expand1
-
signature(x = "p?Cholesky")
:參見expand1-methods
。 expand2
-
signature(x = "p?Cholesky")
:參見expand2-methods
。 solve
-
signature(a = "p?Cholesky", b = .)
:參見solve-methods
。
注意
在 Matrix
< 1.6-0
中,class Cholesky
extends dtrMatrix
和 class pCholesky
extends dtpMatrix
,反映了因子 確實是一個三角矩陣。 Matrix
1.6-0
刪除了這些擴展,以便不再從 dtrMatrix
和 dtpMatrix
繼承方法。此類方法的可用性給人一種錯誤的印象,即 Cholesky
和 pCholesky
代表一個(奇異)矩陣,而實際上它們代表一組有序的矩陣因子。
強製 as(., "dtrMatrix")
和 as(., "dtpMatrix")
是為了解這些注意事項的用戶提供的。
例子
showClass("Cholesky")
set.seed(1)
m <- 30L
n <- 6L
(A <- crossprod(Matrix(rnorm(m * n), m, n)))
## With dimnames, to see that they are propagated :
dimnames(A) <- dn <- rep.int(list(paste0("x", seq_len(n))), 2L)
(ch.A <- Cholesky(A)) # pivoted, by default
str(e.ch.A <- expand2(ch.A, LDL = TRUE), max.level = 2L)
str(E.ch.A <- expand2(ch.A, LDL = FALSE), max.level = 2L)
## Underlying LAPACK representation
(m.ch.A <- as(ch.A, "dtrMatrix")) # which is L', not L, because
A@uplo == "U"
stopifnot(identical(as(m.ch.A, "matrix"), `dim<-`(ch.A@x, ch.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' L1 D L1' P1 ~ P1' L L' P1 in floating point
stopifnot(exprs = {
identical(names(e.ch.A), c("P1.", "L1", "D", "L1.", "P1"))
identical(names(E.ch.A), c("P1.", "L" , "L." , "P1"))
identical(e.ch.A[["P1"]],
new("pMatrix", Dim = c(n, n), Dimnames = c(list(NULL), dn[2L]),
margin = 2L, perm = invertPerm(ch.A@perm)))
identical(e.ch.A[["P1."]], t(e.ch.A[["P1"]]))
identical(e.ch.A[["L1."]], t(e.ch.A[["L1"]]))
identical(E.ch.A[["L." ]], t(E.ch.A[["L" ]]))
identical(e.ch.A[["D"]], Diagonal(x = diag(ch.A)))
all.equal(E.ch.A[["L"]], with(e.ch.A, L1 %*% sqrt(D)))
ae1(A, with(e.ch.A, P1. %*% L1 %*% D %*% L1. %*% P1))
ae1(A, with(E.ch.A, P1. %*% L %*% L. %*% P1))
ae2(A[ch.A@perm, ch.A@perm], with(e.ch.A, L1 %*% D %*% L1.))
ae2(A[ch.A@perm, ch.A@perm], with(E.ch.A, L %*% L. ))
})
## Factorization handled as factorized matrix
b <- rnorm(n)
all.equal(det(A), det(ch.A), tolerance = 0)
all.equal(solve(A, b), solve(ch.A, b), tolerance = 0)
## For identical results, we need the _unpivoted_ factorization
## computed by det(A) and solve(A, b)
(ch.A.nopivot <- Cholesky(A, perm = FALSE))
stopifnot(identical(det(A), det(ch.A.nopivot)),
identical(solve(A, b), solve(ch.A.nopivot, b)))
參考
The LAPACK source code, including documentation; see https://netlib.org/lapack/double/dpstrf.f, https://netlib.org/lapack/double/dpotrf.f, and https://netlib.org/lapack/double/dpptrf.f.
Lucas, C. (2004). LAPACK-style codes for level 2 and 3 pivoted Cholesky factorizations. LAPACK Working Note, Number 161. https://www.netlib.org/lapack/lawnspdf/lawn161.pdf
Golub, G. H., & Van Loan, C. F. (2013). Matrix computations (4th ed.). Johns Hopkins University Press. doi:10.56021/9781421407944
也可以看看
用於稀疏 Cholesky 分解的類 CHMfactor
。
相關用法
- R Cholesky-methods Cholesky 分解方法
- R CHMfactor-class 稀疏 Cholesky 分解
- R CAex 阿爾伯斯的示例矩陣與“困難”特征分解
- R CsparseMatrix-class 列壓縮形式稀疏矩陣的“CsparseMatrix”類
- 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 symmpart-methods 矩陣的對稱部分和偏斜(對稱)部分
- R sparseMatrix 從非零項構建一般稀疏矩陣
- R dgCMatrix-class 壓縮、稀疏、麵向列的數值矩陣
- R Subassign-methods “[<-”的方法 - 分配給“矩陣”的子集
- R ldenseMatrix-class 密集邏輯矩陣的虛擬類“ldenseMatrix”
- R norm-methods 矩陣範數
- R ngeMatrix-class 一般密集非零模式矩陣的“ngeMatrix”類
- R diagonalMatrix-class 對角矩陣的“diagonalMatrix”類
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Dense Cholesky Factorizations。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。