{ "cells": [ { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original matrix:\n", " [[3 7 7 3]\n", " [6 5 1 1]\n", " [4 4 1 4]\n", " [2 9 0 0]]\n", "\n", "Minors matrix (M):\n", " [[ 27. 6. -148. -16.]\n", " [ 225. 50. 32. 183.]\n", " [ 36. 8. 119. 295.]\n", " [ -88. -125. -80. 17.]]\n", "\n", "Cofactors matrix (C):\n", " [[ 27. -6. -148. 16.]\n", " [-225. 50. -32. 183.]\n", " [ 36. -8. 119. -295.]\n", " [ 88. -125. 80. 17.]]\n", "\n", "Adjugate matrix (A):\n", " [[-0.028451 0.23709168 -0.03793467 -0.09272919]\n", " [ 0.00632244 -0.05268704 0.00842993 0.1317176 ]\n", " [ 0.15595364 0.0337197 -0.12539515 -0.08429926]\n", " [-0.01685985 -0.19283456 0.31085353 -0.01791359]]\n", "\n", "Check (built-in inverse):\n", " [[-0.028451 0.23709168 -0.03793467 -0.09272919]\n", " [ 0.00632244 -0.05268704 0.00842993 0.1317176 ]\n", " [ 0.15595364 0.0337197 -0.12539515 -0.08429926]\n", " [-0.01685985 -0.19283456 0.31085353 -0.01791359]]\n" ] } ], "source": [ "# D. Scott\n", "# Linear Algebra: TCI\n", "# Code Challenge 12.1\n", "# Implement the MCA algorithm for finding matrix inverse\n", "\n", "import random\n", "import numpy as np\n", "\n", "# generate random 4 x 4 matrix\n", "num1 = []\n", "for i in range(0,16):\n", " num1.append(random.randint(0,10))\n", "A = np.array(num1).reshape(4,4)\n", "\n", "print(\"Original matrix:\\n\",A)\n", "\n", "minors = []\n", "\n", "# determine minors matrix (M)\n", "for i in range(0,4):\n", " for j in range(0,4):\n", " sub_matrix = A.copy()\n", " sub_matrix = np.delete(sub_matrix,i,axis=0)\n", " sub_matrix = np.delete(sub_matrix,j,axis=1)\n", " minors.append(np.linalg.det(sub_matrix))\n", "minors = np.array(minors).reshape(4,4)\n", "print(\"\\nMinors matrix (M):\\n\",minors)\n", "\n", "# determine cofactors matrix (C)\n", "C = np.ones((4,4))\n", "scale = 1\n", "for i in range(0,4):\n", " for j in range(0,4):\n", " C[i,j] *= scale\n", " scale *= -1\n", " scale *= -1\n", "C *= minors\n", "print(\"\\nCofactors matrix (C):\\n\",C)\n", "\n", "# determine adjugate matrix (A)\n", "adj = (1/np.linalg.det(A))*C.transpose()\n", "print(\"\\nAdjugate matrix (A):\\n\",adj)\n", "\n", "print(\"\\nCheck (built-in inverse):\\n\",np.linalg.inv(A))" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }