{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Lecture 2 Part 1 - Integration - Solutions\n", "\n", "\n", "\n", "We can now write a little python program that evaluates the sum for the integral. We do this for the function $f(x)=x^4-2x+1$ from $a=0$ to $b=2$. We know the correct answer for this integral and compare the result of our program to it $$\\int_0^2 (x^4-2x+1)dx = \\left[\\frac{1}{5}x^5-x^2+x\\right]_0^2=4.4 .$$\n", "\n", "## Example 1" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.3467600000000015\n" ] } ], "source": [ "def f(x):\n", " return x**4 - 2*x + 1\n", "\n", "N = 10\n", "a = 0.0\n", "b = 2.0\n", "h = (b-a)/N\n", "\n", "s = 0.0\n", "for k in range(1,N+1):\n", " s += f(a+(k-0.5)*h)\n", "\n", "print(h*s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With only 10 points, the value of the integral is ok, but not very good, because the constant value of the function that we assume in each interval does not reflect the curvature of the function 𝑓(𝑥) very well.\n", "\n", "## Exercise 1.1\n", "\n", "Plot the function $ f(x)=x^4-2x+1 $." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "\n", "# start and end points\n", "a = 0.0\n", "b = 2.0\n", "points = 100\n", "\n", "# Set up lists for plotting\n", "y = []\n", "x = linspace(a,b,points)\n", "\n", "# generate the function values\n", "for xi in x:\n", " val = xi**4.0-2*xi**2+1\n", " y.append(val)\n", "\n", "# Make the graph\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y)\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1.2 and 1.3\n", "\n", "Change the example program to add a loop over the number of discretisation points and plot the value of the integral and/or the integration error as a function of integration points." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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3r158sknueeee1i5ciX33nsvTz31FL17977oazp58iQ9evSgZ8+eLF++nGuuuYb+/fvzySefAHDffffRt29fAD777DM2bNjAhg0bsnPYfM5TL7cKFSoEOJJ8zlO7m6a/xjETSMCZIbQIzjWdRkBFnOa1qd5sJ78tTZo0yUWrpjG5k3JNY/78+alpR48e1SJFimj58uX1xIkTqenPP/+8ApqQkKCqqhEREdq7d+/U/B49emiFChX09OnTqWn79u3TYsWKpbums2fPHgX0qquu0qSkpNT0zz77TAF9+eWXVVV169atCui4cePSxfz4448roFu2bEm3vblz56aW6d27twL68ccfp6adOXNGK1SooP369cv0+oN9TSfFokWLNDw8PN01HRFRQLt06aK//PJLsEPMM/DBNZ0xOGOvbcO5IVSBF4AdQBLwWG4qPmOMZ23btk39u1y5clSuXJnmzZtTunTp1PR69eoBsH//frfb2LBhA+3ateOSS/6606FGjRpcd911bst37dqVkJC/vh6uu+46qlevnnq2sX79egB69uyZbr2U5+vWrcvyNYWHh9OmTZvU52FhYdSpUydPN1VlNYDoypUriYqKYv78+dbD7SK8HZHgdxFpCgwGbgV+dK37H+A5VT3ptwiNKeTKlSuX7nloaKjbNMDj/SS//PILVapUyZRepUoV9uzZ4zbdXVrKcDFHjx4F4NJLL01XpmrVqunyPckYPzgVT16/HyYmJsbteGz//Oc/ue++++jTpw8hISGp3bz37t1LbGxs6romeyMSnFLVx1X1elW9UlVbqOoEq3CMyfsuvfRSfvvtt0zp7tI8pf/2229cdpkzoHz58uUBMs1Jk/K8sF3nqFevHuvXr6dcuXKZ7iuyHm7peVXpiMhPInK1h7z6IvKTb8MyxvhSixYtWL16NX/88Udq2v79+/n888/dll+yZEm6L8/PP/+cAwcO0KJFCwBatWoFwGuvvZZuvZSmpH/84x+5jjksLAyAP//8M9fbCoSQkBCOHz/uNi8vNxsGmlfNazg918I85BUHInwSjTHGL8aMGcObb77JLbfcwv/93/9x7tw5xo0b57YZDeDUqVPcfvvt3H///Rw+fJiRI0dSp04d7rnnHgCio6O5++67GT9+PBcuXODaa69lw4YNPP7449x99900aNAg1zFHRUUBMHXqVNq2bUuR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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "\n", "# define function, bounds and value of integral\n", "def f(x):\n", " return x**4 - 2*x + 1\n", "a = 0.0\n", "b = 2.0\n", "val = 4.4\n", "\n", "# Set up lists for plotting\n", "y = []\n", "x = []\n", "err1 = 1.0\n", "err2 = 0.1\n", "\n", "# define settings for convergence loop\n", "step = 6\n", "initial = 0\n", "increments = 20\n", "\n", "# convergence loop\n", "N = initial\n", "for i in range(1,increments):\n", " N = N+step\n", " h = (b-a)/N\n", " s = 0.0\n", " for k in range(1,N+1):\n", " s += f(a+(k-0.5)*h) \n", " error = (val-h*s)/val*100\n", " y.append(error)\n", " x.append(N)\n", "\n", "# Make the graph\n", "\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y,\"ko-\")\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of integration points')\n", "plt.ylabel('Integration error in %')\n", "plt.hlines(err1,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.hlines(err2,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.text(x[0]-0.1, err1-0.5, '1% error')\n", "plt.text(x[0]-0.1, err2-0.05, '0.1% error')\n", "plt.text(x[3], y[increments-4]+0.01, 'midpoint',color='k')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2.1 and 2.2\n", "\n", "Change your integration program to the trapezoidal rule. Loop again over the number of discretisation points and plot the value of the integral and/or the integration error as a function of integration points." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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Sb9+/UhJSWHgwIFMmTKFevXqMXbsWA4dOhR6gaKiXLbSlBTo3x9efNFZuz33nGUtNQwj4OSmdPriltgmAslADNBRVdNCIVhR57jjjuOZZ57h+++/p3Xr1txxxx00a9aMBQsWhEegihVh/HiXtbRlS7jtNmje3CWTMwzDCBA+lY6q/qWq16lqFVU9TlUvUtU1oRSuONCoUSPef/995s2bx+HDh+nQoQOdOnUiJSUlPAI1bQqLFsGcObBvH5x/vksm90uOCa5hGEaesXw6BQARoWPHjqxevZonn3ySJUuW0KRJE+655x52794dDoGgSxeXtXTUKPjgA2flNmwY7N0benkMwygymNIpQMTExHD33Xezfv16evbsyVNPPUX9+vWZOnUqaWlhWNUsWRKGDnX+PVde6ULpNGgAM2eaibVhGPnClE4BpGrVqkyZMoUvv/ySunXrcsMNN3Daaafx+eefh0egGjVgxgz4/HOoXh2uvdYlk/vqq/DIYxhGocWUTgGmVatWLFu2jJkzZ7JlyxbatWtHz549+TVcIWzatIH//Q+mTHF7PKed5pLJ/fFHeOQxDKPQYUqngCMiJCYmsm7dOoYNG8abb75JgwYNGDVqFPv37w+9QBERcP31LmvpPfe4pbb69eGpp+DAgdDLYxhGocKUTiGhTJkyjBw5kh9++IGLL76Y+++/n0aNGjF79uzwhNQpVw6eeALWrIGzz3YKqGlTePdd2+8xDMMnfisdEakrIveJyAQRmZKtvBRMIY3/qFOnDm+99RYfffQRZcqUoWvXrpx33nl8//334RGoXj2YNw/ef985mnbq5OK6/fhjeOQxDKNA45fS8USZ/hEYCXQBzvFSigwi0klEknYV4Iyb5557Lt9++y3PP/883333HS1atGDAgAH8Fa4QNhdfDN9/D888A198ASedBHfeCX//HR55DMMokOSaOTSjk8gqYAuQqKphChQWevKaOTRc7NixgxEjRjBx4kTKlSvHww8/zM0330xUVNTRTw4Gf/7pspZOngyVKztfnxtusKylhlFMyHfm0EzUBZ4uTgqnMFGxYkXGjx/PypUradmyJbfddhvNmzfnww8/DI9AVapAUhJ8/bXz6+nXD1q1csnkkpMhPt4ZJMTHu2PDMIoN/iqdH4FKwRTEOHaaNm3KokWLmDNnDvv27eOCCy7g8ssv5+effw6PQC1awKefwmuvwfbtcNZZ0KsXbNzojA02bnQKyRSPYRQb/FU69wBDRaRuMIUxjh0RoUuXLqxdu5ZHH32URYsW0bhxY4YOHcrecISwEYHu3Z1hQfnycORI1vZ9+1x4HcMwigX+7ul8BpyIm+2kADuydVFVPTvw4oWXwrKnkxu///479913HzNmzKBatWo88cQTJCYmEhERBmv5iAjv5tQiEI4wP4ZhBIVA7OkcAdYBnwPbPMeZi31jFFCqV6/Oyy+/zPLly6lVqxbXXXcdbdu25csvvwy9MLVre6+PjnaWb4ZhFHn8Ujqq2l5Vz8mtBFtQ49ho3bo1y5cvZ9q0aWzcuJHTTz+d3r17s2XLltAJMWoUxMZmrYuOdv49LVq4JHLbt4dOHsMwQo5FJChGRERE0KtXL9avX8+9997Lq6++Sv369XniiSc4EIoQNomJzqotLs4tqcXFuThumza5NNlJSS6kzvjxlrXUMIooPvd0ROQs4BtV3ev5O1dU9dNACxduisKeTm789NNPDB48mHfeeYcTTzyRMWPG0KlTJ0QkPAKtWQODBsGHH0KTJjB2rEsiZxhGoSK/ezqfAI0z/b3YR0lvMwoZCQkJvP322yxcuJDo6Gg6d+7MRRddxNq1a8MjUJMmLmFcetbSCy6Ayy+3rKWGUYTITemcA6zN9Pe5Pkp6m1FIufDCC/nuu+8YN24cX331Fc2aNWPgwIHs3Lkz9MJkz1q6aJFlLTWMIoRfJtPFlaK+vOaN7du3M3z4cJKSkqhQoQIjR46kb9++RIYrhM1vv8F997kUCtWru8jWiYlOORmGUSAJhMm0UUyoXLkyEydO5JtvvqFp06bccssttGzZkk8++SQ8AvnKWlrMfgwYRlGhWCgdETlRRJaKyHoR+VZEvGpg4z9OPvlkFi9ezKxZs9i1axfnnHMOV155JampqeERyLKWGkaRoFgoHeAFYJqq1seF9EmWsJloFR5EhG7duvHDDz/w8MMP895779GoUSMeeOAB/vnnn9ALlDlr6eDB/2UtffppOHgw9PIYhpFnCqTSEZGaIjJeRJaLyD4RURGJ99G3loi8KSK7RGS3iMwWkdqZ2o8HWgPTAVR1kafplGDfR1GhVKlSDB8+nHXr1nH55ZfzyCOP0LBhQ1599dXwZS196ilYvdoFEb37bpe19L33Qi+LYRh5wt8kbuVFJCbYwmQiAbgK2Al85quTiMQCHwMNgV7AtUA9YLGIlPZ0qw38rqqHMp260VNv5IFatWrxyiuv8Nlnn1GlShV69OjBmWeeyddffx0egerXd+mx5893hgUdO8Ill8C6deGRxzCMo3JUpSMiUcBfwIXBFyeDT1X1BFW9BJiVS7++uFw/XVR1rqq+DVwGxAE35XKeLa0dA2eccQZffvklkydPJiUlhVatWtGnTx+2bt0aHoE6dIBVq2D0aFi2zM167roLCnDmV8MorhxV6ajqYWArLrBnSFBVfwOIXgZ8oao/ZTp3A7AM6Oyp2gRUF5ESmc6L89Qb+SQyMpIbb7yR9evXc+eddzJ9+nTq16/P6NGjORiO/ZXoaJcee/16l7NnzBg3E3rpJYtgbRgFCH/zGc8E+gDzgyhLfmgCvO2lfg1wJYCqbhORL4HewCQRuQA30wnqmlD79u1z1F111VX079+fffv2cckll+Ro7927N71792b79u1069YtR/stt9xC9+7d2bx5M9dee22O9sGDB9OpUyfWrVvHTTflnOjdf//9nH/++axcuZJBgwblaH/00Udp27Ytn3/+OUOHDs3RPnbs2IyMpCNHjszS1qJFC2JjY7nrrrsYM2YMFStWpFKlrHn/ZsyYQa1atXj99deZOHFijvHffPNNKleuzLRp05g2bVqO9vnz5xMbG8uECRN44403crR/8skncMIJPN2wIetbtOC2n37ipD59WDdoEC82acKYL74A4JFHHuGjjz7Kcm6lSpV46623ABgyZAjLly/P0l6zZk1mzpwJwKBBg1i5cmWW9vr165OUlARAv379WL9+fZb25s2bM3bsWAB69uzJr7/+mqW9TZs2PPbYYwB07dqVv/76K0v7eeedx/DhwwHo0KED//77b5b2jh07ctdddwHF770H8OKLL9KgQQPmzZvH6NGjc7SH5L0HPP3007z77rtZ2kqVKsX7778PFK73XrDcJPw1JEgFWonIVyJyv4jcKCI3ZC5Bke7oVMTt+2RnB1Ah0/HNwPUish54CkhUHzvgItJPRFaIyIpt2yw7t7/Exsby4osv8t577yEirF69mlWrVrFv376wyLO+bFlua96cRxo2pOLBg4z53/+cU2m2D5xhGCFGVY9acPlycitH/BknPwU3w1Ig3kvbQeAxL/WjgMPHeu1TTjlFjbxz4MABHT16tJYr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rFhRFy1alOfrde/eXWNjY/Whhx7SRYsW6bPPPqvly5fXK664IqPPhg0bFNDq1atr586ddd68eTp37lzdt2+f9urVS8uUKaO1a9fWZ599VhcvXqxffPGF/vbbb1q5cmWtU6eOzpgxQ9955x296KKLNCIiImN2pqo6YsQIBbRu3bo6atQo/eijj3Tx4sX5eXQZ/Prrr9qzZ88MmWfMmBFeE+u1a1Uvusj94m7YUHXBgsBfI31Gkpn0mUWXLkc//9Ch/2YF33yTdVxQffXVrP3PP1+1dm3V9Od6ww1uhrN9e85+J5/s/Zrr16tWqOBmHenjjB/vrpf9PXDeeW7mePiwO84+0/nxR9WICNXHHst63s0355zpZCYtzd37jBluVppZfpvphARymen49eUL/Alc6E/folRCoXRWrVqltWvXVkCjoqJ03Lhxqqrau3dvvfrqq/N8rU8//VQBnT59epb6mTNnKqDffvutqv6ndFq0aJHjy7tXr14K6Ny5c7PUDx48WCMjIzUlJSWj7vDhw1q/fn1t0aJFRl260hk7dmye5T8an3/+uZ566qkKaJs2bfTLL78M+DX8Ji1Ndd481YQE91Hq1Ml96QaK3JROtv+vqqoeOKA6apRqgwZuiSnzUldmBdOrl2pkpOrBg1nPnzzZ9d282R1Xr6563XXuCzxzeeop12/Xrqzn79jhlrVatcq6rHXllTnvQ/U/JfP991mP0z8n06e74+zLqp98klPp7Nqles89qnXrqpYokfXely//r58pnZCQm9Lx15BgLpAzyUYRJRCGBP7StGlTfv75Z9atW8dff/3F7bffzrJly5gzZw5jxoxh+/btdO/enUqVKtGwYUNmzcotkSosWLCA6OhounbtyuHDhzPKhRe6xK+ffvpplv5dunRBJGci1aioKDp27Jil7tNPP6V169YkJCRk1EVGRnLNNdewcuVKdu/enaX/5Zdfnqdn4Q9t2rThf//7H1OmTOGXX37htNNO44YbbuCPP/4I+LWOSnqK7NWr4YknYPFiaNIE7r0X9uwJ7rW9WXgNGQIPPgg9e8J778GXX7olKYBMS6sAVKgAJUpkrTvhBPf622/u9c8/4eWXXb/M5e67XXvmCBOHD0O3bu4677wDniVjwIUX8iZv1ar/tXtjy5ascmWXMzPXX++W1m6/HRYtgq++guef937vRljxV+m8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UlJ8Kp1u3brpLbfcknF80UUX6T333JNxfOedd+p5552X73vIC2lpaXrgwAGvbfv37z+msY/1fKNg4TEkylEkXFZlNWvmVDrgZjxGvshN6fi7p3MIyDADUdXxqnqGugjPQ1W1SAU90gDs6bzzzju0bt2ahISEjLo6derQrl073n7bWxzTrEREHP1fc/DgQUqVKpVxXLp06YwQ9KtXr+bFF1/k+eefz7Pss2fPpnXr1sTGxnLcccdx5ZVX5vA2j4+Pp2fPnkyZMoWGDRsSHR3Ne++9x7Rp0xARPv30U6688kqOO+44Tj/9dAB2797NrbfeSvXq1YmJiaFBgwY888wz6YoecEEGRYTZs2fTt29fjj/+eE444YQ834NRcPHlXFqxYkXS0vwNQh9AfvvNe71FsA4KR/1mE5Eo4C/gwuCLU3RYs2YNTZs2zVHfpEkT1q4NTECF008/nbfeeouffvqJr7/+mg8++IDWrVsD0L9/fwYNGkSDBg3yNOYLL7xA165dady4MW+++SYvvvgiq1ev5uyzz2bPnj1Z+i5evJgxY8YwYsQIFixYQLNmzTLaEhMTqVOnDm+++SaPP/44aWlpXHrppUydOpXBgwczb948Lr74Yu68806GeXHWu+2221BVZsyY4TXqr1F48eZcGhERwV9//UXbtm353//+F1qBfChBVF0ct59/Dqk4RR5fUyDNutz0G3CJP32LUjmWPZ0SJUrovffem6N+2LBhGhkZ6fc4uS2v7d69W88+++yM5Ymrr75ajxw5otOmTdM6derovn378iTznj17tFy5cnr99ddnqd+wYYOWKFEii6FCXFyclipVSrds2ZKl79SpUxXQQYMGZamfN2+e1/u48cYbNTo6Wrdt26aqqosXL1ZAu3TpkifZjcJFdufSGTNm6PTp07Vq1aoKaK9evfT3338PlTBuDyf7ns5VV6mWLq0aHa06ZIjqnj2hkacIQAD2dJ4AZvvTtygUArCnU6JECb3vvvty1A8dOjRgSied1NRU/e2331RVdefOnVqlShV999139ciRIzp06FCtUaOGVq9eXYcNG5axV+SNDz74QAH98MMP9dChQ1nKSSedpJdffnlG37i4OD3nnHNyjJGudJYsWZKl/u6779aIiIgc+zPpSuadd97Jcjx9+vSjPhuj6LF792699957NTo6WsuUKaNPPPFEaPb0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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "from matplotlib.ticker import ScalarFormatter\n", "\n", "# define function, bounds and value of integral\n", "def f(x):\n", " return x**4 - 2*x + 1\n", "a = 0.0\n", "b = 2.0\n", "val = 4.4\n", "\n", "# Set up lists for plotting\n", "y = []\n", "yt = []\n", "x = []\n", "err1 = 1.0\n", "err2 = 0.1\n", "\n", "# define settings for convergence loop\n", "step = 6\n", "initial = 0\n", "increments = 20\n", "\n", "# convergence loop\n", "N = initial\n", "for i in range(1,increments):\n", " N = N+step\n", " h = (b-a)/N\n", " s = 0.0\n", " st = 0.5*f(a) + 0.5*f(b)\n", " for k in range(1,N+1):\n", " s += f(a+(k-0.5)*h) \n", " for k in range(1,N):\n", " st += f(a+k*h)\n", " error = abs((val-h*s)/val*100)\n", " errort = abs((val-h*st)/val*100)\n", " y.append(error)\n", " yt.append(errort)\n", " x.append(N)\n", "\n", "# Make the graph\n", "\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y,\"ko-\")\n", "plt.plot(x,yt,\"ro-\")\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of integration points')\n", "plt.ylabel('Integration error in %')\n", "plt.hlines(err1,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.hlines(err2,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.text(x[0]-0.1, err1-0.5, '1% error')\n", "plt.text(x[0]-0.1, err2-0.05, '0.1% error')\n", "plt.text(x[3], y[increments-4]+0.01, 'midpoint',color='k')\n", "plt.text(x[3], yt[3]+0.1, 'trapezoidal',color='r')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 3\n", "\n", "1. Change your integration program to the Simpson's rule. Loop over the number of discretisation points. \n", "2. Plot the value of the integral and/or the integration error as a function of integration points.\n", "\n", "## Talking points\n", "\n", "1. What changes with the Simpson's rule?\n", "2. How many points do you need for 1% accuracy and how many for 0.1% accuracy? \n", "3. How could we do even better?" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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WOycTlaxolOwSExM5Mcff0wVsuf06dOICC1atHDNB3Xs2JGyZctmvSFfOYQqVYKePW20BEuRx4pOFrGiU7A5f/48P/zwg8s9+9tvv+XcuXMEBwfTqlUrV0+offv2hIWF+X/h9HIIOZ0JbLQESxHGik4WsaJTuDh79iwJCQmu4bjvv/+exMREihUrlipkT+vWrSlevHj6F8uM95qNlmApYgQqynRdoDdQGxMA1B1V1YHZsjIfYkWncHPy5EnWrFnjGo7bsGEDycnJlCxZkvbt27uG41q1apU30RJiYqBKlcC1W1RZuBB27oRHH81rS3KHmTPh7rvNg05UlO96u3dDnTowYwYMGJC5Npwekj483LItOiJyEzAfCAL+Bc55VFFVreunuQUGKzpFi6NHj/L111+7huN+/vlnwERL6Nixo2s47pJLLmHu3LmBySEEqaMlrFxp0jl4Rkvo3NlES3B401kywYABsHy5GfIsChw4AL//bhY5p9djzyPRQVUz3IBNwDKgsj/1C8t22WWXaWFi3759OnToUG3Tpo2WLFlSAd21a1eaegcOHNCbb75Zy5Ytq02bNtUVK1akqTN48GDt1q1bLlidd/z77786b948HTx4sDZq1EgBBTQsLEyDg4Nd+86y2NjYwDR84YLqd9+pvvCCateuqiVLqoKqiOqll6o+/rjqF1+oHj8emPYKO/37q9aokXG9s2dz3JR8xa5d5nM1Y0bmz42ONpsPMKlwvOuJrwOpKsEpoKs/dQvTlhXRiY1VjYw0vw+RkWY/vxAXF6dVqlTR6667Trt27epTdO68805t3ry5Ll26VIcOHarly5fXw4cPu46vW7dOS5Uqpb///nsuWp/37N+/X2NjY7VUqVKpBMe5hYeH62+//abJycmBbfjsWdWvv1YdO9Z80UNDzVc3OFi1bVvVESNUly9XPX06sO0WBvr3N/fKfYuMVI2LM38vWKB6772qlSqplitnztm+XbVfP9WoKNUSJVTr1FF94AFVt++A69o1aqh+841qq1aqxYuba7/+elo7du5UveMO005oqOoll6h+/HHKcac93rb+/VPq/fmn6p13qlasaK5z8cWqs2enbmvGDHOe+3f71CnVwYNVw8NVS5VSveEG1dWr04rO99+r9uxp3leJEqoNG6oOH572s5ULorMeuN2fuoVpy6zoxMaqhoWl/ryE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MGm9nXHjFi92GmNCizgXqjZpku8XqvorkQuBtJmdLEWapk3BI5eYC0cg4Wxz4403snbtWnbu3Okq2717N9988w03Or+QASQ5OZkhQ4YwcuTIVPmUTp065fr75MmTzuFmr7Rr144yZcqwY8cOWrVqlWZr1KhRlu2Ljo4mOTmZ+fPnpyqfM2cOoaGhtGnTJsvXtqRmwoQJhIWFpSoLCwtj8uTJfP755xw+fJi1a9fy/PPPU61aNd566y169OhBxYoVadWqFU8++SRLly7l5MkAROyqXBluvRWmTIGtW00cq9hYuPlm+PFHeOghaNYMIiLg9ttNfLgdO3xHVMhLfI27uW/AzZh8Oh8B/TAx0zq7b/5cp6Btdk4nY3wt2g4KMksWzpzJ3vVPnjyp9erV02bNmunChQv1008/1ebNm2udOnX0xIkTrnq7d+/W4OBgHTt2bKrz4+Pjdf78+Tp58mQF9MEHH9T58+fr/PnzvbY3bdo0bdKkiZ4/f95VNmXKFC1TpozGxsZqbGysli5dWt9888107Z42bZoGBwfr/fffrwsXLtS4uDiNjY3V++67T+fMmeOq53SZ9sQ5p+O+PklVXd5rpUuX1tdee02XLVumw4YN8+m99tVXX6VrpyV9MuO9dvbsWV21apWOGTNGr7zySi1WrJgCGhISou3atdNRo0bpihUrAhMtwZOdO1XfeccsrouISPki1qqletddqjNnqvoZxSMQEADvtWQfm9ODLcmf6xS0zYpOxnhbtF28uEkgB6o1a5pF21lZEO5kz549esstt2iZMmW0dOnSetNNN+kuj4VDu3btUkCfffbZVOXuXmmemycHDhzQihUrppm8T0xM1Mcee0yrVKmilStX1scff1wTExMztPuLL77QTp06aZkyZbREiRJar149vfvuu/UXt3APmRUd1ZR1OtWqVdNixYppgwYNfK7TsaKTd5w6dUq/+uorHT58uLZu3doVLaF48eIaExOjzz33nK5ZsyZr0RLSIzlZdetW1SlTTHiRSpVSvpz16qned5/qBx+o/v13YNt1Iz3R8TfgZ7QfPaZVGV6ogFFYA34GGm8pR+64www9jx4NCQkQFQXPPAN33mlyaFksRY3jx4+zevVqVwTtjRs3oqqUKlWKDh06uCJot2zZkuDgTOfE9E1yMmzenOKUEB8PjsjdNGmSMh/UqROEhwck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VPVbVd2Wxc6VxZJrXHYZfPEFfPstNG8Ojz1m1va88Yb3tCGWwst1113n+rtChQpUqVKFNm3aULZsWVd5Y8eq43379nm9RkJCAt26dUsVOqZWrVq0b9/ea/1evXqlSsDWvn17atasSUJCAgBff21SlPXr1y/Vec79VavST8gcFhZGTExK2MvixYvToEED9ubjdQQ2fZalSNC2LSxfbjL11q8PQ4dCw4YmyKjb0LmlEFOhQoVU+6GhoV7LAM6ePev1Gn/99RdVq1ZNU+6tzFd51apV2b9/PwCHHd4uERERqepUq1Yt1XFfeNoPRnh82Z8fsKJjKVJER8OqVfDll1CtGtx3H1x0EcyeDUlJeW2dJb8TERHBP//8k6bcW5mv8n/++YcaNWoAEB4eDpisoe449ytWrJgte/MjVnQsRQ4R6NoV1q6FRYugTBm46y5o1gw+/DBTCRItRYy2bduyePFiTp065Srbt28f33zjfdXIRx99lGp9zDfffMMff/xBW0fOjmhH4qi5c+emOm/OnDkAXHnlldm2uXjx4gCcOZM/llNa0bEUWUSge3dYvx4++giCg6FPH2jZEhYu9J6111K0GTVqFMePH6dr164sXLiQefPm0bVrV5/DaydOnKBHjx588cUXzJw5k169etGgQQPuuusuAJo2bcrtt9/ucm3+6quveO655xgzZgy33347zZs3z7bNTZo0AeCVV17hu+++I6/jSVrRsRR5goKgZ0/46SeTv+rMGZNK4fLLYckSKz6WFC666CIWL17M6dOnue2223j66acZNmwYXbp08Vp/+PDh1K9fnwEDBjBkyBAuvfRSvvzyS4oVK+aqM2vWLJ566ineffddunXrxjvvvMNTTz3FrFmzAmJz9+7dGTJkCFOmTKFt27ZcfvnlAbluVslMaoMg4AqgNlDC87iqvhdY0/IeG2W6aJKYCLGxZmHp7t3GCWH8eOjcOa8tsxQUdu/eTZ06dXjrrbe4995789qcXCfbUaZFpAmwFRPuZi4w02ObkX0zLZb8QUgIDBhgQutMmwb79pn02TExsGZNXltnsRRs/B1emwKEYOKsNcakOHDf6uaIdQFCRFaIyE8islFEVotIi7y2yZL/CQ2F++83QUUnTYJff4WOHeHaa00K7agoMzQXFWWG5SwWS8b4m8TtODBAVT/OeZMCj4iUU9Vjjr9vBp5V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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "\n", "# define function, bounds and value of integral\n", "def f(x):\n", " return x**4 - 2*x + 1\n", "a = 0.0\n", "b = 2.0\n", "val = 4.4\n", "\n", "# Set up lists for plotting\n", "y = []\n", "yt = []\n", "ys = []\n", "x = []\n", "err1 = 1.0\n", "err2 = 0.1\n", "\n", "# define settings for convergence loop\n", "factor = 2\n", "initial = 2\n", "increments = 7\n", "\n", "# convergence loop\n", "N = initial\n", "for i in range(1,increments):\n", " N = N*factor\n", " h = (b-a)/N\n", " s = 0.0\n", " st = 0.5*f(a) + 0.5*f(b)\n", " ss = f(a) + f(b)\n", " for k in range(1,N+1):\n", " s += f(a+(k-0.5)*h) # midpoint integration\n", " for k in range(1,N):\n", " st += f(a+k*h) # trapezoidal rule\n", " for k in range(1,N,2): # Simpson's rule\n", " ss += 4*f(a+k*h) \n", " for k in range(2,N,2):\n", " ss += 2*f(a+k*h)\n", " error = abs((val-h*s)/val*100) # compute errors\n", " errort = abs((val-h*st)/val*100)\n", " errors = abs((val-h*ss/3.0)/val*100)\n", " y.append(error) # collect values in arrays\n", " yt.append(errort)\n", " ys.append(errors)\n", " x.append(N)\n", "\n", "# Make the graph\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y,\"ko-\")\n", "plt.plot(x,yt,\"ro-\")\n", "plt.plot(x,ys,\"bo-\")\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of integration points')\n", "plt.ylabel('Integration error in %')\n", "plt.hlines(err1,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.hlines(err2,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.text(x[0]+2, err1-0.8, '1% error')\n", "plt.text(x[1]+2, err2-0.08, '0.1% error')\n", "plt.text(x[increments-4]+20, y[increments-4]-0.116, 'midpoint',color='k')\n", "plt.text(x[increments-4]+20, yt[increments-4]-0.01, 'trapezoidal',color='r')\n", "plt.text(x[increments-4]+20, ys[increments-4]-0.00004, 'Simpson',color='b')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 4\n", "\n", "The python file gaussxw.py is included in the lecture folder. It contains the routine gaussxw that generates the integration grid points and corresponding weights. It use is shown below.\n", "\n", "1. Change your integration program to use Gauss-Legendre integration. Use $N=3$ integration points.\n", "2. Test what happens when you increase the number of integration points.\n", "\n", "## Talking points\n", "\n", "1. What changes with Gauss-Legendre integration?\n", "2. Do you still need to verify convergence?" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.4000000000000075\n" ] } ], "source": [ "from gaussxw import gaussxw\n", "\n", "def f(x):\n", " return x**4 - 2*x + 1\n", "\n", "N = 3\n", "a = 0.0\n", "b = 2.0\n", "\n", "# Calculate the sample points and weights, then map them\n", "# to the required integration domain\n", "x,w = gaussxw(N)\n", "xp = 0.5*(b-a)*x + 0.5*(b+a)\n", "wp = 0.5*(b-a)*w\n", "\n", "# Perform the integration\n", "s = 0.0\n", "for k in range(N):\n", " s += wp[k]*f(xp[k])\n", "\n", "print(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bonus exercise 5\n", "\n", "1. Plot the function $ f(x)=0.2 x^5 - 0.3 x^4.0+2.3 x^3-3.1 x^2 + 1.7 $.\n", "2. Integrate $f(x)$ from -1.0 to 2.0 using both Gauss-Legendre integration and the Simpson's rule.\n", "3. Define your own function to integrate." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "\n", "# start and end points\n", "a = -1.0\n", "b = 2.0\n", "points = 100\n", "\n", "# Set up lists for plotting\n", "y = []\n", "x = linspace(a,b,points)\n", "\n", "# generate the function values\n", "for xi in x:\n", " val = 0.2*xi**5 - 0.3*xi**4.0+2.3*xi**3-3.1*xi**2 + 1.7\n", " y.append(val)\n", "\n", "# Make the graph\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y)\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.545000000000005\n" ] } ], "source": [ "from gaussxw import gaussxw\n", "\n", "def f(x):\n", " return 0.2*x**5 - 0.3*x**4.0+2.3*x**3-3.1*x**2 + 1.7\n", "\n", "N = 3\n", "a = -1.0\n", "b = 2.0\n", "\n", "# Calculate the sample points and weights, then map them\n", "# to the required integration domain\n", "x,w = gaussxw(N)\n", "xp = 0.5*(b-a)*x + 0.5*(b+a)\n", "wp = 0.5*(b-a)*w\n", "\n", "# Perform the integration\n", "s = 0.0\n", "for k in range(N):\n", " s += wp[k]*f(xp[k])\n", "\n", "print(s)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ0AAAEXCAYAAAB29JkcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABheUlEQVR4nO2dd3hUxdeA30kIgUAooSMmoTcpKihNOkFREQVBBQQ/FQUVEStFBRHLzwYWVBQBJSoiiqJC6E1BQQURpSlVpAmCEEpIzvfH7G42m91kEzbZlPM+zzy7d2buvefevbtn58yZc4yIoCiKoii5QUiwBVAURVEKD6p0FEVRlFxDlY6iKIqSa6jSURRFUXINVTqKoihKrqFKR1EURck1VOkoiqIouUahUTrGmJHGmC3GmBRjTI9gy6MoilIYKTRKB1gMdANWBFsQRVGUwkqRYAvgC2NMNeBRoBnQBCgOVBeRnV76Xgi8AnQBDLAIGCYiu519ROR7R1+/ZShfvrzExsZm+xoURVEKIz/++ONhEangrS3PKh2gFtAb+BFYCcR562SMiQCWAGeAAYAATwNLjTGNReRkdgWIjY1l3bp12d1dURSlUGKM2eWrLS8rnRUiUgnAGHMHPpQOcCdQA6grItsd/X8BtgF3AS/ngqyKoiiKH+TZOR0RSfGza3dgjVPhOPbdAXwLXJcTsimKoijZI88qnSzQEPjVS/0moEFWD2aMGWSMWWeMWXfo0KHzFk5RFEVJpSAonSjgqJf6I0BZ54YxZrQxZi/QEnjXGLPXGFPZcycRmSwizUSkWYUKXufBFEVRlGxSEJQOWOcBT9K4qYnI0yJSTUTCRaS84/3+XJJPURRFoWAonaPY0Y4nZfE+AspZ4uMhNhZCQuxrfHyui6AoipJXycvea/6yCTuv40kD4LdclSQ+HgYNgsREu71rl90G6Ns3V0VRFEXJixSEkc6XQAtjTA1nhTEmFmjtaMs9Ro1KVThOEhNh6FDYsSNXRVEURcmL5OmRjjGml+PtpY7Xq4wxh4BDIrLcUfcOcC/whTFmNHZ+ZxywB3g7N+Vl927v9UeOQI0aUKsWxMXZ0qEDlCqVq+IpiqIEGyPibQ4+b2CM8SXcchFp79YvmrRhcBZjw+DsPJ/zN2vWTLIUkSA21prUPKlaFR59FBYuhKVL4eRJCA2FFi1SlVCzZlAkT/8HUBRF8QtjzI8i0sxrW15WOsEmy0rHc04HICICJk9OndM5exZWr4YFC2z58UcQgTJloFMnq4C6dIHq1QN6LYqiKLmFKp1skmWlA1bxjBplTW3R0TB+fMZOBIcPw+LFdhSUkAB799p6NcUpipJPUaWTTbKldM4HEdiyJXUUtHSpHTWFhkLLlmlNcaGhuSeXoihKFshI6RQE77U8RXx8PLGxsYSEhBAbG0t8VtbpGAP16llvt6++sg4IS5fCI4/A6dPw5JN2Hqh8ebjxRmu227kzx65FURQl0OhIJwOyOtKJj49n0KBBJLrN6URERDB58mT6BmKdjtMU5xwJOU1xtWunjoLat1dTnKIoQUXNa9kkq0onNjaWXV6812JiYtgZ6BGJCGzenKqAli2zprgiRdKa4i69VE1xiqLkKqp0sklWlU5ISAi+7uejjz5Kly5daN26NcWKFQuUiKmcOZPeKw6gbNlUr7i4OIiJCfy5FUVR3FClk00CNdIJDw8nOTmZc+fOUbx4ca644gq6dOlCXFwcjRo1ylIKbb85dCitKe6vv2x9nTppTXGRkYE/t6IohRpVOtkkkHM63bt3Z/ny5SxcuJCFCxfy+++/A1CpUiU6d+5MXFwcnTt3pmrVqgG/DkTg99+tW7anKa5Vq9S1QWqKUxQlAKjSySbZcZmOj49n1KhR7N69m+joaMaPH+/ViWDv3r0uBbRo0SKcCeMaNmxIly5d6NKlC+3ataNEiRIBuZY0nDkD332XOgr66SdbX7YsdO6cOhKKjg78uRVFKfCo0skmubVOJyUlhQ0bNriU0MqVKzlz5gxhYWG0bt3apYQuueQSQnNiJHLoECxalDoScpri6tZNVUDt2qkpTlEUv1Clk01yfXGog1OnTrFq1SoWLFjAwoUL2bBhAwBRUVF06tTJpYRiY2MDf3KnKc7dK+7UqbSmuLg4uOSSVFNcVqMwKIpSoAm40jHG1AY6Y4NrLhGRzecnYt4kWErHkwMHDrB48WKXEtq3bx8AtWvXdimgDh06ULp06cCf/MwZ+Pbb1FGQ0xQXFWVNcaVKWaVz6lTqPp7x5hRFKVQEVOk40g18gE2eVhKoAdwqIh+fr6B5jbyidNwREX7//XcWLlzIggULWL58OSdPniQ0NJTLL7/cpYQuu+wywsLCAi/AwYNpveIcCjAdMTEaLUFRCimBVjq/AUNFZJFj+0mgv4jUOm9J8xh5Uel4cvbsWVavXu1SQuvWrUNEiIyMpGPHji4lVLt27cC7ZotYE5uvZ+jZZ6FrV2jSxKbvVhSlUJAtpWOMmQvcKyK7POoPAzEictKxfSXwsYiUCajUeYD8oHQ8OXLkCEuWLHEpIWckhOjoaNfaoE6dOlGuXLnAnNBXDqGwMEhKsu8rVrQu2c75oMqVA3NuRVHyJNlVOpOAfsCzwAsics5RPxOIAN4CSgCjgW0i0jMHZA8q+VHpuCMi/PHHHy6vuCVLlnDs2DGMMVxyySUuJdSqVSvCw8Ozd5KMcgh17Gi94hISrCnO4RZO48Z2BBQXB23aQE5EaFAUJWhk27xmjLkUmASUAoaIyFJjTDngVaCro9sirLntYGDFDj75Xel4cu7cOdauXetSQqtXryY5OZmIiAjatm3rUkINGzbMminOH++1lBTYsMEqn4QEWLXKjoSKF7fu2E4lVL++jbatKEq+5bzmdIz99bkLeBqYDwwviArGGwVN6Xhy/Phxli1b5lJCW7ZsAaBKlSp07tzZNR9UOSfMYSdOwPLlqUrIcW6qVbPKp2tXGzMuUGZARVFyjYA4EhhjygMvANcBTwBvSAFf5HM+Sqd9+/bp6nr37s2QIUNITEykW7du6doHDhzIwIEDOXz4ML169UrXPnjwYPr06cOePXvo379/uvYHH3yQa6+9li1btnDXXXelax89ejSdO3dm/fr1DBs2LF370KFDOXr0KB999BHLly/n3LlzAJQoUYKyZcvy2GOPcdttt/Hdd9/x9NNPp9v/7bffpm7dusydO5eXXnopXfsHH3zAhRdeyMyZM3nzzTfTtFU6fZp3+/Qh8rvvOPPNN4QnJpICbI6MZF3ZsqyNiuL5ZcuIKF2aSZMm8cknn6Q7/rJlywB48cUX+eqrr9K0FS9enHnz5gEwbtw4Fi9enKa9XLlyzJ49G4ARI0awevXqNO3VqlVjxowZAAwbNoz169enaa9Tpw6TJ08GYNCgQWzdujVNe9OmTZkwYQIA/fr1Y68zLYWDli1b8uyzzwLQs2dP/vnnnzTtnTp14vHHHwfgqquu4pS7izpwzTXX8NBDDwH589l75plnaNWqFd999x0jR45M1z5hwgSaNm3KokWLAv7sAXz66aeUL1+eadOmMW3atHTt33zzDREREYXq2XNeU3bISOkUyWTH0kALoBiwTkRuM8a0Bt4AbjPG3C0ia7MtmZKnqFy5MjfccAP169dnxIgRnDhxgqNHj3L06FH++usv7r33XoYPH06DBg04duwYZcuWpWTJkhw8eJAdO3ZQv359oqOj6dkz69N7B4oV40z//kQ+8AAfT5nC92+8QfMjR2h29Ch9d+/m1t27keho6NiRhuHhVDl1ir+LF8+Bu6AoSk6SkSNBB2A2VjGdxa7JeVBE3jDGhAD3Y0c8HwMjROTfXJE4Fyno5rWskJiYyMqVK10LVDdu3AjYUdDp06dJTk529Q1o4jqAf/+FJUusGS4hIdVbrmbN1LmgDh00eZ2i5BGy6722EVgKPCAiycaY27FOBeVE5ISjTxXgZaCjiFTKEemDiCod3+zfv59FixZx9913c/LkyXTtFSpUYMeOHYEPWCoC27alzgUtXQonT6Ymr3MqoUsv1bVBihIksqt0/gVuFJGFju0o4DBQR0S2e/TtICJLAyp1HkCVTuZklLguLCyMNm3a0LVrV+Li4mjSpAkhgVYEZ8/aiNlOt2xnmJ5y5WyYHqcSuuCCwJ5XURSfZFfpfAZUx3qtncZ6sDUCaopISg7JmqfIXmqDwhX70lfiuooVK3LrrbeyYMECfvnlF1ed0y27S5cuVKlSJfACHTxo1wY5R0L799v6hg1TveLatrWu2oqi5AgZKR1ExGsBygHvAweBf4EEoKGv/gWxXHrppZIVZswQiYgQsTYgWyIibH1BZcaMGRIRESGAq0RERMgMt4vet2+fTJ8+Xfr27SsVKlRw9WvcuLE89NBDsmDBAjl16lTghUtJEdmwQeSFF0Q6dxYJD7cfSni4SJcutv6XX2w/RVECBtbxzOvvqqY2yICsp6v2HhGmoMe+9DdxHaTmDlqwYAEJCQmsWrWKpKQkihUrRrt27YiLi6Nr1640aNAg8LHiEhNhxYrUUdBvv9n6KlVSQ/R06QIVKgT2vIpSyNB8Otkkq0onJMR77Etj7IJ8JT0nT55k+fLlJCQksGDBAjZvtlkyqlat6lJAnTt3pnz58oE/+d69qdGyFy6EI0fsh3XJJammuJYtoWjRwJ9bUQow2TKvacm6eS0mJq1pzb08/LDI0aNZOlzA2bNnj9x7773SokULKV68uACyY8eOdP0OHTok119/vZQqVUoaNmwoixcvTtdn8ODB0q1bt4DLuGvXLnnnnXfkxhtvlLJlywogxhhp1qyZjBw5UpYtWyZnzpwJ+Hnl3DmRH34QGTdO5IorRIoUsR9ciRIi11wj8tprIlu3ppriZsywH7gx9rUg21AVJYuQgXkt6D/sebkEYk6neHH7G2aMSFSUyCuviOTEb6Y/LF26VCpWrChXXXWVxMXF+VQ6/fv3l8aNG8v8+fPl3nvvlTJlysiRI0dc7evWrZMSJUrIH3/8kaPynjt3TtasWSNPPfWUtGnTRkJDQwWQkiVLyrXXXiuvvfaabN26VVJyYk7m2DGROXNEBg8WqVkz9QONjRXp2DF1fqiwTN4pShZQpZNLSkfE9x/g9evtXDbY37BPPsn9+evk5GTX+3feecen0ilfvrzMnDlTRESSkpKkZMmS8s0337iO0bx5cxk3blyuyHz27FmXUvn333/l888/l8GDB0uNGjVcDgmxsbEyaNAgmT17thzNwnDy9OnT/guyfbvIpEki111nP1xvw9no6KxdnKIUUDJSOrp6LsD07WudBlJS7KtzPr1JEzt1MG+e9dbt3Rtat7ZLTHILf9fInD17luIOl+IiRYpQtGhRTp8+DcDkyZM5duwYjzzySJbOfe7cOZ599lnq1atHeHg4VatW5cEHH3QdF2Dnzp0YY5g0aRKPPPIIVatWJTw8nH///ZeBAwfSsGFDKlWqxPr169m3bx8DBgxg0qRJ1KhRg/fee4+ePXtStmxZIiMj6devH6tXr3bFjxszZgzGGH799Ve6du1KyZIl6d27t/8XULMmDB4Mc+b47rN7t/1g330X9uzJ0v1RlEKDL22kJXsjHX84d05kyhSRKlXsH+QbbrDTBblJRiOdLl26yNVXXy2HDx+Wd999V8LCwmTXrl1y6NAhiYqKkoULF2b5fH369JGIiAgZO3asLFy4UF599VUpXbq03HDDDa4+O3bsEECqVq0q1113ncydO1fmzJkjiYmJMmDAAClZsqRER0fLq6++KkuXLpU1a9bIX3/9JeXLl5fq1avL6NGjpXfv3lK6dGnXKKhMmTLSs2dPueaaawSQGjVqyPjx42Xx4sWydOnS7N08X5N3JUqIVK2aul2/vsj994t8843IyZPZO5ei5EMIhHkNqAE8hg2F855HmeLvcfJTySml4+TECZGnnrK/VUWKiNx3n8ihQzl6ShcZKZ2NGzdKdHS0AFKkSBGZOHGiiIgMHDhQbrrppiyfa8WKFQLI9OnT09TPmDFDAPn5559FJFXpXHzxxenmaQYMGCCAzJkzJ039gw8+KKGhobJt2zZX3blz56RmzZoSGxsrt99+u1SrVs2lhCpUqCD33nuvzJ07V/77778sX4tDcN8LslJSRH79VeSll0S6dhUpVsy2Fy0q0qmTyP/+Z9cO6dqg3OPzz+3nUViYOtU+c16+22nYscP2mzo16+do184WH5y30sGmMzgLnAP2ATs8yp/+HCe/lZxWOk7+/lvkrrtEQkJESpUSee45kcTEnD1nRkpHxM7lbNmyRY4dOyYiIqtWrZLSpUvLvn375NChQ9K7d2+JioqSunXryieffJLhuUaOHClFixaVEydOSFJSkqscPHhQAJdScyqdsWPHpjvGgAEDpEiRInLu3Lk09c2bN5fWrVun6//kk0+KMUaOHTsmKSkpMmTIEAGkffv2Ls+9sLAwadeunTzzzDOybt26NHNemeKv91piokhCgsiDD4pcdFGqkqpcWeTWW0Xi40UOHPD/vErWGTBA5IILgi1F7nHwoMjq1SKZzVkGSen4O6fzNLAMqCIiVUWkukepkXXDnuKkcmV46y3YuNFGaHnsMahbF2bMCN76niJFilCnTh1KlSpFcnIyQ4YMYezYsVSpUoX777+fEydOsGPHDl577TX69+/vSgDnjYMHD3L27FlKlixJWFiYq1SsWBEgXe4YX+FxKlasSGhoaJq6I0eOeO1fuXJlRISjR49ijKGCY8HnggULOHr0KIsXL+aBBx7g2LFjjBw5kmbNmlGpUiVuueUWpk2bxr59+zK+Qb4m7zwpXtyu+XnxRfsB790LU6dC+/bw9dd2v0qVbIDSESNg2TIbT07Jfc6cCbYEgaFCBWjRArKbgj6H8Vfp1ABeFJFDOSlMYadBA5g710bxr1AB+veH5s3tdjB59dVXCQkJ4d577wVg/vz53H333ZQqVYouXbrQsGFDFi1a5HP/cuXKUaxYMdauXeu1eCb98hWJwFt9VFQU+53x1dzYv38/xhiioqLSHSM8PJyOHTvy/PPP8/PPP7N//34++OADrrrqKpYsWcJtt93GBRdcQKNGjXjwwQdZsGBBuqRp8fHxxMbGEhISQmxsLPHx8T6vPw0XXAADB8JHH8GBA7B2LTz9NJQoYRVThw42WGn37vD66zaitugC7mwzcCBMnw5//WUX/hpjQ4csW2bff/YZ3Hmn/cJVcgTK377dfvmqV7d/GmrUsE4kR4+mP3a1atYbqHlzKFbMHvu119LLsWOH/YNRoYJVBk2bwuefp7Y75fFWBg5M7ff333DrrVC+vD1O48b236k706bZ/dzDoCQmwpAh9tkqWdI+Xx7J3AD7PPbqZa+reHH773fkSPB4/s+HDJO4ubEZG4tNyQU6dLCf/Ucf2c+7Uye4+mr43/+sYspN/v77b8aOHcv8+fPTjDLc0xmcOHHCaYb1ypVXXsnzzz/PsWPH6NSpU0Dla9euHRMmTGDnzp3ExsYCkJyczMyZM7n44ouJjIzM9BiVKlWiX79+9OvXDxHhl19+cYXpef3113n55ZcJDw+nbdu2dO3alaSkJMaNG0diYiIAu3btYtCgQQBZyyEUGgrNmtkyahQcP25TNTgjZs+da/vFxtroCF27QseOULp0Vm5R4ebxx+HQIfuF+vJLWxceDseO2ff33QdXXQUffABOT8p9++yP7oQJULYs/PknPPMMdOsGHlk9OX4c+vSBRx+FWrXg449h6FCIjExVFnv2wOWXQ8WK8MorVvHMnAk9e1pvyO7dbRQMz2MvXWp/AOrXt9snT0K7dlb5PfMMXHihVTj9+1ul4ngGvXLXXfacTz5pFeTChXDLLen77d5tFeLAgfYaNm2Cp56y9+Djj/2+7Rniy+7mXoBOwEaghj/9C0rJrTmdjDh1SuT550VKl7ZzPoMG2Tmg7DJr1iyZNWuW3H333QLIpEmTZNasWbJs2TKv/W+66Sa5884709T17t1bGjZsKN98842MGTNGQkNDZdOmTRme9+abb5YyZcrIU089JfPnz5cFCxbI5MmTpUePHrJlyxYRSZ3Teeedd9LtP2DAALnAi13e6b1Wq1YtiY+Pl7lz58pVV10lISEhMm/ePFe/J598UgBJSkrK9B65c/LkSZk3b5488MAD0qBBgzSBTT1LTExMlo6dKdu3i7zxhl0bFBlp7e+hoSKtW1sPlDVrrCukkjHe5nSWLrX3s0ePzPdPShJZudL2/+mntMcFkY8+Stu/c2e7ZsvpLPJ//ydSvrzI4cPp+zVp4v2cW7eKlC0r0rNn6nFee82ez9PrslMnkQoVUp8FT0eCzZvtj8ezz6bd7+67M57TSUmx1/7BB3bu0l3+XHAkWIl1IDgD/Aqs8CjL/TlOfit5Qek4OXRIZOhQ6+VWooTI2LHW+y2r+PrBbOflAVq8eLGUL19e/vnnnzT1+/fvlx49ekhkZKRUr149TURpXyQnJ8uECROkcePGEh4eLqVKlZLGjRvLww8/LP/++6+IZE/piIhs3rxZrrvuOilVqpSEh4fL5ZdfnkbhiGRf6XiyZ8+eDBVPjoXpOXtWZPlykVGjRJo1S12gGhUl0ru3yLvviuzZE/jzFgQyUjoeHpUiYkOGjB8vUrduqvehs7grmAED7J+As2fT7v/uu7av8/OoWtU6jSQlpS0vvGD7OZx1XBw5IlKnjkjz5mk9im680btDhFPJ/PJL2m2n0pk+3W57RhBZtiy90jl2TOSRR0Rq1BAJC0t77atXp/bLBaWzDJtF1Gfx5zj5reQlpeNk61b75wfsOp9339U/u7lNTExMhoonV8L0HDpkfwAHDky7NqhBA5Fhw0TmzdO1QU4yUjoLFqTvP3y4/cEdN05k8WIbk++zz9L/QA8YYEcwnsyda/uuWWO3nXH8fJU//0zdNynJhlmKjk5v0ujUyf7h8GTePHscp7XCU+k895zd9vyX+vvv6a/phhusC+2ECfZ4a9fa0bbnCOs8lI5fczoi0t6ffkrOU7s2fPqpnbt86CG44w5ren7hBWvyD3Q2ACU948ePZ9CgQa45HYCIiAgmTpxIhQoVSEhIICEhgbmOOZnq1au7ImZ37NiR0oGYkylfHm66yRYRa3t3zgW9+aZ9KMLD4YorUueDLrpIHxBPvN2Pjz+2k/WjR6fWnTjhff+jRyEpCcLCUusOHLCvzmy15crZz+HRR70fo2rV1Pf33GPnn7791rq1uhMVBd68RJ2ONOV8TLs7vTsPHLBOEZ5yOjl9Gr74AsaMgfvvT63fuNH7cbOLL21UkAowEtgCpAA9/N0vL4503ElJEZk1KzUeZefOIo51lkoOM2PGDImJiRFjjMTExHg1MW7fvl3eeOMNue666yQyMlIACQ0NldatW8tTTz0la9asSbfuKCAkJorMny/ywAMiDRum/qOuUsX+O//wQ7uWo7AwaJA1Q7rjHOl4i65Rpoyd73Cnf3/vIx1/5nQGDLDmsswW3738sjXXff219/bXX7fnW7UqbX2XLiIVK57/nM6//9rt555L269t24COdDL6oW4LlHR7n2HxdZy8UIDLgZpYM2GBUTpOzpyxo+GoKGvqHzBAzft5jbNnz8ry5ctl1KhR0qxZMzHGCCBRUVHSu3dveffdd2VPTn1oe/aIvPeeSJ8+9iEB+6BceqnIyJHWjBKs0Oe5wYQJ9ponTbKmsl9+yVjp3HSTDQ//xht2Ye9dd6X+s/NUOpGRIhdeaCf5589PVUTTpqX227VLpFIlaxqbNs3e788/t+a7226zfb791iqGgQPt3Il72b7d9jlxQqR2batg3nnHmtX69bPne/vt1PN5i0jQr581GY4fb02KDz9sFaPnNbVoYZ0Spk+3yq9nz9RrzwWlkwJc5vY+2UdJAZJ9HcfLcasBrwGrgUSsHTzWR98LgU+BY8Bx4DMg2t9zeTlegVQ6To4etXOA4eF2/nPkyPRzlEre4NChQ/LRRx/JwIEDpWrVqq75oAYNGsiwYcNk3rx5cjIn5mTc8wa1aWP/WYNIyZIi3bvbf9NuIYUKBCdOWEVSpoy91piYjJXOoUNWQZcpY8stt9h75k3pXHCBVRjNmtkvXnS0iCPCRhr27BG5/XY7/xYWZiNSdO5sPcNEUhWFtzJgQOpx9u2zCqRcORtaqVGj1GM48aZ0Tp60I5uyZa0n0rXX2hGT5zXt2CFy5ZX2eahQQeSee0S++iqgSsdn5lBjTDvgRxE54XifmZlueWZ9HMdtD8wEfgRCgTiguojs9OgXAWzAesyNdnwpnwYigMYicpIsYoxZBkwQkTn+9M9q5tC8wq5ddtlHfLxdEjBmjF3/5m52VvIOIsKmTZtc2VNXrFjB6dOnCQ8P54orrqBr167ExcXRqFGjwKfwPnYsdW1QQoJdxAjW9u/MntqxI5QqZR+oUaPsWo7oaBg/3nckhsLAwIGwaJH3RZaFnDyVORQIcXt/Bz5GOsD92JFULbe66tj4b8Pd6n4CDvsoF3occxkFeKTjydq1Iu3b2z8pderYnGQaZzLvk5iYKAkJCTJ8+HBp2LChaxRUuXJlufXWWyU+Pl4O5tSczLZtdrTTvbv9t+tcG1SnTnoX2sKeuK6wxXTLAmRnpJMbGGPuAN7B+0hnMVBMRFp71C8HEJFMR19ezreMXBrptG/fPl1d7969GTJkCImJiXTr1i1d+8CBAxk4cCCHDx+mV69e6doHDx5Mnz592LNnD/3790/X/uCDD3LttdeyZcsWV2gZEfjnn5bs2HE3iYkxXHEFDBq0lXffTb96+ZlnnqFVq1Z89913jBw5Ml37hAkTaNq0KYsWLeLpp59O1/72229Tt25d5s6dy0svvZSu/YMPPuDCCy9k5syZvPnmm+naP/30U8qXL8+0adOYNm1auvZvvvmGiIgIJk2axCeffJKufdmyZQC8+OKLfPXVV2naihcvzrx58wAYN24cixcvTtNerlw5Zs+eDcCIESNY7bE6vFq1asxwhBsZNmwY69evT9Nep04dJk+eDMCgQYPYunVrmvamTZsyYcIEAPr168dej3/HLVu25NlnnwWgZ8+eaeLRnTlzhsqVKxMeHs7ChQs5cuQIACVLlqRs2bJERUVx00038dhjjwGBe/aKpKTQ8Phxmh09yi379hHqyE3kzsGiRendsqXXZ8+d0aNH07lzZ9avX8+wYcPStefHZ++xzZu59OhRbmzZskA+e85ryg4ZjXT8DYMTDBoCX3ip3wTcmFMnNcYMAgYBREdH59Rpcg1joHz51ZQr9wNNm77Oxx/Xp3//OlSo8DjVq79D8eLp45YpeYvw8HAuueQSHn/8cZKTk7niiiv4+++/OXr0KHv37mXPnj1s3ryZ7777jri4OBITEylevPh5m+LOhYSwoUwZNpQpQz8fSekqnj3L1LVrSZkyBYoWxXi6+RZgnqtXL9gi5Evy8kjnLPCyiDzmUf808JiI+K0wjTGjgbuBCsB/wGmgmYhk+IubX+d0MuK//+yanhdfhORkG3pq1CgbYkrJfxw/fpwlS5a4YsX9+eefQA6sDYqNtZOFnpQpY2PHrVxpozQXK2ZDpTvngxo21LVBhZA8NafjXsh4Tucs8KyX+vHAudyQL7/P6WTE3r02JJQx1qHl5ZczT7+h5H2ca4O6d+8uJUuWTLc26Pvvv8/e2qCMEteJWO+oefNsNIT69VP7VK1q3YA/+ih97DGlwEIAwuCUBsL96ZuVkonSOQC87aV+EnAo0LJ4KwVZ6TjZsMEmuASR6tVFZs5UZ4OCgnNt0MiRI72uDZoyZUrW1gb5m7hORGT3bhuj6cYb7b8a59qg5s1t/LgVK9LHLFMKDBkpnUzNa8aYIlhz1PUiMjeboy1fx87IvLYEKCoibTzql2HNgll2JMgqBdG85osFC+Dhh+GXX2wU9hdfhDZtMt9PyT8cPnyYRYsWuVyznYnqGjRo4DLFtW3bloiIiMCeODkZ1q1Ldcv+/ntbFxlp3bG7drXmuJo1A3teJWict3kN+Avo5k/frBQyHukMw7pH13CriwWSgAcDLYu3UhhGOu6cO2fXiTnjR15/vYgj64BSwEhJSZGNGzfKiy++KHFxcRIeHi6AhIeHS+fOneWFF16QX375JU2wUn9C//jF0aMis2fb8DQxMeIyxdWsKTJkiMgXX4gcPx6Q61SCA+frMm2MeR6oLSI3nI/2czue0x+4E3aCfwhwCGs2W+7oUwK7OPQUqYtDxwGR2MWhPiLwBY7CNNJxJzHR5pp67jkbA/Duu+GJJ+xCU6VgcurUKVasWOFySNi0aRNgU4fHxcVRokQJpk6dmiaDakREBJMnT85a4jpPRGx2VOcoaOlS+wAWKQKtWqWOgi65BEL8TXSsBJuMRjr+Kp3B2KCZ+7FuzH9jlYALEXkvCwL5OulycYtobYyJBl4BugAGWAwMEw9TXE5RWJWOkwMHYOxYmDzZZlN+7DEYNsxmsVUKNnv37mXhwoUkJCSkWRvkSUxMDDvd0yKfL2fO2BDqzojZP/9s68uXhy5drAKKi0sbmVnJcwTCvJaSSfE79lp+KoXNvOaL33+3C9TBxjacPl0kOTn3zr97927p2bOnlCpVSiIjI+X666+XXbt2+bXviBEjpEuXLhIVFSWATPWSJfHcuXPyyCOPSIUKFaRatWryyiuvpOszc+ZMqVKlihwrhMHszp0753JC8FZef/112bZtW87kDdq/38YW69fPBrp0muIaNRJ56CEbvPLUqcCfVzkvCID3WkxmxZ/j5LeiSicty5bZuIYgcvHFIosW5fw5T548KbVq1ZKGDRvK559/LnPmzJGLLrpIatSoISf8SJ1asmRJadOmjdx6660+lc6UKVOkdOnS8tFHH8mbb74poaGhstQtuOF///0nF1xwgXz44YcBvLL8ha/EdUWKFHG9r169utx9993y+eefu7LBBpTkZJu747nnbKKzokXtw1i8uA1S+fLLIps2qftlHuC8lU5hLap00pOcbNOxOOd/u3WzvwH+etJmlQkTJkhISIhsc4t8/Oeff0poaKi89NJLfshrh2Tbtm3zqXR69eolgwcPdm137dpVHnnkEdf28OHDpVOnTudxFf6TkpLiM9316fNcSHU++8+YMUMiIiLSKJyIiAiZMWOGbNu2zevaoDZt2si4ceOyvzYoM06csBGQhw61qaWdo6Bq1ewitJkzRTxSrSu5Q8CUDnARcA/wOHby/6Ks7J/fiiod35w6ZVO8Fy+e+l3PiTiQHTt2lFatWqWrb9u2rbRt29bv42SkdLp37y7Dhw93bd9www0ydOhQERHZuHGjlChRQjZv3pxl2WfPni2XX365FC9eXEqXLi29evVKZxaMiYmRvn37ypQpU6Ru3bpSpEgR+eyzz2Tq1KkCyPLly6VXr15SunRpadKkiYiIHDt2TO655x6pUqWKFC1aVOrUqSMvv/xyGvPW0qVLBZDZs2fLHXfcIeXLl5fSpUtn+Rrc8cd77cyZM7Js2TIZOXKkXHrppS4FFRUVJX369JEpU6bI3r17z0sOn+zcKTJ5ss0BU7q0uNYGXXaZyOOP21D+SUk5c24lDYEwrxUBZpCaP8c1lwN8AIT6c5z8VlTpZE61aumVjjNlSSCoVKmSDBo0KF394MGDpby3/PQ+yEjpjB8/XmJiYmTbtm2ybt06KVmypMuUdsUVV8ioUaOyLPebb74pgNx2223y9ddfy8cffyz16tWT2NhYOe7mDhwTEyNVq1aVhg0byocffiiLFi2S7du3u5ROtWrV5OGHH5aFCxfKvHnzJDk5Wdq0aSMRERHy4osvSkJCggwdOlQAGTFihOu4TqVTtWpVuf3222XevHny+eefZ/k6zpeDBw/Khx9+KAMGDJAqVaq4lFDDhg1l+PDhMn/+fEnMLKNmdkhKsnlunnzSJiYLCbEPZqlSdi3AW2+J/Pln4M+riEhglM44bFiaUY45nHDH6yhH/Vh/jpPfiiqdzDHGu9KBwPypDAsLk0cffTRd/ahRoyQ0NNTv42SkdI4fPy7t2rVz/SDedNNNkpycLNOmTZPq1atn+Ufxv//+k1KlSsltzqyQDnbs2CFhYWFpHBViYmKkePHi8vfff6fp61Q6w4YNS1M/d+5cr9dx++23S9GiReXQoUMikqp0evTokSXZc5KUlBT55Zdf5IUXXpDOnTu71gYVK1ZM4uLi5MUXX5SNGzfmjEPCP/+IfPKJyB13WG8Y50Nau7bIvfeKfPmlyH//Bf68hZRAKJ0dwOM+2p4AdvhznPxWVOlkjvvaPs/SsKHNeHs+vyFhYWHy2GOPpasfOXJkwJSOk507d8pff/0lIiJHjx6VihUryldffSXJyckycuRIueCCC6Rq1aoyatQo11yRNxYsWCCALFq0SJKSktKURo0ayfXXX+/qGxMTIx06dEh3DHfzmjsPP/ywhISEpJufcSqZL7/8Ms329OnTM703weLkyZMyb948GTZsmNSvX9+l9KtWrSoDBw6Ujz76yKVEA0pKishvv9k01lddlWojDguzCaiefVbkxx/tBGZWQv8oLjJSOv5Gaq6KTS/tje8cIx6lEDJ+PAwaZNfzOYmIsJlKv/4arr7aRjp58UW4+OKsH79s2bJe14gcPXqUsgEOjR0TE+N6P2rUKFq1asXVV1/NO++8w4wZM1i5ciUA7dq1o3r16tx+++1ej3Pw4EEAOnfu7LXdU+4qVar4lMmz7ciRI0RFRREeHp6mvrIjpYDnvcro2MEmIiKCK6+8kiuvvBKAPXv2uBanfvHFF0ybNg1jDJdeeildu3ala9eutGjRgrDzTYFrDNSvb8v999sV0KtW2XVBCQkwYoQtkZH2wU5Otvvt2mUfdijcGVPPE3+X+O4DWvtoa+VoVwohffvaxaMxMfa7HBNjtydMgE2b4NVXYcMGuPRSuPVW8JGWxScNGzZ0rY5357fffqNBgwaBuQgPfvzxR2bMmMHEiRMBmD9/Pr169aJ69epUr16dG2+8kfnz5/vcv1y5cgBMmzaNtWvXpivOhFtOMsp749kWFRXFkSNHOHv2bJr6/fv3pzm3P8fOa1x44YXcfvvtfPLJJxw6dIg1a9YwZswYwsPDee6552jbti3lypWjR48evPnmm/zxxx+BOXGxYtC5M/zvf/Zh3bcPpk+3ysapcJwkJsLw4XYRq5It/FU68cAoY8zjxpgaxpjixpjqxpgR2FHOBzknopLX6dsXdu6ElBT76vwTWLSozdfzxx/wyCPwySdQp479E3nsmH/H7t69O2vWrHHliQHYuXMn3377Ld27dw/4taSkpDBkyBBGjRqVJonfyZMnXe9PnDjhNC17pVWrVkRGRrJ9+3aaNWuWrtStWzfb8rVr146UlBRmzZqVpj4+Pp6iRYvSokWLbB87LxEaGsrll1/OE088wapVqzh8+DCzZ8/mlltuYcOGDQwZMoRatWpRq1Yt7rnnHr788kv++++/wJy8ShX7D8kt5E8aDh6EqCg7jJ84ETZvthZlxT982d3cC9Z77UNSPdacJQWrkNR7TcmUXbtE+ve35vPy5UVeey3z6PYnTpyQmjVrykUXXSRz5syRL774Qho3bizVq1eX/9wmfnfu3CmhoaEyduzYNPsvW7ZMZs2aJa+99poAcs8998isWbNk1qxZXs/31ltvSYMGDeSsm2CTJk2SyMhImTFjhsyYMUNKliwpb7/9doZyv/XWWxIaGip33XWXzJkzR5YuXSozZsyQO++8U+Lj4139nC7TnjjndNzXJ4mIy3utZMmS8sorr8iCBQtk2LBhPr3XFi5cmKGc+ZGUlBTZsmWLvPbaa3LNNddIiRIlXAtV27ZtK+PHj5e1a9dmOO/mF74mLCtUELnnHpFatVLroqOtk8KsWSJHjgTkOvMzBHCdTkNgMHZ0MxhokJX981tRpZMz/PijXVDudB767LOMnQ127dolN9xwg0RGRkrJkiXluuuukx07dqTps2PHDgHkySefTFPv7pXmWTw5dOiQlCtXLt3k/blz5+TBBx+UihUrSoUKFeShhx7ya7Hj119/Le3bt5fIyEgpVqyY1KxZU2677TbZtGmTq09WlY5I6jqdypUrS1hYmNSuXdvnOp2CqHQ8OX36tCxdulQee+wxufjii12fb/ny5eXmm2+WqVOnuhxEskRmietERP74Q+TNN0V69BCJjLR9QkJEWra07trffVco1wZlpHT8yadTFBvoc6CIfBmAwVW+obAH/MxJRGDePJvD57ffoHVreOklm8tHUc6HAwcOpMkbdODAAQAaNWrkyht0xRVXUKxYscwPFh9v87nv3g3R0dZzxpcTQVKSzRXkDFa6dq190MuUgU6dbMTsrl3tcQo4gYgyfRDoJyILAi1cXkaVTs5z7hxMnQqPP26jWvfuDc8+CzVqBFsypSCQkpLCxo0bSUhIICEhgVWrVnH27FmKFStGu3btXF5x9evXD7zTxT//wKJFqUror79sfb16NlJ2167Qrp0N4V7ACESU6cnAZH/6FqSi5rXc47//rDUiIsIul3jgAQ2bpQSeEydOyNdffy1Dhw6VunXrukxx1apVk//7v/+TmTNnyj9uD17AEtelpIj8+qvISy/Z/PDFillTXNGiIp06iTz/vMj69QUmWCkBSOJ2PfAq8D0wB+/5dJZkXy/mTXSkk/vs2wdPPgnvvQelSlnLxr33Wq9WRQk0u3btcq0NWrRoEceOHcMYQ/PmzalatSrz5s3jjJt7dEAS14H1jFu5MnVt0K+/2vrKlW3eoK5d7WvFiud3niARCPNaio8mwSZXExEJzb6IeRNVOsHj11+tm/W8eRAbC888A336aPJIJec4d+4ca9eudc0FrV7tfT18wBPXgTW9LVhgy8KF1jQHNmOq0xTXqpVdh5APCITSaZdZH3GkmS5IqNIJPosWWWeD9euheXMb2aBt22BLpRQGQkJC8PX7eO+99xIXF0eHDh0oWbJkYE+cnAw//ZQ6F7R6tZ38LFkSOnRIVUK1atkV2XmQ81I6Du+1wcBiEfk1B+TLs6jSyRukpMCMGdbUtncvdO8Ozz9v52MVJaeIjY1l165d6eqLFStGSEgIiYmJhIWF0bp1a7p27UpcXBxNmzYlJNDD8ePHYcmSVFOcc6F09eqpCqhjRyhdOrDnPQ8C4UhwCmjrT9+CVNSRIG+RmCjyzDN2OURoqMjgwSIHDgRbKqWgklHiutOnT8uiRYvkkUcekSZNmrjaK1asKH379pXp06enixweMLZtE3njDZtDvmRJ65AQGirSurXIU0+JfP+9SE4kzcsCBCDK9E/YdTpBVwS5WVTp5E0OHLALwkNDrQJ6+mmRkyeDLZVSEPHXe+3vv/+W999/X/r27SsVKlRwKaEmTZrIww8/LIsWLTrvzK9eOXPG5pEfOVLk0kvFtYg1KkqkTx+RKVNE9uwJ/HkzISOl4++czjXARKCHiGw8z5FXvkHNa3mbLVvgscdgzhy44AJ4+mno3x9CC5xLi5KfSElJYf369S6vuG+//ZakpCQiIiJo3769a4Fq3bp1A7826NChtGuD/v7b1jdsmGqKa9sWihcP7Hk9CIQjwUqgDlAO2El6l2kRkUydDfIbqnTyBytXwkMPwQ8/QJMm8MIL1ttUUfICJ06cYNmyZa4Fqtu2bQMgOjraNRfUqVOngKfqQMS6gSYk2LJypY2OHR5uFY8zQkLDhmkdErIShcEHgVA6y/BYl5P++qRDlqTKB6jSyT+I2CjWI0bAjh32u/TCC9CoUbAlU5S07NixwzUKWrx4McePHyckJITLL7/cNQpq3rw5RYr4m+7MTxITYcWKVCX0+++2vmrV1FHQsWM2dYNngqzJk7OkeM5b6RRWVOnkP86cgTfesKa2Y8dg4EB46ilrflOUvEZSUhI//PCDaxS0du1aRIQyZcrQqVMnV5ie6JyI17ZnT6pH3KJFcPSo774xMTZviZ+o0skmqnTyL0eOWKvA66/bOZ6HHrLrfSIjgy2ZovjmyJEjrmClCQkJ/OWI11avXj3XKKhdu3aUCHS8tuRkWLcOfOVjMsauXfCTgCgdY8wFwINAW+zczrUi8qsxZhiwWkS+91uifIIqnfzPn3/CyJEwcyZUqgRjx8Ltt0OgLReKEmhEhN9//90VIWHZsmWcPn2aokWL0qZNG9coqHHjxoFzSIiNtWm5PcntkY4xpiGwEpu4bTVwNdBcRH4yxrwCVBKRW/yWKJ+gSqfg8MMPdrSzciXUr28zE199dZ5d0K0o6Th9+jQrV650KaGNG60jcaVKlVyjoC5dulDxfOK1xcfDoEHBn9MxxswHIoGuwGngLNDMoXRuBJ4XkQIXjF6VTsFCBL74Ah59FLZuhfbtbVidSy8NtmSKknX27dvHggULWLBgAQsXLuTw4cMAXHzxxa5RUKtWrSia1XhtecR77QRws4jMNcaEAkmkKp22wHwRiciSVPkAVToFk6QkeOcdG8368GH7fRo/3loQFCU/kpKSwk8//eTyivvuu+84d+4cJUqUoEOHDi7X7Nq1awd+bZAXAqF0jgN9fSidG4B3RKRcQKXOA6jSKdgcP25juL38sh0FDR1q53/KlAm2ZIpyfhw/fpylS5e6lNAff/wB2HhyzlFQx44dKZ1D8doyUjr+Rqb7AbjNR1tv4NvsCKYowaRUKTvC2boVbrrJmtpq1oSJE+Hs2WBLpyjZp1SpUlx33XW88cYbbN++ne3btzNp0iSaNGnChx9+yA033EC5cuVo06YN48aN44cffiA5ORmA+Ph4YmNjCQkJITY2lvj4+IDKlpXUBouApcCHwBRgBNAQuAkbDFS915R8zfr11tlg8WKrfJ57Dnr2VGcDpWCRlJTEmjVrXG7ZP/74IyJCVFQUtWvX5ueff+as27+u7CSuC5TL9NXABKCmW/VO4B4Rmee3NPkIVTqFDxGYP98mkPv1V2jZ0o6AWrUKtmSKkjMcPnzYtTbo/fffJ8XLepysJq4LhHkNEflaRGpjY7C1AeqLSI2CqnCUwokxcNVVdtTz7rt2aULr1tCrF2zfHmzplNwmNjaWgQMHZtpv4MCBxMbG5pgcO3fuxBjDtGnTsrzvsmXLGDNmjFdlAlC+fHluuukmpk6diq9ByO7du7N8Xl9kOduQiGwXke9EZEvApFCUPEZoqF1Eum2bXVA6fz40aAD332893uLj7Tq6kBD7GmCzt5JH+Pzzz3n88ceDLQZVqlRh9erVXH311Vned9myZYwdO9an0nHHV7idQIbh0YzzipIBJUrAE0/YUc5tt9mwOtHR9v2uXdYct2uXXU+niqfgcfHFF1OzZs3MO+Yw4eHhtGjRggoVKuToecaPH09ERNrVLxEREYwfPz5g51Cloyh+ULkyvP02/PKL3U5KStuemGjX0yl5jzFjxmCMYfPmzXTt2pUSJUoQHR3N1KlTAfjggw+oV68eJUuWpEOHDi73YvBuXlu8eDGXXHIJxYoVo2bNmrz99tvpzuk0h02aNInhw4dTsWJFIiIiuOaaa9LNjSQlJTF69GhiY2MpWrQosbGxjB49miS3h8ybeW3gwIFUq1aNn3/+mSuuuIKIiAhq167NW2+9lebax44dC0BYWBjGmAzX6fTt25fJkycTExODMYaYmJgsOxFkiq/sblo0c6jiHWNSEzS6F2OCLZnijSeffFIAueiii2TixImyYMEC6dGjhwAyYsQIadmypXz++efyySefSJUqVeSyyy5z7RsTEyMDBgxwbf/2229StGhRadWqlXz++efy8ccfS7169aRatWoSExPj6rdjxw4BpFq1anLNNdfIV199Je+9955UrlxZateuLWfPnnX1vfnmmyU0NFQef/xxSUhIkDFjxkiRIkXk5ptvTne8qVOnuuoGDBggkZGRUq9ePXnrrbdkwYIFcvPNNwsgS5YsERGRPXv2yO233y6ArFq1SlavXi2rV68O/E32gPNNV11YiyodxRsxMd6VTvHiIr/9FmzpFE+cSmf69OmuuiNHjkhoaKhERUXJsWPHXPUTJ04UQHbu3Cki6ZXOLbfcIuXKlZMTJ0646nbv3i1hYWFelU79+vUlOTnZVb9q1SoB5N133xURkY0bNwogTz75ZBqZx40bJ4Bs2LAhzfE8lY67ghEROX36tJQrV07uvPPOdNeflJSUhbt2fmSkdNS8pihZZPx4GwPRnbAwq3oaNYK774b9+4Mjm+Kbq666yvW+bNmyVKxYkRYtWlCqVClXfb169QDYs2eP12OsXr2abt26pUktcOGFF9K6dWuv/Xv16kVISOrPbOvWralWrRqrV68GYMWKFQD069cvzX7O7eXLl2d4TREREXTokJo/Mzw8nNq1awfU2yzQ+K10jDEhxpgWxpjexphbPUtOCqkoeYm+fW3Q3ZgY62IdEwNTp9qcWEOGwJQpUKsWjBsHJ08GW1rFiWc66KJFi3qtAxvR2Rt///03lSpVSlfvrc5XfaVKlVx5co4cOQJY7zR3KleunKbdF95SXIeHh/uUPy/gl9IxxjQANmPD3XwMTPMoU3NCuEBhjFlsjNlgjFlvjFlpjGkabJmU/E3fvnYNT0qKfe3bF8qXh1dfhd9+s5l/n3gC6tSxSsgRYUTJ51SpUoUDBw6kq/dW56v+wIEDXOBIZRsVFQXAfo+hsXO7XLkCF9LS75HOJKAINs5aPaC6R8nraQ1uEJEmItIUeBmrKBUlR6hdG2bPhlWrrHv1HXfAxRfbrMBK/qZly5Z88803nHQbwu7Zs4dvv/UefvLTTz9Nsz7m22+/Ze/evbRs2RKAdu3aAfDxxx+n2c8Z76xt27bnLXN4eDgAp06dOu9jBQJ/lc4lwEMiMltEtorILs/i7wmNMdWMMa8ZY1YbYxKNMWKMifXR90JjzKfGmGPGmOPGmM+MMVlepSQix9w2S/nsqCgBpHVr+O47+OQTa2a78kqIi4MNG4ItmZJdRo8ezfHjx4mLi2POnDl88sknxMXF+TSv/ffff/To0YOvv/6aadOm0atXL2rXrs2tt9oZiYYNG3LzzTe7XJsXLlzIU089xZgxY7j55ptp3LjxecvcoEEDAF566SW+//57gh3ay1+lcxibuC0Q1MKOmI5is5F6xRgTASzBjqwGAP2B2sBSY0yWE4QbY+KNMXuBcUC/zPorSiAwBm680ZrcXnkFfvzRjnpuuw327g22dEpWqV+/Pt988w2JiYn06dOHxx57jGHDhtGpUyev/UeMGEGtWrUYOHAgQ4YM4ZJLLiEhIYGwsDBXn+nTp/Poo4/y3nvv0a1bN6ZMmcKjjz7K9OnTAyLzNddcw5AhQ5g0aRItW7akefPmATlutvHl1uZegPuAeUCoP/0zOVaI2/s7AAFivfS7H5seu5ZbXXXgHDDcre4nrFL0Vi70ctw7gK/9kVVdppVAc+SIyEMPiRQtal2sR40ScfPYVQoIThfnd955J9iiBAUC4DJdAagL/GaMed0Y85RHGZsFJZd5ACBLd2CNiLjCLIrIDqwzw3VudZeISHkfxZvf4xSgizGm4M3QKXmesmXhhRdgyxbo0cO6X9eqBZMmpY9yoCgFEX+VzmggFmveGuLY9iyBpiHwq5f6TUADfw9ijClrjHH3R+wJHAS8+iIaYwYZY9YZY9YdOnQoK/Iqit/ExsKHH8IPP9hAovfcY9f4fPGFXe+jKAUVv5SOiIRkUkJzQLYo7LyPJ0eA9M7pvikLfGmM2WiM2QDcBVzjGAKmQ0Qmi0gzEWmW08H1FKV5c1i61CobsKOf9u1h7dpgSqWcL7GxsYgId9xxR7BFyXPk9YgE3hRDlvI4isifItJcRBqJdZvuIiLrAyOeopw/xkD37rBxozWzbd4Ml10Gt9xi1wApSkEiS0rHGHONMeYFY8wUY8z/HNlEc4qj2NGOJ2XxPgJSlHxNWBgMHmzTKIweDXPmQN26NoX2UX3ilQKCvxEJIo0xy4EvsV5l3YBhWLPVMmNMyRyQbRN2XseTBsBvOXA+RckTREbaEDpbt9pIBy+/DDVrwoQJcDZQCxcUJUj4O9J5BrtAtD9QXESqAMWBWx31z+SAbF8CLYwxrmgHjkWkrR1tilKgqVYN3nsPfv7Zzv088ADUr28Xm6qzgZJf8Vfp9ARGi0i8iCQDiEiyiMQDjzva/cYY08sY0wu41FF1laOunVu3d4CdwBfGmOuMMd2BL4A9QPqsSYpSQGnSxIbQmT/fZjLt0wdatQIfkVcUJU/jr9Iph2+T1m+O9qwwy1HudmxPcmy71vuIyEmgI7AV+ACIB3YAHUXkRBbPpyj5nq5d7ahnyhTYvRvatIEbbrBmOEXJL/irdHYA1/ho6+Zo9xsRMT5Ke49+u0Wkp4iUEpFIEekhIjuzci5FKUiEhsL//Z9VNE89BQsXQsOGcN99oMvKlPyAv0rnbeA+h9daR2NMfWNMB2PM28BQ4K1M9lcUJYCUKAGPP2493e64A95800Y2eO45yCPBhBXFK/4uDn0FeA64BViIjRSwGOtI8JyITMwxCRVF8UmlSlbhbNwI7drBiBHWzfqDD2yuH0XJa/i9TkdERgJVsWa2W4GrgaoiMiqHZFMUxU/q14cvv7TRDSpWhFtvhWbNYMmSYEumKGnJ0uJQETkqIvMcXmzzRESXrClKHqJ9exvPLT4e/vkHOnWCq6+GTZuCLZmiWHwqHWNMW+eiT8f7DEvuiawoSkaEhNgQOlu2wP/+Z12rGzeGQYPg77+DLZ1S2DE+4l5ijEkBWojID473vpajGUByKOhnUGnWrJkEO8ueopwv//xjIxy88QaEh8PDD9vQOiWynApRUfzDGPOjiDTz1paRea0DqWtzOmZQOjheFUXJg5QrZ0Po/P47XHUVjBkDtWvDu+9CcnKwpcsd5syBtm3tfFfx4hATYyN6z5+f2mfaNBt8VYOs5iw+RzqKjnSUgsl339mRzurVdo3PCy/AlVfaH9yCyKuvwv332/VNPXrYEd4ff8DXX0OdOtYECXad0x9/2HTi4eFBFTnfk9FIxy+lY4z5E7heRDZ4absI+FJEaqTfM3+jSkcpqIjAZ5/Bo4/aH9pOneDFF6Fp02BLFniio+HSS+Hzz9O3paTYOTAlsGTXvOZOLOBL9xcDYrIhl6IoQcIY6NkTfvsNJk6E9evhkktgwADY4y3Jez7myBGoXNl7m7vC8WZei42Ffv3suqe6da1p7oorYNs2OHkS7rrLmi8rVYIHH4Rz51L3XbbMHm/2bBg40KYqL1XKRg7/55+0ckycaN3eixe3/Zo1S6skReCVV6wMRYtClSpw771w/Hja4xhj02K8+ipUr24jlrdrl7e8F7Oi430NiZoB/56/KIqi5DZFi8LQoTaywcMPw8yZ1uQ0cmT6H7T8ymWXwfTp1oyYnTh1K1bY5HrPP2+P88cfVmH37Wt/1D/+2HoGvvwyTJ6cfv9hw6wy+OgjGD/erqfq1Su1PT7eKqybb4ZvvrHbvXpZZelk1CgYPhy6dIG5c+GRR6ySvPrq9IuAZ8ywpsOJE2HqVBun77rr0irEoCIiXgvwALDbUZKB/W7bznLI0Rbv6zj5uVx66aWiKIWJnTtF+vYVAZHy5UVef13k7NlgS3V+bNki0qiRvSYQKVdO5KabRBIS0vabOtW279iRWhcTI1K2rMi//6bWTZxo+91+e9r9L75YpH371O2lS22/rl3T9psxw9YvWmS377nH7uuLf/4RCQ8XGTAgbf0HH9jjfPFFah2I1KqV9jObNcvWf/ut73MEGmCd+PhdzWik8yc21M1irFv0OrdtZ5ntUE53BloZKoqS+8TE2H/Ka9fCRRdZE85FF1nvr/h4a24KCbGv8fFBFtZP6tSx0bmXL7cjhqZNremqa1d4+unM92/ZEkqXTt2uV8++du2atl+9et5Nk717p92+8UZ7D1evttvNm1vz5n33waJFkJiYtv+aNXDmjDXzuXPTTVCkiL0ud7p0sVlonTRqZF937/Z5iblKEV8NIvIFNn8Nxrq1PCUiWYomrShK/sQZQufrr63Z7frr7Q+l05Sza5c1KYE1M+V1QkOty3RbxzL2ffusx97YsXDPPXYexReebUWL+q4/fTr9/pUqpe9Xtiz89ZfdvvVWu9+UKdaMFxYG3bpZc11sbKqZrUqVtMcpUsTOJ7mb4QCiotJuOz3xvMkWDPwN+HmbKhxFKVwYA9dcY4OJRkWlnztITLQjh/xI1ao2Ove5c9YpICc5cCDt9tmzcPQoXHCB3TbGOiT88AMcPmznjX74wSbrg1Qlsn9/2uOcO2cdEsplNZtZkPE50vHEGFMUuAqoi/VYc0dEZFwgBVMUJW9QpIj9kfRGXjHZZMSePXDhhenrN2+2r7482wLFJ5/YNUJOZs2yCrxly/R9y5a1yub77+FtR37kFi3saOXjj61ru5OZM63iadcu/XHyMn4pHWNMVWAV1nVasHM8kNajTZWOohRQoqOtSc0TY6wZ6J578u6Cyosugg4drImwenXrlffNN/DWW3a+JTo6Z8+/aRPcdpudg9m61Y4O27VLVSCDBlkvuJYtbcSErVuti3ZcnG2PirKea88+axe2dutmo0uMHm2zx159dc7KH2j8dZl+AeupFo1VOJcDNYDxwHbHe0VRCijjx0NERNq6YsVsRIMHH7RrTGbOtP5heY3nn7cjiyeesD/kffrYSfznnrM/7jnNxIn2vvTpY13Rr7kGPv00tb11a/jxRxgyxDoBjB9vnQamT0/tM368Ve7z5tn9n3vOzgV9/XU+XNzqy63NvWDdo3tjlVQKcKlb23jgC3+Ok9+KukwrSiozZlgXYmPs64wZtn7BApHGja1b7mWXiaxYEUwp8w5Ol+mFC4MtSe5DNl2m3SkH7BORFOAk4O63sQRoHxANqChKnqVvX7taPyXFvjq91rp0gZ9+sgsR//rLeohdf71NraAonvirdPYC5R3v/wDi3NouA/KIM56iKMEgNNSGetm61ZqCFi2yprd777WBNBXFib9KZyng9JF4G3jIGLPAGPM11oHgU597KopSaIiIsPMW27fbCfK33oKaNe0k+KlTwZYud2nf3s7ldO4cbEnyFv4qndHAmwAi8iZwPxABVAH+BzyYI9IpipIvqVTJLnT89Vfo2NEqojp17OS453ofpXDhr9JJAlwOkyLymoi0EZFLRGSkiKh5TVGUdNSrZ0PoLF9uV9QPHGjTDCxaFGzJlGCRqdIxxhQB/iHtPI6iKIrftG1rY4h9+CH8+691PujWzY6ElMJFpkpHRM4BB7DRpBVFUbJFSIgN3795s00Yt3o1NGliw9Hs2xds6ZTcwl/z2gzgjpwURFGUwkF4uF1Qun27TSP9/vtQuzaMGQMnTgRbOiWn8Vfp7ASaG2PWGmNGG2NuN8b8n3vJQRkVRSmAlCtnV9n//rtdZT92rFU+kyfnoYRjSsAx4kfcCmNMZv4mIiKhgREp79CsWTNZt25dsMVQlELBmjXw0EPw7bfQoAH873923seYzPdV8hbGmB9FpJm3Nn9HOtUzKRp7TVGU86JFC1i5EmbPhqQkO/rp3NlGO1AKDv7m09mVWclpQRVFKfgYAzfcYCMzv/YabNhgXaz7988faRSUzMlv8UkVRSkEhIXZEDp//AGPPWZz0NSpY98fOxZs6ZTzwS+lY4zZYYz500fZboz50Rgz2RhzUU4LrChK4aF0aRtCZ+tWm/vm+eehVi07Cjp7NtjSKdnB35HOciAUG/ZmB7DG8VoVmwhuF3AtsNYY0yoH5FQUpRATHW1dq3/8ERo3hqFDbUDRzz7Lmzl8FN/4q3RWAseA6iLSSURuEZFOWCeC48A8oBawARibI5IqilLoueQSG0Ln66+haFHo2ROuuMJ6vin5A3+VzqPAUyKy371SRP4GngYeFZGTwERsqgNFUZQcwRjrSr1hg13T88cfNtVz7972vZK38VfpXAic8dF2GrjA8f4voOj5CqUoipIZRYrAnXfCtm3w5JN29FO/PjzwAPzzT7ClU3zhr9L5HXjQGBPuXmmMKQY85GgHO8dzIHDiKYqiZEzJkjaEzvbtMGAAvPqqdTZ48UU4rfHv8xz+Kp1HgBbAbmPMVGPM88aYqVgHgsuBhx39WgELAi+moihKxlSpAu+8Y81uLVvCww/bkc9HH2kOn7yEv4tDFwGXAIuBtsB9jtdFQFMRWezoN1REBuWQrIqiKJly0UXwzTfW4aBMGbjlFrj8cpvTRwk+fi8OFZHfHF5rNUUkwvHaV0R+z3zv4GKM2WmM2WKMWe8oGjFbUQo4nTpZF+vp02H/fps++rrrbGoFJXhkKSKBMSbEGHORMaadMaZETgmVQ/QRkaaO8m6whVEUJecJCYFbb7WLS595BpYutSOhIUPg4MFgS1c48VvpGGPuAfYDvwBLgLqO+jnGmKFZOE41Y8xrxpjVxphEY4wYY2J99L3QGPOpMeaYMea4MeYzY0y0v+dSFEUBKF4cRoywLtWDB9u5n1q1YPx4SEwMtnSFC3/D4NyJXYMzB+gNuAcbXwn0zMI5azmOcdSxr69zRmCVWz1gANAfqA0szeYo631jzEZjzPvGmAsy764oSkGjQgUbQmfTJhvBevRoG9Nt2jRI1tzIuYK/I53hwEsOJ4HPPdo24xj1+MkKEakkIt2AWRn0uxObMqGHiMwRkS+A7kAMcJezkzHmJ2PMYR/lQke3diLSGLgY2A58mgV5FUUpYNSpY0PorFgBF1wAt91mox0sXBhsyQo+Wcmnk+Cj7SRQxt8Tioi/zovdgTUist1t3x3At8B1bnWXiEh5H2WPo88ux+s54BXgcmNMmL8yK4pSMHGG0Pn4Y/jvP4iLgyuvhF9+CbZkBRd/lc5hINZHW11sJIJA0xD41Uv9JqCBvwcxxpQwxpRxq+oL/CoiSecnnqIoBQFjoE8fmzb7pZfghx+gaVO4/XZ4/XWIjbUOCbGxEB8fZGELAP4qnbnAE8YY9wyhYowpDzyAnesJNFHYeR9PjgBls3CcSth5oF+MMRuxI6gbfXU2xgwyxqwzxqw7dOhQlgRWFCX/Eh4Ow4dbZ4Phw62r9X33wa5dNpL1rl0waJAqnvPFX6UzGht77VfsglABXsWGv0kGnsoR6ex5PMlSxnQR+VNELhaRxiLSSES6iciWDPpPFpFmItKsQoUKWRZYUZT8TdmyNoROpUrp2xITYdSo3JepIOFvRIJ/gGbAs0AY8Ac2j87rQEsRyYlcfkexox1PyuJ9BKQoihIw/v7be/3u3ZrD53zISkSC/0RknIi0EZE6ItJSRMaKyPEckm0Tdl7HkwbAbzl0TkVRFMAmjvOGCHTsaKMdKFnH33U6fxpjmvhou8gY82dgxQLgS6CF+zySYxFpa0eboihKjjF+PEREpK2LiLCRrDdtgmbNoF8/O9ej+I+/I51YINxHWzHs2hm/Mcb0Msb0Ai51VF3lqGvn1u0dYCfwhTHmOmNMd+ALYA/wdlbOpyiKklX69rVJ4mJirIdbTIzdnjbNplEYORJmz4a6deGRR+Dff4Mtcf7AiB/GSWNMCnC5iKz10nY3MF5Eyvl9UmN8nXS5iLR36xeNXVfTBetAsBgYJiI7/T3X+dCsWTNZt25dbpxKUZR8yJ498Pjj8P771gHhiSdsmJ2ihTyVpTHmRxFp5rXNl9IxxjyAdYcGmxn0EHDWo1tx7GT/xyLSNzDi5h1U6SiK4g/r19v8PYsWQc2a8Nxz0LOnHSEVRjJSOhmZ1/7EjiwWY0cZ69y2nWU2VjHdGUiBFUVR8hNNm8KCBTBvng0ueuON0Lo1fPddsCXLexTx1eCIdfYFgLHq+ilHGBpFURTFA2NsCJ0uXey8z+OPW8XTs6cd+dSqFWwJ8wb+rtO5TRWOoihK5oSG2hA627bB2LEwfz40aAD33w+HDwdbuuDjlyMBgMN1uTcQjfVYc0dE5PYAyxZ0dE5HUZTzZf9+ePJJePddiIy0Xm9Dh0Ixz1/RAkR253TcD3AdNoXB00APoIOXoiiKonhQuTK8/TZs3GijWj/6qHWzjo+HFH9j7hcg/F2n8zSwDKgiIlVFpLpHqZHJ/oqiKIWaBg1g7lxYsgTKl7cLS5s3tym0CxP+Kp0awIsiomGXFUVRzoMOHWDtWvjgAzvH07EjXHst/FZIgnv5q3Q2A34v/lQURVF8ExJiRzqbN1vPthUroFEjuPtuOwdUkPFX6TwCjPTIp6MoiqKcB8WL2zmeP/6Ae+6BKVOsa/VTT8HJk8GWLmfwV+mMwY50fjfG/GqMWeFRlueciIqiKAWb8uXh1Vetie3KK623W+3aVgklJwdbusDir9JJBrYA32HD4SR7lELog6EoihJYateGTz+FVatsgNE77oCLL4aEhGBLFjh8RiRwxz0Ip6IoipKzOEPozJ5tzW/OSAcvvABNvCaZyT/4ncRNURRFyT2MgV694PffYcIEmzTu4ovhtttg795gS5d9MooynSWnARHJiURuQUUjEiiKklf491945hmYONGG2nngATsKKlUq2JKlJ7upDVIAvzOBi0ho9sTLu6jSURQlr7FzJ4waBR9+CBUqwJgxcOedEBYWbMlSya7SGZCVk4jI9GzIlqdRpaMoSl5l3Tp46CFYvtyG1Xn+eejePW/k8MlI6WSU2qDAKRFFUZSCQrNmNoTOV1/ZdNk9etjYbi++CJddFmzpfKOOBIqiKPkUY2wInY0b4c03YcsWuPxyuPlm2JFHk9Go0lEURcnnFCliQ+hs3w6jR8MXX0C9etb8dvRosKVLiyodRVGUAkJkJIwbZxPI9e0LL78MNWvCK6/AmTPBls6iSkdRFKWAccEF8N578PPPNn3C8OFQvz588gn4mbczx1CloyiKUkBp0sSG0ElIsKOgPn2gZUsbZidYqNJRFEUp4MTFwU8/2dHPnj3Wy+2GG2Dr1tyXRZWOoihKISA01IbQ2bbNzvssXAgNG8J998GhXEzPqUpHURSlEBERYT3ctm+3UazffNPm8Hn2WTh1CuLjITbWJpqLjbXbgcRnRAJFIxIoilLw2bzZxnD78kuIioITJ+Ds2dT2iAiYPNl6w/lLRhEJdKSjKIpSiKlXz67rWbYsvcIBSEy0sd4ChSodRVEUhXbtICnJe9vu3YE7jyodRVEUBYDo6KzVZwdVOoqiKAoA48fbORx3IiJsfaBQpaMoiqIA1llg8mSIibHBRGNisu5EkBk+UxsoiqIohY++fQOrZDzRkY6iKIqSa6jSURRFUXINVTqKoihKrqFKR1EURck1VOkoiqIouYbGXssAY8whYFc2dy8NHAugOOd7vOzun5X9At23PHDYz+MVFAL93JwPuSVLIM+TH74nWemfX78nMSJSwWuLiGjJgQJMzkvHy+7+Wdkv0H2BdcH+HHO7BPq5yQ+yBPI8+eF7kpX+BfF7oua1nGNuHjtedvfPyn451bcwkZfuS27JEsjz5IfvSVb656XnISCoeU3Jsxhj1omP8OiKoljy2/dERzpKXmZysAVQlHxAvvqe6EhHURRFyTV0pKMoiqLkGqp0FEVRlFxDlY6iKIqSa6jSUfItxpiRxpgtxpgUY0yPYMujKHkNY0wxY8wcY8zvxpj1xpgEY0yNYMqkSkfJzywGugErgi2IouRh3hSR+iLSFLvu591gCqNKR8k1jDHVjDGvGWNWG2MSjTFijIn10fdCY8ynxphjxpjjxpjPjDFpMrWLyPci8keuCK8ouUQgvyciclpEEtx2WQPoSEcpNNQCegNHgZW+OhljIoAlQD1gANAfqA0sNcaUyAU5FSWY5OT35D7gi4BKm0U0XbWSm6wQkUoAxpg7gDgf/e7E/hurKyLbHf1/AbYBdwEv54KsihIscuR7YowZAdQBOuWQ3H6hIx0l1xCRFD+7dgfWOL9Ijn13AN8C1+WEbIqSV8iJ74kx5iGgJ3CViCQGStbsoEpHyYs0BH71Ur8JaJDLsihKXsWv74kxZjhwM9BFRP7NHdF8o0pHyYtEYe3ZnhwByjo3jDGjjTF7gZbAu8aYvcaYyrkko6IEm0y/J8aYasBLQBnsXM96Y8y6XJPQCzqno+RVvAUFNGk6iDwNPJ074ihKniTD74mI7MXjexNsdKSj5EWOYv/FeVIW7//sFKUwki+/J6p0lLzIJqy92pMGwG+5LIui5FXy5fdElY6SF/kSaOEersOxOK61o01RlHz6PdF8OkquYozp5XjbCbgbGAIcAg6JyHJHnxLABuAUMBprtx4HRAKNReREbsutKLlJQf6eqNJRchVjjK8HbrmItHfrFw28AnTBToQuBoaJyM6cllFRgk1B/p6o0lEURVFyDZ3TURRFUXINVTqKoihKrqFKR1EURck1VOkoiqIouYYqHUVRFCXXUKWjKIqi5BqqdBRFUZRcQ5VOIcIYM9CRb/1fY0xZj7YijrYxQZBrjOPceTrquTEmxBgzwRjztzEmxRgzJ4O+2bqXxpimjvvhLZBjniIjWYP1LAUSt+9LbDb3/b8cECvfo0qncFIaeDTYQuRDegH3Ay9g41s9kkHflsC72ThHU+BJvEcPzms0xbes2b3+vMTX2Ov4Oxv7DgRU6XghT/+zVHKMBcB9xpgJIrI/2MLkBsaYcBE5c56Hqe94nZBZSmERWXOe58p1jDEGCBORs+d7rPx4/Z6IyCFsvDMlgOhIp3DiTHw2KqNOTrOXl/ppxpidbtuxDjPE3caYZ40x+40x/xljZhhjIowxtYwxCcaYE8aY7caYAT5OWd8Ys9QYk+gwYT1ljEnzjBpjyhtj3jTG/GWMOWOM2WyMGeTRx2kWaWuMmWWM+Rf4PpNrvdIYs9oYc8oYc8wYM8cYU9etfScwxrGZ7Dj+wAyOl8a85GZCrG2M+dpxL3YZY55wXqPjeFMdu2xz9HeZdxwm0BGOaz5jjNlnjHnJGFPM49w1jDHfOO7jQUefQZ6mImPMTsdn9H/GmM3AWeBqR9tYY8xPjntx2BizxBjTwv0eZyJrOvNaZvfY0WeZMWaVMaaz4/yJxphfjTE9fN1rd5ncPvc5jnv8jzHmDWNMcY++VYwx7zuu7Ywx5hdjTD8fx/N2z24yxvxujDlpjFlnjGnjfg1AO6C1231Z5mirbIyZ7vjszjie86+MMRUzu74Cg4hoKSQFO+QXoBbwPHAGiHG0FXG0jXHrP8Y+IumOMw3Y6bYd69h3FzAd6Ao8ACQB7wMbgaHYoISfASlAQ8/zAH9gFWEcNsWupzylgC3AbuBOoDPW1JUM3OflOvcA/3P0uzKD+3Kl4xgLge7ALcB27L/cCxx9Lsb+yArQwlEqZHBMr/cSm9P+QYdMEx11tzn6VMBGCRasKc95nnBH+8fASeAJx/73Af8Cs93OU9RxH/9y3Idujnu+y3HcWLe+Ox39fgVuxkY0ruloexfoD3QArnGc+yw2erE/snpef6b32NFvGdactQno59hvIXAOqOXn870beBH7HI12yD3NrV8JYKvj3IOAq4B4x76DvBzP857tAtY6rvsa4GfH51DG0acB8BM2ArTzvjRwtC10nLsv0Ba4EXjL/RwFvQRdAC25+GGnVTpRji/Ke462QCidJR79PnPU93OrK+v4AXnS8zzAYx77vwP85/Zlfhw4DdT20u8wUMTjOl/x876sA7Y593fUVccqzZfd6p72dj98HNOX0rnNo99GYIG3z8ij3xWO+ls96vs66ps6tgc5ti9z62McP4DefkATgcqZXEuo4/nYAkzMTFYf1+/vPV7mqKvtVlcRq7BG+vl8v+VRP8qxfx3H9r2Ofu09+i0CDgKhHsfzvGdHgbJudc0c/W7xuI5VXmQ8AQzN7ne4IBQ1rxVSROQIdjRxq6eJ4zyY57G92fGa4Hbeo9gv9oVe9v/EY/tjoCRwkWP7SqyZbIfD1FTEWI+3BKAc9h+mO59nJrCxOUkuAWaKyDk3OXcA32LNJIHka4/tX4FoP/a7EvuPfbbHtS9wtLd1vLYAdovID84dxf7azfZx3DXiZV7PYd5aaoz5B/snIQmoA2T5WcnGPd4mItvc+h3EPjP+3Cfw/hyFAJc5ttsCf4nIMo9+M7AjOM/nyJPVjufYyUbHqz/yrQUeNsbcb4xpZIwxfuxToFClU7h5BTgCPBWg4x312D6bQX0x0nPAx/YFjteK2B+MJI8yy9FezmN/f7yOymJHAt767ifwXmRHPLbP4P1eeFIRazo7QdprP+hod157Fbc6dzzvrZN0122MuQT4xnGu27GKrDl2tOSPrJ5k9R573iPw/z5B5s9RVAayONszIo18kuqg4o98fbBZPR8BfgH+cp/XKwyo91ohRkROGGOexY54XvDS5TSAMaaopPVo8vxxDxSVgD89tsHOOwD8g/1Bvd/H/ls8ttM5QXjhqKNfZS9tlR3nzAv8g/08rvDRvs/x+jfe/6lX8lIH3u9RT+zo5gYRSXJWGru2619/hPUgt+9xJeyckPs2pD5HR/A+YnPKl2OfuWPUdg9wj8PCMAAYi51fejOnzpuXKDTaVfHJJOyX8Wkvbbscr07zFsaYMkCrHJKlt8f2Tdh/2786tucD9bDmo3Veyn9ZPaGInAR+BG40xoQ6640xMdjrXJ6dCzkPnP+ai3vUz8f+ky7t49qdSmcNEG2McZqSnK7QPbMgQwR2DsSlkIwxHUlvPvIlaxqCcI+9PUcpgNPkuByoZoxp7dHvFuyfmt8DIMMZMr8vW0RkJFYpX5RR34KEjnQKOSJyxhjzFDDZS/M84BjwjjHmSSAcaxbIqdzrdzrMDGuxHnB3YCej/3W0v4I1T6w0xryCHdmUwCqiK0Tkumye93HsXMtXxphJ2Hmksdhrfymbx8wuvzle7zHGTMea0H4RkWXGmI+AT40xL2N/QFOwThzdgEdFZCvWyeNR4DNjzCjsP+g7sCYuHPtkxnxgGDDNGDMVO5fzOKkjhcxk9bbOJzfvcTdjzAvY+a7LsAtY33fcH7D36H5S79FerENGF+AuEUkOgAy/AUOMMX2w3oT/Yc13i7Cecpux9+s67GezwMdxChw60lHAugJv86x0/Nhfg/2h+gR4FngNWJpDclyH/eJ/iXWXfRrrluuU5xj2n/E32B/WBOA9x37ZlklE5mPXp5TBXudb2H+7bdxGELmCiGzAerpdC6zCKuCqjuZ+jrZewBfAp1hPrG045i0cP/hx2PmCt7Au7HuANxzHOOaHDAlYF/fWwFfYlfW3Yl2c/ZXV85i5eY/7YRXl51j39HeAIW6ynMQ6LywAnsPeyyZAfxHx9ucrOzwPLMa6nq8F3saaR3/Cuvt/6pCvJdBXRL4I0HnzPMbhxqcoSgHGGPMVUF9EagZblpzCbcFqbRHZnkl3JUioeU1RChjGmOFYE+g2IBK7APFqYHAw5VIUUKWjKAWRM9iIENHYhZ1bgDtEZEpQpVIU1LymKIqi5CLqSKAoiqLkGqp0FEVRlFxDlY6iKIqSa6jSURRFUXINVTqKoihKrvH/JWZ+oArK+MkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy import linspace\n", "import matplotlib.pyplot as plt \n", "\n", "# define function, bounds and value of integral\n", "def f(x):\n", " return 0.2*x**5 - 0.3*x**4.0+2.3*x**3-3.1*x**2 + 1.7\n", "a = -1.0\n", "b = 2.0\n", "val = 4.545\n", "\n", "# Set up lists for plotting\n", "y = []\n", "yt = []\n", "ys = []\n", "x = []\n", "err1 = 1.0\n", "err2 = 0.1\n", "\n", "# define settings for convergence loop\n", "factor = 2\n", "initial = 2\n", "increments = 7\n", "\n", "# convergence loop\n", "N = initial\n", "for i in range(1,increments):\n", " N = N*factor\n", " h = (b-a)/N\n", " s = 0.0\n", " st = 0.5*f(a) + 0.5*f(b)\n", " ss = f(a) + f(b)\n", " for k in range(1,N+1):\n", " s += f(a+(k-0.5)*h) # midpoint integration\n", " for k in range(1,N):\n", " st += f(a+k*h) # trapezoidal rule\n", " for k in range(1,N,2): # Simpson's rule\n", " ss += 4*f(a+k*h) \n", " for k in range(2,N,2):\n", " ss += 2*f(a+k*h)\n", " error = abs((val-h*s)/val*100.) # compute errors\n", " errort = abs((val-h*st)/val*100.)\n", " errors = abs((val-h*ss/3.0)/val*100.)\n", " y.append(error) # collect values in arrays\n", " yt.append(errort)\n", " ys.append(errors)\n", " x.append(N)\n", "\n", "# Make the graph\n", "plt.rc('font',size=16) # set the font size\n", "plt.plot(x,y,\"ko-\")\n", "plt.plot(x,yt,\"ro-\")\n", "plt.plot(x,ys,\"bo-\")\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of integration points')\n", "plt.ylabel('Integration error in %')\n", "plt.hlines(err1,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.hlines(err2,x[0],x[increments-2],linestyles='dashed',colors='k')\n", "plt.text(x[0]+2, err1-0.8, '1% error')\n", "plt.text(x[1]+2, err2-0.08, '0.1% error')\n", "plt.text(x[increments-4]+20, y[increments-4]-0.0495, 'midpoint',color='k')\n", "plt.text(x[increments-4]+20, yt[increments-4]+0.04, 'trapezoidal',color='r')\n", "plt.text(x[increments-4]+20, ys[increments-4]-0.00002, 'Simpson',color='b')\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.9" } }, "nbformat": 4, "nbformat_minor": 4 }