pinv: Pseudoinverse or Generalized Inverse In pracma: Practical Numerical Math Functions

Description

Computes the Moore-Penrose generalized inverse of a matrix.

Usage

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

Arguments

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

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

Value

The pseudoinverse of matrix A.

Note

The pseudoinverse or ‘generalized inverse’ is also provided by the function ginv() in package ‘MASS’. It is included in a somewhat simplified way to be independent of that package.

References

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

Examples

 1 2 3 4 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

Example output

[,1]
[1,]   32
[2,]   26
[3,]   20

pracma documentation built on Dec. 11, 2021, 9:57 a.m.