kappa()
computes by default (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.
rcond()
computes an approximation of the reciprocal
condition number, see the details.
kappa(z, ...)
"kappa"(z, exact = FALSE, norm = NULL, method = c("qr", "direct"), ...)
"kappa"(z, ...)
"kappa"(z, ...)
.kappa_tri(z, exact = FALSE, LINPACK = TRUE, norm = NULL, ...)
rcond(x, norm = c("O","I","1"), triangular = FALSE, ...)
qr
or a fit from
a class inheriting from "lm"
.norm
. For rcond
, the default is "O"
,
meaning the One- or 1-norm. The (currently only) other
possible value is "I"
for the infinity norm."qr"
is the default for back-compatibility, mainly.z
.z
is not complex, the
LINPACK routine dtrco()
is called; otherwise the relevant
LAPACK routine is.kappa.*()
, notably LINPACK
when norm
is not
"2"
.exact = FALSE
.
DTRCON
and ZTRCON
and the LINPACK
routine DTRCO
. LAPACK and LINPACK are from http://www.netlib.org/lapack and
http://www.netlib.org/linpack and their guides are listed
in the references.kappa()
, if exact = FALSE
(the default) the 2-norm
condition number is estimated by a cheap approximation. However, 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
and rcond
are different interfaces to
partly identical functionality.
.kappa_tri
is an internal function called by kappa.qr
and
kappa.default
.
Unsuccessful results from the underlying LAPACK code will result in an error giving a positive error code: these can only be interpreted by detailed study of the FORTRAN code.
Chambers, J. M. (1992) Linear models. Chapter 4 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.
Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.
norm
;
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) # 0.677 (i.e., rel.error = 32%)
Run the code above in your browser using DataLab