kappa {base} | R Documentation |
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), and hence depends on the kind of matrix-norm.
kappa()
computes an estimate of the 2-norm condition number of
a matrix or of the R
matrix of a QR
decomposition,
perhaps of a linear fit. The 2-norm condition number can be shown to
be the ratio of the largest to the smallest non-zero singular
value of the matrix.
kappa(z, ...)
## Default S3 method:
kappa(z, exact = FALSE,
norm = NULL, method = c("qr", "direct"), ...)
## S3 method for class 'lm'
kappa(z, ...)
## S3 method for class 'qr'
kappa(z, ...)
kappa.tri(z, exact = FALSE, LINPACK = TRUE, norm=NULL, ...)
rcond(x, norm = c("O","I","1"), triangular = FALSE, ...)
z , x |
A matrix or a the result of |
exact |
logical. Should the result be exact? |
norm |
character string, specifying the matrix norm wrt to which
the condition number is to be computed. |
method |
character string, specifying the method to be used;
|
triangular |
logical. If true, the matrix used is just the lower
triangular part of |
LINPACK |
logical. If true and |
... |
further arguments passed to or from other methods. |
For kappa()
, if exact = FALSE
(the default) the
2-norm condition number is estimated by a cheap approximation.
Following S, by default, this uses the LINPACK routine dtrco()
.
However, in R (or S) the exact calculation (via svd
) is
also likely to be quick enough.
Note that the 1- and Inf-norm condition numbers are much faster to
calculate, and rcond()
computes these reciprocal
condition numbers, also for complex matrices, using standard Lapack
routines.
kappa.tri
is an internal function called by kappa.qr
.
The condition number, kappa
, or an approximation if
exact = FALSE
.
The design was inspired by (but differs considerably from) the S function of the same name described in Chambers (1992).
Chambers, J. M. (1992) Linear models. Chapter 4 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.
svd
for the singular value decomposition and
qr
for the QR
one.
kappa(x1 <- cbind(1,1:10))# 15.71
kappa(x1, exact = TRUE) # 13.68
kappa(x2 <- cbind(x1,2:11))# high! [x2 is singular!]
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
sv9 <- svd(h9 <- hilbert(9))$ d
kappa(h9)# pretty high!
kappa(h9, exact = TRUE) == max(sv9) / min(sv9)
kappa(h9, exact = TRUE) / kappa(h9) # .677 (i.e., rel.error = 32%)