当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Cholesky-class 密集 Cholesky 分解


R语言 Cholesky-class 位于 Matrix 包(package)。

说明

CholeskypCholesky 表示 实数、对称、正半定矩阵 的稠密旋转 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", ...) 形式的调用直接生成,但它们更通常作为继承自 dsyMatrixdspMatrix(通常是这些对象的子类)的 xCholesky(x) 的值来获取。为半正定矩阵保留,即 dpoMatrixdppMatrix )。

方法

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 Choleskyextends dtrMatrix 和 class pCholeskyextends dtpMatrix ,反映了因子 确实是一个三角矩阵。 Matrix 1.6-0 删除了这些扩展,以便不再从 dtrMatrixdtpMatrix 继承方法。此类方法的可用性给人一种错误的印象,即 CholeskypCholesky 代表一个(奇异)矩阵,而实际上它们代表一组有序的矩阵因子。

强制 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

dpoMatrixdppMatrix

通用函数 Choleskyexpand1expand2

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Dense Cholesky Factorizations。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。