title 'IMLINV3: Generailzed inverse of a matrix'; proc iml; reset print log fuzz fw=6; *-- Construct a square, singular matrix [Timm, EX. 1.7.3]; A = {4 4 -2, 4 4 -2, -2 -2 10}; r = det(A); *-- rank is 2, so inv(A) wont work; r = echelon(A); r = inv(A); *-- Generalized inverse does exist for any matrix (but unlike ordinary inverse is not unique); AI = ginv(A); *--PROPERTIES OF GENERALIZED INVERSE (Moore-Penrose inverse); r = A * AI * A; r = AI * A * AI; *--Both (A*AI) and (AI*A) are symmetric, but A * AI ^= AI * A ^= I; r = A * AI; r = AI * A; *--For a rectangular matrix, inv(A'A)*A' is the ginv of * A if (A'A)- is ginv of (A'A) [TIMM: EX 1.6.11]; A = J(4,1) || {1 0, 1 0, 0 1, 0 1}; AA= t(A) * A; AAI= ginv(AA); *--ginv of A is AAI * A'; AI = AAI * t(A); r = A * AI * A; r = AI * A * AI; quit;