# D. Scott
# Linear Algebra: TCI
# Code Challenge 12.1
# Implement the MCA algorithm for finding matrix inverse
import random
import numpy as np
# generate random 4 x 4 matrix
num1 = []
for i in range(0,16):
num1.append(random.randint(0,10))
A = np.array(num1).reshape(4,4)
print("Original matrix:\n",A)
minors = []
# determine minors matrix (M)
for i in range(0,4):
for j in range(0,4):
sub_matrix = A.copy()
sub_matrix = np.delete(sub_matrix,i,axis=0)
sub_matrix = np.delete(sub_matrix,j,axis=1)
minors.append(np.linalg.det(sub_matrix))
minors = np.array(minors).reshape(4,4)
print("\nMinors matrix (M):\n",minors)
# determine cofactors matrix (C)
C = np.ones((4,4))
scale = 1
for i in range(0,4):
for j in range(0,4):
C[i,j] *= scale
scale *= -1
scale *= -1
C *= minors
print("\nCofactors matrix (C):\n",C)
# determine adjugate matrix (A)
adj = (1/np.linalg.det(A))*C.transpose()
print("\nAdjugate matrix (A):\n",adj)
print("\nCheck (built-in inverse):\n",np.linalg.inv(A))
Original matrix: [[3 7 7 3] [6 5 1 1] [4 4 1 4] [2 9 0 0]] Minors matrix (M): [[ 27. 6. -148. -16.] [ 225. 50. 32. 183.] [ 36. 8. 119. 295.] [ -88. -125. -80. 17.]] Cofactors matrix (C): [[ 27. -6. -148. 16.] [-225. 50. -32. 183.] [ 36. -8. 119. -295.] [ 88. -125. 80. 17.]] Adjugate matrix (A): [[-0.028451 0.23709168 -0.03793467 -0.09272919] [ 0.00632244 -0.05268704 0.00842993 0.1317176 ] [ 0.15595364 0.0337197 -0.12539515 -0.08429926] [-0.01685985 -0.19283456 0.31085353 -0.01791359]] Check (built-in inverse): [[-0.028451 0.23709168 -0.03793467 -0.09272919] [ 0.00632244 -0.05268704 0.00842993 0.1317176 ] [ 0.15595364 0.0337197 -0.12539515 -0.08429926] [-0.01685985 -0.19283456 0.31085353 -0.01791359]]