{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": { "nbpresent": { "id": "c11f7b86-dba3-4e8d-afbf-bd147373e999" }, "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np;\n", "import matplotlib\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "9707fbb8-a773-42d6-982b-ee1f3c961f53" } }, "source": [ "$\\LaTeX \\text{ commands here}\n", "\\newcommand{\\R}{\\mathbb{R}}\n", "\\newcommand{\\im}{\\text{im}\\,}\n", "\\newcommand{\\norm}[1]{||#1||}\n", "\\newcommand{\\inner}[1]{\\langle #1 \\rangle}\n", "\\newcommand{\\span}{\\mathrm{span}}\n", "\\newcommand{\\proj}{\\mathrm{proj}}\n", "\\newcommand{\\OPT}{\\mathrm{OPT}}\n", "\\newcommand{\\grad}{\\nabla}\n", "\\newcommand{\\eps}{\\varepsilon}\n", "$" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "d47522cd-d9c5-4612-87a1-e2c1dfdb40d6" }, "slideshow": { "slide_type": "slide" } }, "source": [ "
\n", "\n", "**Georgia Tech, CS 4540**\n", "\n", "# L20: Solving Linear Systems\n", "\n", "*Thursday, November 7, 2019*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Linear Systems\n", "\n", "Given $A \\in \\R^{m \\times n}$ and $b \\in \\R^{m}$, want to compute $x \\in \\R^{n}$ such that $Ax = b$.\n", "\n", "* There are $m$ linear equations and $n$ unknowns\n", "* If $m > n$, the system is *overdetermined*\n", "* If $m < n$, the system is *underdetermined*\n", "* If $m = n$ and $A$ is invertible, we want $x = A^{-1} b$\n", "\n", "For now, we will focus on **square matrices** $A \\in \\R^{m \\times m}$, which we also assume to be invertible." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Numerical Methods\n", "\n", "You already know of a few algorithms for solving linear systems...\n", "\n", "* **Gradient Descent** on the quadratic $f(x) = \\frac{1}{2} x^T A x - b^T x$\n", " $$\n", " x_{t+1} = x_t - \\eta (\\nabla_{x_t} f) = x_t - \\eta (A x_t - b)\n", " $$\n", "* **Gaussian Elimination** from your intro linear algebra class\n", " * elementary row operations, reduced row-echelon form...\n", " * this method is *numerically unstable* without additional modifications\n", " * see Trefethen & Bau, *Numerical Linear Algebra* ยง20-21" ] }, { "cell_type": "markdown", "metadata": { "nbpresent": { "id": "68ff68eb-e4c1-4e9d-8e8b-52d509bb70c1" }, "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Simple Linear Systems\n", "\n", "
\n", "Part A: Solve the diagonal linear system below. How many operations are required? Assume all diagonal entries are nonzero.\n", " $$\n", " \\begin{bmatrix} \n", " a_{11} & & & \\\\\n", " & a_{22} & & \\\\\n", " & & \\ddots & \\\\\n", " & & & a_{mm}\n", " \\end{bmatrix}\n", " \\begin{bmatrix} x_1 \\\\ x_2 \\\\ \\vdots \\\\ x_m \\end{bmatrix}\n", " =\n", " \\begin{bmatrix} b_1 \\\\ b_2 \\\\ \\vdots \\\\ b_m \\end{bmatrix}\n", " $$\n", "
\n", "
\n", "Part B: Solve the upper-triangular linear system below. How many operations are required? Assume all diagonal entries are nonzero.\n", " $$\n", " \\begin{bmatrix} \n", " a_{11} & a_{12} & \\cdots & a_{1m} \\\\\n", " & a_{22} & \\cdots & a_{2m} \\\\\n", " & & \\ddots & \\vdots \\\\\n", " & & & a_{mm}\n", " \\end{bmatrix}\n", " \\begin{bmatrix} x_1 \\\\ x_2 \\\\ \\vdots \\\\ x_m \\end{bmatrix}\n", " =\n", " \\begin{bmatrix} b_1 \\\\ b_2 \\\\ \\vdots \\\\ b_m \\end{bmatrix}\n", " $$\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Solution\n", "\n", "**Part A:** Set $x_k = \\frac{b_k}{a_{kk}}$. Requires $O(m)$ operations.\n", "\n", "**Part B:** Use \"back substitution\", requiring $O(m^2)$ operations. Starting with $x_m = b_m / a_{mm}$, the next equation from the bottom gives\n", " $$\n", " a_{m-1,m-1} x_{m-1} + a_{m-1,m} x_m = b_{m-1} \\\\\n", " \\implies\n", " x_{m-1} = (b_{m-1} - a_{m-1,m} x_m) / a_{m-1,m-1}\n", " $$\n", "Continuing in this fashion, we find\n", " $$\n", " x_j = \\frac{1}{a_{jj}} \\left( b_j - \\sum_{k=j+1}^m x_k a_{jk} \\right)\n", " $$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Stationary Iterative Methods\n", "\n", "The idea is to approximate $A^{-1}$ by splitting $A = M - N$ into two parts,\n", "* $M \\in \\R^{m \\times m}$ which is nonsingular and computationally cheap to invert\n", "* $N \\in \\R^{m \\times m}$ which is harder to work with\n", "\n", "For example, splitting $A = D + L + U$ into the diagonal, strictly-upper-triangular, and strictly-lower-triangular parts respectively,\n", "\n", "* **Jacobi:** Choose $M = D$ and $N = -(U+L)$\n", "* **Gauss-Seidel:** Choose $M = D+L$ and $N = -U$\n", "* **Damped Jacobi:** Choose $M = \\frac{1}{\\omega} D$ for some $\\omega > 0$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Stationary Iterative Methods\n", "\n", "Let $x^* \\in \\R^m$ be the exact solution to $A x^* = b$. Then\n", " $$\n", " \\begin{align}\n", " Ax^* = (M-N)x^* &= b \\\\\n", " Mx^* &= Nx^* + b \\\\\n", " x^* &= M^{-1}(Nx^* + b)\n", " \\end{align}\n", " $$\n", " \n", "Therefore, $x^*$ is a fixed point of $\\Phi(x) = M^{-1}(Nx + b)$. We'll try to use **fixed point iteration** to approximate $x^*$:\n", "\n", "$$\n", "x_{n+1} = \\Phi(x_n) = M^{-1}(Nx + b)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Spectral Radius\n", "\n", "Want to solve: $Ax = b$. Fixed point iteration: split $A = M - N$, where $M$ is easy-to-invert, $N$ is aribtrary. The **fixed point iteration** tries to find approximate $x^*$ via update:\n", "$$\n", "x_{t+1} = \\Phi(x_t) = M^{-1}(Nx_t + b)\n", "$$\n", "\n", "Recall that the *spectral radius* of a matrix $M$ is $\\rho(M) := \\max\\{|\\lambda_1(M)|, \\ldots, |\\lambda_n(M)|\\}$.\n", "\n", "**(Part A)**: Show that if $\\rho(M^{-1} N) > 1$, then the fixed point scheme above diverges for some initial $x_0$. \n", "\n", "*Hint*: think of a good vector to start with...\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Solution\n", "\n", "Let $x_0 = v$ be an eigenvector for $M^{-1}N$ whose eigenvalue $\\lambda$'s absolute value is larger than 1. If we assume that $b = 0$, then fixed point iteration is going to generate the point $x_t = (M^{-1}N)^t x_0 = \\lambda^t x_0$. The former clearly diverges!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Spectral Radius\n", "\n", "Want to solve: $Ax = b$. Fixed point iteration: split $A = M - N$, where $M$ is easy-to-invert, $N$ is aribtrary. The **fixed point iteration** tries to find approximate $x^*$ via update:\n", "$$\n", "x_{t+1} = \\Phi(x_t) = M^{-1}(Nx_t + b)\n", "$$\n", "\n", "Recall that the *spectral radius* of a matrix $M$ is $\\rho(M) := \\max\\{|\\lambda_1(M)|, \\ldots, |\\lambda_n(M)|\\}$.\n", "\n", "**(Part B)**: Show that if $\\rho(M^{-1} N) < 1$, the fixed point scheme above converges to the solution $x$ for any initial $x_0$.\n", "\n", "*Hint*: Let's say $x^*$ satisfies the linear system, $Ax^* = b$. You want to look at how the error terms $\\text{err}_t := x_t - x^*$ evolve after each iteration. Can you show $\\|\\text{err}_t\\|$ is shrinking from round to round?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "#### Solution\n", "\n", "If you consider the error term $\\text{err}_t := x_t - x^*$, then it is easy to check that\n", "$$\\text{err}_{t+1} = (M^{-1}N) \\text{err}_t$$\n", "Now let us see what happens to the norm of $\\|\\text{err}_{t+1}\\|$:\n", "$$\\|\\text{err}_{t+1}\\| = \\|(M^{-1}N) \\text{err}_t\\| = \\|\\text{err}_t\\| \\|(M^{-1}N) \\frac{\\text{err}_t}{\\|\\text{err}_t\\|}\\| \\leq \\|\\text{err}_t\\| \\max_{\\|z\\| = 1} \\|M^{-1}N z\\|$$\n", "However, $\\max_{\\|z\\| = 1} \\|M^{-1}N z\\|$ is indeed the spectral radius $\\rho(M^{-1}N)$, hence we have shown that\n", "$$\n", "\\|\\text{err}_{t+1}\\| \\leq \\|\\text{err}_t\\| \\rho(M^{-1}N),\n", "$$\n", "which implies that the error term is always shrinking at a geometric rate!" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Problem: Diagonal Dominance\n", "\n", "A matrix $A \\in \\R^{m \\times m}$ is **strictly diagonally dominant** if within every row, the diagonal entry is larger in absolute value than than the sum of the absolute values of the other terms,\n", "\n", "$$\n", "|a_{ii}| > \\sum_{j \\neq i} |a_{ij}|\n", "$$\n", "\n", "
\n", "Problem: Prove that Jacobi's method converges for any strictly diagonally dominant matrix.\n", "
\n", "\n", "> *Hint:* Use the Gershgorin Circle Theorem, which states that every eigenvalue of $A$ lies within at least one of the discs $D(a_{ii}, R_i) \\subset \\mathbb{C}$ of radius $R_i=\\sum_{j\\neq i} |a_{ij}|$ centered at $a_{ii}$ in the complex plane." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Laplace Equation\n", "\n", "Solve the system $Au = 0$ where $A$ has the form:" ] }, { "cell_type": "code", "execution_count": 165, "metadata": {}, "outputs": [], "source": [ "def poisson_matrix(n):\n", " # tridiagonal matrix\n", " result = -2 * np.eye(n);\n", " result += np.diag(np.ones(n-1), -1);\n", " result += np.diag(np.ones(n-1), +1);\n", " return result;" ] }, { "cell_type": "code", "execution_count": 166, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-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.]])" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "poisson_matrix(5)" ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 5)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m5\u001b[0m\n\u001b[0;31m x = # FILL IN!!\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "def jacobi(A, b, x0, max_iter=100):\n", " x = np.copy(x0);\n", " \n", " for k in range(max_iter):\n", " x = # FILL IN!!\n", " \n", " return x;" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd8XOWZ8P3fpd7bqNmSZVUXuWBjYblQTDclmCQkgWQ3pPJsssm+2Q5vnjebJZtn2c2zm93ssoUkJLAkgUAKJsGAMRh3Ydm4NzXbkm31Ylldmvv9Y2ZAFpI18pQz5fp+PvPRzJlz5lzHPjPXucu5bzHGoJRSSrlEWB2AUkqpwKKJQSml1GU0MSillLqMJgallFKX0cSglFLqMpoYlFJKXUYTg1JKqctoYlBKKXUZTQxKKaUuE2V1AFcjMzPTFBYWWh2GUkoFlX379rUbY7KmWy8oE0NhYSHV1dVWh6GUUkFFRM64s55WJSmllLqMJgallFKX0cSglFLqMpoYlFJKXUYTg1JKqct4JTGIyNMi0ioiR6Z4X0TkByJSKyKHROTace89LCI1zsfD3ohHKaXU1fNWieGnwPorvH8XUOZ8PAL8J4CIZAB/A1QCK4G/EZF0L8WklFLqKnjlPgZjzDYRKbzCKhuAZ41jHtE9IpImIrOAdcBmY0wngIhsxpFgfuGNuAKdMYadtR1c6BkgJT6a1Pho5uckk54YY3VoKgQYY2i5OMTR8z3UtF6ifFYKq0tsREdqDbK6Mn/d4JYHNI573eRcNtXyDxGRR3CUNigoKPBNlH4yNDrGy++d54fb66lpvXTZe4kxkXz91jI+v7aQ2KhIiyJUwe61Ixd4/JVjnO8ZvGx5SlwUt5Xn8NV1pZRmJ1kUnQp0/koMMskyc4XlH15ozFPAUwAVFRWTrhMMGjv7+ezT79LQ3sfCWSn88yevYcXcdHoHR+nsG+bZ3Wd4YtMJnn/3LN+5fzE3lE1797pS7+sbGuXxV47xQnUji/NSeOTGYhbnpVKclcS+M11sOnKBzUdb2Hy0hX/79HLWzc+2OmQVgPyVGJqAOeNe5wPnncvXTVi+1U8x+V1Dex+f+eEeLg2N8pPPXce6+VmIXJ4bb5yXxTun2nj8laN8/id7+eHDFdysX17lBtdFx+mOPr66roRv3DaPmKgPqo1uL8/h9vIcmrr6+dIz1Xzhp3v51r3lPLym8EPnoQpv/qps3Ah81tk7aRXQY4y5ALwO3CEi6c5G5zucy0JOTUsvn/zv3QyO2vnFI6u4eUH2lF/Gm+Zl8ds/XsuCWcl85bl97DvT6edoVbC5NDTKl56ppuPSEM9/eRV/tX7BZUlhvPz0BH71lTXcsiCHb79yjB9sqfVztCrQeau76i+A3cB8EWkSkS+KyB+JyB85V3kVqAdqgR8CXwVwNjp/B9jrfDzuaogOJe2Xhnjoh1UAvPDIKhbNTp12m+S4aH76+ZXMSo3n8z/Zy4nmi74OUwUpu93wjecPUNt2iSc/cy2VxbZpt0mMjeKpP1zBx5bn8S9bTrG9ps0PkapgIY6OQsGloqLCBMvoqsYYHvmffbxzso2NX1/LgtyUGW3f2NnPA/+1i0gRXv/TG0mOi/ZRpCpY/eNrJ/iPrXV8+yPlfG5t0Yy2HRgeY8OTO+i4NMyr/88N5KTE+ShKFQhEZJ8xpmK69bTfmo/9av85Nh9r4S/vnD/jpAAwJyOB//qDFVy4OMj/ff2kDyJUweytEy38x9Y6Hlo5h4fXFM54+/iYSJ789LX0D4/xJ794j9Exu/eDVEFHE4MPNXX187cbj7KyKIMvXD+zK7nxlhek8/DqQp7dc4Z9Z7q8GKEKZoMjY3x74zFKs5P42/sWX3UDcllOMn93/2KqGjr5j611Xo5SBSNNDD5ijOGvXjqE3Rj+6RPXEBnhWa+Pv7hzPrkpcfy/vz7M8Khe1Sn40fZ6znb28+2PLJqyodldH1+Rzz1LZvEfW2tpnnDvgwo/mhh8ZPOxFnbVdfDY3QuZk5Hg8eclxUbxnQ2LOdnSy1Pb9Kou3J3rHuDf365l/aJcri/L9MpnPnrXAux2+OfNWmUZ7jQx+IDdbvjnzacozkzkwevmTL+Bm24rz+GeJbP4t7dqab2oV3Xh7P/8/jjGwDfvWei1z5yTkcBnV8/lxX1NHL+gveDCmSYGH3jl0HlONPfyjdvnEeXlcWn+av18Ru2Gp7bVe/VzVfDYU9/B7w9f4CvrSrxSGh3va7eUkhIXzd9vOuHVz1XBRRODl42M2fn+5lMsyE3m3iWzvP75c22JbFg2m+eqztB+acjrn68C37+/VUtWcix/dFOJ1z87LSGGr99SyrZTbWw7pfc2hCtNDF72q31NnO7o58/vmE+Ehw3OU/njm0sZGrXzo+0NPvl8FbgON/Wwo7adL6wtIi7aN4Ms/uHquczJiOefNp8iGO9zUp7TxOBFQ6Nj/GBLDdfMSeO2hb4b36gkK4mPLJ3Ns7tP09U37LP9qMDzX9vqSI6N4jOrfDfCcGxUJF++oZiDjd3sP6vdo8ORJgYv2nS4mfM9g3zjtjKfD0r2tVtK6R8e4+mdWmoIF2c6+th0+AKfXlVAio/vgH9gRT6p8dH8eIeeX+FIE4MXPbP7NMWZidzkh6Gy5+Ukc/eSXH668zS9gyM+35+y3lPb6omKiOCLMxz24mokxETx0MoCXjvSTGNnv8/3pwKLJgYvOdTUzXtnu/nD1XN91rYw0ZdvKKZ3aJSXD5z3y/6Uddp6h3hxXxMfX5FHtp/GM3p4zVwiRPjprtN+2Z8KHJoYvOTZ3WdIiInk4yvy/bbPZXPSKJ+Vws+qzmojYYh7bs8ZRsbsfPmGYr/tc1ZqPPcsncULexu1VBpmNDF4QWffMBsPnudj1+b5vO53PBHhM6sKOH7hIgcau/22X+VfY3bDi9WNXF+aSXGWf6fj/OL1RVwaGuWFvY3Tr6xChiYGL3hhbyPDo3YeXl3o931vWJZHYkwkP6s66/d9K//YUdvO+Z5BHrzO/3OdL81P47rCdJ7bc0ZLpWHEWxP1rBeRkyJSKyKPTvL+90XkgPNxSkS6x703Nu69jd6Ix5/G7Ibn9pxhTYmNspxkv+8/KTaKDcvzeOXgeXr6tbgfil7Ye5b0hGhuK7dmitdPXVfA6Y5+Hdk3jHicGEQkEngSuAsoBx4SkfLx6xhj/tQYs8wYswz4N+DX494ecL1njLnP03j8bVtNG+e6B/jDVXMti+HTKwsYGrXzq/1NlsWgfKPj0hCbj7XwsWvziY3yzQ1t07lrcS4JMZG8tE/Pr3DhjRLDSqDWGFNvjBkGngc2XGH9h4BfeGG/AeE3+8+RlhDNrQtzLIthcV4q18xJ4+fvaiN0qPnNe+cYGTN8youDMc5UYmwUdy+Zxe8OXWBgeMyyOJT/eCMx5AHjW6aanMs+RETmAkXAW+MWx4lItYjsEZH7vRCP31waGuWNY83cu3SWx+Phe+ozKwuobb3E/rPaCB0qjDG8sLeR5QVpzLOgmnK8B1bkc2lolNePNlsah/IPb/yaTdZpf6rL1geBl4wx4y87CpxzkH4a+BcRmXRkMBF5xJlAqtvaAmNwr9eONDM4YuejyyfNg35115JcYqIieOWg3tMQKvaf7aam9ZJXh26/WisLM8hPj9fqyjDhjcTQBIw/c/OBqX6dHmRCNZIx5rzzbz2wFVg+2YbGmKeMMRXGmIqsLN/fWeyO3753joKMBK4tSLc6FJLjorl1QTa/O3Re5+0NES/tayIhJpJ7ls62OhQiIoSPX5vv6CHVPWB1OMrHvJEY9gJlIlIkIjE4fvw/1LtIROYD6cDuccvSRSTW+TwTWAsc80JMPtfcM8jOunbuX57n83GR3HXfNbNpvzTM7voOq0NRHhoZs/PakQvctjCHpNgoq8MB4OPX5mOMo91DhTaPE4MxZhT4GvA6cBz4pTHmqIg8LiLjexk9BDxvLm8dXQhUi8hB4G3gCWNMUCSGjQfPYQwBUY3kcvOCbJJjo9ioQ2QEvd11HXT1j3DPUu/P6XG1CmwJVBZl8Kv9TdrJIcR55VLEGPMq8OqEZd+a8Prbk2y3C1jijRj87df7z7FsThpFmYlWh/K+uOhI7liUy2tHmvnO/Yt9Nl6/8r3fHTpPcmwUN80LjGpTl/uWzeabvznCyZZeFuSmWB2O8hG98/kqnGi+yInmXj52beCUFlw2LJtN79AoW08GRgO9mrnhUTuvHWnm9vKcgEvud5TnEiHw6mHtnRTKNDFchU2HmxGBu30wdaen1pTYyEyKYeNBrQcOVjtr27k4OMq91wTe+ZWVHMvKogw2Hb5gdSjKhzQxXIXXjzZzXWEGmUmxVofyIVGREdyzZBZbjrfqiJhB6pVD50mJi+L60sCqRnK5e8ksalovUdPSa3Uoykc0McxQQ3sfJ5p7Wb8o1+pQpvSRa2YzNGrnba1OCjqDI2NsPtrCnYtyLb9pcirrF+UiWp0U0gLzzAtgrjs/71wcuIlheUE6mUmxvKF3qQad7TXt9A6Ncu811t+7MJXslDium5vBpiNanRSqNDHM0GtHmlman0peWrzVoUwpMkK4vTybrSfbGBrVsW2CyauHL5CWEM2aEpvVoVzRXUtyOdHcS13bJatDUT6giWEGLvQMcKCxmzsDuBrJ5fbyHC4NjbKnvtPqUJSbRsfsvHWilVsX5BAdGdhfzfXOEvNrR7RUGooC++wLMG8cbQE++FIEsjUlmSTERGp1UhCpPtNFz8AIt1s078JMzEqN59qCNH5/SKuTQpEmhhl47UgzZdlJlPh5esWrERcdybr5WWw+1oLdrnepBoM3j7UQExnBDWWB2RtpovWLczl24SLndOykkKOJwU2dfcNUNXQERWnB5Y7yXFp7hzjYpENxBzpjDJuPt7Cm1EZigIyNNJ1bFjjmIHnrRKvFkShv08Tgpi3HW7AbgqJ9weXm+dlERQhvHGuxOhQ1jbq2S5zp6Oc2Cyd8mqmSrEQKbQm8dVzPr1CjicFNb59sJScllkWzg2d8mNSEaCqLM7SdIQhsPua46r51YeC3L7iICLcsyGFnXQf9w6NWh6O8SBODG0bG7Gw/1c7N87MDZohtd91RnktdW592Kwxwbx5vYUleKrNSA7cb9GRuXZjN8KidnbU61Hso0cTghurTXfQOjXLzguC5mnO5rdxRNfG21gMHrPZLQ+w/2xVU1Ugu1xVmkBQbxVsntDoplGhicMPbJ1uJjhTWlmZaHcqM5aXFU5adpKOtBrC3TrRiTHBVI7nEREVw47xMthxv1TkaQogmBje8daKVyiJbwMykNVPr5mfxbkMnfUNaDxyIthxvYVZqXFC1X413y4IcWnuHOHLuotWhKC/xSmIQkfUiclJEakXk0Une/5yItInIAefjS+Pee1hEapyPh70Rjzc1dvZT23opKKuRXNbNz2Z4zM6uOq0HDjQjY476+XVB2H7lsm5+FiKwRauTQobHiUFEIoEngbuAcuAhESmfZNUXjDHLnI8fObfNAP4GqARWAn8jIumexuRNb5901M3fPD84bjqaTEVhOokxkWw9qe0MgWb/mS4uDY0G3ExtM5GZFMuyOWl6P0MI8UaJYSVQa4ypN8YMA88DG9zc9k5gszGm0xjTBWwG1nshJq9560QrhbYEioPgbuepxEZFsqY0k60n27QeOMC8c6qNqAhhTWlgD5o3nVsXZHOoqYe23iGrQ1Fe4I3EkAc0jnvd5Fw20cdF5JCIvCQic2a4rSUGhsfYXdcR1NVILuvmZ3Gue0C7rQaYd061ce3cdFLioq0OxSM3Oks8O2q1k0Mo8EZimKxidOJl6StAoTFmKfAm8MwMtnWsKPKIiFSLSHVbm39Ovt317QyN2rl5figkBscxaO+kwNHaO8jR8xeDuhrJZfHsVNITotl+qt3qUJQXeCMxNAFzxr3OB86PX8EY02GMcZUxfwiscHfbcZ/xlDGmwhhTkZXlny/StlPtxEVHsLIowy/78yXtthp4XD+ioZAYIiKE68uy2FbTroM2hgBvJIa9QJmIFIlIDPAgsHH8CiIyflbz+4DjzuevA3eISLqz0fkO57KAsK2mjcoiG3HRkVaH4hXabTWwvHOqjcykGMpnBWc31YluLMuk/dIQJ5p1Luhg53FiMMaMAl/D8YN+HPilMeaoiDwuIvc5V/sTETkqIgeBPwE+59y2E/gOjuSyF3jcucxy57oHqG/r44ay4LupbSo3a7fVgDFmN2yvaePGsiwiIoKzm+pErnaGbTVaKg12XrljyxjzKvDqhGXfGvf8MeCxKbZ9GnjaG3F40w7nyR0sY+O7Y0VhOvHRkeysbef28uAbfiGUHDnXQ1f/CDcFcTfoiXJS4pifk8z2mjb+6KYSq8NRHtA7n6ewvaad7ORY5uUEbzfViWKjIllZlMF2vaKz3Dun2hCB64NwmJUruXFeJnsbunS01SCniWESdrthZ20715dlBu3dqFO5oSyTurY+LvTorFtW2naqjSV5qdiSYq0OxatunJfF8JidKp1rPKhpYpjE0fMX6eofCan2BRfXQIA7arRboVV6B0d4r7E75EoL4BhtNTYqQtsZgpwmhklsd96kE4yjqU5nQW4ymUkx7KjVxGCVdxs6GbObkEwMcdGRVBbb2HZKE0Mw08Qwie2n2lmQm0x2cpzVoXidiGP48J217To8hkV21nYQGxXBtXMDalgwr7nRWV15vlurK4OVJoYJ+odH2Xem6/2ud6FobWkm7ZeGtb+5RXbWtnNdYUbI3B8zkaukrd2ig5cmhgmqGjoZHrOHZDHfxXVsO7U6ye9aewc52dIbktWULvNzkrElxrBLz6+gpYlhgp017cREhcYwGFOZnRZPcVYi27UB2u92O6+iQ/nCIyJCWF1iY2edVlcGK00ME+yq62BFQXrIFvNdbijN5N2GToZGx6wOJazsqGknNT6a8iCdrc1da0szabk4RF1bn9WhqKugiWGcrr5hjl24yJqS4B4b3x1rSzMZGBlj/5luq0MJG8Y47o9ZU2IjMkSGwZiK6zu0u05LpcFIE8M4e+odxfxgnzTFHaucP07azuA/pzv6Od8zGNLtCy4FGQnkpcWzs1YboIORJoZxdtV1kBgTydL8NKtD8bmUuGgW56Wyu16/uP7iunckHBKDo1u0jd31HYzpMNxBRxPDOLvq2llZlEF0ZHj8s6wpsXGwsVuH4faTnTXt5KXFU2hLsDoUv1hbmknPwAjHzl+0OhQ1Q+HxC+iGlouD1LX1saYk9K/mXFYX2xi1G6rPdFkdSsiz2w17GjpYU2ILufG3prK62FElu1PbGYKOJgYnVzfC1WHQ8OxSUZhOdKSwS7+4Pne8+SLd/SNhdX5lp8RRlp2k7VhBSBOD085aZzfCEJlNyx0JMVEsm5PGHr1D1efC8cIDHNVJe093MjxqtzoUNQNeSQwisl5ETopIrYg8Osn7fyYix0TkkIhsEZG5494bE5EDzsfGidv6gzGGXXUdrC62hcxsWu5aXZLJ4XM9XBwcsTqUkLanvoNCWwKzUuOtDsWvVpfYGByxc6BRu0UHE48Tg4hEAk8CdwHlwEMiUj5htfeACmPMUuAl4B/HvTdgjFnmfNyHBRo7BzjXPRAW3VQnWl1sw27gXR0/32fG7Iaqhs6wKy0AVBZlIPJBV3AVHLxRYlgJ1Bpj6o0xw8DzwIbxKxhj3jbG9Dtf7gHyvbBfr3HVsYfDjW0TLS9IIyYqQrut+tCx8xfpHRxlVXH4nV9pCTEszE3RxBBkvJEY8oDGca+bnMum8kVg07jXcSJSLSJ7ROT+qTYSkUec61W3tXl3rPfd9R1kJcdSkhU603i6Ky46koq56e/XgSvv213vuPBYHYaJARzVSfvOdOnwK0HEG4lhskr5Se9oEZE/ACqA741bXGCMqQA+DfyLiEw6i7gx5iljTIUxpiIry3tDYhtj2FPfwari8OlGONHqYhvHLlykq2/Y6lBC0u66DoqzEslOCb35PdyxqtjG0KidA2e1nSFYeCMxNAFzxr3OB85PXElEbgO+CdxnjBlyLTfGnHf+rQe2Asu9EJPbTnf003JxiFXFoTua6nRcbStVDVpq8LbRMTt7T3eFbWkBYGWhq51B27GChTcSw16gTESKRCQGeBC4rHeRiCwH/htHUmgdtzxdRGKdzzOBtcAxL8TkNlfdZzjW/7oszU8jISZSq5N84Mj5i1waGg3LhmeX1IRoFs1Oeb9KTQU+jxODMWYU+BrwOnAc+KUx5qiIPC4irl5G3wOSgBcndEtdCFSLyEHgbeAJY4zfE0NWcizFmYn+3G1AiY6MYMXcdKoa9IrO21zJNpwvPABWFdnYf7abwRFtZwgGUd74EGPMq8CrE5Z9a9zz26bYbhewxBsxXA1jDFX1nWHdvuCyqtjG914/SWffMBmJMVaHEzJ213cwLyeJzKRYq0Ox1OoSGz/a0cCBxu6wT5LBIKzvfD7T0U/zxcGwbl9wcf0bvKulBq8ZGbNTfbpTfwiBisIMIgStrgwSYZ0YtH3hA0vy0oiPjtT+5l50+FwP/cNjen4BqfHRLJqdqudXkAj7xBDu7QsuMVGOdgb94npPlbMXTijPHz4Tq0tsvNeo7QzBIGwTg+P+BW1fGG9VcQYnW3rp7tf7GbyhqqGD0mxtX3BZVZzB8Kid/Wd1mPdAF7aJQdsXPqyy2IYxaO8kLxgds1N9ukvPr3Fc7QxVej9DwAvbxKDtCx+2ND+VuOgI/eJ6wVHn/QuVRXp+uaTERVM+O0VvpAwCYZ0YMpO0fWG82KhIri3QdgZvcP34VWqJ4TKVRTbeO9ut4yYFuLBMDMY4hkGuLM7Q9oUJVhXbON58kZ5+nZ/BE1X1nRRnJpKdHJ7jI02lsiiDoVE7Bxt7rA5FXUFYJobGzgEu9AyySnuLfMgqZzvDu6e1OulqjdkN757u1NLCJFY652eo0lJpQAvLxLDn/WK+1v9OdM2cVGKjIrQ6yQPHL4Tv/AvTSUuIYX5OsnZwCHBhmRiq6jvJSIyhLDv85l+YTmxUJMsL0rSB0AOupKoNz5NbVWyj+ozOAx3IwjMxNHQ4hwLW9oXJVBbZOHb+os4DfZWqGjqZa0sgN1XbFyazqjiDwRE7h8/p/AyBKuwSw7nuAZq6BrT+9woqizOwG9h3Wm9Emim73fBuQyeV2n41pZXOkpTOzxC4wi4xvOusItFhCqa2fE460ZHyfluMct/Jll56Bka0GukKMhJjmJeTpO0MASzsEkNVfScpcVEsyE2xOpSAFR8TyTX5aXqj21Vw9bbREumVVRbZ2He6k9ExbWcIRF5JDCKyXkROikitiDw6yfuxIvKC8/0qESkc995jzuUnReROb8RzJVUNnawsyiAyQtsXrqSyOIPD53roGxq1OpSgUtXQSV5aPPnpCVaHEtAqizPoGx7jyPmLVoeiJuFxYhCRSOBJ4C6gHHhIRMonrPZFoMsYUwp8H/gH57blOKYCXQSsB/7D+Xk+0XpxkIb2Pi3mu6GyyMaY3bDvjLYzuMsYZ/uClham5foO6v0MgckbJYaVQK0xpt4YMww8D2yYsM4G4Bnn85eAW8XRJWgD8LwxZsgY0wDUOj/PJ/Y46zT1izu9FXPTiYwQ7bY6A3Vtl+joG9aGZzdkJcdSnJWo7QwByhuJIQ9oHPe6ybls0nWcc0T3ADY3t/WaqvoOkmKjKJ+l7QvTSYyNYkleqs7oNgOuXjZaInVPZVEGexs6GbMbq0MJCoeauvnKc/s429Hv8315IzFMVlk/8X96qnXc2dbxASKPiEi1iFS3tbXNMMQP3DQvi6jIsGtzvyqVRRkcbOzRiVXcVNXQSU5KLHNt2r7gjsoiG71Doxy/oO0M7the086mI80kxUX5fF/e+IVsAuaMe50PnJ9qHRGJAlKBTje3BcAY85QxpsIYU5GVlXVVgX73o0t48jPXXtW24aiyOIPhMZ1YxR3GGKrqO6gs0omf3OWq0tXqJPdUNXQyLyeJjMQYn+/LG4lhL1AmIkUiEoOjMXnjhHU2Ag87nz8AvGWMMc7lDzp7LRUBZcC7XohJeYFOrOK+Mx39tPYO6f0xMzArNZ6CjARtgHbD6Jidfac7/VZN6XGZxBgzKiJfA14HIoGnjTFHReRxoNoYsxH4MfA/IlKLo6TwoHPboyLyS+AYMAr8sTFG6y0ChE6s4j7Xv5HO2DYzlUUZbD7egt1uiNAu5FM6cv4ifcNjfus445XKKmPMq8CrE5Z9a9zzQeATU2z7XeC73ohDeV9lkY3n9pxhaHSM2Cif9SQOelX1nWQmxVCSpQMzzsTKogxe3NfEqdZeven0ClylKn+VSLUVVl2RTqziHteNk9q+MDOuocm199uVVTV0Upzlv4mfNDGoK9KJVabX2NnPue4BVhZqNdJM5afHMzs1TtuxrmDMbth72r8DM2piUFekE6tMz/Vvs6pE71+YKRGhsthGVUMHjv4oaiLXxE/+vD9GE4Oa1qpiG/vOdDGiA55Nqqq+g7SEaOZlJ1sdSlCqLMqg/dIwdW19VocSkKosGLFBE4OaVmVRBgMjYxxq0naGyexxTvykvWqujqtBVXu/Ta6qvoOCjARmpcb7bZ+aGNS09Is7tfPdAzR2Duj8zh4oykwkOzlW2xkmYbcb3vVz+wJoYlBusCXFUpadpF/cSbiSpQ7MePVc7Qx76rWdYaKa1kt0949Q6ecLD00Myi2VxRlU68QqH6ITP3nHquIMWnuHOO2HAeKCyfsXHlpiUIGosshG3/AYR3Vilcvsqe9gZZFNJ37ykKsqbo92i77MnvoO8tLimZPh34EZNTEot3ww4Jl+cV1aLg5yuqNfh8HwguLMRDKTYvV+mXGMMeyp77Sk/UoTg3JLdnIcxZmJ2s4wjuvqVudf8JyIsKo4gz31ndrO4FTTeonOvmFLLjw0MSi3VRbbeFcnVnnfnvpOkmOjKJ+t7QveUFlso/niIGc7tZ0BPrjw0BKDCmirSxwTqxzTdgbAUa12XVGGti94yWrnlbG2MzhY1b4AmhjUDKxy9ozYXd9ucSTWa+0dpL6tT+d39qKSrCQyk2K0upIP2hes6gatiUG5LTsljuKsxPfnNg5nrn9EOP6+AAAbOklEQVSD1To+kteICJVFej8DjG9fsOb80sSgZmS1s50h3O9n2F3X4WhfmKXtC95UWZzB+Z5BmroGrA7FUq7qtNXBmBhEJENENotIjfNv+iTrLBOR3SJyVEQOicinxr33UxFpEJEDzscyT+JRvreq2MalodGwv5/Bcf9CBlGRem3lTa4r5N1h3s5QVd9JXlo8+en+Gx9pPE/P6keBLcaYMmCL8/VE/cBnjTGLgPXAv4hI2rj3/9IYs8z5OOBhPMrHKrWBkOaeQRra+7QayQfKspOwJcawpy58zy9H+0IHlcXWTfzkaWLYADzjfP4McP/EFYwxp4wxNc7n54FWIMvD/SqLZCfHUZqdFNZXdK7Gdx04z/tEhFUlNnaHcTtDbeslOixsXwDPE0OOMeYCgPNv9pVWFpGVQAxQN27xd51VTN8XkVgP41F+sKo4g71h3M6wp66T1PhobV/wkdXFNi70DIbtuEm7LW5fADcSg4i8KSJHJnlsmMmORGQW8D/A540xrl+Ux4AFwHVABvDXV9j+ERGpFpHqtra2mexaedmqYse4SUfCtJ1ht7N9Qedf8A1XFd3uMK1O2l3XYWn7AriRGIwxtxljFk/yeBlocf7gu374Wyf7DBFJAX4P/G9jzJ5xn33BOAwBPwFWXiGOp4wxFcaYiqwsrYmy0vsNhGH4xT3XPcDZzn5Lr+ZCXXFmIjkpseyqC7/7Zex2w+76DtaU2CxrXwDPq5I2Ag87nz8MvDxxBRGJAX4DPGuMeXHCe66kIjjaJ454GI/yg0zn/Azh2M7gSoba8Ow7IsLqYltYjpt0vPki3f0jrCm19vzyNDE8AdwuIjXA7c7XiEiFiPzIuc4ngRuBz03SLfVnInIYOAxkAn/nYTzKT1aX2Njb0MnwaHi1M+yu6yA9IZr5OTq/sy+tKcmk/dIQta2XrA7Fr96/8CjOtDSOKE82NsZ0ALdOsrwa+JLz+XPAc1Nsf4sn+1fWWVOSybO7z3CwqZvrCsNjWAhXN8JVxTZtX/AxV4lsV10HZWGUhHfVdVCclUhuapylcejdOeqqrC62IQI7a8OnHrixc4Bz3Tq/sz/MyUggLy0+rNqxRsbsVDnbF6ymiUFdldSEaBbPTmVXbfh8cV2NoYHwxQ0Ha0ps7GnowB4mw7wfauqhb3iMNSXWViOBJgblgTWlNt5r7KJ/eNTqUPxiR2072cmxlGYnWR1KWFhdYqO7f4TjzeHRLXp3XeDcOKmJQV21tSWZjIwZ3m0I/dFW7XbDrroOri/NtLQbYTgJt/sZdtV1sHBWChmJMVaHoolBXb3rCjOIiYxgVxh8cU8099LZN8yaUuuL+eFiVmo8xZmJ7AiDdqzBkTGqz3QFTDWlJgZ11eJjIllekBYWNyK5GtnXWty/PNxcX5ZJVX3od4vef7aL4VG7JgYVGtaUZHL0/EW6+4etDsWndta1U5KVyKxU64YpCEdrSzMZGBlj/9kuq0PxqV21HURGCCsDZEZATQzKI2tLbRgT2vXAw6N2quo7WavVSH63usRGRBh0i95e287S/FSS46KtDgXQxKA8dM2cNBJjItkZwtVJBxq7GRgZ08RggZS4aK6Zk8b2mtA9v7r7hznc1M0NZYEzBpwmBuWR6MgIVhZlsDOE72fYUdtOhARGN8JwdENpJoeauukZGLE6FJ/YVdeB3cANZYFz4aGJQXns+rIsGtr7aOwMzfHzd9a2syQ/jdT4wCjmh5u1pZnYQ7i6cntNO0mxUSybkzb9yn6iiUF57KZ5jiudUCzu9w6OcKCxm+u1N5JllhekkxATGZLtDMYYtte0sarYRnQAzR8eOJGooFWSlcSs1Di2nQq9CZSq6jsZsxvWBsAwBeEqJiqCVcW2kEwMZzr6aeoa4MZ5gXV+aWJQHhMRbizLYmdde8hN97mtpo346EhWFKZbHUpYW1uaSX17H+e6B6wOxau2O5Pd9QHWsUETg/KKG+dl0Ts4ysGmbqtD8ap3TrWxpsRGbFSk1aGENVfD7M4Qq67cfqqNvLR4ijITrQ7lMpoYlFesLXX0N992KnS+uKfb+zjT0c9N8wOnG2G4KstOIjs5lndqQqe6cnTMzu66Dm6cF3jjb3mUGEQkQ0Q2i0iN8++k5W0RGRs3e9vGccuLRKTKuf0LzmlAVRBKS4hhaX4a20Loi+s6lpvmaWKwmohw07wstp9qC5nqyoNN3fQOjXJ9aeCdX56WGB4FthhjyoAtzteTGTDGLHM+7hu3/B+A7zu37wK+6GE8ykI3zsviYGM3Pf2h0d/8nZNtFNoSmGsLrGJ+uFo3P5uLg6McaAyN6srtNe2IBOb4W54mhg3AM87nzwD3u7uhOMpOtwAvXc32KvDcWObobx4Kd0EPjY6xq65DSwsB5PqyTCIjhK0nQ6NUuvVkG0vz00hLCLyKEk8TQ44x5gKA82/2FOvFiUi1iOwREdePvw3oNsa4ZnlpAvI8jEdZaNmcNJJjo0Ki22r16S4GRsa0fSGApMZHc21BGltPtVodisc6Lg1xsKmbmwP0/IqabgUReRPIneStb85gPwXGmPMiUgy8JSKHgcmmZZpyDj8ReQR4BKCgoGAGu1b+EhUZwZpSG9tOtWGMCbgGtZl451QbMZEROgxGgFk3P5vvvX6S1t5BspPjrA7nqr1zqg1j4JYFU11LW2vaEoMx5jZjzOJJHi8DLSIyC8D5d9JUbow57/xbD2wFlgPtQJqIuJJTPnD+CnE8ZYypMMZUZGUFZpZVcPP8bM73DHKypdfqUDyy7VQb1xWlkxAz7bWT8qN1zivsd4K8OumtE61kJsWyeHaq1aFMytOqpI3Aw87nDwMvT1xBRNJFJNb5PBNYCxwzxhjgbeCBK22vgsvNziugLceDt7jf3DPIieZebV8IQOWzUshOjmVrEFdXjo7Z2XaqjXXzs4iICMxStaeJ4QngdhGpAW53vkZEKkTkR851FgLVInIQRyJ4whhzzPneXwN/JiK1ONocfuxhPMpiOSlxLMlL5a0TwZsYtp50xH6jJoaAEwrdVvef7ebi4GjAViOBG20MV2KM6QBunWR5NfAl5/NdwJIptq8HVnoSgwo8tyzI5gdv1dDZNxwQE5vP1JvHW8lLi2d+TrLVoahJrJufzYv7mjjQ2E1FYWDMeDYTb51oJSpCuD6AhtmeSO98Vl5368JsjPngyjuYDAyPsaO2jdvLc4K68TyUubqtvh2E5xc4vhcVhemkBMhsbZPRxKC8bvHsVLKTY4OynWFnbTuDI3ZuW5hjdShqCqnx0ayYmx6U59e57gFONPcGdDUSaGJQPhARIdyyIJttp9oYHg2ueuA3j7eQHBsVMJOyq8ndUZ7DieZeznYE1+RQbzvb3m6er4lBhaFbFmTTOzRK9elOq0Nxm91uePN4KzfNzyImSr8agez2ckeJ7o1jzRZHMjNvn2glPz2e0uwkq0O5Ij37lU+sLc0kJiqCLUHUO+lgUzftl4be/9FRgWuuLZEFucm8cazF6lDcdmlolO217UHRfqWJQflEYmwUq4ttbDneguOWlcD35vEWIiOEdfMCu5ivHO4oz6H6dCcdl4asDsUtW0+2MjxqZ/2iyQaSCCyaGJTP3LYwm9Md/dS0XrI6FLe8eayVlYUZpCYEbm8R9YE7FuViNwRNqfS1I83YEmOCooutJgblM3cuykUEXj18wepQpnW2o5+TLb3culBLC8Fi0ewUZqfG8cbRwK9OGhwZ4+0TrdyxKIfIAL3beTxNDMpnslPiuG5uBpsOB34DoasRU7upBg8R4Y5FueyobWNgeMzqcK5oZ207fcNj3BkE1UigiUH52N1LcjnZ0kttgFcn/f7wBcpnpVAYYHPvqiu7ozyHwRF7wM8c+NqRZpJjo1hTErh3O4+niUH51PrFswDYFMDVSU1d/bx3tpt7r5lldShqhq4ryiAlLorXjwZuqXR0zM6bx1u4dWF20HSDDo4oVdDKTY1jxdx0Xj0SuF/c3x9yJK17l8y2OBI1U9GREdxensvmoy0MjgRmddK7pzvp6h9h/eLgqEYCTQzKD+5anMvxCxdpaO+zOpRJ/f7wBZbmp1JgS7A6FHUV7ls2m96h0YCd8vP1I83ERUcE1Wi9mhiUz921xFFFE4i9k8509HGoqYd7l2o1UrBaW2LDlhjDKwennOfLMqNjdl490sxN87KCatInTQzK5/LS4lk2J41NRwIvMfzOWY10z1KtRgpWUZER3LN0Fm8eb6F3cMTqcC6zs66Dtt4hPro8uKaz18Sg/OLuJbkcORd41Um/O3SBawvSyEuLtzoU5YENy2YzNGpnc4ANkfHb986REhf1/syGwcKjxCAiGSKyWURqnH/TJ1nnZhE5MO4xKCL3O9/7qYg0jHtvmSfxqMB13zV5RAj8en+T1aG8r67tEscvXNTSQgi4tiCdvLR4Xj4QONVJfUOjvHakmXuWziY2KtLqcGbE0xLDo8AWY0wZsMX5+jLGmLeNMcuMMcuAW4B+4I1xq/yl631jzAEP41EBKjc1jhvKsvjVvibs9sAYO+mVg+cRgXuWaPtCsBMR7ls2mx217QEzdtIbx5oZGBkLumok8DwxbACecT5/Brh/mvUfADYZY4JrEHXlFQ+syOd8zyC76zusDgW73fBidRNrSzLJTY2zOhzlBfddM5sxuwmYTg6/3n+O/PR4KuZ+qCIl4HmaGHKMMRcAnH+nq0h7EPjFhGXfFZFDIvJ9EYmdakMReUREqkWkuq0tMLulqSu7vTyH5LgoXtpnfXXSzrp2znUP8Knr5lgdivKSBbnJzMtJ4rcBUJ3UenGQnbXt3L8sj4ggGBtpomkTg4i8KSJHJnlsmMmORGQWsAR4fdzix4AFwHVABvDXU21vjHnKGFNhjKnIygqe/sDqA3HRkXzkmtlsOnLB8t4jz+9tJC0hmjsW6dhIoUJEeGBFPvvOdHGqpdfSWDYePI/dwP1BWI0EbiQGY8xtxpjFkzxeBlqcP/iuH/4rjX/7SeA3xpj3fxGMMReMwxDwE2ClZ4ejAt0DK/IZHLFbOrBeZ98wm4+28NHleUHXKKiu7IEVc4iJjODnVWcti8EYw6/2n2NpfmrAz9Q2FU+rkjYCDzufPwy8fIV1H2JCNdK4pCI42ieOeBiPCnDL56RRnJVoaXXSb947x/CYXauRQlBGYgx3LcnlV/ubLBtxdf/ZLo5fuMgnK4L3/PI0MTwB3C4iNcDtzteISIWI/Mi1kogUAnOAdyZs/zMROQwcBjKBv/MwHhXgXMX9d093Ut/m/xFXjTH8cm8j18xJY0Fuit/3r3zvM5Vz6R0c5ZVD1rQ1PLPrDMlxUUHZG8nFo8RgjOkwxtxqjClz/u10Lq82xnxp3HqnjTF5xhj7hO1vMcYscVZN/YExJrDHZlZe8Qlncf+nu077fd8HGrs52dLLp4L4ak5d2XWF6ZRmJ/EzC6qTWi8O8urhC3xixRwSY4NnCIyJ9M5n5XdZybHct2w2L1Y30d0/7Nd9/6zqLPHRkXxEh9gOWSLCZyoLONjYzZFzPX7d9y/ebWTUbvjD1XP9ul9v08SgLPGFtUUMjIzxi3cb/bbPCz0DvHzgHJ+syCc5Tud1DmUfW55PXHQEP3/Xf6WG4VE7P6s6w03zsigK8gmfNDEoS5TPTmFtqY1ndp1mZMw+/QZe8PSOBuwGvnRDsV/2p6yTmhDNR5bO5jf7z/ntTujXjzbT2jvEw2uCu7QAmhiUhb54fRHNzjpZX+vpH+HnVWe5d+ks5mTovAvh4H/dVMLg6Bg/2tHgl/09s+s0BRkJrJsXXAPmTUYTg7LMunnZFGcl8uMdDRjj2/GTnqs6Q9/wGP/rxhKf7kcFjtLsJO5ZMotnd532eVvWrtp2qs908fm1hUF5p/NEmhiUZSIihM+vLeJQUw+76nw3ftLgyBg/2dnATfOyKJ+tXVTDyddvKaNveIynfVhqMMbwvTdOMis1jodWFvhsP/6kiUFZ6hMr8pmdGsffbzrus1FXX9rXRPulYf7oJi0thJv5ucmsX5TLT3adpmfAN8OwvHWilffOdvP1W8qIiw6NO+k1MShLxUVH8hd3zufIuYts9MHUjL2DI/zrlhquLUhjVXGG1z9fBb6v31pK7+Aoz/jgvhm73fB/3zjFXFsCn6jI9/rnW0UTg7Lc/cvyWDQ7he+9fpLBEe8OY/Bvb9XS1jvEtz6yCMfIKyrcLJqdym0Ls/nR9nravdxD6dUjFzh+4SLfuK2M6MjQ+TkNnSNRQSsiQvjm3Qs51z3g1buha1sv8fSOBj5Zkc+yOWle+1wVfB69awEDI2N853fHvPaZw6N2/nnzKcqyk7jvmuAd/mIymhhUQFhTmsnN87N48u1aOvs870FijOFvXzlKfEwkf7V+gRciVMGsNDuZr64r5eUD59l68kqDQLvvX7ecor6tj8fuXkBkCPREGk8TgwoYj929kMGRMf7qpUMed19941gL22va+dPb5pGZNOX8TyqMfPXmEkqyEvnfvz1C//CoR5+170wX/7m1jk9W5HPLgtCb00MTgwoY83KSeeyuhbx5vIUfe9C98Fz3AN/8zWHm5yQH/Zg1yntioyL5+48tpalrgO9vPnXVn9M/PMqf//IAs1Lj+f/uLfdihIFDE4MKKJ9fW8gd5Tk8sekE753tmvH2/cOjfPmZaoZG7Dz5meUh1SCoPLeyKIOHVhbwox0NV33H/RObTnCms59/+uQ1ITvmln5rVEAREb73wDXkpsbxtZ+/R9cM2hvsdsOf//IgJ5ov8oNPL6c0O9mHkapg9a17y1lRkM43nj/Ajpr2GW371LY6nt19hi+sLWJVsc1HEVrPo8QgIp8QkaMiYheRiiust15ETopIrYg8Om55kYhUiUiNiLwgIjGexKNCQ2pCNP/+6Wtp6x3i4/+5i4b2vmm3GbMbnnjtBJuONPPYXQu5eX7wj1ejfCM+JpIfP3wdxVmJPPI/1Rxs7J52G2MM//pmDf/n1RPcu3QWj94V2h0aPC0xHAE+BmybagURiQSeBO4CyoGHRMRVMfcPwPeNMWVAF/BFD+NRIWLZnDSe+1IlXf3D3P/kTnbVTn1ld657gE//cA9Pbavn05UFfOmGIj9GqoJRakI0z35hJbakGD779Lv8srpxyjvvR8bsPLHpBN9/8xQPrMjnXx8M/SpK8cbgZSKyFfgLY0z1JO+tBr5tjLnT+fox51tPAG1ArjFmdOJ6V1JRUWGqqz+0KxWCznb088Vn9lLf3sfHludx15Jc1pZmEiFCbeslquo7+KfNp7DbDd++bxEPrMjXG9mU28529PONF95j/9luluan8thdC1k4K5nkuGj6hkf5RdVZfrLzNM0XB/lMZQHf2bA4qAfJE5F9xpgpa3dc/DH3XB4wfjaWJqASsAHdxpjRcctD6y4R5bECWwK//uoavvv74/z+0AVe3NdEYkwkI3bD8KhjHoflBWn8y6eWMdcW3JOjKP8rsCXwq6+s4bcHzvHEphM89MM9778XGSGM2Q1rSmz8/ceWsG5+VthcdEybGETkTSB3kre+aYx52Y19TPYvaa6wfKo4HgEeASgoCI0RDJV7kuOieeLjS3l8w2J21rWz5XgLCTFRLJqdwuK8VIpsiUF9FaesJSJ8dHk+d5TnsvlYCx19w/QMjDA8aufepbNYnJdqdYh+N21iMMbc5uE+moDxM6/nA+eBdiBNRKKcpQbX8qnieAp4ChxVSR7GpIJQTFQEN8/P1oZl5ROJsVHcv1wrLcA/3VX3AmXOHkgxwIPARuNo3HgbeMC53sOAOyUQpZRSPuRpd9WPikgTsBr4vYi87lw+W0ReBXCWBr4GvA4cB35pjDnq/Ii/Bv5MRGpxtDn82JN4lFJKec4rvZL8TXslKaXUzLnbKym0O+MqpZSaMU0MSimlLqOJQSml1GU0MSillLqMJgallFKXCcpeSSLSBpy5ys0zcdxcF070mMODHnPo8/R45xpjsqZbKSgTgydEpNqd7lqhRI85POgxhz5/Ha9WJSmllLqMJgallFKXCcfE8JTVAVhAjzk86DGHPr8cb9i1MSillLqycCwxKKWUuoKQTQwisl5ETopIrYg8Osn7sSLygvP9KhEp9H+U3uXGMf+ZiBwTkUMiskVE5loRpzdNd8zj1ntARIyIBHUPFneOV0Q+6fx/PioiP/d3jN7mxnldICJvi8h7znP7bivi9CYReVpEWkXkyBTvi4j8wPlvckhErvVqAMaYkHsAkUAdUAzEAAeB8gnrfBX4L+fzB4EXrI7bD8d8M5DgfP6VcDhm53rJwDZgD1Bhddw+/j8uA94D0p2vs62O2w/H/BTwFefzcuC01XF74bhvBK4Fjkzx/t3AJhwzYa4Cqry5/1AtMawEao0x9caYYeB5YMOEdTYAzzifvwTcKsE9oeu0x2yMedsY0+98uQfHrHnBzJ3/Z4DvAP8IDPozOB9w53i/DDxpjOkCMMa0+jlGb3PnmA2Q4nyeyhVmggwWxphtQOcVVtkAPGsc9uCYDXOWt/YfqokhD2gc97rJuWzSdYxjMqEeHJMFBSt3jnm8L+K44ghm0x6ziCwH5hhjfufPwHzEnf/jecA8EdkpIntEZL3fovMNd47528AfOCcNexX4un9Cs9RMv+8zMu2cz0Fqsiv/id2v3FknmLh9PCLyB0AFcJNPI/K9Kx6ziEQA3wc+56+AfMyd/+MoHNVJ63CUCLeLyGJjTLePY/MVd475IeCnxph/EpHVwP84j9nu+/As49Pfr1AtMTQBc8a9zufDxcv31xGRKBxF0CsV3QKdO8eMiNwGfBO4zxgz5KfYfGW6Y04GFgNbReQ0jrrYjUHcAO3uef2yMWbEGNMAnMSRKIKVO8f8ReCXAMaY3UAcjjGFQplb3/erFaqJYS9QJiJFIhKDo3F544R1NgIPO58/ALxlnK06QWraY3ZWq/w3jqQQ7HXPMM0xG2N6jDGZxphCY0whjnaV+4wxwTovrDvn9W9xdDJARDJxVC3V+zVK73LnmM8CtwKIyEIciaHNr1H630bgs87eSauAHmPMBW99eEhWJRljRkXka8DrOHo1PG2MOSoijwPVxpiNwI9xFDlrcZQUHrQuYs+5eczfA5KAF53t7GeNMfdZFrSH3DzmkOHm8b4O3CEix4Ax4C+NMR3WRe0ZN4/5z4Efisif4qhO+VyQX+QhIr/AUR2Y6Ww7+RsgGsAY81842lLuBmqBfuDzXt1/kP/7KaWU8rJQrUpSSil1lTQxKKWUuowmBqWUUpfRxKCUUuoymhiUUkpdRhODUkqpy2hiUEopdRlNDEoppS7z/wP3OZTuk8WsowAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n = 100\n", "A = poisson_matrix(n);\n", "\n", "# sinusoidal error\n", "k = 2;\n", "x = np.linspace(0, 1, n);\n", "u0 = np.sin(2*np.pi*x * k)\n", "plt.plot(x,u0)" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u_jacobi = jacobi(A, np.zeros(n), u0, max_iter=10)\n", "plt.plot(np.arange(n), u0, label=\"initial\")\n", "plt.plot(np.arange(n), u_jacobi, label=\"jacobi\")\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }