简体   繁体   中英

Computing the pseudo inverse of a matrix in R

I am trying to compute the pseudo inverse of a matrix, call it M, which might look the following way:

M=matrix(c(-1,-1,1,0,0,1),nrow=2,ncol=3)

What I need is the left inverse of this matrix, such that:

M_inv_l M=I

Using the MASS package, I am able to find the right inverse:

M_inv_r=ginv(M)

Where M M_inv_r=I.

Is there a way to compute the left inverse instead of the right inverse? I haven't been able to find an answer on the forum.

Thanks

A matrix of full row rank has a left inverse:

> M %*% ginv(M)
             [,1]          [,2]
[1,] 1.000000e+00 -2.220446e-16
[2,] 1.110223e-16  1.000000e+00

A matrix of full column rank has a right inverse:

> ginv(t(M)) %*% t(M)
              [,1] [,2]
[1,]  1.000000e+00    0
[2,] -5.551115e-17    1

See the Wikipedia article on generalized inverses .

I don't think that this is possible in general - you're trying to solve 9 linear equations with only 6 values. Specifically, look at the top row of your inverse:

-1* Minv[1,1] + -1*Minv[1,2] = 1                     [1]
 1* Minv[1,1] +  0*Minv[1,2] = 0 => Minv[1,1]=0      [2]
 0* Minv[1,1] +  1*Minv[1,2] = 0 => Minv[1,2]=0      [3]

It should be clear that substituting [2] and [3] into [1] produces a contradiction.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM