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


R rcond-methods 估計條件數的倒數


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

說明

估計矩陣條件數的倒數。

這是一個具有多種方法的通用函數,如 showMethods(rcond) 所示。

用法

rcond(x, norm, ...)

## S4 method for signature 'sparseMatrix,character'
rcond(x, norm, useInv=FALSE, ...)

參數

x

一個R繼承自的對象Matrix類。

norm

指示估計中使用的範數類型的字符串。 1-範數的默認值為 "O" ( "O" 相當於 "1" )。對於稀疏矩陣,當 useInv=TRUE 時,norm 可以是 norm 允許的任何 kind ;否則,另一個可能的值為無窮大範數的"I",另請參見norm

useInv

邏輯(或 "Matrix" 包含 solve(x) )。如果不為 false,則將條件數的倒數計算為 ,其中 solve(x) 的倒數。

這可能是一種有效的替代方案(僅)在 solve(x) 速度快(或已知)的情況下,例如,對於(非常)稀疏或三角矩陣。

請注意,結果可能會有所不同,具體取決於 useInv ,默認情況下,當它為 false 時,會計算近似值。

...

傳入或傳出其他方法的進一步參數。

x 的倒數條件數的估計。

BACKGROUND

正則(方)矩陣的條件數是矩陣的norm與其逆矩陣(或pseudo-inverse)的範數的乘積。

更一般地,條件數定義為(也適用於非方陣 ):

每當 x 不是方陣時,在我們的方法定義中,通常通過 rcond(qr.R(qr(X)), ...) 計算,其中 Xxt(x)

條件數取 1 到無窮大(含 1 和無窮大)之間的值,並且可以被視為一個因子,通過該因子可以放大使用該矩陣作為係數矩陣求解線性係統的誤差。

rcond() 使用 中的值計算條件數的倒數 ,並且可以將其視為矩陣與秩缺陷的接近程度的縮放度量(也稱為 “singular”)。

條件數通常是估計的,因為精確計算在浮點運算方麵的成本很高。給出了倒數條件數的(過)估計,因為這樣做可以避免溢出。如果條件倒數接近 1,則矩陣條件良好;如果條件倒數接近零,則矩陣為 ill-conditioned。

例子


x <- Matrix(rnorm(9), 3, 3)
rcond(x)
## typically "the same" (with more computational effort):
1 / (norm(x) * norm(solve(x)))
rcond(Hilbert(9))  # should be about 9.1e-13

## For non-square matrices:
rcond(x1 <- cbind(1,1:10))# 0.05278
rcond(x2 <- cbind(x1, 2:11))# practically 0, since x2 does not have full rank

## sparse
(S1 <- Matrix(rbind(0:1,0, diag(3:-2))))
rcond(S1)
m1 <- as(S1, "denseMatrix")
all.equal(rcond(S1), rcond(m1))

## wide and sparse
rcond(Matrix(cbind(0, diag(2:-1))))

## Large sparse example ----------
m <- Matrix(c(3,0:2), 2,2)
M <- bdiag(kronecker(Diagonal(2), m), kronecker(m,m))
36*(iM <- solve(M)) # still sparse
MM <- kronecker(Diagonal(10), kronecker(Diagonal(5),kronecker(m,M)))
dim(M3 <- kronecker(bdiag(M,M),MM)) # 12'800 ^ 2
if(interactive()) ## takes about 2 seconds if you have >= 8 GB RAM
  system.time(r <- rcond(M3))
## whereas this is *fast* even though it computes  solve(M3)
system.time(r. <- rcond(M3, useInv=TRUE))
if(interactive()) ## the values are not the same
  c(r, r.)  # 0.05555 0.013888
## for all 4 norms available for sparseMatrix :
cbind(rr <- sapply(c("1","I","F","M"),
             function(N) rcond(M3, norm=N, useInv=TRUE)))

參考

Golub, G., and Van Loan, C. F. (1989). Matrix Computations, 2nd edition, Johns Hopkins, Baltimore.

也可以看看

base 包中的 normkappa() 相對於 (歐幾裏得) norm 計算 “traditional” 矩陣的近似條件數,甚至是非方矩陣。 solve

condest ,(1-範數)條件數的較新近似估計,對於大型稀疏矩陣特別有效。

相關用法


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