# pinv: Pseudoinverse or Generalized Inverse In pracma: Practical Numerical Math Functions

## 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.

`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.