MatMPpinv function

Moore-Penrose pseudoinverse of a squared matrix

Moore-Penrose pseudoinverse of a squared matrix

For a matrix AA its Moore-Penrose pseudoinverse is such a matrix A[+]A[+] which satisfies

(i) c("%", "\n\n", "\tAA[+]A=A\tA*A[+]*A = A") ,
(ii) c("%", "\n\n", "A[+]AA[+]=A[+] A[+]*A*A[+] = A[+]") ,
(iii) c("%", "\n\n", "(AA[+])=AA[+] (A*A[+])' = A*A[+]") ,
(iv) c("%", "\n\n", "(A[+]A)=A[+]A (A[+]*A)' = A[+]*A") .

Computation is done using spectral decomposition. At this moment, it is implemented for symmetric matrices only.

MatMPpinv(A)

Arguments

  • A: either a numeric vector in which case inverse of each element of A is returned or a squared matrix.

Returns

Either a numeric vector or a matrix.

References

Golub, G. H. and Van Loan, C. F. (1996, Sec. 5.5). Matrix Computations. Third Edition. Baltimore: The Johns Hopkins University Press.

Author(s)

Arnošt Komárek arnost.komarek@mff.cuni.cz

Examples

set.seed(770328) A <- rWISHART(1, 5, diag(4)) Ainv <- MatMPpinv(A) ### Check the conditions prec <- 13 round(A - A %*% Ainv %*% A, prec) round(Ainv - Ainv %*% A %*% Ainv, prec) round(A %*% Ainv - t(A %*% Ainv), prec) round(Ainv %*% A - t(Ainv %*% A), prec)