pracma (version 1.9.9)

pinv: Pseudoinverse or Generalized Inverse

Description

Computes the Moore-Penrose generalized inverse of a matrix.

Usage

pinv(A, tol=.Machine$double.eps^(2/3))

Arguments

A
matrix
tol
tolerance used for assuming an eigenvalue is zero.

Value

The pseudoinverse of matrix A.

Details

Compute the generalized inverse B of a matrix A using the singular value decomposition svd(). This generalized invers is characterized by this equation: A %*% B %*% A == A

The pseudoinverse $B$ solves the problem to minimize $|A x - b|$ by setting $x = B b$

s <- svd(A) D <- diag(s\$d) Dinv <- diag(1/s\$d) U <- s\$u; V <- s\$v X = V Dinv t(U)

Thus B is computed as s$v %*% diag(1/s$d) %*% t(s$u).

References

Ben-Israel, A., and Th. N. E. Greville (2003). Generalized Inverses - Theory and Applications. Springer-Verlag, New York.

See Also

MASS::ginv

Examples

Run this code
A <- matrix(c(7,6,4,8,10,11,12,9,3,5,1,2), 3, 4)
b <- apply(A, 1, sum)  # 32 16 20  row sum
x <- pinv(A) %*% b
A %*% x              #=> 32 16 20  as column vector

Run the code above in your browser using DataLab