{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Lecture 7: Linear systems, inverses, condition number"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Syllabus\n",
"**Week 1:** Matrices, vectors, matrix/vector norms, scalar products & unitary matrices \n",
"**Week 2:** TAs-week (Strassen, FFT, a bit of SVD) \n",
"**Week 3:** Matrix ranks, singular value decomposition, linear systems \n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Recap of the previous lecture\n",
"Today we will talk about:\n",
"- Rank of the matrix, idea of linear dependence\n",
"- Singular value decomposition (SVD) and low-rank approximation"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Today lecture\n",
"Today we talk about: \n",
"- Linear systems\n",
"- Inverse matrix\n",
"- Condition number\n",
"- Gaussian elimination"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Linear equations and matrices\n",
"A linear system of equations can be written in the form\n",
"\\begin{equation}\n",
"\\begin{split}\n",
" &2 x + 3 y = 5\\quad &\\longrightarrow \\quad &2x + 3 y + 0 z = 5\\\\\n",
" &2 x + 3z = 5\\quad &\\longrightarrow\\quad &2 x + 0 y + 3 z = 5\\\\\n",
" &x + y = 2\\quad &\\longrightarrow\\quad & 1 x + 1 y + 0 z = 2\\\\\n",
"\\end{split}\n",
"\\end{equation}"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Matrix form\n",
"The \"matrix form\" is\n",
"$$\n",
"\\begin{pmatrix}\n",
"2 & 3 & 0 \\\\\n",
"2 & 0 & 3 \\\\\n",
"1 & 1 & 0 \\\\\n",
"\\end{pmatrix}\\begin{pmatrix}\n",
"x \\\\\n",
"y \\\\\n",
"z \n",
"\\end{pmatrix} = \n",
"\\begin{pmatrix}\n",
"5 \\\\\n",
"5 \\\\\n",
"2\n",
"\\end{pmatrix}\n",
"$$\n",
"or simply\n",
"$$\n",
"A u = f, \n",
"$$\n",
"\n",
"where $A$ is a $3 \\times 3$ matrix."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Linear systems in applications\n",
"Linear systems are everywhere - in modelling, even if you have nonlinear systems, by **linearization** they are reduced to a sequence of linear systems. They appear in different applications:\n",
"- Circuit modelling (Kirchoffs law)\n",
"- Photonics (Maxwell equation, electrodynamics)\n",
"- Computational fluid dynamics (Navier-Stokes equation)\n",
"- +$\\infty$ more"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Linear systems are big\n",
"We take a continious problem, discretize on a mesh with $N$ elements and get a linear system with $N\\times N$ system. \n",
"Example of a mesh around A319 aircraft\n",
"(taken from [GMSH website](http://geuz.org/gmsh/)). \n",
"\n",
"The main difficulty is that these systems are big: millions or billions of unknowns!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Linear systems are structured\n",
"Storing $N^2$ elements of a matrix is prohibitive even for $N = 100000$. \n",
"\n",
"How to work with such matrices? \n",
"\n",
"Fortunately, those matrices are **structured** and require $\\mathcal{O}(N)$ parameters to be stored. \n",
"\n",
"The most widespread structure are **sparse matrices**: in the matrix there are $\\mathcal{O}(N)$ non-zeros! \n",
"\n",
"Example (one of the famous matrices around for $n = 5$):\n",
"$$\n",
" \\begin{pmatrix}\n",
" 2 & -1 & 0 & 0 & 0 \\\\\n",
" -1 & 2 & -1 & 0 & 0 \\\\\n",
" 0 & -1 & 2 & -1 & 0 \\\\\n",
" 0 & 0 &-1& 2 & -1 \\\\\n",
" 0 & 0 & 0 & -1 & 2 \\\\\n",
" \\end{pmatrix}\n",
"$$\n",
"At least you can store such matrices, and multiply by vector fast; but how to solve linear systems?! (and that is typically the final goal)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## How to solve linear systems\n",
"**Important**: forget about determinants and the **Cramer rule** (it is good for $2 \\times 2$ matrices still)."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## How to solve linear systems\n",
"\n",
"The main tool is variable elimination. \n",
"\\begin{equation}\n",
"\\begin{split}\n",
" &2 y + 3 x = 5 \\quad&\\longrightarrow \\quad &y = 5/2 - 3/2 x \\\\\n",
" &2 x + 3z = 5 \\quad&\\longrightarrow\\quad &z = 5/3 - 2/3 x\\\\\n",
" &x + y = 2 \\quad&\\longrightarrow\\quad & 5/2 + 5/3 - (3/2 + 2/3) x = 2,\\\\\n",
"\\end{split}\n",
"\\end{equation}\n",
"and that is how you find $x$ (and all previous ones). \n",
"\n",
"This process is called **Gaussian elimination** and is one of the most widely used algorithms. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Gaussian elimination\n",
"Gaussian elimination consists of two steps:\n",
"1. Forward step\n",
"2. Backward step"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Forward step\n",
"In the forward step, we eliminate $x_1$:\n",
"$$\n",
" x_1 = f_1 - (a_{12} x_2 + \\ldots + a_{1n} x_n)/a_{11},\n",
"$$\n",
"and then substitute this into the equations $2, \\ldots, n$. \n",
"Then we eliminate $x_2$ and so on from the second equation. The important thing is that the **pivots** (that we divide over) are not equal to $0$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Backward step\n",
"In the backward step, we solve equation for $x_n$, put it into the equation for $x_{n-1}$ and so on, until we \n",
"compute all $x_i, i=1,\\ldots, n$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Complexity of the Gaussian elimination\n",
"Each elimination step requires $\\mathcal{O}(n^2)$ operations. Thus, the cost of the naive algorithm is $\\mathcal{O}(n^3)$. \n",
"**Think a little bit**: Can Strassen help here? "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Gaussian elimination and LU decomposition\n",
"Gaussian elimination is the computation of one of the most important matrix decompositions: **LU-decomposition**\n",
"\n",
"**Definition** LU-decomposition of the matrix is the representation\n",
"\n",
"$$A = LU,$$\n",
"\n",
"where $L$ is **lower triangular** and $U$ is **upper triangular** matrices (i.e. elements strictly above the diagonal are zero, elements strictly below the diagonal are zero)\n",
"\n",
"The forward step is the computation of $z = L^{-1} b$, and the backward step is the computation of $U^{-1} z$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Computing LU-decomposition\n",
"In many cases, computing LU-decomposition once is a good idea!\n",
"\n",
"Once the decomposition is found (it is $\\mathcal{O}(n^3)$), then solving linear systems with $L$ and $U$ costs only $\\mathcal{O}(n^2)$ operations.\n",
"\n",
"**Check:** Solving linear systems with triangular matrices is easy (why?). How we compute the $L$ and $U$ factors? \n",
"\n",
"Not let us see how it works in numpy (for the Hilbert matrix, of course).\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3.00342505734e-09\n"
]
},
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import seaborn as sns\n",
"n = 15\n",
"a = [[1.0/(i + j + 1) for i in xrange(n)] for j in xrange(n)]\n",
"a = np.array(a)\n",
"rhs = np.ones(n) #Right-hand side\n",
"x = np.linalg.solve(a, rhs)\n",
"\n",
"#And check if everything is fine\n",
"er = np.linalg.norm(a.dot(x) - rhs) / np.linalg.norm(rhs)\n",
"print er\n",
"plt.xkcd()\n",
"plt.plot(x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"As you see, the error grows with larger $n$, and we have to find out why. \n",
"**Important point** is that it is not a problem of the algorithm: it is a problem of representing \n",
"the matrix in the memory. The error occurs in the moment when the matrix elements are evaluated approximately."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Linear systems and inverse matrix\n",
"What was the problem in the previous example? Why the error grows so quickly? \n",
"And here is one of the main concepts of numerical linear algebra: the concept of **condition number** of a matrix. \n",
"But before that we have to define the **inverse**. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Inverse: definition\n",
"The inverse of a matrix $A$ is defined as a matrix $X$ denoted by $A^{-1}$ such that \n",
"$$\n",
" AX = XA = I, \n",
"$$\n",
"where $I$ is the identity matrix (i.e., $I_{ij} = 0$ if $i \\ne j$ and $1$ otherwise).\n",
"The computation of the inverse is linked to the solution of linear systems. Indeed, $i$-th column of the product gives \n",
"$$\n",
"A x_i = e_i,\n",
"$$\n",
"where $e_i$ is the $i$-th column of the identity matrix. Thus, we can apply Gaussian elimination to solve this system. Moreover, if there are no divisions by zero in this process (and the pivots do not depend on the right-hand side), the it is possible to solve the system.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Inverse matrix and linear systems\n",
"If we have computed $A^{-1}$, the solution of linear system \n",
"$$Ax = f$$\n",
"is just $x = A^{-1} f$. \n",
"Indeed, \n",
"$$ \n",
" A(A^{-1} f) = (AA^{-1})x = I x = f.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Neumann series \n",
"To study, why there can be such big errors in a solution (see the example above on the Hilbert matrix) we need an important auxilary result: **Neumann series**: \n",
"If for a matrix $\\Vert F \\Vert < 1$ then the matrix $(I - F)$ is invertible and\n",
"$$(I - F)^{-1} = I + F + F^2 + F^3 + \\ldots = \\sum_{k=0}^{\\infty} F^k.$$\n",
"Note that it is a matrix version of the geometric progression. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Proof\n",
"The proof is constructive. First of all, the show prove that the series $\\sum_{k=0}^{\\infty} F^k$ converges. \n",
"Like in the scalar case, we have \n",
"$$\n",
" (I - F) \\sum_{k=0}^N F^k = (I - F^{N+1}) \\rightarrow I.\n",
"$$\n",
"Indeed, \n",
"$$\n",
"\\| (I - F^{N+1}) - I\\| = \\|F^{N+1}\\| \\leqslant \\|F\\|^{N+1} \\to 0, \\quad N\\to +\\infty.\n",
"$$\n",
"We can also estimate the **norm of the inverse**:\n",
"$$\n",
" \\Vert \\sum_{k=0}^N F^k \\Vert \\leq \\sum_{k=0}^N \\Vert F \\Vert^k \\Vert I \\Vert = \\frac{\\Vert I \\Vert}{I - \\Vert F \\Vert} \n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Small perturbation of the inverse\n",
"Using this result, we can estimate, how the perturbation of the matrix influences the inverse matrix. We assume\n",
"that the perturbation $E$ is small in the sense that $\\Vert A^{-1} E \\Vert < 1$. Then\n",
"$$(A + E)^{-1} = \\sum_{k=0}^{\\infty} (-A^{-1} E)^k A^{-1}$$\n",
"and moreover, \n",
"$$\n",
" \\frac{\\Vert (A + E)^{-1} - A^{-1} \\Vert}{\\Vert A^{-1} \\Vert} \\leq \\frac{\\Vert A^{-1} \\Vert \\Vert E \\Vert}{1 - \\Vert A^{-1} E \\Vert}.\n",
"$$\n",
"As you see, the norm of the inverse enters the estimate."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Condition number of a linear system\n",
"Now consider the **perturbed** linear system:\n",
"$$\n",
" (A + \\Delta A) \\widehat{x} = f + \\Delta f.\n",
"$$\n",
"Then the algebra begins!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Estimates\n",
"\n",
"$$\n",
"\\begin{split}\n",
"\\widehat{x} - x &= (A + \\Delta A)^{-1} (f + \\delta f) - A^{-1} f =\\\\ \n",
"&= \\left((A + \\Delta A)^{-1} - A^{-1}\\right)f + (A + \\Delta A)^{-1} \\Delta f = \\\\\n",
"&= \\Big[\\sum_{k=0}^{\\infty} (-A^{-1} \\Delta A)^k\\Big] A^{-1} f + \\Big[\\sum_{k=0}^{\\infty} (A^{-1} \\Delta A)^k \\Big] A^{-1} \\Delta f,\n",
"\\end{split}\n",
"$$ \n",
"therefore\n",
"$$\n",
"\\begin{split}\n",
"\\frac{\\Vert \\widehat{x} - x \\Vert}{\\Vert x \\Vert} \\leq \n",
"&\\frac{\\Vert A \\Vert \\Vert A^{-1} \\Vert}{1 - \\|A^{-1}\\Delta A\\|} \\Big(\\frac{\\Vert\\Delta A\\Vert}{\\Vert A \\Vert} + \\frac{\\Vert \\Delta f \\Vert}{ \\Vert f \\Vert}\\Big) \\leq \\\\\n",
"\\leq\n",
"&\\frac{\\Vert A \\Vert \\Vert A^{-1} \\Vert}{1 - \\|A\\|\\|A^{-1}\\|\\frac{\\|\\Delta A\\|}{\\|A\\|}} \\Big(\\frac{\\Vert\\Delta A\\Vert}{\\Vert A \\Vert} + \\frac{\\Vert \\Delta f \\Vert}{ \\Vert f \\Vert}\\Big) \\equiv \\\\\n",
"\\equiv &\\frac{\\mathrm{cond}(A)}{1 - \\mathrm{cond}(A)\\frac{\\|\\Delta A\\|}{\\|A\\|}} \\Big(\\frac{\\Vert\\Delta A\\Vert}{\\Vert A \\Vert} + \\frac{\\Vert \\Delta f \\Vert}{ \\Vert f \\Vert}\\Big)\n",
"\\end{split}\n",
"$$\n",
"\n",
"The crucial role is played by the **condition number** $\\mathrm{cond}(A) = \\Vert A \\Vert \\Vert A^{-1} \\Vert$. \n",
"The larger the condition number, the less number of digits we can recover. Note, that the condition number is different for different norms.\n",
"\n",
"Note, that if $\\Delta A = 0$, then\n",
"$$\n",
"\\frac{\\Vert \\widehat{x} - x \\Vert}{\\Vert x \\Vert} \\leq \\mathrm{cond}(A) \\frac{\\|\\Delta f\\|}{\\|f\\|}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"The spectral norm of the matrix is equal to **largest singular value**, and the singular values of the inverse matrix are equal to the inverses of the singular values. Thus, the condition number is equal to the ratio of the largest singular value and the smallest singular value.\n",
"$$\n",
" \\mathrm{cond}_2 (A) = \\|A\\|_2 \\|A^{-1}\\|_2 = \\frac{\\sigma_{\\max}}{\\sigma_{\\min}}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Hilbert matrix (again)\n",
"We can also try to test how tight is the estimate, both with ones in the right-hand side, and with a random vector in the right-hand side. The results are strickingly different"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error: 8.96141017158e-08 Condition number: 1.5912638327e+20\n"
]
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"\n",
"n = 1000\n",
"a = [[1.0/(i + j + 1) for i in xrange(n)] for j in xrange(n)]\n",
"a = np.array(a)\n",
"rhs = np.ones(n) #Right-hand side\n",
"f = np.linalg.solve(a, rhs)\n",
"\n",
"#And check if everything is fine\n",
"er = np.linalg.norm(a.dot(f) - rhs) / np.linalg.norm(rhs)\n",
"cn = np.linalg.cond(a, 2)\n",
"print 'Error:', er, 'Condition number:', cn"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"And with random right-hand side..."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error: 18.4579334118 Condition number: 3.33972881047e+19\n"
]
},
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n",
"Ivj/LtGssM0szDkAAAAASUVORK5CYII=\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"n = 100\n",
"a = [[1.0/(i + j + 1) for i in xrange(n)] for j in xrange(n)]\n",
"a = np.array(a)\n",
"rhs = np.random.randn(n) #Right-hand side\n",
"f = np.linalg.solve(a, rhs)\n",
"\n",
"#And check if everything is fine\n",
"er = np.linalg.norm(a.dot(f) - rhs) / np.linalg.norm(rhs)\n",
"cn = np.linalg.cond(a)\n",
"print 'Error:', er, 'Condition number:', cn\n",
"\n",
"\n",
"u, s, v = np.linalg.svd(a)\n",
"rhs = np.random.randn(n)\n",
"plt.plot(u.T.dot(rhs))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"** Can you think about an explanation?** "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Overdetermined linear systems\n",
"Important class of problems are **overdetermined linear systems**, when the number of equations is greater, than the number of unknowns. The simplest example that you all know, is **linear fitting**, fitting a set of 2D points by a line.\n",
"\n",
"Then, a typical way is to minimize the residual (**least squares**)\n",
"\n",
"$$\\Vert A x - b \\Vert_2 \\rightarrow \\min$$"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Overdetermined system and Gram matrix\n",
"\n",
"The optimality condition is $0\\equiv \\delta \\left(\\|Ax-b\\|_2^2\\right)$, where $\\delta$ denotes variation. Therefore,\n",
"\n",
"$$\n",
"\\begin{split}\n",
"0\\equiv \\delta \\left(\\|Ax-b\\|_2^2\\right) =\\delta \\left(Ax-b, Ax - b\\right) = (A\\delta x, Ax-b)+ (Ax-b, A\\delta x) =\n",
"2(A x - b, A \\delta x) = 2(A^*(A x - b), \\delta x) = 0, \n",
"\\end{split}\n",
"$$\n",
"for any $\\delta x$. Here we used, that $\\delta(Ax-b)=\\delta x$ ($A$ is linear operator and $b$ is constant) and $(x,Ay) \\equiv (A^*x, y)$. Thus,\n",
"$$\n",
"\\quad A^* A x = A^* b\n",
"$$\n",
"The matrix $A^* A$ is called **Gram matrix** and the system is called **normal equations**. \n",
"\n",
"This is not a good way to do it, since the condition number of $A^* A$ is a square of condition number of $A$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Other ways to solve linear least squares\n",
"A canonical way is to use QR-factorization: \n",
"\n",
"any matrix can be factored into a product \n",
"\n",
"$$A = Q R, $$\n",
"where $Q$ is unitary, and $R$ is upper triangular (details in the next lectures).\n",
"\n",
"Then, finding optimal $x$ is equivalent to solving $Rx = Q^* b$.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Padding into a bigger system\n",
"\n",
"Instead of solving $A^* A x = A^* b$, \n",
"\n",
"we introduce a new variable $r = Ax - b$ and then have\n",
"\n",
"$$A^* r = 0, \\quad r = Ax - b,$$\n",
"\n",
"or in the block form\n",
"\n",
"$$\n",
"\\begin{bmatrix}\n",
" 0 & A^* \\\\\n",
" A & -I \n",
"\\end{bmatrix}\n",
"\\begin{bmatrix}\n",
"x \\\\\n",
"r\n",
"\\end{bmatrix}\n",
"= \n",
"\\begin{bmatrix}\n",
"0 \\\\\n",
"b\n",
"\\end{bmatrix},\n",
"$$ \n",
"\n",
"the total size of the system is $(n + m)$ square, and the condition number is the same as for $A$ (by the way, how we define the condition number of a rectangular matrix?)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Pseudoinverse\n",
"The solution to the linear least squares problem can be written as\n",
"$$x = A^{\\dagger} b.$$\n",
"\n",
"The matrix $$A^{\\dagger} = \\lim_{\\alpha \\rightarrow 0}(\\alpha I + A^* A)^{-1} A^*$$ is called **Moore-Penrose** pseudoinverse of the matrix $A$.\n",
"\n",
"* If matrix $A$ has full column rank, then $A^* A$ is non-singular and we get $A^{\\dagger} = \\lim_{\\alpha \\rightarrow 0}(\\alpha I + A^* A)^{-1} A^* = (A^* A)^{-1} A^*$.\n",
"\n",
"* If matrix $A$ is squared and non-singular we get $A^{\\dagger} = \\lim_{\\alpha \\rightarrow 0}(\\alpha I + A^* A)^{-1} A^* = (A^* A)^{-1} A^* = A^{-1} A^{-*} A^* = A^{-1}$ - standard inverse of $A$\n",
"\n",
"* If $A$ has linearly dependent columns, then $A^\\dagger b$ gives solution that has minimal euclidean norm "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## SVD, Pseudoinverse, condition number\n",
"Let $A = U \\Sigma V^*$ be the SVD of $A$. Then,\n",
"\n",
"$$A^{\\dagger} = V \\Sigma^{\\dagger} U^*,$$\n",
"\n",
"where $\\Sigma^{\\dagger}$ consists of inverses of non-zero singular values of $A$. Indeed,\n",
"\n",
"$$A^{\\dagger} = \\lim_{\\alpha \\rightarrow 0}(\\alpha I + A^* A)^{-1} A^* = \\lim_{\\alpha \\rightarrow 0}( \\alpha VV^* + V \\Sigma^2 V^*)^{-1} V \\Sigma U^* = \\lim_{\\alpha \\rightarrow 0}( V(\\alpha I + \\Sigma^2) V^*)^{-1} V \\Sigma U^* = V \\lim_{\\alpha \\rightarrow 0}(\\alpha I + \\Sigma^2)^{-1} \\Sigma U^* = V \\Sigma^{\\dagger} U^*,$$\n",
"\n",
"Thus, the condition number for the euclidean norm is still just the ratio of largest and smallest non-zero singular values."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Example\n",
"Consider a two-dimensional example. Suppose we have a linear model \n",
"$$y = ax + b$$\n",
"and noisy data $(x_1, y_1), \\dots (x_n, y_n)$. Then the linear system on coefficients will look as follows\n",
"$$\n",
"\\begin{split}\n",
"a x_1 &+ b &= y_1 \\\\\n",
"&\\vdots \\\\\n",
"a x_n &+ b &= y_n \\\\\n",
"\\end{split}\n",
"$$\n",
"or in a matrix form\n",
"$$\n",
"\\begin{pmatrix}\n",
"x_1 & 1 \\\\\n",
"\\vdots & \\vdots \\\\\n",
"x_n & 1 \\\\\n",
"\\end{pmatrix}\n",
"\\begin{pmatrix}\n",
"a \\\\\n",
"b\n",
"\\end{pmatrix} =\n",
"\\begin{pmatrix}\n",
"y_1 \\\\\n",
"\\vdots \\\\\n",
"y_n \\\\\n",
"\\end{pmatrix},\n",
"$$\n",
"which represents overdetermined system."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"a_exact = 1.\n",
"b_exact = 2.\n",
"\n",
"n = 10\n",
"xi = np.arange(n)\n",
"yi = a_exact * xi + b_exact + 2*np.random.random(n)\n",
"\n",
"A = np.array([xi, np.ones(n)])\n",
"coef = np.linalg.pinv(A).T.dot(yi) # coef is [a, b]\n",
"\n",
"plt.xkcd()\n",
"plt.plot(xi, yi, 'o', label='$(x_i, y_i)$')\n",
"plt.plot(xi, coef[0]*xi + coef[1], label='Least Squares')\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Lacking for structure\n",
"A typical 3D-problem requires a $100 \\times 100 \\times 100$ discretization \n",
"\n",
"This gives a linear system with $10^6$ unknowns, right hand side takes $8$ megabytes of memory.\n",
"\n",
"This matrix has $10^6 \\times 10^6 = 10^{12}$ elements, takes $8$ terabytes of memory.\n",
"\n",
"Fortunately, the matrices in real-life are not **dense**, but have certain **structure**:\n",
"\n",
"- Sparse matrices\n",
"- Low-rank matrices\n",
"- Toeplitz matrices (shift-invariant property)\n",
"- Sparse in certain bases"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Summary\n",
"- Linear systems can be solved by Gaussian elimination, complexity in $\\mathcal{O}(n^3)$.\n",
"- Linear systems can be solved by LU-decomposition, complexity is $\\mathcal{O}(n^3)$ for the decomposition, $\\mathcal{O}(n^2)$ for each solve\n",
"- Linear least squares can be solved by normal equation (bad)\n",
"- Linear least squares can be solved by QR-decomposition (good) or by augmentation (not bad)\n",
"- Without structure, we can solve up to $10^4$ linear systems on a laptop (memory restrictions)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Next lecture\n",
"- Eigenvectors, eigenvalues, Schur theorem"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"##### Questions?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from IPython.core.display import HTML\n",
"def css_styling():\n",
" styles = open(\"./styles/custom.css\", \"r\").read()\n",
" return HTML(styles)\n",
"css_styling()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}