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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。