rcond-methods {Matrix} | R Documentation |

Estimate the reciprocal of the condition number of a matrix.

This is a generic function with several methods, as seen by
`showMethods(rcond)`

.

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

`x` |
an |

`norm` |
character string indicating the type of norm to be used in
the estimate. The default is |

`useInv` |
logical (or This may be an efficient alternative (only) in situations where
Note that the |

`...` |
further arguments passed to or from other methods. |

An estimate of the reciprocal condition number of `x`

.

The condition number of a regular (square) matrix is the product of
the `norm`

of the matrix and the norm of its inverse (or
pseudo-inverse).

More generally, the condition number is defined (also for
non-square matrices `A`

) as

`\kappa(A) = \frac{\max_{\|v\| = 1} \|A v\|}{\min_{\|v\| = 1} \|A v\|}.`

Whenever `x`

is *not* a square matrix, in our method
definitions, this is typically computed via `rcond(qr.R(qr(X)), ...)`

where `X`

is `x`

or `t(x)`

.

The condition number takes on values between 1 and infinity, inclusive, and can be viewed as a factor by which errors in solving linear systems with this matrix as coefficient matrix could be magnified.

`rcond()`

computes the *reciprocal* condition number
`1/\kappa`

with values in `[0,1]`

and can be viewed as a
scaled measure of how close a matrix is to being rank deficient (aka
“singular”).

Condition numbers are usually estimated, since exact computation is costly in terms of floating-point operations. An (over) estimate of reciprocal condition number is given, since by doing so overflow is avoided. Matrices are well-conditioned if the reciprocal condition number is near 1 and ill-conditioned if it is near zero.

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

`norm`

, `kappa()`

from package
base computes an *approximate* condition number of a
“traditional” matrix, even non-square ones, with respect to the
`p=2`

(Euclidean) `norm`

.
`solve`

.

`condest`

, a newer *approximate* estimate of
the (1-norm) condition number, particularly efficient for large sparse
matrices.

```
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)))
```

[Package *Matrix* version 1.6-1 Index]