{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# EART97012 \n", " \n", "# Geophysical Inversion \n", " \n", "## Lecture 6 \n", " \n", "### Homework Exercises " ] }, { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import scipy.linalg as sl\n", "from pprint import pprint\n", "import scipy.interpolate as si" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Homework\n", "\n", "Recall that I use the notation \n", "$A\\boldsymbol{x} = \\boldsymbol{b}$ and $G\\boldsymbol{m} = \\boldsymbol{d}$ interchangeably" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Rank of the product of two matrices (and the outer-product of two vectors)\n", "\n", "We stated in the lecture that a matrix product always has a rank that is less than or equal to the smallest rank of any of the constituent matrices. \n", "\n", "For gave the example of the outer product $\\boldsymbol{a}\\boldsymbol{b}^T$ of two column vectors must be rank 1 because vectors are only rank 1. \n", "\n", "Establish the second of these analytically, and test the first with some examples and use of `numpy`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - A simple mixed determined problem [solved by hand and using the pseudo-inverse]\n", "\n", "Consider the problem from the lecture\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & 0 & 0 \\\\\n", "1 & 0 & 0 \\\\\n", "0 & 2 & 2 \\\\\n", "0 & 3 & 3\n", "\\end{pmatrix}\n", "\\begin{pmatrix}\n", "m_1\\\\\n", "m_2\\\\\n", "m_3\n", "\\end{pmatrix}\n", "=\n", "\\begin{pmatrix}\n", "1\\\\\n", "2\\\\\n", "2\\\\\n", "3\n", "\\end{pmatrix}.\n", "$$\n", "\n", "Can you come up with a sensible looking \"solution\" to this problem by considering the under- and over-determined components separately?\n", "\n", "Hint: consider problems for $m_1$ and both $m_2$ and $m_3$ separately, and think about what the least squares and minimum norm solution would be for each.\n", "\n", "Once you have found the solution \"by-hand\", try using the pseudo-inverse $A^+$ which you can find using the function `np.linalg.pinv(A)`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - A \"least squares\" and minimum norm solution to a simple $2\\times 2$ case\n", "\n", "In the L2 homework we considered the case \n", "\n", "$$\n", "\\left(\n", " \\begin{array}{rr}\n", " 2 & 3 \\\\\n", " 4 & 6 \n", " \\end{array}\n", "\\right)\\left(\n", " \\begin{array}{c}\n", " x \\\\\n", " y\n", " \\end{array}\n", "\\right) = \\left(\n", " \\begin{array}{c}\n", " 4 \\\\\n", " 7\n", " \\end{array}\n", "\\right),\n", "$$\n", "\n", "plotting the two constraints to make the point that this system has no solution:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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rs8rXx4WLoTixeGyy+Djj8P1ScaE1uzZs+nRowcVK1akUqVKTJgwga1bt/J5eg/gnXfeIVeuXPz888/HXjNgwADOOeccNm/eHLI6WrVqRYsWLTj33HM577zzGDFiBPnz52fRokXH2pQuXZonnvjnBeSqVavInTs333wTupmGO3bsoGvXrowbN47ChQuH7H29RFVwRsKZZ2rPs1w5aN0apkyJdEXGBG/Xrl0cOXLkWGB06NCBSpUq8eCDDwLw2GOP8dZbbzFr1ixSUlLCUsPhw4eZNGkSu3fvplatWseer1mzJl999dU/2g4cOJBevXpRoUKFfzw/cuRIkpOTT/r47LPPPD+/T58+dOjQgUaNGoX+N3eCqJ2O5KeUFEhL0+Ds1AnGjoWePSNdlfHbwIH+3++uUgWeeirr7zNgwACqVKlCzZo1AZ2jOHLkSFq1asU555zDiBEjmDdvHuXKlcv6h51g1apV1KxZk3379pGcnMz7779PpUqVjv28Zs2ajBkz5tj3U6dOZdmyZbz99tv/eq8bb7yRq6666qSfV6rUv6d2jx07lvXr1zNhwoQs/E4yzoIzXaFCMHs2tG8P118PO3bArbdGuipjTu22225j4cKFLFy4kPj4/y3uuOyyy6hevTr/+c9/+PDDD6levbrn60eOHMnIkSOPfb9//35EhMcee+zYczNnzqRu3bqery9fvjzLly9n+/btvPvuu1x77bWkpaVRsWJFAC699FJuv/12tm3bRr58+bjjjjsYPnw4p5122r/eq0iRIhQpUiSo3//atWu56667+Oyzz0hKSgrqtZkWaJ5SrDyCmsd54IBzAwe6z99+O2CTffuc69DBOXDu7rudO3Ik428farE6PzJaZcd5nAMHDnQlSpRwa9as+dfPPvnkE5c3b14XFxfnlixZEvA9/vzzT7du3bpjj3bt2rl+/fr947m///47w3U2btzY9ezZ89j3+/btc0lJSW727NnuoYcecuXLl3cHDhzwfL8RI0a4fPnynfSxYMGCf7zm1VdfdYCLj48/9gCciLj4+Hi3b9++kM/jzFk9zrVrYdw4qk6apMPq5577rya5csGkSXDDDfDAA7B9u15KxeX4u8Em2gwYMIBJkyaRlpbG+eef/4+frVixgnbt2vHMM88wffp0hg4dyuzZsz3f58ReXv78+SlSpAjnevz7yIgjR46w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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# consider the following situation\n", "x = np.linspace(-1,5,100)\n", "y1 = -(2./3.)*x + (4./3.)\n", "y2 = -(4./6.)*x + (7./6.)\n", "\n", "fig = plt.figure(figsize=(5, 5))\n", "\n", "ax1 = fig.add_subplot(111)\n", "\n", "ax1.set_xlabel(\"$x$\", fontsize=14)\n", "ax1.set_ylabel(\"$y$\", fontsize=14)\n", "ax1.set_title('Two lines', fontsize=14)\n", "ax1.grid(True)\n", "\n", "ax1.plot(x,y1,'b', label='$2x+3y=4$')\n", "ax1.plot(x,y2,'r', label='$4x+6y=7$')\n", "\n", "ax1.legend(loc='best', fontsize=14);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What do you think the least square and minimum norm solution is in this case?\n", "\n", "Note that solution 1 is (I think) the obvious solution.\n", "\n", "I also present a second solution afterwards which gives a slightly different answer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Lagrange multiplier derivation of minimal-norm solution\n", "\n", "Recall we had the Lagrangian function\n", "$$\n", "\\mathcal{L}(\\boldsymbol{m}, \\boldsymbol{\\lambda}) := \\boldsymbol{m}^T\\boldsymbol{m} - \\boldsymbol{\\lambda}^T (G\\boldsymbol{m} - \\boldsymbol{d})\n", "$$\n", "\n", "where $\\boldsymbol{\\lambda}$ is the Lagrange multiplier that is introduced to enforce the constraint - here the constraint is vector values and so $\\boldsymbol{\\lambda}$ is a vector of Lagrange multipliers. \n", "\n", "We stated that \n", "\n", "$$\\boldsymbol{0}=\\nabla_{\\boldsymbol{m}}\\mathcal{L} = 2\\boldsymbol{m} - G^T\\boldsymbol{\\lambda}$$\n", "\n", "Consider a simple example to convince yourself this is true:\n", "\n", "start with \n", "\n", "$$G =\n", "\\begin{pmatrix}\n", "G_{11} & G_{12}\\\\\n", "G_{21} & G_{22}\n", "\\end{pmatrix},\\quad\n", "\\boldsymbol{m} = \n", "\\begin{pmatrix}\n", "m_1\\\\\n", "m_2\n", "\\end{pmatrix},\\quad\n", "\\boldsymbol{d} = \n", "\\begin{pmatrix}\n", "d_1\\\\\n", "d_2\n", "\\end{pmatrix},\\quad\n", "\\boldsymbol{\\lambda} = \n", "\\begin{pmatrix}\n", "\\lambda_1\\\\\n", "\\lambda_2\n", "\\end{pmatrix}\n", "$$\n", "\n", "write out $\\mathcal{L}$ in full, i.e. perform the relevant matrix/vector arithmetic to compute the resulting scalar quantity, compute the gradient, and demontrate that the result is equal to $2\\boldsymbol{m} - G^T\\boldsymbol{\\lambda}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Differentiation of inner products \n", "\n", "Suppose that $\\boldsymbol{a}$ and $\\boldsymbol{b}$ are both functions of $\\boldsymbol{x}$. Suppose $\\boldsymbol{a}$ and $\\boldsymbol{b}$ are vectors of length $m$, and $\\boldsymbol{x}$ are vectors of length $n$.\n", "\n", "What is\n", "\n", "$$\\frac{\\partial}{\\partial \\boldsymbol{x}} \\left(\\boldsymbol{a}^T\\boldsymbol{b}\\right)$$\n", "\n", "?\n", "\n", "First note the object inside the bracket is the inner (or dot) product of the two vectors, and so is itself a scalar.\n", "\n", "The derivative (or gradient) w.r.t. $\\boldsymbol{x}$ is a vector the same length as $\\boldsymbol{x}$.\n", "\n", "
\n", "\n", "The answer (if you work it out component by component) turns out to be equivalent to\n", "\n", "$$\\frac{\\partial}{\\partial \\boldsymbol{x}} \\left(\\boldsymbol{a}^T\\boldsymbol{b}\\right) \n", "=\\left(\\frac{\\partial \\boldsymbol{a}}{\\partial \\boldsymbol{x}}\\right)^T\\boldsymbol{b} +\n", "\\left(\\frac{\\partial \\boldsymbol{b}}{\\partial \\boldsymbol{x}}\\right)^T\\boldsymbol{a}$$\n", "\n", "The differentials $\\partial \\boldsymbol{a}/\\partial \\boldsymbol{x}$ and $\\partial \\boldsymbol{a}/\\partial \\boldsymbol{x}$ are both $m\\times n$ matrices, so that their\n", "transposes are $n\\times m$. \n", "\n", "Thus the products \n", "$(\\partial \\boldsymbol{a}^T/\\partial \\boldsymbol{x}) \\boldsymbol{b}$ and $(\\partial \\boldsymbol{a}^T/\\partial \\boldsymbol{x}) \\boldsymbol{a}$\n", "are both column vectors of length $n$ as \n", "required. Note that it does not matter if we differentiate a vector and then transpose the \n", "result, or if we transpose the vector before differentiation - both generate the same outcome. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Curve-fitting - response to outliers [read-through]\n", "\n", "Here we are going to fit a *linear* line to some invented data, and see what happens if we create an outlier - how much is the slope of the best-fit line impacted?\n", "\n", "As numpy's polyfit function only has the option to minimise the 2 norm, we have to do some work ourselves to create an approach that minimses other norms - so just read through the following solution." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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P3oby48Dmp5AJ0mSts39nSrka1/7mucrSFKHMNy10/T09PCJT3yi7DIkacYx3KdgaGiInp4eZs2aRU9PD0NDQy1dv5/1liQVYbgXNDQ0RF9fHyMjI2QmIyMj9PX17dSA7+3t5a/+6q848cQT2XvvvTn00EMBOPXUU1myZAlz585l4cKFHHfccfz617/e/LwnPvGJfOUrX9k8feihh7L77ruzYcMGAH72s58REaxdu3bSdZ9zzjl0d3fT1dXFK17xCu69994tlt9+++0cddRRPPGJT2Tu3Lk85znP4cILL9yi9pGREd797ncTEZt36f/iF7/g6KOPZtGiRTz2sY/lGc94Bl/84hd3uFeSpD8w3Avq7+9nbGxsi3ljY2P09/fv1PWee+65ZCZXXnkl55xzDlD/aNhpp53GjTfeyJe+9CV+/OMfc8IJJ2x+zuGHH85ll122ucaVK1fymMc8ZvP97oeHh3na057GwoULm67zRz/6Ecceeyx9fX1cd911vPKVr+Skk07aYsy6detYvnw53/ve9/jJT37Ca1/7Wl7zmtdwyy23AHDeeeexaNEiTjrpJO655x7uueceAB566KHNbwRuvPFG3vWud/G2t72N4eHhae2bJM1omVmJx4EHHpiTuemmmyZdVlREJPCoR0RM+pzf/va3O7TOww8/PJ/5zGduc9y3vvWtnDNnTm7cuDEzM08//fTcd999MzPzu9/9bu633355zDHH5Ic//OHMzHzjG9+Yxx133KSvd/TRR+eLX/ziLea99a1vzfqvy+QOPvjgPOWUUzZPd3d358c//vFt1v/6178+jznmmK2OmY6fYRVcdtllZZfQMexVMfapmHbtE7Aym2SiW+4FTXbp0519SdQDDzzwUfMuvfRSXvKSl7Bo0SJ23313XvOa17B+/Xp+/vOfA/Vd4rfddht33303w8PDLFu2jN7e3s1bx5dffvlWL6N4880387znPW+LeROnH3jgAd7znvdwwAEHsMceezBv3jxWrlzJ6OjoVr+fjRs3MjAwwJIlS9hzzz2ZN28e5513HnfddVeBbkiSijDcCxoYGKCrq2uLeV1dXQwMDOzU9c6dO3eL6ZGREV7+8pez//7789WvfpVrr72Ws846C/jDCXf7778/CxYsYHh4eHO4L1u2jB/84AfcdNNNrF27dqvhngVuJnTiiSfy1a9+lVNO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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Invent some raw data - we will use the notation (xi,yi) for the\n", "# given data, where xi and yi are of length N+1 (N=len(xi)-1)\n", "xi = np.linspace(0,1,10)\n", "yi = xi + 0.2 * np.random.random((10,))\n", "\n", "# We will want to overlay a plot of the raw data a few times below so \n", "# let's do this via a function that we can call repeatedly\n", "# [Note that I've been a bit lazy in later lectures and really should\n", "# do this sort of thing more often to make code easier to read - apologies]\n", "def plot_raw_data(xi, yi, ax):\n", " \"\"\"plot x vs y on axes ax, \n", " add axes labels and turn on grid\n", " \"\"\"\n", " ax.plot(xi, yi, 'ko', label='raw data')\n", " ax.set_xlabel('$x$', fontsize=16)\n", " ax.set_ylabel('$y$', fontsize=16)\n", " ax.grid(True)\n", "\n", "\n", "# set up figure\n", "fig = plt.figure(figsize=(8, 6))\n", "ax1 = fig.add_subplot(111)\n", "\n", "# For clarity we are going to add a small margin to all the plots.\n", "ax1.margins(0.1)\n", "\n", "# plot the raw data\n", "plot_raw_data(xi, yi, ax1)\n", "\n", "# add a figure title\n", "ax1.set_title('Our simple raw data', fontsize=16)\n", "\n", "# Add a legend\n", "ax1.legend(loc='best', fontsize=14);\n", "# loc='best' means we let matplotlib decide the best place for the\n", "# legend to go. For other options see \n", "# https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "poly_coeffs: [0.97041134 0.13925643]\n" ] }, { "data": { "image/png": "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661LLW/YsCEffPBBxHWccwwdOpRzzz2XtLS0Su07KyuL0047jZ49e3LXXXdttu3TTjuN++67jwEDBvDUU0/x4IMPMmrUKD788EOaN29e5uOojC3tq8oqKirixRdfZM2aNRxyyCHApv5u0KBBqbbl9Xek7YhI7VBrk3uy6NatG4MHD954+9VXX2XOnDm88MILm7W97LLLNg53l6VFixalbq9atYqioqLNEmDz5s157733ytxOkyZN6NatGwMGDGD//fdn5513ZtSoUUybNo299tor4joTJkxgyZIl9OvXr1L7fuqpp1i8eDHPP/98mfGYGffccw/HHXcce+65Jzk5OUyaNInWrVuXuU5lbWlfRWv+/Pl069aNdevW0bhxY1555RUOOOAAYFN/P/DAA3Tu3Lnc/i5vOyJSO9Ta5F7ZI+gtsXr1n1WeKrRr167ceOON/PLLLzRq1Ij+/ftz2223seOOO27WdocddmCHHXbYov2Ez7fvnKtwDv7nn3+eiy66iJYtW1K3bl3at2/P2WefzezZsyO2f+qpp+jUqRMHHXRQ1Pv+4osvuPXWW3n//fepX79+ufEcc8wxdOrUif/85z+88cYbdOrUKWK78BGOv/76CzPjwQcf3LgsfIQj2nirok2bNsydO5fffvuNl19+mb59+5Kfn8/++/tZmp9//nn69u1bYX9XtB0RSX21Nrkniw4dOlC/fn1mzpzJnDlz2Gqrrbjyyisjtt2SYfmmTZtSt25dvv/++1LtfvzxxwqHs/fcc0+mTJnC2rVr+eOPP9hll10488wz2X333Tdr++OPP/Laa6/x+OOPV2rf06ZNY9WqVaUSU1FREVOnTmXIkCGsXbt241D1pEmT+PTTT3HOlRt7+AjHzTffTIsWLbjmmms2Lgsf4Yg23qqoX7/+xqPwjh07MmPGDB5++GGGDh0K+P4eN24cderUKbe/K9qOiKQ+JfcE16BBAw4++GDeeOMNnnvuOUaOHEm9evUitt2SYfn69evToUMHJkyYwOmnn75x+YQJEzj11FOjirFRo0Y0atSIX3/9lfHjx3P//fdv1mbYsGE0aNCAs846K+K+e/XqFXHfffr0oWPH0rMPX3jhhbRu3Zpbb71149H8p59+yimnnMKjjz7KW2+9xb///W/Gjx8fMd7wEY4mTZqwww47lHk6IVK8W9pXlVFcXMxff/21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7kvz5s3Jz8/fmNx79OjBhx9+yIIFC1i+fHm5yd1/GSxf//79efHFF7n77ruZMmUKc+fOpXPnzhUW/T344IM89NBD3HTTTUycOJG5c+fSp08f/v777wr3KSJSGevXwy23wFFHQePGvmiuf//UKZorz1bxDiBZlFwJKDs7m2XLltGqVStycnJifoWgmTNnsn79eh5++GHq1q0LUKqQrcQRRxzBW2+9xcyZMzniiCNo1qwZTZs25f777y/3fDtA27Zt+fjjj0stC7/9wQcfcP7553PqqacC/lz6119/zd57772xTf369SkqKtpsvRNOOIHzzjsP8F8kvvzyS5o0aVKJXhARKd+XX8I55/hiuawsGDgQwo6VUlot+P5SfTIzM1m6dCnFxcVxu/Rf69atKS4uZtCgQSxZsoRRo0YxaNCgzdp1796dMWPG0Lp1a5o1awb4hD9ixIhyj9oBrrnmGt577z3++9//8tVXX/HUU0/xyiuvlGqz995788orrzB79mzmz5/Pueeey7p160q1ycjI4P3332f58uWsWrVq43oTJ07kgw8+YNGiRVx11VUsWbJkyztERCSEc/D003DwwbBkCYwd62eeq02JHZTck067du145JFHGDhwIG3btuXpp5+OOFFMjx49KCoqKpXIIy2LpGvXrgwdOpQnnniCdu3aMXbsWO64445SbQYOHEizZs04/PDD6d27N127duXwww8v1eauu+7i22+/Zc8992SnnXYC4D//+Q+dO3emd+/e/OMf/6BRo0ZJc31kEUlsv/wCp58Ol1wCXbv6meZOPjneUcWHRXN+NRl07NjRlfzUK9zChQvZd999YxwRrF69WsPNUVJfRaem+ile75GalJ+fX+EXWUmdfsrPh/POgx9+gJwcuPHG6j23nqj9ZGaznHMdw5fryF1ERJJWSdFcz57+9+rTpsFNN9WOornyqKBORESSUmjR3CWXwMMP175z62Wp5d9tREQk2TgHQ4f6orlvvoGXX4bcXCX2UEruIiKSNH79Fc44A/r1gy5dfNHcKafEO6rEU2uSe6oUDopUN703JFlMmeIvz/rqq3DvvTBhArRsGe+oElOtSO716tXjzz//jHcYIgnpzz//pF69evEOQ6RMf/8Nt94KPXpAw4a+aO7mmyGYx0siqBXJvVmzZixfvpzCwkIdpYgEnHMUFhayfPnyjRMd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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Fit a polynomial of degree 1, i.e. a straight line, to our (xi, yi) data from above\n", "# we'll explain what's going on here later in this lecture\n", "degree = 1\n", "poly_coeffs = np.polyfit(xi, yi, degree)\n", "print('poly_coeffs: ',poly_coeffs)\n", "\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(poly_coeffs)\n", "\n", "# set up figure\n", "fig = plt.figure(figsize=(8, 6))\n", "ax1 = fig.add_subplot(111)\n", "ax1.margins(0.1)\n", "\n", "# Plot the linear fit - define 100 evenly spaced points (x) covering our\n", "# x extent and plot our linear polynomial evaluated at these points (p1(x))\n", "# of course 100 is overkill for this linear example\n", "x = np.linspace(0., 1, 100)\n", "\n", "ax1.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(poly_coeffs[0], poly_coeffs[1]))\n", "\n", "# Overlay raw data\n", "plot_raw_data(xi, yi, ax1)\n", "\n", "# Add a legend\n", "ax1.legend(loc='best', fontsize=14)\n", "\n", "# add a figure title\n", "ax1.set_title('Raw data and the corresponding linear best fit line', fontsize=16);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have used NumPy's polynomial fitting function which \"minimises the squared error\" \n", "\n", "i.e. it seeks the polynomial (here we chose just a straight line) which minimises the two-norm of the errors at the locations where we have data.\n", "\n", "We can code this up ourselves using SciPy, and in doing so check out code recreates above when we choose the two-norm, but also see what happens if we select other norms with which to define the best fitting line." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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PzDd4yADw3godyum3C2fcle5WxsV5W5c3nksFq66CmbMqPr6RUVNSUmp3Wfutx8MHFi993Tp0mWzwx5XXXUVffv2pUOHDqWWDxgwgAEDBlS4vbfeeouuXbtufL527Vo+/fRTrrnmmlLr9ezZkw8++KDc7axfv56ioiKaNGlSannTpk2ZOnVqme9xd5566inOOecc0tLSqvXZV155JaeddhqHH344d9xxx2bbPu2007jnnnvo378/TzzxBPfffz8jRozg/fffp02bNuV+H9VR031VXUVFRbz44ousXLmSQw45BKjZ/i5rOyJhUu4GlLtVp9yV6qq3jW2i6NKlC48++ujG56+++iqff/45L7zwwmbrXnLJJRsPNW1qw32b09PTSy1funQpRUVFm4VQmzZteO+998qtq0WLFnTp0oX+/fuz9957s9122zFixAg+/PBDdt111zLf8+677zJ//nz69u1brc9+4oknmDdvHiNGjCi3HjNjwIAB9O7dm1122YXc3FwmTJhA+/bty31PddV0X1XVrFmz6NKlC2vWrKF58+a88sor7LPPPkD19ndF2xGRyil3lbug3E1Y5Q3lJtojWQ+Jvf/++w74smXLfM2aNb7LLrv4Qw89VO3tlFf/okWLHPDJkyeXWn7bbbf57rvvXuE2v/vuOz/ssMMc8JSUFD/wwAM9KyvL99xzzzLXP+200/zAAw+s1md//fXX3rp1a58+ffrG18s6JLZBly5dPCUlxceOHVtu3bm5ud6sWbONj4YNG3qjRo1KLdu0pqrWW56qHBL7448/fO7cuT5t2jTv16+fb7311j5r1qyNr1d1f1e2nbIk4yGx4cOHe0ZGhpuZZ2Rk+PDhw6PyOehUhDIpd5W7JSl3N6fcrbmKclcjtnGuU6dOpKamMn36dD7//HMaNmzIpZdeWua6NTkk1rp1a1JSUvj5559LrbdkyZJKDyXtsssuTJo0iVWrVrF8+XK23357zjzzTHbaaafN1l2yZAmvvfYagwcPrtZnf/jhhyxdupSDDjpo4+tFRUVMnjyZIUOGsGrVKho3bgzAhAkT+OKLL3D3CmvfdITl+uuvJz09nSuuuGLjsk1HWKpab22kpqZuHAU44IADmDZtGg899BBPPfUUUPX9Xdl26oO8vDyys7MpLCwEoKCggOzsbACysrLCLE0SgHJXuavcrb54yV01tnGucePG/OUvf+GNN97g2Wef5fnnn6dRo0ZlrluTQ2Kpqal06tSJd999l9NPP33j8nfffZdTTz21SjU2a9aMZs2a8euvvzJu3DjuvffezdYZNmwYjRs35qyzzqrWZ5900kkccMABrFq1imbNmgFw4YUX0r59e2688UZSU1MB+OKLLzjllFN4+OGHGTNmDDfccAPjxo0rs95WrVrRqlWrjc9btGhBq1atyj2UV51661JxcTF//PHHZsursr+rsp1klpOTszFcNygsLCQnJ0eNrVRKuavc3ZRyt3Jxk7vlDeUm2iNZD4m5u1911VVuZt6zZ88ab6Oi+keOHOmNGjXyJ554wufMmeNXXHGFN2vWrNSVrg8//PBmh33efvttHzt2rM+bN8/feecd33fffb1z586+du3aUusVFxd7+/btN7uqtaqfvWn9mx4SW7Bgge+www5+++23u7v7rFmz3MyqfCinOlfn1mRfrVixwqdOneqff/65N23a1G+//Xb//PPPvaCgYOM6119/vU+ePNnnz5/vM2fO9H79+rmZlTq0V5X9XZXtlCXZDomZmQObPcyszj8LnYpQJuWucrciyl3lbm1UlLuhB2NdPZI5YIcNG+YpKSn+5Zdf1ngbldU/ePBgz8jI8NTUVN9///190qRJpV6/9dZbPfg76E+jRo3ynXfe2VNTU3277bbzSy+91H/77bfNtj1hwgQH/OOPP67RZ29af8mAXbZsme+xxx6enZ1dav0zzjjDDz744Aq/5w2qE7BVqXfTfTVx4sQyf9jPP//8UjW0a9fOU1NTfZtttvEjjjjC33777VLbrcr+rsp2ypJsAZuRkVHmPs/IyKjzz1JjWzblrnK3Ispd5W5tqLFN8IA96qij/J///GetthFm/XVB9UdXsgXs8OHDPS0trVS4pqWlReVCBjW2ZVPuxv/PfWVUf3Qpd2uuotzVObZxqri4mP/7v/9j2LBhzJo1i1GjRoVdkkjC2HA+V05ODgsXLqRdu3bk5ubq/FqpkHJXpObiJXfV2MapyZMnc/jhh7P77rvz8ssvs9VWW4VdkkhCycrK4vffs7jrrkI+/jiNOpovXpKYclekduIhd9XYxqnu3btTXFwcdhkiCevee+H66+GQQwrZYou0sMuRBKDcFamdeMjdBqF8qohIlLjDzTcH4XrWWXD77bPZ5I6YIiJSh9zhppviI3fV2IpI0iguhquugv794eKLYfhwaNjQwy5LRCRpbcjd3Nz4yF2diiAiSaGoCLKz4emn4cor4aGHwCzsqkREklfJ3L3qKnjwwfBzVyO2IpLw1q6Fs88OwvXmm9XUiohEW8ncveWW+GhqQSO2IpLgVq+G00+HMWOCCxeuvTbsikREklvJ3L3vPrjmmrAr+pMaWxFJWCtWwIknQn4+DBkCf/972BWJiCS3lSvhhBPiN3fV2IpIQvr1V+jVC6ZPh+eeg3POCbsiEZHk9uuvcOyxMG1a/OauGlsRSThLlkDPnvDVV/Dii3DyyWFXJCKS3BIld3XxmFTJSy+9hMXDWeFS7/3wAxx2GHz7LbzxRvyGq0htKXclXiRS7qqxlajJzMzk/vvvD7sMSSL/+x907Qo//QTvvBOMHojIn5S7UtcSLXfV2FZDXl4emZmZNGjQgMzMTPLy8mL6+WvXro3p54nEkzlzgnBdsQImTIC//jXsiiQWlLsi4UnE3FVjW0UvvPAC2dnZFBQU4O4UFBSQnZ0d1ZDt3r07//jHP7jmmmvYZpttOPTQQwF48MEH6dixI82aNSM9PZ2+ffvy22+/bXzfdtttx6hRozY+P/TQQ9lhhx1Yv349AHPnzsXMWLRoUbmf/dxzz5GRkUFaWhrHHXccixcvLvX6//73P0488US22247mjVrxv7778+bb75ZqvaCggKuvfZazGzj4bRly5bRp08f2rZtS9OmTdlrr7145plnar2vJLl99llwGMwdJk2CTp3CrkhiQbmr3JXwJGruqrGtottvv53CwsJSywoLC8nJyYnq5w4fPhx3Z8qUKTz33HMANGjQgIEDBzJ79myef/55PvnkEy6//PKN7+nWrRsTJ07cWOP06dNJTU1l+vTpAOTn57PrrruSnp5e5md+/PHHXHDBBWRnZzNjxgyOP/54brnlllLrrFy5kl69evHuu+/yxRdfcOqpp3LKKafw9ddfAzB69Gjatm3LLbfcwk8//cRPP/0EwJo1azaG8ezZs7nyyiv5+9//zvjx4+t2x0nSeP996NEDmjeHKVNgr73CrkhiRbmr3JVwJHTuuntSPDp16uTlmTNnTrmvVZWZObDZw8xqve3ydOvWzffZZ59K13vrrbc8NTXVi4qK3N390Ucf9d12283d3d955x3fY489vE+fPj5gwAB3dz/77LO9b9++5W6vT58+fuSRR5ZadvHFF3vwz6V8Bx10kN95550bn2dkZPh9991Xaf1nnnmmX3zxxRWus3z58kq3E8/ivf6KfkYmTpwYu0I28c477mlp7rvt5r5wYc22Ee36gekeBxkYxkO5q9yNZ/Fev3K35irKXY3YVlHbtm3LXN6uXbuofm6nMsb+J0yYwFFHHUXbtm1p0aIFp5xyCmvXruXnn38GgsNR3377LT/++CP5+fn06NGDrl27kp+fD8CkSZPo3r17uZ/51Vdf0aVLl1LLNn2+atUqrrvuOjp06MBWW21F8+bNmT59OgsXLqzw+ykqKiI3N5eOHTuy9dZb07x5c0aPHl3p+6T+ee01OO44aN8eJk+GHXcMuyKJNeWucldi69VXEz931dhW0a233kpaWlqpZWlpaeTm5kb1c5s1a1bqeUFBAb1792bPPffkxRdf5NNPP+Xpp58G/rzIYc8996RNmzbk5+eXCtj333+fOXPmsGjRogoDNvhjqGLXXHMNL774InfeeSeTJk1ixowZdO7cudILLe6//34eeOABrr32WsaPH8+MGTM46aSTdIGGlPL883DqqfCXv8DEidCmTdgVSRiUu6UpdyWa8vLgtNMSP3d1g4YqOuOMM2jSpAk5OTksXLiQdu3akZubS1ZWVkzrmD59OmvXruWhhx4iJSUFoNTFAxt069aNMWPGMH36dLp160bTpk1p3bo19957b4XneQF06NCBjz76qNSyTZ9PnTqV8847j1NPPRUIzuH63//+x2677bZxndTUVIqKijZ73/HHH8+5554LBGH+7bffsuWWW1Z9J0hSGzoULrkEuncPRm1btAi7IgmLcle5K7Hx+OPwj39At27w+uuJnbsasa2GrKwsFixYQHFxMQsWLIh5uAK0b9+e4uJiBg4cyPz58xkxYgQDBw7cbL3u3bszatQo2rdvz7bbbgsEoTt8+PAKRw0ArrjiCt577z3uuusu5s6dyxNPPMErr7xSap3ddtuNV155hc8++4xZs2ZxzjnnsGbNmlLrZGZmMmXKFBYtWsTSpUs3vm/8+PFMnTqVr7/+mssuu4z58+fXfIdIUnnggeC+48ceC2PGJHa4St1Q7v5JuSvRcP/9wWBCr14wdmzi564a2wTTsWNHBg0axIMPPkiHDh148skny5yMu0ePHhQVFZUK07KWleXggw/mqaee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rly5kr333rvCde655x4GDx7Mf/7zH77++msGDRrE4MGDueuuu6q1HYkhd0+KR6dOnbw8c+bMKfe1qlq+fHmtt1ET6enp/sADD5RaNnPmTG/cuLHPnj27ytupqP7OnTt73759Sy3bddddvV+/fuW+p7Cw0FNSUvzVV18ttXz//ff3nJycjc9vvfVW32uvvcrdzg033OCHHHJIZeWXqr9///6+xRZb+KpVqzYue+GFFzw1NdUXLFiwcdkVV1zhO++8s//8888Vbvv888/3W2+9tdIa3Gu2r0rW36xZM3/mmWcq/Zyyvkd3999++8133nlnHz9+vHfr1s0vvfTSOqmvop+RiRMnVlpvPIt2/cB0j4MMDOOh3K1YMuWuu/tWW23lQ4YM2fg8mXK3vHV69+7t5513Xqll5513nvfu3bta2ymLcrfmKsrdejsrwlVXwYwZVV+/qKgpKSm1+8z99oOBA6v3ni5dumx2mOmqq66ib9++dOjQodTyAQMGMGDAgAq399Zbb9G1a9eNz9euXcunn37KNddcU2q9nj178sEHH2z69o3Wr19PUVHRZreJbdq0KVOnTi21bN68eaSnp5OamspBBx3EgAED2HnnnQF49dVXOeaYYzjzzDOZOHEiO+ywA3379uXSSy8tczoUd+epp57inHPOIS0tbePy0047jXvuuYf+/fvzxBNPcP/99zNixAjef/992rRpU+E+qaqa7qvqKu97BMjOzua0007j8MMP54477gilPpGaUu4GEi13i4qKePHFF1m5ciWHHHLIxuXJlLvl+etf/8qjjz7K119/zR577MGcOXOYMGECN9xwQ9Q/W2qm3ja2iaJLly48+uijG5+/+uqrfP7557zwwgubrXvJJZeUe3h+w32b09PTSy1funQpRUVFm4VQmzZteO+998qtq0WLFnTp0oX+/fuz9957s9122zFixAg+/PBDdt11143rHXTQQQwbNow99tiDJUuW0L9/fw455BBmz57N1ltvzbx583j00Uf517/+Rb9+/ZgxYwaXX345QJnnj7777rvMnz+fvn1Lz0xkZgwYMIDevXuzyy67kJuby4QJE2jfvn2530N11XRfVVd53+MTTzzBd999x3//+99Q6xNJdsrdwOzZsznyyCNZs2YNzZs355VXXmGfffbZ+Hoy5W55rr/+elasWEGHDh1ISUlh/fr15OTk8M9//jPqny01VN5QbqI9kvWQ2Pvvv++AL1u2zNesWeO77LKLP/TQQ9XeTnn1L1q0yAGfPHlyqeW33Xab77777hVu87vvvvPDDjvMAU9JSfEDDzzQs7KyfM899yz3PStWrPBtttlm42G+Ro0aeZcuXUqtc8MNN/gee+xRZv2nnXaaH3jggeVuv0uXLp6SkuJjx44td53c3Fxv1qzZxkfDhg29UaNGpZZtuj/ca7evqnNIrKzv8euvv/bWrVv7V199tXHZpqci1Ka+ZDwkNnz4cM/IyHAz84yMDB8+fHhUPgedilAm5W7i5+7SpUt97ty5Pm3aNO/Xr59vvfXWPmvWrM22nwy5W946I0aM8LZt2/qIESN85syZ/txzz/lWW23lTz75ZLW2Uxblbs1VlLsasY1znTp1IjU1lenTp/P555/TsGFDLr300jLXrckhsdatW5OSksLPP/9car0lS5ZUeihpl112YdKkSaxatYrly5ez/fbbc+aZZ7LTTjuV+57mzZuz1157MXfuXAC23377zQ7t7bnnngwaNGiz9y5ZsoTXXnuNwYMHl7ntCRMm8MUXX+DuFda+6QjL9ddfT3p6OldcccXGZZuOsEDt9lVVlfc9fvjhhyxdupS9995747KioiImT57MkCFDWLVqVUzqSxR5eXlkZ2dTWFgIQEFBAdnZ2QBkZWWFWZokAOVuIDU1deNI8AEHHMC0adN46KGHeOqppzaukwy5W5Frr72Wa665hrPOOguAffbZh4KCAu666y4uvvjiqH9+IomX3FVjG+caN27MX/7yF9544w2effZZnn/+eRo1alTmujU5JJaamkqnTp149913Of300zcuf/fddzn11FOrVGOzZs1o1qwZv/76K+PGjePee+8td901a9bw9ddf06NHDwAOPfRQvvnmm1LrfPvtt2RkZGz23mHDhtG4ceONAVPSF198wSmnnMLDDz/MmDFjuOGGGxg3blyZNbRq1YpWrVptfN6iRQtatWpV6lBeWepiX1WmvO/xpJNO4oADSt/h9MILL6R9+/bceOONpKamYmZRry9R5OTkbAzXDQoLC8nJyVFjK5VS7patuLiYP/74Y+PzZMndihQWFpKyyYneKSkpFBcXR/2zE03c5G55Q7mJ9kjWQ2Lu7ldddZWbmffs2bPG26io/pEjR3qjRo38iSee8Dlz5vgV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sQf/XMp30EEH+Z133rnxeUZGht93332V1n/mmWf6xRdfXOE6y5cvr3Q78Sze66/oZ2TixIkxqWHhQvddd3Vv3tw9P7/uthvt+oHpHgcZGMZDuavcjWfxXn885G5NzJjhvt127q1auX/4YdnrhJm7GrGtorZt25a5vF27dlH93E6dOm22bMKECRx11FG0bduWFi1acMopp7B27Vp+jkwa1717d7799lt+/PFH8vPz6dGjB127diU/Px+ASZMm0b1793I/86uvvqJLly6llm36fNWqVVx33XV06NCBrbbaiubNmzN9+nQWLlxY4fdTVFREbm4uHTt2ZOutt6Z58+aMHj260vdJcps/Hw47LDgN4Z13oFu3sCuSeKDcVe5KfJk8Ocjqhg1hyhQ4+OCwK9qcGtsquvXWW0lLSyu1LC0tjdzc3Kh+brNmzUo9LygooHfv3uy55568+OKLfPrppzz99NPAnxc57LnnnrRp04b8/PxSAfv+++8zZ84cFi1aVGHABn8MVeyaa67hxRdf5M4772TSpEnMmDGDzp07V3qhxf33388DDzzAtddey/jx45kxYwYnnXSSLtCox+bODYLy999h/HjY5He51GPK3dKUuxKm118PZqrZYYfgvNoOHcKuqGy6pW4VnXHGGTRp0oScnBwWLlxIu3btyM3NJSsrK6Z1TJ8+nbVr1/LQQw+REplPo+TFAxt069aNMWPGMH36dLp160bTpk1p3bo19957b4XneQF06NCBjz76qNSyTZ9PnTqV8847j1NPPRUIzuH63//+x2677bZxndTUVIqKijZ73/HHH8+5554LBGH+7bffsmVYMzlLqObMCWY/KCqCiRNh333DrkjiiXJXuSvx4Zln4G9/g06dYMwYaN067IrKpxHbasjKymLBggUUFxezYMGCmIcrQPv27SkuLmbgwIHMnz+fESNGMHDgwM3W6969O6NGjaJ9+/Zsu+22QBC6w4cPr3DUAOCKK67gvffe46677mLu3Lk88cQTvPLKK6XW2W233XjllVf47LPPmDVrFueccw5r1qwptU5mZiZTpkxh0aJFLF26dOP7xo8fz9SpU/n666+57LLLmD9/fs13iCSsmTODC8UA8vPV1ErZlLt/Uu5KGO67Dy66KBiEGD8+vptaUGObcDp27MigQYN48MEH6dChA08++WSZk3H36NGDoqKiUmFa1rKyHHzwwTz11FM89thjdOzYkdGjR3PbbbeVWufBBx9k2223pWvXrvTq1YuDDz6Yrl27llrnjjvu4Pvvv2eXXXZhm222AeCmm26ic+fO9OrVi8MOO4xmzZqF8otKwjV9etDUNm4cnLMVr4e0REC5K4mvJvNBFxfDNdfAddfBmWcGsx80bx6DYmurvKvKEu0R7atz4/3qysqo/nDFe/2xvDr3gw/cW7Z0z8x0nzevTjddJs2KoNwNi+oPV7zXH6vcHT58uKelpZWaWSQtLc2HDx9e7nvWrnU/7zx3cL/sMvfI5B9VplkRRKRemDQJunfPo7Awk4KCBvToEfs7SdVHZva0mS0xsy/Led3M7D9m9p2ZzTSz/WNdo4hER05OTrXmgy4sDG6M89xzcPvt8J//QIME6hYTqFQRSWTvvQdHHZXHunXZrF8fuztJCQDDgGMqeL0X0D7yyAYei0FNIhID5U3rVtbyX3+Fnj1h7Fh47DG45Zbwb5FbXTFvbDVyIFL/jBkDxx0HkIN77O8kVd+5+2TglwpWORF4LnKU7yNgSzPbPjbViUg0lTfv86bLf/wxmHpx2jR44QW45JJYVFf3whixHYZGDkTqjVdeCQ5r7bUXrF9f9ZEDial04PsSz3+ILBORBJebm1vpfNBz58Ihh8CCBcFo7WmnxbjIOhTzeWzdfbKZZVawysaRA+AjM9vSzLZ3959q+blYoo2ni8SAV2Fi+JoaNQqysuDAA+Gtt2C//dpRUFCw2XrRvpOUVKqscCzzH4aZZRMMOmy8IUFZtthiC5YvX16r3C0qKmLFihU1fn/YVH+44rl+d2fNmjXl/vysXLmy3NeqKz09nX/96188+eSTLFmyhG233Za+ffuSnp5Ofn4+33zTnH79OuIO998/i5SUFdT2o+uy/uqKxxs0lDdyUOPGtlGjRqxevXqzv1hEBFavXk2jRo3qfLvPPhvMfXjoocGpCC1aBCMH2dnZpS5kiMWdpKRSPwA7lnjeFvixrBXdfSgwFOCAAw7w8qax+u6772jYsGGtcnfFihW0aNGixu8Pm+oPVzzXX1hYSIsWLfjLX/5S5uv5+fmVThFXHd27d6d///6bLZ8wIZjSa+utYdw42H33zW8nXRN1XX91xGNjW+cjBykpKaxatYr09HRSU1NrNIIQz3/5VYXqD1c81u/urF27lkWLFrF8+XJ++OGHMteryV/eb7yxPQ89tBv77/8rN9zwJZ9+WgxUPnIQDWGOHCSQ14HLzGwkcBDwe22Pkm277bYsWrSI9PR0mjZtqiNmIgS5u3r1ahYtWkSbNm1CreWll4Ijau3bB01tBTfGSyjx2NjW+cgBwPLly1myZAnr1q2rUVFr1qyhSZMmNXpvPFD94YrX+hs1asROO+1Ey5Yty12nun95P/wwPPgg9OoFo0e3okmTw0q9Xt7IQbSEOXIQL8xsBNAdaG1mPwC3Ao0A3H0IMBY4FvgOKAQurO1nbvg39eOPPyp3E5Tqj45GjRrRpk2bCnM32oYMgX/+E7p0CW680KpVaKXUuXhsbOt85ACCkK3NP6L8/PxyDxkkAtUfrkSvv6ruvx+uvRZOOglGjgzuLCbhc/c+lbzuwKV1/bnKXdUfpkSvPxrcITcXbr4ZevcOZj9ItrM0Y97YhjFyICLR179/EJZnnAHDh0MUTtsVEZEaKi6Gq64Kjqqdey489VRy5nQYsyKEMnIgItHhHjS0ublw3nnw9NOQkhJ2VSIissHatXDBBTBiBPz733DffYl1N7HqiMdTEUQkQbgHpx488AD07QuPP568YSkikohWroRTT4V33oG774brrku8u4lVhxpbEamR4mK44goYPBguuwwGDVJTKyIST5YtC86lnTYtOPXgoovCrij61NiKSLUVFwe3W3ziiWAOxHvvTe4RABGRRLNwIRx9NMyfDy+/HFzUWx+osRWRalm/Pvir/7//hZtugjvuUFMrIhJPvvoKevaE5cuDOWq7dQu7otjRgUMRqbJ16+Ccc4Km9s47g4eaWhGR6svLyyMzM5MGDRqQmZlJXl5enWz344/hr38N8nrSpPrV1IJGbEWkiv74A846C159Nbii9pprwq5IRCQx5eXllbq9eEFBAdnZ2QBkZWXVeLvjxsEpp8B22wUXi+2yS52Um1A0YisilY4crF4dhOWrr8Ijj6ipFRGpjZycnI1N7QaFhYXk5OTUeJsjR8Lxxwe3yH3//frZ1IJGbEXqvcpGDlavbsDxx8OECTB0KPztb2FWKyKS+BYuXFit5ZV55JFglpquXeH112GLLWpTXWLTiK1IPVfRyMGKFdCvX0cmToRhw9TUiojUhXbt2lVreXnc4dZb4fLL4cQTg1MR6nNTC2psReq9ikYOevaEL7/cguefD+4qJiIitZebm0taWlqpZWlpaeTm5lZ5G0VF8M9/BjPTXHwxvPgiNGlS15UmHjW2IvVceSMEDRu249NP4bbbZnPmmTEuSkQkiWVlZTF06FAyMjIwMzIyMhg6dGiVLxzbcDHvkCHQr18wp3hDnVwK6BxbkXovNze31Dm2AGZpFBfn8tpr0KzZ0hCrExFJTllZWTWaAWHFiuBmCxMmBLcz//e/6762RKYRW5F6btORg4YNM2jYcChvvZVF795hVyciIhssWQI9egTz0z73nJrasmjEVkTIysrisMOyOPxw+PlnePPN+jept4hIPFuwILib2A8/wGuvoYGHcqixFRHmz4fDD4dffgkm9e7SJeyKRERkgy+/DJra1avhvffgkEPCrih+6VQEkXru22/hsMPg999h/Hg1tSIi8eT994P5ac1gyhQ1tZVRYytSj82ZE5xy8McfMHEiHHBA2BWJiMgGb74JRx4J22wTNLh77x12RfFPja1IPfXFF3+eR5ufD/vuG2o5IiJSwnPPBbMf7LUXTJ0KmZlhV5QY1NiK1EPTpwdX1jZpApMnQ4cOYVckIiIbvPBCW84/Pxh8mDgRtt027IoShxpbkXrmww/hiCOC2y5Ongzt24ddkYiIQHCL3H794LHHduW002DsWGjRIuyqEosaW5F6ZNIkOOqo4K//yZNhp53CrkhERADWr4e+feGee+CEExYxciQ0bhx2VYlH032J1BPvvgsnnhicpzV+PGy/fdgViYgIBNN49ekTzE97663QrdtcUlLSwy4rIWnEVqQeGDMGjj8+OO0gP19NrYhIvPjtNzj6aHj9dXj4YbjttmBqL6kZjdiKJLlXXoEzz4SOHWHcONh667ArEhERCO70eMwxwdSLzz8PZ50VdkWJT42tSBIbNQqysqBz5+AihC23DLsiEREB+N//gruJLV4czFfbs2fYFSUHNbYiSerZZ+Gii+Cvfw1CU1fWiojEhxkzgpHa9ethwoRg8EHqhs6xFUlCQ4fChRfC4YfDW2+pqRURiReTJgXz06amBrfIVVNbt9TYiiSZhx+Gv/8devWCN96AtLSwKxIREYBXXw0uFEtPD26Ru+eeYVeUfNTYiiSR++6DK66Ak08OLhpr0iTsikREBOCpp+DUU2G//YKR2h13DLui5KTGViQJuMOdd8J11wUzIIwaFRzmEhGRcLnD3XcHN1846qhgHnHNThM9amxFEpw73HQT3HILnHce5OVBo0ZhVyUiIsXFcM01cMMNcPbZwVy1zZqFXVVy06wIIgnMPQjNBx8MRgMefxwa6M9VEZHQrVsXzEwzfHhwithDDymfY0GNrUiCKi4OwnLwYLjsMhg0SKEpIhIPVq2C008PZqXJzQ1GbHU3sdhQYyuSgIqKgpkPnnoqGLG9916FpohIPPjlFzjuOPj44+AoWnZ22BXVL2psRRLM+vXBHLXDhwfn1t5xh5paEZF4sGhRMJ3X3Lnw4otwyilhV1T/6MClSAJZty64AGH4cOjfP5gJQU2tVIWZHWNm35jZd2bWr4zXtzCzN8zsCzObbWYXhlGnSKL65hs45BBYuBDefltNbVg0YiuSIP74I5jK67XX4P774eqrw65IEoWZpQCDgaOAH4BpZva6u88psdqlwBx3P97MtgG+MbM8d18bQskiCWX69OCmOA0aQH4+7L9/2BXVXxqxFUkAq1fDSScFTe0jj6iplWrrDHzn7vMijepI4MRN1nGghZkZ0Bz4BVgf2zJFEs9770GPHtC8OUydqqY2bGpsReLcqlXBhQjjxsETT8Cll4ZdkSSgdOD7Es9/iCwr6RFgT+BHYBZwpbsXx6Y8kcT0wgtw7LGw007BLXLbtw+7IgnlVAQzOwYYBKQAT7r73Zu8vgUwHGhHUOP97v5MzAsVCdmKFdC7dxCYzz4L554bdkWSoMo6E9s3eX40MAM4HNgFeNfMprj78lIbMssGsgHatGlDfn5+nRe7wcqVK6O6/WhT/eGKdv2vvbYDgwa1Z++9f2fAgC/59tv1fPtt3Wxb+77mYt7Y6lwvkar57Tc45hj49FMYMQLOOCPsiiSB/QCUvDN9W4KR2ZIuBO52dwe+M7P5wB7AJyVXcvehwFCAAw44wLt37x6tmsnPzyea24821R+uaNXvHsxGM3BgcDRt1KgtSUv7a51+hvZ9zYVxKoLO9RKpxLJlcMQR8Nln8NJLamql1qYB7c1sJzNLBc4CXt9knYXAEQBm1gbYHZgX0ypF4lxREVx+Odx2G5x/PoweDWlpYVclJYVxKkJZ53odtMk6jxCE7o9AC+BMnesl9cXixXDUUfDtt8HFYr16hV2RJDp3X29mlwHjCE4Be9rdZ5vZJZHXhwB3AsPMbBbBqQvXu/vS0IoWiTNr18J558GoUboxTjwLo7HVuV4hUP3hqmr9S5emcvXV+7J4cRNyc2fRtOlvhP1t15d9n+zcfSwwdpNlQ0p8/SPQM9Z1iSSClSuDeWnffTdoaK+9NuyKpDxhNLY61ysEqj9cVal/4ULo2ze4HeM778Bhh+0Xk9oqUx/2vYhIeZYuDWY++OwzePrp4M6PEr/COMdW53qJbGLePDjsMPi//9vQ1IZdkYiILFwIf/0rzJoVnE+rpjb+xXzEVud6iZT27bdw+OHBTRgmTIBOncKuSERE5syBnj2D0xDeeQe6dg27IqmKUOax1bleIoHZs4PZD4qLYeJE6Ngx7IpEROTDD4M5xBs3hkmTYN99w65Iqkp3HhMJyRdfQPfuwVW1kyapqRURiQdvvQVHHgmtWgU3x1FTm1jU2IqEYNq04N7iTZvC5Mmw555hVyQiInl5cMIJsNtuQVO7885hVyTVpcZWJMY++CAYDdhyy6Cp1b3FRUTC95//wDnnBBeL5edDmzZhVyQ1ocZWJIYmTQouRmjTJmhqMzPDrkhEpH5zh5tugiuvhJNPDk5F2GKLsKuSmlJjKxIj774b3EUsIyNocNu2DbsiEZH6ragILrkEcnPhb3+DF1+EJk3CrkpqQ42tSAx8+GErjj8+OO0gPx+23z7sikRE6rc1a+CMM2DoULjxRnj8cUhJCbsqqa1QpvsSqU9Gj4ZbbtmbffcN5kJs1SrsikRE6rfly+Gkk4JpFgcODE5DkOSgEVuRKBo5MhgR2H33Fbz3nppaEZGayMvLIzMzkwYNGpCZmUleXl6Nt7V4cTDV4pQpMHy4mtpkoxFbkSh59lm46KLgCtvrr5/JllvqtjUiItWVl5dHdnY2hYWFABQUFJCdnQ1AVlZWtbY1b15wAe9PP8HrrwfXPUhy0YitSBQMHQoXXBDcKvettyAtrSjskkREElJOTs7GpnaDwsJCcnJyqrWdmTPh0EPh119h/Hg1tclKja1IHfvPf+Dvf4djj4U33oC0tLArEhFJXAsXLqzW8rJMmQKHHRZcHDZlChx8cF1VJ/FGja1IHbr33uB8rZNOglde0bQxIiK11a5du2ot39QbbwSnH2y3XXCDnA4d6rI6iTdqbEXqgDvccQdcfz2cdRa88AKkpoZdlYhI4svNzSVtk0NfaWlp5ObmVvreYcOCmy7svXcwUlvFXlgSmBpbkWoq6+rcm26CW2+F888PrrJt1CjsKkVEkkNWVhZDhw4lIyMDMyMjI4OhQ4dWeuHYyJE7cuGF0KMHTJgA22wTo4IlVJoVQaQayro694ILslm/Hv72tyyGDIEG+nNRRKROZWVlVXkGBHe47jp4/PFdOOMMeO45aNw4ygVK3NCvYJFqKOvq3PXrC2nRIofHH1dTKyISpvXrg2kW778fTjppEc8/r6a2vtGvYZFqKO8q3JUrF2IW42JERGSjwsLgfNphw+C22+CKK+bW6Ba5dXkzCIk9NbYi1VDbq3NFRKTu/fYbHH00jBkDjz4aXPNQk8GGDaebFRQU4O4bbwah5jZxqLEVqYY77sglJaVmV+eKiEjd+/HHYI7ajz8ObmP+j3/UfFt1dTMICY8aW5Eq+uMPGD06i6KioWy1VfWuzhURkbo3d25wN7F582DsWDjjjNptry5uBiHh0qwIIlWwejWccgq8/TY88kgWl16qRlZEJEyffRbcFre4GCZOhAMPrP0227VrR0FBQZnLJTFoxFakEqtWwXHHwbhx8OSTcOmlYVckIlK/TZwI3bsHd3ecOrVumlqo3c0gJD6osRWpwPLlcMwxkJ8Pzz4LF18c28/X1bkiIqWNHh3k8o47BrfI3X33utt2TW8GIfFDpyKIlOPXX4Pw/PRTGDGi9uduVVdZN4PIzs4GUMiKSL30xBNwySXQuXMwA0KrVnX/GdW5GYTEH43YipRh2TI48kj4/HN46aXYN7Wgq3NFRDZwhwEDIDs7mNbrvfei09RK4tOIrcgmFi8Omtq5c+G114KLE8Kgq3NFRIKLw/79bxg0CM45B55+Gho1CrsqiVcasRUpYdEi6NYtmDpmzJjwmlrQzSBERNatg/POC5raf/0ruNZBTa1UpNLG1szOikUhImFbuDBoahctCqb1OuKIcOvR1bn1l3JXJJiR5oQTIC8vOA3hgQeggYbjpBJV+SfynJlNMLMOUa9GJCTz5gV3rlm6NDh3q2vXsCvS1bn1nHJX6rVly4LBhXfeCS4Yu+GGmt0iV+qfqjS2nYBGwOdmdr+ZNY9yTSIx9c03QVO7YgVMmAAHHRR2RX/KyspiwYIFFBcXs2DBAjW19YdyV+qt778PBhdmzICXX4a+fcOuSBJJpY2tu89y965ANnAO8I2Z9Yl6ZSIxMHt2cPrB2rXBXLX77x92RSLKXam/vv46uEXuhlPCTjop7Iok0VT5bBV3fxbYHXgV+K+ZTTSzvaJVmEi0zZgR3LmmQQOYNAn22SfsikRKU+5KffLJJ/DXvwYDDZMmBfksUl3VOg3b3X9390uBA4HWBIfJHjCzFlGpTiRKpk2Dww+Hpk1h8mTYc8+wKxIpm3JX6oN33w0yeYstglvk7rdf2BVJoqpSY2tmjcyss5ldYWbPAy8DexHMg3sp8LWZnRDFOkXqzPvvBxclbLll0NTuumvYFYlsrq5z18yOMbNvzOw7M+tXzjrdzWyGmc02s0l18o2IVGLUKOjdO8jiqVOVyVI7VZnu6wNgOfAh8ACwG/AGcCbQFtgWGAm8ZGaXRK9UkdrLzw/uWrPddkFTm5kZdkUim6vr3DWzFGAw0AvoAPTZdMYFM9sSeBQ4wd33Ak6vq+9HpDyDB0OfPnDwwUE+b7992BVJoqvKncdWAncB7wMfufuqMta52swWAzcCQ+qwPpE68847cOKJsPPOMH580NyKxKm6zt3OwHfuPg/AzEYCJwJzSqxzNjDa3RcCuPuS2n0LIuVzh9tugzvuCOaqHTkyODVMpLYqbWzdvWcVtzUZuLt25YhEx5tvwqmnwh57BPPUbrNN2BWJlC8KuZsOfF/i+Q/AphPb7QY0MrN8oAUwyN2f23RDZpZNMFsDbdq0IT8/v4qlVt/KlSujuv1oU/1lKyqC//ynPa+/ns4xx/zEFVd8y8cfe51/TiLv/0SuHcKtvyojtlX1BcEIgEhcefllOOus4GKEceOgVauwKxKpM1XN3bKmtt+0k2hIMH/uEUBT4EMz+8jdvy31JvehwFCAAw44wLtH8dL1/Px8orn9aFP9m/vjDzj3XHj9dbj+erjrru0xi875B4m8/xO5dgi3/jprbN19NcE5YCJxY8SIIEQ7d4a33gquuBVJFtXI3R+AHUs8bwv8WMY6SyOnPawys8nAvsC3iNSBFSvg5JODU8Huvx+uvjrsiiQZ6a7LkrSeeQaysoJ5EceNU1Mr9do0oL2Z7WRmqcBZwOubrPMa0NXMGppZGsGpCl/FuE5JUv/3f8F0Xvn58OyzamolekJpbDXtjETb44/DRRfBkUfC2LHQQjN+Sj3m7uuBy4BxBM3qC+4+28wu2TCrgrt/BbwNzAQ+AZ509y/DqlmSx4IFwQDD7Nnw2mtw3nlhVyTJrC7Psa2SEtPOHEVw6Guamb3u7nNKrLMlwbQzx7j7QjPbNtZ1SuIaNAiuuiqYF/Gll6BJk7ArEgmfu48Fxm6ybMgmz+8D7otlXZLcvvwymGKxsDC4CcOhh4ZdkSS7MEZsN0474+5rCeZi3PTiB007IzVyzz1BU3vyyTB6tJpaEZGwvP8+dO0afD15sppaiY2Yj9iiaWdCkez1u8Nzz2UwbNhOHH74Yv75z6/54IO6nz6mphJ5/ydy7ZD49YskojFj4PTToW3bYA5x3QxHYiWMxlbTzoQgmet3h5wcGDYMLrgAnnyyDSkpbWJZXqUSef8ncu2Q+PWLxKu8vDxycnJYuHAh7dq1Izc3l6ysLIYPD7J4332D2Wi21cmEEkNhNLaadkbqjHtwde1DD0F2Njz2GDTQXB8iIlGVl5dHdnY2hYWFABQUFJCdnc1bb0FeXhY9esCrr0LLluHWKfVPGC2App2ROlFcDJdeGjS1l18OQ4aoqRURiYWcnJyNTe0GhYWF5OXlcNppwUitmloJQ8xHbN19vZltmHYmBXh6w7QzkdeHuPtXZrZh2pliNO2MbKKoKBihffppuO46uPtusLJOchERkTq3cOHC8l5h5EhISYlpOSIbhXEqgqadkVpZvz44fysvD265BW67TU2tiEgstWvXjoKCgjKXq6mVMOnArSSUdeugT5+gqR0wAG6/XU2tiEis5ebm0rRpWqllaWlpDBiQG1JFIgE1tpIw/vgDTjstuOnCgw/CDTeEXZGISP10xBFZtG49FMjAzMjIyGDo0KFkZWWFXZrUc6GciiBSXX/80YATT4Rx42DwYPjnP8OuSESkfpo3D3r2hGXLsnj77SyOPjrsikT+pBFbiXurVsENN+zDO+/Ak0+W3dTm5eWRmZlJgwYNyMzMJC8vL/aFiogkuRkz4JBD4NdfYfx41NRK3NGIrcS15cvh2GPhiy+25Lnn4JxzNl+nvPkUAR0WExGpI5Mnw/HHB9N4TZwIe+4ZdkUim9OIrcStX3+Fo46Cjz+Gm2+eU2ZTC+XPp5iTkxODKkVEkt9rrwWnH+ywA3zwgZpaiV8asZW4tHRpEKKzZwcXi22xxf+Vu2558ymWP8+iiIhU1TPPQN++cOCBMGYMbL112BWJlE8jthJ3Fi+G7t3hq6+CUYITT6x4/Xbt2lVruYiIVM4d7rkHLroIjjwS3ntPTa3EPzW2ElcWLYJu3WD+fHjzTTjmmMrfk5ubS1ra5vMp5uZqPkURqX/q4mLa4mJ47LFd6NcPzjoL3ngDmjePQrEidUyNrcSNggI47LCguX37bTjiiKq9Lysri6FDh5KRofkURaR+23AxbUFBAe6+8WLa6jS369YFd3d88cUdueyy4IY4qanRq1mkLqmxlbjwv/8FTe2yZcHhrq5dq/f+rKwsFixYQHFxMQsWLFBTKyL1Um0vpi0shJNPhv/+Fy68cD7/+Q80UKcgCUQXj0novvkGDj88uLPYhAmw//5hVyQikphqczHtr7/CccfBhx/CkCGw++4FmO1U1yWKRJX+DpNQffllcE7t+vXBvIhqakVEaq6mF9MuWhQcNZs+HV54Af7+92hUJxJ9amwlNDNmBLMfpKTApEmwzz5hVyQikthqcjHtt9/CoYfCggXw1ltw2mlRLlIkitTYSig++QR69IBmzYK72eyxR9gViYgkvupeTPvpp/DXvwbn1ubnB6eFiSQynWMrMff++9CrF7RuHZx+kJERdkUiIskjKyurShfQTpgQzBO+9dbwzjuw224xKE4kyjRiKzE1cSIcfTRsvz1MmaKmVkQkDC+9FAwwZGYGgw1qaiVZqLGVqCo5UXibNpn07JlHZmZwTm16etjViYjUP0OGwBlnBLfInTxZWSzJRaciSNRsmCh8w5yKS5YUYJbNZZfBdttpnlkRkVhyh/794ZZboHfvYPaDTa4zE0l4GrGVqClronD3Qu6+u2oThYuISN0oLoYrrgia2nPPhVdeUVMryUmNrURNbSYKFxGRurF2LWRlwSOPwNVXw7Bh0KhR2FWJRIcaW4maVq1qNlG4iIjUjZUr4YQTYORIuOceuO8+3SJXkpv+eUtUPP44LFuWS4MG1ZsoXERE6sbSpXDEEfDuu/DUU3DddWAWdlUi0aXGVurcoEFwySVw/PFZPPVU1ScKFxGRurFwIXTtCl98AaNHw0UXhV2RSGxoVgSpU/fcA/36wamnwvPPQ2pqFhdcoEZWRCRW5swJ5gtfvhzGjYNu3cKuSCR2NGIrdcIdbrstaGrPPjs4nys1NeyqRETql48+CkZq160L5qhVUyv1jRpbqTV3uPFGuP12uPBCeO45aKhjASIiMTVuXHBO7VZbwQcfwL77hl2RSOypsZVacYd//xvuvjs4r/bJJyElJeyqRETqlxEj4LjjglvjTp0KO+8cdkUi4VBjKzVWXAyXXgoDB8KVV8Kjj2oaGRGRWHv44WCe2kMPhfx82G67sCsSCY/aEKmRoiLo2xceewyuvx4eekjTyIiIxJI73HxzcEexE0+Et9+GLbYIuyqRcKmxlWpbvx7OOw+eeSa4PeNdd6mpFYl3ZnaMmX1jZt+ZWb8K1jvQzIrM7LRY1ifVU1QE//gH9O8fDDK8+CI0aRJ2VSLhU2Mr1bJ2LfTpE0zlddddwQVjampF4puZpQCDgV5AB6CPmXUoZ717gHGxrVCq448/4Mwzgxvh3HgjDB2qC3ZFNtCPglTZmjVwxhnwxhvBqQdXXRV2RSJSRZ2B79x9HoCZjQROBOZsst7lwMvAgbEtT6pq+XI4+WSYMAEefBD+9a+wKxKJL2pspUoKC4Mw/f/27j/a6rrO9/jz7Q8MUkcGkgri4FVv2oSsvFxpmZNIy1FwzGXayuHkZGJnYHSuZTUwUBLTcDWXrdAl5D2Dpk4nHCfJUBEF8ZiKPyhL/BUFslCyLJKxkJBfn/vH52DH4wH2gbP3d/94Ptbaa+0f37P3iw37w/t89+fzed93X14kNmlS0Ykk9cBg4KVOt9cBozofEBGDgbOBMeymsI2IFqAFYNCgQbS3t/d21jdt3LixrM9fbr2df8OGA5k8+TheeOGdTJ26kg996BXK+fb4/henlrNDsfktbLVHGzfCxz+eV9vecIOtGaUa1N2EodTl9ixgckppe+xmflFKqRVoBRg5cmQaPXp0L0V8u/b2dsr5/OXWm/nXrIGWFli3DhYsgHHjjgWO7ZXn3hXf/+LUcnYoNr+FrXbrtdfgjDPg0UfhP/4jbykjqeasA97X6fYQ4OUux4wEbu0oagcC4yJiW0rpjook1C49/XRukfunP8GSJXDiiUUnkqqXha12acOGPJj+9Ke5Re4nP1l0Ikl7aTlwdEQcAfwKOA8Y3/mAlNIRO69HxE3AXRa1xXv4YTjzTOjXDx56CD74waITSdXNXRHUrfXrYcwYeOopmD/folaqZSmlbcAl5N0OngduSyk9GxETI2Jisem0K3feCaeeCocfDo88YlErlcIztnqbV17J/cZXr85zuU47rehEkvZVSmkhsLDLfdfv4tgLKpFJu3bzzTBhAnzoQ7BwIbzrXUUnkmpDIWds3Si8ev3qV3DyyXmhwsKFFrWSVGnf/CZccAGMHp239bKolUpX8cLWjcKr19q18NGPwssvw733wimnFJ1IkhpHSrlF+Ze+lKd/3X03HHJI0amk2lLEGds3NwpPKW0Bdm4U3tXOjcJ/W8lwjWr16lzUvvoqLF4MJ51UdCJJahzbtuXWuFddlfcJnzcPDjqo6FRS7SmisO1uo/DBnQ/otFF4t/O/1LtWrsxF7euvw/33w6hRe/4ZSVLv+NOf4Jxz4MYbYfp0mD0b9t+/6FRSbSpi8VivbRRuB5zS7Sr/mjXv5ItfHAHAN7/5FH/4w+tl7WSzt+r1/a8FtZwdaj+/6tt//3dugPPww3DddXDxxUUnkmpbEYVtr20Ubgec0nWX/8kn4ctfhr5985naY46p3vbw9fj+14pazg61n1/169e/htNPh+efz1MPPvWpohNJta+IwtaNwqvA44/nAfXQQ/Oq2yOPLDqRJDWO1avhb/4mb6941135uqR9V/HCNqW0LSJ2bhS+P3Djzo3COx53Xm2ZPfwwjBuXt5BZuhSamopOJEmN46c/hbFj84KxpUvhhBOKTiTVj0IaNLhReHGWLs3tGYcMydcHD97zz0iSekd7e55Te9hh+foxxxQcSKozttRtIIsWwRlnwBFHwIMPWtRKUiX94Ad5CtiQIbBsmUWtVA4Wtg3ikUcGcNZZeSBtb4d3v7voRJLUOObOhXPPzS1yH3ooF7eSep+FbQP4/vdh+vS/YsSIPP1g4MCiE0lSY0gJrrgCPve53KJ8yRIYMKDoVFL9srCtc21teQuZY4/9I0uWQP/+RSeSpMawYwdcdhlMnQrNzfDDH8I731l0Kqm+WdjWse98B84/P3cVu+qqFRx6aNGJJKkxbN0KV155DLNmwaWXwi23wIEHFp1Kqn8WtnXq+uvhwgvh1FPh7ruhb9/tRUeSpIbw+utw1lmwePG7mTkTvvUt2M//baWK8KNWh2bNgkmT8rZeP/wh9OtXdCJJagyvvppPKNx7L3zpSyuZOhV20xleUi8rZB9blc83vgFTpsA558D3vgd9+hSdSJIaw7p1eYHY6tV50W7//r8G3l90LKmheMa2TqQEX/taLmrHj4dbb7WolaRKWbkSPvIReOkluOceOPvsohNJjcnCtg6kBP/yLzBjBnz2s3mRwgGei5ekPWpra2PYsGHst99+DBs2jLa2th4/x/LlcNJJsHlzbn5zyillCCqpJJY/NS4l+MIX4JprYOJEmD3bRQqSVIq2tjZaWlrYtGkTAGvXrqWlpQWA5ubmkp5j8eJ8dvbww+G+++Coo8oWV1IJLIFq2I4d8I//mIvaSy+FOXMsaiWpVNOmTXuzqN1p06ZNTJs2raSfv+223Kb8yCPhkUcsaqVqYBlUo7ZvhwkT8rZekyfn7WRceStJpXvxxRd7dH9nc+bAeefBqFF5+sF73tPb6STtDQvbGrRtW268cNNNecHYFVdY1EpSTw0dOrRH90Oe/jVjBlx8Mfzt3+bpB4cdtufX6o25vJL2zMK2xmzZks8SzJuXC9rp0y1qJWlvzJw5k35dNvru168fM2fO7Pb47dvhkkvyCYXPfAbmz4e+fff8Ojvn8q5du5aU0ptzeS1upd5nYVtDNm/O+9PefnueejBlStGJJKl2NTc309raSlNTExFBU1MTra2t3S4ce+ONvJXinDnw5S/nluWl7j6zr3N5JZXOXRFqxKZNeeXtffflgXXSpKITSVLta25u3uMOCH/8I3ziE7BkCVx1VS5se2Jf5vJK6hnP2NaAjRvzytvFi+GGGyxqJalSfvc7+NjH4IEH8lnanha1sHdzeSXtHQvbKvfaa7lF40MPwXe/CxdeWHQiSWoMa9fCX/81PP00/OAHcMEFe/c8PZ3LK2nvWdhWsQ0b4NRT4Ykncovc8eOLTiRJjeHZZ3OL3N/8Jn9bduaZe/9cPZnLK2nfOMe2Sq1fn4va557LK2/3ZVCVJJXu0Ufz9K93vAN+9CM47rh9f85S5vJK2neesa0infc5fO97h/HMM20sWGBRK0mVcs89eU7tgAG5m1hvFLWSKscztlWia8/yrVvXctBBLaxfD+Bv+ZJUbm1teR7t8OG5wB00qOhEknrKM7ZVort9Dt94w30OJakSrrkGPv3pvFisvd2iVqpVFrZVopL7HNraUZKylOArX4HPfz7vVbtwIRx6aNGpJO0tpyJUgZ//HCKGktLatz3W2/scdp3ysLO1I+DCBkkNZfv2vC/4v/87tLTk5jf77190Kkn7wjO2BXv6aTj5ZDj44Jm84x3l3+fQ1o6SlFuUf/KTuaj9ylfg+ustaqV6YGFboCefhNGjc7/xJ55oZu7c8u9zaGtHqTFFxOkRsTIiVkXElG4eb46IFR2XZRExooiclfDaa3D66bnpwjXXwNe/DhFFp5LUG5yKUJDHH88D66GHwtKlcOSR8P73l3+fw6FDh7J2bfmnPEiqHhGxPzAbOBVYByyPiAUppec6HbYGODmltCEixgKtwKjKpy2vV16BsWPzt2VtbTa+keqNZ2wL8PDDufnCgAF58+8jj6zca9vaUWpIJwCrUkovpJS2ALcCZ3U+IKW0LKW0oePmY8CQCmcsuxdeyN3EVq6EO++0qJXqkYVthS1dCqedBu99Lzz4IDQ1Vfb1be0oNaTBwEudbq/ruG9XJgD3lDVRha1YkYvaDRvg/vvzN2aS6o9TESpo0SI4+2w46ihYsqS4fRJt7Sg1nO5mkKZuD4w4hVzYnrSLx1uAFoBBgwbR3t7eSxHfbuPGjb3y/CtW/AVTpw6nb9/tXH31U2zevIkyxn5Tb+UvivmLU8vZodj8FrYVsmBBXoH7gQ/A4sUwcGDRiSQ1kHXA+zrdHgK83PWgiDgOmAuMTSn9vrsnSim1kuffMnLkyDR69OheD7tTe3s7+/r8CxbA5Mn527H77juAoUNP6J1wJeiN/EUyf3FqOTsUm9+pCBXwX/8F55wDI0bkqQgWtZIqbDlwdEQcERF9gPOABZ0PiIihwHzg/JTSLwrI2Ou+853cdGH48Ly2wTWyUv2zsC2z734XzjsPRo3K0w/69y86kaRGk1LaBlwC3As8D9yWUno2IiZGxMSOwy4HBgBzIuJnEfHjguK+2R1xzJgxe90d8aqr4MILYcwYTyhIjcSpCGV0ww3wuc/lvWoXLICDDy46kaRGlVJaCCzsct/1na5fBFxU6Vxd7Wt3xB078tSDq6+GT30KbrkF+vQpa2RJVcQztmUyZw5cdFHeAeHuuy1qJakU+9IdcevWfJb26qvhkkvge9+zqJUajYVtGXzrW3DxxXDmmXDHHdC3b9GJJKk27G13xE2b8lqGm2+GGTPg2mthP/+HkxqOH/tedsUVcNllcO658P3vw0EHFZ1IkmrHrrog7q474oYN+duxu+7K35ZdfrktcqVGZWHbS1KC6dNh6lRoboZ58/wKTJJ6qqfdEV9+GU4+Obcp/8//hEmTKpFSUrUqpLCNiNMjYmVErIqIKd083hwRKzouyyJiRBE5S5USTJkC//qveX7XzTfDAS7Lk6Qe60l3xF/+MncTW7MGFi7Me4VLamwVL78iYn9gNnAqedPw5RGxIKX0XKfD1gAnp5Q2RMRY8mbgoyqdtRQpwec/n+dzTZoE113nvC5J2hc7uyPubpP3J5/8c1vcBx6AkSMrl09S9SqiBDsBWJVSeiGltAW4FTir8wEppWUppQ0dNx8jd8mpOjt25GL22mtzcTt7tkWtJJXbAw/kbRT79cuNFyxqJe1UxBfmg4GXOt1ex+7Pxk4A7unugSJ7lm/fDldf/X4WLXoP48ev5eMfX8ODD5bt5feZfaeLVcv5azk71H5+vdXtt8P48XD00XDvvTB4cNGJJFWTIgrb7taqpm4PjDiFXNie1N3jRfUs37oVPvMZWLQobyvz1a82EdFUttfuDfadLlYt56/l7FD7+fVnra0wcSJ8+MN5B4S//MuiE0mqNkV8cb4OeF+n20OAl7seFBHHAXOBs1JKv69Qtj3asiW3yJ03D6680m1lJKncUoJ/+zf4h3+AsWNze3KLWkndKaKwXQ4cHRFHREQf4DxgQecDImIoMB84P6X0iwIydmvzZvjEJ2D+fJg1K7dtlCSVz44deQ3DV78K55+fm9502Q1Mkt5U8cI2pbQNuAS4F3geuC2l9GxETIyIiR2HXQ4MAOZExM8i4seVzrlTW1sbw4YNY8yYMfTvP4y7727j29+GSy8tKpEkNYatW4NPfzov0L3sMrjpJjjwwKJTSapmhey2mlJaCCzsct/1na5fBFxU6VxdtbW10dLS8mbf8s2b19KnTwuHHALw9j0VJUm94/XXYdq04Sxfnqd9/fM/O+1L0p65OdVuTJs27c2idqctWzYxbdq0ghJJUmM4/3z4yU/6M3dunvZlUSupFPbH2o0XX3yxR/dLknrHjBlw/PHPMGHC8KKjSKohnrHdjaFDh/bofklS7xg+HE46qWo2xJFUIyxsd2PmzJn067L8tl+/fsycObOgRJIkSdoVC9vdaG5uprW1laamJiKCpqYmWltbaW524ZgkSVK1cY7tHjQ3N9Pc3Gz3IkmSpCrnGVtJkiTVBQtbSZIk1QULW0mSJNUFC1tJkiTVBQtbSZIk1QULW0mSJNUFC1tJkiTVBQtbSZIk1QULW0mSJNUFC1tJkiTVBQtbSZIk1QULW0mSJNUFC1tJkiTVBQtbSZIk1QULW0mSJNUFC1tJkiTVBQtbSZIk1QULW0mSJNWFSCkVnaFXRMTvgLVlfImBwPoyPn+5mb9YtZy/lrND+fM3pZTeVcbnr1qOu3tk/mLVcv5azg4Fjrt1U9iWW0T8OKU0sugce8v8xarl/LWcHWo/fyOr9b878xerlvPXcnYoNr9TESRJklQXLGwlSZJUFyxsS9dadIB9ZP5i1XL+Ws4OtZ+/kdX63535i1XL+Ws5OxSY3zm2kiRJqguesZUkSVJdsLDtIiJOj4iVEbEqIqZ083hExLUdj6+IiOOLyLkrJeRv7si9IiKWRcSIInJ2Z0/ZOx33vyNie0ScW8l8e1JK/ogYHRE/i4hnI+LBSmfcnRL+7fxFRNwZEU915P9sETm7ExE3RsRvI+KZXTxe1Z/bRue4WxzH3WI57pZBSslLxwXYH1gN/A+gD/AU8IEux4wD7gEC+DDweNG5e5j/RKB/x/Wx1ZK/lOydjlsKLATOLTp3D9/7w4DngKEdtw8vOncP808FvtFx/V3Aq0CforN35PkocDzwzC4er9rPbaNfHHerO3un4xx3i8nvuNvDi2ds3+oEYFVK6YWU0hbgVuCsLsecBdySsseAwyLiPZUOugt7zJ9SWpZS2tBx8zFgSIUz7kop7z3APwG3A7+tZLgSlJJ/PDA/pfQiQEqpmv4MpeRPwCEREcDB5AF2W2Vjdi+l9CNynl2p5s9to3PcLY7jbrEcd8vAwvatBgMvdbq9ruO+nh5TlJ5mm0D+baoa7DF7RAwGzgaur2CuUpXy3v9PoH9EtEfETyLi7yuWbs9KyX8dcCzwMvA0cGlKaUdl4u2zav7cNjrH3eI47hbLcbcMDij3C9SY6Oa+rttGlHJMUUrOFhGnkAfYk8qaqHSlZJ8FTE4pbc+/vFaVUvIfAPwv4GNAX+DRiHgspfSLcocrQSn5TwN+BowBjgQWR8RDKaU/lDlbb6jmz22jc9wtjuNusRx3y8DC9q3WAe/rdHsI+beknh5TlJKyRcRxwFxgbErp9xXKtielZB8J3NoxuA4ExkXEtpTSHRVJuHul/ttZn1J6HXg9In4EjACqYYAtJf9ngStTnjy1KiLWAMcAT1Qm4j6p5s9to3PcLY7jbrEcd8uh0pONq/lCLvRfAI7gzxO5/6rLMWfw1snQTxSdu4f5hwKrgBOLztvT7F2Ov4nqWsRQynt/LHB/x7H9gGeADxadvQf5vw18reP6IOBXwMCis3fKN4xdL2Ko2s9to18cd6s7e5fjHXcrn99xt4cXz9h2klLaFhGXAPeSVyvemFJ6NiImdjx+PXlV6DjyILWJ/NtUVSgx/+XAAGBOx2/g21JKI4vKvFOJ2atWKflTSs9HxCJgBbADmJtS6nablEor8f3/OnBTRDxNHqgmp5TWFxa6k4iYB4wGBkbEOmA6cCBU/+e20TnuFsdxt1iOu2XK1VFVS5IkSTXNXREkSZJUFyxsJUmSVBcsbCVJklQXLGwlSZJUFyxsJUmSVBcsbCVJklQXLGwlSZJUFyxsJUmSVBcsbNWQIuKoiNgaETO63P/tiPhjRBTeFUiS6onjrirBwlYNKaW0CpgLfCEiBgJExOXAhcDZKaUfF5lPkuqN464qwZa6algR8W5gNTAH+DnQCvxdSum2QoNJUp1y3FW5HVB0AKkoKaXfRMQs4Ivkz8L/cXCVpPJx3FW5ORVBje6XwEHAoyml2UWHkaQG4LirsrGwVcOKiDHA/wMeBT4SESMKjiRJdc1xV+VmYauGFBHHA3eQFzKMBl4E/m+BkSSprjnuqhIsbNVwIuIo4B7gPuCfUkpbgBnAuIj4aKHhJKkOOe6qUtwVQQ2lY0XuMvKZgtNSSm903L8/8AywIaV0YoERJamuOO6qkixsJUmSVBeciiBJkqS6YGErSZKkumBhK0mSpLpgYStJkqS6YGErSZKkumBhK0mSpLpgYStJkqS6YGErSZKkumBhK0mSpLrw/wGFDFxmbht9aQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.optimize import minimize\n", "\n", "def line_fit(x, line_coeffs):\n", " return line_coeffs[0]*x + line_coeffs[1]\n", "\n", "def cost_fun(line_coeffs, x, y, norm):\n", " if norm=='two':\n", " return sl.norm(y - line_fit(x, line_coeffs), 2)\n", " elif norm=='one':\n", " return sl.norm(y - line_fit(x, line_coeffs), 1)\n", " elif norm=='max':\n", " return sl.norm(y - line_fit(x, line_coeffs), np.inf)\n", " else:\n", " raise ValueError('check your norm string')\n", "\n", "degree = 1\n", "poly_coeffs = np.polyfit(xi, yi, degree)\n", "p1 = np.poly1d(poly_coeffs)\n", "\n", "# set up figure\n", "fig = plt.figure(figsize=(10, 10))\n", "ax = fig.add_subplot(221)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(poly_coeffs[0], poly_coeffs[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('polyfit linear best fit line', fontsize=12)\n", " \n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'two'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(222)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (two-norm)', fontsize=12)\n", "\n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'one'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(223)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (one-norm)', fontsize=12)\n", "\n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'max'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(224)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (max-norm)', fontsize=12)\n", "\n", "\n", "plt.tight_layout(pad = 2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that our code recreates the `numpy.polyfit` result when we choose the two-norm. Note also that we get slightly different results when we use the one-norm or the max-norm.\n", "\n", "These results are all equally valid. The fact that `numpy.polyfit` implements the two-norm without giving us the ability to change the norm highlights that so-called \"least squares\" fitting is by far the most common approach, but there may be situations where the other norms are beneficial.\n", "\n", "Let's see what happens when we perturb a single entry - this is motivated by a situation where maybe one of our sensors failed and gave a spurious result." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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2K5fvx7nHIceeig1apR/AHvz5s3Ur18/DJWFn2qPvFio28zYunUra9asAVDISpVT7qr2SIqFupW7VafaT0XYuHEjjRs3rlC4isQj5xxJSUk0bdqUX3/91e9yJA4pd0UKU+5WnWqfKnl5edSsWdPvMkSiTp06ddi5c6ffZUgcUu6KFE+5W3nVvrEF7y8lESlMPxcSTvr/JbIn/VxUnhpbEREREYkLamxFREREJC6osRURERGRuKDGVko0depU/vGPf9C0aVOccwwbNiyk5w0YMID27dvToEEDGjRoQKdOnfj4449L3L5Pnz4457j11lsLluXl5fHwww/TokULateuTYsWLXjooYfYtWtXwTZ9+/bluOOOo0GDBuy///6cf/75LFq0qMJfb2UNHDiwoN4OHTowbdq0Kn1Oce8TeJeyufPOO0lOTqZOnTqceOKJzJo1q9A25f2eiIg/lLvlo9yVotTYSolycnI4/PDD6d+/P3Xq1An5ec2aNePJJ5/km2++Yfbs2Zx22mlceOGFLFiwYI9tZ86cyZAhQ2jfvn2h5U8++SQDBgzghRdeYOnSpfTv358BAwbQt2/fgm2ysrK45ZZbmDFjBpMmTWKvvfbijDPO4Pfff6/4Fx3k2muv5dFHHw1p21GjRnHHHXfw4IMPMnfuXE488US6detGdnZ2lTynpPcJoGfPnowfP57XX3+dhQsXctZZZ3HGGWcUXA8Ryvc9ERH/KHeVu1JJZhb3jw4dOlhJvv322xLXhWLTpk2Ven5FNW3a1J599tlCyxYsWGC1atWyxYsXh7SP8tRet25de+2118pTYiENGza0QYMGFVq2ceNGa9mypU2cONE6d+5svXr1Klh37rnnWo8ePQpt36NHDzv33HNLrH3z5s1Wo0YN++CDDwqWvf3225aYmGgrV64sWHb77bdby5Ytbd26daXWfM0111jv3r1D+vo6duxoPXv2LLTskEMOsfvvv7/QsuC6Q31Oae9Tbm6uJSQk2NixYws955hjjrH09PRSay7ue1JU8M/H5MmTS902moWzdmC2RUHORdtDuVs85a5yV7lbeaXlbrW/81hRd94J8+aFvn1eXh0SEir3mkcdBf36le85nTp12uOwx5133knPnj1p27ZtoeV9+vShT58+pe7vk08+4ZRTTilfESHIy8tj9OjR5OTkcOKJJxZal5aWxiWX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ZmZ25ZVXWs+ePUvcX/fu3e2MM84otOyGG24w779RyY4//nh7/PHHCz5PTk62p59+usz6L7/8crvhhhuKXbdp06Yynx+NYq3u4J+PyZMn+1dIJYWzdmC2RUHORdtDuavcjRaxVrdyt2yl5a5GbCupWbNmxS5v3rx5WF+3Q4cOeyybNGkSZ555Js2aNaN+/fpcdNFF7Nixg3Xr1gHe4ajvv/+etWvXkpWVxSmnnEKXLl3IysoCYMqUKXTp0qXE11yyZAmdOnUqtKzo51u2bOHee++lbdu2NGzYkHr16jF79myys7NL/Xry8vLIyMigffv27LffftSrV4/33nuvzOeJSPWj3FXuipREjW0l9e7dm6SkpELLkpKSyMjICOvr1q1bt9Dnq1at4txzz6VNmzaMHj2aOXPm8OqrrwJ/neTQpk0bGjduTFZWFllZWZx66ql07dqVL774gm+//ZY1a9aUGrDeH0mlu/vuuxk9ejSPP/44U6ZMYd68eXTs2LHMEy2eeeYZnn32We655x4mTpzIvHnzuPDCC3WChojsQblbmHJX5C97+V1ArLvsssuoXbs26enpZGdn07x5czIyMkhNTY1oHbNnz2bHjh08//zzJCQkABQ6eWC3zp078/HHHzN79mzeeOMNUlJSaNSoEU899VSp87wA2rZty8yZMwstK/r59OnT6dGjBxdffDHgzeH64YcfaN26dcE2iYmJ5OXl7fG8888/n6uvvhrwwvz7779nn332Cf1NEJFqQbmr3BUpiUZsq0BqaiorV64kPz+flStXRjxcAVq1akV+fj79+vXjxx9/ZOTIkfTr12+P7bp06cKoUaNo1aoV+++/P+CF7ogRI0odNQC4/fbb+fzzz+nbty/Lli1jyJAhjBkzptA2rVu3ZsyYMXzzzTcsXLiQq666im3bthXaJiUlhWnTprFmzRrWr19f8LyJEycyffp0li5dyq233sqPP/5Y8TdEROKacvcvyl2Rv6ixjRPt27enf//+PPfcc7Rt25ZXXnml2Itxd+3alby8vEJhWtyy4pxwwgkMHTqUl156ifbt2/Pee+/x6KOPFtrmueee44ADDuCUU06hW7dunHDCCZxyyimFtnnsscf46aefOPjggwtC/qGHHqJjx45069aNU089lbp16/ryi0pEJFTKXZHo40KZvxPrjj32WNt9aZWilixZQps2bSq8782bN1O/fv0KP99Pqj3yYq3u4J+PrKysMn8JR6tw1u6cm2Nmx4Zl5zFMuVs81R55sVa3crdspeWuRmxFREREJC6osRURERGRuKDGVkRERETighpbEREREYkLamwJ7QLYItWNfi4knPT/S2RP+rmovGrf2CYkJLBz506/yxCJOlu3bqVmzZp+lyFxSLkrUjzlbuVV+8Z2n3324ZdffiE/P9/vUkSigpmRm5vLmjVrOOCAA/wuR+KQclekMOVu1an2t9Rt1KgRq1ev5rvvvqvQ87dt20bt2rWruKrIUO2RFyt116xZk8aNG9OgQQO/S5E4pNxV7ZEUK3Urd6tGtW9sa9SoQfPmzSv8/KysLI4++ugqrChyVHvkxWrdIlVJuavaIylW65aKqfZTEUREREQkPqixFREREZG4oMZWREREROKCGlsRERERiQtqbEVEREQkLqixFREREZG4oMZWREREROKCGlsRERERiQtqbEVEREQkLqixFREREZG4oMZWREREROKCGlsRERERiQtqbEVEREQkLqixFREREZG4oMZWREREROKCGlsRERERiQtqbEVEREQkLqixFREREZG4oMZWREREROKCGlsRERERiQtqbEVEREQkLkRVY+uce9U596tzblEJ67s45/50zs0LPB6JdI0iIvFEuSsi8WQvvwsoYhjwP2B4KdtMM7PzIlOOiEjcG4ZyV0TiRFSN2JrZVOB3v+sQEakulLsiEk+cmfldQyHOuRTgIzM7vJh1XYB3gdXAWuBuM1tcwn7SgDSAxo0bd3jrrbfCUm9OTg716tULy77DTbVHXqzWDaq9JF27dp1jZseGZecRotyNHNUeebFaN6j2kpSau2YWVQ8gBVhUwroGQL3Ax+cAy0LZZ4cOHSxcJk+eHLZ9h5tqj7xYrdtMtZcEmG1RkJ2VeSh3I0e1R16s1m2m2ktSWu5G1VSEspjZJjPLCXw8DqjpnGvkc1kiInFLuSsisSSmGlvnXBPnnAt83BGv/g3+ViUiEr+UuyISS6LqqgjOuZFAF6CRc2410BuoCWBmg4BLgJudc7uArcAVgSFpERGpAOWuiMSTqGpszax7Gev/h3dZGhERqQLKXRGJJzE1FUFEREREpCRqbEVEREQkLqixFREREZG4oMZWREREROKCGlsRERERiQtqbEUkrn3zDWzYkOh3GSIi1Yaf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e/YstOyQQw6x+++/v8Tn5ObmWkJCgo0dO7bQ8mOOOcbS09MLPn/ggQfsxBNPLPX1N27caC1btrSJEyda586drVevXiXWXrduXXvttdf22Mfbb79tiYmJtnLlyoJlt99+u7Vs2dLWrVtX6utfc8011rt371K32S3U96qk97yk+ot64oknbO+997YtW7YUWl7ae1We+ooK/vmYPHlymfVFq3DWDsy2KMi5aHsod4tXntpDzYXdysqBsnK3d+/e1q5duxLXb9q0qcxtzGI/d88991zr0aNHoWU9evSwc889t1z7KU7Dhg1t0KBBpW6j3C1bablb7e88VtSdd8K8eaFvn5dXh4SEyr3mUUdBv37le06nTp32OLx/55130rNnT9q2bVtoeZ8+fejTp0+p+/vkk0845ZRTCj7fsWMHc+bM4e677y603VlnncWMGTNK3M+uXbvIy8ujdu3ahZbXqVOH6dOnF3w+duxYzj77bC6//HImT57M3/72N3r27EmvXr0KLneSlpbGJZdcwmmnncZjjz1Wav0lueSSS3jyySd54oknGDJkCM888wwjR47kiy++oHHjxhXaZ1EVfa/Ky8wYOnQoV111FUlJSYXWlfZeRao+kYpS7laNsjIzlNxdsWIFTZs2JTExkeOPP54+ffrQsmXLQvspa5tYz92TTz6ZgQMHsnTpUg477DC+/fZbJk2axAMPPFDhfebl5TF69GhycnI48cQTK1WflC7ija1z7iBgONAEyAcGm1n/Its4oD9wDpALXGtm3wTWnR1YlwC8Ymb/jWD5UaNTp04MHDiw4POxY8cyd+5c3n777T22vemmm4o9dJ2Tk0O9evUAaNq0aaF169evJy8vb48Qaty4MZ9//nmJddWvX59OnTrxxBNPcPjhh9OkSRNGjhzJl19+ySGHHFKw3YoVKxg4cCB33XUX999/P/PmzeO2224D4NZbb2XIkCEsX76cN954I4R3o2TOOfr06cO5557LwQcfTEZGBpMmTaJVq1aV2m+wir5X5TVhwgR+/PFHevbsWWh5We9VpOqT6KXcrRrhzt3KCCUzy8rd448/nmHDhnHYYYfx66+/8sQTT3DiiSeyePFi9ttvP4CQton13L3vvvvYvHkzbdu2JSEhgV27dpGens4tt9xS7n0tXLiQTp06sW3bNurVq8eYMWM44ogjKlWflKGkodxw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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#perturb one of the entries\n", "\n", "yi[8] = 2.\n", "\n", "degree = 1\n", "poly_coeffs = np.polyfit(xi, yi, degree)\n", "p1 = np.poly1d(poly_coeffs)\n", "\n", "# set up figure\n", "fig = plt.figure(figsize=(10, 10))\n", "ax = fig.add_subplot(221)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(poly_coeffs[0], poly_coeffs[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('polyfit linear best fit line', fontsize=12)\n", " \n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'two'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(222)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (two-norm)', fontsize=12)\n", "\n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'one'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(223)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (one-norm)', fontsize=12)\n", "\n", "x0 = poly_coeffs\n", "output = minimize(cost_fun, x0, args=(xi,yi,'max'))\n", "# use poly1d to turn the coeffs into a function, p1, we can evaluate\n", "p1 = np.poly1d(output.x)\n", "ax = fig.add_subplot(224)\n", "ax.margins(0.1)\n", "x = np.linspace(0., 1, 100)\n", "ax.plot(x, p1(x), 'b', label=r'$y = {0:.4f}x+{1:.4f}$'.format(output.x[0], output.x[1]))\n", "plot_raw_data(xi, yi, ax)\n", "ax.legend(loc='best', fontsize=14)\n", "ax.set_title('Best fit (max-norm)', fontsize=12)\n", "\n", "\n", "plt.tight_layout(pad = 2.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you compare the resulting slopes of the best fit lines, between this case with the outlier with the previous slopes without the outlier, you should see that the one-norm is by far the least impacted while the max-norm is the most impacted.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Tomography example - rank and null space\n", "\n", "In the lecture we introduced the following problem as an example of a ***mixed-determined*** problem motivated by stright ray tomography.\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", "0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 0 \\\\\n", "\\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\\n", "0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1\n", "\\end{pmatrix}\n", "\\begin{pmatrix}\n", "x_1\\\\\n", "x_2\\\\\n", "\\vdots \\\\\n", "x_9\n", "\\end{pmatrix}\n", "=\n", "\\begin{pmatrix}\n", "T_1\\\\\n", "T_2\\\\\n", "\\vdots \\\\\n", "T_6\n", "\\end{pmatrix}\n", "$$\n", "\n", "\n", "\n", "We saw a $4\\times 4$ version of this problem in an earlier lecture.\n", "\n", "To arrive at this simplified version of the problem, we will assume a body containing nine uniform blocks of \n", "unit size, arranged in a $3 \\times 3$ grid, with values labelled 1 to 9 starting top left, and we will only consider ray paths that are perpendicular to the block boundaries so that refraction can be ignored and all the ray paths are straight. Imagine the slightly smaller version of this problem:\n", "\n", "\n", "\n", "\n", "Now, let the slowness of each block be $x_j$, let's simplify by assuming that the size $h=1$, and the total travel time across the model be $T_i$, then the following equations relate the travel times to the slownesses \n", "\n", "$$\\begin{align*}\n", "T_1 &= x_1 + x_2 + x_3\\\\\n", "T_2 &= x_4 + x_5 + x_6\\\\\n", "& \\vdots \\\\\n", "T_6 &= x_3 + x_6 + x_9\n", "\\end{align*}\n", "$$\n", "\n", "Given the six measurements, the inverse problem is to determine information \n", "about the nine slownesses $x_1, \\ldots x_9$.\n", "\n", "The equation of condition for this system is \n", "\n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\\n", "0 & 0 & 0 & 1 & 1 & 1 & 0 & 0 & 0 \\\\\n", "\\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\\n", "0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 & 1\n", "\\end{pmatrix}\n", "\\begin{pmatrix}\n", "x_1\\\\\n", "x_2\\\\\n", "\\vdots \\\\\n", "x_9\n", "\\end{pmatrix}\n", "=\n", "\\begin{pmatrix}\n", "T_1\\\\\n", "T_2\\\\\n", "\\vdots \\\\\n", "T_6\n", "\\end{pmatrix}\n", "$$\n", "\n", "
\n", "\n", "We can see here why the matrix $G$ is sometimes called the *sensitivity matrix*. \n", "\n", "The element in the $i$-th row and $j$-th column gives the sensitivity $\\partial T_i/\\partial x_j$ of the $i$-th measurement to a change in the $j$-th model variable. \n", "\n", "So, for example, the sixth measurement is only sensitive to $x_3$, $x_6$ and $x_9$, and it is equally sensitive to each of these variables. \n", "\n", "Note that when $\\partial T_i/\\partial x_j=0$ a change in the slowness $x_j$ will not affect the value of the travel time $T_i$, thus we can find no information about the value of $x_j$ from the measured value of $T_i$.\n", "\n", "
\n", "\n", "Let's suppose that there are no errors in the observations, and suppose further than the travel time for all six observations, i.e. along every row and every column, is equal to 6 units ($T_i=6\\; \\forall i$). \n", "\n", "Then clearly a homogeneous \"model\" (or solution vector), for which the slowness is each of the nine blocks is 2 will satisfy the data exactly. We can write this as \n", "\n", "$$\n", "\\begin{pmatrix}\n", "2 & 2 & 2 \\\\\n", "2 & 2 & 2 \\\\\n", "2 & 2 & 2\n", "\\end{pmatrix}\n", "$$\n", "\n", "\n", "However, note that the following solutions also satisfy the data exactly \n", "\n", "$$\n", "\\begin{pmatrix}\n", "1 & 2 & 3 \\\\\n", "2 & 2 & 2 \\\\\n", "3 & 2 & 1 \n", "\\end{pmatrix},\\quad\n", "\\begin{pmatrix}\n", "-2 & 0 & 8 \\\\\n", "-2 & 6 & 2 \\\\\n", "10 & 0 & -4 \n", "\\end{pmatrix},\\quad\n", "\\begin{pmatrix}\n", "1 & 2 & 3 \\\\\n", "2 & 2 & 2 \\\\\n", "3 & 2 & 1 \n", "\\end{pmatrix},\n", "$$\n", "\n", "we've reordered the 9 solution values which we write as a column vector when specifying our linear system into $3\\times 3$ matrices here so you can more easily map them onto the 2D physical solution domain.\n", "\n", "The following are also solutions\n", "$$\n", "\\begin{pmatrix}\n", "2+\\alpha & 2-\\alpha & 2 \\\\\n", "2-\\alpha & 2+\\alpha & 2 \\\\\n", "2 & 2 & 2 \n", "\\end{pmatrix}, \\quad\n", "\\begin{pmatrix}\n", "2 & 2 & 2 \\\\\n", "2 & 2+\\beta & 2-\\beta \\\\\n", "2 & 2-\\beta & 2+\\beta\n", "\\end{pmatrix},\\quad\n", "$$\n", "where $\\alpha$ and $\\beta$ are arbitrary constants.\n", "\n", "\n", "In this problem therefore, there are infinitely many model parameters that satisfy the data. \n", "\n", "Some of these may not satisfy other constraints on the model parameters - for example, the slowness cannot be negative. \n", "\n", "But even with external constraints, in a problem such as this there will still be infinitely many models that satisfy the data exactly. \n", "\n", "
\n", "\n", "**Questions**\n", "\n", "Use `numpy` to compute the rank of this matrix. What dimension do we expect the null space to be?\n", "\n", "Starting from the last two of these example solutions, can you figure out an appropriate number of linearly independent vectors that span the the null space of $G$?\n", "\n", "Can you find a basis for the null space?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Tomography example - solution via the pseudo-inverse\n", "\n", "In class we introduced the concept of the data potentially containing errors, i.e. if instead of all data values being 6, consider the case with\n", "\n", "$$ \\boldsymbol{T} = (6.07, 6.07, 5.77, 5.93, 5.93, 6.03)^T $$\n", "\n", "We stated tht now, even though there are fewer data than model parameters, there is no model that fits the data exactly. We can see this because it should be the case from $G$ that\n", "\n", "$$ T_1 + T_2 + T_3 = T_4 + T_5 + T_6$$ \n", "\n", "whereas for this data\n", "\n", "$$ T_1 + T_2 + T_3 = 17.91, \\qquad T_4 + T_5 + T_6 = 17.89 $$\n", "\n", "so that, with these data, there can be no solution. \n", "\n", "

\n", "\n", "Use the pseudo inverse computed using `np.linalg.pinv` to find a solution. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homework - Damped least squares applied to the tomography example\n", "\n", "Consider again the tomography example from the previous exercise with noisy data.\n", "\n", "Now try solving this problem using the damped least squares approach and show that as $\\mu$ tends to zero we recover the same solution as found in the previous question using the generalised inverse." ] } ], "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.13" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": true, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": true }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }