{ "cells": [ { "cell_type": "code", "execution_count": 4, "id": "7fc797ce", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "plt.rcParams[\"font.family\"] = \"D2Coding\"" ] }, { "cell_type": "markdown", "id": "a869c82a", "metadata": {}, "source": [ "# Linear Equation\n", "\n", "$$A\\cdot x = b$$\n", "\n", "* $A$: [m, n]\n", "* $b$: [m, 1]" ] }, { "cell_type": "code", "execution_count": null, "id": "e7357276", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1113de3c", "metadata": {}, "source": [] }, { "cell_type": "markdown", "id": "3bed3d44", "metadata": {}, "source": [ "## Gauss Elimination\n", "\n", "## Gauss-Jordan Elimination" ] }, { "cell_type": "markdown", "id": "a5239ed9", "metadata": {}, "source": [ "## LU decomposition\n", "\n", "$$A = LU$$\n", "\n", "$$Ax = b \\Rightarrow LUx = b \\Rightarrow \\\\\n", "L^{-1}LUx = L^{-1}b \n", "$$\n", "\n", "At that time, $Ux = c$ is easy to compute.\n", "and compute $Lc = b$ to easily get $x$.\n", "\n", "\n", "Various LUdcmps\n", "* Doolittle $L_{ii} = 1$\n", "* Crout $U_{ii} = 1$\n", "* Cholesky $L_{ii} = U_{ii}$, which is appropriate for symmetric, positive-definite matrix\n", "\n", "### Crout Implementation\n", "\n", "$$\\begin{bmatrix}\n", "a_{11} & a_{12} & \\cdots a_{1n} \\\\\n", "a_{21} & a_{22} & \\cdots a_{2n} \\\\\n", "\\vdots & \\vdots & \\ddots \\vdots \\\\\n", "a_{n1} & a_{n2} & \\cdots a_{nn}\n", "\\end{bmatrix} = \\begin{bmatrix}\n", "l_{11} & 0 & \\cdots 0 \\\\\n", "l_{21} & l_{22} & \\cdots 0 \\\\\n", "\\vdots & \\vdots & \\ddots \\vdots \\\\\n", "l_{n1} & l_{n2} & \\cdots l_{nn}\n", "\\end{bmatrix}\\begin{bmatrix}\n", "1 & u_{12} & \\cdots u_{1n} \\\\\n", "0 & 1 & \\cdots u_{2n} \\\\\n", "\\vdots & \\vdots & \\ddots \\vdots \\\\\n", "0 & 0 & \\cdots 1\n", "\\end{bmatrix}$$\n", "\n", "$$\\begin{align*}\n", "l_{i1} &= a_{i1} & (i = 1, 2, \\cdots, n) \\\\\n", "u_{1j} &= a_{1j} / l_{11} & (j = 2, 3, \\cdots, n) \\\\\n", "l_{ij} &= a_{ij} - \\sum_{k=1}^{j-1} {l_{ik} u_{kj}} & (j \\leq i, i = 2,3,\\cdots, n) \\\\\n", "u_{ij} &= (a_{ij} - \\sum_{k=1}^{i-1} {l_{ik} u_{kj}}) / l_{ii} & (j > i, j = 3,4,\\cdots, n)\n", "\\end{align*}$$" ] }, { "cell_type": "markdown", "id": "8bd218a8", "metadata": {}, "source": [ "# SVD(Singular Value Decomposition)\n", "\n", "**why?**\n", "\n", "**what?**\n", "\n", "$$A = UWV^T$$\n", "\n", "* $U$: [m, n]\n", "* $W$: [n, n] diagonal with positive or zero\n", "* $V$: [n, n] orthogonal\n", "\n", "\n", "**properties**\n", "\n", "* orthonormality\n", "* uniqueness" ] }, { "cell_type": "code", "execution_count": null, "id": "563d7aec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(4, 3)\n" ] }, { "data": { "text/plain": [ "array([[ 1., 0., -0.],\n", " [ 1., 1., -1.],\n", " [ 0., 1., -1.],\n", " [-1., 1., 1.]])" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1, 0, 0], [1, 1, -1], [0, 1, -1], [-1, 1, 1]])\n", "print(A.shape)\n", "U, S, Vh = np.linalg.svd(A, False)" ] }, { "cell_type": "markdown", "id": "fb89ad74", "metadata": {}, "source": [ "## Homogeneous\n", "\n", "\n", "## Nonhomogeneous\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "733012d2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "2025-02-Numerical (3.12.11)", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }