{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy as sp\n", "import scipy.linalg\n", "import sympy as sy\n", "sy.init_printing() \n", "import matplotlib.pyplot as plt\n", "from mpl_toolkits.mplot3d import Axes3D\n", "plt.style.use('ggplot')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "np.set_printoptions(precision=3)\n", "np.set_printoptions(suppress=True)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# from IPython.core.interactiveshell import InteractiveShell\n", "# InteractiveShell.ast_node_interactivity = \"all\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def round_expr(expr, num_digits):\n", " return expr.xreplace({n : round(n, num_digits) for n in expr.atoms(sy.Number)})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualization of Determinants" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The physical idea of determinants is compute the area surrounded by vectors, for instance we have a matrix\n", "$$\n", "A=\\left[\\begin{matrix} a & b\\cr c & d \\end{matrix}\\right]\n", "$$\n", "Then the determinant is the parallelogram form by \n", "$$\n", "\\left[\\begin{matrix} a \\cr c \\end{matrix}\\right]\\qquad \\left[\\begin{matrix} b \\cr d \\end{matrix}\\right]\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we demonstrate with a matrix\n", "$$\n", "\\left[\\begin{matrix} 2 & 0\\cr 0 & 3 \\end{matrix}\\right]\n", "$$\n", "It's also easy to understand the area formed by these two vectors are actually a rectangle." ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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QdasWcOVV17Zb0xPTw+XX345P/jBD3j44Yf59re/vaNnV199NaeddhqPPfYYp5122k4hodfGIJBep7/5m7/hmGOO4X3vex+/+MUvdix//PHHmT17NtOnT+eUU07hP/7jP7j77rtZunQpn/70p5k2bRqPP/74gOMA5s6dy5/92Z/R2trKZz/7WebOnctll11Ga2srU6ZM4Uc/+hGXXnopxx57LHPnzt2x38mTJ9PZ2cmTTz7Jscceyyc+8QmOP/54zjjjDLZu3QrA17/+dU488USmTp3K7/7u77Jly5Yd+/zUpz7FySefzJQpU/jud78LwPz58/nJT37CtGnT+Pu///vX1a/rr7+e+fPns++++wLw1re+td+Y++67j6OOOoopU6YwatQo5syZw+233w7A7bffzsUXXwzAxRdfzJIlS15XPc3Q8RQsXgxdXc2upCYz31DT9OnTc9B1dmbbggWZGzYM/raHgba2tmaXMGQtWrQo3/a2t+ULL7yQGzduzCOPPDK/9KUvZWbme9/73nz00UczM/Oee+7J1tbWzMy8+OKL89Zbb92xjV2NO+uss7K7u3vH/O///u/n9u3bc8mSJTlmzJh88MEHs6enJ0844YR84IEHMjNz0qRJ+eyzz+Yvf/nLrFQqO5afd955+c1vfjMzMzs7O3fs/y/+4i/yuuuu27GPc889N3t6enLNmjV55JFHZmb1GDjrrLMG7MGmTZty6tSp/aYjjzwy16xZ02/81KlT86qrrsqZM2fmqaeemvfdd1+/Mbfeemt+/OMf3zF/88035+WXX56ZmQceeOBOY8eOHTtgXUMW5NcWLMsxYzL33Tfz9NMzb7klc9OmRu+WFVnnvDqykSETEbOBa4EK8E+ZeXWf9VFbfyawBZibmasaWZM0mH7+85/z4Q9/mP322w+AD37wgwB0dXVx9913c9555+0Yu23btn7v39248847j0qlsmP+7LPPJiJ4+9vfTktLC29/+9sBOP7443nyySeZNm3aTts/4ogjdiybPn06Tz75JAAPPfQQn//853n++efp6urid37nd3a850Mf+hAjRozguOOO4ze/+c1uezBmzBhWr17db3l7ezvHHXdcv+Xd3d0899xz3HPPPdx///383u/9Hk888QTV00FV9by1s97rh4PNm6v/3nkn/PSn8NJL8J73wKWXwtlnw5gxe6+W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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "matrix = np.array([[2, 0], [0, 3]])\n", "def plot_2ddet(matrix):\n", " # Calculate the determinant of the matrix\n", " det = np.linalg.det(matrix)\n", "\n", " # Create a figure and axis\n", " fig, ax = plt.subplots(figsize=(6, 6))\n", "\n", " # Plot the vectors\n", " ax.arrow(0, 0, matrix[0,0], matrix[0,1], head_width=0.1, head_length=0.1, color='b')\n", " ax.arrow(0, 0, matrix[1,0], matrix[1,1], head_width=0.1, head_length=0.1, color='r')\n", " ax.arrow(matrix[0,0], matrix[0,1], matrix[1,0], matrix[1,1], head_width=0.1, head_length=0.1, color='r')\n", " ax.arrow(matrix[1,0], matrix[1,1], matrix[0,0], matrix[0,1], head_width=0.1, head_length=0.1, color='b')\n", "\n", " # Annotate the determinant value\n", " ax.annotate(f'determinant = {det:.2f}', (matrix[0,0]/2, matrix[0,1]/2))\n", "\n", " # Add labels and show the plot\n", " ax.set_xlabel('x')\n", " ax.set_ylabel('y')\n", " ax.grid()\n", " plt.show()\n", " \n", "if __name__ == '__main__':\n", " plot_2ddet(matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the matrix is not diagonal, the area will takes a form of parallelogram. Similarly, you can imagine in 3D space, determinant measure the volume of parallelepiped. " ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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Pn78eI444ggaNWpE5cqV6datGx9//DEAH3/8Md27dwege/fuDBkypFzxSEQUtdWTjw9t2ZffjoK95/LyfIdTJq+++qpt1qyZ3bx5s/355w0WDrfwhH3jDWvPOOMMO3fuXGuttePGjbMZGRnWWmu7d+9uP/zww53vsafjzjrrLJuTk7Pz80suucTm5eXZIUOG2Fq1atlp06bZ3Nxce/zxx9vJkydba6097LDD7KpVq+zChQtthQoVdn79oosusu+995611trVq1fvPP8999xjb7nllp3nuPDCC21ubq6dMWOGPfzww6217lqdddZZhf4MNm7caFu0aFHox4wZMwp9Te/evW39+vVt06ZN7cqVK//w/Q8//NBee+21Oz9/99137U033WSttbZ27dq/O7ZOnTo765H6vxEBidyyT7NowmbpUlcuXJi0QzM//fQT559/Ph99VJ0rrwQ4h/vug27dsrjllrFcdNFFO4/dvn37H16flZXF2LFFH3fRRRdRYZcZRWeffTbGGI499ljS0tI49thjAWjatCmLFi2iZcHi8fkaNmy482vp6eksWrQIgOnTp3Pvvfeyfv16srKydr4PwHnnncdee+3FMcccw4oVK4r9GdSqVYspU6YUe9yuHn30UR599FH69OnDiy++yIO7jmFBwT7Hv1NYT1+kgBJ8mCxYACtWuB0tCjYZTVKvvmpYtcqtAnnssW4qf15eHnXq1Ck28RV3XI3dFlmrUqUKAHvttdfOesHnhY3T73pMhQoVdg7R9OjRgyFDhtCiRQvefvttMjMzC31NYYl2d5s2baJtETuRDBgwgGMKduIqxGWXXcZZZ531hwRfv359lixZsvPzpUuXctBBBwGQlpbG8uXLqVevHsuXL+fAAw8sNkaJPo3Bh4W1cPjhrv74435jKYf586FSpeasWjWYgQO3MnjwJj799BPAjTM3bNiQDz/8EHCJcurUqYDr8W7atKnY44K0adMm6tWrx44dO+jfv3+xx+8ac2HfmzJlSqEfhSX3efPm7awPHTqUo48++g/HtGrVinnz5rFw4UKys7PJzMzknHPOAeCcc87hnXfeAeCdd97h3HPPLVGbJdqU4MPiiitc2aKF3zjK4fHH4YgjoH79o7j33kvo3bslXbt2/V1Ptn///vTt25cWLVrQtGnTnTcJu3XrxhNPPMFxxx3H/Pnzizwu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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "matrix = np.array([[2, 3], [1, 3]])\n", "plot_2ddet(matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, determinant can be a _negative number_, it means we flip the area like flipping a piece of paper." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What if two vectors are linearly dependent? The area between vectors will be zero." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "matrix = np.array([[2, 3], [4, 6]])\n", "plot_2ddet(matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "This is the exact reason if we want a matrix to have full rank or linear independent columns, the determinant can't equal to zero!\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a plot of parallelepiped, in case you are not sure what it is." ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(8, 8))\n", "ax = fig.add_subplot(111, projection='3d')\n", "\n", "# Define the vertices of the parallelepiped\n", "vertices = [[2, 0, 0], [2, 3, 0], [0, 3, 0], [0, 0, 0],\n", " [2, 3, 4], [2, 6, 4], [0, 6, 4], [0, 3, 4]]\n", "\n", "# Plot the edges of the parallelepiped\n", "for i in range(4):\n", " xs = [vertices[i][0], vertices[i+4][0]]\n", " ys = [vertices[i][1], vertices[i+4][1]]\n", " zs = [vertices[i][2], vertices[i+4][2]]\n", " ax.plot(xs, ys, zs, color='red')\n", "\n", "for i in range(4):\n", " xs = [vertices[i][0], vertices[(i+1)%4][0]]\n", " ys = [vertices[i][1], vertices[(i+1)%4][1]]\n", " zs = [vertices[i][2], vertices[(i+1)%4][2]]\n", " ax.plot(xs, ys, zs, color='blue')\n", "\n", "for i in range(4,8):\n", " xs = [vertices[i][0], vertices[(i+1)%4+4][0]]\n", " ys = [vertices[i][1], vertices[(i+1)%4+4][1]]\n", " zs = [vertices[i][2], vertices[(i+1)%4+4][2]]\n", " ax.plot(xs, ys, zs, color='k')\n", "\n", "# Add annotations for the coordinates at each vertex\n", "for vertex in vertices:\n", " ax.text(vertex[0], vertex[1], vertex[2], f\"({vertex[0]}, {vertex[1]}, {vertex[2]})\")\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Computation of Determinants" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For $2\\times 2$ matrix $A$, the algorithm of determinant is\n", "$$\n", " A=\\left|\\begin{matrix} a & b\\cr c & d \\end{matrix}\\right| \\qquad\\text{is equivalent to}\\qquad \\text{det} A=ad-bc\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we experiment with SymPy" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "a, b, c, d, e, f, g, h, i = sy.symbols('a, b, c, d, e, f, g, h, i', real = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With defined symbols, the algorithms of $2\\times 2$ and $3\\times 3$ determinants are" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEkAAAASCAYAAAAXOvPoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADnElEQVR4nO3YW6iVVRAH8N/xTlmcDK1jnS5G9SDHLKno8mDahRAf8iFSSguDyG4mkT2Uw1QIEYRE9hBkZQT10IWiBMkyo5c4ppkRdAGlNC2soKJI7fSwvq2fu7PV6lwIHNjM/taaNWvWf8/81+yvraenxxE5uAwZ7AD+DzKsP51n5inYilcjYlZ/7tW07wIsx/yIWPFf/fV3Jp1X6Y/6eZ9W+67vC2cDBVKfBPsPZAp+x6d94ay/QZpS6QHLpMwciYnYFBF7+sLn3zgpM+dgBs5HB/bgSzwZEc/0Yj8Mt2E+zsR3Ch88qmTStojY2RfBHqZ0YTjWZ+ZkPICpGIUPsCgiNve2MDOn4lZcgrH4AZuGNBkdg+cwAe/jCbyC07EiMxc32Y/AW1iGvZX9GiSewokGno8a2XuqAkoPnq7iuALvZGZ786LMXIZ3MQ1v47HqeUpzJvWgMyJ2NDm4H5/jJjxSm1pebbwED0dET2X/LN6rbAYLpAtxaURsaExk5krcgAVYWhtfirvwMuZFxK+1udEHZFJE/NIMUDX+LbZjTG3xBbgZ6yLioQZAlf06fFY9DjRpNy6Le+sAVbK80l2Ngcw8F4vRjTl1gCiYHJBJmXkcblc46Wwc60Byr296R6WXtAh2V6VbZlJmblHK4nDlhYi4/iD+hisAbMXKXkwaCTCqNrZIOeN9EfFHb373gZSZk7AaJ+BDvKgQ126Fk+bi49raKxUg1rWIeQJ2RsS2VofCV8pVfbiy/RDzXRiBN1rcbI0fZGtt7Cr8qPBPr1LPpOfRjssiYm3dKDMfrL52V8+jMA4b6mVWs78Y47Gq5XEQEdMPNv8vpFFqW1rMX1Pp1ew7x1hsjIg/WzkdUhl3YhLW9gJQu0LY7OeXvdVnXAu/WenBIu0xzROZ2YFb8IUKJLRVutU5sJ9vGik/oarrhuPj8RJOVvqljRARu6vNTsrMmU3BLMbl1eNgdNowOzOPrsU0WuGokbizUYoR8Rs2Y3xmXtvsLDPPysyhbY1XJZm5RukRNih9QgeuVmp1FjZHxDk1B3OVnmq3wl87lKatC9+jE6dFRL3++02qpvZn5VY9CkPxmgLMLKX8F0bE403rZuB1JatWKX9l2jFZaYc66jfXdQovdSpd5xkK8y9VMq677jwiVmIhvsFszMPXSrfag10DBVAlE5VbqxvT8YlSXjcqB5/WDBBExJvKj7sKF+FuzMRPuAfajrx0O7T8BT/UMREPM4F0AAAAAElFTkSuQmCC\n", "text/latex": [ "$\\displaystyle a d - b c$" ], "text/plain": [ "a⋅d - b⋅c" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = sy.Matrix([[a, b], [c, d]])\n", "A.det()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle a e i - a f h - b d i + b f g + c d h - c e g$" ], "text/plain": [ "a⋅e⋅i - a⋅f⋅h - b⋅d⋅i + b⋅f⋅g + c⋅d⋅h - c⋅e⋅g" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = sy.Matrix([[a, b, c], [d, e, f], [g, h, i]])\n", "B.det()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cofactor Expansion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " The $(i,j)$-**cofactor** of $ A$ is denoted as $C_{ij}$ given by\n", " $$C_{i j}=(-1)^{i+j} \\operatorname{det} A_{i j} = (-1)^{i+j} M_{ij}$$\n", " where $M_{ij}$ is the **minor determinant** which excludes $i$th row and $j$th column." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider a matrix $ A$\n", "$$A=\\left[\\begin{array}{rrr}\n", "1 & 5 & 0 \\\\\n", "2 & 4 & -1 \\\\\n", "0 & -2 & 0\n", "\\end{array}\\right]$$\n", "Any determinants can be expanded long its arbitrary row or column, we expand the determinant via the first row\n", "$$\\begin{aligned}\n", "\\operatorname{det} A &=1 \\cdot \\operatorname{det}\\left[\\begin{array}{rr}\n", "4 & -1 \\\\\n", "-2 & 0\n", "\\end{array}\\right]-5 \\cdot \\operatorname{det}\\left[\\begin{array}{cc}\n", "2 & -1 \\\\\n", "0 & 0\n", "\\end{array}\\right]+0 \\cdot \\operatorname{det}\\left[\\begin{array}{rr}\n", "2 & 4 \\\\\n", "0 & -2\n", "\\end{array}\\right] \\\\\n", "&=1(0-2)-5(0-0)+0(-4-0)=-2\n", "\\end{aligned}$$\n", "\n", "The scalars, $1$, $-5$ and $0$, in front of each minor determinant are the elements of first row of $ A$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In general, the expansions across $i$th row or $j$th column are\n", "$$\n", "\\operatorname{det} A=a_{i 1} C_{i 1}+a_{i 2} C_{i 2}+\\cdots+a_{i n} C_{i n}\n", "$$\n", "$$\n", "\\operatorname{det} A=a_{1 j} C_{1 j}+a_{2 j} C_{2 j}+\\cdots+a_{n j} C_{n j}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A SymPy Example of Determinant Expansion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the matrix below and perform a cofactor expansion" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}49 & 0 & 61\\\\73 & 22 & 96\\\\2 & 0 & 32\\end{matrix}\\right]$" ], "text/plain": [ "⎡49 0 61⎤\n", "⎢ ⎥\n", "⎢73 22 96⎥\n", "⎢ ⎥\n", "⎣2 0 32⎦" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = sy.Matrix([[49, 0, 61], [73, 22, 96], [2, 0, 32]]);A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cofactor expansion with the column which has two zero(s) involves the least computation burden:\n", "\n", "$$\\operatorname{det} A = a_{12}(-1)^{1+2}C_{12}+a_{22}(-1)^{2+2}C_{22}+a_{32}(-1)^{3+2}C_{32}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use SymPy function for calculationg minors: ```sy.matrices.matrices.MatrixDeterminant.minor(A, i, 1)```. Also we define a function for cofactor expansion:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def cof_exp(matrix, c): # c is the col that we want to expand\n", " detA = 0\n", " for i in range(matrix.shape[1]): # matrix.shape[1] is the total number of columns\n", " detA += matrix[i, c]*(-1)**(i+c)*sy.matrices.matrices.MatrixDeterminant.minor(matrix, i, c)\n", " return detA" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEEAAAAQCAYAAABJJRIXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADcUlEQVR4nOXXW4hWVRQH8N9MQpDdQMshicgoumsW9VCUUhBlF+0CPVT2UkFGaUqRFKsVCFpgWj5IRUo1L1LoQ4k3jIoMA6ewkCgThSItnQipxLz0sM8Mh+M3w4xfby44LPZea6//2uvs9d/ndBw9etSJLiPqg8xcgGtwEUbjH+zCKiyJiH0N//twEyZgPE5Dd0Q8OBhoZk7B07gUo/ArtmBhRHzZwn/IOJk5CtMwBVdgLA7iWyzDsog4Ul/T2YgxCyOxHovRjUN4CVsz89yG/wt4skrul8E2XktyAT7CRKypcHpwN77IzFYFHA7O/XgL12EzFuFDXI63sSIzO+oLRjQCnB4RB1okPg9z8TyeqJlm4WdsV97UJ4Nll5ldmIM9uDIifqvZJmMjXsb7jaXDwfkBd+Hj+hvPzLn4CvfiHqUwaBShVQEqWaEU4cKGf38ymTlIXv1ynnL6NtcL0BcrM/fjrOai4eBExMYB5ndn5lLMwyS1IjTbYSC5s9Jbh+g/kPyo9Oe1mTm6bsjMG5Ve39AmxmDyb6UP1Seb7dCX0BycijMUorxBKcD8djKIiN7MfA4LsS0zV2EfLlCO8Ho83g7GQJKZI/BwNVxTt7UsgtK3Y2rjNXgkIn5vN5mIWJSZO/EOHq2ZtmN5s03+R5mvkOPqiFhbN7Rsh4joiogOdCkkMg5fZ+bEdjPJzGfxAZYrJ2AkrsYOdGfmK+1itMB8CrPxPR5q2gc6CSAi9mBlZvYorPuuUs3jTWYSFmBlRDxTM/Vk5rQKY3ZmLo2IHceL08CcoVzD23BzRPQ2fYZEjBGxqwpyWZPQhil3VPqYKy4i/lausE5c1QZGv2TmTCzBd5gcEbtb+Q31doBzKn24jbxOrvQx12Bj/mAbGKAi4NfwjVKAAbmms7bo4upjphmss/pYOhubIuKPNnL7vNKPZebYBs5tuB4HsKkNDJn5okKEW5QW2DuYf0ffD1R1dF7FZ/hJubrGKF9o47C7CritBjYVU6thF25VCK5vs3sjYk7NvxNrcQv2Y2UV9xKlVTowMyIWNzY1ZJzMnK6Q7mG8gT9b7HtnRCzvG9SJcQPeVN7GeJyJvxSyeg+vtyCVCZjemBtXPZSfr/4iRMSRzLwdM/CA8qNzCnqxusJY1yLp4eCcX+mTMLNFLPhUKRRqJ+FElv8A2W0/UVBWhSwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 31812$" ], "text/plain": [ "31812" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cof_exp(A,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's easy to verify the expansion algorithm Sympy's determinant evaluation function." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEEAAAAQCAYAAABJJRIXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADcUlEQVR4nOXXW4hWVRQH8N9MQpDdQMshicgoumsW9VCUUhBlF+0CPVT2UkFGaUqRFKsVCFpgWj5IRUo1L1LoQ4k3jIoMA6ewkCgThSItnQipxLz0sM8Mh+M3w4xfby44LPZea6//2uvs9d/ndBw9etSJLiPqg8xcgGtwEUbjH+zCKiyJiH0N//twEyZgPE5Dd0Q8OBhoZk7B07gUo/ArtmBhRHzZwn/IOJk5CtMwBVdgLA7iWyzDsog4Ul/T2YgxCyOxHovRjUN4CVsz89yG/wt4skrul8E2XktyAT7CRKypcHpwN77IzFYFHA7O/XgL12EzFuFDXI63sSIzO+oLRjQCnB4RB1okPg9z8TyeqJlm4WdsV97UJ4Nll5ldmIM9uDIifqvZJmMjXsb7jaXDwfkBd+Hj+hvPzLn4CvfiHqUwaBShVQEqWaEU4cKGf38ymTlIXv1ynnL6NtcL0BcrM/fjrOai4eBExMYB5ndn5lLMwyS1IjTbYSC5s9Jbh+g/kPyo9Oe1mTm6bsjMG5Ve39AmxmDyb6UP1Seb7dCX0BycijMUorxBKcD8djKIiN7MfA4LsS0zV2EfLlCO8Ho83g7GQJKZI/BwNVxTt7UsgtK3Y2rjNXgkIn5vN5mIWJSZO/EOHq2ZtmN5s03+R5mvkOPqiFhbN7Rsh4joiogOdCkkMg5fZ+bEdjPJzGfxAZYrJ2AkrsYOdGfmK+1itMB8CrPxPR5q2gc6CSAi9mBlZvYorPuuUs3jTWYSFmBlRDxTM/Vk5rQKY3ZmLo2IHceL08CcoVzD23BzRPQ2fYZEjBGxqwpyWZPQhil3VPqYKy4i/lausE5c1QZGv2TmTCzBd5gcEbtb+Q31doBzKn24jbxOrvQx12Bj/mAbGKAi4NfwjVKAAbmms7bo4upjphmss/pYOhubIuKPNnL7vNKPZebYBs5tuB4HsKkNDJn5okKEW5QW2DuYf0ffD1R1dF7FZ/hJubrGKF9o47C7CritBjYVU6thF25VCK5vs3sjYk7NvxNrcQv2Y2UV9xKlVTowMyIWNzY1ZJzMnK6Q7mG8gT9b7HtnRCzvG9SJcQPeVN7GeJyJvxSyeg+vtyCVCZjemBtXPZSfr/4iRMSRzLwdM/CA8qNzCnqxusJY1yLp4eCcX+mTMLNFLPhUKRRqJ+FElv8A2W0/UVBWhSwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 31812$" ], "text/plain": [ "31812" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.det()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Actually you can experiment with any random matrices with multiple zeros, the function below has the parameter ```percent=70``` which means $70\\%$ of element are non-zero." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}47 & 0 & 22 & 15 & 33 & 21 & 0\\\\0 & 0 & 14 & 27 & 0 & 19 & 20\\\\15 & 0 & 13 & 39 & 0 & 34 & 48\\\\47 & 43 & 25 & 0 & 0 & 26 & 21\\\\14 & 16 & 0 & 43 & 29 & 0 & 11\\\\27 & 10 & 37 & 0 & 34 & 42 & 0\\\\0 & 44 & 28 & 34 & 39 & 0 & 44\\end{matrix}\\right]$" ], "text/plain": [ "⎡47 0 22 15 33 21 0 ⎤\n", "⎢ ⎥\n", "⎢0 0 14 27 0 19 20⎥\n", "⎢ ⎥\n", "⎢15 0 13 39 0 34 48⎥\n", "⎢ ⎥\n", "⎢47 43 25 0 0 26 21⎥\n", "⎢ ⎥\n", "⎢14 16 0 43 29 0 11⎥\n", "⎢ ⎥\n", "⎢27 10 37 0 34 42 0 ⎥\n", "⎢ ⎥\n", "⎣0 44 28 34 39 0 44⎦" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = sy.randMatrix(r = 7, min=10, max=50, percent=70);B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calculate determinants with our user-defined function" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 104148535253$" ], "text/plain": [ "104148535253" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cof_exp(B,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then verify the result of using determinant method ```.det()```. We can see indeed cofactor expansion works!" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 104148535253$" ], "text/plain": [ "104148535253" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B.det()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Minor matrices** can also be extracted by using code ```sy.matrices.matrices.MatrixDeterminant.minor_submatrix()```, for instance, the $M_{23}$ matrix of $ B$ is" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}47 & 0 & 15 & 33 & 21 & 0\\\\15 & 0 & 39 & 0 & 34 & 48\\\\47 & 43 & 0 & 0 & 26 & 21\\\\14 & 16 & 43 & 29 & 0 & 11\\\\27 & 10 & 0 & 34 & 42 & 0\\\\0 & 44 & 34 & 39 & 0 & 44\\end{matrix}\\right]$" ], "text/plain": [ "⎡47 0 15 33 21 0 ⎤\n", "⎢ ⎥\n", "⎢15 0 39 0 34 48⎥\n", "⎢ ⎥\n", "⎢47 43 0 0 26 21⎥\n", "⎢ ⎥\n", "⎢14 16 43 29 0 11⎥\n", "⎢ ⎥\n", "⎢27 10 0 34 42 0 ⎥\n", "⎢ ⎥\n", "⎣0 44 34 39 0 44⎦" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sy.matrices.matrices.MatrixDeterminant.minor_submatrix(B, 1, 2) # Pythonic indexing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Cofactor matrix** is the matrix contain all cofactors of original matrix, and function ```.cofactor_matrix()``` can do the job.\n", "\n", "$$A=\\left[\\begin{array}{rrr}\n", "C_{11} & C_{12} & C_{13} \\\\\n", "C_{21} & C_{22} & C_{23} \\\\\n", "C_{31} & C_{32} & C_{33}\n", "\\end{array}\\right]=\n", "\\left[\\begin{array}{rrr}\n", "(-1)^{1+1}M_{11} & (-1)^{1+2}M_{12} & (-1)^{1+3}M_{13} \\\\\n", "(-1)^{2+1}M_{21} & (-1)^{2+2}M_{22} & (-1)^{2+3}M_{23} \\\\\n", "(-1)^{3+1}M_{31} & (-1)^{3+2}M_{32} & (-1)^{3+3}M_{33}\n", "\\end{array}\\right]\n", "$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}704 & -2144 & -44\\\\0 & 1446 & 0\\\\-1342 & -251 & 1078\\end{matrix}\\right]$" ], "text/plain": [ "⎡ 704 -2144 -44 ⎤\n", "⎢ ⎥\n", "⎢ 0 1446 0 ⎥\n", "⎢ ⎥\n", "⎣-1342 -251 1078⎦" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sy.matrices.matrices.MatrixDeterminant.cofactor_matrix(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Triangular Matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If $A$ is triangular matrix, cofactor expansion can be applied repetitively, the outcome will be a product of the elements on the principal diagonal. \n", "\n", "$$\n", "\\operatorname{det A}_{n\\times n} = \\prod_{i=1}^n a_{ii}\n", "$$\n", "\n", "where $a_{ii}$ is the diagonal element. \n", "\n", "Here is the proof, start with $A$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "A=\\left[\\begin{array}{cccc}\n", "a_{11} & a_{12} & \\cdots & a_{1 n} \\\\\n", "& a_{22} & \\cdots & a_{2 n} \\\\\n", "& & \\ddots & \\\\\n", "& & & a_{n n}\n", "\\end{array}\\right]\n", "$$\n", "Cofactor expanding on the first column, \n", "$$\n", "a_{11} \\cdot \\left[\\begin{array}{cccc}\n", "a_{22} & a_{22} & \\cdots & a_{2 n} \\\\\n", "& a_{33} & \\cdots & a_{3 n} \\\\\n", "& & \\ddots & \\\\\n", "& & & a_{n n}\n", "\\end{array}\\right]\n", "$$\n", "Continue the cofactor expansion\n", "$$\n", "\\operatorname{det} A=a_{11} a_{22} \\cdot \\left[\\begin{array}{cccc}\n", "a_{33} & a_{34} & \\cdots & a_{3 n} \\\\\n", "& a_{44} & \\cdots & a_{4 n} \\\\\n", "& & \\ddots & \\\\\n", "& & & a_{n n}\n", "\\end{array}\\right]\n", "$$\n", "Iterating the expansion, eventually\n", "$$\n", "\\text { Det } A=a_{11} \\cdots a_{n-2, n-2} \\cdot \\left[\\begin{array}{cc}\n", "a_{n-1, n-1} & a_{n-1, n} \\\\\n", "a_{n n}\n", "\\end{array}\\right]=a_{11} \\cdots a_{n n}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's verify with a numeric example, generate a random upper triangular matrix." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[32., 76., 26., 87., 97.],\n", " [ 0., 31., 76., 73., 33.],\n", " [ 0., 0., 74., 89., 94.],\n", " [ 0., 0., 0., 1., 45.],\n", " [ 0., 0., 0., 0., 3.]])" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.round(np.random.rand(5,5)*100)\n", "A_triu = np.triu(A); A_triu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the determinant with ```np.linalg.det```" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAQCAYAAADpunr5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADF0lEQVR4nO3YS4hcRRQG4G/iuPEVIZCNisSgIuhCEBV0YRIYREFQcRlFUBCDkxEDQiQ5HiGQjY8kIshEEnUnKG4UDYj4jApBQfExMhLcCIKKGIkadVzc6ti56ce9PZnOJj80p2/3X6f+/946VbdqYmFhwSmcPEx2vmTmCtyKm3EFzsNf+Bx7sCci/h2V343MPB+P4UaswA94FRkRv9S4Y9NV63c9XiiX90bE7mFtRvG4rKvNHZjFNfgYT+FlXI7deCkzJxbB7whbjQO4G5/gSXyHjdhfbmA3xqKrpvEC7MKhQbwB7Rt7nOxqN4db8FptRG0uSW7HbcXMKPwOnsFKTEfErq52T+BBbMN9J0FXhzehqpSf8Ao29eINQWOPE03WgCJ+G56OiAdG5WfmRZjHQayu3aCzVWU6gZUR8fu4dNU4G1Uj9gasRWgxBbX1uKxnluNxpMS/F8lfW+K++jwcEb/hA5yBa8esC2TmZdiOHRHxbsOcdbTyOPQBZOYk7iyXbyySf2mJc32af1viJWPW1fn/RXyPzcPyDUArj5N9SN3YrlrAXo+INxfJX17ir33adn4/d8y6YCuuxPURcbhBvn5o5XFgBWTmNB7C11g/rOe2/B7ovJ0MXJhOtK7MvFo16h+PiP0tNbfFMR77PoDM3IAd+BJrIuLnQVkb8jtPf3mP/+CcGm/JdXVNPXPYMihXQ7Ty2HMKyswZ1ZvAF1gXET8O6rEF/5sS+83xF5fYc/5cIl1nden5IzN7pZrNzFnV4jwzqE8tPR5XAZn5cBH9mWrEDDPZhv92iVOZeUzf5RXtOhzGR2PU9See6/P5tHDeL9dNpqdWHidrhC2q7fMBTDUo71b8iJjPzH2YwgbVbvNoOpyJZ+t7gKXUVRbce/rkeVS1MD/fax9QdrynYz4ijozisfss6K4i+h+8h+ke5XgwIvaOwu/C/fgQOzNzHb5SHRusUZXlIzWT49I1Ct7ChVil2nh10NhjdwWsKvE0zPTp8B3sHZGPoyPkKv8fVN2k2h3uVB1U1UfrWHSdSLTx2Ogo4hSWDv8BTA8XCa+BhqwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 220224.0$" ], "text/plain": [ "220224.00000000006" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.det(A_triu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract the diagonal by ```np.diag()```, then calculate the product. The same results!" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAQCAYAAADpunr5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADF0lEQVR4nO3YS4hcRRQG4G/iuPEVIZCNisSgIuhCEBV0YRIYREFQcRlFUBCDkxEDQiQ5HiGQjY8kIshEEnUnKG4UDYj4jApBQfExMhLcCIKKGIkadVzc6ti56ce9PZnOJj80p2/3X6f+/946VbdqYmFhwSmcPEx2vmTmCtyKm3EFzsNf+Bx7sCci/h2V343MPB+P4UaswA94FRkRv9S4Y9NV63c9XiiX90bE7mFtRvG4rKvNHZjFNfgYT+FlXI7deCkzJxbB7whbjQO4G5/gSXyHjdhfbmA3xqKrpvEC7MKhQbwB7Rt7nOxqN4db8FptRG0uSW7HbcXMKPwOnsFKTEfErq52T+BBbMN9J0FXhzehqpSf8Ao29eINQWOPE03WgCJ+G56OiAdG5WfmRZjHQayu3aCzVWU6gZUR8fu4dNU4G1Uj9gasRWgxBbX1uKxnluNxpMS/F8lfW+K++jwcEb/hA5yBa8esC2TmZdiOHRHxbsOcdbTyOPQBZOYk7iyXbyySf2mJc32af1viJWPW1fn/RXyPzcPyDUArj5N9SN3YrlrAXo+INxfJX17ir33adn4/d8y6YCuuxPURcbhBvn5o5XFgBWTmNB7C11g/rOe2/B7ovJ0MXJhOtK7MvFo16h+PiP0tNbfFMR77PoDM3IAd+BJrIuLnQVkb8jtPf3mP/+CcGm/JdXVNPXPYMihXQ7Ty2HMKyswZ1ZvAF1gXET8O6rEF/5sS+83xF5fYc/5cIl1nden5IzN7pZrNzFnV4jwzqE8tPR5XAZn5cBH9mWrEDDPZhv92iVOZeUzf5RXtOhzGR2PU9See6/P5tHDeL9dNpqdWHidrhC2q7fMBTDUo71b8iJjPzH2YwgbVbvNoOpyJZ+t7gKXUVRbce/rkeVS1MD/fax9QdrynYz4ijozisfss6K4i+h+8h+ke5XgwIvaOwu/C/fgQOzNzHb5SHRusUZXlIzWT49I1Ct7ChVil2nh10NhjdwWsKvE0zPTp8B3sHZGPoyPkKv8fVN2k2h3uVB1U1UfrWHSdSLTx2Ogo4hSWDv8BTA8XCa+BhqwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle 220224.0$" ], "text/plain": [ "220224.0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_diag = np.diag(A_triu)\n", "np.prod(A_diag)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Properties of Determinants" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Determinants has a long list of properties, however they are mostly derived facts from cofactor expansion. So no need to memorise any of them.\n", " \n", "1. Let $A$ be an $n×n$ square matrix. If one row of $A$ is multiplied by $k$ to produce the matrix $B$, then: $\\text{det} B = k\\, \\text{det} A$.\n", "2. Let $A$ be an $n×n$ square matrix. If two rows of $A$ are interchanged to produce a matrix $B$ , then $\\text{det}B=-\\text{det}A$.\n", "3. Let $A$ be an $n×n$ square matrix. If a multiple of one row of $A$ is added to another row to produce the matrix $B$, then $\\text{det}A=\\text{det}B$.\n", "4. If $A$ is an $n×n$ matrix, then $\\text{det}A^T = \\text{det}A$\n", "5. A square matrix $A$ is invertible if and only if $\\text{det}A\\neq 0$\n", "6. If $A$ and $B$ are $n×n$ matrices, then $\\text{det}AB = (\\text{det}{A})(\\text{det}{B})$\n", "7. If $A$ is an $n×n$ matrix and $k$ is a scalar, then $\\text{det}\\,kA=k^n\\,\\text{det}A$.\n", "8. If $A$ is an invertible square matrix, then $\\text{det}A^{-1}=\\frac{1}{\\det A}$.\n", "\n", "\n", "All of them are straightforward, the key is to demonstrate them via cofactor expansion. Here is some unrigorous proofs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proof of property 6:\n", "$$\\begin{aligned}\n", "|A B| &=\\left|E_{p} \\cdots E_{1} B\\right|=\\left|E_{p}\\right|\\left|E_{p-1} \\cdots E_{1} B\\right|=\\cdots \\\\\n", "&=\\left|E_{p}\\right| \\cdots\\left|E_{1}\\right||B|=\\cdots=\\left|E_{p} \\cdots E_{1}\\right||B| \\\\\n", "&=|A||B|\n", "\\end{aligned}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proof of property 7:\n", "\n", "Because $\\text{det} B = k\\, \\text{det} A$, one row of $A$ is multiplied by $k$ to produce $B$.Then multiply all the rows of $A$ by $k$, there will be $n$ $k$'s in front of $\\text{det} A$, which is $k^n \\text{det} A$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proof of property 8:\n", "$$\\begin{aligned}\n", "&\\begin{aligned}\n", "A A^{-1} &=I \\\\\n", "\\left|A A^{-1}\\right| &=|I|\n", "\\end{aligned}\\\\\n", "&|A|\\left|A^{-1}\\right|=1\\\\\n", "&\\left|A^{-1}\\right|=\\frac{1}{|A|}\n", "\\end{aligned}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These properties are useful in analytical derivation of some other theorems, however not efficient in numerical computation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Cramer's Rule" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If a linear system has $n$ equations and $n$ variables, an algorithm called **Cramer's Rule** can solve the system in terms of determinants as long as the solution is unique.\n", "$$\n", "A_{n\\times n}\\mathbf{b}_{n} = \\mathbf{x}_n\n", "$$\n", "\n", "Some convenient notations are introduced here:\n", "\n", "For any $A_{n\\times n}$ and vector $\\mathbf{b}$, denote $A_i(\\mathbf{b})$ as the matrix obtained from replacing the $i$th column of $A$ by $\\mathbf{b}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$A_{i}(\\mathbf{b})=\\left[\\begin{array}{lllll}\n", "\\mathbf{a}_{1} & \\cdots & \\mathbf{b} & \\cdots & \\mathbf{a}_{n}\n", "\\end{array}\\right]$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Cramer's Rule can solve each $x_i$ without solving the whole system\n", "$$x_{i}=\\frac{\\operatorname{det} A_{i}(\\mathbf{b})}{\\operatorname{det} A}, \\quad i=1,2, \\ldots, n$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Fast Proof of Cramer's Rule:\n", "\n", "$$\\begin{aligned}\n", "A \\cdot I_{i}(\\mathbf{x}) &=A\\left[\\mathbf{e}_{1} \\quad \\cdots \\quad \\mathbf{x} \\quad \\cdots \\quad \\mathbf{e}_{n}\\right]=\\left[\\begin{array}{llllll}\n", "A \\mathbf{e}_{1} & \\cdots & A \\mathbf{x} & \\cdots & A \\mathbf{e}_{n}\n", "\\end{array}\\right] \\\\\n", "&=\\left[\\begin{array}{llllll}\n", "\\mathbf{a}_{1} & \\cdots & \\mathbf{b} & \\cdots & \\mathbf{a}_{n}\n", "\\end{array}\\right]=A_{i}(\\mathbf{b})\n", "\\end{aligned}$$\n", " \n", "where $I_i(\\mathbf{x})$ is an identity matrix whose $i$th column replaced by $\\mathbf{x}$. With determinant's property,\n", "$$(\\operatorname{det} A)\\left(\\operatorname{det} I_{i}(\\mathbf{x})\\right)=\\operatorname{det} A_{i}(\\mathbf{b})$$\n", "\n", "$\\text{det}I_{i}(\\mathbf{x})=x_i$, can be shown by cofactor expansion.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A NumPy Example On Cramer's Rule" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider the system\n", "$$\\begin{aligned}\n", "&2 x-y+3 z=-3\\\\\n", "&3 x+3 y-z=10\\\\\n", "&-x-y+z=-4\n", "\\end{aligned}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You have surely known several ways to solve it, but let's test if Cramer's rule works. \n", "\n", "Input the matrices into NumPy arrays." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "A = np.array([[2, -1, 3], [3, 3, -1], [-1, -1, 1]])\n", "b = np.array([-3, 10, -4])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "A_1b = np.copy(A) # Python variable is a reference tag\n", "A_1b[:,0]=b\n", "\n", "A_2b = np.copy(A)\n", "A_2b[:,1]=b\n", "\n", "A_3b = np.copy(A)\n", "A_3b[:,2]=b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to Cramer's rule:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAUCAYAAAAdtqaHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAAEk0lEQVR4nO2ae4gXVRTHP6sGmdgKSglGtW5qQtJSQkm0ZWsaBGFl9E8+iqDI2gylsAeHb9ALai2jB2T4QwgqWCrKKKEExR6WJBRpmrX0skwNMymqbfvj3tmdnZ1fO/ubnYf2+8CP+5szc+895865r3Onoaenhzp1ys6IohWoUycJo+KEktYBlwFNZnYkX5Xq/F+RdC7wMXCjmT0fvtcQnfolzQS2AivMrCMkXwBcBLQAZwNjgRfM7LoalToFuB/XIcYDe4FXAZnZL7WUOUh944ErgcuBGcAk4E/gU2AtsNbM/hlimbnakAdFv2dJrwDnA1PM7LdAHjf1Pwj8CjwTkd8L3OoN+L4WpUPKNAPbgOtxnWIV8BVwO/C+d6rh5hrgOeA84EPgcaATOAtYA7wsqSFpYQXZkAdFv+eHgIlAe1jYb+qXNBWYA6wxs98jBdwBfAd8ietxG1PY8DRwEtBuZk+G6u/w9TwA3Jyi/Dh2AVcA68Mjp6S7cY14NXAVznmTUIQNeVDoezazrZJ2AjdJesTMumHgiHoD0AC8FK3RzDaa2W4zSxUmkDQZmAt0AU9FqwGOAAsljUlTTxQze9fMXo9O72b2I/Csv7w4SVlF2ZAHJXnPLwKn4gZNYKCjzgG6gQ/SKDkIl/h0Q4zTHAa2ACfg1il58ZdP/074fBltKBtp2miLTy8NBL2O6j27BdiR8U5/mk93Vbm/26dTM9ShF0mjgEX+8q2E2UplQ0lJ00Yf+bQ1EIRH1EnASNyuLEsafXqoyv1APi5jPQIexm2o3jSztxPmKZsNZaTmNjKzQ8AfuOkf6L+ZCnZgRYdVgp135kdmktqB5cBOYOEwFp2LDZK6gNOGkKXmMFMGDNZGB4GTg4uwowa7/OMzUCpM0JMaq9w/MfJcJkhaCjwBfA60mdnBIWQvhQ3AHtzIk5QfslIkhrRtNJo+n+znqPt8mnX87wufVlu/TfFptbVNaiQtw8X0PsM56b7/zjGAwm0AMLO2LMtPSc1tJGkEbknwdSALr1H3Aj/TtwjOiiAuN9crFFZwLHABridlEnmQdBfOSbcDs2twUijYhqOENG00Dbc02B4IegvwcbNNwARJZwyHppKaJZ0p6bhQPXuADcDpwNJoFmAMsC4aeZBUkdQjaUkKfe7DbZ624UbS/UebDWVkONvIE4Sseg8boh+ldOJOaObhTibCyswH5vvLiT6dJani/+83sxWR8t7BLfabcIHfgFuA94DVktqAHbijzdm4qeCeGOWDTpU01tkPSYtxZ87dwGagXVL0sS4zq5TVhjwowXsGd1DQDbwWCKIB/07gJ/riimFagMX+N8/LJodkC6pUOgDf22YCFa/4cqAZWA3MMrMDMdlmAIeB9UnridDk05HAMtzpSPS3JGlhBdmQBy0U+J4lNeI6yhtm9m0gj/t6aiXuw5RzzOyTpEpliaRxwAHgMTO7s2B1auJYsCEPJN2Gc+RWM9scyOO+nloFfIObJsvChbhjzo7BHiwxx4INmSJpNLAS6Aw7KcSMqD5DK24d8Wj9w+k6eSFpOnAtUDGzrvC9fwFDKhFqoPpRnQAAAABJRU5ErkJggg==\n", "text/latex": [ "$\\displaystyle \\left( 1.0, \\ 2.0, \\ -1.0\\right)$" ], "text/plain": [ "(1.0000000000000002, 1.999999999999999, -1.0)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1 = np.linalg.det(A_1b)/np.linalg.det(A)\n", "x2 = np.linalg.det(A_2b)/np.linalg.det(A)\n", "x3 = np.linalg.det(A_3b)/np.linalg.det(A)\n", "(x1, x2, x3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can verify the results by NumPy built-in function ```np.linalg.solve```." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1., 2., -1.])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.solve(A, b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or in a straightforward way $A^{-1}b$" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1., 2., -1.])" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.inv(A)@b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All results are the same!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, remember that Cramer's rule is rarely carried out in practice when solving system of equations, since computational cost (measured by the number of floating operations (flop), are much higher than Gaussian-Jordon elimination." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# A Determinant Formula For $A^{-1}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An alternative algorithm for $A^{-1}$ is\n", "$$A^{-1}=\\frac{1}{\\operatorname{det} A}\\left[\\begin{array}{cccc}\n", "C_{11} & C_{21} & \\cdots & C_{n 1} \\\\\n", "C_{12} & C_{22} & \\cdots & C_{n 2} \\\\\n", "\\vdots & \\vdots & & \\vdots \\\\\n", "C_{1 n} & C_{2 n} & \\cdots & C_{n n}\n", "\\end{array}\\right]$$\n", "\n", "where the matrix of cofactors on RHS is the **adjugate** matrix, SymPy function is ```sy.matrices.matrices.MatrixDeterminant.adjugate```. And this is the transpose of the _cofactor matrix_ which we computed using ```sy.matrices.matrices.MatrixDeterminant.cofactor_matrix```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A SymPy Example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a random matrix with $20\\%$ of zero elements." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}-2 & 0 & 0 & 0 & -5\\\\-2 & -1 & 0 & 0 & 2\\\\-1 & 2 & -4 & 0 & -1\\\\-5 & 4 & -4 & -3 & -4\\\\0 & -3 & 1 & -4 & 5\\end{matrix}\\right]$" ], "text/plain": [ "⎡-2 0 0 0 -5⎤\n", "⎢ ⎥\n", "⎢-2 -1 0 0 2 ⎥\n", "⎢ ⎥\n", "⎢-1 2 -4 0 -1⎥\n", "⎢ ⎥\n", "⎢-5 4 -4 -3 -4⎥\n", "⎢ ⎥\n", "⎣0 -3 1 -4 5 ⎦" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = sy.randMatrix(5, min=-5, max = 5, percent = 80); A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the adjugate matrix" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}19 & 310 & -95 & 80 & -60\\\\332 & 95 & 266 & -224 & 168\\\\115 & 1 & 388 & -124 & 93\\\\11 & -226 & -55 & 97 & 168\\\\185 & -124 & 38 & -32 & 24\\end{matrix}\\right]$" ], "text/plain": [ "⎡19 310 -95 80 -60⎤\n", "⎢ ⎥\n", "⎢332 95 266 -224 168⎥\n", "⎢ ⎥\n", "⎢115 1 388 -124 93 ⎥\n", "⎢ ⎥\n", "⎢11 -226 -55 97 168⎥\n", "⎢ ⎥\n", "⎣185 -124 38 -32 24 ⎦" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_adjugate = sy.matrices.matrices.MatrixDeterminant.adjugate(A); A_adjugate " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can verify if this really the adjugate of $A$, we pick element of $(1, 3), (2, 4), (5, 4)$ of $A$ to compute the cofactors" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAACsAAAAQCAYAAACP4IauAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAAB/UlEQVR4nNXUS4iOYRQH8N9g51puRRILWRALpVCS2LgUshPWRJSSKR2HFFm4rlAmmo0SGxqZDQtFuYQkpdjI/bIQuY3F+371ec1Mo15Tzub0nNvzf87zP6elq6vL/yKD6iyWmfsxC1MwCp/xDBdwLCLeVuJHYgWWYDrG4yvu4xRORcTPRvyAOsFiKwbjCg6jHd+xC/cyc0IlfjVOYDZu4BDOYRpO4mxmtjSCa+0shkXEl6oxM/eiFTuwocn1GMtxsbmDmdmKm1iFleUDtPQHZzNzBu6iMyIW9TGnFXsV9NlE/TToSZaV+t5f5Hwr9feGoW4agMzchiEYrhi4eQqg+/qYPwhry2NHw/5PwGIbxjadO7A+Il73MX+fYsguRcTlhvE3zmbmU0z8C1DtEbGmJ2dmjsWc8vKhWBoRt3srmJmbFZvkEeZGxLuGr9rZJ/hjmnuR5705I+IlzmfmbcXkn1Z0rCegG0ugD7GwGSj9tA1KIHcwE6Mj4k03/i04iAcKoK+qMf21DWBcqX9UHZm5XQH0LhZ0B5QaBywzp+JDRLyo2AdgD8bgekS8r/h3YjduYXH165ulNhqU33gA1xTcf6vYCPMxGS8U3/uwKWcd2hTdPoqP3ZR+GhFt1Lu6OnEcczEDI/BJMVhncKSbrk0q9UBs6aHuVcWD+m/A6pBfHzu0kARzevwAAAAASUVORK5CYII=\n", "text/latex": [ "$\\displaystyle -32$" ], "text/plain": [ "-32" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(-1)**(1+3) * sy.matrices.matrices.MatrixDeterminant.minor(A, 2, 0) # transpose the index\n", "(-1)**(2+4) * sy.matrices.matrices.MatrixDeterminant.minor(A, 3, 1)\n", "(-1)**(5+4) * sy.matrices.matrices.MatrixDeterminant.minor(A, 3, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Adjugate is the transpose of cofactor matrix, thus we reverse the row and column index when referring to the elements in mind. They are correct as in adjugate matrix, so we have obtained the correct one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make results tidy, we need some extra steps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ```sy.N()``` is for converting to float approximation, i.e. if you don't like fractions." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}-0.0197 & -0.3219 & 0.0987 & -0.0831 & 0.0623\\\\-0.3448 & -0.0987 & -0.2762 & 0.2326 & -0.1745\\\\-0.1194 & -0.001 & -0.4029 & 0.1288 & -0.0966\\\\-0.0114 & 0.2347 & 0.0571 & -0.1007 & -0.1745\\\\-0.1921 & 0.1288 & -0.0395 & 0.0332 & -0.0249\\end{matrix}\\right]$" ], "text/plain": [ "⎡-0.0197 -0.3219 0.0987 -0.0831 0.0623 ⎤\n", "⎢ ⎥\n", "⎢-0.3448 -0.0987 -0.2762 0.2326 -0.1745⎥\n", "⎢ ⎥\n", "⎢-0.1194 -0.001 -0.4029 0.1288 -0.0966⎥\n", "⎢ ⎥\n", "⎢-0.0114 0.2347 0.0571 -0.1007 -0.1745⎥\n", "⎢ ⎥\n", "⎣-0.1921 0.1288 -0.0395 0.0332 -0.0249⎦" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_det = A.det()\n", "A_inv = (1/A_det)*A_adjugate\n", "round_expr(sy.N(A_inv), 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now again, we can verify the results with ```.inv()```" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}-0.0197 & -0.3219 & 0.0987 & -0.0831 & 0.0623\\\\-0.3448 & -0.0987 & -0.2762 & 0.2326 & -0.1745\\\\-0.1194 & -0.001 & -0.4029 & 0.1288 & -0.0966\\\\-0.0114 & 0.2347 & 0.0571 & -0.1007 & -0.1745\\\\-0.1921 & 0.1288 & -0.0395 & 0.0332 & -0.0249\\end{matrix}\\right]$" ], "text/plain": [ "⎡-0.0197 -0.3219 0.0987 -0.0831 0.0623 ⎤\n", "⎢ ⎥\n", "⎢-0.3448 -0.0987 -0.2762 0.2326 -0.1745⎥\n", "⎢ ⎥\n", "⎢-0.1194 -0.001 -0.4029 0.1288 -0.0966⎥\n", "⎢ ⎥\n", "⎢-0.0114 0.2347 0.0571 -0.1007 -0.1745⎥\n", "⎢ ⎥\n", "⎣-0.1921 0.1288 -0.0395 0.0332 -0.0249⎦" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "round_expr(sy.N(A.inv()), 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or We can show by difference." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0\\end{matrix}\\right]$" ], "text/plain": [ "⎡0 0 0 0 0⎤\n", "⎢ ⎥\n", "⎢0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎣0 0 0 0 0⎦" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A_inv-A.inv()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So Cramer's rule indeed works perfectly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Short Proof of $A^{-1}$ Formula With Determinants
\n", "We define $x$ the $j$th column of $A^{-1}$ which satisfies\n", "$$\n", "Ax= e_j\n", "$$\n", "\n", "and $e_j$ is the $j$th column of an identity matrix, and $j$th entry of $x$ is the $(i,j)$-entry of $A^{-1}$. By Cramer's rule,\n", "\n", "$$\\left\\{(i, j) \\text { -entry of } A^{-1}\\right\\}=x_{i}=\\frac{\\operatorname{det} A_{i}\\left(\\mathbf{e}_{j}\\right)}{\\operatorname{det} A}$$\n", "\n", "The cofactor expansion along column $i$ of $A_i(e_j)$,\n", "$$\\operatorname{det} A_{i}\\left(\\mathbf{e}_{j}\\right)=(-1)^{i+j} \\operatorname{det} A_{j i}=C_{j i}$$\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }