Learn R Programming

gnm (version 0.8-1)

qrSolve: Minimum-length solution of a linear system

Description

This function solves the linear system Ax = b, producing the minimum-length solution if A is not of full rank. If b is not specified, the Moore-Penrose generalized inverse (pseudo-inverse) is returned. The method involves two applications of QR decomposition.

Usage

qrSolve(A, b, rank = NULL, ...)

Arguments

A
A numeric matrix (m by n, say)
b
A numeric vector of length m, or a matrix with m rows
rank
Numeric: the algebraic rank of A, if known.
...
Other possible arguments to be passed to qr.

Value

  • If b is a vector, the result is a vector of length n. If b is a matrix, the result is a matrix with n rows and the same number of columns as b. In either case, the "rank" attribute of the result contains either the rank argument if specified, or the algebraic rank as calculated internally by qr(A, ...)$rank.

Details

If A is square, the solution will be equivalent to (but should be faster than) MPinv(A) %*% b. No check is made on the validity of a specified rank argument. If rank is left unspecified, the rank of A is determined numerically by qr. If the wrong rank is specified, failure (with an unpredictable error message) is almost certain.

References

Lecture notes by James P Reilly, at http://www.ece.mcmaster.ca/~reilly/ee731/ch10.ps

See Also

qr.solve, qr.coef, MPinv

Examples

Run this code
set.seed(1)
x <- rnorm(3)
z <- rnorm(3)
xz <- x + z
X <- cbind(x, z, xz)
XX <- crossprod(X) # has rank 2
MPinv(XX, method = "chol")
qrSolve(XX)
b <- rnorm(3)
crossprod(MPinv(XX), b) 
qrSolve(XX, b)
crossprod(XX, qrSolve(XX, b))
fitted(lm(b ~ -1 + XX))

Run the code above in your browser using DataLab