rankMatrix {Matrix}R Documentation

Rank of a Matrix

Description

Compute the rank of matrix, a well-defined functional in theory, somewhat ambigous in practice. We provide several methods, the default corresponding to Matlab's definition.

Usage

rankMatrix(x, tol = NULL,
           method = c("tolNorm2", "qrLINPACK", "useGrad", "maybeGrad"),
           sval = svd(x, 0, 0)$d)

Arguments

x numeric matrix, of dimension n x m, say.
tol nonnegative number specifying a tolerance for “practically zero” with specific meaning depending on method; by default, max(dim(x)) * .Machine$double.eps * abs(max(sval)) is according to Matlab's default (for its only method "tolNorm2").
method a character string specifying the computational method, can be abbreviated:
tolNorm2
the number of singular values >= tol;
qrLINPACK
= qr(x, tol, LAPACK=FALSE)$rank; this used to be the recommended way to compute a matrix rank for a while in the past. For this method, sval are not used (nor computed).
useGrad
considering the “gradient” of the (decreasing) singular values, the index of the smallest gap.
maybeGrad
choosing method "useGrad" only when that seems reasonable; otherwise using "tolNorm2".
sval numeric vector of non-increasing singular values of x; typically unspecified and computed from x.

Value

positive integer in 1:min(dim(x)), with attributes detailing the method used.

Author(s)

Martin Maechler; for the "*Grad" methods, building on suggestions by Ravi Varadhan.

See Also

qr, svd.

Examples

rankMatrix(cbind(1, 0, 1:3)) # 2

(meths <- eval(formals(rankMatrix)$method))

## a "border" case:
H12 <- Hilbert(12)
rankMatrix(H12, tol = 1e-20) # 12;  but  11  with default method & tol.
sapply(meths, function(.m.) rankMatrix(H12, method = .m.))
## tolNorm2 qrLINPACK   useGrad maybeGrad
##       11        12        11        11

[Package Matrix version 0.999375-29 Index]