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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。