{
"cells": [
{
"cell_type": "markdown",
"id": "81b1d2f0",
"metadata": {},
"source": [
"---\n",
"title: \"Conjugate Gradient\"\n",
"subtitle: \"Lecture 10\"\n",
"date: 2026-02-23\n",
"abstract-title: Overview\n",
"abstract: | \n",
" (1) Recap \n",
" (2) Steepest Descent \n",
" (3) Conjugate Gradient\n",
"format:\n",
" html:\n",
" other-links:\n",
" - text: This notebook\n",
" href: L10.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"
]
},
{
"cell_type": "markdown",
"id": "5ea01014",
"metadata": {},
"source": [
"## Recap \n",
"\n",
"Last time, we saw simple examples of iterative techniques for solving $Ax = b$:\n",
"\n",
"\\begin{align}\n",
" x^{(k+1)} = T x^{(k)} + c \\tag{*}\n",
"\\end{align}\n",
"\n",
"If $\\rho(T) < 1$, then, for all $x^{(0)} \\in \\mathbb R^n$, $(*)$ converges to the unique solution $x = (I-T)^{-1}c$ as $k\\to\\infty$.\n",
"\n",
"Examples: Jacobi, Gauss-Seidel, SOR:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d365a393",
"metadata": {},
"outputs": [],
"source": [
"function splitting(A,b,x; opt=\"GS\", ω=1, Niter=100, tol=1e-10) \n",
" \n",
" X = [x]\n",
"\n",
" L = -tril(A, -1)\n",
" U = -triu(A, 1)\n",
" D = Diagonal(diag(A))\n",
"\n",
" if (any(iszero, diag(D)))\n",
" @warn \"diagonal of A is not invertible\"\n",
" return X\n",
" end\n",
"\n",
" for i ∈ 1:Niter\n",
" if opt==\"J\"\n",
" # Jacobi\n",
" push!( X, inv(D)*( b + (L+U)*X[end] ) ) \n",
" elseif opt==\"GS\"\n",
" # Gauss-Seidel\n",
" push!( X, inv(D-L)*( b + U*X[end] ) )\n",
" else \n",
" # SOR\n",
" push!( X, inv(D-ω*L)*( ω*b + ((1-ω)D+ω*U)*X[end] ) )\n",
" end\n",
" r = norm(b - A*X[end])\n",
" if (r < tol)\n",
" return X\n",
" end \n",
" end\n",
"\n",
" @warn \"max iterations exceeded\"\n",
" return X\n",
"end;"
]
},
{
"cell_type": "markdown",
"id": "d22adb57",
"metadata": {},
"source": [
"::: {#exm-1}\n",
"\n",
"Applying the Jacobi and Gauss-Seidel iterations to $Ax = b$ with"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "33aad3a1",
"metadata": {},
"outputs": [],
"source": [
"b = [6, 25, -11, 15];\n",
"A = [10 -1 2 0; \n",
" -1 11 -1 3; \n",
" 2 -1 10 -1; \n",
" 0 3 -1 8]\n",
"\n",
"x0 = [0.,0.,0.,0.];"
]
},
{
"cell_type": "markdown",
"id": "c0fce944",
"metadata": {},
"source": [
"gives:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "049866ca",
"metadata": {},
"outputs": [],
"source": [
"X = splitting(A,b,x0; opt=\"J\")\n",
"Y = splitting(A,b,x0; opt=\"GS\")\n",
"\n",
"ω=1.15\n",
"Z = splitting(A,b,x0; opt=\"SOR\", ω=ω);"
]
},
{
"cell_type": "markdown",
"id": "781372bf",
"metadata": {},
"source": [
"In fact, we have the following error curves:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4e6e5cc2",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"image/svg+xml": [
"\n",
"\n"
],
"text/html": [
"
"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# | echo: false\n",
"\n",
"ξ = [1.,2.,-1.,1.]\n",
"\n",
"errJ = zeros(length(X))\n",
"for (i,x) ∈ enumerate(X)\n",
" errJ[i] = norm( x - ξ, Inf ) \n",
"end\n",
"\n",
"errGS = zeros(length(Y))\n",
"for (i,y) ∈ enumerate(Y)\n",
" errGS[i] = norm( y - ξ, Inf )\n",
"end\n",
"\n",
"errSOR = zeros(length(Z))\n",
"for (i,z) ∈ enumerate(Z)\n",
" errSOR[i] = norm( z - ξ, Inf )\n",
"end\n",
"\n",
"plot( errJ, label=\"Jacobi\", m=3,\n",
" xlabel=\"Iteration (k)\", yaxis=(:log10, \"Error\"), \n",
" legend=:bottomleft, color=:blue ) \n",
"\n",
"plot!( errGS, label=\"Gauss-Siedel\", m=3, color=:red ) \n",
"\n",
"plot!( errSOR, label=\"SOR ω=$ω\", m=3, color=:green ) \n",
"\n",
"\n",
"L = -tril(A, -1)\n",
"U = -triu(A, 1)\n",
"D = Diagonal(diag(A))\n",
"\n",
"ρJ = maximum( abs.( eigen(inv(D)*(L+U)).values ) )\n",
"ρGS = maximum( abs.( eigen(inv(D-L)*U).values ) )\n",
"ρSOR = maximum( abs.( eigen(inv(D-ω*L)*( (1-ω)D+ω*U )).values ) )\n",
"\n",
"plot!( 1:length(X), (errJ[1]/ρJ)ρJ.^(1:length(X)), \n",
" primary=false, linestyle=:dash, color=:blue )\n",
"plot!( 1:length(Y), (errGS[1]/ρGS)ρGS.^(1:length(Y)), \n",
" primary=false, linestyle=:dash, color=:red )\n",
"plot!( 1:length(Z), (errSOR[1]/ρSOR)ρSOR.^(1:length(Z)), \n",
" primary=false, linestyle=:dash, color=:green )"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "16c7c6d3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(0.42643661084234186, 0.08982305838804323, 0.17351995310029997)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(ρJ, ρGS, ρSOR)"
]
},
{
"cell_type": "markdown",
"id": "cb7a8fcf",
"metadata": {},
"source": [
":::\n",
"\n",
"## Steepest Descent\n",
"\n",
"::: {#exr-}\n",
"\n",
"Show that \n",
"\n",
"\\begin{align}\n",
" A = \\begin{pmatrix}\n",
" 5 & 1 \\\\\n",
" 1 & 3\n",
" \\end{pmatrix}\n",
"\\end{align} \n",
"\n",
"is symmetric and positive definite \n",
"\n",
":::\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function gradientDescent(A,b,x0; Niter=100, 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)<10-8)\n",
" break;\n",
" end\n",
" # step size \n",
" α = dot(r,r)/dot(r,A*r)\n",
"\n",
" x1 = x0 - α*Dg(x0[1],x0[2]) \n",
" plot!(P, [x0[1],x1[1]], [x0[2],x1[2]], color=:white, lw=2)\n",
" scatter!(P, [x1[1]], [x1[2]], markersize=5, color=:white)\n",
" x0 = x1 \n",
" end\n",
" end\n",
"\n",
" return anim\n",
"end\n",
"\n",
"A = [5 1; 1 3]; b = [1; 3]; ξ = A \\ b; x0 = [-22.5;5];\n",
"gif( gradientDescent(A,b,x0), fps=1 )"
]
},
{
"cell_type": "markdown",
"id": "00497fbf",
"metadata": {},
"source": [
"## Conjugate gradient\n",
"\n",
"Mainly based on 7.6 @Burden. \n",
"\n",
"[I will update the notes here...]"
]
},
{
"cell_type": "markdown",
"id": "b94ee96d",
"metadata": {},
"source": [
":::{.callout-tip}\n",
"# TO-DO\n",
"\n",
"* Assignment 3: Due Wednesday 11:59 PM,\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",
"* Today: section 7.6 @Burden\n",
"\n",
"Next: other Kyrlov subspace methods\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
}