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


R expand-methods 展開矩陣分解


R語言 expand-methods 位於 Matrix 包(package)。

說明

expand1expand2 從指定矩陣分解的對象構造矩陣因子。此類對象通常不會顯式存儲因子,而是采用緊湊表示來節省內存。

用法

expand1(x, which, ...)
expand2(x, ...)

expand (x, ...)

參數

x

矩陣分解,通常繼承自虛擬類 MatrixFactorization

which

表示矩陣因子的字符串。

...

傳入或傳出方法的更多參數。

細節

保留 expand 的方法隻是為了向後兼容 Matrix < 1.6-0 。新代碼應使用 expand1expand2 ,它們的方法提供更多控製並且行為更一致。值得注意的是, expand2 遵循以下規則:返回列表中矩陣因子的乘積應重現(在一定容差範圍內)因式分解矩陣,包括其 dimnames

因此,如果 x 是一個矩陣,而 y 是它的分解,那麽

    all.equal(as(x, "matrix"), as(Reduce(`%*%`, expand2(y)), "matrix"))

在大多數情況下應該返回 TRUE

expand1 返回一個繼承自虛擬類 Matrix 的對象,表示 which 指示的因子,始終沒有行名稱和列名稱。

expand2 返回因子列表,通常使用常規表示法進行名稱,如 list(L=, U=) 中。第一個和最後一個因子獲取因式分解矩陣的行名稱和列名稱,這些名稱保存在 xDimnames 槽中。

方法

下表列出了 expand1 的方法以及參數 which 的允許值。

class(x) which
Schur c("Q", "T", "Q.")
denseLU c("P1", "P1.", "L", "U")
sparseLU c("P1", "P1.", "P2", "P2.", "L", "U")
sparseQR c("P1", "P1.", "P2", "P2.", "Q", "Q1", "R", "R1")
BunchKaufman , pBunchKaufman c("U", "DU", "U.", "L", "DL", "L.")
Cholesky , pCholesky c("P1", "P1.", "L1", "D", "L1.", "L", "L.")
CHMsimpl , CHMsimpl c("P1", "P1.", "L1", "D", "L1.", "L", "L.")

下麵說明expand2expand的方法。因子名稱和類別也適用於 expand1

expand2

signature(x = "CHMsimpl") :將分解 擴展為 list(P1., L1, D, L1., P1) (默認)或 list(P1., L, L., P1) ,具體取決於可選邏輯參數 LDLP1P1.pMatrixL1L1.LL.dtCMatrixDddiMatrix .

expand2

signature(x = "CHMsuper") :與 CHMsimpl 相同,但三角因子存儲為 dgCMatrix

expand2

signature(x = "p?Cholesky") :將分解 擴展為 list(L1, D, L1.) (默認)或 list(L, L.) ,具體取決於可選邏輯參數 LDLL1L1.LL.dtrMatrixdtpMatrixDddiMatrix

expand2

signature(x = "p?BunchKaufman") :將 展開分解,其中 list(U, DU, U.)list(L, DL, L.) ,具體取決於 x@uplo 。如果可選參數 completeTRUE ,則返回一個未命名列表,給出 矩陣因子的完整擴展。 表示為pMatrix 表示為dtCMatrix 表示為dsCMatrix

expand2

signature(x = "Schur") :將分解 展開為 list(Q, T, Q.)QQ.x@Qt(x@Q)DimnamesTx@T

expand2

signature(x = "sparseLU") :將分解 展開為 list(P1., L, U, P2.)P1.P2.pMatrixLUdtCMatrix

expand2

signature(x = "denseLU") :將分解 展開為 list(P1., L, U)P1.pMatrix ,如果是正方形,LUdtrMatrix ,否則是 dgeMatrix

expand2

signature(x = "sparseQR") :將分解 擴展為 list(P1., Q, R, P2.)list(P1., Q1, R1, P2.) ,具體取決於可選邏輯參數 completeP1.P2.pMatrixQQ1dgeMatrixRdgCMatrixR1dtCMatrix

expand

signature(x = "CHMfactor") :與 expand2 相同,但返回 list(P, L)expand(x)[["P"]]expand2(x)[["P1"]] 表示相同的置換矩陣 ,但具有相反的margin 槽和倒置的perm 槽。 expand(x) 的組件不保留 x@Dimnames

expand

signature(x = "sparseLU"): 作為expand2,但返回list(P, L, U, Q).expand(x)[["Q"]]expand2(x)[["P2."]]表示相同的置換矩陣 但有相反的margin插槽和倒置perm插槽。expand(x)[["P"]]表示置換矩陣 而不是它的轉置 ;這是expand2(x)[["P1."]]與倒立的perm投幣口。expand(x)[["L"]]expand2(x)[["L"]]表示同一個單位下三角矩陣 ,但與diag插槽等於"N""U", 分別。expand(x)[["L"]]expand(x)[["U"]]存儲排列後的第一和第二分量x@Dimnames在他們的Dimnames插槽。

expand

signature(x = "denseLU") :與 expand2 相同,但返回 list(L, U, P)expand(x)[["P"]]expand2(x)[["P1."]] 與模 Dimnames 相同。 expand(x) 的組件不保留 x@Dimnames

例子


showMethods("expand1", inherited = FALSE)
showMethods("expand2", inherited = FALSE)
set.seed(0)

(A <- Matrix(rnorm(9L, 0, 10), 3L, 3L))
(lu.A <- lu(A))
(e.lu.A <- expand2(lu.A))
stopifnot(exprs = {
    is.list(e.lu.A)
    identical(names(e.lu.A), c("P1.", "L", "U"))
    all(sapply(e.lu.A, is, "Matrix"))
    all.equal(as(A, "matrix"), as(Reduce(`%*%`, e.lu.A), "matrix"))
})

## 'expand1' and 'expand2' give equivalent results modulo
## dimnames and representation of permutation matrices;
## see also function 'alt' in example("Cholesky-methods")
(a1 <- sapply(names(e.lu.A), expand1, x = lu.A, simplify = FALSE))
all.equal(a1, e.lu.A)

## see help("denseLU-class") and others for more examples

也可以看看

可分解矩陣的虛擬類compMatrix

矩陣分解的虛擬類MatrixFactorization

用於計算因式分解的通用函數 CholeskyBunchKaufmanSchurluqr

相關用法


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