Pseudoinverse or Generalized Inverse
Computes the Moore-Penrose generalized inverse of a matrix.
pinv(A, tol=.Machine$double.eps^(2/3))
A |
matrix |
tol |
tolerance used for assuming an eigenvalue is zero. |
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)
.
The pseudoinverse of matrix A
.
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.
Ben-Israel, A., and Th. N. E. Greville (2003). Generalized Inverses - Theory and Applications. Springer-Verlag, New York.
MASS::ginv
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
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.