notes

uni notes
git clone git://popovic.xyz/notes.git
Log | Files | Refs

commit f548f0cca8d28d3cd03067fd168425e74e1b34a4
parent 17517f503a61c4cddf911958f88baa83c9ed35b3
Author: miksa <milutin@popovic.xyz>
Date:   Sat, 12 Mar 2022 14:51:44 +0100

sheet 2 done

Diffstat:
Mnum_ana/build/prb1.pdf | 0
Anum_ana/build/prb2.pdf | 0
Anum_ana/prb2.tex | 299+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mnum_ana/preamble.tex | 1-
Anum_ana/prog/.ipynb_checkpoints/Untitled-checkpoint.ipynb | 6++++++
Anum_ana/prog/prb2_p.ipynb | 165+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Anum_ana/prog/prb2_p.pdf | 0
Anum_ana/sheets/sheet_2.pdf | 0
8 files changed, 470 insertions(+), 1 deletion(-)

diff --git a/num_ana/build/prb1.pdf b/num_ana/build/prb1.pdf Binary files differ. diff --git a/num_ana/build/prb2.pdf b/num_ana/build/prb2.pdf Binary files differ. diff --git a/num_ana/prb2.tex b/num_ana/prb2.tex @@ -0,0 +1,299 @@ +\include{preamble.tex} + +\usepackage[final]{pdfpages} + +\begin{document} +\maketitle +\tableofcontents +\section{Sheet 2} +\subsection{Problem 1} +\subsubsection{} +We let $\rho(A)$ be the spectral radius of a matrix $A \in +\mathbb{R}^{n\times n}$. A matrix norm $ \|\cdot\|_{1}$ is consistent with the +vector norm $\|\cdot\|_{2}$ if +\begin{align} + \|Ax\|_{2} \le \|A\|_1\|x\|_2 +\end{align} +for all $x \in \mathbb{R}^n$ and all $A \in \mathbb{R}^{n\times n}$. Indeed +every matrix norm induced by a vector norm is consistent. To show this let +$\|\cdot\|_M$ be a matrix norm and $\|\cdot\|_v$ be a vector norm, defined as +\begin{align} + \|x\|_v = \|xv^T\|_M +\end{align} +for all $x \in \mathbb{R}^n$ and some $v \neq 0$, of $\mathbb{R}^{n \times +n}$ and $\mathbb{R}^{n}$ respectively. Then we have +\begin{align} + \|Ax\|_v = \|Axv^T\| \le \|A\|_M \|xv^T\|_M = \|A\|_M \|v\|_v \qed +\end{align} +Note that for $\mathbb{C}^{n \times n}$ and $\mathbb{C}^{n}$ use $v^* \neq 0$ the +conjugate transpose. +\subsubsection{} +Now we consider a splitting of $A = D - (L + U)$, were $D, L$ and $U$ are +defined as +\begin{align} + D &= \text{diag}\left(a_{11},\ldots,a_{nn}\right), \\ + \left(L \right)_{ij} &= + \begin{cases} + -\left( A \right)_{ij}\quad i > j\\ + 0 \quad i\leq 0 + \end{cases}, + \qquad + \left(U \right)_{ij} = + \begin{cases} + -\left( A \right)_{ij}\quad i < j\\ + 0 \quad i \ge 0 + \end{cases}, +\end{align} +Then the matrix of a single Jacobi iteration method is +\begin{align} + B_J = D^{-1}(L+U) +\end{align} +We can show that if $A$ is strictly diagonally dominant then +\begin{align} + \rho(B_J) \le \|B_J\|_\infty < 1. +\end{align} +If A is strictly diagonally dominant, this means that +\begin{align} + &\mid A_{ii}\mid > \sum_{j\neq i}^{n} \mid A_{ij} \mid \qquad \forall\ + i\in\{1, \ldots , n\} \\ + \Leftrightarrow &\sum_{j\neq i} \frac{ \mid A_{ij} \mid}{ \mid A_{ii} \mid} + < 1. +\end{align} +Now let $(\lambda, v)$ be an eigen-pair of $B_J$, then +\begin{align} + B_J v &= D^{-1}(L+U)v = \lambda v\\ + (L+U)v &= \lambda D v. +\end{align} +For a chosen $i$ this means +\begin{align} + \left| \lambda \right| \left| A_{ii} \right| \left| v_i \right| + &= + \left| + -\sum_{j>i} A_{ij}v_i - \sum_{j<i} A_{ij}v_i + \right|\\ + &\le \sum_{j>i} + \left|A_{ij} \right| \left| v_i \right| + \sum_{j<i} + \left|A_{ij} \right| \left| v_i \right|\\ + &= \sum_{j\neq i} \left| A_{ij} \right| \left|v_i\right|. +\end{align} +We can choose and $i$ such that $\left| v_i \right| \le \|v\|_\infty$, then +\begin{align} + \left| \lambda \right| \left| A_{ii} \right| \left| v_i \right| + &\le \sum_{j\neq i} \left| A_{ij} \right| \|v\|_\infty\\ + \Rightarrow + \left| \lambda \right| \left| A_{ii} \right| + &\le \sum_{j\neq i} \left| A_{ij} \right|\\ + \Rightarrow + \left| \lambda \right| + &\le \sum_{j\neq i}\frac{\left| A_{ij} \right|}{\left| A_{ii} \right|} < + 1. \qed +\end{align} +\subsubsection{} +Next we show that the Jacobi method converges for every initial guess +$x^0$ to the solution of the equation $Ax = b$, given that $A$ is +strictly diagonally dominant. So with any initial guess $x^0$ at the $k$-th +iteration we have +\begin{align} + Dx^{(k)} &= (L+U)x^{(k-1)} + b\\ + \Leftrightarrow x^{(k)} &= D^{-1}(L+U)x^{(k-1)}+D^{-1}B \\ + &= B_J x^{(k-1} + D^{-1}b +\end{align} +Now let $x$ be the exact solution, then the error at the $k$-th iteration is +\begin{align} + e^{(k)} &= x - x^{(k)} = B_J\left( x - x^{(k-1)} \right) = \ldots\\ + &= B_J^k e^{(0)} +\end{align} +Assume that $e^{(0)} \neq 0$, then we need $\lim_{n \to \infty}B_J^k = 0$. If +$A$ is \textbf{diagonally dominant} we have $\rho(B_J) < 1$ this means for an +eigen-pair $\left(\lambda, v \right) $ of $B_J$ we have +\begin{align} + \lim_{n \to \infty}B_J^k v = \lim_{n \to \infty}\lambda^k v \\ + \Rightarrow \lim_{n \to \infty}\lambda^k = 0, +\end{align} +for all $\lambda$ because $\rho(B_J) < 1$. \qed +\subsection{Problem 2} +Now consider a $A \in \mathbb{R}^{n \times n}$, +\begin{align} + A = \begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}. +\end{align} +Let $A = D - (L + U)$ like in the above problem. +The Gauss-Siedel method has the iteration matrix $B_G = (D - L)^{-1} U$ and +the Jacobi method has the iteration matrix $B_J = D^{-1}(L + U)$. +\subsubsection{} +We show that the spectral radii of $B_J$ and $B_G$ satisfy +\begin{align} + \rho (B_J) = \sqrt{\left| \rho(B_G) \right| }, +\end{align} +by directly calculating the eigenvalues of $B_J$ and $B_G$ respectively. +We start with $B_J$, +\begin{align} + \det(B_J - \lambda I) + &= \det + \begin{pmatrix} -\lambda & + -\frac{a_{12}}{a_{11}} \\ -\frac{a_{21}}{a_{22}} & -\lambda + \end{pmatrix}\\ + &= \lambda^2 - \frac{a_{12}a_{21}}{a_{11}a_{22}} = 0\\ + \Rightarrow \lambda^2 &= \frac{a_{12}a_{21}}{a_{11}a_{22}} +\end{align} +For $B_G$ we have +\begin{align} + \det(B_G - \lambda I) + &= \det + \begin{pmatrix} + -\lambda & -\frac{a_{12}}{a_{11}} \\ 0 & -\lambda - + \frac{a_{21}a_{12}}{a_{11}a_{22}}\\ + \end{pmatrix}\\ + &= -\lambda \left(-\lambda - \frac{a_{21}a_{12}}{a_{11}a_{22}}\right) - 0 + \\ + \Rightarrow \lambda_1 &= 0, \qquad \lambda_2 = - + \frac{a_{21}a_{12}}{a_{11}a_{22}}. +\end{align} +Which satisfies the above condition, remember +\begin{align} + \rho(A) = \max\{ \left| \lambda \right| : \text{$\lambda$ is eigenvalue + $A$}\}, +\end{align} +especially note the absolute value. + +\qed +\subsubsection{} +Indeed the error of the Gauss-Siedel iteration converges to $0$ if $\rho(B_G) +< 1$. Which is the case, because exactly then $\rho(B_G) = \rho(B_J)^2 < 1$. +Where we can also conclude that the Gauss-Siedel method converges twines as +fast as the Jacobi method for $2 \times 2$ matrices. +\subsection{Problem 3} +Let $Q \in \mathbb{R}^{n \times n}$ be the Poisson matrix, the matrix of +the finite difference method on a $n \times n$ grid, +\begin{align} + Q = + \begin{pmatrix} + 2 & -1 & & & \\ + -1& 2 & -1& & \\ + & \ddots & \ddots & \ddots & \\ + & & -1 & 2 & -1\\ + & & & -1 & 2 + \end{pmatrix} +\end{align} +\subsubsection{} +The eigenvalues of $Q$ lie in the interval $[0 ,4]$. To show this let +$(\lambda , v)$ be an eigen-pair of $Q$, they satisfy the equation +\begin{align} + Qv = \lambda v +\end{align} +At the $k$-th ($k \in \{1,\ldots,n\}$) step we have $v^{(0)} = 0$, $v^{(1)} = +1$ and $v^{(n+1)} = 0$ +\begin{align} + -v^{(k+1} + 2v^{(k)} - v^{(k+1)} &= \lambda v^{(k)}\\ + \Rightarrow v^{(k+1)} &= (2-\lambda) v^{(k)} - v^{(k-1)}, +\end{align} +which are the Chebyshev polynomials of the second kind, where $(2-\lambda_k)$ +satisfies +\begin{align} + (2-\lambda_k) &= 2\cdot \cos\left(\frac{k\pi}{n+1}\right)\\ + \Rightarrow \lambda_k &= 2\left( 1 - \cos\left( \frac{k\pi}{n+1} \right) + \right) \\ + &=4\cdot\sin^2\left( \frac{k\pi}{n+1} \right), +\end{align} +thereby we can conclude that $\lambda_k \in [0, 4] \;\; \forall k \in \{1, +\dots n\}$. \qed +\subsubsection{} +\subsubsection{} +In this section we write a Python script that returns the matrix $Q$ given +$n$ and for $b = (1, \ldots ,1)^T$ $n=20$ implements the Gauss-Siedel method +for to solve $Qx = b$ for $x$. +%\includepdf[pages=1, pagecommand={}, width=\textwidth]{./prog/prb2_p.pdf} +\begin{figure}[htpb] + \centering + \includegraphics[width=0.8\textwidth, clip, trim=0cm 5cm 0cm 10cm]{./prog/prb2_p.pdf} +\end{figure} +\subsection{Problem 4} +Now let $P_n \in \mathbb{R}^{n\times n}$ be the matrix +\begin{align} + P_n = + \begin{pmatrix} + 2 & -1 & & & -1 \\ + -1& 2 & -1& & \\ + & \ddots & \ddots & \ddots & \\ + & & -1 & 2 & -1\\ + -1 & & & -1 & 2 + \end{pmatrix} +\end{align} +\subsubsection{} +We can show that all the eigenvalues of $P_n$ are in $[0, 4]$ because $P_n$ +is the finite differenece/laplacian matrix for periodic boundary conditions +and can be diagonalized by a DFT. So let $\left( \lambda, v \right)$ be the +eigen-pair of $P_n$, which satisfy the equation +\begin{align} + P_n v = \lambda v +\end{align} +This she standard Possion with periodic boundary conditions, with the +eigenvector $v_j = \omega^{jk} = e^{2\pi i \frac{jk}{n}}$ for a $j \in +\{1,\ldots,n\}$. +\begin{align} + (P_n v)_j + &= 2\omega^{jk}- \omega^{(j-1)k} - \omega^{(j+1)k}\\ + &= \omega^{jk}(2 - \omega^{-k} - \omega^{k})\\ + &= \omega^{jk}(2 - 2\cos\left( \frac{2\pi k}{n} \right)\\ + &= 4\sin^2\left( \frac{2\pi k}{n} \right) \omega^{jk} = \lambda_k v^k_j, +\end{align} +thereby we can conclude that $\lambda_k \in [0, 4]$ forall $k$. +\subsubsection{} +Because $P_n$ is a real, symmetric, cercular matrix the orthogonal components +of the eigenvalues are also eigenvectors, i.e. $\text{Re}\left(v \right)$ and +$\text{Im}\left(v \right) $. We may conclude this by pure calculation. In the $j-th$ +component we have $k$ eigenvalues +\begin{align} + \left(P_n\text{Re}\left( v^k \right)\right) _j + &= 2\text{Re}\left( \omega^{jk} \right) -\text{Re}\left( \omega^{(j-1)k} + \right) -\text{Re}\left( \omega^{(j+1)k} \right)\\ + &= \omega^{jk} +\omega^{-jk} - \frac{1}{2}\omega^{(j-1)k} + -\frac{1}{2}\omega^{-(j-1)k} + -\frac{1}{2}\omega^{(j+1)k} -\frac{1}{2}\omega^{-(j+1)k}\\ + &= \left( \omega^{jk} + \omega^{-jk} \right) + -\frac{1}{2}\left( \omega^{jk}\left(\omega^{k} + \omega^{-k} \right) + +\omega^{-jk}\left(\omega^{k} + \omega^{-k} \right) \right)\\ + &= \frac{1}{2}\left( \omega^{jk} + \omega^{-jk} \right)\left( + 2-(\omega^{k} + \omega^{-k}\right) \\ + &= \text{Re}\left(\omega^{jk} \right) \left(2-2\cos\left( \frac{2\pi + k}{n}\right)\right)\\ + &= 4\sin^2\left( 2\pi \frac{k}{n} \right) \text{Re}\left( \omega^{jk} + \right) = \lambda_k\text{Re}(v^k_j). +\end{align} +\subsubsection{} +We define the quantity $m(n) = \min\{|\lambda|:\lambda\; \text{eigenvalue of +$P_n$}\}$. We can show that the quantity converges to 0 as $n$ goes to +infinity by calculating for a $k$ that minimises $\lambda_k$ which is for a +$k\neq$. +\begin{align} + \lim_{n \to \infty}m(n) + &= \lim_{n \to \infty}\min_{k\in\{1,\ldots,n\}}\{|\lambda_k(n)|\} = \lim_{n + \to \infty}4\sin^2\left(2\pi \frac{k}{n}\right)\\ + &= \lim_{n \to \infty}4\cdot\left(\frac{x^2}{n^{2}} + \frac{x^{4}}{n^{4}} + + O(\frac{1}{n^{6}})\right) = 0, +\end{align} +where $x = 2\pi k$. +\subsection{Problem 5} +Let $Q$ be like in Problem 3. And split $Q$ as +\begin{align} + Q = D-N, +\end{align} +where $D$ consists of diagonal entries of $Q$. For $p \in \mathbb{N}$ let $C_p$ be the +Neumann polynomial preconditioner , defined as +\begin{align} + C_p = D^{-1}\sum_{k=0}^{p} \left( ND^{-1} \right)^{k} +\end{align} +\subsubsection{} +\subsubsection{} +The following is a Phython script, that takes $n, p$ as an Input and returns +$C_p$ furthermore calculates the spectral condition number of the matrix +$C_pQ$ +\begin{figure}[htpb] + \centering + \includegraphics[page=2 ,width=\textwidth, clip=true, trim=0cm 7cm 0cm + 3cm]{./prog/prb2_p.pdf} + \includegraphics[page=3 ,width=0.8\textwidth, clip=true, trim=0cm 17cm 0cm + 2.5cm]{./prog/prb2_p.pdf} +\end{figure} +%\printbibliography +\end{document} + diff --git a/num_ana/preamble.tex b/num_ana/preamble.tex @@ -39,7 +39,6 @@ \usepackage[parfill]{parskip} \usepackage{lipsum} - \usepackage{tcolorbox} \tcbuselibrary{skins,breakable} diff --git a/num_ana/prog/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/num_ana/prog/.ipynb_checkpoints/Untitled-checkpoint.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/num_ana/prog/prb2_p.ipynb b/num_ana/prog/prb2_p.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "517aef32", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "85da4812", + "metadata": {}, + "source": [ + "# Sheet 2, Exercise 3" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "e14c738f", + "metadata": {}, + "outputs": [], + "source": [ + "def gauss_siedel(A, b, k):\n", + " n, m = Q.shape\n", + " D = np.reshape([Q[i][j] if i==j else 0 for i in range(n) for j in range(n)], (n ,n))\n", + " L = np.reshape([Q[i][j] if i>j else 0 for i in range(n) for j in range(n)], (n ,n))\n", + " U = np.reshape([Q[i][j] if i<j else 0 for i in range(n) for j in range(n)], (n ,n))\n", + "\n", + " x = np.random.rand(n)\n", + " for i in range(k):\n", + " x = np.linalg.inv(D)@(b - (L + U)@x)\n", + " return x\n", + "\n", + "def poisson_mat(n, m=None):\n", + " return 2 * np.eye(n, m) + (-1) * np.eye(n, m, k=1) + (-1) * np.eye(n, m, k=-1)\n", + "\n", + "# test\n", + "for n in range(5, 20):\n", + " Q = poisson_mat(n)\n", + " b = np.ones(n)\n", + " x = gauss_siedel(Q, b, k=1000)\n", + " np.testing.assert_allclose(Q@x, b, rtol=1e-5, err_msg=f'GS failed at dim - {n}')" + ] + }, + { + "cell_type": "markdown", + "id": "51428a2b", + "metadata": {}, + "source": [ + "# Sheet 2, Exercise 5" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "caef181e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\t31706.88589269506\n", + "2\t534.147900485917\n", + "3\t31706.885892666996\n", + "4\t890.0968016459952\n", + "5\t31706.885892699214\n", + "6\t1245.8213126008322\n", + "7\t31706.885892666185\n", + "8\t1601.2319940002324\n", + "9\t31706.88589270954\n", + "Max. and Min. Singular value are far apart from each other for uneaven p\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 504x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "def neumann_polynomial_preconditioner(n, p):\n", + " Q = poisson_mat(n)\n", + " D = np.reshape([Q[i][j] if i==j else 0 for i in range(n) for j in range(n)], (n ,n))\n", + " N = Q - D\n", + " C_p = np.zeros([n, n])\n", + " for k in range(p+1):\n", + " C_p += np.linalg.matrix_power(N @ np.linalg.inv(D), k)\n", + " return np.linalg.inv(D) @ C_p\n", + " \n", + " \n", + "n = 20\n", + "Q = poisson_mat(n)\n", + "P = np.arange(1, 10)\n", + "cond_2 = []\n", + "for p in P:\n", + " C_p = neumann_polynomial_preconditioner(n, p)\n", + " cond_2.append(np.linalg.cond(C_p @ Q, p=2))\n", + " print(p, cond_2[p-1], sep='\\t')\n", + " \n", + "plt.figure(figsize=[7, 4])\n", + "plt.scatter(P, cond_2)\n", + "print(\"Max. and Min. Singular value are far apart from each other for uneaven p\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73ce1ef6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "53064abd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26476d82", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.10.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/num_ana/prog/prb2_p.pdf b/num_ana/prog/prb2_p.pdf Binary files differ. diff --git a/num_ana/sheets/sheet_2.pdf b/num_ana/sheets/sheet_2.pdf Binary files differ.