{ "cells": [ { "cell_type": "markdown", "id": "81b1d2f0", "metadata": {}, "source": [ "---\n", "title: \"Krylov Subspace Methods\"\n", "subtitle: \"Lecture 11\"\n", "date: 2026-03-02\n", "abstract-title: Overview\n", "format:\n", " html:\n", " other-links:\n", " - text: This notebook\n", " href: L11.ipynb\n", "---" ] }, { "cell_type": "markdown", "id": "63cf0867", "metadata": {}, "source": [ "::: {.callout-note}\n", "\n", "I encourage you to play around with the juptyer notebook for this lecture - you can copy the code with the ```this notebook``` button on the side of this page.\n", "\n", ":::\n", "\n", "::: {.callout-warning}\n", "\n", "These notes are mainly a record of what we discussed and are not a substitute for attending the lectures and reading books! If anything is unclear/wrong, let me know and I will update the notes.\n", "\n", ":::\n", "\n", "::: {.callout-tip}\n", "\n", "This lecture is mostly based on @Burden sections 7.6.\n", "\n", ":::" ] }, { "cell_type": "code", "execution_count": 1, "id": "db6fe346", "metadata": {}, "outputs": [], "source": [ "#| echo: false\n", "\n", "# IF YOU ARE READING THIS, THANK YOU\n", "# FOR DOWNLOADING THE LECTURE NOTES.\n", "# THE FIRST PERSON TO LET ME KNOW,\n", "# WINS SOME CHOCOLATES OF YOUR CHOICE" ] }, { "cell_type": "code", "execution_count": 2, "id": "b1842d84", "metadata": {}, "outputs": [], "source": [ "using Plots, LaTeXStrings, LinearAlgebra, IterativeSolvers" ] }, { "cell_type": "code", "execution_count": 3, "id": "72a042fa", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to c:\\Users\\math5\\Math 5485\\Math5486\\tmp.gif\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"c:\\\\Users\\\\math5\\\\Math 5485\\\\Math5486\\\\tmp.gif\")" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# | echo: false \n", "\n", "function gradientDescent(A,b,x0; Niter=50, tol=1e-3, xlims=[-25,25], ylims=[-25,25])\n", "\n", " g(x,y) = dot([x;y], A*[x;y])/2 - dot([x;y], b)\n", " Dg(x,y) = A*[x;y] - b\n", "\n", " x_range = range(xlims[1], xlims[2], length=100)\n", " y_range = range(ylims[1], ylims[2], length=100)\n", "\n", " P = contour(x_range, y_range, g, \n", " fill=true, \n", " levels=50, \n", " title=\"Steepest Descent\",\n", " xlabel=\"x\", ylabel=\"y\", legend=false,\n", " colorbar=true)\n", "\n", " anim = @animate for i ∈ 0:Niter\n", "\n", " if (i==0)\n", " scatter!(P, [x0[1]], [x0[2]], markersize=5, color=:white)\n", " else \n", " r = b - A*x0\n", " if (norm(r)" ], "text/plain": [ "Plots.AnimatedGif(\"c:\\\\Users\\\\math5\\\\Math 5485\\\\Math5486\\\\tmp.gif\")" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = [50 0 ; 0 .01]; b = [10; 3]; x0 = [1;20]; ξ = A\\b\n", "gif( gradientDescent(A,b,x0; ylims=[0,ξ[2]+50]), fps=1 )" ] }, { "cell_type": "markdown", "id": "00497fbf", "metadata": {}, "source": [ "We then considered Conjugate gradient method: fix $x^{(0)}$ and thus $v^{(0)} := r^{(0)} = b - Ax^{(0)}$ and iterate\n", "\n", "\\begin{align}\n", " \\alpha^{(k)} &= \\frac{(v^{(k)}, r^{(k)})}{(v^{(k)}, v^{(k)})_A} \\nonumber\\\\\n", " %\n", " x^{(k+1)} &= x^{(k)} + \\alpha^{(k)} v^{(k)} \\nonumber\\\\\n", " %\n", " r^{(k+1)} &= b - Ax^{(k+1)} \\nonumber\\\\\n", " %\n", " \\beta^{(k+1)} &= - \\frac{(v^{(k)}, r^{(k+1)})_A}{(v^{(k)}, v^{(k)})_A} \\nonumber\\\\\n", " %\n", " v^{(k+1)} &= r^{(k+1)} + \\beta^{(k+1)} v^{(k)}\n", "\\end{align}\n", "\n", "which we implement here: " ] }, { "cell_type": "code", "execution_count": 5, "id": "4054eb30", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CG (generic function with 1 method)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "function CG(A,b,x0; Niter=50, tol=1e-3, xlims=[-25,25], ylims=[-25,25])\n", "\n", " g(x,y) = dot([x;y], A*[x;y])/2 - dot([x;y], b)\n", "\n", " x_range = range(xlims[1], xlims[2], length=100)\n", " y_range = range(ylims[1], ylims[2], length=100)\n", "\n", " P = contour(x_range, y_range, g, \n", " fill=true, \n", " levels=50, \n", " title=\"Conjugate Gradient\",\n", " xlabel=\"x\", ylabel=\"y\", legend=false,\n", " colorbar=true)\n", "\n", " r = b - A*x0\n", " v = b - A*x0\n", " anim = @animate for i ∈ 0:Niter\n", "\n", " if (i==0)\n", " scatter!(P, [x0[1]], [x0[2]], markersize=5, color=:white)\n", " else \n", " \n", " if (norm(r)" ], "text/plain": [ "Plots.AnimatedGif(\"c:\\\\Users\\\\math5\\\\Math 5485\\\\Math5486\\\\tmp.gif\")" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[36m\u001b[1m[ \u001b[22m\u001b[39m\u001b[36m\u001b[1mInfo: \u001b[22m\u001b[39mSaved animation to c:\\Users\\math5\\Math 5485\\Math5486\\tmp.gif\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "Plots.AnimatedGif(\"c:\\\\Users\\\\math5\\\\Math 5485\\\\Math5486\\\\tmp.gif\")" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = [50 0 ; 0 .01]; b = [10; 3]; x0 = [1;20]; ξ= A\\b\n", "display( gif( gradientDescent(A,b,x0; ylims=[0,ξ[2]+50]), fps=1 ) )\n", "gif( CG(A,b,x0; ylims=[0,ξ[2]+50]), fps=1 )" ] }, { "cell_type": "markdown", "id": "499cbe4f", "metadata": {}, "source": [ "## Convergence \n", "\n", "We saw last week that the rate of convergence depends on the conditioning of the matrix:\n", "\n", "::: {#thm-SD}\n", "\n", "Suppose $A$ is SPD, $\\{x^{(k)}\\}$ are the iterates generated by **steepest descent**, and $x$ be the exact solution to $Ax = b$. Then, \n", "\n", "\\begin{align}\n", " \\| x^{(k)} - x \\|_A \\leq \\left( \\frac{\\kappa_2(A)-1}{\\kappa_2(A)+1} \\right)^{k} \\| x^{(0)} - x \\|_A\n", "\\end{align}\n", "\n", "where $\\| y \\|_A := \\sqrt{(y,y)_A} = \\sqrt{y^T A y}$ and $\\kappa_2(A) = \\|A^{-1}\\|_2 \\|A\\|_2$ is the condition number of $A$ (with respect to the $2$-norm).\n", "\n", "::: \n", "\n", "::: {#thm-CG}\n", "\n", "Suppose $A$ is SPD, $\\{x^{(k)}\\}$ are the iterates generated by **conjugate gradient**, and $x$ be the exact solution to $Ax = b$. Then, \n", "\n", "\\begin{align}\n", " \\| x^{(k)} - x \\|_A \\leq 2 \\left( \\frac{\\sqrt{\\kappa_2(A)} -1}{\\sqrt{\\kappa_2(A)} + 1} \\right)^{k} \\| x^{(0)} - x \\|_A\n", "\\end{align}\n", "\n", "where $\\| y \\|_A := \\sqrt{(y,y)_A} = \\sqrt{y^T A y}$ and $\\kappa_2(A) = \\|A^{-1}\\|_2 \\|A\\|_2$ is the condition number of $A$ (with respect to the $2$-norm).\n", "\n", "::: \n", "\n", "**Proof:** An option for a presentation. For CG, you can use polynomial approximation by writing $\\| x^{(k)} - x \\|_A = \\| p(A) (x^{(0)} - x)\\|_A$ for some polynomial $p$ of degree less than or equal to $k$ with $p(0) = 1$. You can conclude by applying results about Chebyshev polynomials....\n", "\n", "Notice that the bound for CG is better (and the difference between the methods becomes more stark as we increase the condition number):" ] }, { "cell_type": "code", "execution_count": 7, "id": "a7b9226e", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": [ "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", " \n", " \n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "text/html": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P = []\n", "xx = range(1, 10, 2)\n", "for κ ∈ [1.01, 2, 10, 100] \n", " ρSD = (κ-1)/(κ+1)\n", " ρCG = (sqrt(κ)-1)/(sqrt(κ)+1)\n", " p = plot(xx, [ρSD.^xx ρCG.^xx], \n", " label=[\"ρSD\" \"ρCG\"], xlabel = \"k\", ylabel = \"error\", \n", " title=\"κ = $κ\", yaxis=:log)\n", " push!( P, p )\n", "end\n", "\n", "plot(P...)" ] }, { "cell_type": "markdown", "id": "d47b194e", "metadata": {}, "source": [ "(Note: we are only plotting the upper bounds and have **not** actually computed the SD/CG iterations in these plots)" ] }, { "cell_type": "markdown", "id": "0996d95b", "metadata": {}, "source": [ "## Krylov subspace methods\n", "\n", "::: {#exm-K}\n", "\n", "Show that, for CG, we have $r^{(k)}, v^{(k)} \\in \\mathcal K_{k+1}(A,r^{(0)})$ where\n", "\n", "\\begin{align}\n", " \\mathcal K_{k}(A,y) := \\mathrm{span}\\left\\{ \n", " y, Ay, \\cdots, A^{k-1} y\n", " \\right\\}. \n", "\\end{align}\n", "\n", "Hint: $v^{(0)} := r^{(0)}$. Proceed by induction and use $r^{(k+1)} = r^{(k)} - \\alpha^{(k)} Av^{(k)}$ and $v^{(k+1)} = r^{(k+1)} + \\beta^{(k+1)} v^{(k)}$.\n", "\n", ":::\n", "\n", "Notice that, for CG, $r^{k+1}$ is orthogonal to every vector in $\\mathcal K_{k}(A, r^{(0)})$ (if this is the case, we simply say $r^{k+1}$ is *orthogonal to $\\mathcal K_{k}(A, r^{(0)})$*)." ] }, { "cell_type": "markdown", "id": "42a4e1f7", "metadata": {}, "source": [ "::: {#def-K}\n", "\n", "$\\mathcal K_k(A,r^{(0)})$ is known as a *Krylov subspace*.\n", "\n", "A Krylov subspace method is an iterative method where $r^{(k)} \\in \\mathcal K_{k+1}(A, r^{0})$ and orthogonal to $\\mathcal K_{k}(A, r^{0})$.\n", "\n", ":::\n", "\n", "::: {#thm-K}\n", "\n", "In exact arithmetic (i.e. not accounting for rounding errors), Krylov subspace methods (including CG) converge in at most $N$ steps where $A \\in \\mathbb R^{N\\times N}$. \n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "421eda54", "metadata": {}, "source": [ "Let $p_{k-1}$ be a polynomial of degree $k-1$. Then, Krylov methods are of the form \n", "\n", "\\begin{align}\n", " x^{(k)} = x^{(0)} + p_{k-1}(A) r^{(0)}\n", "\\end{align}\n", "\n", "* CG - choose $p_{k-1}$ to give optimal search directions, \n", "* GMRES (general minimal residual method) - choose $p_{k-1}$ to minimise the residual\n", "\n", "\\begin{align}\n", " x^{(k)} = \\mathrm{arg min}_{x \\in \\mathcal K_k(A, r^{(0)})} \\| b - Ax \\|_{2}\n", "\\end{align}\n", "\n", "(this uses Arnoldi or Lanczos iteration - possible presentation/poster...)" ] }, { "cell_type": "markdown", "id": "b94ee96d", "metadata": {}, "source": [ ":::{.callout-tip}\n", "# TO-DO\n", "\n", "* Let me know any questions you have for Wednesday (problem class),\n", "* Revise for midterm! \n", "* (Sign-up to office hours if you would like)\n", "\n", "Chapter 1 reading:\n", "\n", "* @Burden sections 5.1 - 5.6, \n", "* @FNC [zero stability](https://fncbook.com/zerostability/) \n", "\n", "Chapter 2 reading:\n", "\n", "* Recap matrices: sections 7.1 - 7.2 of @Burden \n", "* Jacobi & Gauss-Seidel: section 7.3 @Burden \n", "* CG: section 7.6 @Burden\n", "\n", ":::" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.11", "language": "julia", "name": "julia-1.11" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.11.6" } }, "nbformat": 4, "nbformat_minor": 5 }