pseudoinverse {corpcor}  R Documentation 
The standard definition for the inverse of a matrix fails if the matrix is not square or singular. However, one can generalize the inverse using singular value decomposition. Any rectangular real matrix M can be decomposed as
M = U D V',
where U and V are orthogonal, V' means V transposed, and
D is a diagonal matrix containing only the positive singular values
(as determined by tol
, see also fast.svd
).
The pseudoinverse, also known as MoorePenrose or generalized inverse is then obtained as
iM = V D^(1) U' .
pseudoinverse(m, tol)
m 
matrix 
tol 
tolerance  singular values larger than
tol are considered nonzero (default value:

The pseudoinverse has the property that the sum of the squares of all
the entries in iM %*% M  I
, where I is an appropriate
identity matrix, is minimized. For nonsingular matrices the
pseudoinverse is equivalent to the standard inverse.
A matrix (the pseudoinverse of m).
Korbinian Strimmer (http://strimmerlab.org).
fast.svd
# load corpcor library library("corpcor") # a singular matrix m = rbind( c(1,2), c(1,2) ) # not possible to invert exactly try(solve(m)) # pseudoinverse p = pseudoinverse(m) p # characteristics of the pseudoinverse zapsmall( m %*% p %*% m ) == zapsmall( m ) zapsmall( p %*% m %*% p ) == zapsmall( p ) zapsmall( p %*% m ) == zapsmall( t(p %*% m ) ) zapsmall( m %*% p ) == zapsmall( t(m %*% p ) ) # example with an invertable matrix m2 = rbind( c(1,1), c(1,0) ) zapsmall( solve(m2) ) == zapsmall( pseudoinverse(m2) )