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


R CHMfactor-class 稀疏 Cholesky 分解


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

說明

CHMfactor 實對稱矩陣 的稀疏 Cholesky 分解的虛擬類,具有一般形式

或(等效地)

其中 是置換矩陣, 是單位下三角矩陣, 是對角矩陣, 。第二個等式僅適用於正半定 ,其中 的對角線條目是非負的,並且 是明確定義的。

類的實現CHMfactor基於 CHOLMOD 的C-levelcholmod_factor_struct。虛擬子類CHMsimplCHMsuper分離單純形和超節點變體。這些有非虛擬子類[dn]CHMsimpl[dn]CHMsuper,其中前綴‘⁠d⁠' 和前綴 '⁠n⁠' 分別保留用於數字和符號分解。

用法

isLDL(x)

參數

x

從虛擬類 CHMfactor 繼承的對象,幾乎總是調用泛型函數 Cholesky 的結果。

isLDL(x) 返回 TRUEFALSETRUE(如果 x 存儲 的下三角條目)、FALSE(如果 x 存儲 的下三角條目) 。

插槽

CHMfactor 的:

Dim , Dimnames

從虛擬類MatrixFactorization繼承。

colcount

長度為 Dim[1] 的整數向量,給出下三角 Cholesky 因子每列中非零條目數量的估計。如果在因式分解之前進行符號分析,則估計是準確的。

perm

長度為 Dim[1] 的從 0 開始的整數向量,指定應用於因式分解矩陣的行和列的排列。長度為 0 的 perm 是有效的,相當於恒等排列,意味著沒有旋轉。

type

長度為 6 的整數向量,指定分解的細節。這些元素對應於原始 cholmod_factor_struct 的成員 orderingis_llis_superis_monotonicmaxcsizemaxesize 。單純分解和超節點分解通過 is_super 來區分。單純因式分解不使用 maxcsizemaxesize 。超節點分解不使用 is_llis_monotonic

CHMsimpl 的(全部被 nCHMsimpl 未使用):

nz

長度為 Dim[1] 的整數向量,給出下三角 Cholesky 因子每列中非零條目的數量。每列中至少有一個非零條目,因為因子的對角線元素是顯式存儲的。

p

長度為 Dim[1]+1 的整數向量。下三角 Cholesky 因子的列 j 中非零條目的行索引作為 i[p[j]+seq_len(nz[j])]+1 獲得。

i

長度大於或等於 sum(nz) 的整數向量,包含下三角 Cholesky 因子中非零條目的行索引。它們按列分組並在列內排序,但列本身不需要單調排序。列可能被過度分配,即,為列j保留的i的元素數量可能超過nz[j]

prv , nxt

長度為 Dim[1]+2 的整數向量指示下三角 Cholesky 因子的列存儲在 ix 中的順序。從 j <- Dim[1]+2 開始,遞歸 j <- nxt[j+1]+1 向前順序遍曆列,並在 nxt[j+1] = -1 時終止。從 j <- Dim[1]+1 開始,遞歸 j <- prv[j+1]+1 按向後順序遍曆列,並在 prv[j+1] = -1 時終止。

dCHMsimpl 的:

x

i 平行的數值向量,包含下三角 Cholesky 因子 或(當且僅當 type[2] 為 0)下三角矩陣 的相應非零條目。

CHMsuper 的:

super , pi , px

長度為 nsuper+1 的整數向量,其中 nsuper 是超級節點的數量。 super[j]+1 是超級節點j 最左列的索引。超級節點j的行索引被獲取為s[pi[j]+seq_len(pi[j+1]-pi[j])]+1。超級節點j的數字條目作為x[px[j]+seq_len(px[j+1]-px[j])]+1獲得(如果槽x可用)。

s

長度大於或等於 Dim[1] 的整數向量,包含超級節點的行索引。 s 可能包含重複項,但不能在超級節點內,其中行索引必須遞增。

dCHMsuper 的:

x

長度小於或等於 prod(Dim) 的數值向量,包含超級節點的數值條目。

擴展

直接類 MatrixFactorization

實例化

對象可以通過 new("dCHMsimpl", ...) 等形式的調用直接生成,但 dCHMsimpldCHMsuper 更通常作為從 sparseMatrix 繼承的 xCholesky(x, ...) 的值獲得(通常是 dsCMatrix )。

目前除了調用 new 來生成 nCHMsimplnCHMsuper 之外,沒有其他 API。這些類是殘留的,可能會在 Matrix 的未來版本中正式棄用。

方法

coerce

signature(from = "CHMsimpl", to = "dtCMatrix") :返回表示下三角 Cholesky 因子 或下三角矩陣 dtCMatrix,後者當且僅當 from@type[2] 為 0 時。

coerce

signature(from = "CHMsuper", to = "dgCMatrix") :返回表示下三角 Cholesky 因子 dgCMatrix 。請注意,對於跨越兩列或更多列的超級節點,超節點算法按設計將非結構零存儲在主對角線上方,因此 dgCMatrix 確實比 dtCMatrix 作為強製目標更合適。

determinant

signature(from = "CHMfactor", logarithm = "logical") :根據可選參數 sqrt 進行行為。如果 sqrt = FALSE ,則此方法計算因式分解矩陣 的行列式或其對數。如果 sqrt = TRUE ,則此方法計算因子 或其對數的行列式,當 具有負對角線元素時,給出 NaN 的模數。為了向後兼容, sqrt 的默認值是 TRUE ,但是在 Matrix 的未來版本中預計會發生變化,因此防禦代碼將始終設置 sqrt (如果代碼必須設置為 TRUE )保持向後兼容 Matrix < 1.6-0 )。調用此方法而不設置 sqrt 可能會警告有關待處理的更改。可以使用 options(Matrix.warnSqrtDefault = 0) 禁用警告。

diag

signature(x = "CHMfactor") :返回長度為 的數值向量,其中包含 的對角線元素,其中(如果它們均為非負)是 的平方對角線元素。

expand

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

expand1

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

expand1

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

expand2

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

expand2

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

image

signature(x = "CHMfactor") :參見image-methods

nnzero

signature(x = "CHMfactor") :參見nnzero-methods

solve

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

update

signature(object = "CHMfactor"): 返回一個副本object具有相同的非零模式,但數字條目根據附加參數進行更新parentmult,其中parent是(強製)adsCMatrix或一個dgCMatrixmult是正長度的數值向量。
數字條目更新為 Cholesky 因子的條目F(parent) + mult[1] * I, IE。,F(parent)mult[1]乘以單位矩陣,其中F = identity對於對稱的parentF = tcrossprod對於他人parent。非零模式F(parent)必須匹配S如果object = Cholesky(S, ...).

updown

signature(update = ., C = ., object = "CHMfactor") :參見updown-methods

例子


showClass("dCHMsimpl")
showClass("dCHMsuper")
set.seed(2)

m <- 1000L
n <- 200L
M <- rsparsematrix(m, n, 0.01)
A <- crossprod(M)

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

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, 0L, 1L)))
    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 + 1L, ch.A@perm + 1L], with(e.ch.A, L1 %*% D %*% L1.))
    ae2(A[ch.A@perm + 1L, ch.A@perm + 1L], with(E.ch.A, L  %*%         L. ))
})

## Factorization handled as factorized matrix
## (in some cases only optionally, depending on arguments)
b <- rnorm(n)
stopifnot(identical(det(A), det(ch.A, sqrt = FALSE)),
          identical(solve(A, b), solve(ch.A, b, system = "A")))

u1 <- update(ch.A,   A , mult = sqrt(2))
u2 <- update(ch.A, t(M), mult = sqrt(2)) # updating with crossprod(M), not M
stopifnot(all.equal(u1, u2, tolerance = 1e-14))

參考

The CHOLMOD source code; see https://github.com/DrTimothyAldenDavis/SuiteSparse, notably the header file ‘CHOLMOD/Include/cholmod.h’ defining cholmod_factor_struct.

Chen, Y., Davis, T. A., Hager, W. W., & Rajamanickam, S. (2008). Algorithm 887: CHOLMOD, supernodal sparse Cholesky factorization and update/downdate. ACM Transactions on Mathematical Software, 35(3), Article 22, 1-14. doi:10.1145/1391989.1391995

Amestoy, P. R., Davis, T. A., & Duff, I. S. (2004). Algorithm 837: AMD, an approximate minimum degree ordering algorithm. ACM Transactions on Mathematical Software, 17(4), 886-905. doi:10.1145/1024074.1024081

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

也可以看看

dsCMatrix

通用函數 Choleskyupdownexpand1expand2

相關用法


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