title 'IMLINV1: Inverse of a matrix'; proc iml; reset print log fuzz; *--INVERSE OF A MATRIX; A = {5 1 0, 3 -1 2, 4 0 -1}; r = det(A); *-- 1. det(a)<>0, so inverse exists; AI = inv(A); *-- 2. AI * A = I(nrow(A)); r = AI * A; *-- 3. Inverse is REFLEXIVE: inv(inv(A)) = A; r = inv(AI); *-- 4. inv(A) is SYMMETRIC only if A is symmetric; r = inv( t(A) ); B = {4 2 2, 2 3 1, 2 1 3}; r = inv(B); r = inv(t(B)); *--PROPERTIES OF MATRIX INVERSE; *-- 1. inv of diagonal matrix = diag( 1/ diagonal); D =diag({ 1 2 4 }); r = inv(D); r = diag(1 / {1 2 4}); *-- 2. INVERSE of an INVERSE: inv(inv(A)) = A; A = {1 2 3, 2 3 0, 0 1 2}; AI=inv(A); r = inv(AI); *-- 3. inverse of a transpose: inv(t(a)) = t( inv(a) ); r = inv( t(A) ); r = t( inv(A) ); *-- 4. inv of scalar # matrix: inv( k#A ) = (1/k) # inv(A); r = inv(5#A); r = (1/5)#inv(A); *-- 5. inverse of a matrix product: inv(A * B) = inv(B) * inv(A); B = {1 2 3, 1 3 2, 2 4 1}; r = A * B; r = inv(A * B); r = (inv(B)) * (inv(A)); quit;