pinv {pracma} | R Documentation |
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 |
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
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