{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import division\n", "#from sympy import *\n", "import numpy as np\n", "from numpy.linalg import *\n", "import time\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "def fixfloat(vec):\n", " return list(map(lambda i: '%0.4f' % i, vec))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This week we focus on the question how to calculate the binary clustering of a 1D dataset $S$ sampled from an unknown distribution f(x). We try to approximate f(x) by using the function\n", "\n", "$$f_N(x) = \\sum^N_{j=1} v_j \\varphi_j(x) \\approx f(x)$$\n", "\n", "where $N$ is the number of used basis functions.\n", "\n", "For the following exercises we will use the training dataset: \n", "$$S = [(0.1,1),(0.2,1),(0.3,-1),(0.35,1),(0.4,1),(0.55,-1),(0.6,-1),(0.65,-1),(0.7,-1),(0.8,1)]$$\n", "where the first element of our tuple is the variable $x_i$ $\\in [0,1]$ und the second is the label $y_i$ $\\in \\{-1,1\\}$.\n", "\n", "{\\bf Hint:} If not specified otherwise, the domain considered from now on is the unit interval $\\Omega = [0,1\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 1: Interpolation-like classification" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/pymodules/python2.7/matplotlib/collections.py:548: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", " if self._edgecolors == 'face':\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "S = [(0.1,1),(0.2,1),(0.3,-1),(0.35,1),(0.4,1),(0.55,-1),(0.6,-1),(0.65,-1),(0.7,-1),(0.8,1)]\n", "#S = [(0.1,1),(0.2,1),(0.8,1)]\n", "#vector with 1D features\n", "xVec = [s[0] for s in S]\n", "#vector with labels of the training data\n", "yVec = [s[1] for s in S]\n", "#plotting training data\n", "plt.scatter(xVec, yVec)\n", "\n", "#extended x and y Vectors which are fixed to 0 at the boundaries\n", "xVecExtended = np.zeros(len(xVec)+2)\n", "xVecExtended[1:-1]= xVec\n", "xVecExtended[-1] = 1\n", "yVecExtended = np.zeros(len(yVec)+2)\n", "yVecExtended[1:-1]= yVec\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1a)\n", "Draw the individual hat functions" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#construct the hat functions for each interval\n", "for i in range(len(xVec)): #loop over all basis functions\n", " #get left border of support x_1\n", " if i == 0:\n", " x_1 = 0\n", " else:\n", " x_1 = xVec[i-1]\n", " #get right border of support x_3\n", " if i == len(xVec)-1:\n", " x_3 = 1\n", " else:\n", " x_3 = xVec[i+1]\n", " xHat = [x_1,xVec[i],x_3]\n", " yHat = [0,1,0] #0 at borders 1 at center\n", " #plot hat\n", " plt.plot(xHat,yHat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1b)\n", "Datermine the coefficients of the basis functions and plot the resulting scaled hats + resulting function f_n(x)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD/CAYAAAD/qh1PAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXlc1NX6x98z7CCiiCgioLgxmJqmlpqGmmnu4u36q1tp2XJbb7e05bZZN7vZbrfdFq3u7VqCu+VS4lJqbpXG4ILKLu4IDOvM+f0xzDjALN8ZZhjA8369eDnzPc/3nMOAD+f7nOd8HpBIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikbiRq4HNVq7/HThY07YZ6NmYk5JIJBKJe3gc+B342Urbl0D/xp2ORCKRSKyhbsC9R4FkQGWl7SrgH8A24MkGjCGRSCQSL9MF2GHl+rNAOOAHrAEmNOKcJBKJRGJBQ1b09lgInAOqgLXIMI5EIpF4DV8P9BmGMXafCOiAUcCndY26desmMjMzPTC8RCKRtGgyge7O3OCOFb2o+fdm4G6gCGNcfjOwFWP2zfd1b8rMzEQI0Wy/nn/+ea/PQc7f+/O43OYu5+/9L6Cbs066oSv6E8DQmtdfW1z/us57iUQikXgJT8XoJRKJRNJEkI7eRZKSkrw9hQYh5+89mvPcQc6/OWItB76xEDXxJolEIpEoRKVSgZO+2xNZNxKJROIy4eHhnD9/3tvT8Dpt27bl3LlzbulLruglEkmTQqVSIX2D7c/BlRW9jNFLJBJJC0c6eolEImnhSEcvkUgkLRzp6CUSicQJ7rvvPuLj43n22We9PRXFyM1YiUTSpGjqm7E+Pj7k5OTQqVMnj44jN2MlEonECwwfPhwhBOPGjWP79u1WbdLS0hg2bBi33347AwYMoHfv3qSlpTXuROsgHb1EIml2zJs3D5VKVe9r3rx5iu1t2dpj27ZtgNGZX3vttTbtfvnlF+bMmcO+ffuYPXu2S2O5E+noJRKJxM3ExcXRt29fAPr37++2g0+uIh29RCKRuJmgoCDz66aw5yA3YyUSSZOiKThGe6jVas6cOUN4eLjV9rS0NB566CEOHDhg9b1S5GasRCKReIkaR2u3va6No3s8jVzRSySSJkVTX9E3Fu5c0Uv1SolEInGS//u//+PQoUNW25YuXUrPnj0beUb2kSt6iUTSpJAreiMyRi+RSCQSxUhHL5FIJC0c6eglEomkhSMdvUQikbRwpKOXSCSSFo509BKJROIiy5YtY+TIkXZtXnzxRVatWtVIM7KOdPQSiaTFsG/fPiZNupmRI6ewePEXTSJN88cff6Sqqsqrc5AHpiQSSbNACMFnny1mxYqNdOzYjueee5yYmBhze3p6OiNGjKW09Dkgil9+eZri4hIeeuj+Wv2Ul5eTn59Px44dCQ4Odnoezz33HP/9739p164d3bt3B+DIkSPcf//9lJaWkp+fz5VXXsnSpUv55JNP2Lt3L3PnzsXX1xeNRsMDDzxQzy4gIKBBn01TRkgkEkldbPmG559/SQQH9xHwhfDxeUq0a9dZFBYWmtvnzHlCwNMCRM3XzyI29opafWzevFm0bh0pQkJiRVBQG5GSkurU3FasWCF69+4tSkpKRHV1tZgyZYpISkoSc+fOFf/5z3+EEEJUVVWJvn37itRUY99JSUkiJSVFCCGs2pnalH4OgNOPKTJ0I5FImgWvv/4WOt0K4Db0+pcpLb2OZcuWKb6/tLSUyZP/zMWL/6W0NIuysk3cdtvdFBQUKO5j06ZNTJ8+nZCQEHx8fJg9ezYACxYsoF27drz22mv89a9/JT8/n5KSEvN9oiaEZM2utLRU8fiu0tDQzdXAK0Dd3YhJwLNANfAZ8EkDx5FIJJc5BoMeCDS/FyIQvV5vfn/HHbfzwQfXUVoaCUQRHPwMc+b8zdyenZ0NtAFG11y5Cj+/RDIyMoiKilI0B7VajcFgML/38fEBjNo3er2eGTNmMGHCBHJycmrtD5jUKx3ZeYqGrOgfBxYBdYNLfsCbwBjgOuAeILIB40gkEgl33HEHwcH/B/yASvVv/P1XM2XKFHN7YmIiW7euZ9KknSQlfcV77z1dKz7fqVMnqqpOAdqaK7lUVmqJi4tTPIdx48bx7bffUlRUhMFg4MsvvwRg48aNPPfcc9x0000A7Nq1y/xHyNfXl8rKSgA2bNhQz666utrFT6RxSAa6AzvqXO8LfGfx/k3gT1budyo2djlQVlYmZs26T7Rp00lERyeIpUu/cWv/RUVFYtq0W0Xr1h1Fly5XiPXr17u1f2fJz88X1103QbRu3UFoNIPF3r177dpnZWWJoUNvEK1bdxB9+gwVBw4caKSZSoQwxqdjYjQiLCxK3HLLbFFaWuqRcWz5hurqajFv3nxx5ZXXiRtuSHbp57948RciKChChIVdL4KCIsWCBW863ceCBQtE9+7dxaBBg8Rdd90lRo4cKT744AMRHx8vhgwZImbMmCHuvPNO8Y9//EMIIcTChQtFdHS0WLJkiXj//fdt2tXF1ueACzH6hqpXdgG+BoZYXLsWeBD4v5r3LwDZwKd17q2Zs8TEnXc+wP/+l0NZ2TtANkFBM9i0KYWhQ4cCsH37dhYsWFDvvmHDhvHkk0/Wu17XfteuvZw964PB8BcgieDg29i9ewuJiYme+pZsIoSgd+/BHDkyhurqB4DNtG49hyNHficy0vgAuHz5cj777DOz/Y8/bqWsLAq4G5WqDW3bziMz8yBt2rRp9Plfbuzdu5fhw8dTVvY10J3AwEeZOjWMr7+u+9+64XhavfLEiRNkZGQQHx/f5OSELWnqevRFQKjF+1DgvAfGaXGsWrWGsrKngCBgBGVl97BmzTqzoy8oKGDNmjX17gsMDKx3zZ49V38P2gfRV/yJTZs2ecXRFxYWcvz4caqrJ8Od+fDfGxCiH7t27WLSpEkAHDt2zMr8i5lJKEvFLKqrl7Bv3z5GjRrV6PO/3Pj++++prJxJN2KZwre8Wf4Oa9Zc6e1puUSXLl3o0qWLt6fRqHjC0WcAPYC2QCkwAnjNmuG8efPMr5OSkkhKSvLAdJoPwcGtOHt2DsZI11f4+WXQtu1A9w7iD4w5AP6L8d13nLCwa9zbv0JatWqFXl8GfmPhllTYORJDlp6wsDC794UQwix6UUYOa/V5Du0l7iEsLAw/v1+5W7+IJ3iV3/DhYEhrb0/rsiAtLY20tLQG9eGO0M1/gaHAzUArjBu0E4HnMG72fgp8YOVeGbqpw9NPP83LL/8M/AcwEBU1kj/++IW2bdsCkJ+fz969e+vdFxUVxcCB9f8g1LXfsGETH2z7FP31BlSl/vRK686+fdtqVaxvTObOfZrXU/8Hn34Kr75KUpmaH35YhVptzBHIzMwkPT3dbP/RR5+Tt6GIZ6vmgqqKL8d9Tera/3i9HuflwMWLF+nX9xo2ZuewWFzFnWxjQmxn1vz4I926dXPrWLLwiBF3hm5khakmxMyZM/nii4FAAcHBf2XVqjaMHu3eVdOo90cRXBjMFp8t7LprF4mdGj9sYyIrK4sud9wBzz1HwIoVlLz+Or6+th8yhRCsfXAtxduKCVOH0Wd2H2IeirFpL3EvxT//jJg4kekDBjDrhx/IB9aPHs3GjRvd+sdWOnojssJUC6SqqoqVK1djTGZK4c9/9mPjRvc6+bKqMvZd3Mfnj3/OjCtn8H3W927t31nOnDkDsbGQmUlAjx52nTwYf8E1wRqG3jyUYR8OI/f1XAyVBrv3SNzH6lmz2BEVRXi7djwC3AZc+OEHFi9e7OWZSRwhHX0TIS0tjaKinsB5YmPLeeCBjqSkGA9yu4uNxzYyIGoA7UPaM10znVRtqvs6d4HTp09Dly6wbRtVnTopuqc0vZRgTTBh14QR1COIwq8KPTtJCQAXLlzgiiNHeDE9nRUrVnDrI4/wGMa47BOPPsrJkye9PUWJHaSjbyJ0796dIUNeIyJiK8nJyVx1lYrKSvjjD/eNkapNJVmTTGZmJsW/F7M3Zy+7M3a7bwAnCQgIICghgU65uVSGhlJmccrRFjqtDnUXNZs2beLHTj/yxz/+QOjlY76nOb5hA+0xHprp2bMn8+fPZ2fXruQBsy9c4OGHH3bbWG3btkWlUl32X6a9ueaO0wcVWjIGgxDx8ULs3y9ERUWFEEKIRx4R4oUX3NN/ZXWlCF8QLnKLcsW4ceOMhy6SEXd9dJd7BnCBKr1eBG7ZIkqqq0XvXbvE/osX7dpX66rFlsAtYslnS0yHRsSXbb4UJ/97spFmfPnyy5/+JN6v+cz//Oc/CyGE2Lhxo4gFcUalEt+9/baXZ3j5gBQ1a778/rvx3379wN/fH4Dp0yElxT39p51Io2e7nkS3jkaj0RgvauHHgh/dM4ALHC8vp4OfHyE+PmhCQtDqdHbtdYd0BHYLZHjScPO1Tyo+IWt+FsIgV/WepMP27ZgCfabfn+uvv54XPv+coJdfZlxqKhjkfklTRTr6JkJqKiQng2XywpAhUFgIR4+6oX9tKskJycCl/6gchRx9DufKzjV8ABfQ6nRoQkKMcwoOduzotTpCNCF06dKFzp07A7ClbAvl+nLOrDrj8fletuTk0ObsWdJq3pp/f4BZs2YRPHcuVFbCokVemZ7EMdLRNxFMjt4SHx+YOhWWL29Y33qDnhWHVjBNMw2w+I9aBcGFwaw+tLphA7iIVqcjsabwg1JHH6wJRqVSMWLECPP1o1cfJXt+tkzJ8xQrVqCePJnUVatYsGAB11xT55Cdjw988gk88wzk5XlnjhK7SEfvZaqrqzl8GM6dg6uvrt+enNzw8M2O3B1EhkTSPdxYDcdyRabbq2NZunJNb3eiLS1FU+PoE0NC0DrQ5TY5eqCWo19TtAZ9qZ7zG6XShkdISaHV7bczadIkHn/8cetqj717wwMPGL/kH9wmhywl6GWef/55PvkkgtjYoRw/HlHvlOHIkXDkCOTmQk20wmlStalM10w3v2/Xrh0TJkwgKiqKLgldWJC1gOKKYkIDQu304n52FRYy/OJFsqqq6BYVRWZ5OdUGA75q6+uP0vRSYp+OBWDkyJHcdNNNDB8+nJEjRxLxawRZL2URfkN4Y34LLZ9Tp+DXX+GGGxzbPvUUon9/Vtx6Kwd69eK5557z/PwkTR5vb157HYPBIHr16iVgl4CRYsWKFVbtbr9diH//2/Ux4t6KEwcKbUu6jvtqnFh6cKlrA7iIwWAQqrVrBaGhAhCFhYUifscOkWFD+lZfpRdpAWmiWldts31H/A5xfst5T0778mPRIiFqsmwcUVhYKG7r3l3kgWjv4yN+/fVXD0/u8gSZddO80Gq1HDqkA+IJCtrDDTZWTcnJxhi+K+wr2Ie/jz+92/e2aZOckEyK1k3pPQrJLitDlJdDcTEA4eHhxji9jfBNeWY5AdEB+AT5WG1X+6qJfTKWrPlZHpvzZYm1zSMbREREkNWpE8uAV/R67rrrriZfVONyQTp6L5KamgpMA1YxYcJYm+JiN9wA+/bB6dMujFFzSMqeFsmUhCmsP7qe8upy5wdwkV8KCyE7GzA6eV9fX7splqXaUnN83hYdb++ILl3Hxd0X3T7fy5ILF2D7dhg/XpG5Wq3m448/5kV/f0YDYXv2sHDhQs/OUaII6ei9iNHRG7Vtpk+fbtMuKMjo7FetcmGMjNrxeWtEhkRyZccr2Zi50fkBXGT/2bOQZVx9t2/fHrCfeWNKrbSHOkBNzNwYuap3F2vXQlISQ8eOZfDgwcyaNcuh1EGvXr149Pnn+SvwEfDyM89w7NixRpmuxDbS0XuJkpISSkpCgH74+W1jvINVkyvhG+1pLSWVJQzs5FjTPlmTTGpG42nf/FFSYnb0ERERgGNHb29FL4RAr9cTdVcUF3depORAifsnfbmRmop+yhT27NnD7t27WbJkCcHB9p+qAObOnUt+377sBD6MjDQX0JZ4D+novUSrVq2YM2cb48er+OKLj2nd2r5S5YQJsG0bFBUpHyNFm0Jygu2wzdq1a5k/fz633norw9sPZ/Wh1VTpq5z5NlwmR62mX9u29OnTh169egFGR5+h01nNh7fl6NetW8ctt9xCbGws//nPf/AJ9iHm7zFk/yvb499Di6a0FDZt4vgVV1BVZfydiI6Odvh7CuDn58enn36KeuFC/lRRQZwrMUdJi8Hbm9deZ+xYIb79Vrn9xIlC/Oc/yu37f9hfbDmxxWb74MGDzZoxP/74oxi8aLDYmLlR+QANoP327SK3vLze9aiffhJZZWW1rhn0BrElZIuoPF9Zz37+/Pnm72H27NlCCCGqiqrEtnbbROlhzxSvvixISRHi+uvFihUrzJ/v9ddf73w/X34pRN++QlTW/9lJXAOZddN8uHABduyAceOU3+NM+Ob4+ePkFecxLGaYTRvLg1Pp6ekkJyQ3inTx2aoqKgwGOtVo+tSak5XwTUVuBb6hvvi18atnb3lwauvWrQD4tvYl+sFosl+Rq3qXqcm2sazwZfn7opi//AWio+H11904OYmzSEfvJVavNh6GatVK+T2TJ8PGjeBAKQAwZttM6TUFH7Xt+Kjlf1ytVkuyJpnlGcsxCM+KU2lLS0kIDrYaUrKWYqnT6ghOtB4bHjRoEAEBAQAcOXLEvFnY+eHOnFl+hvKsxsskajFUVsK6dTB1KocPHzZfdsnRq1TwwQfwxhtw6JAbJylxBunovYQT6clm2rWDQYNg/XoF/WcY0yrtkZh4qYygVqulR7setA9uz46cHc5NzEm0Op1Z+qAu1lIs7aVWBgQE1NJe2bZtGwB+4X5E3R1F9mtyVe80P/wAiYkQFcUnn3xCZmYmq1evdpgwYJO4OHjuOcpnzuTOWbMocmajSeIWpKNvZM6ePcuTT/6TTZv0TJzovCaIkvBNQXEB2tNaRnUdZdeu7ooearJvPBy+sVStrDcnK6EbR6mVw4cbZYvVajVHLaQ+Yx6N4dR/TlFRUOGGWV9GWKxCfHx8iI+PZ+LEidY1bhTyRWgov+/ejd+SJTzxxBPumqlEIdLRNzKrVq1iwYLfKCnZxL33/tnp+6dONaY3V1batlmesZwJPSfg71M/Bm5J165d+etf/8pbb73F559/jhCCZI3xlKzwoDCVVqej6sgRtm7dilarNWd1gG1Hby+18rbbbmPdunWcO3eOp556ynzdv4M/HW7rQO6bue7/Jloqej2sXAnTprm126BWrbjDYOAlYPVHH5n3UyQtH29vXnuFiRMnCviPgHvEa6+95lIfQ4cK8d13tttHLxktUtNTXerbYDCI7u90F3vz97p0vxLifv5ZdBwwwJzNceLEiVrjh23dKk7VVNkSQojtEdtFeX79DB0llGWXiW1tt4nKMzLrQxGbNwsxYIDbuzUYDGLy5MnieRArQPTs0UOU1cmukigDmXXTtCkuLmb9+jTgRmAFyc4G6WuwF745qzvL7vzdjO0+1qW+VSqVR7NvSqqrKayq4lxNqAguHZgyjZ9oEaevPF2JocqAf0f7Tye2CIwJJCI5gtyFclWvCFc2jxSgUql4//33eS80lB5A3yNHePHFF90+jsQ60tE3ImvXrqWqajhwgCuv7ER8fLxL/UybZny6tlZLe/Xh1YyJH0Own+MTjLbwZJz+UFkZ3QICqCwrAyAoKIiQOvF6y/CNKT5vT6vHEbFPxpL3fh7VRVJgyy4GQy1HX1RU5NYQXnR0NC+99hqzgYWAFJRuPKSjb0SM2jbTgVSXV/MA8fHQqRP89FP9thRtisNsG0cMih7ExYqLaE9rHRs7iba0lC4WTttyNW/CMsXSUXxeCcHdgwkfG07e+7L6kV327IHQUKjZpJ80aRKtW7dm0KBB/G4qatxA7r77bgY//DABt9zCHAe6ORL3IR19IzJv3ksEB99Mnz6ZDXL0YL1weHFFMVtObGFCjwkN6lutUntsVa/V6Yiy2Hw1CZpZYpliWaottZlDb43S0lI2bdqErs6Gbtw/4sh9Oxd9qZXHIImRlBTjL1YNWq2WkpIS9uzZo0j6QAlqtZqFCxfS7sMPjWmcmza5pV+JfaSjb0QKC3uSmBjM77+vpndv2/rwSjDF6S2frNcdWcfwuOGEBYY51dfLL7/MLbfcwoABAyirCal4SuRMq9PRw9+fiRMncs0119CvX796NtZCN0q47bbbaNOmDWPGjGHHjtpnAUJ6hxA2LIz8RfkN/yZaIkLUCtucOXOGM2eMBdeDg4OJjY1173ihofDhh3DvvcpOAEoahHT0jUhKivv2uTQaCAkxPm2b+68RMXOWzz77jK+//pr9+/dzqOb04rWx15JTlMPx88fdM+EatDodN2o0rF69mh07dvDZZ5/Vs4kLDORMVRUl1dVOhW5at25tLnRhLX0v7uk4cl7PwVDh2ZO/zZKDB6G6Gvr3By6dqwCj9LDaRnnHBnHjjXDNNSBLDnoc6egbCYMBli93n6NXqWqHb8qqytiQuYHJvSY73VfdE7IAvmpfpvSawvKM5W6ZL0CVwcDxsjJ6OpC69VGp6BkUhPZUMVVnqgiMC1TUv6XujemErCWhV4XSqk8rTi6RseF6mFYhNfsnlo7eJekDpbz9Nnz1Fdveeotvv/3Wc+Nc5khH30j88gu0bQs1irxuITnZ+P9TCNh4bCMDogbQPqR+zNsR1k7Igvuzb46WlRETGEiAgtWhJiSEzN8vENQzCJWPsowb0wlZgB07dlBp5VRZ3DNxZL+SjaFaruprUSetsqioyFzxzHIh4G7O+/rybpcutH70UR645x6HhU0kruGqo1cDHwI/A5uBbnXa/w4crGnbDPR0dYItgby8PJYtE25PTx4wAKqq4I8/GpZtY8vRj+o6ij9O/0FBcUGD5wqQbkfjpi6JwcGcPlisOD4P0KlTJ7p1M/4qlpeXs8cyrlVD2LAwAmIDOPX1KcX9tniOHDHWqRwyxHxp7ty5lJSUcOzYMWbPnu2xof39/XmzsJB8YPaFCzz88MMeG+tyxlVHPxXwB4YCTwJv1GkfANwGjKz5Osxlil6vZ8CAq1i4MJvjx9+guKYYtjtQqYyLsG9TqlhzeA1TE6a61I8tRx/gG8CEHhNYkbGiwXMFY2qlUkevCQ6mPMP51MoRI0bQoUMHbrrpJrOqZV3ino4j++VshMFzMg/NiuXLjdoadZ601Go1Xbt2pWPHjh4bOiQkhI8XLeKvwGPAb99+y8qVKz02nsQ53gAshVrqHjtMB74FtmH8Q2ANb58kbhS2bdsmoK+ATNG+faSorq52c/9CdL1+g7h60dUu91FcXCwWLlwoNmzYIHJzc2u1paSniOu/cKHghBVu+eMP8Xl+vli3bp1Yt26d2L17t9DpdFZtD5aUiLdGbBGF3xY6NUZJSYkwGAx2bQwGg9gzeI/TfbdYBg8WYmPjFJyxxR133CEeArEFRHRUlLhw4YJX59OUoRElEFoDFy3e6+v09TVwLzAKuBZoWGJ3M8ayAHhy8jS3188cMgROtk3lukj7BcDt0apVKx5++GHGjBlDdHR0rbax3cbyS94vnCs719CpmlUrH374YcaPH8+gQYM4ceKEVdseQUFEHDfg3yvIqTFCQhyfolWpVMQ9HUfWS1keFW9rFuTkwNGjcN11Xp3G66+/zrLISPyA2ysryc6W8tLuxNfF+y4CoRbv1YDl7tZCLv0hWAv0r/m3FvPmzTO/TkpKIikpycXpNE2EEDWOfg1wN8nJL7h/EJUeEpaDdjs4n3DjkBD/EEZ3Hc2qQ6uYdeUsl/sxCMGhmhj9aYsaotYOTAH4VkOHQsjtDG1cHtU27Sa24/izxzm37hztJrTzwAjNhBUrYNIk8KtfvasxCQ8P55333mPb6tXMX7sWVbgUSDCRlpZGWlqaV8ZOBj6veX0NtZ14GJAFhAAqjCEcawXzvP0E5HH27NkjoKeAXBEW1lZUWCgyuottWdtE/Kt9xTXXuL1rM1/99pWY9N9JDerjuE4non/6SVRWVppVK9Vqtc1QVsnBEpESt0V8W+i58Erh/wrF3mv2Ogz1tGiSkoRYtarWpcOHD4sTJ04IvV7vnTk9/7wQkycLcTn/XOxAI4ZulgPlwE8Y4/V/B24G7gaKMMblNwNbMWbffO/iOM2akpISoqMfApYzefJE/K3USG0oqdpUbr1qOocPQ66HBBon9JxA2ok0iitc30g2hW1Mpy3BuIqzFcoq1ZZS1SOgnja9O2n/p/ZUnaviwuYLHhujSXP6NOzfD2PG1Lr8+OOP06VLF0JDQ1m7tt6DuOd56iljJtCyZY0/dgvF1dCNAO6rc80ys+brmq/Lmuuuu46oqOt47bVCBg1yogq4QoQQpGpTWXPLGk5MND6FP/ige/q1jHO3CWzDsNhhrDuyjhlXzHCpT1NqpaWjtxW2AdCl6whMCCLdBUcvhECr1bJ161b27dvHRx99ZDVur/JREftULFnzs2g7qq3T4zR7Vq6EsWMhsPaBNFNBcJ1OR1RUVOPPKyAAPv3UeCJw9GiQYZwGIw9MeZDsbDh+HG66qQPdu3d3e//7Cvbh7+NP7/a9mT7dcYlBe5SXl3PzzTfTr18/OnToUG+TcrpmeoO0b0yplQEBAcyYMYNRo0bVqvVaF51WR+QVofUKhStBCMG1117Lfffdx6JFi8yyDtbo8JcOlGWWUbTjMqxjmppaS8QMoLKykszMTPP7Xu484ecMQ4bA9OlUP/IIb7/9tlnaQtL88GqcqzF4+20h7rjDc/3/Y9M/xBMbnxBCCKHTCREWJsSpU671ZTAYRHh4uDl+np2dXau9sKRQhP0rTJRVuVYVaOjevWLzuXOK7X/p94s4ueOcCNqyRVS7EKudPHmy+Xv5+OOP7drmvp8rfpvwm9NjNGvOnxciNFSIixdrXT548KD5c4uLi/PO3GrYunatyPX1FaPB5WpsLRFkhammRR3VV7cihCBFm8J0jXGAoCC44QZYtcq1/lQqlc2DUwCRIZFc2fFKNmRucGmu9gqC17PXC8oOl9HuilAi/PzIKi93ekxLOQRH9Uk73tGRkn0lFO9332G2Js/atZCUZFSRtMDy5+5J6QMlbPv1V+6qruYj4F/PPluFEiONAAAgAElEQVTrSUPiHNLRe4jCQvj9d2OI0RNoz2gprSplYKeB5msNDd/Yc/RQE75xQfvmVFUVKiBSYQpfeVY5fhF++LbytVosXAmWAmeOHL1PoA8xc2LIfvkyyt22UTLQ19eXq666iuDgYM+KmSlg7ty55Pfty07gqfJy7r33XnnuwUWko/cAixcv5tZbv2XgwNP4+3tGPCtVm0pyQnKtTcbx42HbNihyMdxs+R/btCFnydSEqaw+vJoqfVW9NnuY4vNKywFaShNbVptyhv79+5tLFGZnZ5OVlWXXvtO9nbiw5QKlWufHanbodMaCH5PrH7yYOnUqe/bsobi4mH/+859emNwl/Pz8+PTTT3lUpeJW4MIPP7B48WKvzqm5Ih29B1i0aBGbNoXyww/389VXX3lkjFRtaj0Rs9BQ4wFHVzPiLB29tROrMWExdA/vzpasLU7160zYBmqqSpkcvUW1KWfw8/Pjnnvu4cknn2TdunVERkbatfcJ8aHz3zqT/a/LYFX//fcweLDdbBa1Wk2wQl0iTzJw4EBue/RR5gCfAjutyE9LHONqeqXEBvn5+fz8czowBLV6BuPHf+D2MY6dP0ZecR7Xxl5br81UeeqWW5zvd8iQIWzcuJHExESbaXXJCcmkpKdwffz1ivu1VK1cvXo1lZWVREREMGDAAELrxIjBmFrZ+mpj6TpNcDCLXZSuffPNN52y7/RAJ3Z130XZsTKC4p2TXmhW2AjbNFVefPFFxu7cSQedjo88kL0m8Sxe3rv2DO+9956AWwUsF6NGjfLIGK//9Lq4e9XdVtvOnBGidWshSks9MrQ4fOaw6Ph6R1GtVy7ONnr/frHuzBkhhBB9+vQxZ3Xs3bvXqv3ea/aK81vOCyGEOFVRIcK2bm2006uZT2eKjHsyGmUsr1BRIUTbtkLk53t7Jk5hMBiEOHFCiHbthMhowT8fBSCzbrzPJRGz1AYXALc5Rkb9sI2Jdu1g0CBYv94jQ9OjXQ/aB7dnZ+5OxfdoLVb0jg5MCSFqhW7a+/vjp1Zz0koREU/Q+ZHOnP72NOW5zmf6NAt++AESE8EbB6EagEqlgrg4Y9nBu+82lmyTKEY6ejdSVFREWtoejKKdq5k2bZrbx8gvzkd7WsuorqNs2pjCN54iWZNMijZFkW1RdTUXqquJDQxECFHL0UdERNSzrzxZidpPjX/7S3IRrmbeuIJ/hD8dZ3Uk5/WcRhmv0bETttmzZw/r1q3j+PHjGJqqI33gAaishEWLvD2TZoV09G4kLCyMd989SkLCBR544C906tTJ7WOsyFjBhJ4T8PexrZszbZpxQ9ZTi2BTmqVQkOqWodOREByMWqXi4sWLVFUZM3ZCQkLMpeossVYM3F2OXq/XK7KLmRND4ReFVJ5qnKeIRkOvN8oe2HD0H3zwARMmTCA+Pp733nuvkSenEB8fozzCM8+QuXWr1SpikvpIR+9mtm6N4JFH4nj33Xc90r8prdIeUVGg0cDmza6Po9fryc/Pt9p2ReQV+Pn4sf/kfof9WFaVUiJPbNPRu5BiaRpzzpw5XH311QyxKJVnj4BOAUTOiCT3LQ+pxHmL7dshJga6dLHabHl2IiEhoZEm5TyVPXqwtU8f0pOSuOXmmyl34UDd5YZ09G6kogK++w6mTPFM/2d1Z9mdv5ux3cc6tDUVDneW/Px8+vbtS3BwsE0tGpVKRXKCssLhlqmV/v7+3HnnnUyaNImRI0datbeMz5twNcUSICAggLfeeotffvmFPXv2UKTwkEHMEzHkf5xP1Xnnzgw0aVJSbK7mhRC1zk54+1SsPc6cOcP0PXvoJgT9jh7lxRdf9PaUJHbw7ta1B1izRojhwz3X/2f7PhPTl05XZHvsmBCRkUI4W7mwsrJS+Pr6mjNjiouLrdrtzNkpEt5NcNjfxN9/FylOCPDsH7lfnP3+bK1rWWVlouNPPynuoy4DBgwwfz9r165VfF/6zHRx/MXjLo/bpNDrhYiOFiI93Wpzfn6++TMKDQ1t8hr9H374obgGRB6ICLVa/Prrr96eUqOBzLrxLp5OT7aXbVOXrl0hOhp++sm5Mfz8/GopbWZkZFi1GxQ9iJLKErSn60slWOJMQXCwHrqJCQiguLqaC1Wura6dkUOwJO6pOPL+nUd1SQtQTtyzB1q3Nsb0rGAZttFoNIpPMXuLu+++G/8RI0gBFhgM3HXXXVLh0g7S0buBsrIytmz5iVWrBB5ItAGguKKYLSe2MKGH8vK7roZvHGneAKhVaqYlTLMbvinX68mtqKC7lU1Xa1RdqKK6uJqAmIBa11UqVYPCN5aOfpsTJyuDewXTZmQb8j+0vlfRrLATtgFo06YNt99+OwMHDmTQoEGNODHXUKvVfPzxx7zg789ooMOBA/z222/enlaTRTp6N7Bx40aSkp7lwoXf+Oqr+R4ZY+2RtQyPG05YYJjie0xpls7qQClx9OA4zfJwWRldg4LwUyv7NdNpdYRorBf3bkjmzbXXXjpBnJOT49TKL+4fceS+kYu+TFnGTpNECIePmwMGDGDJkiXs3r3bY4kE7qZXr148+vzzLOrfn+UdOnCVl0XYmjLS0buBlJQUIJnq6qWUupgd4ggl2TZ1SUyEVq2MT+3O3WfciGvTpo3dfOrhscPJvZjL8fPHrbZrdToSGxi2MdEQR9++fXv+97//cejQIbKysvD1Va780apfK0IHhXLyM9dkGJoEBw9CdTX07+/tmbidJ554gn/u3YvftdcaD1NJrCIdfQOpqqpi5crVwDQ8dRq2rKqM9ZnrmdyrvtqgI1w5PDV58mQKCgo4d+4cr7zyik07H7UPU3pNYXnGcqvtdePzy5cv54svvuC7777j/Pnz9ewdOvoG/BGdMWMGPXv2dCn2HPd0HNkLsjFUNtFDRI4wreabeNzdFXx8fIw/07ffhi+/hN27vT2lJol09A0kLS2NoqJewAViY8u56qqr3D7GhswNDIgaQPsQ2zVWbWGK0zsTvgkNDaVjx46KnKK98E1d1cpXXnmFmTNnMn78eKsyyNZSK000JEbfUFpf3ZrgXsEUflXolfEbjIP4fIugfXt44w246y5wcdO+JSMdfQO5pG2TQnJyskeyFVIzUs2VpJxlwADjCdk//nDzpGoYHT+a9NPpFBQX1Guz1LgBxzo3phi9NboFBpJfWUmZwtOt7ib26Viy/5WN0DezwhdHjsDp08YarC2dv/wFOnVCvPoqW7Y4J6Xd0pGOvoFcffU1BAbegkq1wiNhmyp9FWsOr2FqwlSX7lepPKt94+/jz4QeE1iRsaLW9WqDgSNlZfSycPSWJ2Pr6tzoy/RU5FUQ2C3Q6ji+ajXxgYEc8tKqvs11bfDr4Mepb055ZXyXWb7cqIlhZ0N8+/btvPbaa6xZs8bmaehmgUpF7jPPcPGFF7gnKYmVK1d6e0ZNBunoG0j//jOJioqmoOB7hg4d6vb+006k0SO8B51bd3a5D1fTLBX3r0kmNaP2X5Lj5eV08PMjxMcHgIqKCoqLjTVZfXx8aNOmTS173SEdQd2CUPva/pV0h+aNqDkB+uuvvzp1n0qlMsbqX85GGJrRql5B2GblypU8/vjjTJo0iUXNXCzspS+/5NmqKhYBD9x3n+KT0C0d6egbiKkAeIcOkfjUODW39m9RANxVhgwx1rA9etS5+6qrqzl06JBD4aix3cbyS94vnNWdNV+rG5+3DNu0a9cOdZ0Vpr2NWBOJDYzTb9y4kcjISHr37s2zzz7r9P3h48JR+as4s+qMY+OmQE4OZGYay47Zoe5hqebMyy+/zLLISPyBCQUFPPHEE96eUpNAOvoG4snTsHqDnhUZK5imadgpLB8f49P7cuvJMVbZt28fISEhJCQkcPfdd9u1DfEP4fr461l9eLX5Wt3USl9fXx588EFmzJjBxIkT6/Wh0+oISbRfbrChK/q4uDjzH5xt27YpVrM0YV7Vz89uHkWqV6yASZPAQVH2luTow8PDWfjuu8wGXgJWf/SRjNd7GW9LRjSYjAwhoqKMMiKeYFvWNtH3g75u6WvDBiGuuUa5/dmzZ83aJ4GBgaLagWjOV799JSb9d5L5/cz0dLEoL0/xeAf/dFCc/O9Juzb7L14UvXftUtxnXQwGg+jQoYP5+3JFH8WgN4hdibvq6fE0SZKShFi1yq6JTqcTKpVKAEKtVovy8vJGmpznMBgMYsqUKWIeiBUgpk6Z4u0puRWk1k3jkprqcJ+rQaSkpzh9SMoWSUlw+DDkKlTeDQ8PNxfULi8vJysry679hJ4TSDuRRnGFMQ7fkILgtugVHExmeTnVLhbFUKlULsshmPtQq4j7RxxZ8+1/Hl7n9GnYvx/GjLFrdujQIfPTSXx8PAEBAXbtmwMqlYr33nuPRRERDG3fnm9mzPD2lLyOdPQuMnLkSN566wRxcXs8IqYkhDCmVSY2LD5vws/P+BS/YoVjWxNKpRAA2gS24drYa1l3ZB1CiHqplfYwVBsozywnuJd9+yAfH6L8/TnWAP3x4cOHm187I3BmSfsZ7anIq+DC1gsuz8PjrFwJ48ZBoPUsJhPt27c3n2+YOtW1zK6mSHR0NBnHj9N+5Ur8HnsMzp3z9pS8inT0LpCenk5aWianT7di3rxR5qpJ7mRfwT4CfALo3b632/p0Ns3SGUcPl7Jv8ioqCFKrCXcQGzZRnlmOf5Q/PkGON7M1wcGkN+CE7IgRI/Dz82PYsGEMHDjQpT7Uvmpin4pt2qt6hZtH0dHRPPHEEyxevJjXXnutESbWeLRq1cqYiTB9OsyZ4+3peBVXHb0a+BD4GdgMdKvTPgn4pab9Lpdn10S5dEhqFRMmjLVaEq+hpGhTSNa49wDWmDGwb5/xqV4JGo2Gtm3bMmzYMJsVoSyZ3Gsy3x/9nl+LLzglTawkbGOeUwM3ZPv06UNRURHbt2/n8ccfd7mfjrd3RJeu4+Luiy734TEuXDBWk7rxRm/PpGnw8svGouibNnl7Jl7DVUc/FfAHhgJPAm9YtPkBbwJjgOuAe4DIBsyxyVH3NKy7EUK4Ja2yLkFBcMMNsGqVMvv777+fs2fPsn37dmbOnOnQPjIkkv4d+7My59d68flly5bxwQcfsGzZMgoLa0sJKEmtNNFQKQS1Wu2WP8xqfzUxj8c0zVX92rXGTZnQUG/PpGkQGgoffAD33ktRQQF5eXnenlGj46qjHwZ8X/N6F2D5DKwBjgJFQBWwHRhBC+H48ePs358H9MXPbxsTJijXh1eK9owWXZWOgZ1cCy3YY/p05eEbX19fp58opmums/X0iXqqle+99x73338/N910EwcOHKjVpiS10kSimwqFu4Oou6Io3lVMyYESb0+lNqmpxh+05BLjx5PTuTNf9+jBzJkzm0d6rBtx1dG3BiyfWfUWfbXG6ORNFAPKRdSbODt37kSlmgZ8xw03jKB169ZuH8MkSewJ3Zzx46F68zaKcjwTcpiaMJVjFdX0CKydvWFP/kC36yTBXZX9KiYEBRJUmmZXPrmx8AnyIeKBCP738P8U31NSUsny5b8oti+8UMgbKW84Nqzh4kkd1es3GXfePcBZ3Vl25u70SN+eJDMzk4HbtjGttJSQ9HQKCuprM7VklAtz1+YiYPlcqAZM//OK6rSFAvU1aYF58+aZXyclJZGUlOTidBqPm2++mRMnJlJQ8DMTJz7skTGEEMy4wjMpYaGh8FbUAoq/voWwx29xe/8xYTF0CwwighLgUlzfpqCZwUBQZhrB8X0U9d/Gz5e/q96j4FxfoiPspw42Bh3v6siD8x7k9vLb8Q/0d2h/7twxbr01kZISZarBu37bxZN7nuSx6Y8pmk/6xjxyWs/ipvBwh7Zbt27l888/R6PRMGLECJvF4C35Nv1btmZt5ZrOjm2bEt26dWPW3LlsPHiQb268kYBOnbw9JcWkpaWRlpbmlbGTgc9rXl8DrLVo8wMOA20xxvH3AFFW+vDmmYPLm88+E2K6siLj7kCv1wsfHx/zQaVah3KysoynzpygoGCJ2L9/ZIPmdPbsWbFy5UoxZ84csX79+gb11bVrV3Ho0CFFtoWF34rw8PMiN1dZ359//rnwfc5XnC87r8j+vfeEuOceZX2//PLL5p/JQw89pOieMV+MEcv+WKZsgCZGUy94rhQa8cDUcqAc+AnjRuzfgZuBuzHG5R8F1mPMuvkUuLyek5o6kybBxo2gINZdVVVFRkYGy5cvZ/369S4Nd+HCBbPcQGhoaO1DOVqtzYLVtoiMvJny8uMUFf3s0nwA/v3vfzNlyhRef/31ms1119FoNIrSTwF0Oi09epxDoTkZGRl0UHdwWITdhDMfp7PSB+fKzrEzdyfjuo9TNkATo6kXPPckroZuBHBfnWuHLV6vqfmSNEUiImDgQFi/HkfVzL/77jumTJkCwKhRoxg7dqzTw6nVap544glOnz5dT8zMFUevVvsRG/skWVnz6dt3reMbrNDQE7KWmBy96XOyh06npVevKrRauP56x31rtVq6j+qO9oyWITGONeW1WrAiJWSzbxNKHP3qQ6sZHT+aEH/lJ54lTQN5YOpyRWH6jbOHpqzRpk0bXnnlFT799NP6MrguOHqAjh1nUVLyG8XF+12a09VXX41fzYGu9PT0WpvFzuLsir537yDFK3qtVkv/mP5uX9ELIcjIyDC/V+LoG1IAR+JdpKO/XJk61ZhvXVlp16xr167mUEtBQYH79b1ddPRqdQAxMY+RlTXfpWGDg4NrnYzdvn27S/2AckcvhB6d7hB9+7ZX5OgrKirIyclhWM9haM84vqGoCC5ehJgYx33n5uZSUmJMC23btq1Z18gWxRXFbD6+mYk9FT4uSJoU0tFfrnTqBAkJ8OOPds18fX3p2bOn+b2rq3qbpKe75OgBOnW6h6KibZSWujYny/CNq7o3cMnRCwe52eXlWfj5RXDFFUFYKZlbj8OHD9OlSxf6dOxD+mnHN2i10KuXsmye8PBwVq9ezauvvspjjz3mMH793dHvGBozlDaBbezaSZomrsboJS0BU/hmnP3NNY1GYz7kpNVqFaXhKeL0aaiuho4dXbrdxyeEzp3/Rnb2v9BovnD6/htvvJH8/HxGjBjBqFGjXJoDGFfEISEh5ObmEmNnOa3TaQkO1hAdDWVlRp0te1mQWq0WjUZDt/Bu5BfnU1ZVRpCf7VO9zjwchYSEMHHiRKu1AayRqk0lWdPCC4y3YKSjv5yZNs0o+vTBB8bqJDa4+uqryc/PJzExke7du7tvfK0WEhOVLUFtEB39ADt3dqOs7BhBQfFO3XvddddxnYPqS0pJTExEq9XadfSlpVpCQhJRqYwOWauFYcNs96nVaklMTMRX7Uv38O4cOnuIKzteacfe+HG6m/Lqcr4/+j3v3PiO+zuXNAoydHM5Ex9vDOE4iE8/+uijbNu2jY8++qiWzK9SvvnmG15//XWWLFlCTk7OpQYX4/OW+PqGER19H9nZCxrUT0NREqc3reiN9jiM05tW9ACa9hqHG7Ju+DitsjFzI/069iMypEVJVl1WSEd/ueOsdrELLF68mLlz5zJr1qzaRbnd5Jmio//G6dPfUl6usKqKB/C4o4/QONyQ9ZSjT81IdVsBHIl3kI7+cscUp/egyJNNnRs3eSZ//wg6dryTnJzXG9yXqzhy9EIIpxy9Xq/nyJEj9OrVy2jvwNGXlUFeHnSrKxjeQKr0Vaw+tFrG55s50tFf7mg0EBICu3d7bAibOjduXILGxDxGYeEXVFaecrkPIYTLYmkajYZ0O6k0lZUnUal88fePqLHHbubN8ePHiYyMJKRG7tlR6ObwYWMkzlfBrtvOnTsZPHgwM2fO5Isv7G9ib8naQnzbeGLCFORsSpos0tFf7qhUHg/fWF3RFxfDmTMQF+eWMQICooiMvJnc3Lecvverr74iOTmZyMhIl0/JRkVFUVlZWeuPmiWWq3mArl2hsBBsFcuyDNsA9GrXi6PnjlJtsF620pm/mb///ju7d+/miy++YMOGDXZtZbZNy0A6eokxfJOSYjd8U1BQQEpKCi+99BLLli1T3HVZWRmlNd7M19eXsLAaxeqMDOjZ0262j7PExj5Ofv7HVFVZFUu1ydatW1m+fDlnzpxx2dGrVCq74Zu6jt7XF7p3h0OHrPdX19EH+QXRKbQTmecybdgrd/SWTx72TsQahIHlGculo28BSEcvgQEDjCdk//jDpsn69ev505/+xLPPPsvSpUsVd20wGHjxxRd56KGHmD179qWDOR7IBQwMjCMiYgp5ef926j53FAyHSymW1jClVta2tx2nN6VW1rJvn2gzTu/Mx6lU42Zn7k4igiPo2a6nTRtJ80A6esml8E1Kik0TVzVvQkJCePbZZ3nnnXf48MMPLzV4KEUkNvZJ8vLepbq6WPE9lidkf/75Z5eLvTuzojfa23f0dZ2wJsJ2nN4TqpUp6Sky26aFIB29xIgDkbOEhATz68OHD1NdbT1WrBgPOfrg4J60aTOK/PwPHRvXEBcXR2xsLAClpaXs3++aUJq7HL0Qwrqjb28986a6GjIzjfIHjigpKTGfZfD19bV5AE4IYUyrlGGbFoF09BIjQ4YYdwePHrXaHBYWRqeaqjxVVVUcO3asYeN5KukbiIv7B7m5b6LXlym+x7Sq9/Pz48iRIy6Na8vRV1VdQK8vJiCgcx17646+oKCAwMBAwuvoI9hKsTx+3KgioaTmeXBwMMeOHWPt2rV8+OGHZgXPuvx68ld8VD707dDXcaeSJo909BIjPj5GRUs7q3rLFaa9VEKHVFZCVhb06OF6H3Zo1aovoaGDKSj4VPE9jzzyCJs3b6aoqIi//OUvLo3bpUsXTp8+bVaFNGFczSfUEw7r2ROOHYO6kaL09HSrIRVNew0ZZzLqiac5owunVqvp2rUr48ePZ/bs2TbtUrQpJGs8U7dY0vhIRy+5hIM0yylTpnDvvffy9ttv07dvA1Z6R44Y0yr9HddYdZW4uKfJyXkNg8G+DLOJq666iqSkJIKULItt4OPjQ48ePWrpvIP1sA1AYCB07lz/Icpa2AagTWAbWvm3Ivdibh179z8cybTKloUUNZNcYuRIoxPOzTV6oDo89NBDTne5dOlSDh06REREBDfccIMxJtwAaWKltG49mODgXhQWfkVU1J0eHcsSU/jGUuvelqM32td31LYcPRjDN+mn02sdYNJqwWI/ucFoT2spqihicPRg93Uq8SpyRS+5hJ+fsQ7dihVu6/Kbb77h+eef54EHHmDv3r3Gi56SWaxDXNzTZGf/C4ONQ0aewFqKpbXUykv29eP01lIrzfZWUizd/XEuz1hOckIyapV0Dy0F+ZOU1MZBmqWzWJ6KNcsfeHAj1pKwsBH4+3fk9OlvPT6WCWsbskpW9JY4WtFbplgKYTx7prR8oKPiKHApPi9pOUhHL6nNDTfAvn3GoiBuwKrOTSM5epVKRWzs02RlzUcI5Ro2586dY926dYqcYl3qOnq9vozKynwCA61r5dd19OfPn6esrMyc4VTPvk6KZV6eUaqojYLCT1qtltDQUAYOHMicOXOs2py4cILsomyGxzkvRy1pukhHL6lNUBCMHQurVrmlu3o6N3q9UYHLIi/fk4SHj0WtDuTMGWXfz/Dhw2nXrh0TJkxwKYW0R48enDhxgsqaWrxlZYcJDOyGWm19OywhwbgiN2mpabVaEhLqZ+iYqJti6az0QWlpKXv37uUPG6egl2uXM6XXFHxtzFfSPJGOXlIfO+GbPXv28OKLL3LzzTfz9ddf2+1Gr9dz7tw58/uIiAhjWmVEBLRq5dYp20KlUhEX9zRZWS8pWqGHhoaaX7sihxAQEEBsbKw5F7+0NJ2QENueOCzMuBrPzja+t5VaaaJjq45U6as4oztTY+/eE7EybNMykY5eUp/x441Vp4qK6jVt3bqV559/nv/9739s2bLFbjd6vZ5XX32VJ598kgceeMB4OKeRwjaWRERMwWAo5/x5+0qN4J6C4ZbhG3vx+Uv2l8I39uLzUCOeZiFZ7Kr0gbXN3oLiAg6eOsjorqOVdShpNkhHL6lP69Zw3XWwdm29Jmc0b/z9/Xnsscf417/+xbvvvmu82AiplXVRqdTExf2DrKz5Dm2buqOHSymWRnv3rehXHlrJ+B7jCfANUNahpNkgHb3EOjYOTzX4dKwXVvQA7dv/mYqKfC5csO+8Bw4cSGBgIADHjh0jLy/P6bEsHX1pqWccvSlOr/TjFEKQm3vpoJW1MVK1qUzXTHfcmaTZIR29xDqTJ8PGjaDT1bocGxtLcHAwYMyosVVowyaNlENfF7Xal7i4pxyu6v39/bnmmmvo2rUrt99+OxUVFU6PZcqlNxiqKS/PJDjYvtqYKZdep9NRWFhI165d7dvX5NKfPWtUk4iKcjwnlUpFYWEhJ06cYMOGDfV0dM6VnWNn7k7GdR/nuDNJs0M6eol12rWDQYNg/fpal9VqdS0lS2ckixHCayt6gA4dbkOn03Lxov2yiWvXruXYsWMsWbKE+HjraZH2SEhI4PDhw+h0R/H374SPj31ZBdOKPiPjEN27d8fXQT1AU4ze9FEqlaNRq9XExcUxZsyYem2rD61mdPxoQvxDlHUmaVbIHCqJbUzhm2nTal1+6KGHKC4uRqPR0K9fP+X9nTxpPH1rWSC8EVGr/YmJeZysrPn06WP79K/picVVQkNDCQ8PJyNji8OwDUBkpPFv4K5dxxyGbQDiwuI4ozvD/j9K0Gjck72UmpHKTYk3uaUvSdPDFUcfBHwFtAeKgZlA3ef3hcCwmnYBTAUuuj5NiVeYOhWeecYYH7AQIJs1a5ai25cuXcr+/fuJiIhg3LhxXHHqlNdW8yaiomaTnT2fkpIDtGrVx2PjaDQaDhz4mREjHH+/KpXxY/n55wuKHL2P2oee7Xqy40gG/TUDHdo7oriimM3HN7Nk6pIG9yVpmrgSurg8O9oAABf9SURBVLkP+A0YAXwBPGPFZgBwAzASGIV08s2TTp2MHujHH126ffXq1SxYsIC5c+eyZ88er4ZtTPj4BNG589/Jzn7Zo+NoNBrS0w8qWtEb7eHgQb0iRw/G8M3Bk1q3fJzfHf2OoTFDaROo4HitpFniiqMfBnxf8/p74HorffYAFgHbgTtcnp3E+ziQLrZHPfkDL6RWWqNTp/s4f34TOt1hj42h0Wg4fDjbKUeflRWs3NFHaMjSpSvOuDlx4gQGg3UZCClJ3PJx5OhnAwfqfIVxaYVeXPPekmDgHeAvwDjgfsBzz8gSzzJtmlHNUq93+tZ68gdNYEUP4OsbSnT0g2Rnv2LTRq/Xs3fvXt566y3mzp3r9BgJCQlkZp5T7Oh79KimqCiKnj2VFeLu2kpDSZCWLl0c2548eZKuXbsSGhrKyJEja7WVV5fz/dHvmZowVdG4kuaJoxj9pzVflqQApnPiocCFOu06jI6+vOb9j0A/jH8kajFv3jzz66SkJJKSkhRMWdKoxMdDdLTxpOx11zl1a70VvZdSK60RHf0Qu3b1oLw8i8DAuHrtFy9eZNCgQQgh8PHx4bnnnqslj+CIbt3akJ0t8PWtuw6yTkhIFipVb3MOvyMCihPxi9Li4+PY9tLhLR26OumyGzM30q9jPyJDIhWNK2l80tLSSEtLa/RxHwWer3n9f8B7ddo1wK8Ynxb8gJ9qrtVFSJoJ//ynEA8/XOvS0qVLxZ///GfRp08f8fXXX1u9LSgoSGDcjBdFWVlCtGolhMHQGDNWxNGjT4hDh+632d63b1/z/NevX+9U32fPrhdt2viJgoICRfbLlqUKH58yUVSkrP/Pv6gQ6ucCREV1hUPbd9991/x9zJw5s1bbrBWzxNs73lY2qKRJUPOzdApXYvQfAL2BbcBdwAs11/8OTAK0GDdpdwCbgcU11yTNFVOc3kIU7Pfff+ebb77hwIED/P777/VuMRgMvPnmm7z44ov87W9/IzQ31yjV2IRqkMbEPMqpU19TUVFgtd1SDmHbtm1O9V1amk63bhGKzxkcOqSlXbuz1KlCaJMjGf60Vcdx5KzjQua2pA+q9FWsPrRaxucvA1xx9GXAn4HhGDdiT9VcfwtYXfP6TeBq4FqMm7KS5oxGYxQ9373b4pJ9KQS1Ws1f//pXnn32Wd5++21USqtjNCL+/pF06HAbOTlvWG0fPvySJruzujc6nZZevboqlolIT08nPr4cpaoS6enQNVRTr9qUrb5NWP7ctmRtIb5tfK2yhJKWiTwZK3GMSgXTp9fKvnFG3KzGqMk5eoCYmLmcPPkZVVVn67VZOvpdu3Y5JYeg02lJTOyneEWv1Wrp29e/XrUp2/bQr1PtalO2CA4OplWNLLTlz01m21w+SEcvUYZJo74mfNOr1yX9lszMTHOhDZs0UUcfGNiZ9u3/RG7uwnptUVFR3H777bzwwgt8//33+CjZ+axBp9PSt++1ihy9wWDg0KFDDBsWrsjRV1bCiRMwpLuyFf2aNWu4ePEi2dnZZkkHgzAYa8NKR39ZIB29RBkDBkBVFRw8CEBISAhxccZsFb1eby60YZMmkkNvjdjYJ8jLe5/q6vr6+0uWLOG5554jKSnJoQaNicrKMxgMVfTpM1SRo8/JySEsLIyBA0MUOfqjRyE2FvpGXZIrdoRKpSImJsb8x2pHzg4igiPo2U5ZOqekeSMdvUQZKlW9w1PvvPMOmzZtIj8/32ohCzNlZVBQAN26NcJEnScoqBvt2t1IXt77bulPp9MSEpJIbGwsFy9epMhKARdLtFotiYmJdO8OOTlQXm7X3JylmhCRwOGzh9EbnD/jkKpNJTlBruYvF6SjlyinjqOfPHkyo0ePJioqql6N06VLl/LQQw/xwgsv8EdqqtHJK1wRe4PY2KfIzX0bvb60wX2Zio2YlD4drepNGvT+/tC1Kzh6ODJFwUIDQokIjiCrKMup+QkhSM2Q8fnLCenoJcoZMgQKC42xAwf88MMPvPvuu8ybN4/8H35osmEbEyEhiYSFXUt+fsOTxEpL080nYi2LkNjCstiIZRES2/aXPk7LsoJK+fXkr/iofOjboa9T90maL9LRS5Tj42NUtFSgfWMpfxB98WKTd/QAcXFPk5PzGgaD7ewavQIpCGPo5pKjd5RiaVkQXKPBYYql5XaHZbUpa/zwww8cO3asls6NqQB43acwSctFOnqJc9RJs7RFLZ2bM2eahaMPDR1Aq1b9OHlyca3rR48e5cEHH6Rv377cdJNjzXbLOrGOVvRCCKdW9AYDHD5sPHsGNY7exoq+rKyMMWPG0K1bN8LCwqiqqgJkWuXliHT0EudISjIGkS3qjwJUV1ebHQnU1rlpnZfXLBw9QFzcM2RnL8BguPS9VFZW8t5773HgwAG2bt1qUwUSoLq6hKqqM2b9HEeO/vTp0wghiIyMrLG37+izsiA8HEyyO5r2tlf0hw8fRtSkw3bs2BE/Pz+0p7UUVRQxOHqw7UEkLQ7p6CXO4ecHEyfC8uUAvPDCC1xxxRWEhISwYcMGs5lpRe8DBOTkQC/7dVObCmFhQwkMjOPUqa/N1zQajVF9Ezh79iwZdnQKdLoMgoJ6olIZ0xi7detGXl4eZWVlVu1Nq3lTGCUhwfh31FaEqO5xBE2EMcVSiPryJ9akD0zZNmqV/K9/OSF/2hLnsQjfnDx5kj/++IPKyspajmXhwoW88cYbvHrPPUb1yyD7dVObEsZV/b8QwuhtVSoV1157rbndnhyCKbXShJ+fH926dePwYeva96bUShMhIdChAxw/br3/ugKg7UPa4+fjx8mSk/VsrUkfyGybyxPp6CXOM2YM7NsHp0/blEK49dZbefTRR3n0xhtRNZOwjYk2bUbh4xPG6dOX9iIsBc4cOfq6GvT2wjeW8flL9rbDN9YOGNvakK27oj9x4QTZRdkMjxtez1bSspGOXuI8QUEwdiysWlVrNWrVmTVR6QN7qFQq4uKeJitrvjkkYunos7Ozbd5rmVppolEcvZUN2YSEBAYNGkRoaCiJ/9/e3QdHcd4HHP/ecTpOOiSQEIqELAmBXiwcCgaZFDONISQxwTExUBpiPA0vtmtSMg5tJ047E9czjk0mdcfFzDQmLwUyVSi4BANjQhgGZMRLkYEAki3xPhIgIRtJFm8SOknbP5476U7s7Z7e7mX9+8zszGn3We63y+3vnnv2eZ6dOJEdVTv4TuF3cNijdzyDGBqS6EX/LFoE27c/UKN/oK04BhM9wOjR3wagsfEDACZPnkxJSQm1tbUcPnw46H7+XSt9jLpY+net7Cmv38VS0/Rnkgh2Q/b111+nvLyclpYWiouLu7tVii8eSfSif+bNg8OHGet2Bzx5qbm5ObBcjCZ6Vav/F2prVa3e4XDw7LPPkpUVfErfrq522tpqiI/PD1gfrEZ/69Ytmpubyc7O7lVev0bf0KCGMowZE7jerC+9zWaj4W4DlZ9WMid3TtBywrok0Yv+SUyEJ57AtmcPBw4coL6+nqamJlJSUnrKaBpE4Tz0oRozZhEeTzOff34wpPKtrRdwuXKw250B6wsLC7l06RIdHR0B66urqyksLMRuD7wMfYk+1B9HoYyO3XluJ/Py5zHcMTykYxHWIole9J936uLi4mLS09O7uwhu3bqVFStW8OaqVdx3OmHUqAgH2j822zBycv6ZmpqfhVT+7t0Hb8SCmg8+PT2dy5cvB6zXa58HGD0aXC6oq6NXef1En5WUxa37t/i8rffjm3tsr9rOoqJFIR2HsB5J9KL/5s+H/fuh1wOnjx49ysaNG/lwwwYa/Gv4MSgt7Vna2q7Q0nLUtKxe+7yPXvNNsESvyj/YfBMs0dtsNh5OfThorb6ptYnj144zN2+u6TEIa5JEL/pv9Gh47DH4058CVvsGSxUB98aNC39cg8hujyMr6xVqat7oXtfR0cHJkycf6Bt/794nJCToT9c8ceJE3UQfbHrniRP1E32w2aAnjpkY0E6/efNmdu/ezcWLF9lZvZM54+fgdrqDHaawOEn0YmB6TV0MPdMfFAGd+fk6O8WW9PRl3Llzmtu3/8zmzZtJSUmhuLiY9evXB5QL1nQDQ1ujh8AulpqmsXr1aubPn09+fj5bz26Vuee/4CTRi4FZsAA++ADa2/F4PFRXV3P16lVAJXrHpEmRjW8QDBvmIivrn6ipeYOMjAxu374NBA6c0rROWlvPk5DwsO6/0buLZVtbG7W1teTl5QUpH9jFsqVFLcE6/fh3sbx27Rp37twBIPlLyRytO8rThU+HfLzCeiTRi4HJyICiIl6fPRu3201RUVH3XDBFgLu4OLLxDZKxY1+kpaWMKVNSuh/HV1FRQVNTEwBtbTXExaXicIzQ3d93XnzjDC5cuEBubi5xcXFBygfW6Kuq1Dw4wWYW9u9i6f+FkjYzjcezHmeUKzZviIvBIYleDNzChcy4caN79sr58+ez6a23SHS5SP3ylyMc3OAYNszNQw+9TGPjO0ydOhVQTSRHjhwB9Kc+8JecnIzb7eaad9ZPo2YbUNMDtbaC93vEdDjChJQJ1N2uo9XTGtBE5MnzyCApIYleDAJvovd9mAoKCvj+9Om4pkzBFUOTmZnJzPx7Ghv3MHduz5OZysrKAOP2eR//dnqzRG+zqRq8L2ebJXqH3cH45PGcbzzfk+gdUJdQxzMPPxPC0Qkrk0QvBi43l/a0NHzzO1ZVVemP1Y9xDsdIxo59iZkzr5KQkMCcOXO6k7VR10qfviR6VT70RA89UxbPnj2bZcuWUfitQgqSCkhzp4V2gMKyJNGLQXH/qafwNRBUVVUZ9wWMYQ899CPc7o9oaKhk//79LF++HDDuWunj38XSqGtlT/nARG92On1dLJcsWcLGjRuZsXIGK2asCO3AhKVJoheDInnlShYCKcnJZGZmolmwRg/gdKaSnr6c+vp13es0TetT001nZycXLlyg0ORhLL4afWsrXL8OEyYYx+Z/Q9bT6WH3ud0sKFoQ2oEJS5NELwbF8EcfJSM/n5t//COHDh3CFsNz3JjJyvpHGhp+R3v7pwC0t9/Abo/D6Uw13M/XxfLKlSukpaXhdhsPYPJ1sTx/HsaPB4fJ7ML+c958WPMh45PHkz0y23gn8YUgiV4MGsfixZxbu5a/XbiQ9vp69ho9/DSGDR8+lrS0JVy79jZg3uPGJyMjg/b2dsrKykzb5wFyc9WMlSdPhvadWTi6kEvNl+jo6pAHgIsAA0n0C4CSINteAD4CjgFPDeA9RCxZuJDUQ4f4ZMcOPuno4NSZM5GOaMhkZf2Yurpf4fE0h5zobTYbRUVF7NixI6RE73BAXh68/35oiT4+Lp6MERlcbLrIjuodkuhFt/4m+nXAm4De8I104IfA48CTwFrAqVNOWM3UqeDx8DdAFXQ/UNuK4uPHkZDwdfbseZ5du9Zz82ZCSPsVFBSwb98+CgoKQizfwb59GoWFXSGVj2uJY9m6ZTg7nKTHpYe0j7C+/ib6I8Aq9BP9dO92D3ALuAj8hU45YTEVlZWU3GvlB6hEf/ZsZaRDGlJr19agaX8AzvHKKxs4duyYYfmSki1s2bKN+/fv85Of/CunTp0yLP+b32xk585/4/59Gy+/PJ/KSuPz+c47/8n5I+c53nWc2r213YO5hDCzEqjotUzzbpsFbNHZZynwc7+/NwN6j7XRhHV0dXVpGRkTtJlkaBpoi0BzOkdplZWVkQ5tSFy9elVzOt3aT3+KdvAg2pgxcZrNZte2bNmiW/65557TwK5BkgZoMFKz2+3atm3bdMsvWbLEW/55DTo1yNDs9mHae++9p1t+8eLFms1m13gUjdfQ+JJNy8ubPGjHK6KH+vz0jVmN/rfApF7LSZN9bgGJfn8nAs1BygqLaGlp4ebNGxyjnlrgLOBwTOeMRdvpP/74Y5zOSZSUwI0b8NlnHjSti+vXr+uWVw8U70JdHgAtdHV10dDQYFK+DKgG6unq6nzwUY1eNTU1aFoX3ABuAg2FXLpU8cBTrcQX01A8Dr4ceAMYDrhQc1vp/uZ87bXXul/PmjWLWbNmDUE4IhySkpKIi3Pi8awin3W0M5cEKsnJyYl0aEMiJyeHzs4rXL78XZYu3dq9PikpSbd8sK6UI0boT4LWU/4cMKV7vcvlMi5fD/zSCTxNSsoWHGZ9MkXUKy0tpbS0NGLv/wTwe7+/1wC+uVCfRyX8E6jeOXoi/QtIDLJdu3ZpCQmpWmLik1pCQrb20ks/inRIQ+rVV3+mJSSM1UaM+IbmcqVob7+9Trt7965u2aamJu3FF1drLleGNmLE1zSXK1l7990NQcs3NjZqS5eu0FyuzO7ymzZtMiy/YMH3tPj4bC0p6Zua252q7d+/f9COVUQP+tF0E2TS07DwxiyspKamhjNnzpCZmcm0adPMd4hxFRUVXL58mUceeSTo3PL+Tp8+TW1tLZMmTSI3N9e0/IkTJ6irq2PKlClkZxsPftI0jfLychoaGpg2bRqZmZkhH4eIHd5nM/cpd0uiF0KIGNKfRC8jY4UQwuIk0QshhMVJohdCCIuTRC+EEBYniV4IISxOEr0QQlicJHohhLA4SfRCCGFxkuiFEMLiJNELIYTFSaIXQgiLk0QvhBAWJ4leCCEsThK9EEJYnCR6IYSwOEn0QghhcZLohRDC4iTRCyGExUmiF0IIi5NEL4QQFieJXgghLE4SvRBCWJwkeiGEsDhJ9EIIYXGS6IUQwuIk0QshhMVJohdCCIuTRC+EEBY3kES/ACgJsm0dcAI4CBwAkgbwPkIIIQagv4l+HfAmYAuyfSrwTWA28DXgVj/fJ2qVlpZGOoQBkfgjJ5ZjB4k/FvU30R8BVqGf6O1APvBr4DCwvJ/vEdVi/cMi8UdOLMcOEn8sMkv0K4GKXss0YJvBPgnAO8BSYC7wA2DSgCMVQgjRLw6T7b/1Ln1xD5Xo27x/HwAmo74khBBCxJBZwBad9UXAadSvhThUM0+RTrmLgCaLLLLIIkuflov0kVmN3ojvTX3WeAPYDfwOOAZ4gE1Alc7+eQN4byGEEEIIIYQQQggxqOKB7cAh4AMgVafMGuD/vMur4QstKDvwLnAUNfhrQq/tTwPl3u3Phze0kJjF/z3UuT4M/JLg4yIixSx+n18Ba8MVVB+Yxf8Y6nooA/4HcIY1OnNm8S8APkJdAy+FN7SQfQUVe2/Rfu36BIs/aq/df6AneX8X+I9e28ejPjS+gA8T+W6ZC4H/8r7+CvC+37Y44AIw0vu6HEgLa3TmjOKPR91TcXn//j3qwx9NjOL3+TvUxfpmuILqA6P4bcCfUZ97gBeAwvCFFhKz838FGEXgtRBNfgycRX0+/MXCtQvB4+/ztRvOuW5mAnu9r/cCX++1vRZ4kp4bvHFAa3hCC8o/5uNAsd+2ItTJbkHddD4MfDWs0Zkzir8NmEFPN1gHkT/fvRnFD/A4MB3YQBTVaPwYxV8ANKIqQKWohHkunMGFwOz8e1Bxx6POv0Z0uYj6sur92YiFaxeCx9/na3eoEr3eQKuR9EyFcJsHv/07gCbUQb0FnKIf3YgGWRKB0zd00nPOklAfFB+9Y4o0o/g14DPv6x8CbmB/+EILiVH8GahfiKuJziQPxvGnor6o1qMqPXNQU4ZEE6P4Af4dOAlUonrbRdtUJ39A5ZXeYuHaheDx9/naHUj3SiN6A622A4ne14nA5zr7uVA/FVtQI2oj7RY9MYP6kHd5X7f02pYINIcprlAZxe/7+xeorq6LwhhXqIzi/2tUstwDpKNGZFehuvZGC6P4G1EVGV8tfi+qxqzXHhspRvFno75kc1CDJP8b9X/yv+EMsJ9i4do106drN5xNN0eAed7X30LdhPJnA3aiBlutIjp+BvrH/Jeo9jKfatScPsmom2hfRY0diCZG8YNq8hiOuqnWRvQxin89KjHOBn6OaqeMpiQPxvFfBkbQc4Pzr1A142hiFL8LVcO/j0r+n6KacWJBLFy7ZqL22o1HzZFThvqZ4bv5sQZ1I+EZVDvTAVSt5iDqwxVJNtQd7SPepQB1t/sF7/Zvo27knEB9OUUbo/gfRV2oB/2WZyITZlBm59/n+0TnzViz+Gej2r7LgbcjEaAJs/jXoDpQlAEbGboWgoEYR8/NzFi6dn3G8WD8sXDtCiGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCHE0Ph/Dhh+54Pw1gYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#first plot the training data\n", "plt.scatter(xVec,yVec, label=\"data\")\n", "#the resulting function will just be the linear interpolation of the extended points\n", "plt.plot(xVecExtended,yVecExtended,color=\"black\",label=\"f_n\",linewidth=3,linestyle='--')\n", "#calculate the hat functions from before but now scale them with the height v_i\n", "for i in range(len(xVec)):\n", " if i == 0:\n", " x_1 = 0\n", " else:\n", " x_1 = xVec[i-1]\n", " if i == len(xVec)-1:\n", " x_3 = 1\n", " else:\n", " x_3 = xVec[i+1]\n", " xHat = [x_1,xVec[i],x_3]\n", " yHat = [0,yVec[i],0]\n", " plt.plot(xHat,yHat)\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1c)\n", "We are now formally defining the hat functions and $$f_N(x) = \\sum^N_{j=1} v_j \\varphi_j(x) \\approx f(x)$$ and evaluate it at 0.5" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.333333333333\n" ] } ], "source": [ "#basis functions\n", "def phi_int(i,x):\n", " if i == 0:\n", " x_1 = 0\n", " else:\n", " x_1 = xVec[i-1]\n", " if i == len(xVec)-1:\n", " x_3 = 1\n", " else:\n", " x_3 = xVec[i+1]\n", " if( x >= x_3 or x <= x_1):\n", " return 0\n", " if(x >= xVec[i]):\n", " h = x_3 - xVec[i]\n", " return (x_3 - x)/h\n", " else:\n", " h = xVec[i] - x_1\n", " return (x - x_1)/h\n", "#f_n\n", "def f_n_inter(x):\n", " result = 0.0\n", " for i in range(len(xVec)):\n", " result += yVec[i]* phi_int(i,x)\n", " return result\n", "#evaluate f_n at 0.5\n", "print(f_n_inter(0.5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 2: Equidistant nodal basis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2a)\n", "Calculate the matrix G where G_ij = phi_j(x_i) and x_i are the feature values of the training set (from xVec)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.4 0. 0. ]\n", " [0.8 0. 0. ]\n", " [0.8 0.2 0. ]\n", " [0.6 0.4 0. ]\n", " [0.4 0.6 0. ]\n", " [0. 0.8 0.2]\n", " [0. 0.6 0.4]\n", " [0. 0.4 0.6]\n", " [0. 0.2 0.8]\n", " [0. 0. 0.8]]\n" ] } ], "source": [ "n=3 #number of basis functions used \n", "#n=7\n", "xVecHat = np.linspace(0,1,n+2) #create equidistant points x_0 to x_n+1 for hat functions\n", "#basis functions for equidistant grid\n", "def phi_nodal(n,i,x):\n", " h = 1.0/(n+1)\n", " if( x >= xVecHat[i+1]+ h or x <= xVecHat[i+1] - h):\n", " return 0\n", " if(x > xVecHat[i+1]):\n", " return (xVecHat[i+2] - x)/h\n", " else:\n", " return (x - xVecHat[i])/h\n", "#create matrix G where G_ij = phi_j(x_i) and x_i are the feature values of the training set (from xVec)\n", "G = np.matrix(np.zeros((len(xVec),n)))\n", "#fill G\n", "for i in range(len(xVec)):\n", " for j in range(n):\n", " G[i,j] = phi_nodal(n,j,xVec[i])\n", "print(G)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2b)\n", "Solve the least squares problem using the normal equation + solving of resulting" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "G^T * G:\n", "[[1.96 0.64 0. ]\n", " [0.64 1.76 0.8 ]\n", " [0. 0.8 1.84]]\n", "G^T * y:\n", "[[ 1.4]\n", " [-1.2]\n", " [-1.2]]\n", "v:\n", "[[ 1.02241888]\n", " [-0.94365782]\n", " [-0.24188791]]\n" ] } ], "source": [ "print(\"G^T * G:\")\n", "print(G.T * G)\n", "print(\"G^T * y:\")\n", "print(G.T * np.matrix(yVec).T)\n", "#solve the least squares problem using the normal equation + solving of resulting\n", "v_nodal = np.linalg.solve(G.T * G, G.T * np.matrix(yVec).T)\n", "print(\"v:\")\n", "print(v_nodal)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2c)\n", "Calculate the final approximation$f_N(x)\$ that results from $$f_N(x) = \\sum^N_{j=1} v_j \\varphi_j(x) \\approx f(x)$$ and evaluate at 0.5" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.943657817109\n", "[ 0. 1.02241888 -0.94365782 -0.24188791 0. ]\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#define f_n\n", "def f_n_nodal(x):\n", " result = 0.0\n", " for i in range(n):\n", " result += v_nodal[i]* phi_nodal(n,i,x)\n", " return float(result)\n", "#evaluate f_n at 0.5\n", "print f_n_nodal(0.5)\n", "\n", "#plot individual hat functions\n", "for i in range(n):\n", " h = 1.0/(n+1)\n", " xHat = [xVecHat[i+1]- h, xVecHat[i+1], xVecHat[i+1]+h]\n", " yHat = [0,v_nodal[i],0]\n", " plt.plot(xHat,yHat)\n", "#plt.scatter(xVecHat[1:-1],np.array(v).flatten())\n", "#plot f_n\n", "temp = np.zeros(n+2)\n", "temp[1:-1] = np.array(v_nodal).flatten()\n", "plt.plot(xVecHat, temp, color=\"black\", label=\"f_n\",linewidth=3,linestyle='--')\n", "plt.scatter(xVec,yVec, label=\"data\")\n", "plt.legend()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 3: Hierarchical classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the same as in Exercise 2 with Hierarchical Clustering." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of levels: 2\n", "[[0.2 0.4 0. ]\n", " [0.4 0.8 0. ]\n", " [0.6 0.8 0. ]\n", " [0.7 0.6 0. ]\n", " [0.8 0.4 0. ]\n", " [0.9 0. 0.2]\n", " [0.8 0. 0.4]\n", " [0.7 0. 0.6]\n", " [0.6 0. 0.8]\n", " [0.4 0. 0.8]]\n" ] } ], "source": [ "import math\n", "#n=7 #number of basis functions; Has to be 2^k - 1 for some integer k!\n", "numlevel=int(math.log(n+1,2)) #calculate the number of levels\n", "print(\"Number of levels: \",numlevel)\n", "\n", "#basis functions for hierarchical approximation\n", "def phi_hier(level,i,x):\n", " h = 1.0/(2**level)\n", " xLevel = np.linspace(0,1,2**level+1)\n", " i=2*(i+1)-1 #only odd basis functions\n", "\n", " if( x >= xLevel[i]+ h or x <= xLevel[i] - h):\n", " return 0\n", " if(x >= xLevel[i]):\n", " return (xLevel[i+1] - x)/h\n", " else:\n", " return (x - xLevel[i-1])/h\n", "\n", "G = np.matrix(np.zeros((len(xVec),n)))\n", "for i in range(len(xVec)):\n", " j=0\n", " for l in range(numlevel):\n", " for jLevel in range(2**l):\n", " G[i,j] = phi_hier(l+1,jLevel,xVec[i])\n", " j += 1\n", "print(G)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "G^T * G:\n", "[[4.15 1.62 1.72]\n", " [1.62 1.96 0. ]\n", " [1.72 0. 1.84]]\n", "G^T * y:\n", "[[-1.1]\n", " [ 1.4]\n", " [-1.2]]\n", "v:\n", "[[-0.94365782]\n", " [ 1.49424779]\n", " [ 0.229941 ]]\n" ] } ], "source": [ "print(\"G^T * G:\")\n", "print(G.T * G)\n", "print(\"G^T * y:\")\n", "print(G.T * np.matrix(yVec).T)\n", "v_hier = np.linalg.solve(G.T * G, G.T * np.matrix(yVec).T)\n", "print(\"v:\")\n", "print(v_hier)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n", "[[-0.94365782]]\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(numlevel)\n", "#f_n\n", "def f_n_hier(x):\n", " result = 0.0\n", " j=0\n", " for l in range(numlevel):\n", " for jLevel in range(2**l):\n", " result += v_hier[j]* phi_hier(l+1,jLevel,x)\n", " j += 1\n", " return result\n", "print(f_n_hier(0.5))\n", "j = 0\n", "for l in range(numlevel):\n", " for jLevel in range(2**l):\n", " jLevel = 2*(jLevel+1) -1 #only odd values\n", " h = 1.0/(2**(l+1))\n", " xLevel = np.linspace(0,1,2**(l+1)+1)\n", " xHat = [xLevel[jLevel]- h, xLevel[jLevel], xLevel[jLevel]+h]\n", " yHat = [0,v_hier[j],0]\n", " plt.plot(xHat,yHat)\n", " j += 1\n", "#plt.scatter(xVecHat[1:-1],np.array(v).flatten())\n", "temp = np.zeros(n+2)\n", "temp[1:-1] = np.array(v_hier).flatten()\n", "y_hier = [float(f_n_hier(x)) for x in xVecHat]\n", "plt.plot(xVecHat, y_hier, color=\"black\",label=\"f_n\",linewidth=3,linestyle='--')\n", "plt.scatter(xVec,yVec, label=\"data\")\n", "plt.legend()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 1 }