{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "from traitlets.config.manager import BaseJSONConfigManager\n", "import jupyter_core\n", "#path = \"/home/damian/miniconda3/envs/rise_latest/etc/jupyter/nbconfig\"\n", "path = \"/Users/i.oseledets/anaconda2/envs/teaching/etc/jupyter/nbconfig\"\n", "cm = BaseJSONConfigManager(config_dir=path)\n", "cm.update(\"livereveal\", {\n", " \"theme\": \"sky\",\n", " \"transition\": \"zoom\",\n", " \"start_slideshow_at\": \"selected\",\n", " \"scroll\": True\n", "})" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Lecture 6: Eigenvalues and eigenvectors" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Recap of the previous lecture\n", "- Linear systems\n", "- Gaussian elimination\n", "- LU decomposition\n", "- Condition number as a measure of forward stability of the problem" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Today lecture\n", "Today we will talk about:\n", "- Eigenvectors and their applications (PageRank)\n", "- Gershgorin circles\n", "- Computing eigenvectors using power method\n", "- Schur theorem\n", "- Normal matrices" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## What is an eigenvector?\n", "**Definition.** A vector $x \\ne 0$ is called an **eigenvector** of a square matrix $A$ if there exists a number $\\lambda$ such that \n", "\n", "$$\n", " Ax = \\lambda x.\n", "$$\n", "\n", "The number $\\lambda$ is called an **eigenvalue**. \n", "The name **eigenpair** is also used.\n", "\n", "Since $A - \\lambda I$ should have a non-trivial kernel, \n", "eigenvalues are the roots of the characteristic polynomial\n", "\n", "$$ \\det (A - \\lambda I) = 0.$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Eigendecomposition\n", "If matrix $A$ of size $n\\times n$ has $n$ eigenvectors $s_i$, $i=1,\\dots,n$:\n", "$$\n", "As_i = \\lambda_i s_i,\n", "$$\n", "then this can be written as\n", "$$\n", "A S = S \\Lambda, \\quad\\text{where}\\quad S=(s_1,\\dots,s_n), \\quad \\Lambda = \\text{diag}(\\lambda_1, \\dots, \\lambda_n),\n", "$$\n", "or equivalently\n", "$$\n", "A = S\\Lambda S^{-1}.\n", "$$\n", "This is called **eigendecomposition** of a matrix. Matrices that can be represented by their eigendecomposition are called **diagonalizable**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Existence\n", "\n", "What classes of matrices are diagonalizable?\n", "\n", "Simple example can be matrices with all different eigenvalues.\n", "More generally, matrix is diagonalizable iff **algebraic multiplicity** of each eigenvalue (mutiplicity of eigenvalue in the characteristic polynomial) is equal to its **geometric multiplicity** (dimension of eigensubspace). \n", "\n", "For our purposes the most important class of diagonalizable matrices is the class of **normal matrices**: \n", "\n", "$$AA^* = A^* A.$$\n", "\n", "You will learn how to prove that normal matrices are diagonalizable after a few slides (Schur decomposition topic)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Example\n", "\n", "* You can simply check that, e.g. matrix $$A = \\begin{pmatrix} 1 & 1 \\\\ 0 & 1 \\end{pmatrix}$$ has one eigenvalue $1$ of multiplicity $2$ (since its characteristic polynomial is $p(\\lambda)=(1-\\lambda)^2$), but only one eigenvector $\\begin{pmatrix} c \\\\ 0 \\end{pmatrix}$ and hence the matrix is not diagonalizable." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Why eigenvectors and eigenvalues are important?\n", "\n", "- Eigenvectors are both important auxiliary tools and also play important role in applications. \n", "- To start with all our microworld is governed by the **Schrodinger equation** which is an eigenvalue problem:\n", "\n", "$$\n", " H \\psi = E \\psi,\n", "$$\n", "\n", "where $E$ is the ground state energy, $\\psi$ is called wavefunction and $H$ is the Hamiltonian. \n", "- More than 50% of the computer power is spent on solving this type of problems for computational material / drug design." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Eigenvalues are vibrational frequencies\n", "\n", "A typical computation of eigenvectors / eigenvectors is for studying \n", "\n", "- Vibrational computations of mechanical structures\n", "- Model order reduction of complex systems" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " <iframe\n", " width=\"400\"\n", " height=\"300\"\n", " src=\"https://www.youtube.com/embed/xKGA3RNzvKg\"\n", " frameborder=\"0\"\n", " allowfullscreen\n", " ></iframe>\n", " " ], "text/plain": [ "<IPython.lib.display.YouTubeVideo at 0xa1b4fe748>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo \n", "YouTubeVideo(\"xKGA3RNzvKg\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Google PageRank\n", "One of the most famous eigenvectors computation is the **Google PageRank**. \n", "It is not actively used by Google nowadays, but it was one of the main features in its early stages. The question is how do we rank webpages, which one is important, and which one is not. \n", "All we know about the web is which page refers to which. PageRank is defined by a recursive definition. Denote by $p_i$ the **importance** of the $i$-th page. Then we define this importance as an average value of all importances of all pages that refer to the current page. It gives us a linear system \n", "$$\n", " p_i = \\sum_{j \\in N(i)} \\frac{p_j}{L(j)},\n", "$$\n", "where $L(j)$ is the number of outgoing links on the $j$-th page, $N(i)$ are all the neighbours of the $i$-th page. It can be rewritten as \n", "$$\n", " p = G p, \\quad G_{ij} = \\frac{1}{L(j)}\n", "$$\n", "or as an eigenvalue problem" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "$$\n", " Gp = 1 p,\n", "$$\n", "\n", "i.e. the eigenvalue $1$ is already known. Note that $G$ is **left stochastic**, i.e. its columns sum up to $1$. \n", "Check that any left stochastic matrix has maximum eigenvalue equal to $1$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "## Demo\n", "We can compute PageRank using some Python packages. \n", "We will use ```networkx``` package for working with graphs that can be installed using \n", "\n", "```conda install networkx```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "We will use a simple example of [Zachary karate club network](https://en.wikipedia.org/wiki/Zachary%27s_karate_club). This data was manually collected in 1977, and is a classical social network dataset." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import networkx as nx\n", "kn = nx.read_gml('karate.gml')\n", "#nx.write_gml(kn, 'karate2.gml')\n", "nx.draw_networkx(kn) #Draw the graph" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now we can actually compute the PageRank using the NetworkX built-in function. We also plot \n", "the size of the nodes larger if its PageRank is larger." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "pr = nx.algorithms.link_analysis.pagerank(kn)\n", "pr_vector = list(pr.values())\n", "pr_vector = np.array(pr_vector) * 3000\n", "nx.draw_networkx(kn, node_size=pr_vector, labels=None)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Computations of eigenvalues\n", "\n", "How to compute eigenvalues and eigenvectors? \n", "\n", "There are two types of eigenproblems:\n", "\n", "- full eigenproblem (all eigenvalues & eigenvectors are required)\n", "- partial eigenvalues (minimal/maximal eigenvalues, eigenvalues within the specified region are required)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Computation of the eigenvalues via characteristic equations\n", "The eigenvalue problem has the form \n", "\n", "$$\n", " Ax = \\lambda x, \n", "$$\n", "\n", "or\n", "\n", "$$\n", " (A - \\lambda I) x = 0,\n", "$$\n", "\n", "therefore matrix $A - \\lambda I$ has non-trivial kernel and should be singular. That means, that the **determinant** \n", "\n", "$$\n", " p(\\lambda) = \\det(A - \\lambda I) = 0.\n", "$$\n", "\n", "- The equation is called **characteristic equations** and is a polynomial of order $n$. \n", "- The $n$-degree polynomial has $n$ complex roots!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Recall the determinant\n", "The determinant of a square matrix $A$ is defined as \n", "\n", "$$\\det A = \\sum_{\\sigma \\in S_n} \\mathrm{sgn}({\\sigma})\\prod^n_{i=1} a_{i, \\sigma_i},$$\n", "\n", "where \n", "- $S_n$ is the set of all **permutations** of the numbers $1, \\ldots, n$\n", "- $\\mathrm{sgn}$ is the **signature** of the permutation ( $(-1)^p$ where $p$ is the number of transpositions to be made).\n", "\n", "(**Checkout** video \"The Execution of Determinant\" on the Gilbert Strang lecture at MIT)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " <iframe\n", " width=\"400\"\n", " height=\"300\"\n", " src=\"https://www.youtube.com/embed/amv58LCqCMI\"\n", " frameborder=\"0\"\n", " allowfullscreen\n", " ></iframe>\n", " " ], "text/plain": [ "<IPython.lib.display.YouTubeVideo at 0xa1b347828>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo \n", "YouTubeVideo(\"amv58LCqCMI\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Properties of determinant\n", "Determinant has many nice properties:\n", "\n", "1. $\\det(AB) = \\det(A) \\det(B)$\n", "2. If we have one row as a sum of two vectors, determinant is a sum of two determinants\n", "3. \"Minor expansion\": we can expand determinant through a selected row or column.\n", "\n", "If you do it via **minor expansion**, we get **exponential** complexity in $n$.\n", "\n", "Can we do $\\mathcal{O}(n^3)$? " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Eigenvalues and characteristic equation\n", "\n", "Now we go back to the eigenvalues.\n", "\n", "The characteristic equation can be used to compute the eigenvalues, which leads to **naïve** algorithm:\n", "\n", "$$p(\\lambda) = \\det(A - \\lambda I)$$\n", "\n", "1. Compute coefficients of the polynomial\n", "2. Compute the roots\n", "\n", "**Is this a good idea**? \n", "\n", "**Give your feedback**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We can do a short demo of this" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'Imaginary part')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "n = 40\n", "a = [[1.0 / (i - j + 0.5) for i in range(n)] for j in range(n)]\n", "a = np.array(a)\n", "ev = np.linalg.eigvals(a)\n", "#There is a special numpy function for chacteristic polynomial\n", "cf = np.poly(a)\n", "ev_roots = np.roots(cf)\n", "#print('Coefficients of the polynomial:', cf)\n", "#print('Polynomial roots:', ev_roots)\n", "plt.scatter(ev_roots.real, ev_roots.imag, marker='x', label='roots')\n", "b = a + 0 * np.random.randn(n, n)\n", "ev_b = np.linalg.eigvals(b)\n", "plt.scatter(ev_b.real, ev_b.imag, marker='o', label='Lapack')\n", "#plt.scatter(ev_roots.real, ev_roots.imag, marker='o', label='Brute force')\n", "plt.legend(loc='best')\n", "plt.xlabel('Real part')\n", "plt.ylabel('Imaginary part')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "**Morale**: \n", "\n", "- Do not do that, unless you have a reason. \n", "- Polynomial rootfinding is very **ill-conditioned** (can be much better, but not with monomials $\\{1,x,x^2,\\dots\\}$!). Note that Gram matrix of monomials \n", "\n", "$$h_{ij} = \\int_0^1 x^i x^j\\, dx = \\frac{1}{i+j+1},$$\n", "\n", "is the Hilbert matrix, which has exponential decay of singular values. So, monomials are \"almost\" linearly dependent." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Gershgorin circles\n", "- There is a very interesting theorem that sometimes helps to localize the eigenvalues. \n", "\n", "- It is called **Gershgorin theorem**. \n", "\n", "- It states that all eigenvalues $\\lambda_i, i = 1, \\ldots, n$ are located inside the union of **Gershgorin circles** $C_i$, where $C_i$ is a disk on the complex plane with center $a_{ii}$ and radius \n", "\n", "$$r_i = \\sum_{j \\ne i} |a_{ij}|.$$\n", "\n", "Moreover, if the circles do not intersect they contain only one eigenvalue per circle. The proof is instructive since it uses the concepts we looked at the previous lectures." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Proof\n", "First, we need to show that if the matrix $A$ is **strictly diagonally dominant**, i.e. \n", "\n", "$$\n", " |a_{ii}| > \\sum_{j \\ne i} |a_{ij}|,\n", "$$\n", "then such matrix is non-singular." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "We separate the diagonal part and off-diagonal part, and get \n", "\n", "$$\n", " A = D + S = D( I + D^{-1}S),\n", "$$\n", "\n", "and $\\Vert D^{-1} S\\Vert_1 < 1$. Therefore, by using the **Neumann series**, the matrix $I + D^{-1}S$ is invertible and hence $A$ is invertible." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Now the proof follows by contradiction: \n", "\n", "- if any of the eigenvalues lies outside all of the circles, the matrix $(A - \\lambda I)$ \n", "is strictly diagonally dominant\n", "- thus it is invertible\n", "- that means, that $(A - \\lambda I) x = 0$ means $x = 0$. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## A short demo" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "%matplotlib inline\n", "n = 3\n", "fig, ax = plt.subplots(1, 1)\n", "a = [[5, 1, 1], [1, 0, 0.5], [2, 0, 10]]\n", "#a = [[1.0 / (i - j + 0.5) for i in xrange(n)] for j in xrange(n)]\n", "a = np.array(a)\n", "#a = np.diag(np.arange(n))\n", "a = a + 2 * np.random.randn(n, n)\n", "#u = np.random.randn(n, n)\n", "#a = np.linalg.inv(u).dot(a).dot(u)\n", "xg = np.diag(a).real\n", "yg = np.diag(a).imag\n", "rg = np.zeros(n)\n", "ev = np.linalg.eigvals(a)\n", "for i in range(n):\n", " rg[i] = np.sum(np.abs(a[i, :])) - np.abs(a[i, i])\n", " crc = plt.Circle((xg[i], yg[i]), radius=rg[i], fill=False)\n", " ax.add_patch(crc)\n", "plt.scatter(ev.real, ev.imag, color='r', label=\"Eigenvalues\")\n", "plt.axis('equal')\n", "plt.legend()\n", "ax.set_title('Eigenvalues and Gershgorin circles')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "**Note**: There are more complicated figures, like **[Cassini ovals](https://en.wikipedia.org/wiki/Cassini_oval)**, that include the spectrum\n", "\n", "$$\n", " M_{ij} = \\{z\\in\\mathbb{C}: |a_{ii} - z|\\cdot |a_{jj} - z|\\leq r_i r_j\\}, \\quad r_i = \\sum_{l\\not= i} |a_{il}|.\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Power method\n", "We are often interested in the computation of the part of the spectrum, like the largest eigenvalues or smallest eigenvalues. Also it is interesting to note that for the Hermitian matrices $(A = A^*)$ the eigenvalues are always real (prove it!). \n", "\n", "A power method is the simplest method for the computation of the largest eigenvalue in modulus. It is also our first example of the **iterative method** and **Krylov method**." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Power method\n", "\n", "The eigenvalue problem\n", "\n", "$$Ax = \\lambda x, \\quad \\Vert x \\Vert_2 = 1 \\ \\text{for stability}.$$ \n", "\n", "can be rewritten as a **fixed-point iteration**, which is called **power method** and finds the largest eigenvalue of $A$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Power method has the form\n", "\n", "$$\n", " x_{k+1} = A x_k, \\quad x_{k+1} := \\frac{x_{k+1}}{\\Vert x_{k+1} \\Vert_2}.\n", "$$\n", "\n", "and $x_{k+1}\\to v_1$, where $Av_1 = \\lambda_1 v_1$ and $\\lambda_1$ is the largest eigenvalue and $v_1$ is the corresponding eigenvector.\n", "\n", "On $k+1$-th iteration approximation to $\\lambda_1$ - the largest eigenvalue can be found as\n", "\n", "$$\n", " \\lambda^{(k+1)} = (Ax_{k+1}, x_{k+1}),\n", "$$\n", "\n", "Note that $\\lambda^{(k+1)}$ is not required for the $k+2$-th iteration, but might be useful to measure error on each iteration: $\\|Ax_{k+1} - \\lambda^{(k+1)}x_{k+1}\\|$. \n", "\n", "The convergence is geometric, but the convergence ratio is $q^k$, where $q = \\left|\\frac{\\lambda_{2}}{\\lambda_{1}}\\right| < 1$, for $\\lambda_1>\\lambda_2\\geq\\dots\\geq \\lambda_n$ and $k$ is the number of iteration. It means, the convergence can be artitrary small. To prove it, it is sufficient to consider a $2 \\times 2$ diagonal matrix." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Convergence analysis for $A=A^*$\n", "\n", "Let's have a more precise look at the power method when $A$ is Hermitian.\n", "In two slides you will learn that every Hermitian matrix is diagonalizable. Therefore, there exists orthonormal basis of eigenvectors $v_1,\\dots,v_n$ such that $Av_i = \\lambda_i v_i$. Let us decompose $x_0$ into a sum of $v_i$ with coefficients $c_i$:\n", "$$\n", "x_0 = c_1 v_1 + \\dots + c_n v_n.\n", "$$\n", "Since $v_i$ are eigenvectors, we have\n", "$$\n", "\\begin{split}\n", "x_1 &= \\frac{Ax_0}{\\|Ax_0\\|} = \\frac{c_1 \\lambda_1 v_1 + \\dots + c_n \\lambda_n v_n}{\\|c_1 \\lambda_1 v_1 + \\dots + c_n \\lambda_n v_n \\|} \\\\\n", "&\\vdots\\\\\n", "x_k &= \\frac{Ax_{k-1}}{\\|Ax_{k-1}\\|} = \\frac{c_1 \\lambda_1^k v_1 + \\dots + c_n \\lambda_n^k v_n}{\\|c_1 \\lambda_1^k v_1 + \\dots + c_n \\lambda_n^k v_n \\|}\n", "\\end{split}\n", "$$\n", "Now you see, that \n", "$$\n", "x_k = \\frac{c_1}{|c_1|}\\left(\\frac{\\lambda_1}{|\\lambda_1|}\\right)^k\\frac{ v_1 + \\frac{c_2}{c_1}\\frac{\\lambda_2^k}{\\lambda_1^k}v_2 + \\dots + \\frac{c_n}{c_1}\\frac{\\lambda_n^k}{\\lambda_1^k}v_n}{\\left\\|v_1 + \\frac{c_2}{c_1}\\frac{\\lambda_2^k}{\\lambda_1^k}v_2 + \\dots + \\frac{c_n}{c_1}\\frac{\\lambda_n^k}{\\lambda_1^k}v_n\\right\\|},\n", "$$\n", "which converges to $v_1$ since $\\left| \\frac{c_1}{|c_1|}\\left(\\frac{\\lambda_1}{|\\lambda_1|}\\right)^k\\right| = 1$ and $\\left(\\frac{\\lambda_2}{\\lambda_1}\\right)^k \\to 0$ if $|\\lambda_2|<|\\lambda_1|$." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Things to remember about the power method\n", "- Power method gives estimate of the largest eigenvalue in modulus or spectral radius of the given matrix\n", "- One step requires one matrix-by-vector product. If the matrix allows for an $\\mathcal{O}(n)$ matvec (for example, it is sparse), \n", " then power method is tractable for larger $n$.\n", "- Convergence can be slow\n", "- If only a rough estimate is needed, only a few iterations are sufficient\n", "- The solution vector is in the **Krylov subspace** $\\{x_0, Ax_0,\\dots,A^{k}x_0\\}$ and has the form $\\mu A^k x_0$, where $\\mu$ is the normalization constant. \n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Matrix decomposition: the Schur form\n", "There is one class of matrices when eigenvalues can be found easily: **triangular matrices**\n", "\n", "$$\n", " A = \\begin{pmatrix}\n", " \\lambda_1 & * & * \\\\\n", " 0 & \\lambda_2 & * \\\\\n", " 0 & 0 & \\lambda_3 \\\\\n", " \\end{pmatrix}.\n", "$$\n", "The eigenvalues of $A$ are $\\lambda_1, \\lambda_2, \\lambda_3$. Why? " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "Because the determinant is \n", "$$\n", " \\det(A - \\lambda I) = (\\lambda - \\lambda_1) (\\lambda - \\lambda_2) (\\lambda - \\lambda_3).\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Thus, computing the eigenvalues of triangular matrices is easy. Now, the unitary matrices come to help. Let $U$ be a unitary matrix, i.e. $U^* U = I$. Then \n", "\n", "$$\n", " \\det(A - \\lambda I) = \\det(U (U^* A U - \\lambda I) U^*) = \\det(UU^*) \\det(U^* A U - \\lambda I) = \\det(U^* A U - \\lambda I),\n", "$$\n", "\n", "where we have used the famous multiplicativity property of the determinant, $\\det(AB) = \\det(A) \\det(B)$. It means, that the matrices $U^* A U$ and $A$ have the same characteristic polynomials, and the same eigenvalues. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "If we manage to make $U^* A U = T$ where $T$ is **upper triangular**, then we are done. Multplying from the left and the right by $U$ and $U^*$ respectively, we get the desired decomposition: \n", "\n", "$$\n", " A = U T U^*.\n", "$$\n", "\n", "This is the celebrated **Schur decomposition**. Recall that unitary matrices imply stability, thus the eigenvalues are computed very accurately. The Schur decomposition shows why we need matrix decompositions: it represents a matrix into a product of three matrices with a convenient structure. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Schur theorem\n", "**Theorem:** Every $A \\in \\mathbb{C}^{n \\times n}$ matrix can be represented in the Schur form $A = UTU^*$, where $U$ is unitary and $T$ is upper triangular. \n", "**Sketch of the proof**.\n", "1. Every matrix has at least $1$ non-zero eigenvector (take a root of characteristic polynomial, $(A-\\lambda I)$ is singular, has non-trivial nullspace). Let $$Av_1 = \\lambda_1 v_1, \\quad \\Vert v_1 \\Vert_2 = 1$$\n", "2. Let $U_1 = [v_1,v_2,\\dots,v_n]$, where $v_2,\\dots, v_n$ are any vectors othogonal to $v_1$. Then \n", " \n", " $$\n", " U^*_1 A U_1 = \\begin{pmatrix}\n", " \\lambda_1 & * \\\\\n", " 0 & A_2 \n", " \\end{pmatrix},\n", " $$\n", " \n", " where $A_2$ is an $(n-1) \\times (n-1)$ matrix. This is called **block triangular form**. We can now work with $A_2$ only and so on. \n", " \n", " \n", "**Note**: Since we need eigenvectors in this proof, this proof is not a practical algorithm." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Application of the Schur theorem\n", "Important application of the Schur theorem: **normal matrices**. \n", "\n", "**Definition.** Matrix $A$ is called **normal matrix**, if \n", "\n", "$$\n", " AA^* = A^* A.\n", "$$\n", "\n", "**Q:** Examples of normal matrices?" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "fragment" } }, "source": [ "Examples: Hermitian matrices, unitary matrices. " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Normal matrices\n", "**Theorem**: $A$ is a **normal matrix**, iff $A = U \\Lambda U^*$, where $U$ is unitary and $\\Lambda$ is diagonal. \n", "\n", "**Sketch of the proof:** One way is straightforward (if the decomposition holds, the matrix is normal). \n", "The other is more complicated. Consider the Schur form of the matrix $A$. Then $AA^* = A^*A$ means $TT^* = T^* T$. \n", "By looking at the elements we immediately see, \n", "that the only upper triangular matrix $T$ that satisfies $TT^* = T^* T$ is a diagonal matrix!\n", "\n", "#### Important consequence\n", "\n", "Therefore, every normal matrix is **unitary diagonalizable**, which means that it can be diagonalized by unitary matrix $U$. In other words every normal matrix has orthogonal basis of eigenvectors." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## How we compute the Schur decomposition?\n", "\n", "- Everything is fine, but how we compute the Schur form?\n", "\n", "- This will be covered in the next lecture." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Variational principle for eigenvalues\n", "\n", "- In many cases, minimal/maximal eigenvalues are needed\n", "- Then, if $A$ is a Hermitian matrix, the **Rayleigh quotient** is defined as\n", "\n", "$$R_A(x) = \\frac{(Ax, x)}{(x, x)},$$\n", "\n", "and the maximal eigenvalue is the maximum of $R_A(x)$, and the minimal eigenvalue is the minimal of $R_A(x)$. \n", "\n", "- Thus, we can use optimization method to find these **extreme eigenvalues**.\n", "\n", "Now, \"advanced\" concept." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Spectrum and pseudospectrum\n", "\n", "- For linear dynamical systems given by the matrix $A$, spectrum can tell a lot about the system (i.e. stability, ...)\n", "\n", "- However, for **non-normal matrices**, spectrum can be unstable with respect to small perturbations.\n", "\n", "- In order to measure such perturbation, the notion of **pseudospectrum** has been developed." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Pseudospectrum\n", "\n", "We consider the union of all possible eigenvalues of all perturbations of the matrix $A$.\n", "\n", "$$\\Lambda_{\\epsilon}(A) = \\{ \\lambda \\in \\mathbb{C}: \\exists E, x \\ne 0: (A + E) x = \\lambda x, \\quad \\Vert E \\Vert_2 \\leq \\epsilon. \\}$$\n", "\n", "For small $E$ and normal $A$ these will be circules around eigenvalues, for non-normal matrices, the structure can be much different. More details: http://www.cs.ox.ac.uk/pseudospectra/\n", "\n", "<img src='./pics/orrsomm.gif'>" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Summary of todays lecture\n", "\n", "- Eigenvalues, eigenvectors\n", "- Gershgorin theorem\n", "- Power method\n", "- Schur theorem \n", "- Normal matrices\n", "- Some advanced topics\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Next lecture\n", "- Matrix factorizations and how we compute them." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "##### Questions?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "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": { "anaconda-cloud": {}, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "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.6.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }