kappa {base}R Documentation

Compute or Estimate the Condition Number of a Matrix

Description

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.

Usage

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, ...)

Arguments

z,x A matrix or a the result of qr or a fit from a class inheriting from "lm".
exact logical. Should the result be exact?
norm character string, specifying the matrix norm wrt to which the condition number is to be computed. "O", the default, means the One- or 1-norm. The (currently only) other possible value is "I" for the infinity norm.
method character string, specifying the method to be used; "qr" is default for back-compatibility, mainly.
triangular logical. If true, the matrix used is just the lower triangular part of z.
LINPACK logical. If true and z is not complex, the Linpack routine dtrco() is called; otherwise the relevant Lapack routine is.
... further arguments passed to or from other methods.

Details

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.

Value

The condition number, kappa, or an approximation if exact = FALSE.

Author(s)

The design was inspired by (but differs considerably from) the S function of the same name described in Chambers (1992).

References

Chambers, J. M. (1992) Linear models. Chapter 4 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

See Also

svd for the singular value decomposition and qr for the QR one.

Examples

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

[Package base version 2.9.1 Index]