pinv: Pseudoinverse or Generalized Inverse

Description Usage Arguments Details Value Note References See Also Examples

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.

See Also

MASS::ginv

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.