R: Moore-Penrose Pseudoinverse of a Real-valued Matrix

MPinv {gnm} | R Documentation

## Moore-Penrose Pseudoinverse of a Real-valued Matrix

### Description

Computes the Moore-Penrose generalized inverse.

### Usage

    MPinv(mat, tolerance = 100*.Machine$double.eps,
          rank = NULL, method = "svd")

### Arguments

`mat` | a real matrix.
`tolerance` | A positive scalar which determines the tolerance for detecting zeroes among the singular values.
`rank` | Either `NULL`, in which case the rank of `mat` is determined numerically; or an integer specifying the rank of `mat` if it is known. No check is made on the validity of any non-`NULL` value.
`method` | Character, one of `"svd", "chol"`. The specification `method = "chol"` is valid only for symmetric matrices.

### Details

Real-valuedness is not checked, neither is symmetry when `method = "chol"`.

### Value

A matrix, with an additional attribute named `"rank"` containing the numerically determined rank of the matrix.

### Author(s)

David Firth and Heather Turner

### References

Harville, D. A. (1997). Matrix Algebra from a Statistician's Perspective. New York: Springer.

Courrieu, P. (2005). Fast computation of Moore-Penrose inverse matrices. Neural Information Processing 8, 25–29

### See Also

`ginv`

### Examples

    A <- matrix(c(1, 1, 0,
                  1, 1, 0,
                  2, 3, 4), 3, 3)
    B <- MPinv(A)
    A %*% B %*% A - A  # essentially zero
    B %*% A %*% B - B  # essentially zero
    attr(B, "rank")    # here 2

    ## demonstration that "svd" and "chol" deliver essentially the same
    ## results for symmetric matrices:
    A <- crossprod(A)
    MPinv(A) - MPinv(A, method = "chol") ##  (essentially zero)

[Package gnm version 1.0-8 Index]