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


R chol 乔列斯基分解


R语言 chol 位于 base 包(package)。

说明

计算实数对称正定方阵的 Cholesky 分解。

用法

chol(x, ...)

## Default S3 method:
chol(x, pivot = FALSE,  LINPACK = FALSE, tol = -1, ...)

参数

x

存在方法的对象。默认方法适用于数值(或逻辑)对称正定矩阵。

...

基于方法或来自方法的参数。

pivot

是否应该使用旋转?

LINPACK

合乎逻辑的。是否应该使用 LINPACK(现在是一个错误)?

tol

pivot = TRUE 一起使用的数字容差。

细节

chol 是通用的:此处的说明适用于默认方法。

请注意,仅使用x的上三角部分,因此当x对称时,

如果pivot = FALSEx 不是非负定的,则会发生错误。如果 x 是半正定的(即某些零特征值),则在使用数值公差时也会出现错误。

如果 pivot = TRUE ,则可以计算正半定 x 的 Cholesky 分解。 x 的排名返回为 attr(Q, "rank") ,可能存在数值错误。枢轴返回为 attr(Q, "pivot")t(Q) %*% Q 不再等于 x 。但是,设置 pivot <- attr(Q, "pivot")oo <- order(pivot) 时,t(Q[, oo]) %*% Q[, oo] 等于 x ,或者 t(Q) %*% Q 等于 x[pivot, pivot] 。请参阅示例。

tol 的值传递给 LAPACK,负值选择(通常)nrow(x) * .Machine$double.neg.eps * max(diag(x)) 的默认容差。一旦主元小于 tol ,算法就会终止。

底层 LAPACK 代码的不成功结果将导致错误,并给出正错误代码:这些只能通过详细研究 FORTRAN 代码来解释。

Cholesky 分解的上三角因子,即矩阵 使得 (参见示例)。

如果使用透视,则还会返回两个附加属性"pivot""rank"

警告

该代码不检查对称性。

如果pivot = TRUEx 不是非负定的,则会出现警告消息,但会出现无意义的结果。因此,仅当 x 通过构造非负定时才使用 pivot = TRUE

例子

( m <- matrix(c(5,1,1,3),2,2) )
( cm <- chol(m) )
t(cm) %*% cm  #-- = 'm'
crossprod(cm)  #-- = 'm'

# now for something positive semi-definite
x <- matrix(c(1:5, (1:5)^2), 5, 2)
x <- cbind(x, x[, 1] + 3*x[, 2])
colnames(x) <- letters[20:22]
m <- crossprod(x)
qr(m)$rank # is 2, as it should be

# chol() may fail, depending on numerical rounding:
# chol() unlike qr() does not use a tolerance.
try(chol(m))

(Q <- chol(m, pivot = TRUE))
## we can use this by
pivot <- attr(Q, "pivot")
crossprod(Q[, order(pivot)]) # recover m

## now for a non-positive-definite matrix
( m <- matrix(c(5,-5,-5,3), 2, 2) )
try(chol(m))  # fails
(Q <- chol(m, pivot = TRUE)) # warning
crossprod(Q)  # not equal to m

来源

这是 LAPACK 例程 DPOTRFDPSTRF 的接口,

LAPACK 来自https://netlib.org/lapack/,其指南在参考文献中列出。

参考

Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at https://netlib.org/lapack/lug/lapack_lug.html.

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

chol2inv 用于其逆(不旋转),backsolve 用于求解具有上三角左侧边的线性系统。

qrsvd 用于相关矩阵分解。

相关用法


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