{ "cells": [ { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "view-in-github" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "XGh1ScX5EZVp", "tags": [] }, "source": [ "# Interpolation Methods" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "b9K_MnFJEZVr" }, "source": [ "Due to the discrete, and sometimes sparse, nature of experiments and observations, data taking procedures will always produce discrete data as well. Even, as we have seen before, information only can be discretely presented into a computer due to the binary representation. However, when we are dealing with physical models, continuous and smooth properties are of course preferred. Interpolation techniques allow then to recover a continuous field from sparse datasets. Throughout this section we shall cover some of these interpolation methods.\n", "\n", "---\n", "\n", "\n", "## Bibliography: \n", "[1a] Gonzalo Galiano Casas, Esperanza García Gonzalo [Numerical Computation](https://www.unioviedo.es/compnum/expositive/handbook/metnum.pdf) - [GD](https://drive.google.com/file/d/1gwHYLx5aBf3oXRhmGeG-n1toTtAUhvfX/view?usp=sharing) - [Web page with notebooks](https://www.unioviedo.es/compnum/index.php/english-menu)
\n", "[1g] Mo Mu, [MATH 3311: Introduction to Numerical Methods](https://www.math.ust.hk/~mamu/courses/230/course.htm) [GD](https://drive.google.com/drive/folders/1vv38SS7Zpw8mOHG7Kq_3lZr6o9H4xOYP?usp=sharing) - [Demostration Error in Lagrange Polynomials](https://www.math.ust.hk/~mamu/courses/231/Slides/CH03_1B.pdf)
\n", "[1h] Zhiliang Xu, [ACMS 40390: Fall 2016 - Numerical Analysis](https://www3.nd.edu/~zxu2/ACMS40390-F16.html) [GD](https://drive.google.com/drive/folders/1Z9Fws1v34PuPdGAp_mBCWmTvZM_Qd6Xk?usp=sharing)
\n", "\n", "\n", "https://github.com/restrepo/Calculus/blob/master/Differential_Calculus.ipynb\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ooE-OhsOEZVs" }, "source": [ "- - -\n", "- [NumPy polynomials](#NumPy-Polynomials)\n", "- [Linear Interpolation](#Linear-Interpolation)\n", " - [Steps](#Steps-LI)\n", " - [Example 1](#Example-1)\n", "- [Lagrange Polynomial](#Lagrange-Polynomial)\n", " - [Derivation](#Derivation)\n", " - [Steps](#Steps-LP)\n", " - [Activity](#Activity-LP)\n", "- [Divided Differences](#Divided-Differences)\n", " - [Example 2](#Example-2)\n", "- [Hermite Interpolation](#Hermite-Interpolation)\n", " - [Derivation in terms of divided differences](#Derivation-in-terms-of-divided-differences)\n", " - [Example 3](#Example-3)\n", "- - -" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "8BwVVom3EZVu", "outputId": "5d379375-42ad-47ce-d4f1-ea45a27b490b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": {}, "colab_type": "code", "id": "jLrHQj5MEZV0" }, "outputs": [], "source": [ "from IPython.display import display, Markdown, Latex, Image \n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": {}, "colab_type": "code", "id": "qA6vPaJBEZV2" }, "outputs": [], "source": [ "from scipy import interpolate" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": {}, "colab_type": "code", "id": "rIsrgFTCEZV4" }, "outputs": [], "source": [ "import numpy as np\n", "# JSAnimation import available at https://github.com/jakevdp/JSAnimation\n", "#from JSAnimation import IPython_display\n", "from matplotlib import animation\n", "from IPython.core.display import Image " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "izA9D35WdJjg" }, "source": [ "Pretty print inside colaboratory" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "colab": {}, "colab_type": "code", "id": "vU_ALGnRhKna" }, "outputs": [], "source": [ "import IPython\n", "\n", "def setup_typeset():\n", " \"\"\"MathJax initialization for the current cell.\n", " \n", " This installs and configures MathJax for the current output.\n", " \"\"\"\n", " IPython.display.display(IPython.display.HTML('''\n", " \n", " \n", " '''))\n", " \n", "def Polynomial_to_LaTeX(p):\n", " \"\"\" Small function to print nicely the polynomial p as we write it in maths, in LaTeX code.\"\"\"\n", " coefs = p.coef[::-1] # List of coefficient, sorted by increasing degrees\n", " res = \"\" # The resulting string\n", " for i, a in enumerate(coefs):\n", " if int(a) == a: # Remove the trailing .0\n", " a = int(a)\n", " if i == 0: # First coefficient, no need for X\n", " if a > 0:\n", " res += \"{a} + \".format(a=a)\n", " elif a < 0: # Negative a is printed like (a)\n", " res += \"({a}) + \".format(a=a)\n", " # a = 0 is not displayed \n", " elif i == 1: # Second coefficient, only X and not X**i\n", " if a == 1: # a = 1 does not need to be displayed\n", " res += \"x + \"\n", " elif a > 0:\n", " res += \"{a} \\;x + \".format(a=a)\n", " elif a < 0:\n", " res += \"({a}) \\;x + \".format(a=a)\n", " else:\n", " if a == 1:\n", " # A special care needs to be addressed to put the exponent in {..} in LaTeX\n", " res += \"x^{i} + \".format(i=\"{%d}\" % i)\n", " elif a > 0:\n", " res += \"{a} \\;x^{i} + \".format(a=a, i=\"{%d}\" % i)\n", " elif a < 0:\n", " res += \"({a}) \\;x^{i} + \".format(a=a, i=\"{%d}\" % i)\n", " return \"$\" + res[:-3] + \"$\" if res else \"\" " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "udTzmy-CEZV7" }, "source": [ "- - -" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Z-txzMoJEZV7", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "## NumPy Polynomials" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "bA0x7_nCEZV9" }, "source": [ "In Numpy there is an implementation of Polynomials. The object is initialized giving the polynomial coefficients: \n", "\n", "More information about this\n", "* [LaTeX print](https://perso.crans.org/besson/publis/notebooks/Demonstration%20of%20numpy.polynomial.Polynomial%20and%20nice%20display%20with%20LaTeX%20and%20MathJax%20(python3).html): " ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "OEDBQReUEZV9", "outputId": "dc526b35-cc2c-414b-b2e9-7248e6b93397" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "1 x + 2 x - 3\n" ] } ], "source": [ "p = np.poly1d([1, 2, -3])\n", "print(p)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\thola\n", "mundo\\\n" ] } ], "source": [ "print('\\thola\\nmundo\\\\')" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'$(-3) + 2 \\\\;x + x^{2}$'" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Polynomial_to_LaTeX(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copy an Paster in a MarkDown cell: $(-3) + 2 \\;x + x^{2}$" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$(-3) + 2 \\;x + x^{2}$" ], "text/plain": [ "" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Latex(Polynomial_to_LaTeX(p))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The numpy polynomial is automatically a function of its variable $x$" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.29" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p(1.3)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HuqkJBhWEZV_" }, "source": [ "By default, the assigned the attribute `variable` is `x`:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "jT6FBw47EZWA", "outputId": "88b68268-2d6d-412c-9fbb-b5b051e0cf8d" }, "outputs": [ { "data": { "text/plain": [ "'x'" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.variable" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "x-7Tef0-EZWC" }, "source": [ "which can be assigned at initialization " ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "A8ZMzlaTEZWD", "outputId": "8df22d7e-3db3-4d15-b61f-566993847465" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "1 t + 2 t - 3\n" ] } ], "source": [ "q = np.poly1d([1, 2, -3],variable='t')\n", "print(q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Change of variable" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "1 x + 2 x - 3\n" ] } ], "source": [ "p = np.poly1d([1, 2, -3])\n", "print(p)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1, 2, -3])" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.coef" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "1 t + 2 t - 3\n" ] } ], "source": [ "pp=np.poly1d(p.coef,variable='t')\n", "print(pp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Polynomial can be added but not multiplied, simplified or expanded" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "p1(x)= \n", "1 x + 1\n", "********************\n", "p2(x)= \n", "-1 x + 1\n", "********************\n", "p1(x)+p2(x)= \n", "2\n" ] } ], "source": [ "p1=np.poly1d([1,1])\n", "print('p1(x)={}'.format(p1))\n", "print('*'*20)\n", "p2=np.poly1d([-1,1])\n", "print('p2(x)={}'.format(p2))\n", "print('*'*20)\n", "print('p1(x)+p2(x)={}'.format(p1+p2))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "poly1d([2])" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1+p2" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "2\n" ] } ], "source": [ "print(p1+p2)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "hDgtm5VCEZWF" }, "source": [ "The object have in particular methods for
\n", "__Integration__:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "1 x + 2 x - 3\n" ] } ], "source": [ "print(p)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "nMJq0CrOEZWG", "outputId": "836fdb43-e142-4740-fdbf-94221970b2ad" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 3 2\n", "0.3333 x + 1 x - 3 x\n" ] } ], "source": [ "p = np.poly1d([1, 2, -3])\n", "print( p.integ() )" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.33333333, 1. , -3. , 0. ])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.integ().coef" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "JVolgx0wEZWI" }, "source": [ "__Derivatives__" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "fVS5U1bBEZWJ", "outputId": "3e77e527-c41f-45dc-b7a2-0f575d102095" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "2 x + 2\n" ] } ], "source": [ "print( p.deriv() )" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "R8f3r0yOEZWN" }, "source": [ "__roots__:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 70 }, "colab_type": "code", "id": "Md4Q2gmNEZWO", "outputId": "8a03f49c-1d06-4170-8c07-58dfc99e947a" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[-3. 1.]\n" ] } ], "source": [ "setup_typeset() #active colab pretty print\n", "print(p.roots)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$p(-3.0)$=1.7763568394002505e-15" ], "text/plain": [ "" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Latex( '$p({})$={}'.format(round(p.roots[0],1),\n", " p((p.roots[0] ) ) ) )" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$p(-3.0)$=1.7763568394002505e-15" ], "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Latex( f'$p({round(p.roots[0],0)})$={p(p.roots[0])}' )\n", " " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1NLa6wh1EZWQ" }, "source": [ " It is possible to define polynomial by given the list of roots and " ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "E67K42bQEZWR", "outputId": "81efc332-dc52-471c-c562-81ff1a4fb00f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 4 2\n", "1 x - 6.221e+04 x + 9.698e+07\n" ] } ], "source": [ "p=np.poly1d([-246.2,-40,40,246.2],r=True)\n", "print(p)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4901161193847656e-08" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p(-40)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "GSuuNnvMEZWU" }, "source": [ "For further details check the official help:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "n5GOuKoeEZWV" }, "outputs": [], "source": [ "np.poly1d?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3cs7-2egEZWW" }, "source": [ "__Activity__: Movement with uniform acceleration\n", "1. Define a polynomial for the movement with uniform acceleration:\n", "\\begin{align}\n", "x(t)=x_0+v_0 (t-t_0)+\\tfrac{1}{2} a (t-t_0)^2 \\,,\n", "\\end{align}\n", "2. Use the previous formula expressed as polynomial of degree 2, to solve the following problem with `np.poly1d`: \n", " * A car departs from rest with a constant acceleration of $6~\\text{m}\\cdot\\text{s}^{-2}$ and travels through a flat and straight road. 10 seconds later a second pass for the same starting point and in the same direction with an initial speed of $10~\\text{m}\\cdot\\text{s}^{-1}$ and a constant acelleration of $10~\\text{m}\\cdot\\text{s}^{-2}$. Find the time and distance at which the two cars meet.\n", " \n", "_Hint_. \n", "\\begin{align}\n", "x(t)=x_0-v_0t_0+\\frac{1}{2}at_0^2 +(v_0-at_0)t+\\tfrac{1}{2} a t^2 \n", "\\end{align}\n" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "x0=0\n", "t0=0\n", "v0=0\n", "a=6 #m/s^2\n", "x_1=np.poly1d([0.5*a,v0-a*t0,x0-v0*t0+0.5*a*t0**2],variable='t')\n", "x0=0\n", "t0=10 #s\n", "v0=10 #m/s\n", "a=10 #m/s^2\n", "x_2=np.poly1d([0.5*a,v0-a*t0,x0-v0*t0+0.5*a*t0**2],variable='t')" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "3 t\n" ] } ], "source": [ "print(x_1)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "5 t - 90 t + 400\n" ] } ], "source": [ "print(x_2)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "smN1y6pyEZWX" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sea el tiempo de encuentro definido $t_e$\n", "$$x_1(t_e)=x_2(t_e)\\,,$$\n", "que se interpreta como\n", "$$x_1(t_e)-x_2(t_e)=0\\,,$$\n", "Puedo definir un nuevo polinomio\n", "$$\n", "x(t)=x_1(t)-x_2(t)\n", "$$\n", "Entonces $t_e$, es la raíz del polinomio $x(t)$\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "-2 x + 90 x - 400\n" ] } ], "source": [ "x=x_1-x_2\n", "print(x)" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([40., 5.])" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.roots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La raíz 5 no es física porque el tiempo incial para el segundo carro es 10 " ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_1[40]" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_2[40]" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$x_1(t)=$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "3 t\n" ] }, { "data": { "text/latex": [ "$x_2(t)=$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "5 t - 90 t + 400\n" ] }, { "data": { "text/latex": [ "meeting time $t_{\\rm end}=$ 40 s; meeting point $x_{\\rm end}=$ 4800 m" ], "text/plain": [ "" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "setup_typeset() #active colab pretty print\n", "def x(x0,t0,v0,a):\n", " return np.poly1d( [0.5*a,v0-a*t0,x0-v0*t0+0.5*a*t0**2],\n", " variable='t' )\n", "x1=x(0,0,0,6)\n", "x2=x(0,10,10,10)\n", "display(Latex('$x_1(t)=$'))\n", "print(x1) \n", "display(Latex('$x_2(t)=$'))\n", "print(x2)\n", "t=np.linspace(0,45,100)\n", "plt.plot(t,x2(t)-x1(t))\n", "plt.xlabel('$t$ [s]')\n", "plt.ylabel('$x_2(t)-x_1(t)$ [m]')\n", "plt.grid()\n", "#plt.plot(t,(x2-x1)(t))\n", "#plt.grid()\n", "#Physica solution is the one after 10s\n", "Latex(r'meeting time $t_{\\rm end}=$ %g s; meeting point $x_{\\rm end}=$ %g m' \n", " %( (x2-x1).r[0] , x2( (x2-x1).r[0] ) )) \n", "#plt.plot(t,x2(t),'ro')\n", "#plt.plot(t,x2(t),'k-')\n", "#plt.xlim(10,15)\n", "#plt.ylim(0,200) " ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "10 x - 90\n" ] } ], "source": [ "v=x_2.deriv()\n", "print(v)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "10\n" ] } ], "source": [ "print(v.deriv())" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vWJZfq_YEZWe", "tags": [] }, "source": [ "## Linear Interpolation" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "wGj1U7PmEZWe" }, "source": [ "When we have a set of discrete points of the form $(x_i, y_i)$ for $1\\leq i \\leq N$, the most natural way to obtain (approximate) any intermediate value is assuming points connected by lines. Let's assume a set of points $(x_i, y_i)$ such that $y_i = f(x_i)$ for an unknown function $f(x)$, if we want to approximate the value $f(x)$ for $x_i\\leq x \\leq x_{i+1}$, we construct an equation of a line passing through $(x_i,y_i)$ and $(x_{i+1},y_{i+1})$.\n", "\n", "The linear equation is\n", "\n", "$$y=mx+b$$\n", "\n", "where\n", "\n", "$$m=\\frac{y_{i+1}-y_i}{x_{i+1}-x_i} $$\n", "\n", "and $b$ is obtained by evaluating with either $(x_i,y_i)$ or $(x_{i+1},y_{i+1})$\n", "\n", "$$y=\\frac{y_{i+1}-y_i}{x_{i+1}-x_i}x+b$$\n", "\n", "$$b=y_i-\\frac{y_{i+1}-y_i}{x_{i+1}-x_i}x_i$$\n", "\n", "\n", "\\begin{align}\n", "%$$ \n", "f(x)\\approx y = &\\frac{y_{i+1}-y_i}{x_{i+1}-x_i}(x-x_i) + y_i \\\\\n", "=&\\frac{y_{i+1}-y_i}{x_{i+1}-x_i}x+\\left[y_i-\\frac{y_{i+1}-y_i}{x_{i+1}-x_i}x_i\\right] \\\\\n", "%$$\n", "\\end{align}\n", "\n", "and this can be applied for any $x$ such that $x_0\\leq x \\leq x_N$ and where it has been assumed an ordered set $\\left\\{x_i\\right\\}_i$." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WsnL9PoDEZWi", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Steps LI" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "w4MSYnO6EZWi" }, "source": [ "Once defined the mathematical basis behind linear interpolation, we proceed to establish the algorithmic steps for an implementation.\n", "\n", "1. Establish the dataset you want to interpolate, i.e. you must provide a set of the form $(x_i,y_i)$.\n", "2. Give the value $x$ where you want to approximate the value $f(x)$.\n", "3. Find the interval $[x_i, x_{i+1}]$ in which $x$ is embedded.\n", "4. Use the above expression in order to find $y=f(x)$." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "0Gmn6NAdjz1W" }, "source": [ "To make the linear interpolation we will use" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "colab": {}, "colab_type": "code", "id": "bzCHHksPEZWn" }, "outputs": [], "source": [ "import scipy as sp\n", "sp.interpolate.interp1d?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "epbBukAVjz1Z" }, "source": [ "The option `kind` specifies the kind of interpolation: \n", "* `'linear', 'nearest', 'zero', 'slinear', 'quadratic', 'cubic'`,\n", " where `'zero', 'slinear', 'quadratic' and 'cubic'` refer to a spline\n", " interpolation of zeroth, first, second or third order) \n", "* or as an\n", " integer specifying the order of the spline interpolator to use.\n", "\n", "Default is `'linear'` correponding to integer 1." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "OZXQtU4WEZWj", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Example 1" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Jb7eChUUEZWk" }, "source": [ "Sample the function $f(x) = \\sin(x)$ between $0$ and $10$ using $N=10$ points (9 intervals). Plot both, the interpolation and the original function." ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "colab": {}, "colab_type": "code", "id": "5G1t56pnjz1a" }, "outputs": [], "source": [ "import scipy as sp\n", "from scipy import interpolate " ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "A0mxSeRjk1T6" }, "source": [ "`sp` reemplaza completamente a numpy con `np`" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sB0lNqKIEZWn" }, "source": [ "Interpolation with 9 equal intervals" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "colab_type": "code", "id": "BaCvQYBoEZWp", "outputId": "00b9b521-818a-4f8b-c652-df4ec980a4c9" }, "outputs": [], "source": [ "n_points = 10\n", "x=np.linspace(0, 2*np.pi, n_points)\n", "f=interpolate.interp1d( x,np.sin(x),kind='linear' )" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IFSu7iE6jz1g" }, "source": [ "Plotting the results adding the real function with enough points" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 283 }, "colab_type": "code", "id": "3Ggn5WacEZWq", "outputId": "c33ed8a9-bd0c-4418-85e9-45e32cb2ab0d" }, "outputs": [ { "data": { "image/png": "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+uqrdD3HhQsXUiw/8MADDB48+KrH3EhRful50tKlRfnChQtvqJXzZqkoF7lO1lo+O3KEin/9xdsHD9K1cGF21KnDM8WLkyPxkfRr166ldu3afPHFF0nHVa9enb///vum+sfTmre3N3fffTcjR45k1apVnDx5km+++Ya+ffsSGBh42f7h4eEsXLiQ559/npo1a+Lv70+7du2YPHkyO3fuTDFVY3J5c+RgeJky7KxThw7+/ow6cIDqq1bx8yk9RkBEJL2EhoZStWpVAKZPn07r1q1p1qwZ5cuXZ+DAgUn7LV68mNtvv51atWrRrl07wsPDAXj99de59dZbqVq1Kr179076M75Ro0Y899xzBAcH884776Q45/Tp0+nbty8A3bp145lnnuGOO+6gTJkySf9AGDx4ML/99htBQUGMHz+euLg4XnjhBRo2bEj16tX58MMPAQgJCaFBgwY88MADBAYGEhoaSqVKlejUqROVK1embdu2ScX0kiVLqFmzJtWqVeOxxx5LMZnCRU8++STBwcFUqVKFV199FYB3332Xw4cP07hxYxo3bgwkTIhw4sQJAMaNG0fVqlWpWrUqEyZMSPq5Vq5cmV69elGlShXuueceotLif4Gttdn+Vbt2beuEZcuWOXJe+df1jsGuyEh755o1lmXL7K2rV9s/z55NsT0+Pt5+8MEH1tPT0wJJr969e9vIyMg0TJ4xDh8+bGfNmmUfe+wxGxAQkOIzpfYqUaKE7datm/3000/toUOHrvi+S0+dsuX/+MOybJm9d9kyeyImJgM/lVxKfxY5T2PgvLQagy1btiR9/19/Zt7M62py585trbV27969tkqVKtZaaz/55BNbunRpe+bMGRsVFWVLlixp9+/fb48fP24bNGhgw8PDrbXWjhw50g4bNsxaa+3JkyeT3rNz58523rx51lprGzZsaJ988slUz/3JJ5/Yp556ylprbdeuXW3btm1tXFyc3bx5sy1btqy1NuFn3aJFi6RjPvzwQ/vGG2/Yc+fO2ejoaFu7dm27Z88eu2zZMuvt7W337NmT9HkAu3z5cmuttd27d7djxoyxUVFRtnjx4nb79u3WWmu7dOlix48fn5R11apVKT7PhQsXbMOGDe369euttdYGBATY48ePJ+W5uLx69WpbtWpVGx4ebsPCwmxgYKBds2aN3bt3r3V3d7dr16611lrb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/vtv2rdvn8GJs7FOnSA0lDLWMv/338l18CA8+SR2yxaePHiQ57ZtI04zSImISBagolyylTOxsTTfuJEp//zD4JIleQ3wdndP2n6lhwE98cQT/PHHH2pXcVCdOnWYPXs25uxZGDAA/vc/3jlyhHabNxMVF+d0PBGRLKNUqVKcOHHisvVffvkllStXvmw+75tx5swZPvjgg6Tlw4cP07Zt2zR7/8xERblkG7ujorh97Vp+OXOGaRUr8laZMil+A1zpYUCff/45kyZNwivZkzzFGa1atWL8+PEQFwfvvQfvv883x49z9/r1nEp8EpyIiCSw1hIfH59m7/fxxx/z0UcfsWzZsjR7z0uL8qJFi6bp00MzExXlki38ee4cddes4VhMDD/VqEH3W25JsX3t2rXUqlXrsnaVNWvWqF3FxTz77LM8++yzCQtffw3DhvHnmTPUW7uWfYmPhRYRya5CQ0OpWLEijz76KFWrVuXAgQOMGTOGW2+9lerVq/Pqq68m7duqVStq165NlSpVmDJlylXf9/XXX2f58uX06NGDF154genTp9O3b9+k7S1btiQkJARIuKA1dOhQatSoQd26dTl69CgAR48e5aGHHqJGjRrUqFGD33//ncGDB7N7926CgoJ46aWXCA0NpWrVqgBER0fTvXt3qlWrRs2aNZP+MTB9+nRat25Ns2bNKF++PAMHDkzLH6FjNCWiZHk/nzpFq02bKJwzJz9Ur055b++kbRfbVZ577rmkq+OQ0K4yfvx4XR13UW+//Tb79u3j22+/hV9+Ie755zkwbhy3r1nDwmrVCLrKE+FERDLKczt3si48PE3fM8jHhwnly191n507dzJjxgzq1q3L4sWL2blzJ3/99RfWWh544AF+/fVX7rzzTqZNm0aBAgWIiori1ltvpU2bNhQsWDDV93zllVdYunQpY8eOJTg4mOnTp1/x/BEREdStW5cRI0YwcOBAPvroI1566SWeeeYZGjZsyDfffENcXBzh4eGMHDmSTZs2sW7dOsLCwjh58mTS+0ycOBFjDBs3bmTbtm3cc8897NixA4B169axdu1aPD09qVixIk8//TQlSpS4/h+oC9GVcsnSvj5+nBYbN1I2Vy5W1KyZoiA/d+4cr7/+utpVMiF3d3dmzZrFbbfdBoBdt464Pn2Ii43lznXr+OnUKYcTiog4JyAggLp16wKwePFiFi9eTM2aNalVqxbbtm1j586dALz77rtJV7MPHDiQtP5m5cyZk5YtWwJQu3ZtQkNDAVi6dClPPvkkkPDneL58+a76PsuXL6dz584AVKpUiYCAgKSivEmTJuTLlw8vLy8CAwPZt29fmmR3kq6US5Y19fBhHt+xg7p58/J9tWr4JntC59q1a2nXrh27d+9OWqeHAWUu3t7ezJ8/n7p167J3716it23D58knKfrRRzTfuJHZlSvTzt/f6Zgiko391xXt9JI7d+6k7621vPjiizz++OMp9gkJCeHnn39m5cqVeHt706hRI6KvowUwR44cKfrVkx/r4eGBSXzmh7u7OxcuXLjRj3JFnslmTUuvc2Q0XSmXLGn0/v302rGDewoUYHGNGkkFubWWDz74gLp166YoyB9//HHNrpIJ+fv7s2jRInx9fQE4sXUr9umnqZ0rF+23bGHmkSMOJxQRcda9997LtGnTCE9sozl06BDHjh3j7Nmz+Pr64u3tzbZt2/jjjz+u631LlSrFunXriI+P58CBA/z111//eUyTJk2YNGkSAHFxcZw9e5Y8efIQFhaW6v4NGjRg1qxZAOzYsYP9+/dTsWLF68qZmagolyzFWsug3bsZtGcP7f39+a5qVXInTnl49uxZHnnkEZ566qmkdpVcuXIlPQxI7SqZU8WKFfnuu+/ImTMnADvWrsXjpZe4M29eHt22jY8OH3Y4oYiIc+655x46duzI7bffTrVq1Wjbti1hYWE0a9aMCxcuULlyZQYPHpzU7nKt6tWrR+nSpQkMDOSZZ56hVq1a/3nMO++8w7Jly6hWrRq1a9dmy5YtFCxYkHr16lG1alVeeumlFPv36dOH+Ph4qlWrxiOPPML06dNTXCHPaozVgzcIDg62q1evzvDzhoSE0KhRoww/b1ZlreXpnTuZePgwTxYtynvly+Oe+N9na9as4eGHH76sXeX555+nS5cuTkUW0u73wZw5c+jQoUPScvuuXTnbvz+LTp3ivXLl6Fu8+E2fI6vSn0XO0xg4L63GYOvWrVSuXPnmA2VDYWFh5MlCN+qn9mvBGPO3tTY4tf1d8kq5MaaZMWa7MWaXMWZwKtvHG2PWJb52GGPOJNsWl2zbvAwNLo5JXpAPKFGCiYkF+cV2ldtvvz1FQX7xYUCZ/U5t+Vf79u156623kpbnzJhB0Ndf06pQIZ7etYsx+/c7mE5EROTqXO5GT2OMOzARuBs4CKwyxsyz1m65uI+1tl+y/Z8GaiZ7iyhrbVAGxRUXcGlBPrpMGYwxnD17ll69evHll18m7evj48NHH32kucezqEGDBrF3796k+Xbfev11PgwIwKtuXQbu2UNUfDwvBwQk3YAkIiLiKlzxSvltwC5r7R5rbQwwB3jwKvt3AD7PkGTicqy1PLNrFxMPH+b54sWTCvI1a9ZQu3btFAV5jRo1+Pvvv1WQZ2HGGCZOnEizZs2S1j31+ON0PXSIbkWK8GpoKMMSp+YSERFxJa5YlBcDDiRbPpi47jLGmACgNLA02WovY8xqY8wfxphW6ZZSHHexIH//0CGeL16cMWXLAly1XUWzq2R9OXLk4IsvviAoKAiACxcu8HCbNjx7/jyPFSnCsH37GKVWFhERcTEud6OnMaYt0Mxa2zNxuQtQx1rbN5V9BwHFrbVPJ1tXzFp7yBhThoRivYm1dncqx/YGegMULly49pw5c9LnA11FeHg4Pj4+GX7erMAC7wHfAO2AJ4HIiAjGjh2b9JhfSJjL+vnnn+euu+5K9X00Bs5LrzE4ceIEffr04fjx4wAUKlSI9z/4gCl+fiwF+gJt0vysmZN+HzhPY+C8tBqDfPnyUa5cuTRIlP3ExcXhnjhjWlawa9cuzp49m2Jd48aNr3ijJ9Zal3oBtwM/Jlt+EXjxCvuuBe64yntNB9r+1zlr165tnbBs2TJHzpvZxcfH2/47d1qWLbP9d+608fHxds2aNbZs2bKWhHrdAjYoKMju2LHjqu+lMXBeeo7Bhg0bbN68eZN+TVSvXt2eOHPGPrRxo2XZMvvhoUPpdu7MRL8PnKcxcF5ajcGWLVuu+5jY2DN2w4ZWNjb2TJpkyKzOnTvndIQ0ldqvBWC1vUI96ortK6uA8saY0saYnEB74LJZVIwxlQBfYGWydb7GGM/E7wsB9YAtlx4rmduIffsYd/AgTxcrxpgyZZg0adJlDwN64oknWLlyJeUdepqauIZq1arx9ddfkyNHwj3tGzZsoOPDD/NZ+fI0L1CAJ3bs4DM9YEhEHHbixDxOnvyWEyfmOx3lujVq1Ij0nFZ63rx5jBw58qr7hIaGMnv27HTLkFFcrii31l4g4X+WfwS2Al9YazcbY143xjyQbNf2wJzEf3VcVBlYbYxZDywDRtpks7ZI5vf+wYO8HBrKo4ULM8zPj/bt26d4GFCePHmYO3cukyZN0sOABICmTZvy0UcfJS0vXryY5/r25asqVbgrf366bdvGl8eOOZhQRLK7I0empfgq/3rggQcYPPiy2bFTUFGejqy1C621Fay1Za21IxLXvWKtnZdsn9estYMvOe53a201a22NxK8fZ3R2ST+zjh7l6V27eLBgQZ6KjOTW4OAUs6sEBQUlPSRIJLlu3brxyiuvJC1PnTqV8aNG8V21atyRLx8dt27l+xMnHEwoItnJunVNCQkxSa+zZ38H4OzZFSnWr1vX9LrfOyIighYtWlCjRg2qVq3K3LlzAXj99de59dZbqVq1Kr17977Y5kujRo3o168fwcHBVK5cmVWrVtG6dWvKly+f9ITN0NBQKlWqRKdOnahcuTJt27YlMjLysnMvXryY22+/nVq1atGuXTvCw8Mv26dRo0Y8++yzBAUFUbVqVf766y8ATp06RYcOHahevTp169Zlw4YNAEyfPp2+fRNuK+zWrRvPPPMMd9xxB2XKlOGrr74CYPDgwfz2228EBQUxfvz46/6ZuQqXLMpFLjX/xAm6bt1K4/z5abx8OQ3uuCNFu0qfPn1YuXKlbq6RK3rttddSPL116NChfDd3LguqVSPIx4eHt2xh5SU35IiIpIeAgKG4uXknLSfMAP3vVwA3N28CAl667Nj/8sMPP1C0aFHWr1/Ppk2bkqaI7du3L6tWrWLTpk1ERUXx/fffJx2TM2dOVq9ezRNPPMGDDz7IxIkT2bRpE9OnT+fkyZMAbN++nT59+rB161by5s3LBx98kOK8J06cYPjw4fz888+sWbOG4OBgxo0bl2rGyMhI1q1bxwcffMBjjz0GwKuvvkr16tXZsGEDb775Jo8++miqx/7zzz8sX76c77//PukK+siRI2nQoAHr1q2jX79+qR6XGagoF5cXcvo07TZvpoa3N/nGjOG5Pn0ua1eZOHGi2lXkqowxTJ06lcaNGyet6969O2tXrGB+5ZKM4GUe3rCSrRERDqYUkezA17cx1ap9n6IwT87NzZtq1Rbg69vout+7WrVq/PTTTwwaNIjffvuNfPnyAbBs2TLq1KlDtWrVWLp0KZs3b0465oEHHkg6tkqVKtxyyy14enpSpkwZDhxImKW6RIkS1KtXD4DOnTuzfPnyFOf9448/2LJlC/Xq1SMoKIgZM2awb9++VDN26NABgDvvvJNz585x5swZli9fnvQckbvuuouTJ09y7ty5y45t1aoVbm5uBAYGcvTo0ev++bgyFeXi0v4OC+OBTZsoZgynevXi22Q9YzVr1uTvv/9Wu4pcs5w5c/K///2PwMBAAGJiYmjVqhWHt02jZvyv1GUl927YwMHoaIeTikhW5+vbmMDAubi5pbyg5ObmRWDg3BsqyAEqVKjAmjVrqFatGi+99BKvv/460dHR9OnTh6+++oqNGzfSq1cvopP9Oefp6Zl4brek7y8uX7hwAeCyJyFfumyt5e6772bdunWsW7eOLVu28PHHqXcR/9d7XU3yfClvK8z8VJSLy9oTFUXzDRvwiIriQPv2hCb2l0FCu8rvv/+u2VXkuuXPn5+FCxdSpEgRAM6cOcOff74KwLO5Qjhz4QLNNmzgdGyskzFFJBu4cOEMkANww80tFwllWY7E9Tfm8OHDeHt707lzZ1544QXWrFmTVIAXKlSI8PDwpF7s67F//35WrkyY8G727NnUr18/xfa6deuyYsUKdu3aBST0tu/YsSPV97rY5758+XLy5ctHvnz5aNCgAV988QUAISEhFCpUiLx5815Ttjx58hAWFnbdn8nV5HA6gEhqTsbGcu+6dZwJCyOmd2/45x8g4Tfe1KlTdXVcbsrp0z34/PN/p0KMiTkPQFzEH8yzd0IkrF8BefPfRa2gJU7FFJEs7siRj4mPj8THpwZlyoxiz55BhIev58iRaRQp0vmG3nPjxo288MILuLm54eHhwaRJk8ifPz+9evWiatWqFClShFtvvfW637dixYpMnDiRxx57jMDAQJ588skU2/38/Jg+fTodOnTg/PmEP1OHDx+e6pO0vby8qFmzJrGxsUybljDjzGuvvcajjz5K9erV8fb2ZsaMGdecrXr16ri7u1OjRg26deuWafvKXe6Jnk4IDg626TnH5pWEhITQqFGjDD+vq4uKi+P2339nQ3Q0tn9/2LQJSGhX+eKLL9L0Zk6NgfOcGIPTp5excWNL4uMvnz3gomg8+T7vB0wI6kYOt6z9n4r6feA8jYHz0moMtm7dSuXKla9p340bW5E//50UL/4cxrhhbRwHDkzg7NnfqFbt25vOklZCQ0Np2bIlmxL/Pr4ZjRo1YuzYsQQHX/5Qy7CwMPLkyXPT53AVqf1aMMZc8YmeWftvGsl04uLjqff996yPjcWOGJFUkF9sV9HsKpIWruUmq3+KfsbEc2Xou3NnlutbFBHXUK3at5Qo0R9jEsoxY9wpWfJ5lyrIJeOoKBfnzZoFpUpx1hgqP/cca/Plg8mT4ZdfNLuKpJsr3WR1/jzs3NmB7hXaMbhkST785x/GHTzoUEoREeeVKlUqTa6SQ8L/SKR2lVzUUy5OmzULevfm78hI7n3oIU62bg3/+x98+WW6tKuIJJf8JqvYWIObWxxxcTB37sf4+jZnxEMPsTsqihd276aslxet/PwcTiwiIlmVrpSLs4YO5YfISOrWq8fJvn3ht99g4kT6+PioXUXSXfKbrKpV+5ajR73x8oJmzaBTp0789eefzKhUidvy5KHT1q38nQXu7heR9KeWN7mRXwMqysVRR/bto0P58lx46SXYtg2fESOYGx/PxIgItatIunN3z0fZsmOoXXs1RYq05O679/DVVwWJjITo6Gjuv/9+DoeG8l21avh5eHD/xo0c0BzmInIVXl5enDx5UoV5Nmat5eTJk9ddx6h9RRxjraXDLbdwZsQIOHOGwi+9xPLz5ykHULKk0/EkG7j0Zio/v8L07/8HdevWBU5y4sQJ7rvvPlauXMmC6tW5Y80aWm7cyPKaNcmTQ398isjlihcvzsGDBzl+/LjTUTKd6OjoLHNBzsvLi+LFi1/XMfpbRRwzbuJEQl5+GXx84OmnmXX6dEJB7u0NI0Y4HU+yqXLlyjFv3jzuuusuzp8/z86dO3nwwQf5+eef+aJKFVps2ED7LVv4rmrVLD9VoohcPw8PD0qXLu10jEwpJCSEmjVrOh3DMfobRRyxceNGBh4/DpUrw4gRDDh+nCbGQEAATJkCnTo5HVGysTvuuIOZM2cmPfp5xYoVdOvWjbvz5+f98uVZeOoUz+/e7XBKERHJSlSUS4aLjo7mnhkziG/cGKZOJSgiguHHjkF8PISGqiAXl9C2bVvGjBmTtDx37lyGDBnCE8WK0a94cd49dIiPE580KyIicrPUviIZ7uF33+VIy5bw0094fv01s/7+G09PT6djiVymf//+7N27l4kTJwIwatQoSpcuzehevdgUEcGTO3ZQ2dubO/LlczipiIhkdrpSLhlq0k8/Mb9aNdiyBcaMYdzbbxMYGOh0LJFUGWN45513uP/++5PW9enTh8U//MCcwEBKenrSetMmDmpGFhERuUkqyiXDbDtyhL5nz0JYGLz0Ei3uuYcnn3zS6VgiV+Xu7s7nn3+e9AS6+Ph4Hn74YUI3buS7atWIiI+n9ebNRMfFOZxUREQyMxXlkiFi4+Np8NNPxOfJAy+9hL+HBx9//HHSjXQirix37tzMnz+fgIAAACIiImjRogV5Tp5kZuXKrAoLo/eOHZqXWEREbpiKcskQzb/7jhMlSsDbb8POnUybNo3ChQs7HUvkmhUpUoRFixaRP39+AI4cOULz5s1pmCMHw0qV4rOjR5lw8KCzIUVEJNNSUS7p7u116/jZ1xf+9z/46SeeeuopWrRo4XQsketWuXJlvvnmGzw8PADYvHkzbdq0YeAtt9C6UCEG7N7NT6dOOZxSREQyIxXlkq5Wnz7NC8eOwfr18MEHVK5cOcU0cyKZTaNGjfjkk0+SlpcuXcoTjz/O9EqVCMydm0e2bGFvVJSDCUVEJDNSUS7p5lRsLHevXIk9exaGDcPDzY3Zs2eTK1cup6OJ3JROnToxfPjwpOUZM2YwbsQIvq1alXhraasbP0VE5DqpKJd0EWctzVas4IyHB7z6Kpw+zVtvvUVQUJDT0UTSxJAhQ+jRo0fS8muvvcbyL77gs8qVWRMeTt+dOx1MJyIimY2KckkXA7duZRXAu+/C1q00adKEfv36OR1LJM0YY5g0aRL33HNP0rqePXvivX49Q0qW5OMjR/TETxERuWYqyiXNfXf8OOOOHYPvv4fvv6dAgQLMmDEDNzf9cpOsxcPDgy+//JLq1asDcOHCBVq3bs3DERE09fXlqR07WBMW5nBKERHJDFQlSZraGxVFx40bYfv2hKvkwJQpUyhWrJjDyUTSR968eVmwYEHSr/Fz585xf4sWjPP1xT9nTtps3syp2FiHU4qIiKtTUS5pJjoujgfWriUyMhJeew1iY+nRowdt2rRxOppIuipevDgLFiwgT548ABw4cICurVoxo3RpDp0/T5etW4nXg4VEROQqXLIoN8Y0M8ZsN8bsMsYMTmV7N2PMcWPMusRXz2Tbuhpjdia+umZs8uztuZ072RQTA2+9BUeOUK5cOSZMmOB0LJEMUaNGDb788kvc3d0BWLt2LWN79GBcmTIsPHWKEfv2OZxQRERcmcsV5cYYd2AicB8QCHQwxgSmsutca21Q4mtq4rEFgFeBOsBtwKvGGN8Mip6tzT56lA+PHIE5c+D333F3d2fWrFn4+Pg4HU0kw9x77718+OGHScsLFy5k05tv0tnfn1dDQ/lZDxYSEZErcLminIRiepe1do+1NgaYAzx4jcfeC/xkrT1lrT0N/AQ0S6eckmhrRAQ9t26FjRth6lQAhg0bxm233eZwMpGM16NHD4YOHZq0/OHkyVRcuJDK3t502rqVf86fdzCdiIi4KlcsyosBB5ItH0xcd6k2xpgNxpivjDElrvNYSSMRcXG03riR8+fOweuvQ1wc9evXZ/Dgy7qORLKNN954g44dOyYtv/zCC3Tfv5+wuDg6bd1KnPrLRUTkEsa62F8Oxpi2QDNrbc/E5S5AHWtt32T7FATCrbXnjTGPA49Ya+8yxgwAvKy1wxP3exmIstaOTeU8vYHeAIULF649Z86cdP9slwoPD8/U7R0WeAv4yVoYMADWrCF37txMnTqVIkWKOB3vmmT2McgKsuoYxMTEMHDgQNavXw8kTJ/48McfM6tECboC3RxNl1JWHYPMRGPgPI2B87LDGDRu3Phva21wattyZHSYa3AIKJFsuXjiuiTW2pPJFqcCo5Md2+iSY0NSO4m1dgowBSA4ONg2atQotd3SVUhICE6cN618/M8//LR9O0yfDmvWAAnTH7Zv397ZYNchs49BVpCVx+DWW2/ljjvuYNu2bcTGxrLoued4cOFCPo2K4tEaNbjL1zVuecnKY5BZaAycpzFwXnYfA1dsX1kFlDfGlDbG5ATaA/OS72CMuSXZ4gPA1sTvfwTuMcb4Jt7geU/iOkljWyIi6LtjBznWr4eZMwHo2LFjiv+yF8nufH19WbhwIf7+/gCcOnWK9d26UT5nTjpu2cIR9ZeLiEgilyvKrbUXgL4kFNNbgS+stZuNMa8bYx5I3O0ZY8xmY8x64BkS/yfYWnsKeIOEwn4V8HriOklDUXFxPLJ5M3FhYVwYNgzi4wkICGDixIlORxNxOaVLl+b777/H29sbgNBt2/AcNYpzcXF0Vn+5iIgkcrmiHMBau9BaW8FaW9ZaOyJx3SvW2nmJ379ora1ira1hrW1srd2W7Nhp1tpyia9PnPoMWVn/3bvZFBlJ7Ouvw+nTuLm58dlnn5E/f36no4m4pFtvvZXPP/8cYwwAG+fNo9LixSw5c4Y3NX+5iIjgokW5uK4vjx1j8uHDuM2dC6tWAfDiiy/SoEEDh5OJuLYHHniAd955J2l57YgRVDpwgNdCQ/nlzBnngomIiEtQUS7XbG9UFL22b8drzx7iP/oISLgC+OqrrzqcTCRzePrpp+nXr1/S8rbevSl4/jydt27lZGysg8lERMRpKsrlmsTGx9NhyxaioqKIHjoU4uLInTs3s2bNwsPDw+l4IpnG2LFjad26dcJCdDTHn3mGI9HR9Ny+HVebolZERDKOinK5Ji/v3cufYWHEvPkmHDkCwLvvvkv58uUdTiaSubi5uTFz5kzq1q2bsGLHDpg6lW9PnODDw4edDSciIo5RUS7/afGpU4w6cACvxYvhl18AaN26Nd27d3c4mUjmlCtXLr777jvKlCkDwIXPPyfn+vU8t2sXmyMiHE4nIiJOUFEuV3U8Joau27bhc+IE0W+/DUDRokWZMmVK0kwSInL9/P39WbRoEQUKFABriRk2jAtnz9Ju40ai4uKcjiciIhlMRblckbWWHtu3cyI6mvBBgyAmBoBPP/2UggULOpxOJPOrUKEC3333HZ6ennD6NHHDh7M1Opr+O3Y4HU1ERDKYinK5osmHDzP/5Enshx/Cnj0APP/88zRp0sThZCJZR/369ZkxY0bCwqpV8OWXTD56lG+PH3c2mIiIZCgV5ZKqLRER9N+1C5+tW4n78ksAatSowYgRIxxOJpL1PPLII4wcOTJh4aOPYMcOOq5dy6Hz550NJiIiGUZFuVzmfHw8HbdswURHEz50KFiLl5cXs2fPTvhvdhFJcwMHDuTxxx+H2FgYPpyouDjuXrKEeE2TKCKSLagol8sM2bOH9RERRL32Gpw+DSTMrRwYGOhsMJEszBjD+++/T/PmzeHAAfjgA7Z6e/Pkzz87HU1ERDKAinJJYfGpU4w7eBDvxYvhjz8AaN68OX369HE4mUjWlyNHDubOnUvNmjXh++9hxQqmWMtXa9Y4HU1ERNKZinJJcnH6wzwnTxKZOP2hv78/06ZN0/SHIhnEx8eH77//nhIlSsCYMRAeTodNm9i1f7/T0UREJB2pKBcgYfrDXonTH4YNHJg0/eEnn3xC4cKFHU4nkr0ULVqUhQsXktdaGD2aCyVLcvvHH3Pu3Dmno4mISDpRUS4AfHLkCN+dPImZNi1p+sOnnnoqob9VRDJc1apV+d///keOv/+Gb7/lROPGNB4wgNjYWKejiYhIOlBRLuyJiuLZnTvJs2sXsbNnA1C5cmXGjBnjcDKR7K1JkyZMnToVJk+G/ftZc/fdPFayJNYYKFUKZs1yOqKIiKQRFeXZXJy1PLp1K7HnzxOWOP2hh4cHs2fPJleuXE7HE8n2unbtyquDB8OIEeDry8zHH2cEwL590Lu3CnMRkSxCRXk2N2b/flacO8f5MWPg2DEA3nzzTYKCgpwNJiJJXn31VboeOgTTpkGjRrx8zz0sBoiMhKFDnY4nIiJpQEV5NrY2LIxXQkPJ9eef8NNPQMJ/l/fv39/hZCKSnDGGKRER3DV3LqxfD08/TTd/f84CaFYWEZEsQUV5NhUdF0fnrVtxDw8n6s03AShQoAAzZszAzU2/LERcTc6AAD6Pj8d31Chwc+OfQYN43hgoWdLpaCIikgZUfWVTQ/buZUtkJNHDhkHiNGsfffQRxYoVcziZiKRqxAj8vb2Z/M8/MHEi1KrFxw89xOL27Z1OJiIiaUBFeTa05PRpxh88iMeCBbBqFQA9evSgdevWDicTkSvq1AmmTOHhgADaLFwIK1dC7950XbaMs2fPOp1ORERukorybObshQt037YNr+PHiX3vPQDKlSvHhAkTnA0mIv+tUycIDeWDo0cpMG0aREdzpHt3+r/wgtPJRETkJqkoz2b67drFwehool95Bc6fJ0eOHMyePRsfHx+no4nINfL392fSiBEwbhxUqsS08+f58ccfnY4lIiI3QUV5NjL/xAk+OXIEZs+GbdsAeO2117j11lsdTiYi1+vhhx+mrb9/wsxJXbrw6IgRamMREcnEVJRnEydiYui5bRs59+/HTp8OQP369Rk8eLCzwUTkhk2cOJECM2fC6dMce+wxnhs0yOlIIiJyg1SUZxNP7dzJifPniRk2DC5cIG/evMycORN3d3eno4nIDfL392fSmDEwahSUKsV0d3e1sYiIZFIqyrOBOUeP8sXx48RPmwZ79gAwefJkAgICHE4mIjfr4Ycfpm3p0vDNN9CmDV3GjFEbi4hIJuSSRbkxppkxZrsxZpcx5rL+CmNMf2PMFmPMBmPMEmNMQLJtccaYdYmveRmb3PX8c/48T2zfjvv27TBnDgCdOnWiQ4cODicTkbQyceJECn79NfzzD8cfe4xn1ZYmIpLpuFxRboxxByYC9wGBQAdjTOAlu60Fgq211YGvgNHJtkVZa4MSXw9kSGgXZa2l5/bthJ0/T9zw4RAfT0BAABMnTnQ6moikIX9/fz4YNy6hjaVIEWZ4eqqNRUQkk3G5ohy4Ddhlrd1jrY0B5gAPJt/BWrvMWhuZuPgHUDyDM2YK044cYeGpU8RPngwHD+Lm5sbMmTPJly+f09FEJI09/PDDtK1YEb7+Glq1ovO4cWpjERHJRFyxKC8GHEi2fDBx3ZX0ABYlW/Yyxqw2xvxhjGmVDvkyhf3R0Ty7fTtm3bqEXlNgyJAh1K9f39lgIpJuJk6cSMFvv4X9+znRvTvPqI1FRCTTMNZapzOkYIxpCzSz1vZMXO4C1LHW9k1l385AX6ChtfZ84rpi1tpDxpgywFKgibV2dyrH9gZ6AxQuXLj2nMR+64wUHh6eLg/tscDzcXGsi4nBdu8OR49SqVIl3nvvPXLkyJHm58vM0msM5NppDNLWsmXLeP3LL+G99+CHHxjl58dtt9121WM0Bs7TGDhPY+C87DAGjRs3/ttaG5zaNles0A4BJZItF09cl4IxpikwlGQFOYC19lDi1z3GmBCgJnBZUW6tnQJMAQgODraNGjVKu09wjUJCQkiP8354+DBrd+yASZPg6FFy587N/PnzKVeuXJqfK7NLrzGQa6cxSFuNGjViy5YtfDVnDnTqxOixY9n9+ONXbVvTGDhPY+A8jYHzsvsYuGL7yiqgvDGmtDEmJ9AeSDGLijGmJvAh8IC19liy9b7GGM/E7wsB9YAtGZbcBYRGRdFv+3ZYvRrmzwfg3XffVUEuko1MnDiRgt9/D3v3crJrV54eMsTpSCIi8h9crii31l4goSXlR2Ar8IW1drMx5nVjzMXZVMYAPsCXl0x9WBlYbYxZDywDRlprs01RHm8tXTZuJDoqCsaOBaBNmzZ0797d4WQikpH8/f354J13YORIKFCAz/Ll02wsIiIuzhXbV7DWLgQWXrLulWTfN73Ccb8D1dI3neuadOgQyyMj4YMP4OhRihUrxpQpUzDGOB1NRDLYww8/zJdffslXM2dC1650GjeO3XXravYlEREX5XJXyuXG7ImKov/27bBqFSxYAMCMGTMoUKCAw8lExCkTJ06k4A8/wO7dnOzalb5qYxERcVkqyrOAeGt5ZM0aYqKjYcwYAAYMGECTJk0cTiYiTkrRxpI/PzPVxiIi4rJUlGcB7+zbx+rY2IS2lePHCQoKYvjw4U7HEhEX8PDDD9M2KAhmzYJ77qHTxIl6qJCIiAtSUZ7J7Y6KYuCuXfDnn7BwIV5eXsyePRtPT0+no4mIi5g4cSIFFy1KaGN59FH6vvii05FEROQSKsozsXhrab1yJReio+HttwF4++23qVy5ssPJRMSVJLWxjBoFvr5qYxERcUEqyjOxsTt2sMHNLeEhQceP06JFC5588kmnY4mIC3r44YdpW6NGQhvLvffS6f331cYiIuJCVJRnUnsiIxmyb1/CbCsLF+Lv78+0adM0/aGIXFGKNpauXdXGIiLiQlSUZ0LWWlqGhBAXG5v0kKBPPvkEf39/h5OJiCvz9/dn0rvvpmhj+eGHH5yOJSIiqCjPlIavW8dWb2/48EM4doy+ffvSvHlzp2OJSCbQrl27FG0snd9/n/DwcKdjiYhkeyrKM5nd4eG8dvQorFkD8+cTGBjI6NGjnY4lIpnIBx98kNDGsncvJ7t25d2PP3Y6kohItqeiPBOx1nL3Dz8Qby2MHk3OnDmZNWsWuXLlcjqaiGQifn5+/7axFCjAT2XLqo1FRMRhKsozkcG//sreQoVgyhQ4epS33nqLoKAgp2OJSCbUrl072lWvDl98AS1b0uWddzQbi4iIg1SUZxKbjx1jTEQErFsH331H06ZNee6555yOJSKZ2Pvvv0/B77+H/fs50bUrTw8a5HQkEZFsS0V5JhAfH889P/yAdXODMWMo4OvL9OnTcXPT8InIjfP392fShAkwejT4+/OZp6faWEREHKKqLhN46ttvOVyyJEydCocPM3XqVIoVK+Z0LBHJAtq1a0fDQoXg66/hoYd49O231cYiIuIAFeUu7q9du5js4QGbNsE339CjRw8eeughp2OJSBby7LPPUvC77+DQIY5368azAwc6HUlEJNtRUe7CLly4QPMffgBPTxg9mnJlyjBhwgSnY4lIFuPr68uk8eNhzBgoVowZOXKojUVEJIOpKHdhnT/6iJNVq8L06eT45x9mz56Nj4+P07FEJAtq164d7SpUgO++gzZteHT0aLWxiIhkIBXlLuqHlSuZW6QIbN8Oc+fy2muvceuttzodS0SysIkTJ1Lgq6/g2DGOd+3Ksy+84HQkEZFsQ0W5CwoLC6PdL79AnjwwejT177iDwYMHOx1LRLI4Pz8/Jo8bB2+/DQEBzLBWbSwiIhlERbkLemjMGMLr1oWZM8l74gQzZ87E3d3d6Vgikg20a9eOdqVLw6JF0L49XYcPVxuLiEgGUFHuYmZ8/TVLqlWDPXtg1iwmTZpEQECA07FEJBt5//33KTB3Lpw+zbHu3XlObSwiIulORbkLOXjwIL3XroUCBWDUKDo98ggdO3Z0OpaIZDP+/v5MHjMGJkyAsmWZHh2tNhYRkXSmotxFxMfH0/K114hp2hTmziXg/HkmTpzodCwRyabatWtHu6JFYckS6NKFbsOGqY1FRCQdqSh3EW+OH8/6pk1h/37MZ58xc+ZM8uXL53QsEcnGJk6cSIHZsyEigqOPPkq/AQOcjiQikmWpKHcBa9eu5dUDB8DfH8aMYeiAAdSvX9/pWCKSzfn5+TF55Eh4912oXJlPzp1TG4uISDpRUe6wyMhIWr38MvGtWsG333KbtzevvPKK07FERICENpa2hQrB8uXw2GN0e/lltbGIiKQDFeUOe27QIPY//DD88w/es2czc+ZMPDw8nI4lIpLkg4kTKfDZZxATw9HOnenXv7/TkUREshyXLMqNMc2MMduNMbuMMZc9NccY42mMmZu4/U9jTKlk215MXL/dGHNvhga/TitXruSj8+ehZEkYO5b3Ro+mfPnyTscSEUnBz8+PD0eMgA8+gBo1+OTUKRYtWuR0LBGRLOU/i3JjzC/GmFoZESbxfO7AROA+IBDoYIwJvGS3HsBpa205YDwwKvHYQKA9UAVoBnyQ+H6uZdYsjpQowejp0+GRR2DBAlqXKkX37t2dTiYikqq2bdvSNk8eWLUKevWi++DBnDlzxulYIiLXZ9YsdhUrRpwxUKoUzJrldKIk13Kl/ADwpzFmhjGmWHoHAm4Ddllr91hrY4A5wIOX7PMgMCPx+6+AJsYYk7h+jrX2vLV2L7Ar8f1cx6xZ2F696HrkCGcGDoRTpygyeTJT7r6bhI8gIuKaPpg4kQLTp4MxHO3cmf7PP+90JBGRazdrFsd69eL2qCga58jBgX37oHdvlynM/7Mot9Z2BuoBZYEdxpjXjTG50zFTMRL+IXDRwcR1qe5jrb0AnAUKXuOxzho6lIlRUSzu2BHKloUJE/gsPJyCI0c6nUxE5Kr8/Pz4cNgwmDIFbr2VTw4fVhuLiGQadsgQHouO5sRrr/Hb2LHcA8RHRsLQoU5HAyDHtexkrf0LqG+MeQQYCfQ0xrwMTLPW2vQMmF6MMb2B3gCFCxcmJCQkQ87bcP9+SgL5ly3jTFwcz//+O00Bu38/v2RQBvlXeHh4ho29pE5j4LzrGYNChQrR8MwZflm/Hvr0ofMzzzBj/Hh8fHzSN2QWp98HztMYOC+9x2Dr/v0saNUKqleHkSOZQMLVaZepway11/UCPIHBwBlgHdD0et/jP97/duDHZMsvAi9ess+PwO2J3+cATgDm0n2T73e1V+3atW2GCQiwFuwhsH3BRoO1kLBeMtyyZcucjpDtaQycd71jcOzYMetbvbrlhx8sr79uu3Xvnj7BshH9PnCexsB56TkGW7ZssZ5FilgWLrSMGmWfuVh/ZXANBqy2V6hHr3n2FWNMTmPMbUBPoBJwDqgO/GiMmW+MKX0z/zhIZhVQ3hhT2hiTk4QbN+ddss88oGvi922BpYkfdB7QPnF2ltJAeeCvNMqVNkaMAG9vigLvkfAvHLy9E9aLiGQCfn5+THn5ZZg+HRo0YPrevSxcuNDpWCIiqYqJiaFjp06cf/55sJYK48YlzBACLlWDXcvsK5ONMatJKML/AEYARUm40fIB4A7AAhuMMffdbCCb0CPel4Sr3FuBL6y1mxN72R9I3O1joKAxZhfQn4Qr91hrNwNfAFuAH4CnrLVxN5spTXXqlNCPGRCANQYCAhKWO3VyOpmIyDVr27Ytba2FbdvgmWfo0b+/ZmMREZf08ssvs65IEQgOJsfHH/OVmxteLliDXUtPeR3gTxKmKfwD2JZ4VTq5B4wxo4F3Sbg6fVOstQuBhZeseyXZ99FAuyscO4KEfzi4rk6doFMnfgkJoVGjRk6nERG5IR+89x5LmjXj9MiRHGnXjv79+zNt2jSnY4mIJFm6dCmjp02DTz6B9esZfeedVPv6a6djpepaZl+paa19wlr7ibV2ayoF+UVfAWXSNp6IiLgqPz8/PhoyBGbOhCZN+GTbNrWxiIjLOHXqFF0efRSeew48PKj/xx88+/TTTse6orR8oud6Eh74IyIi2USbNm1oExMDu3dDv370ePZZtbGIiOOstTz++OMcrlAB6tXDe+5cvhg3Djc3l3yYPZCGRblNeGDP4rR6PxERyRwmvfsu+T/6CAoU4EirVvTv39/pSCKSzc2YMYOvfvoJnnkGtm7lswcf5JZbbnE61lW57j8XREQkU/Dz82PqCy/A3LnQogWfbNigNhYRcczu3bt5+umn4emnIXdu2u7ZQ+sHL304vOtRUS4iIjetTZs2tA4Ph/37YcAAevTtqzYWEclwsbGxdOrUifAaNaBJEwouWsT0115zOtY1UVEuIiJpYvI77yS0sfj7c6RlS7WxiEiGGz58OH9u3pxwc+fu3Szo2JHcuXM7HeuaqCgXEZE04efnx9TnnoNvvoHWrflk9Wq1sYhIhlmxYgXDhw+HPn3A15e+ERHUCQ52OtY1U1EuIiJppk2bNrQ5fRoOH4YXXqBnnz5qYxGRdHfu3Dk6d+5MfO3acN99lFyxgglPPeV0rOuiolxERNLUpPHjyTd1KpQowT/NmqmNRUTSXd++fQk9dgyefx63Awf4uWtX3N3dnY51XVSUi4hImvLz8+Pjp56C77+Hdu345I8/1MYiIulmzpw5fPbZZ9C7N/j5MSx3bsoHBDgd67qpKBcRkTTXpk0bHjp2DE6ehIED6fnkk2pjEZE0t3//fp544gmoUQMefJDALVt4qXVrp2PdEBXlIiKSLqaMG0feqVOhVCn+adpUbSwikqbi4uLo0qULZ8+fhxdeIMfRoyzp3NnpWDdMRbmIiKSLQoUKMe3xx+GHH6BjRz757Te1sYhImhk9ejS//vorPPYYFCvGO8WKUSR/fqdj3TAV5SIikm7atGnDQ4cPw5kzMGgQPZ94Qm0sInLTVq9ezSuvvAJVqkCbNgQfOkSf+vWdjnVTVJSLiEi6mjJuHPmmTYNy5fincWP69evndCQRycQiIiLo2LEjF9zcYOBAcp49y09t2zod66apKBcRkXRVqFAhpvXoAUuWQOfOTP/lF7WxiMgN69evHzt37oTu3aFkSaZWrEh+T0+nY900FeUiIpLuWrduTasDByA8PKGN5fHH1cYiItft22+/5aOPPoLKlaFdOxqFhdElMNDpWGlCRbmIiGSIj8aOJe/06VCxIv80aKA2FhG5LocPH6Znz57g4QEDB+IdGcm3zZo5HSvNqCgXEZEMUahQIT7p2hV++QW6dWP6smUsWLDA6VgikgnEx8fTrVs3Tp48CV27QqlSzKhenXweHk5HSzMqykVEJMO0bt2aVvv2QVQUDBpEL83GIiLX4N133+Wnn36CihWhfXvus5a2mfCpnVejolxERDLUR6NHJ7SxVK7MP/Xrq41FRK5qw4YNDBo0KKFtZdAgfGJjmZ3Jpz9MjYpyERHJUIUKFWJaly7w66/QvTvTly5VG4uIpCoqKoqOHTsSExMDnTtD6dLMrFmT/FmobeUiFeUiIpLh2rRuTavQ0IQ2lsGD1cYiIqkaPHgwmzdvhvLloVMnHvTy4sHChZ2OlS5UlIuIiCNStLHUq6c2FhFJYdGiRbz77rsJbSuDB5PPWj6pXdvpWOlGRbmIiDgiRRvLY4+pjUVEkhw7dozu3bsnLHTpAmXKMDMoCN8s2LZykYpyERFxTIo2lkGD6KWHColke9ZaevbsydGjR6FCBejYkfb589OyUCGno6UrFeUiIuKopDaWwEDNxiIifPjhh8yfPz+pbaWgmxuTqlRxOla6U1EuIiKOuqyNRQ8VEsm2tm3bRv/+/RMWunaF0qX5rHr1LDnbyqVcqig3xhQwxvxkjNmZ+NU3lX2CjDErjTGbjTEbjDGPJNs23Riz1xizLvEVlKEfQEREbshlbSyajUUk24mNjaVjx45ERUVBpUrQoQNd/fy4r2BBp6NlCJcqyoHBwBJrbXlgSeLypSKBR621VYBmwARjTP5k21+w1gYlvtald2AREUkbH40eTd5p0xJmY2nYUG0sItnMtGnTWLt2LXh4YAYPpnCOHLxTsaLTsTKMqxXlDwIzEr+fAbS6dAdr7Q5r7c7E7w8DxwC/jAooIiLpo1ChQnzStSssWwZduzL911/VxiKSTSxbtoy5c+cmLHTvjg0IYEbVquTLkcPZYBnI1YrywtbafxK/PwJcdXZ4Y8xtQE5gd7LVIxLbWsYbYzzTKaeIiKSD1q1b89D+/RAWlvBQoSef5PTp007HEpF0dOrUKbp06YK1FipXhkceoWeRItxboIDT0TKUsdZm7AmN+RkoksqmocAMa23+ZPuettZe1leeuO0WIAToaq39I9m6IyQU6lOA3dba169wfG+gN0DhwoVrz5kz50Y/0g0LDw/Hx8cnw88r/9IYOE9j4DxXG4OzZ8/S6YMPiHjxRZgxg2ZHjjBo0CCnY6UrVxuD7Ehj4AxrLcOGDeOXX34BT0/cPv6YAkWKMN3dndxOh0sHjRs3/ttaG5zatgz/PwFrbdMrbTPGHDXG3GKt/SexwD52hf3yAguAoRcL8sT3vniV/bwx5hNgwFVyTCGhcCc4ONg2atTouj/LzQoJCcGJ88q/NAbO0xg4zxXH4NO4ONosXgydO/NDnz70jYigRYsWTsdKN644BtmNxsAZ06dPTyjIAXr2JL5YMebWqMFdvqlek83SXK19ZR7QNfH7rsB3l+5gjMkJfAN8aq396pJttyR+NST0o29Kz7AiIpI+WrduTetDh+DUqYQ2lj591MYiksXs3r2bp59+OmEhKAjatuXpYsWyZUEOrleUjwTuNsbsBJomLmOMCTbGTE3c52HgTqBbKlMfzjLGbAQ2AoWA4RmaXkRE0syHb79NvqlToXRp/rnnHs3GIpKFxMbG0qlTJ8LDw8HbmxxDh1I0Pp6RZco4Hc0xLnVLq7X2JNAklfWrgZ6J388EZl7h+LvSNaCIiGSYQoUKMe3xx2mzYAG0b8+MZ56h3YIFWbqNRSS7GD58OH/++ScA5qmniC9UiCGAt7u7s8Ec5GpXykVERJK0bt2aNkePwrFj8OKL9Hz6abWxiGRyv//+O8OHJzYz1K2Lbd6cgSVLUsXZWI5TUS4iIi5t8rhx5P/wQyhalCMPPKA2FpFM7Ny5c3Tq1In4+HjIm5ecQ4ZQzdub10qVcjqa41SUi4iISytUqBDTnn0WvvwSWrVixpYteqiQSCbVt29fQkNDAfB4/nlsnjx8Wrkynm4qSfUTEBERl/fQQw/RLiwMQkPhhRfo2a+f2lhEMpk5c+bw2WefJSw0bEjsnXfyaunSBOXJ42wwF6GiXEREMoUPJkzAd/Jk8PXlyCOPqI1FJBPZv38/TzzxRMJCwYLkHDyY2/LkYVCJEs4GcyEqykVEJFMoVKgQHw8aBDNmQJMmzNi/nwXGQKlSMGuW0/FE5Ari4uLo0qULZ8+eBSDXa6+Rw9ubzypXJofaVpLoJyEiIpnGQw89xMN79sDWrfDss/QoWJDT+/ZB794qzEVc1JgxY/j1118BMA89RFTVqrxdtiwVvL0dTuZaVJSLiEimMnH/fgq89RZ4enJ0wAD6ADYyEoYOdTqaiFxi9erVvPzyywkLJUrg/tRT3FegAI8XLepsMBekolxERDKVQocOMfXAAfjwQ6hblzkPPJDw+Ob9+52OJiLJRERE0KlTJy5cuADu7uR+803yeXryccWKGGOcjudyVJSLiEjmUrIkDwE9vvsO/voLnnySV0qU4LMCBZxOJiLJ9OvXjx07dgDg0aMHEcWLM6ViRW7x9HQ4mWtSUS4iIpnLiBHg7c0ka2kwejScPw9Dh/JYeDhLly51Op2IAN9++y0fffRRwkLlysS1b0/XwoVp7efnbDAXpqJcREQyl06dYMoUPAICmH/yJCUnTICKFbnQuTOtW7dm8+bNTicUydYOHz5Mz549Exa8vPB5801KeHnxTvnyzgZzcSrKRUQk8+nUCUJDyWctyz/9FO+QEOjYkbMlS9K8eXP++ecfpxOKZEvx8fF069aNkydPApB7wAAi8udnRuXK5MuRw+F0rk1FuYiIZGolSpRg8YMPYo4cgSFD2H/yJC1btiQ8PNzpaCLZzrvvvstPP/2UsFC/PhFNmjCgRAka5s/vaK7MQEW5iIhkevVq1uTtAgXAzw+eeYY1a9bQvn37hFkfRCRDbNiwgUGDBiUsFCxIrpdfppaPD8NLl3Y2WCaholxERLKEfs2a0fLMGbjnHmjcmAULFvDMM89grXU6mkiWFxUVRceOHYmJiQFjyPPmm+DlxezAQHLqqZ3XRD8lERHJMv730EMUPXMG+vUDPz8mTZrE22+/7XQskSxv8ODBSTdZ5+jQgbAKFZhQrhwV9dTOa6aiXEREsgwPNzeW3X03Oby8YMgQcHPjhRde4Msvv3Q6mkiW9cMPP/Duu+8mLJQti+3Zk4cKFaLXLbc4GyyTUVEuIiJZSoXcuZlUqRIEBUHHjgB06dKFFStWOBtMJAs6duwY3bp1S1jw9MRn1CgKe3rykZ7aed1UlIuISJbTo3hx2uTPD926QWAg58+f58EHH2Tnzp1ORxPJMqy19OzZk6NHjwKQq39/wgsWZEalShT08HA4XeajolxERLIcYwwfV61K8Zw5cXv1Vcidm5MnT3Lfffdx/Phxp+OJZAkffvgh8+fPT1i44w6i7rmHASVK0LRAAWeDZVIqykVEJEvKlyMHX1avjvH3x33AAAB2797Ngw8+SFRUlMPpRDK3bdu20b9//4SFQoXweuUVamr6w5uiolxERLKsuvny8Xrp0sQ1agTNmgGwcuVKunTpQnx8vLPhRDKpmJgYOnbsmPCPWzc3vN98E/dcufg8MBBPTX94w/STExGRLG1QyZI0yp+fnAMGQPHiAHz99dcMHDjQ4WQimdPLL7/M2rVrAXDv1o3I8uX5oEIFTX94k1SUi4hIluZuDDMrV8bH0xP/996DxBvQ3n77bSZOnOhwOpHMZdmyZYwZMyZhoUYN4jt3pkvhwjxapIizwbIAFeUiIpLlFfP0ZFqlShzLn5+yo0YlrX/mmWf+vVFNRK7q1KlTdOnSJeEpuXnz4vn665Tz9uaD8uWdjpYlqCgXEZFs4cFChXi6WDF216xJ+e7dAYiPj6d9+/asXr3a4XQirs1ayxNPPMGhQ4cA8Hj5ZWy+fMwNDMQnRw6H02UNKspFRCTbGFO2LLV9fDjWrRslbr0VgMjISFq2bEloaKiz4URc2IwZM/59Mm6bNsQGBzO2bFlq5snjbLAsxKWKcmNMAWPMT8aYnYlffa+wX5wxZl3ia16y9aWNMX8aY3YZY+YaY3JmXHoREXF1nm5uzK1SBWsMBcaPx9fPD4CjR4/SvHlzTp8+7XBCEdeze/dunn766YSFChVwe/JJHixYkL7FijkbLItxqaIcGAwssdaWB5YkLqcmyloblPh6INn6UcB4a2054DTQI33jiohIZlM2Vy6mVqzI+thY7v3yS3LmTLh+s3XrVlq3bs358+cdTijiOmJjY+nUqRPh4eGQOzceb7xB0Vy5mFapEsYYp+NlKa5WlD8IzEj8fgbQ6loPNAm/Mu4CvrqR40VEJPto5+9Pn6JFmWMtz86Zk7Q+JCSEnj17JtzIJiIMHz6cP//8EwAzcCDx/v7MqVKFAomzGEnacbWivLC19p/E748Aha+wn5cxZrUx5g9jTKvEdQWBM9baC4nLBwH9v4qIiKTq7bJlqenjw8d+fgx6++2k9TNnzuSVV15xMJmIa/j9998ZPnx4wkKbNtg772RkmTLUy5fP2WBZlMnoqwHGmJ+B1CazHArMsNbmT7bvaWvtZX3lxphi1tpDxpgywFKgCXAW+COxdQVjTAlgkbW26hVy9AZ6AxQuXLj2nGRXSjJKeHg4Pj4+GX5e+ZfGwHkaA+dl5zE4RMJfBKWspdSECSycl3SbEi+88ALNmzfPkBzZeQxchcYgpYiICHr27MmRI0egcmV47z3ucHNjuDGkV9NKdhiDxo0b/22tDU5tW4bPYWOtbXqlbcaYo8aYW6y1/xhjbgGOXeE9DiV+3WOMCQFqAl8D+Y0xORKvlhcn4c/bK+WYAkwBCA4Oto0aNbrBT3TjQkJCcOK88i+NgfM0Bs7L7mOQ49gx2m/ZQrOxY7GxsSxatAiAcePG0bRpU+655550z5Ddx8AVaAxSevTRRxMK8rx5McOGUdzTkwV16pA/HdtWsvsYuFr7yjyga+L3XYHvLt3BGONrjPFM/L4QUA/YYhMu+S8D2l7teBERkeQeSewvH3foEJ0mTyYoKAiAuLg42rZty/r1650NKJLB5syZw2effQbGwIsv4l6oEN/UqJGuBbm4XlE+ErjbGLMTaJq4jDEm2BgzNXGfysBqY8x6EorwkdbaLYnbBgH9jTG7SOgx/zhD04uISKY0rlw5bsuThyf37eOdb76hePHiAISFhdGiRQsOHjzocEKRjLF//36eeOKJhIWOHaFuXd6rUIHamo883blUUW6tPWmtbWKtLW+tbWqtPZW4frW1tmfi979ba6tZa2skfv042fF7rLW3WWvLWWvbWWs1r5WIiPwnTzc3vqpShZzG0OfYMb5asIC8efMCcOjQIVq2bMm5c+ccTimSvuLi4ujSpQtnz56FoCB47DHa+fryeNGiTkfLFlyqKBcREXFKCS8vPg8MZEtkJO/kyMFXX39NjsTHh69fv56HH36Y2NhYh1OKpJ8xY8bw66+/QqFC8PLLlHJzY1qVKpqPPIOoKBcREUl0d4ECvFG6NJ8fO8a2SpWYMmVK0rYff/yRPn36aA5zyZJWr17Nyy+/DB4e8NpreOTLx4Jbb8UnR4bPCZJtqSgXERFJ5sWSJbm/YEH6795NxdatEwqVRFOnTmXkyJEOphNJexEREXTq1IkLFy5A375QpQqfValCYO7cTkfLVlSUi4iIJONmDJ9WqkRJT0/abd7MU0OH0qVLl6TtQ4YMYfbs2Q4mFElb/fv3Z8eOHdC8OTzwAI/nzcsjRVJ7pIykJxXlIiIil8jv4cHXVapw6sIF2m/dyqQpU2jcuHHS9u7duyf03opkct9++21Cm1alSvDss1SJimJizZpOx8qWVJSLiIikIihPHqZUqEDImTO8eOAA//vf/wgMDAQgJiaGVq1asW3bNodTity4w4cP07NnT/D1hddfJ3d0NCFNmuCuGzsdoaJcRETkCroUKUL/4sV579Ah/hcVxcKFCymS+N/6p0+f5r777uPo0aMOpxS5fvHx8XTv3p2TZ87Aq69i8uZlYXAwhXLmdDpatqWiXERE5CpGlSnD3b6+PLljB4fz5+f7778nd+INcKGhodx///1EREQ4nFLk+rz77rssXrwYnngCatTgRU9P7tR85I5SUS4iInIVOdzcmBMYSHFPT1pv3kyRqlWZM2cObm4Jf4WuWrWKjh07EhcX53BSkWuzYcMGBg0aBPfcA23bUjs0lBGNGjkdK9tTUS4iIvIfCnh4MK9aNcLj4nho0yaa3ncf7733XtL2efPm0a9fP81hLi4vKiqKTp06EVO+PDz/PHl27uSX9u2djiWoKBcREbkmVXLn5rNKlVgVFsYTO3bw5JNPMmDAgKTt7733HhMmTHAuoMg1GDx4MJuOH4c33sAcP85P9euT28vL6ViCinIREZFr1srPj2GlSjHj6FEmHDzIqFGjaNeuXdL2559/nq+//trBhCJX9sMPP/DulCkwYgR4ePBqTAx1Kld2OpYkUlEuIiJyHV4KCKB1oUIM2L2bH06f5tNPP+WOO+4AwFpL586dWblypcMpRVI6fvw4Xbt3h6FDoVQp6v74I6906+Z0LElGRbmIiMh1cDOGTytXJsjHh0e2bGH7hQt89913lC9fHoDo6GgeeOABdu3a5XBSEWDWLGxAAD38/TnWsiXUr0+ezz5j3iuvYDQfuUtRUS4iInKdcru7M79aNfK5u9Ny40Zi8+Rh4cKFFCpUCIATJ07QvHlzTpw44XBSydZmzYLevflw/37mN20KnTrB/Pl8Ubgwfn5+TqeTS6goFxERuQFFPT35vlo1TsfGcv/GjdxSujTz5s3DK/GmuZ07d9KqVSuio6MdTirZVfyQIYyOjOSpwEB44QVYu5a+77xDs7lznY4mqVBRLiIicoOC8uRhbpUqrA0Pp/PWrdSpW5eZM2cmtQWsWLGCrl27Eh8f73BSyW5OnDjB/fv3M6hYMeLffBOOHaPSa68xJi4O9u93Op6kQkW5iIjITWhRsCDjy5Xj2xMnGLxnD23atGHs2LFJ27/44gtefPFFBxNKdrNixQpq1qzJwnz5YNQosJagQYP46dw5vABKlnQ6oqRCRbmIiMhNerpYMZ4qWpQxBw7w0eHD9OvXj6eeeipp++jRo5k8ebKDCSU7iI+PZ/To0TRs2JCDx4/Dm29CoUJ0GjKEvw4fpjiAt3fClIjiclSUi4iI3CRjDBPKleO+AgV4cscOFp06xTvvvMP999+ftM9TTz3FggULHEwpWdmJEye4//77GTRoEHHWJkx9WKkSQzZuZGZkJB7GQEAATJmScMOnuBwV5SIiImkgh5sbcwMDCfLxod3mzayOiODzzz8nODgYSLiK+cgjj/D33387nFSymhUrVhAUFMTChQsTVjz1FDRowGt+fowYMABCQyE+PuGrCnKXpaJcREQkjeTJkYOF1atzS86ctNiwgYPGMH/+fEqVKgVAREQELVu2ZN++fc4GlSwhPj6eUaNG0bBhQw4dOpSwsl07aN2a54oW5dVq1ZwNKNdFRbmIiEga8s+Zkx9r1MDdGO5dv554X18WLlxI/vz5AThy5AgtWrTgzJkzjuaUzO3EiRO0bNmSwYMHExcXB0Duli2hTx/a+vnxduLDrCTzUFEuIiKSxsrmysWi6tU5eeECzTZs4JZy5fj222/x8PAAYPPmzbRp04aYmBiHk0pmdLFdZdGiRUnrKj/6KDHPP0/9fPn4rFIl3PS0zkxHRbmIiEg6qJUnD99UqcK2yEge3LSJOvXr88knnyRtX7p0Kb169cJa62BKyUxSbVcBOr35Jvt69KCKjw/zq1bFy93dwZRyo3I4HUBERCSralqgAJ9WqkSHrVvptHUrX3TsyN69e3n55ZcB+PTTTyldujSNGjVyNqi4vBMnTvDoo4+muDpeoEABXps5k5d9fCiWMyc/VK9O/sT/jZHMR1fKRURE0lH7woWZUK4c/ztxgp7bt/PikCH06NEjafuwYcP44YcfHEwori61dpXbb7+db/76ixF585InRw5+qlGDwjlzOphSbpaKchERkXT2bPHiDCtViulHjvD0rl188MEH3HPPPUnbx44dy88//+xgQnFFyR8GlLxdZeDAgcxevJhHjx0jDvipenUCvLycCyppwqWKcmNMAWPMT8aYnYlffVPZp7ExZl2yV7QxplXitunGmL3JtgVl9GcQERFJzcsBAQwqUYJJhw8zeP9+vvjiC6pXrw5AXFwcbdq0YePGjQ6nFFeR4mFAibOrFChQgO+//54X3niD5lu2cOrCBX6oXp1KuXM7nFbSgksV5cBgYIm1tjywJHE5BWvtMmttkLU2CLgLiAQWJ9vlhYvbrbXrMiCziIjIfzLG8FaZMjxTrBjjDx5kzMmTLFiwgGLFigFw7tw5WrRoweHDhx1OKk677GFAwB133MG6deu44557uHfDBvZGRzO/WjVq58njYFJJS65WlD8IzEj8fgbQ6j/2bwssstZGpmcoERGRtGCMYUK5cvS65RZG7N/PjLg4FixYgLe3NwAHDhygRYsWhIWFOZxUnHCl2VUGDhxISEgIPkWK0HT9ejZFRPC/KlVomDj3vWQNrlaUF7bW/pP4/RGg8H/s3x74/JJ1I4wxG4wx440xnmmeUERE5CYYY5hUoQKdCxfmpb17WVKgAK+++iruidPYrVu3jvbt23PhwgWHk0pGSu1hQBfbVUaNGkU4JBXk31atyn0FCzobWNKcyej5UY0xPwNFUtk0FJhhrc2fbN/T1trL+soTt90CbACKWmtjk607AuQEpgC7rbWvX+H43kBvgMKFC9eeM2fODX+mGxUeHo6Pj0+Gn1f+pTFwnsbAeRoDZ8QBbwC/AL3Onyffzz8zduzYpO33338//fr1w+ghMBnCyd8HGzdu5PXXX+fEiRNJ66pUqcIrr7yCv78/YcAAYC/wOlDXkZTpLzv8WdS4ceO/rbXBqW601rrMC9gO3JL4/S3A9qvs+yww5SrbGwHfX8t5a9eubZ2wbNkyR84r/9IYOE9j4DyNgXPOx8XZhzZutCxbZt8KDbVDhgyxQNJr5MiRTkfMNpz4fRAXF2ffeust6+7unmLcBw4caGNiYqy11p6KibG1V62yOUNC7IITJzI8Y0bKDn8WAavtFepRV2tfmQd0Tfy+K/DdVfbtwCWtK4lXyjEJlxVaAZvSPqKIiEjayOnmxtzAQO4CXty7lxw9e9KhY8ek7YMHD8aJ/8mV9HfixAlatGjBiy++mKJdZcGCBYwaNQoPDw9Ox8Zyz4YNbIyI4H9Vq9JcLStZmqsV5SOBu40xO4GmicsYY4KNMVMv7mSMKQWUIOF//ZKbZYzZCGwECgHDMyK0iIjIjfJwc2MI0K1IEV7ft4+ir77KnQ0bJm3v2rUrv/32m3MBJc0tX76coKCgFA+Nuji7SvPmzQE4HhPD3evXsyE8nK+rVKGFCvIsz6WKcmvtSWttE2tteWttU2vtqcT1q621PZPtF2qtLWatjb/k+LustdWstVWttZ2tteEZ/RlERESulzvwccWKPFm0KG8fPkyl99+nYuXKAMTExNCqVSu2b9/ubEi5afHx8YwcOZJGjRqlmF1l0KBBhISEUKJECQAOREfTYO1aNkdG8k3VqrQsVMipyJKBXKooFxERya7cjGFi+fL0K16cKSdOUPPTT/ErnDAJ2alTp2jevDnHjh1zOKXcqKu1q4wcORIPDw8AtkdGUm/tWv6JiWFx9epqWclGVJSLiIi4CGMMb5cty9CSJZkTHk7Ql1+SK29eAPbs2cMDDzxAZKQezZHZXEu7CsDfYWHUX7uW8/HxhAQF0UDzkGcrKspFRERciDGG4WXKMKpMGX6Ki6Ps119jEp/a+Oeff9K5c+ekK63i2q7UrnLxYUAX21UAQk6fpvG6deR2c2N5zZrU1JM6sx0V5SIiIi5oYMmSfFapEts9PCjyxReQ2Ff8zTff8MILLzicTv7L8ePHU21XufgwoIvtKgDfnThBsw0bKOHpyYpatSif+IRXyV5UlIuIiLiozkWKsLBaNcJz58bn00+hVCkAxo8fz3vvvedsOLmi3377jZo1a6ZoV7n99ttZt24dLVq0SLHvewcP0nrTJmr4+PBrzZoU89TDyLMrFeUiIiIurGmBAvwaFESefPnwmDwZatQA4Nlnn+W77672OA/JaPHx8bz11ls0btz4snaVX375JUW7yoX4ePru2MEzu3bRsmBBltSoQcFkV88l+1FRLiIi4uKC8uRhZa1alM2XDzN2LNx1F9ZaOnTowF9//eV0POHfdpUhQ4b8Z7vKuQsXuH/TJiYePszzxYvzv6pV8cmRw6no4iJUlIuIiGQCAV5erKhdmzp588LLL0OvXkSdP8/999/P3r17nY6XraXWrnJxdpVL21VCo6K4Y80afj59mikVKjC2XDncjcnoyOKCVJSLiIhkEgU8PPglOJhHvL2hY0d4802ORUZy3333cerUKafjZTtXa1e5dHYVgD/OnqXOmjUcPH+eH6pXp1fRohkdWVyYinIREZFMJKebG3Nuu40Bbm5QqxZMmsT28+d5qGhRzhuTcDPorFlOx8zyrtSusmDBgsvaVay1fPzPPzRatw4fd3f+qFWLJr6+TkUXF6WiXEREJBMac+edvB4eDt7eMHEivwYH0w04vW8f9O6twjwd/fbbb9f0MCCAyLg4um/bRs/t22mQPz9/1qpFpdy5MzqyZAIqykVERDKplx96iCEDB8K+fTB8OHO6d6egmxu3RkYyqE8fFi9erCeApqHk7SqHDx9OWj9o0KBU21V2REZSd80aPj16lFcDAvihenUK5cyZ0bElk9CtviIiIpnY8N27Ofbss0zt1w8efRQbFMTqESNYfewYo++9Fw8PD26//XaaNGlCkyZNuO2221K0Vsi1OX78OI8++miKq+MFCxbk008/vezqOMCXx47RY/t2chrDourVubdAgYyMK5mQrpSLiIhkYiYggEmxsYwfPZoyI0ZA2bIwdSrceScAsbGx/Prrr7z66qvUr18fX19fmjdvzttvv83atWuJj493+BO4viu1q6xdu/aygvx8fDzP7dzJw1u2UCV3btYGB6sgl2uiolxERCQzGzGCHN7ePAfs/vln1vTuTflDh2DYMPIPHw5eXil2j4iIYNGiRQwYMIBatWrh7+9Pu3btmDx5Mjt27MBa68jHcEXX266yPjyc2/7+m3cOHeK54sX5JSiIEpf8/EWuRO0rIiIimVmnTglfhw6F/fup6eHB5jx5eLVkSUYC5ZYs4bFDh9j9448sWbKE0NDQFIefPHmSr776iq+++gqA4sWL06RJE+666y6aNGlCsWLFMvbzuIjraVe5EB/PqAMHGBYaSkEPD+ZXrUrLQoUyOrJkcirKRUREMrtOnf4tzgEP4E2gqa8vXbZu5VV/fwYNHcrWDz/kn/37WbJkCUuWLGHp0qUcO3YsxVsdPHiQGTNmMGPGDAAqVqyYVKA3atSIggULZuAHc8Zvv/1G+/btU1wdr1evHnPmzKF48eIp9t0aEUHXbdtYFRZGe39/3i9fnoLq2ZcboPYVERGRLOouX1823Hor7f39Gb5vH0GrV3PA15eePXvy+eefc+TIETZu3MiECRO4//77yZs372XvsX37diZNmkTbtm3x8/OjVq1aDBgwgEWLFhEeHu7Ap0o/V2pXGTx4MMuWLUtRkMdby7gDB6i5ejV7oqL4IjCQzwMDVZDLDdOVchERkSysoIcHn1auTJfChXl8xw4arltHr1tuYXSZMuT38KBq1apUrVqVZ599lgsXLvD3338nXUlfsWIF58+fT3ovay1r165l7dq1vP322+TIkYM6deokzexSp04dPD09Hfy0N+7MmTM0b96cH3/8MWldwYIF+eyzz7jvvvtS7PvnuXP03bmT1WFhPFCwIFMqVqSwpjqUm6SiXEREJBu4u0ABNt16K6+FhjLuwAHmnzzJu+XK0dbPD2MMQFKRXadOHYYMGUJ0dDS///57UqvLqlWrkp5eCXDhwgVWrFjBihUreP3118mVKxcNGjRI6kmvWbMm7u7uTn3ka/bbb7/Rq1cvTpw4kbQutXaVozExvLhnD58cOULRnDmZVbkyHfz9k35+IjdDRbmIiEg24e3uzuiyZeng70/P7dt5eMsWGuTLx5iyZamTSuuKl5cXd911F3fddRcAZ8+e5ddff2Xp0qUsWbKEjRs3ptg/KiqKxYsXs3jxYgB8fX1p1KhR0pX0ihUrulQBGx8fz6hRo3jppZdSTA05ePBg3njjDXLkSCiTYuPjmXjoEK+GhhIVH8+gEiUYGhBAnhwqoyTt6FeTiIhINlMzTx7+rFWLaUeO8GpoKHXXrKGtnx9vli5NeW/vKx6XL18+7r//fu6//34Ajh07xrJly5KupO/evTvF/qdPn+abb77hm2++AaBo0aJJRX6TJk0oWbJk+n3I/3D8+HG6dOly1XYVay0/njrFgN272RwZSbMCBZhQrhwVr/IzErlRKspFRESyoRxubvQuWpSO/v6MO3iQMQcO8O2JEzxRtCgvBwTgfw090v7+/jzyyCM88sgjAOzbty+pQF+yZAlHjhxJsf/hw4eZOXMmM2fOBKBcuXJJBXrjxo3x8/NL+w+ail9//ZUOHTqkuJmzatWqLFq0iOLFi2OtZfHp07wWGsof585R2suL76pW5f6CBV3qSr9kLSrKRUREsjGfHDl4pVQpHi9alNdDQ5l06BDTjxzhiaJFebZYMYpfx8NvAgICeOyxx3jsscew1rJ161aWLl3K0qVLWbZsGWfOnEmx/65du9i1axdTpkwBoHr16kmtLnfeeSd58uRJy4961XaVpk2bUqxYMX48dSqpGA/w9GRKhQp0LVKEnG6asE7Sl4pyERERoXDOnEysUIFnihdnWGgo4w8cYMLBg3Tw9+f5EiWo4eNzXe9njCEwMJDAwED69u1LXFwca9euTbqK/ttvvxEVFZXimA0bNrBhwwbGjx+Pu7s7t912W1KRXrduXbxu4umYx48fp3Pnzkn97vBvu8o9zZox6pdfeGntWv44d46SKsbFASrKRUREJElFb29mBwbyZunSvHPoEB8dPsxnR49yt68vA0qU4G5f3xtq4XB3dyc4OJjg4GAGDhzI+fPn+eOPP5KK9D///JMLFy4k7R8XF8fKlStZuXIlw4cPx8vLi/r16ye1u9SuXfuaZ3ZJrV2lXr16vDNzJouAx//4gwNAyfPn+bBCBbqpGBcHqCgXERGRy5TKlYvx5crxSkAAHx4+zLuHDnHvhg2U9vKic+HCdC5cmAo3ccOjp6cnDRs2pGHDhgwbNoywsDCWL1+eNEf6unXrUuwfHR3Nzz//zM8//wwk3HTasGHDpCvpgYGBl/1jIT4+npEjR/Lyyy+naFd5ZNQoYu+7j7r79nHBWpr6+tLz/HlerFMHDxXj4hAV5SIiInJFvh4eDA4IoF+JEnxx7BifHT3KiH37eGPfPm7Lk4fOhQvziL//Nd0YejV58uThvvvuS5r55MSJE4SEhCTdOLpjx44U+589e5Z58+Yxb948AAoXLvzvzC5hYfiMG0fngwdZDODmBlWr4nX33eRv2ZK5bm4UOHuWZ4sV4/GiRSnv7U1ISIgKcnGUinIRERH5T55ubnQpUoQuRYpw+Px5Pj92jJlHj/LMrl3027WL+vny0dTXl6a+vgTnyUOOmyxwCxUqRNu2bWnbti0ABw4cSLppdMmSJRw6dCjF/kePHuXzzz/n888/B8DDw4PYunWhfn244w7w9SUeqFmgAB38/Wnn54dXJniwkWQfLlWUG2PaAa8BlYHbrLWrr7BfM+AdwB2Yaq0dmbi+NDAHKAj8DXSx1sZkQHQREZFso6inJ8+XKMHzJUqwKTyc2ceO8cOpU7wcGsrLoaHkc3enUf78NPX1pV6+fFTy9ibXTRbAJUqUoGvXrnTt2hVrLTt27Egq0JctW8YpNzcIDEx6xVaoAJ6eEBFB5T/+4KVt22j5+efk1QN/xEW52q/MTUBr4MMr7WCMcQcmAncDB4FVxph51totwChgvLV2jjFmMtADmJT+sUVERLKnqj4+vOnjw5tlynA8JoZlZ87w8+nT/Hz6NN+dPAmAG1A2Vy6q5M5N1dy5qeLtTblcuSjo4UFBDw/yuLtf082jZ2Jj2Xf+PKHR0ezLnZt9d9/Nhfr18erfH2ISrsG5xcTAjh3Ez5tHnlWrmLluHQ/ExoIxoIJcXJhL/eq01m4F/us35m3ALmvtnsR95wAPGmO2AncBHRP3m0HCVXcV5SIiIhnAL2dOHvb352F/fwD2REXxd1gYmyIi2BwRwebISOafOEHcJcflMIYCOXJQ0MMDH3d3Yq0lJj6emGRfw+PiCI9LeaSXmxulvLxonD8/dfLmpW7evNSoWRP27GErUBrIe3FnB58eKnItjLXW6QyXMcaEAANSa18xxrQFmllreyYudwHqkFCA/2GtLZe4vgSwyFpb9Qrn6A30BihcuHDtOXPmpMMnubrw8HB8rnPeV0lbGgPnaQycpzFwXnYagxhgP3AUOAeEAWeTfR9FwhVDj2RfPQBPwA8onOyVH7j0Mp7/zz9TcexY3M+fT1oX5+nJ9gEDONa06RVzZacxcFXZYQwaN278t7U2OLVtGX6l3BjzM1AklU1DrbXfZVQOa+0UYApAcHCwbdSoUUadOklISAhOnFf+pTFwnsbAeRoD52kM0lCjRlC5MgwdCvv3Q8mSuI8YQWCnTgRe5TCNgfOy+xhkeFFurb3yP1OvzSGgRLLl4onrTgL5jTE5rLUXkq0XERGR7KRTp4SXSCaSGSfkXAWUN8aUNsbkBNoD82xCH84yoG3ifl2BDLvyLiIiIiJyo1yqKDfGPGSMOQjcDiwwxvyYuL6oMWYhQOJV8L7Aj8BW4Atr7ebEtxgE9DfG7CJhWsSPM/oziIiIiIhcL1ebfeUb4JtU1h8GmidbXggsTGW/PSTMziIiIiIikmm41JVyEREREZHsSEW5iIiIiIjDVJSLiIiIiDhMRbmIiIiIiMNUlIuIiIiIOExFuYiIiIiIw1SUi4iIiIg4TEW5iIiIiIjDVJSLiIiIiDjMWGudzuA4Y8xxYJ8Dpy4EnHDgvPIvjYHzNAbO0xg4T2PgPI2B87LDGARYa/1S26Ci3EHGmNXW2mCnc2RnGgPnaQycpzFwnsbAeRoD52X3MVD7ioiIiIiIw1SUi4iIiIg4TEW5s6Y4HUA0Bi5AY+A8jYHzNAbO0xg4L1uPgXrKRUREREQcpivlIiIiIiIOU1HuEGNMM2PMdmPMLmPMYKfzZDfGmGnGmGPGmE1OZ8mujDEljDHLjDFbjDGbjTHPOp0puzHGeBlj/jLGrE8cg2FOZ8qOjDHuxpi1xpjvnc6SHRljQo0xG40x64wxq53Okx0ZY/IbY74yxmwzxmw1xtzudCYnqH3FAcYYd2DH/9u7v5e95ziO4883Qza/DrCWW9mBHHBgWhZjRPNz4QzFgdROEFGK1P4DCeVkIzKWzEqZHyvym9akxCSN2r3oVlpMSubl4P4e3EfcK11v9/19Purqur7fo1ddXV2vPtf787mA9cA0sBu4NclXrcFGpKrWAYeA55Kc151njKpqBbAiyWdVdSKwB7jJz8HkVFUBy5IcqqpjgA+Ae5N80hxtVKrqfmA1cFKSDd15xqaqvgdWJ1ns52P/b1XVs8D7STZX1bHA0iQHm2NNnCvlPS4Evk2yL8kfwDbgxuZMo5LkPeDn7hxjluSHJJ8Nr38F9gJn9KYal8w6NFweMzxcqZmgqpoCrgc2d2eROlTVycA6YAtAkj/GWMjBUt7lDGD/nOtpLCMasao6C1gFfNocZXSG0YnPgRlgVxLfg8l6DHgQ+Ks5x5gFeKuq9lTVxu4wI7QS+Al4Zhjj2lxVy7pDdbCUS2pVVScA24H7kvzSnWdskhxOcj4wBVxYVY5zTUhVbQBmkuzpzjJylyS5ALgWuGsYb9TkLAEuAJ5Ksgr4DRjlXjtLeY8DwJlzrqeGe9KoDHPM24GtSV7pzjNmw8/F7wDXNEcZk7XADcNM8zbgiqp6vjfS+CQ5MDzPADuYHTHV5EwD03N+pXuZ2ZI+OpbyHruBs6tq5bCh4Rbg1eZM0kQNmwy3AHuTPNqdZ4yq6rSqOmV4fTyzm8+/bg01IkkeSjKV5CxmvwfeTnJbc6xRqaplw0ZzhpGJqwBP5ZqgJD8C+6vqnOHWlcAoN/wv6Q4wRkn+rKq7gTeBo4Gnk3zZHGtUqupF4HLg1KqaBjYl2dKbanTWArcDXwwzzQAPJ9nZF2l0VgDPDidCHQW8lMRj+TQmy4Eds2sELAFeSPJGb6RRugfYOixU7gPuaM7TwiMRJUmSpGaOr0iSJEnNLOWSJElSM0u5JEmS1MxSLkmSJDWzlEuSJEnNLOWSJElSM0u5JEmS1MxSLkmSJDWzlEuS5qWqLquqVNV1c+6trKqZqnq8M5skLXT+o6ckad6q6m3guCRrq+pk4CPgO+DGJId700nSwmUplyTNW1VdCrwHXA08ACwHLklyqDWYJC1wlnJJ0hGpql3AxcBBYE2S6d5EkrTwOVMuSTpS3wJLgU0Wckn6b7hSLkmat6raCDwB7AV+T3JRcyRJWhQs5ZKkeamq9cBO4E7gG+Bj4Lokr7cGk6RFwFIuSfpXVXUu8CHwZJJHhnu7gJOSrGkNJ0mLgKVckvSPqup04FNgN3Bzhi+OqloHvAtsSPJaY0RJWvAs5ZIkSVIzT1+RJEmSmlnKJUmSpGaWckmSJKmZpVySJElqZimXJEmSmlnKJUmSpGaWckmSJKmZpVySJElqZimXJEmSmv0NvGro+6fsIlwAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "Ninter = 100\n", "X=np.linspace(0, 2*np.pi, Ninter)\n", "plt.figure( figsize=(12,6) )\n", "plt.plot(x,f(x),'ro',label='Data')\n", "plt.plot(X,f(X),'k-',lw=3,label='linear interpolation')\n", "plt.plot(X,np.sin(X),'c-',label='real function')\n", "\n", "#Formatting\n", "plt.plot(2.35,f(2.35),'y*',markersize=10,label='sample point')\n", "plt.title( \"Linear interpolation of $\\sin(x)$\" )\n", "plt.legend()\n", "plt.xlabel( \"$x$\",size=15 )\n", "plt.ylabel( \"$y$\",size=15 )\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QeCb12m0jz1j" }, "source": [ "Other `kind` values: 0,1,2" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 85 }, "colab_type": "code", "id": "yPis66gEmHSY", "outputId": "22a59e6e-3f22-4f5d-b8f5-446a48f459bf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.5/dist-packages/IPython/core/magics/pylab.py:160: UserWarning: pylab import has clobbered these variables: ['f']\n", "`%matplotlib` prevents importing * from pylab and numpy\n", " \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 650 }, "colab_type": "code", "id": "pvnSUdF8jz1k", "outputId": "94de36f6-0068-4af8-d8dd-eac9aed6eb1e" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_points = 10\n", "x=np.linspace(0, 2*np.pi, n_points)\n", "Ninter = 100\n", "X=np.linspace(0, 2*np.pi, Ninter)\n", "plt.figure( figsize=(12,6) )\n", "plt.plot(x,np.sin(x),'ro',label='Data')\n", "plt.plot(X,np.sin(X),'c-',label='real function')\n", "\n", "plt.plot(X,interpolate.interp1d( x,np.sin(x),kind=0)(X),\n", " 'g--',lw=1,label='interpolation with horizontal lines')\n", "plt.plot(X,interpolate.interp1d( x,np.sin(x),kind=1)(X),\n", " 'k-',lw=1,label='linear interpolation')\n", "plt.plot(X,interpolate.interp1d( x,np.sin(x),kind=2)(X),\n", " 'r:',lw=1,label='quadratic interpolation')\n", "#plt.plot(X,interpolate.interp1d( x,np.sin(x),kind=3)(X),\n", "# 'k:',lw=1,label='quadratic interpolation')\n", "\n", "#Formatting\n", "plt.plot(2.35,f(2.35),'y*',markersize=10,label='sample point')\n", "plt.title( \"Linear interpolation of $\\sin(x)$\" )\n", "plt.legend()\n", "plt.xlabel( \"$x$\",size=15 )\n", "plt.ylabel( \"$y$\",size=15 )\n", "\n", "#Formatting\n", "plt.title( \"Linear interpolation of $\\sin(x)$\" )\n", "plt.legend()\n", "plt.xlabel( \"$x$\",size=15 )\n", "plt.ylabel( \"$y$\",size=15 )\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "AyEnMaaqjz1m" }, "source": [ "We can see that the data poinst are just joined by straight lines:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "colab_type": "code", "id": "g7QLUR5MEZWs", "outputId": "174f8d15-3c3a-4d44-f770-3a6c646e9366" }, "outputs": [ { "data": { "text/plain": [ "(array(0.67198441), 0.7114733527908443)" ] }, "execution_count": 23, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "f(2.35),np.sin(2.35)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "Gn2sL8iZEZWu" }, "source": [ "However, the object `f` behaves like a function. For example. We can evaluate both the real and the interpolated function in $x_0=3$" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "colab_type": "code", "id": "c0Hix__AEZWu", "outputId": "b9451278-6747-46a3-e6db-f8f218265dfa" }, "outputs": [ { "data": { "text/plain": [ "0.1411200080598672" ] }, "execution_count": 24, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "np.sin(3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 35 }, "colab_type": "code", "id": "-skeqhluEZWx", "outputId": "ab1b923d-89ca-4bcd-9bab-0c41ec693a72" }, "outputs": [ { "data": { "text/plain": [ "array(0.13335233)" ] }, "execution_count": 25, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "f(3)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "fv_29O5rEZW2" }, "source": [ "**Activity** \n", " \n", "Use the previous code and explore the behaviour of the Linear Interpolation algorithm when varying the number of data used." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "CPc-9Ql1EZW3" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3SGRypgREZW5" }, "source": [ "- - -" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "3Zgj3wv8EZW6", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Example: \n", "Generate three points that do not lie upon a stright line, and try to make a manual interpolation with a polynomial of degree two." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": {}, "colab_type": "code", "id": "S6UxbvTtEZW7" }, "outputs": [], "source": [ "import pandas as pd\n", "df=pd.DataFrame({ 'X':[-2.4,3,21.3],\n", " 'Y':[-10.,8.,3.]\n", " } \n", " )" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 141 }, "colab_type": "code", "id": "9souHyUYEZW9", "outputId": "05e01698-bf8f-4600-8590-b2cbbb7e26ab" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
0-2.4-10.0
13.08.0
221.33.0
\n", "
" ], "text/plain": [ " X Y\n", "0 -2.4 -10.0\n", "1 3.0 8.0\n", "2 21.3 3.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 265 }, "colab_type": "code", "id": "efE3I3CCEZW_", "outputId": "879d3a7d-bcf5-44ff-f5fd-75fc4cca1198" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAASBElEQVR4nO3df4xnd13v8eerLTXZTr0olSm03W7vpTEpRqqdFM0lOiPILRvvrRDUko3ij2TQgNGIUXQTLvGmid4roKZc6nhpxJuRwaiVDaxAQb4W/uDHLCnSH1bXsi1danuLpTCsV7L0ff/4nr2dTr+z292d8z2z+3k+ks33nM/5zPm+3yffnVe+55zvfFNVSJLadc7QBUiShmUQSFLjDAJJapxBIEmNMwgkqXHnDV3Aqbjoootq165dQ5dx0r7+9a9zwQUXDF3GYOzf/lvuH4Y/BgcOHHi0qr5j4/gZGQS7du1idXV16DJO2mg0Yn5+fugyBmP/9t9y/zD8MUhy/6RxTw1JUuMMAklqnEEgSY0zCCSpcQaBJDXOIGjZ8jLs2gXnnDN+XF4euiJJAzgjbx/VFlhehsVFOHJkvH7//eN1gD17hqtL0tT5jqBVe/c+GQLHHDkyHpfUFIOgVQ88cHLjks5aBkGrdu48uXFJZy2DoFU33gg7djx1bMeO8bikpvQaBEm+M8kd6/59Nckvb5gzn+TxdXPe3GdN6uzZA0tLcPnlkIwfl5a8UCw1qNe7hqrqXuBqgCTnAoeBWydM/XhV/UiftWiCPXv8xS9pqqeGXgr8U1VN/Ot3kqRhpKqm80TJLcBnq+qmDePzwF8ADwJfAn61qu6a8POLwCLA7OzsNSsrK32XvOXW1taYmZkZuozB2L/9t9w/DH8MFhYWDlTV3MbxqQRBkvMZ/5J/YVU9vGHbtwJPVNVakt3A71fVlcfb39zcXPl9BGce+7f/lvuH4Y9BkolBMK1TQ69g/G7g4Y0bquqrVbXWLe8HnpXkoinVJUnNm1YQvAZ4z6QNSS5Okm752q6mL0+pLklqXu9/ayjJBcAPA69bN/bzAFV1M/Bq4BeSHAX+FbihpnXhQpLUfxBU1deB52wYu3nd8k3ATRt/TpI0HX6yWJIaZxBIUuMMAklqnEEgSY0zCCSpcQaBJDXOIJCkxhkEktQ4g0CSGmcQSFLjDAJJapxBIEmNMwgkqXEGgSQ1ziCQpMYZBJLUOINAkhpnEEhS43oPgiSHknw+yR1JVidsT5I/SHIwyd8l+d6+a5IkPan37yzuLFTVo5tsewVwZffvxcA7u0dJ0hRsh1ND1wN/UmOfBJ6d5HlDFyVJrUhV9fsEyReAx4AC/rCqljZsfz/w21X1iW79o8CvV9XqhnmLwCLA7OzsNSsrK73W3Ye1tTVmZmaGLmMw9m//LfcPwx+DhYWFA1U1t3F8GqeGXlJVh5M8F7gtyd9X1e0nu5MuQJYA5ubman5+fovL7N9oNOJMrHur2L/9t9w/bN9j0Pupoao63D0+AtwKXLthymHgsnXrl3ZjkqQp6DUIklyQ5MJjy8DLgTs3TNsH/FR399D3AY9X1UN91iVJelLfp4ZmgVuTHHuuP62qDyb5eYCquhnYD+wGDgJHgJ/puSZJ0jq9BkFV3Qe8aML4zeuWC3h9n3VIkja3HW4flSQNyCCQpMYZBJLUOINAkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTGGQSS1DiDQJIaZxBIUuMMAkna7paXYdcuOOec8ePy8pbufhpfVSlJOlXLy7C4CEeOjNfvv3+8DrBnz5Y8he8IJGk727v3yRA45siR8fgWMQgkaTt74IGTGz8FBoEkbWc7d57c+CnoLQiSXJbkY0nuTnJXkl+aMGc+yeNJ7uj+vbmveiTpjHTjjbBjx1PHduwYj2+RPi8WHwXeWFWfTXIhcCDJbVV194Z5H6+qH+mxDkk6cx27ILx37/h00M6d4xDYogvF0GMQVNVDwEPd8teS3ANcAmwMAknS8ezZs6W/+DeayjWCJLuA7wE+NWHz9yf5XJK/TvLCadQjSXpSqqrfJ0hmgL8Fbqyqv9yw7VuBJ6pqLclu4Per6spN9rMILALMzs5es7Ky0mvdfVhbW2NmZmboMgZj//bfcv8w/DFYWFg4UFVzG8d7DYIkzwLeD3yoqt72DOYfAuaq6tHjzZubm6vV1dWtKXKKRqMR8/PzQ5cxGPu3/5b7h+GPQZKJQdDnXUMB3gXcs1kIJLm4m0eSa7t6vtxXTZKkp+vzrqH/CPwk8Pkkd3RjvwnsBKiqm4FXA7+Q5Cjwr8AN1fe5KknSU/R519AngJxgzk3ATX3VIEk6MT9ZLEmNMwgkqXEGgSQ1ziCQpMYZBJLUOINAkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTGGQSS1DiDQJIaZxBIUuMMAklqnEEgSY0zCCSpcQaBJDWu9yBIcl2Se5McTPKmCdu/Jcl7u+2fSrKr75okSU/qNQiSnAu8A3gFcBXwmiRXbZj2c8BjVfUC4O3A7/RZkyTpqfp+R3AtcLCq7quqbwArwPUb5lwPvLtb/nPgpUnSc12SpM55Pe//EuCL69YfBF682ZyqOprkceA5wKPrJyVZBBYBZmdnGY1GPZXcn7W1tTOy7q1i//bfcv+wfY9B30GwZapqCVgCmJubq/n5+WELOgWj0Ygzse6tYv/233L/sH2PQd+nhg4Dl61bv7QbmzgnyXnAvwO+3HNdkqRO30HwGeDKJFckOR+4Adi3Yc4+4LXd8quBv6mq6rkuSVKn11ND3Tn/NwAfAs4Fbqmqu5L8FrBaVfuAdwH/O8lB4F8Yh4UkaUp6v0ZQVfuB/RvG3rxu+f8CP9Z3HZKkyfxksSQ1ziCQpMYZBJLUOINAkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTGGQSS1DiDQJIaZxBIUuMMAklqnEEgSY0zCCSpcQaBJDXOIJCkxvXyVZVJ/gfwn4FvAP8E/ExVfWXCvEPA14BvAkeraq6PeiRJm+vrHcFtwHdV1XcD/wD8xnHmLlTV1YaAJA2jlyCoqg9X1dFu9ZPApX08jyTp9E3jGsHPAn+9ybYCPpzkQJLFKdQiSdogVXVqP5h8BLh4wqa9VfW+bs5eYA54VU14oiSXVNXhJM9lfDrpF6vq9k2ebxFYBJidnb1mZWXllOoe0traGjMzM0OXMRj7t/+W+4fhj8HCwsKBSafhTzkITiTJTwOvA15aVUeewfy3AGtV9bsnmjs3N1erq6unXeO0jUYj5ufnhy5jMPZv/y33D8MfgyQTg6CXU0NJrgN+Dfgvm4VAkguSXHhsGXg5cGcf9UiSNtfXNYKbgAuB25LckeRmgCTPT7K/mzMLfCLJ54BPAx+oqg/2VI8kaRO9fI6gql6wyfiXgN3d8n3Ai/p4fknSM+cniyWpcQaBJDXOIJCkxhkEktQ4g0CSGmcQSFLjDAJJapxBIEmNMwgkqXEGgSQ1ziCQpMYZBJLUOINAkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTG9RYESd6S5HD35fV3JNm9ybzrktyb5GCSN/VVjyRpsl6+vH6dt1fV7262Mcm5wDuAHwYeBD6TZF9V3d1zXZKkztCnhq4FDlbVfVX1DWAFuH7gmiSpKX2/I3hDkp8CVoE3VtVjG7ZfAnxx3fqDwIsn7SjJIrAIMDs7y2g02vpqe7a2tnZG1r1V7N/+W+4ftu8xOK0gSPIR4OIJm/YC7wT+G1Dd41uBnz3V56qqJWAJYG5urubn5091V4MZjUaciXVvFfu3/5b7h+17DE4rCKrqZc9kXpI/At4/YdNh4LJ165d2Y5KkKenzrqHnrVt9JXDnhGmfAa5MckWS84EbgH191SRJero+rxH89yRXMz41dAh4HUCS5wP/q6p2V9XRJG8APgScC9xSVXf1WJMkaYPegqCqfnKT8S8Bu9et7wf291WHJOn4hr59VJI0MINAkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTGGQSS1DiDQJIaZxBIUuMMAklqnEEgSY0zCCSpcQaBJDXOIJCkxhkEktQ4g0CSGtfLV1UmeS/wnd3qs4GvVNXVE+YdAr4GfBM4WlVzfdQjSdpcL0FQVT9xbDnJW4HHjzN9oaoe7aMOSdKJ9fbl9QBJAvw48EN9Po8k6dSlqvrbefIDwNs2O+WT5AvAY0ABf1hVS8fZ1yKwCDA7O3vNyspKDxX3a21tjZmZmaHLGIz923/L/cPwx2BhYeHApN/HpxwEST4CXDxh096qel83553Awap66yb7uKSqDid5LnAb8ItVdfuJnntubq5WV1dPqe4hjUYj5ufnhy5jMPZv/y33D8MfgyQTg+CUTw1V1ctO8ITnAa8CrjnOPg53j48kuRW4FjhhEEiStk6ft4++DPj7qnpw0sYkFyS58Ngy8HLgzh7rkSRN0GcQ3AC8Z/1Akucn2d+tzgKfSPI54NPAB6rqgz3WI0maoLe7hqrqpyeMfQnY3S3fB7yor+eXJD0zfrJYkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTGGQSS1DiDQJIaZxBIUuMMAklqnEEgSY0zCCSpcQaBJDXOIJCkxhkEktQ4g0CSGmcQSFLjDAJJatxpBUGSH0tyV5Inksxt2PYbSQ4muTfJf9rk569I8qlu3nuTnH869RzX8jLs2gXnnDN+XF7u7akk6Uxyuu8I7gReBdy+fjDJVcANwAuB64D/meTcCT//O8Dbq+oFwGPAz51mPZMtL8PiItx/P1SNHxcXDQNJ4jSDoKruqap7J2y6Hlipqn+rqi8AB4Fr109IEuCHgD/vht4N/Ojp1LOpvXvhyJGnjh05Mh6XpMad19N+LwE+uW79wW5svecAX6mqo8eZ8/8lWQQWAWZnZxmNRs+4mB984AEyYbweeIC/PYn9nK61tbWTqvtsY//233L/sH2PwQmDIMlHgIsnbNpbVe/b+pImq6olYAlgbm6u5ufnn/kP79w5Ph20QXbu5KT2c5pGo9FUn2+7sX/7b7l/2L7H4IRBUFUvO4X9HgYuW7d+aTe23peBZyc5r3tXMGnO1rjxxvE1gfWnh3bsGI9LUuP6un10H3BDkm9JcgVwJfDp9ROqqoCPAa/uhl4L9PMOY88eWFqCyy+HZPy4tDQel6TGne7to69M8iDw/cAHknwIoKruAv4MuBv4IPD6qvpm9zP7kzy/28WvA7+S5CDjawbvOp16jmvPHjh0CJ54YvxoCEgScJoXi6vqVuDWTbbdCDzt3EtV7V63fB8b7iaSJE2XnyyWpMYZBJLUOINAkhpnEEhS4zK+i/PMkuT/AE//hNj2dxHw6NBFDMj+7b/l/mH4Y3B5VX3HxsEzMgjOVElWq2ruxDPPTvZv/y33D9v3GHhqSJIaZxBIUuMMgulaGrqAgdl/21rvH7bpMfAagSQ1zncEktQ4g0CSGmcQTEGS65Lcm+RgkjcNXc8QkhxK8vkkdyRZHbqeviW5JckjSe5cN/btSW5L8o/d47cNWWOfNun/LUkOd6+BO5LsPt4+zmRJLkvysSR3J7kryS9149vyNWAQ9CzJucA7gFcAVwGvSXLVsFUNZqGqrt6O91H34I+B6zaMvQn4aFVdCXy0Wz9b/TFP7x/g7d1r4Oqq2j/lmqbpKPDGqroK+D7g9d3/+235GjAI+nctcLCq7quqbwArwPUD16SeVdXtwL9sGL4eeHe3/G7gR6dZ0zRt0n8zquqhqvpst/w14B7G38m+LV8DBkH/LgG+uG79wW6sNQV8OMmBJItDFzOQ2ap6qFv+Z2B2yGIG8oYkf9edOtoWp0X6lmQX8D3Ap9imrwGDQNPykqr6XsanyF6f5AeGLmhI3Ve1tnbv9juB/wBcDTwEvHXQaqYgyQzwF8AvV9VX12/bTq8Bg6B/h4HL1q1f2o01paoOd4+PMP5Wuxa/me7hJM8D6B4fGbieqaqqh6vqm1X1BPBHnOWvgSTPYhwCy1X1l93wtnwNGAT9+wxwZZIrkpwP3ADsG7imqUpyQZILjy0DLwfuPP5PnZX2Aa/tll8LvG/AWqbu2C/Azis5i18DScL4O9jvqaq3rdu0LV8DfrJ4Crrb5H4POBe4pfs+52Yk+fc8+d3W5wF/erYfgyTvAeYZ/9nhh4H/CvwV8GfATsZ/Rv3Hq+qsvKC6Sf/zjE8LFXAIeN268+VnlSQvAT4OfB54ohv+TcbXCbbda8AgkKTGeWpIkhpnEEhS4wwCSWqcQSBJjTMIJKlxBoEkNc4gkKTG/T/6xPp/FpjQTwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df.X,df.Y,'ro')\n", "plt.grid()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import scipy as sp" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": {}, "colab_type": "code", "id": "gMncmDM0jz16" }, "outputs": [], "source": [ "f=sp.interpolate.interp1d(df.X,df.Y)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(-2.)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(0)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df.X,df.Y,'ro')\n", "plt.plot(df.X,f(df.X),'b-')\n", "plt.plot(5,f(5),'y*')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "BP0sX_6fEZXA", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Polynomial object in `numpy`\n", "In `numpy` it is possible to define polynomials friom either its coefficients o its roots with `np.poly1d`" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "yKOPE5AcEZXC" }, "source": [ "Define a two degree polynomial from its roots:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": {}, "colab_type": "code", "id": "S_V2zHPnjz19" }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "l-sKCHWojz2A" }, "source": [ "We try to make a fit by using an inverted parabola passing trough the tree points and using the roots as a guess.\n", "In fact, we can try with a polynomial of degree two with roots at 1 and 22.\n", "\n", "With $k$ we can flip the curve and reduce the maximum without change the roots" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": {}, "colab_type": "code", "id": "uV6xujqPEZXC" }, "outputs": [], "source": [ "k=-0.1\n", "P=k*np.poly1d([0,23],r=True)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "9ztBor9-EZXE", "outputId": "44ab36ca-8f74-4113-aec0-e8d6072beab0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "-0.1 x + 2.3 x - 0\n" ] } ], "source": [ "print(P)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "oGBYy5vAm6LU", "outputId": "b2e42386-2d86-4092-bcfe-c5088642f126" }, "outputs": [ { "data": { "text/plain": [ "array([23., 0.])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P.roots" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 286 }, "colab_type": "code", "id": "PUM8A4EmEZXG", "outputId": "413d70fc-0b17-497a-a84f-2b96300bc306" }, "outputs": [ { "data": { "text/plain": [ "(-15.0, 20.0)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df.X,df.Y,'ro')\n", "x=np.linspace(-8,30)\n", "plt.plot(x,P( x),'b-')\n", "plt.grid()\n", "plt.xlim(-8,30)\n", "plt.ylim(-15,20)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "tlOZC1tQEZXM" }, "source": [ "__Activity__: Scipy interpolation.\n", "\n", "Define an interplation function which passes throgh the three points by using `interp1D` of Scipy with several linear and quadratic curves between the points." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QCe6jFV_jz2M" }, "source": [ "" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "colab": {}, "colab_type": "code", "id": "uFPhevxyEZXY" }, "outputs": [], "source": [ "#np.poly1d?" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "oKqUP0SaEZXZ", "tags": [] }, "source": [ "## Lagrange Polynomial" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "P09CyJ2SEZXa" }, "source": [ "Algebraic polynomials are very special functions as they have properties like differentiability (unlike linear interpolation) and continuity that make them useful for approximations like interpolation. A Polynomial is defined as a function given by the general expression:\n", "\n", "$$P_n(x) = a_nx^n + a_{n-1}x^{n-1} + \\cdots + a_1 x + a_0$$\n", "\n", "where $n$ is the polynomial degree.\n", "\n", "Another important property of polynomials is given by the [Weierstrass Approximation Theorem](http://en.wikipedia.org/wiki/Stone%E2%80%93Weierstrass_theorem), which states given a continuous function $f$ defined on a interval $[a,b]$, for all $\\epsilon >0$, there exits a polynomial $P(x)$ such that\n", "\n", "$$|f(x) - P(x)|<\\epsilon\\ \\ \\ \\ \\ \\mbox{for all }\\ x\\ \\mbox{ in }\\ [a,b].$$\n", "\n", "This theorem guarantees the existence of such a polynomial, however it is necessary to propose a scheme to build it." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "jN_ZqgxNEZXs", "tags": [] }, "source": [ "### Derivation" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "d2qULdqzEZXt" }, "source": [ "Let's suppose a well-behaved yet unknown function $f$ and two points $(x_0,y_0)$ and $(x_1,y_1)$ for which $f(x_0) = y_0$ and $f(x_1) = y_1$. With this information we can build a first-degree polynomial that passes through both points by using the last equation in sec. [Linear Interpolation](interpolation.ipynb#Linear-Interpolation), we have\n", "\n", "$$P_1(x) = \\left[ \\frac{y_{1}-y_0}{x_{1}-x_0} \\right]x + \\left[ y_0 - \\frac{y_{1}-y_0}{x_{1}-x_0}x_0 \\right]$$\n", "\n", "We can readily rewrite this expression like:\n", "\\begin{align}\n", "P_1(x) =& \\frac{y_{1}}{x_{1}-x_0} x- \\frac{y_0}{x_{1}-x_0} x + y_0 -\\frac{y_{1}}{x_{1}-x_0}x_0 + \\frac{y_0}{x_{1}-x_0}x_0 \\nonumber\\\\\n", "=& \\left[1 - \\frac{x}{x_{1}-x_0} + \\frac{x_0}{x_{1}-x_0}\\right]y_0+\n", "\\left[\\frac{x}{x_{1}-x_0} -\\frac{x_0}{x_{1}-x_0}\\right]y_1 \\nonumber\\\\\n", " =& \\left[\\frac{x_1-x_0}{x_{1}-x_0} - \\frac{x}{x_{1}-x_0} + \\frac{x_0}{x_{1}-x_0}\\right]y_0+\n", "\\left[\\frac{x}{x_{1}-x_0} -\\frac{x_0}{x_{1}-x_0}\\right]y_1 \\nonumber\\\\\n", "=& \\left[\\frac{x_1-x}{x_{1}-x_0}\\right]y_0+\n", "\\left[\\frac{x-x_0}{x_{1}-x_0}\\right]y_1 \\,.\n", "\\end{align}\n", "In this way\n", "$$P_1(x) = L_0(x)f(x_0) + L_1(x)f(x_1)$$\n", "\n", "where we define the functions $L_0(x)$ and $L_1(x)$ as:\n", "\n", "$$L_0(x) = \\frac{x-x_1}{x_0-x_1} \\mbox{ and } L_1(x) = \\frac{x-x_0}{x_1-x_0}$$\n", "\n", "Note that\n", "\n", "$$L_0(x_0) = 1,\\ \\ \\ L_0(x_1) = 0,\\ \\ \\ L_1(x_0) = 0,\\ \\ \\ L_1(x_1) = 1$$\n", "\n", "implying:\n", "\n", "$$P_1(x_0) = f(x_0) = y_0$$\n", "\n", "$$P_1(x_1) = f(x_1) = y_1$$\n", "\n", "Although all this procedure may seem unnecessary for a polynomial of degree 1, a generalization to polynomials of larger degrees is now possible." ] }, { "cell_type": "markdown", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### General case" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "t5benGvIEZXt", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "Let's assume again a well-behaved and unknown function $f$ sampled by using a set of $n+1$ data $(x_m,y_m)$ ($0\\leq m \\leq n$).\n", "We call the set of $[x_0,x_1,\\ldots,x_n]$ as the _node_ points of the _interpolation polynomial in the Lagrange form_, $P_n(x)$, where:\n", "$$f(x)\\approx P_n(x)\\,,$$\n", "\n", "$$P_n(x) = \\sum_{i=0}^n f(x_i)L_{n,i}(x) = \\sum_{i=0}^n y_iL_{n,i}(x)$$\n", "\n", "Such that\n", "$$f(x_i)= P_n(x_i)\\,,$$\n", "\n", "We need to find the _Lagrange polynomials_, $L_{n,i}(x)$, such that \n", "$$L_{n,i}(x_i) = 1\\,,\\qquad\\text{and}\\,,\\qquad L_{n,i}(x_j) = 0\\quad\\text{for $i\\neq j$}$$ \n", "A function that satisfies this criterion is\n", "\n", "$$L_{n,i}(x) = \\prod_{\\begin{smallmatrix}m=0\\\\ m\\neq i\\end{smallmatrix}}^n \\frac{x-x_m}{x_i-x_m} =\\frac{(x-x_0)}{(x_i-x_0)}\\frac{(x-x_1)}{(x_i-x_1)}\\cdots \\frac{(x-x_{i-1})}{(x_i-x_{i-1})}\\underbrace{\\frac{}{}}_{m\\ne i}\n", "\\frac{(x-x_{i+1})}{(x_i-x_{i+1})} \\cdots \\frac{(x-x_{n-1})}{(x_i-x_{n-1})}\\frac{(x-x_n)}{(x_i-x_n)} $$\n", "Please note that in the expansion the term $(x-x_i)$ does not appears in both the numerator and the denominator as stablished in the productory condition $m\\neq i$.\n", "\n", "Moreower\n", "$$L_{n,i}(x_i) = \\prod_{\\begin{smallmatrix}m=0\\\\ m\\neq i\\end{smallmatrix}}^n \\frac{x_i-x_m}{x_i-x_m} =1$$\n", "and, for $j\\ne i$\n", "$$L_{n,i}(x_j) = \\prod_{\\begin{smallmatrix}m=0\\\\ m\\neq i\\end{smallmatrix}}^n \\frac{x_j-x_m}{x_i-x_m} =\\frac{(x_j-x_0)}{(x_i-x_0)}\\cdots \\frac{(\\boldsymbol{x_j}-\\boldsymbol{x_j})}{(x_i-x_j)}\\cdots\\frac{(x_j-x_n)}{(x_i-x_n)}=0.$$\n", "\n", "\n", "Then, the polynomial of $n$th-degree $P_n(x)$ will satisfy the definitory property for a interpolating polynomial, i.e. $P_n(x_i) = y_i$ for any $i$ and it is called the _interpolation Polynomial in the Lagrange form_.\n", "\n", "Check [this implementation in sympy](./LagrangePoly.ipynb) [[View in Colaboratory](https://colab.research.google.com/github/restrepo/ComputationalMethods/blob/master/material/LagrangePoly.ipynb)] where both the interpolating polynomial and the Lagrange polynomials are defined." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Further details at:**\n", "[Wikipedia](https://en.wikipedia.org/wiki/Lagrange_polynomial)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HAld-e8YEZXu", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Example:\n", "Obtain the Lagrange Polynomials for a Interpolation polynomial of degree 1." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "9WWq5hcOEZXu" }, "source": [ "$i=0$, $n=1$\n", "$$ L_{1,0}=\\prod_{\\begin{smallmatrix}m=0\\\\ m\\neq 0\\end{smallmatrix}}^1 \\frac{x-x_m}{x_i-x_m}=\\prod_{\\begin{smallmatrix}m=1\\end{smallmatrix}}^1 \\frac{x-x_m}{x_0-x_m}=\\frac{x-x_1}{x_0-x_1}$$\n", "$i=1$, $n=1$\n", "$$ L_{1,1}=\\prod_{\\begin{smallmatrix}m=0\\\\ m\\neq 1\\end{smallmatrix}}^1 \\frac{x-x_m}{x_i-x_m}=\\prod_{\\begin{smallmatrix}m=0\\end{smallmatrix}}^0 \\frac{x-x_m}{x_1-x_m}=\\frac{x-x_0}{x_1-x_0}$$" ] }, { "cell_type": "markdown", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "Until now we can only guarantee that $P_n(x_i)=f(x_i)$. To calculate the function from any $x$ in the interpolation interval we have the following Theorem (See [here](https://www3.nd.edu/~zxu2/acms40390F12/Lec-3.1.pdf))\n", "### Theorem\n", "Suppose $X_0,\\ldots,x_n$ are distinct numbers in the interval $[a,b]$ and $f\\in[a,b]$.Then for each $x$ in $[a,b]$, a number $\\xi(x)$ between $x_0,\\ldots,x_n$, and hence in $[a,b]$, exists with\n", "$$\n", "f(x)=P_n(x)+E_n(x)\\,,\\qquad \\text{such that } E_n(x_i)=0\\,,\n", "$$\n", "where the formula for the error bound is given by\n", "$$\n", "E_n(x) = {f^{n+1}(\\xi(x)) \\over (n+1)!} \\cdot \\prod_{i=0}^{n}\\left(x-x_{i}\\right)\\,,\n", "$$\n", "$f^{(n+1)}$ is the $n+1$ derivative of $f$\n", "\n", "For a demostration see [1d] → https://www.math.ust.hk/~mamu/courses/231/Slides/CH03_1B.pdf\n", "\n", "The specific calculation of the bounded error is to find the $\\xi$ and $x$ such that\n", "$$\n", "\\left|f(x)-P(x)\\right| \\leq \\max_{\\xi\\in[a,b]}\\left|\\frac{f^{(n+1)}(\\xi)}{(n+1) !}\\right| \\cdot \\max_{x\\in[a,b]}\\left|\\prod_{i=0}^{n}\\left(x-x_{i}\\right)\\right|\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "me-qxh8sEZXv" }, "source": [ "### Exercise-interpolation\n", "Obtain the Lagrange Polynomials for a Interpolation polynomial of degree 2." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QrN1hmlnEZXv" }, "source": [ "### Implementation in Scipy" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": {}, "colab_type": "code", "id": "IRQNq9xrEZXw" }, "outputs": [], "source": [ "from scipy import interpolate" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": {}, "colab_type": "code", "id": "SP7TER3gEZXy" }, "outputs": [], "source": [ "#interpolate.lagrange?" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 141 }, "colab_type": "code", "id": "-p_85Kiz5Xi-", "outputId": "f6fe740e-5ba0-4407-d20f-50672c7926ef" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
03.08.0
110.06.5
221.33.0
\n", "
" ], "text/plain": [ " X Y\n", "0 3.0 8.0\n", "1 10.0 6.5\n", "2 21.3 3.0" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.read_csv('https://github.com/restrepo/ComputationalMethods/raw/master/data/interpolation.csv')\n", "df" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 51 }, "colab_type": "code", "id": "YkHQHYglEZXz", "outputId": "a8272714-15a7-472b-9c11-25a259a3ac9d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "-0.005216 x - 0.1465 x + 8.486\n" ] } ], "source": [ "P=interpolate.lagrange(df.X,df.Y)\n", "print(P)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": {}, "colab_type": "code", "id": "7Tyn6kv0EZX0", "outputId": "03a84f18-fa87-43d9-d69c-b419bbfd9e3c" }, "outputs": [ { "data": { "text/plain": [ "(0.0, 12.0)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD8CAYAAABuHP8oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8/fFQqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAeB0lEQVR4nO3deXhW5Z3G8e+PAELAAlWbyo5WqaxCEIWIEEDFrZZqFQcdrM6knaIVrdW6gxbXUsEFLcqiLWPcQKhSETUColBAAUEqWAesiOIyUqlVFH7zx/M6IAQIOW9yznlzf67rXHk3kttjuD0+5znPMXdHRETSp1bcAUREpHJU4CIiKaUCFxFJKRW4iEhKqcBFRFJKBS4iklJ7LHAzm2BmG8xs+Xav3WZmfzWzZWY21cwaV2lKERHZSUWOwCcBA3Z4bRbQwd07AauAK7KcS0RE9mCPBe7uc4CPd3jtGXf/KvN0PtC8CrKJiMhu1M7C9zgPeHhXb5pZCVACUL9+/cIWLVpk4Udm39atW6lVK7mnBJQvGuWLRvmii5Jx1apVH7r7ATu94e573IDWwPJyXr8KmApYRb5PYWGhJ1VZWVncEXZL+aJRvmiUL7ooGYFFXk6nVvoI3MzOBU4G+mV+gIiIVKNKFbiZDQAuA3q7+2fZjSQiIhVRkWmEDwEvA23N7B0zOx+4C9gXmGVmS8zs3irOKSIiO9jjEbi7n1XOy+OrIIuIiOyFZJ+2FRGRXVKBi4iklApcRCSlVOAiIimlAhcRSSkVuIhISqnARURSSgUuIpJSKnARkZRSgYuIpJQKXEQkpVTgIiIppQIXEUkpFbiISEqpwEVEUkoFLiKSUipwEZGUUoGLiKSUClxEJKVU4CIiKaUCFxFJKRW4iEhKqcBFRFJKBS4iklIqcBGRlFKBi4iklApcRCSl9ljgZjbBzDaY2fLtXvu2mc0ys9WZr02qNqaIiOyoIkfgk4ABO7z2a+A5dz8EeC7zXEREqtEeC9zd5wAf7/DyqcADmccPAD/MbiwREdmTyo6BF7j7+szj94CCLOUREZEKMnff84fMWgNPunuHzPNP3L3xdu//r7uXOw5uZiVACUBBQUFhaWlpFmJn36ZNm2jYsGHcMXZJ+aJRvmiUL7ooGYuLixe7e7ed3nD3PW5Aa2D5ds/fAA7MPD4QeKMi36ewsNCTqqysLO4Iu6V80ShfNMoXXZSMwCIvp1MrO4QyHRiSeTwEmFbJ7yMiIpVUkWmEDwEvA23N7B0zOx+4GTjWzFYD/TPPRUSkGtXe0wfc/axdvNUvy1lERGQv6EpMEZGUUoGLiKSUClxEJKVU4CIiKaUCFxFJqVQUeAUuFhURqXH2OI0wCa64Ah5+GNq2/eZ26KHQvDmYxZ1QRKT6paLADz8c3n4b3ngD5s2DTZu2vdegAbRrB+3bQ4cOYWvfHpo1U7GLSG5LRYEPGhQ2CMMp774Lq1aFQl+5ElasgKefhkmTtv2ZRo2gc+dQ/l9v7dtD3brVn19EpCqkosC3ZxaOrps1g+Lib7730UehzJcvh9deg6VL4f774bPPwvt16oSj9a5d4Ygjwtapk0pdRNIpdQW+O/vtB8ccE7avbdkCf/sbvPoqLFkSvk6fDhMnhvfr1g1H6k2bHsLbb0PPnnDwwRp+EZHky6kCL09eXjjZeeihcOaZ4TV3WLMGFi2ChQvDNmtWAdMyayoecAD06BG2nj2hWzfIz4/tH0FEpFw5X+DlMYM2bcL24x+H15577kUKCvrw8svw0kthmz49vFe7dhhuOeYY6N0biorgW9+KL7+ICNTQAi9PXt62WSz/+Z/htQ8/hPnz4cUXYc4cGDUKbrkFatUKJ0V794a+fUOxq9BFpLqpwHdj//3h5JPDBuFk6Pz5ocxnz4axY+H220P5d+8eyrxfvzD0Uq9evNlFJPepwPdCfn4o6b59w/PPPw9DLc89B88/DzffDCNHQv364ah8wICwtW2rk6Iikn0q8Ajq1ftmoW/cGI7On30WZs6Eiy8OW8uWociPPx7699dwi4hkhwo8ixo1glNOCRuEmS4zZ4aLjB56CMaNC3PRe/feNjRz8MGxRhaRFEvFYlZp1bo1/PSnMHVquMjohRfCEfm6dTBsGHzve+HCossug7lzw5x1EZGKUoFXk6+PvG+5BV5/Hd58E0aPDleUjh4dxsybNg0zYGbMgC++iDuxiCSdCjwmBx8MF10Es2aF6YqlpWFpgIcfhpNOChcTDRoEjzzyzcW7RES+pjHwBPjWt8JVomeeGY68n3suDLtMmxYKvX596N69HUOHwoknhhUYRUR0BJ4w++wTSvq++2D9+jBuft55sGxZY844A77zHTjjDHjsMfjXv+JOKyJx0hF4guXlhXHz3r1h4MCXyMvrwyOPwOOPw6OPwr77wo9+BP/2b2EqY2392xSpUXQEnhJ5edCnT7j68913w1zzH/8YnngizC9v1gx+8QtYsEC3oBOpKVTgKZSXFy7ZHz8e3nsPpkyBXr3CPPOjjgpXfo4cGe5iJCK5SwWecvXqwcCBYUz8/fdDqTdtCldfHeah9+sHDz4I//xn3ElFJNtU4DmkUaNwwvOFF+Ctt2D48HA16JAhUFAQ3nvpJQ2xiOSKSAVuZheb2QozW25mD5mZ1uBLiDZt4NprwwVDc+eGOeWPPhrWMm/XLiyNu2EDMHlyOFSvVSt8nTw55uQiUlGVLnAzawb8Aujm7h2APGBQtoJJdpjB0UeHe4OuXx+GWJo0gUsvheZNt3D6kHxmrm3LVgfWroWSEpW4SEpEHUKpDdQ3s9pAPvBu9EhSVRo23DaMsmIFXJg/gdlbjmYAM/keb3ILl/HBZ/lw1VVxRxWRCjCPMCBqZhcBI4F/Ac+4++ByPlMClAAUFBQUlpaWVvrnVaVNmzbRsGHDuGPsUlXk6923L5u9DlMZyL38jNn0oS5fcBqPc9SYw+jYcWOF1zGvifsvm5QvmqTng2gZi4uLF7t7t53ecPdKbUAT4HngAKAO8ARw9u7+TGFhoSdVWVlZ3BF2q0rytWrlHs5puoOv4DC/kDHeyDY6uLdv7z52rPunn8aUL4uULxrliy5KRmCRl9OpUYZQ+gP/4+4fuPuXwBSgZ4TvJ9Vt5Mhwm6GMdqzkjvwrWHffDMaPh7p14ec/h+bN4ZJL4G9/izGriOwkSoG/DRxlZvlmZkA/YGV2Ykm1GDw4XP3TqlU429mqFYwbR4PzB3HeebB4McybByecAHfeCYccEm5CMXMmbN0ad3gRqXSBu/sC4DHgFeC1zPcal6VcUl0GDw6TxbduDV8HbzuNYQY9e4a7Ca1dC9dcA4sWhdvDdegQFtzSgloi8Yk0C8Xdr3P377t7B3c/x911G4Ic1bQpjBgRivzBB8MVoCUl4X6f110HH39cJ+6IIjWOrsSUvbLPPnDOOWF4pawsHKHfcAMMGtSD884L0xNFpHqowKVSzMLqiNOmwV//CieeuJ7S0jC0csop4epPXbIvUrVU4BLZoYfCsGGr+fvfwzDL/PnhHp9FRWG5W53wFKkaKnDJmv32C+uvrF0Ld90VLt0fODCsvTJhAmzeHHdCkdyiApesy8+HoUNh9eowg6V+fTj//DAN8e67NXNFJFtU4FJlatcOqyC+8grMmAEtWsAFF4SVEm+7DT79NO6EIummApcqZxYuBpo7N6xV3rEjXHZZuG7o+uvhk0/iTiiSTipwqTZm4QbNs2aFE529eoU55K1bh5OfKnKRvaMCl1gceWSYgvjKK1BcHO4epCIX2TsqcIlVly4wderORT58OGzcGHM4kYRTgUsifF3kr74KffuGI/E2beDmm3VDZpFdUYFLohx+OEyZEi7V79EDrrgCDjoIxoyBzz+PO51IsqjAJZG6doWnnoIXXwwXAg0bFuaRjxsHX34ZdzqRZFCBS6IVFYVFs559Fpo1g5/+FNq3h0cf1VorIipwSYV+/eDll2H69HCnoDPOgO7d4bnn4k4mEh8VuKSGWVjpcOlSmDQJ3n8f+veH448PJz9FahoVuKROXh4MGQKrVsGoUeEuQV27hpsJrV0bdzqR6qMCl9SqVy/cbPmtt+DKK8PslbZt4fLLdTGQ1AwqcEm9Ro1g5MhwRD5oUFgo63vfCzdi3vzAQ9C6Nb379g1XCE2eHHdckaxRgUvOaNEijI0vXgydO8MvfgEdftKNqWu7hCkra9eGG3mqxCVHqMAl53TpEqYdPvWdc6njm/kRU+nL8yylE3z2GVx1VdwRRbJCBS45yQxO/OBBltKZu/k5r9GRLrxKCb9nw1rdUUJygwpcclfLltRmCz/nHlZzCBcxhon8hENsNbfdBl98EXdAkWhU4JK7Ro4M93cDmvAJt3MJy+sdQa/On3LZZeGKzqeeijmjSAQqcMldgweHxVNatcLNoFUr2t7/K558tRlPPw116sDJJ4ftzTfjDiuy91TgktsGD4Y1a5j9/POwZk14Trh6c+lS+O1vYc6ccDR+1VVaulbSRQUuNVbduvDLX8Ibb8CZZ8KNN8L3vw+PPKKFsiQdIhW4mTU2s8fM7K9mttLMemQrmEh1OfBAePDBsHTt/vuHMj/uuFDsIkkW9Qh8DPC0u38f6AysjB5JJB5FRWFdlbvugoULoWNHuPrqMHVcJIkqXeBm1gg4BhgP4O6b3f2TLOUSiUVeHgwdGo6+Bw0KE1nat4cnn4w7mcjOzCs52GdmhwPjgNcJR9+LgYvc/Z87fK4EKAEoKCgoLC0tjZK3ymzatImGDRvGHWOXlC+ayuZbsqQRo0cfytq1DSgq+pALL1xNQUH2J5Dn6v6rLknPB9EyFhcXL3b3bju94e6V2oBuwFfAkZnnY4AbdvdnCgsLPanKysrijrBbyhdNlHybN7vfeqt7fr57gwbuo0a5f/ll9rK55/b+qw5Jz+ceLSOwyMvp1Chj4O8A77j7gszzx4CuEb6fSCLVqQO/+hW8/jr06RNmrhx5ZFg0SyROlS5wd38P+LuZtc281I8wnCKSk1q1gj/9KdyPc/36cEu3YcPg00/jTiY1VdRZKBcCk81sGXA4cGPkRCIJZgannw4rV4YbLN9xB7RrF4pdpLpFKnB3X+Lu3dy9k7v/0N3/N1vBRJKsUSMYOxbmzYPGjeEHPwizVjZsiDuZ1CS6ElMkgh49wlj49dfD1Klw2GHwhz/oSk6pHipwkYjq1oVrroFXXw2X4v/7v8MJJ+gGy1L1VOAiWdKuHcydG+7F+eKL4QKgO++ErVvjTia5SgUukkW1asEFF8CKFdCrV7gvZ58+Wq5WqoYKXKQKtGoFM2bAxImwbBl06gRjxuhoXLJLBS5SRczg3HPD0XjfvmHOeO/esHp13MkkV6jARapYs2ZhnvgDD8Dy5dC5M4weraNxiU4FLlINzMLslBUroH9/uPhiKC6Gt96KO5mkmQpcpBo1bQrTpsGkSbBkSRgbHzdO88alclTgItXMDIYMgddeg6OOCpfk//rXHVm3Lu5kkjYqcJGYtGwJzzwT7gC0dGljOnSAyZN1NC4VpwIXiVGtWuEOQPffv4jDDoOzzw5rqnz8cdzJJA1U4CIJ0Lz5v5g7N9zCbcqUMDb+7LNxp5KkU4GLJEReHlx5JcyfD/vuC8ceG2arfP553MkkqVTgIglTWBhWOBw6NMwX79YNli6NO5UkkQpcJIHy88PJzRkz4KOPwt1/Ro3SxT/yTSpwkQQ74YQw3fDEE+HSS2HAgHA7NxFQgYsk3v77hxOb994blqnt1AmeeiruVJIEKnCRFDALF/wsXhzWVjn55LBUrU5w1mwqcJEUOeywMEtl2LBws4ju3cP6KlIzqcBFUqZePbj9dvjzn+H99+GII+C++3QFZ02kAhdJqQEDwvTCo4+GkhI46yzYuDHuVFKdVOAiKfbd78LTT8ONN8Jjj0HXrrBwYdyppLqowEVSrlYtuOIKmD0bvvwSiorgd7/TkEpNoAIXyRFFRWGN8ZNOgl/+Ek45JVwEJLlLBS6SQ7797TBn/I47wlK1XbqEWSuSm1TgIjnGDC68EF56KSyQ1atXmLWiIZXcE7nAzSzPzF41syezEUhEsqNbN3jllTCkcsklcNpp8MkncaeSbMrGEfhFwMosfB8RybImTWDq1HBS809/CrNUFi2KO5VkS6QCN7PmwEnA/dmJIyLZZhbWFZ8zB776KpzsvPdeDankAvMI/xbN7DHgJmBf4FJ3P7mcz5QAJQAFBQWFpaWllf55VWnTpk00bNgw7hi7pHzRKF+wcWNtbrzxMP7yl/047rj3uPjiVdSrt+c1arX/oouSsbi4eLG7d9vpDXev1AacDIzNPO4DPLmnP1NYWOhJVVZWFneE3VK+aJRvmy1b3EeMcDdz79jRfdWqPf8Z7b/oomQEFnk5nRplCKUI+IGZrQFKgb5m9scI309EqkGtWnDttWEtlXXrwsnOJ56IO5VURqUL3N2vcPfm7t4aGAQ87+5nZy2ZiFSp448Ps1TatoWBA+Hyy8MYuaSH5oGL1GCtWsHcufBf/wW33hpK/YMP4k4lFZWVAnf3F7ycE5giknz77ANjx8KkSTBvXhhSWbw47lRSEToCFxEAhgwJBQ5hquGkSbHGkQpQgYvI/yssDBf6FBXBT34CQ4fC5s1xp5JdUYGLyDcccADMnAmXXhqGVoqL4aOP6sYdS8qhAheRndSuDbfdBg8/HJao/dnPClmwIO5UsiMVuIjs0hlnhOVo69TZyjHHaFw8aVTgIrJbHTvCPfcs5uijw7j4sGGaL54UKnAR2aNGjb5i5sxQ3mPGhPniuttP/FTgIlIhtWuHG0NsP1982bK4U9VsKnAR2StDhoSlaTdvhp49Ydq0uBPVXCpwEdlr3buH+eLt2oV1VG66CfyPk6F167BaVuvWMHly3DFzXu24A4hIOh14IMyeDf/xH3DllbAiL4/7t7xHPRzWroWSkvDBwYPjDZrDdAQuIpVWvz788Y8wsvGtTN4yiN7MZj3fDW9+9hlcdVW8AXOcClxEIjGDKzf+mikMZAXtOYKFLKZrePPtt+MNl+NU4CISXcuWDOQJ5lFEHlvoxVymMBBatow7WU5TgYtIdCNHQn4+nVnGX+hOZ5ZyGlO4+cipunlyFVKBi0h0gwfDuHHQqhUF9gHPtziXQUet4YpHunD++VrRsKqowEUkOwYPhjVrYOtW6r/9Bv/9UmuuvRYmToRjj9WVm1VBBS4iVcIMRowIs1Tmz4ejjoJVq+JOlVtU4CJSpQYPhrIy2LgxlPgLL8SdKHeowEWkyvXsCQsWwHe/C8cdF47KJToVuIhUizZtwiJYRUVwzjlwww1ohkpEKnARqTZNmoTbtZ1zDlx7LZx3nmaoRKG1UESkWtWtCw88AAcdFE5yvv02PP44NG4cd7L00RG4iFQ7Mxg+PKwtPnduGFZZuzbuVOmjAheR2AwZEoZU1q2DHj3CDZSl4lTgIhKr4uJwcrN2bejVC555Ju5E6aECF5HYtW8PL78cxsVPOimMkcueVbrAzayFmZWZ2etmtsLMLspmMBGpWZo1C7dq690bzj03rI+laYa7F+UI/Cvgl+7eDjgKGGpm7bITS0RqokaNYMYMOPtsuPpq+NnP4Kuv4k6VXJWeRuju64H1mcefmtlKoBnwepayiUgNVLcuPPhgWEr8xhvh3Xfh4YchPz/uZMmTlTFwM2sNdAEWZOP7iUjNZhaGUMaOhaeegv79tZphecwjDjKZWUNgNjDS3aeU834JUAJQUFBQWFpaGunnVZVNmzbRsGHDuGPskvJFo3zRxJlvzpz9+c1v2tG06b+45ZZlFBR8sdNnkr7/IFrG4uLixe7ebac33L3SG1AHmAlcUpHPFxYWelKVlZXFHWG3lC8a5Ysm7nwvvODeqJF7s2bur7228/tx56uIKBmBRV5Op0aZhWLAeGClu/+ust9HRGRPevcOV2y6h7nic+fGnSgZooyBFwHnAH3NbElmOzFLuUREvqFjR3jpJSgoCHf4eeKJuBPFr9IF7u4vuru5eyd3PzyzzchmOBGR7bVqFa7a7NIFTjsNJkyIO1G8tBqhiKTKfvvBs8/C6afD+efDhx9C9+5xp4qHLqUXkdRp0ACmTYNBg+Dyy+Heew+qkVdt6ghcRFKpbl2YPDkckd99d0vy82HcuLAoVk1Rg/5RRSTX1KoFd94J//zn/zBxYhs+/hhKS6FevbiTVQ8NoYhIqpnBkCFruesumD4dBgyAf/wj7lTVQwUuIjlh6NAwpDJvHvTrF05u5joVuIjkjLPOCvPDly8PF/+sWxd3oqqlAheRnHLSSfDnP4ebJffqBW+9FXeiqqMCF5Gc06cPPP88bNwIRx8djshzkQpcRHLSEUfA7Nnhce/esHBhvHmqggpcRHJWhw5h4atGjaBv322FnitU4CKS0w4+OJR48+Zwwgkwc2bcibJHBS4iOa9Zs3D0feih8IMfhMvwc4EKXERqhO98B8rKtq1k+NBDcSeKTgUuIjVGkyYwaxYUFcHgwelfjlYFLiI1yr77hnnixx4blqO96664E1WeClxEapz8/LBuyqmnwoUXwm23xZ2oclTgIlIj7bMPPPpoWFP8ssvgN7+JO9He03KyIlJj1akDf/hD+HrNNbB5M4wYEVY4TAMVuIjUaLVrw8SJocRvuCGU+E03paPEVeAiUuPl5cF994W7/NxySyjxUaOSX+IqcBERwt19xo4NJX777aHE77gjvJ5UKnARkQwzGD06lPhvfwtffgn33JPcEleBi4hsxwxuvTWMid90E2zdCr//fTJLXAUuIrIDMxg5MpT2yJHgHu54n7QSV4GLiJTDLMxKqVUrfHUPJzqTVOIqcBGRXTCD668PpT1iRBhOuf/+MGslCVTgIiJ7MHx4KPPhw8OR+PjxySjxSAVuZgOAMUAecL+735yVVCIiCXPddaHEr7suHIlPnBh/iVe6wM0sD7gbOBZ4B1hoZtPd/fVshRMRSZJrrw3DKddcE8p7/Ph4x8SjHIF3B95097cAzKwUOBVQgYtIzrr66nAEft11obzjPLEZpcCbAX/f7vk7wJE7fsjMSoCSzNNNZvZGhJ9ZlfYHPow7xG4oXzTKF43ylWPChL26KUSUjK3Ke7HKT2K6+zhgXFX/nKjMbJG7d4s7x64oXzTKF43yRVcVGaMc+K8DWmz3vHnmNRERqQZRCnwhcIiZtTGzusAgYHp2YomIyJ5UegjF3b8yswuAmYRphBPcfUXWklW/pA/zKF80yheN8kWX9Yzm7tn+niIiUg0SdFW/iIjsDRW4iEhKqcC3Y2bDzWydmS3JbCfGnQnCkgVm9oaZvWlmv447z47MbI2ZvZbZZ4sSkGeCmW0ws+XbvfZtM5tlZqszX5skLF9ifvfMrIWZlZnZ62a2wswuyryeiH24m3yJ2IdmVs/M/mJmSzP5RmReb2NmCzJ/jx/OTP6I9rM0Br6NmQ0HNrn7b+PO8rXMkgWr2G7JAuCsJC1ZYGZrgG7unogLPczsGGAT8KC7d8i8divwsbvfnPmPYBN3vzxB+YaTkN89MzsQONDdXzGzfYHFwA+Bc0nAPtxNvjNIwD40MwMauPsmM6sDvAhcBFwCTHH3UjO7F1jq7vdE+Vk6Ak++/1+ywN03A18vWSC74O5zgI93ePlU4IHM4wcIf+FjsYt8ieHu6939lczjT4GVhCuvE7EPd5MvETzYlHlaJ7M50Bd4LPN6VvafCnxnF5jZssz/5sb2v9nbKW/JgsT8smY48IyZLc4snZBEBe6+PvP4PaAgzjC7kLTfPcysNdAFWEAC9+EO+SAh+9DM8sxsCbABmAX8DfjE3b/KfCQrf49rXIGb2bNmtryc7VTgHuBg4HBgPTAqzqwpcrS7dwVOAIZmhggSy8O4YdLGDhP3u2dmDYHHgWHu/o/t30vCPiwnX2L2obtvcffDCVeodwe+XxU/p8bd0MHd+1fkc2Z2H/BkFcepiMQvWeDu6zJfN5jZVMIv7Jx4U+3kfTM70N3XZ8ZQN8QdaHvu/v7Xj5Pwu5cZu30cmOzuUzIvJ2YflpcvafsQwN0/MbMyoAfQ2MxqZ47Cs/L3uMYdge9O5pfyawOB5bv6bDVK9JIFZtYgcyIJM2sAHEcy9tuOpgNDMo+HANNizLKTJP3uZU7CjQdWuvvvtnsrEftwV/mSsg/N7AAza5x5XJ8wAWElUAacnvlYVvafZqFsx8z+QPjfLwfWAD/dbswvNpnpUKPZtmTByHgTbWNmBwFTM09rA/8ddz4zewjoQ1i+833gOuAJ4BGgJbAWOMPdYzmRuIt8fUjI756ZHQ3MBV4DtmZevpIwzhz7PtxNvrNIwD40s06Ek5R5hIPkR9z9+szflVLg28CrwNnu/kWkn6UCFxFJJw2hiIiklApcRCSlVOAiIimlAhcRSSkVuIhISqnARURSSgUuIpJS/weevtolYhN7rAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df.X,df.Y,'ro')\n", "x=np.linspace(-8,30)\n", "plt.plot(x,P( x),'b-')\n", "plt.grid()\n", "plt.ylim(0,12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example of error calculation\n", "See details [here](https://math.stackexchange.com/a/1151599/790274)\n", "\n", "Consider $f(x) = \\operatorname{e}^{2x} - x$ interpolation in the interval $[1,1.6]$ \n", "\n", "1. Construct the Lagrange Polynomial for the points $x_0=1$, $x_1=1.25$, $x_2=1.6$. \n", "1. Find the approximate value at $f(1.5)$ and the error bound for the approximation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. We start by defining the function\n", "\n", "Be sure that the function input will be an array" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2.71828183, 3.49034296, 4.95303242, 2.71828183, 3.49034296,\n", " 4.95303242])" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Wrong result for a list\n", "x=[1,1.25,1.6]\n", "np.exp(2*x)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1.25, 1.6, 1, 1.25, 1.6]" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x+x" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 1.25, 1.6, 1, 1.25, 1.6]" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2*x" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 7.3890561 , 12.18249396, 24.5325302 ])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.exp(2*np.array(x))" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unsupported operand type(s) for -: 'list' and 'list'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/tmp/ipykernel_1076705/3003427434.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#List operations are not well defined in general\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for -: 'list' and 'list'" ] } ], "source": [ "#List operations are not well defined in general\n", "[1,2,4]-[1,5,6]" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "def f(x):\n", " '''\n", " WARNING: all the parts of the function must be \n", " numpy arrays in order to get the element by element sum.\n", " '''\n", " x=np.asarray(x) # Force x → array\n", " return np.exp(2*x)-x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The interpolation polynomial is" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "26.85 x - 42.25 x + 21.78\n" ] } ], "source": [ "x=[1,1.25,1.6]\n", "P_2=interpolate.lagrange(x,f(x))\n", "print(P_2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test interpolation with one of the three points" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10.932493960703491, 10.932493960703473)" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P_2(x[1]),f(x[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the bounded error we start with the left part\n", "$$\n", "\\max_{\\xi\\in[1,1.6]}\\left|\\frac{f'''(\\xi)}{(3)!}\\right| \n", "$$\n", "where\n", "$$f'(x)=2\\operatorname{e}^{2x}-1$$\n", "$$f''(x)=4\\operatorname{e}^{2x}$$\n", "$$f'''(x)=8\\operatorname{e}^{2x}$$\n", "The maximum is obtained for the last point $x_2$" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "196.26024157687482" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fppp=8*np.exp(2*x[2])\n", "fppp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the right part \n", "$$\n", "\\max_{x\\in[a,b]}\\left|\\prod_{i=0}^{2}\\left(x-x_{i}\\right)\\right|=\n", "$$\n", "we need just to build the numpy polynomial with roots at $(x_0,x_1,x_2)$\n", "$$\n", "p_e(x)=(x-x_0)(x-x_1)(x-x_2)\\,,\n", "$$" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "p_e=np.poly1d(x,r=True)" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "X=np.linspace( x[0],x[-1] )\n", "plt.plot(X,p_e(X))\n", "plt.plot(X,p_e.deriv()(X))\n", "plt.ylim(-0.02,0.01)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And find the maximun of the absolute value of the critical points" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1.45733844, 1.10932822])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_e.deriv().roots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The point in the interval $[1,1.6]$ for which $|p_e(x)|$ is maximum corresponds to the root" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.4573384418151778" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xmax=p_e.deriv().roots[0]\n", "xmax" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.013527716754363928" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.abs(p_e(xmax))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "p_emax=np.abs( p_e(p_e.deriv().roots) ).max()" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.013527716754363928" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p_emax" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this way, the maximum error for $p(x)$ is expected for $x_{\\text{max}}=1.45733844$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The bounded error is then\n", "$$\n", "E_2(x)=\\max_{\\xi\\in[1,1.6]}\\left|\\frac{f'''(\\xi)}{(3)!}\\right|\\cdot\\max_{x\\in[a,b]}\\left|\\prod_{i=0}^{2}\\left(x-x_{i}\\right)\\right|\n", "$$" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4424921596991669" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_2=fppp/(2*3)*p_emax\n", "E_2" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "18.585536923187668" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "XX=1.5\n", "f(XX)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "18.832612316478652" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P_2(XX)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.24707539329098438" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P_2(XX)-f(XX)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The real bounded error is" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.26182823963596036" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xlin=np.linspace(x[0],x[-1],100)\n", "np.abs(P_2(xlin)-f(xlin)).max()" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(X,f(X),label='$f(x)$')\n", "plt.plot(x,f(x),'r*')\n", "plt.plot(X,P_2(X),label='$P_2(x)$')\n", "plt.grid()\n", "plt.xlabel('$x$',size=12)\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WSrNnaKcEZX2", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Implementation in `sympy`\n", "For details see [here](./LagrangePoly.ipynb)" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.7/dist-packages/IPython/core/magics/pylab.py:160: UserWarning: pylab import has clobbered these variables: ['f']\n", "`%matplotlib` prevents importing * from pylab and numpy\n", " \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [], "source": [ "df=pd.read_csv('https://github.com/restrepo/ComputationalMethods/raw/master/data/interpolation.csv')" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
03.08.0
110.06.5
221.33.0
\n", "
" ], "text/plain": [ " X Y\n", "0 3.0 8.0\n", "1 10.0 6.5\n", "2 21.3 3.0" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "colab": {}, "colab_type": "code", "id": "0VOIS4fJEZX3", "outputId": "91f56066-10ac-4c21-84cf-c0cd76bab274" }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - 0.00521578136549848 x^{2} - 0.146480556534234 x + 8.48638370189219$" ], "text/plain": [ "-0.00521578136549848*x**2 - 0.146480556534234*x + 8.48638370189219" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import LagrangePolynomial as LP\n", "LP.lagrangePolynomial(df.X,df.Y)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2_6up-MlEZX6" }, "source": [ "$$P_n(x) = \\sum_{i=0}^n L_{n,i}(x) \\, y_i$$" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "colab": {}, "colab_type": "code", "id": "mh1rbre7EZX6", "outputId": "c919803b-049e-49be-c8d8-124ed9695410" }, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - 0.00521578136549848 x^{2} - 0.146480556534234 x + 8.48638370189219$" ], "text/plain": [ "-0.00521578136549848*x**2 - 0.146480556534234*x + 8.48638370189219" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LP.polyL( df.X,0)*df.Y[0]+LP.polyL( df.X,1)*df.Y[1]+LP.polyL( df.X,2)*df.Y[2]" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
03.08.0
210.06.5
121.33.0
\n", "
" ], "text/plain": [ " X Y\n", "0 3.0 8.0\n", "2 10.0 6.5\n", "1 21.3 3.0" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.0" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.X[0]" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FEj64uDmEZX8" }, "source": [ "### Steps LP" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "t6ks3grEEZX8" }, "source": [ "Once defined the formal procedure for constructing a Lagrange Polynomial, we proceed to describe the explicit algorithm:\n", "\n", "1. Give the working dataset $(x_i, y_i)$ and stablish how many points you have.\n", "2. Define the functions $L_{n,i}(x)$ in a general way.\n", "3. Add each of those terms as shown in last expression.\n", "4. Evaluate your result wherever you want." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "FbuCBnS4EZX9" }, "source": [ "### Activity ###\n", "\n", "Along with the professor, write an implementation of the previous algorithm during classtime." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-1r8xBk8EZX9" }, "source": [ "### Activity LP" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ZkuEZPFTEZX-" }, "source": [ "
\n", " \n", "
\n", "\n", "One of the very first evidences of the existence of dark matter was the flat rotation curves of spiral galaxies. If we assume the total budget of mass of a galaxy is entirely made of luminous matter, the orbital circular velocity of stars around the galaxy plane should decay according to a keplerian potential. However this is not the case and the circular velocity barely decreases at larger radius, thus indicating the presence of a new non-visible matter component (dark matter). When it is necessary to determine how massive is the dark matter halo embedding a galaxy, an integration of the circular velocity is required. Nevertheless, due to the finite array of a CCD camera, only a discrete set of velocities can be measured and interpolation techniques are required.\n", "\n", "\n", "In this activity we will take a discrete dataset of the circular velocity as a function of the radius for the galaxy [NGC 7331](http://es.wikipedia.org/wiki/NGC_7331) and perform both, a linear and a Lagrange interpolation. You can download the dataset from this [link](https://raw.githubusercontent.com/sbustamante/ComputationalMethods/master/data/NGC7331.dat).\n" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "6BmEFS28EZX_" }, "source": [ "[Video](https://upload.wikimedia.org/wikipedia/commons/transcoded/3/33/Galaxy_rotation_under_the_influence_of_dark_matter.ogv/Galaxy_rotation_under_the_influence_of_dark_matter.ogv.360p.webm)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "fseOFy-DEZX_" }, "source": [ "\n", "**TRIVIA**
\n", "To which of two curves the real data approach better?\n", "
" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "XaM0WuPQEZX_" }, "source": [ "import os\n", "os.remove('trivia_results.txt')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": {}, "colab_type": "code", "id": "pcbVK4pkEZX_", "outputId": "c24c3075-c96b-4809-b64a-f3ce6b049926" }, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "A: to the curve \"velocity goes to zero when distance goes to infinity\"\n", "B: to the curve \"velocity goes to high constant when distance goes to infinity\"\n", " A\n" ] } ], "source": [ "f=open('trivia_results.txt','a')\n", "AB=input(r'''A: to the curve \"velocity goes to zero when distance goes to infinity\"\n", "B: to the curve \"velocity goes to high constant when distance goes to infinity\"\n", "''')\n", "f.write( '{}\\n'.format(AB) )\n", "f.close()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": {}, "colab_type": "code", "id": "xQ1a6G2ZEZYB", "outputId": "be642608-3aa3-4645-c2d7-a93e5e8bd029" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C\n", "A\n", "\n" ] } ], "source": [ "fr=open('trivia_results.txt')\n", "print( fr.read())\n", "fr.close()" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "WsMD7hIjEZYD" }, "source": [ "os.remove('trivia_results.txt')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "IAYkvn-_EZYD", "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### Lets us check! " ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "colab": {}, "colab_type": "code", "id": "JiCl9H_TEZYE", "outputId": "329bce3d-5d4f-40fd-f726-dc0755207e29" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
rv
00.0533.42496
10.1071.70398
20.1595.14708
30.20107.32276
40.25117.44285
\n", "
" ], "text/plain": [ " r v\n", "0 0.05 33.42496\n", "1 0.10 71.70398\n", "2 0.15 95.14708\n", "3 0.20 107.32276\n", "4 0.25 117.44285" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#DATA URL: \n", "url='https://raw.githubusercontent.com/restrepo/ComputationalMethods/master/data/NGC7331.csv'\n", "df=pd.read_csv(url)\n", "df[0:5]" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(623, 2)" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.shape" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "colab": {}, "colab_type": "code", "id": "HUVw9xGgEZYL", "outputId": "87ed6dd1-ad29-4cf9-e50d-f57d5ca56ec9" }, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '$v$ [km/s]')" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df.r,df.v,'r.')\n", "plt.xlabel('$r$ [pc]',size=12 )\n", "plt.ylabel('$v$ [km/s]',size=12 )" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "by-IQm0uEZYO" }, "source": [ "Build expected data" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": {}, "colab_type": "code", "id": "Hq31R98xEZYP" }, "outputs": [], "source": [ "dff=df[:60]\n", "#dff=dff.append(pd.DataFrame( {'r':[5,10],'v':[60,20]} )).reset_index(drop=True) # ,15,20,25,30 ,120,105,100,98\n", "#dff=dff.append(pd.DataFrame( {'r':[3.5,4,10],'v':[230,200,20]} )).reset_index(drop=True) # ,15,20,25,30 ,120,105,100,98\n", "dff=dff.append(pd.DataFrame( {'r':[3.5,4,9],'v':[230,200,22]} )).reset_index(drop=True) # ,15,20,25,30 ,120,105,100,98" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "colab": {}, "colab_type": "code", "id": "ioCe6gC6EZYQ", "outputId": "6c706d79-a76a-4086-e531-0dde86c55379" }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(df['r'],df['v'],'r-')\n", "plt.plot(dff.r, dff.v,'b.')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "CRQDSzoyEZYU", "outputId": "b8f062b2-3a4c-4882-bb04-b77fc28f5d4f" }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 408, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "plt.plot(df['r'],1./df['v'],'r-')\n", "plt.plot(dff['r'],1./dff['v'],'b.')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "fA6q4n5XEZYX", "outputId": "f09413b4-65ff-4807-c321-02c187aeaed0" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2\n", "0.001084 r - 0.00594 r + 0.01169\n" ] } ], "source": [ "coeff=np.polyfit(dff['r'],1./dff['v'],2)\n", "P=poly1d(coeff,variable='r')\n", "print(P)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "d0ctfSJmEZYa", "outputId": "9de7e46b-5275-4f0a-ed01-524e77dd5fdb" }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 410, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "r=np.logspace( np.log10(0.001),np.log10(30 ),100 )\n", "plt.plot(dff['r'],1./dff['v'],'b.')\n", "plt.plot(r,P(r),'k-')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "efFbUfhoEZYe", "outputId": "d165508a-493d-4879-c3a3-7b96e25a7900" }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 411, "metadata": { "tags": [] }, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//HXZyYJhATZZQlbSIIQQFkiGK0QjKAoS+lu\n3a5WuLVu9Nrea/f2pz6017ZarVqheqsttXq1KijFq5Go6CAEZA1gEgTKvoQgYcsy398f35lkAiH7\n5MyZ+Twfj/OYMydnZj7DJO/58j3f8z1ijEEppVT08jhdgFJKqfDSoFdKqSinQa+UUlFOg14ppaKc\nBr1SSkU5DXqllIpyGvRKKRXlNOiVUirKadArpVSUi3O6AICePXuawYMHO12GUkq5yurVqw8ZY3o1\ntl9EBP3gwYMpKChwugyllHIVEdnRlP2060YppaKcBr1SSkU5DXqllIpyGvRKKRXlNOiVUirKadAr\npVSU06BXSqkop0HfRFu3buXtt992ugyllGo2DfomOHXqFNdccw3XXnsthYWFTpejlFLNokHfBI8+\n+ijbtm0jPj6ee++91+lylFKqWTToG7Fr1y4eeOABZs+ezYMPPsjSpUtZsmSJ02UppVSTiTHG6RrI\nysoykTrXzfXXX8+rr77K5s2bSUlJYeTIkXg8HjZs2EB8fLzT5SmlYpiIrDbGZDW2n7boG7Bu3Tr+\n9re/8cMf/pDU1FQSEhL47W9/y9atW3nqqaecLk8ppZpEg74B7777LgDf+973arZNnz6dSZMm8eST\nTzpVllJKNYsGfQN8Ph+DBw+mb9++NdtEhKlTp1JUVERZWZmD1SmlVNNo0J+DMYaPP/6Y7Ozss36W\nlWW7xNasWdPeZSmlVLNp0J/Dzp072bt3L5deeulZPxs3bhwAq1evbu+ylFKq2TToz8Hn8wHU26Lv\n0aOHXhVLKeUaGvTn8PHHH9OpUycuvPDCen8+btw4bdErpVxBg/4cfD4fF1988TnHyo8bN46SkhKO\nHDnSzpUppVTzaNDX48SJE6xdu7bebpsgPSCrlHILDfp6FBQUUFVVVe+B2KCxY8cCekBWKRX5NOjr\nETwQe8kll5xznx49epCamqoHZJVSEU+Dvh6rVq1iyJAh9OrVq8H99ICsUsoNNOjrUVhYyKhRoxrd\nb9y4cWzbto3S0tJ2qEoppVpGg/4MlZWVFBUVMXz48Eb31QOySik30KA/Q0lJCVVVVU0K+uABWe2n\nV0pFskaDXkQGiMgyESkUkU0ick9g+y9FZLeIrA0s14Q85kciUiwiW0XkqnC+gbYWvFRgZmZmo/t2\n796dIUOGaD+9UiqixTVhnyrgXmPMGhHpDKwWkXcCP3vUGPOb0J1FJBP4FjAC6Ae8KyJDjTHVbVl4\nuGzevBmAYcOGNWn/cePGsWrVqnCWpJRSrdJoi94Ys9cYsyawfgzYDKQ08JBZwN+NMaeNMZ8DxcD4\ntii2PWzevJmBAweSnJzcpP3HjRvH9u3b9QxZpVTEakqLvoaIDAbGAJ8AlwF3ishNQAG21X8E+yWw\nIuRhu2j4iyGiFBYWNql/PijY8v/ss8+YMGFC0x5UUQE7dsD27bXLv/4F3brBtGkwZQp4vc2uXSml\n6tPkg7Eikgy8CswzxnwBPA2kAaOBvcBvm/PCIjJXRApEpODgwYPNeWjY+P1+tmzZ0qT++aCMjAwA\nioqKGt953Tr4ylega1cYOhSmToW5c+HXv4b8fPjTn2zQp6XBggVQWdnCd6KUUrWaFPQiEo8N+YXG\nmH8AGGP2G2OqjTF+YAG13TO7gQEhD+8f2FaHMWa+MSbLGJPV2IlJ7WXnzp2cPHmyWS36IUOGICKN\nB/2CBXDxxTbQb7sN/vxnu759O5w6BTt3Qmkp/O//Qp8+9gtg6FB45RWIgAu4K6XcqymjbgR4Fths\njPldyPa+IbvNBjYG1hcB3xKRDiKSCmQAK9uu5PAJjrhpTtB37NiRgQMHnjvojx+HOXNscE+eDEVF\n8PjjcPPNMGkSDBoEcYEetA4d4GtfA58P3noLunSBr38drrkGSkpa+/aUUjGqKX30lwE3AhtEZG1g\n24+B60RkNGCA7cC/AxhjNonIy0AhdsTOHW4bcRMa9PPnw2OPwZEj0LEjjB4N//mfEDqx5dChQ+sP\n+k8+gRtvhOJiuO8+eOCBpvW9i9hwnzoV/vAH+NnPYORI+8L/9V/QqVNr36pSsaeqCvbutcfDdu2y\nt8EleP/kSdvwio+vXXr2hIEDbaPszNuuXe3fa4QTEwHdAllZWSYSTjq67bbbWLx4Mfv37wfghhtg\n4cKz/31EhD/+0TbSAe644w4WLlzIkSNHEBHbt/7AA/Dgg5CSAs8/Dzk5LS9s9274wQ/g73+3v2C/\n+hV885uQmNjy51QqGhgDR4/C4cP2NrheX5Dv2QN+f93HJyXBgAG1S3Ky/fsNLhUVcPCgHTyxcyec\nPl338cnJ9m+yd2/795iUBP37Q2pq7TJ4sN0eBiKy2hiT1dh+zRp1E+02b95c05q/4QY/CxcGv6nr\nfmMbY/jud+22uXPtAdmjR49y6NAhepWW2lb8qlX29oknbBdMa6SkwIsvwu23w913wy23wPe/b1v9\nM2bA1VfbloVS0W7vXvjgA/jwQ7sUFdlWeH06dqwN8Nzc2vX+/WvXu3RpeovcmLqhH7zduRMOHIAv\nvoDycnjzzbNrOv/8uuGfmgoZGfa4XZi+BEJpiz7E+eefz+zZszl+/JmQlrxge6dCbwEMXq/w4YdQ\nWvoW06dP56N77uHS+fPtN/sf/2j719uaMfYg7vPP2378Q4fsL/Qvf2lb/TosU7ldaKAGW+Tr1tlg\nLy62+yQlwaWXwoUXQr9+tnulSxe7dOtmw7x7d2e6VYyxwf/55/UvO3fabiSw3UQ//Sn84hcteilt\n0TfT0aNHOXjwIFu3pvP++6Ehb287dYITJ0LDXvBX+8l/spCvptljzUW//z2XXn01PPus/eULBxF7\nUHfyZKiuhpUr4Te/sccA3nsPFi60v/RKRSpjoKwM9u+3gbhvnw3wLVtql2PH6j6me3e4/HL47nft\nIIbRo2sHMUQaEduV07s31HdNi6oq2x1bWGj/dzJuXNhLitB/qfZXHGgpvP9+WmBLbahffz389a/2\nwOzttwt+v/0iSKCCnIVzSGUFXqDoK1+xwyHbqxXh9dqjwq+8Ysfg33UXjB1r/zcxbZorDhKpGHD0\nqG2NL1sGH39sg7ys7Oz9+veHYcPsiLSMjNqDnv3728ZLtPw+x8XZ9zZokP07bY+XbJdXcYHaUTMZ\n1BfyYPvjR42CF16wv3A3fd2Qfd4T0K0bg6+6iqK4OGd+GUXsEM6xY+Eb34Brr4Xhw+Gmm+C66+wv\nlFLtpbwcli+3wb5sGaxebQ+CdugAEybY38n0dHu+yPnn1/Zfd+7sdOVRS4M+4L33An1/DAncChMn\n1oZ8UHZ26NDKRMB2j2VkZDTt7NhwGjcONm+2o3OeeQZ+9CO7fOlL8O1v2zH6EXJymooiJ0/alnow\n2FeutN0T8fE22H/6U9vVeMkl9niSanca9AFLlxZjp+RJAgwej/Dww01/fEZGBsuXL8cYY4dYOiUh\nwbbkb7rJHvh58UXbb/+978Gdd9o/vKwsGDHC/vfkoova5ai/iiKnT8OKFbXBvmKFHYbo9dpRJD/8\noQ32Sy/V360IoUGPPRH1X/8qwnbbAAgzZ9Y9KaoxcXEZlJeX89Zb+5k+vU84ymy+1FT48Y9tq379\nenjtNXj7bXjuOXvGLoDHY8P+mmtsl8/48TpyR9VVWQkFBfZgf7Cf/eRJ22U4dqwd8jt5sj1Yqt0v\nEUmHVwKzZ8Prr/cGZgLz8XiE5cubHvQ+H+TkLKWiYhoJCR+Qn395s74k2p3fb4esrV9v+0/fe8/+\n8VZX2wNfc+faMfs6eie2GGNHg2zYYEeEFBbarsD162sbBhdeaEP9iitg4kQ9f8NhOryyiXw+WLTo\nKHAASKclrfn8fKiqsv8bqKwsivyg93hqj/rPmGHH4B85AkuXwv/8D/z85/DQQ3DrrXDvvfZ/Bir6\nBFvq+fm2pV5QYH8Pgnr3tgf1b7nFDmnMydEvf5eK+aDPzwe/P3gQNR2v104p0xw5OZCQMIhTp+Lw\neotaNduBY7p1s6MhrrvOtuR+8xs7nvTpp+1Inttvtwd1PXqZYdeqqoI1a2r71pcvr22pjxxpT/C7\n6CJ77CYzE3r0cLZe1WZiPujt73JwxE06997bvNY82P3fey+OmTOHMHJkUWS35psiM9P2499/v53R\n7Zln7EielBQbBjNmwGWX2eFyKnJVVsKnn9qTcpYts2PZgyciZWba8eqTJ9vWuo7GimoxH/SffnSc\n0KD/4ouWPU92NkyYkBE4qBslUlLgkUfs6dmLF8NLL8FTT9nwT0y0fbRTptjRFaNH6yRrTqmsrD2z\nNHjFsk2b7GiYYIv9ggvg+uvtfz9zcmy3jIoZMR/0+9YfxAZ9P+zQypbLyMhg2bJlzg+xbGvJybXd\nOseO2f6ud96xyw9+YPfxeu1//7Oyav/rn5lpp4KIpn8LJxhj/91LS+3MjKWldibGVavsVNjr1tW9\nGllysj2z9JZb7EiYyy+Hvn3P/fwq6sV00Pt8sGR9P2zQpxEfb4eft9TQoUM5ceIEe/bsISXFNZfJ\nbZ7OnW3XzYwZ9n4wcFatsgfzXn/dzvUT1KVLbeiHLgMGxO4XwOnTttVdUgLbttnpAE6csEMWT5yo\nXT92zE7s9fnndpz6mZKT7bj173/ffrkOGwZDhtjjLbH6b6vqFdNBn7/MUOX3AiXANL7zneb3z4cK\nvX5s1Ab9mfr1g1mz7AK1Mw8WFtrug+AwvcWL634BJCfbrqEePewyeLBthWZk2J95vXYRqb2UojG1\nS+j91qy3xXMdPWrDeNs2e3v4cN05zc9c6gttr9deUCa4BOc2HzkSZs60XS3du9ulRw/bp56eruc8\nqCaJ6aDv4T+AnyRgH5DGmDGte75g0H/22WfkuHLoTRsQqZ2/5Mx/g0OHaoO/sNDOWnj4sG215uef\nPWOhm4jYcxCGDLHhHHqFojOXxET7xZaWZvfv2dNuVypMYjroP32vDNgLgEgahw+37vkGDBhAhw4d\nnJ/zJlL17GkP4E6cePbPjLHT1hYX226L6mp7Ypffb0M02BURXD/zflutt+QxSUl2lkUdhaQiVMwG\nvc8Hz70/BHgTgLi4tFaPf/d4PKSlpWnQt4SInc2wT4RMH6FUFInZs1/y86HaL8A2AK6/Pq1Nxr+n\np6dTUlLS+idSSqk2ErNBn/OlKuKoAoqAbsyd271NnjcY9P4zL0KslFIOidmgZ9cu7JiJEkTSGtm5\n6dLT0zl58iR79+5ts+dUSqnWiNmgz198jGrisF03aeTnt83zpqenA7WXJlRKKafFbND3OFqCcBrY\ngdfb+gOxQRr0SqlIE5NB7/PBvKXTqGYXUM23v902B2LBDrGMj4/XA7JKqYgRk0Gfnw8Vfi+GHQAk\nJLRdH31cXBypqanaoldKRYxGg15EBojIMhEpFJFNInJPYHt3EXlHRIoCt90C20VEHheRYhFZLyJj\nw/0mmivn8uqQETcwfXrbBT3Y7hsNeqVUpGhKi74KuNcYkwlcAtwhIpnAfUCeMSYDyAvcB5iGvfhq\nBjAXeLrNq26tAwdqRtxAR3r27NemTx8M+ki4TKNSSjUa9MaYvcaYNYH1Y8BmIAWYBTwf2O154MuB\n9VnAC8ZaAXQVkYiaIzX/zfI6I24++KBte7DS0tI4duwYP/3pQXy+Nn1qpZRqtmYlnIgMBsYAnwC9\njTHBweL7gOCVDFKAf4U8bFdgW8TocWoXHvxAMR5P2424CaqstCNvHn64mNxcNOyVUo5qctCLSDLw\nKjDPGFPnOkzG9lE0q59CROaKSIGIFBw8eLA5D20Vnw/m/e9lVAFQwhVXpLf5pf/27LFB7/cXU1FB\nm43RV0qplmhS0ItIPDbkFxpj/hHYvD/YJRO4PRDYvhsYEPLw/oFtdRhj5htjsowxWb3a8XqV+flQ\nUeXFcBA4RadO6W3+GrNmDQY8iBSTkHD2bL1KKdWemjLqRoBngc3GmN+F/GgRcHNg/WbgjZDtNwVG\n31wCHA3p4nFcTg4kSAUetgIweXLbjrgBmDgxgX79BnHhhSXk5bXuYiZKKdVaTWnRXwbcCFwhImsD\nyzXAw8AUESkCrgzcB1iCPcpZDCwAvtf2Zbdc9sVVPCbfZ1hP23E+c2bbt+gBRoxIp0OHYg15pZTj\nGp2P3hizHDjXBShz69nfAHe0sq6w8b22j3n+33Hq0P1AHLt3D2TIkLZ/nfT0dF566aW2f2KllGqm\nmDszNv+t41SQgKEEGMzy5eG59kp6ejqlpaWUlpaG5fmVUqqpYi7oe5wMDq0sweNJD9uB0uDkZjrn\njVLKaTEV9D4fzPvH5VQhQDETJ7bdZGZn0lkslVKRIqaCvnZo5RHgC5KSwnMgFmDIkCGIiAa9Uspx\nMRX0OTkEJjPbGrifEbbX6tixIykpKRr0SinHxVTQc+IEBkNw1soBA8IX9KCzWCqlIkNMBX3+a0cC\nk5mVAF6KilLD+nrBC4UrpZSTYiroayczK0JkMLm58WF9vfT0dPbv38+xY8fC+jpKKdWQmAl6nw/m\nPT+WajxAEZmZGWE/a1WHWCqlIkHMBL0dcePBjxco4rzzwts/DzrEUikVGcJzWmgEysmBOKmi2hwC\njnPJJeEP+rQ0O2GaBr1Sykkx06Knujpwab/giJuhYX/J5ORk+vTpo0GvlHJUzAR9/htHQ0bcwJ49\n4W/RA2RkZLB169Z2eS2llKpPzAR97YibrUA8M2cObJfXzczMpLCwUC8UrpRyTEwEvc8H854ZTjUe\nRD6jb990Lr+8fQ5PDB8+nNLSUtrzcolKKRUqJoK+dsRNHMZspVu3C9rttTMzMwEoLCxst9dUSqlQ\nMRH0do6baqACKGHsWA16pVTsiI3hlcZgjB/YAVQycGD7BX2/fv3o3LkzmzdvbrfXVEqpUDHRos9/\n63hgxI0d5nj4cPsFvYjUHJBVSiknxETQ56QUkUAFIlsAmDUr/GPoQ2nQK6WcFBNBz44d3MzzDEvb\nyHnndWfatJ7t+vLDhw9n3759HDlypF1fVymlIAaC3ueD3N9dwwLmsHXbtnbtnw8KHpDVfnqllBOi\nPuiDlw+sJg6/fzMdOgxv9xp05I1SyklRH/S1lw88CBwkOzuz3WsYNGgQiYmJGvRKKUdEfdBTXh64\nfKDtNhk8uP1b9B6Ph2HDhmnXjVLKEVEf9Pn/KA0MrbQTi+3b1/5BDzryRinlnKgP+h7HdwYmMysE\nEvnylwc5Usfw4cPZuXMn5eXljry+Uip2NRr0IvKciBwQkY0h234pIrtFZG1guSbkZz8SkWIR2Soi\nV4Wr8Kbw+WDei+MDk5ltZsCAC7jsMme+24IHZLds2eLI6yulYldTUu/PwNX1bH/UGDM6sCwBEJFM\n4FvAiMBjnhIRb1sV21zBETd2MrPNdOvmTLcN6MgbpZRzGg16Y8wHQGkTn28W8HdjzGljzOfYOQfG\nt6K+VqkdcXMU2El29kinSiEtLY34+HgNeqVUu2tNP8adIrI+0LXTLbAtBfhXyD67AtvOIiJzRaRA\nRArCNld7zYgbG66pqSPC8zpNEBcXx9ChQzXolVLtrqVB/zSQBowG9gK/be4TGGPmG2OyjDFZvXr1\namEZDXvhsVIqiScY9AcPOteiB9t9o0MslVLtrUVBb4zZb4ypNnbu3wXUds/sBgaE7No/sK1d+Xww\naRL8cUl/DB5gI5DI7Nmp7V1KHcOHD2fbtm2cPHnS0TqUUrGlRUEvIn1D7s7GJinAIuBbItJBRFKB\nDGBl60psnvnz4bLLDB98YAAJLJvo2jXTsRE3QZmZmfj9fj777DNH61BKxZZGLzwiIi8COUBPEdkF\n/ALIEZHRgAG2A/8OYIzZJCIvY/tKqoA7jDHV4Sn9bD4f3P5dP8YEAz5oE+eff2V7lXFOoZObXXTR\nRQ5Xo5SKFY0GvTHmuno2P9vA/g8CD7amqJZ64QXw1wl5AxwG9jB16oVOlFTH0KFD8Xg8ekBWKdWu\nouvM2KqqMzYIF164AYCZM50P+g4dOpCWlqZBr5RqV1EV9GNS9uOlCvDj9cIzz8Ctt64HYNSoUc4W\nF6Bz3iil2lvUBL3PB/Me6o1BiPPCU0/B3Lmwfv16evXqRe/evZ0uEbAjb4qKiqisrHS6FKVUjIia\noM/Ph4pKj53uAOHwYbt9/fr1jBo1ChFp8PHtZcSIEVRVVemcN0qpdhM1QZ+TAwneKrxUkpBg71dV\nVbFx40ZGjx7tdHk1Lr74YgBWrVrlcCVKqVgRNUGfnQ15E3/F/T0fJy9PyM6GrVu3curUKcaMGeN0\neTUyMjLo0qULn3zyidOlKKViRNQEPQAHDsJ5XWrufvrppwAR1aL3eDyMHz+elSvb9TwypVQMa3Qc\nvVv4fJC76fdUmAQSciEvD9auXUuHDh0YNmyY0+XVMX78eB5++GFOnDhBp06dnC5HKRXloqZFn7/M\nT4WJpxovFRX24Oynn37KqFGjiIuLrO+zCRMmUF1dzZo1a5wuRSkVA6Im6HMuPEICFXg9fhISYNIk\nw5o1axg3bpzTpZ1l/Hg7B5x23yil2kPUBD0HD3IzzzNnynby8qBPn88pKyuLyKDv3bs3gwYN0gOy\nSql2EVl9Gi3k80HudzOoIJ2EfOGmX8Dq1asBGDt2rLPFnYMekFVKtZeoaNHbk6WEauKoqPKQnw8F\nBQXEx8czcqSzFxs5lwkTJrB9+3YOHDjgdClKqSgXFUFf38lSq1at4qKLLqJDhw5Ol1cv7adXSrWX\nqAj67GzIm/Jr7u/yO/LyhAkT/BQUFNSchRqJxo4di9fr1X56pVTYRUXQA3DwAJx3HgBbtmzh2LFj\nER30SUlJjBw5Ulv0Sqmwi56Dsav/u+Zkqe9/37aSL7nkEocra9iECRN4+eWX8fv9eDzR852rlIos\nUZEu+fnUOVnq3Xc/oUuXLlxwwQVOl9ag8ePHU1ZWRnFxsdOlKKWiWFQEfc4kY0+WkmoSEuDIkRWM\nHz8+4lvJEyZMANB+eqVUWEV2EjZR9qhy8sjl/qs/YtGiY5SUbCA7O9vpsho1fPhwkpOTtZ9eKRVW\nUdFHT1kZ2awg+yufkSeV+P1+VwS91+slKytLW/RKqbCKihY9ZWX2tmtXPvroI0TEFUEPtp9+7dq1\nnD592ulSlFJRKiqC3re8moe4D9+eQXz00UeMHDmSLl26NP7ACDBhwgQqKytZu3at06UopaKU67tu\nfD7InTeKCkYS/8NqPHEfc/PNNzpdVpOFniEbPDirlFJtyfUt+vx8qKgKznOznhMnypk4caLTZTVZ\n//796devn/bTK6XCxvVBb+e5qcZLJR7P+wCuCnrQmSyVUuHVaNCLyHMickBENoZs6y4i74hIUeC2\nW2C7iMjjIlIsIutFJOxzBGdnQ96//ZX7+TmXjH+f9PR0+vXrF+6XbVMTJkygqKhIZ7JUSoVFU1r0\nfwauPmPbfUCeMSYDyAvcB5gGZASWucDTbVNmw7LP28R/dnqcDZs+ZPLkye3xkm1q6tSpACxdutTh\nSpRS0ajRoDfGfACUnrF5FvB8YP154Msh218w1gqgq4j0batiz6msjE87deLo0aOuDPoxY8bQr18/\nFi9e7HQpSqko1NI++t7GmL2B9X1A78B6CvCvkP12BbadRUTmikiBiBQcPHiwhWUElJWRF5juwI1B\nLyJMnz6dt99+m4qKCqfLUUpFmVYfjDXGGMC04HHzjTFZxpisXr16ta6IsjLeOX2akSNH0qdPn9Y9\nl0OmT5/OsWPH+OCDD5wuRSkVZVoa9PuDXTKB2+BRxN3AgJD9+ge2hVX+zr68/8VxRoyYEu6XCpvc\n3Fw6duzIm2++6XQpSqko09KgXwTcHFi/GXgjZPtNgdE3lwBHQ7p4wsLng6uKvk6VqeK116bi84Xz\n1cKnU6dO5ObmsnjxYux/kpRSqm00ZXjli4APuEBEdonId4CHgSkiUgRcGbgPsATYBhQDC4DvhaXq\nEPn5UMm7QAeqqiaSnx/uVwyfGTNmsG3bNrZs2eJ0KUqpKNLoFAjGmOvO8aPcevY1wB2tLao5cnIA\nlgKT6NChU+C+O1177bUALF68mOHDhztcjVIqWrj+zNhevYoxFDF9SCp5efYEKrfq378/Y8aM0X56\npVSbcn3QB0Px91d7XR3yQdOnT+ejjz7i8OHDTpeilIoSrg/6RW+8QSYwpG/4z8tqDzNmzMDv9+tZ\nskqpNuPqoC8tLeWDDz9kFkCHDk6X0ybGjRtHnz599CxZpVSbcXXQv/nmm1RXV9v5Fzp2dLqcNuHx\neLj22mtZunQplZWVTpejlIoCrg76r371q7z+7LNcDFHTogfbT3/06FGWL1/udClKqSjg6qBPSkpi\n1qRJCERNix7gyiuvpEOHDjr6RinVJlwd9AAEL6odRUGfnJzM5MmTtZ9eKdUm3B/0p07Z2yjqugE7\n+qaoqIjPPvvM6VKUUi7n/qCPwhY91J4l+8YbbzSyp1JKNcz9QR+lLfpBgwaRnZ3NggUL8Pv9Tpej\nlHKx6An6KGvRA9x9990UFRXxz3/+0+lSlFIu5vqg963rxEPch29LN6dLaXNf/epXSUlJ4bHHHnO6\nFKWUi7k66H0+yP3FZfyM+8m9PcO1c9GfS3x8PHfeeSfvvvsuGzdudLocpZRLuTro8/OhotJDNXFU\nVIqr56I/lzlz5pCYmMjjjz/udClKKZdyddDn5EBCnB8vlSTEG1fPRX8uPXr04KabbuIvf/kLhw4d\ncrocpZQLuTros7Mhb95i7ufn5L1cGhXTFNfn7rvv5tSpU8yfP9/pUpRSLuTqoAfIHrCLH/Fw1IY8\nQGZmJlOnTuXJJ5+koqLC6XKUUi7j+qCnqsrexsc7W0eYzZs3jz179vDKK684XYpSymXcH/TBqXzj\nGr38ratdddVVXHDBBTz22GPYS/MqpVTTRE/QR3mL3uPxcM8997Bq1SpWrFjhdDlKKRdxf9AHu26i\nvEUPcNMPUPTKAAAMhklEQVRNN9G1a1c9gUop1SzuD/rKSvB47BLlkpKSmDNnDq+++io7d+50uhyl\nlEu4Px0rK6O+2ybUnXfeCcCjjz7qcCVKKbdwf9BXVcVU0A8cOJBbbrmFJ554gjVr1jhdjlLKBdwf\n9JWVMdE/H+qRRx7h/PPP59Zbb9ULiCulGtWqoBeR7SKyQUTWikhBYFt3EXlHRIoCt+GdVjLGum4A\nunbtytNPP826dev49a9/7XQ5SqkI1xYt+snGmNHGmKzA/fuAPGNMBpAXuB8+MdZ1EzRr1iy++c1v\ncv/991NYWOh0OUqpCBaOrptZwPOB9eeBL4fhNWrFYNdN0BNPPEHnzp259dZbqa6udrocpVSEam3Q\nG+D/RGS1iMwNbOttjNkbWN8H9G7lazQsBrtugnr16sXjjz/OJ598otMYK6XOqbVB/yVjzFhgGnCH\niEwM/aGx5+rXe76+iMwVkQIRKTh48GDLK4jRrpug6667junTp/OTn/yEkpISp8tRSkWgVgW9MWZ3\n4PYA8BowHtgvIn0BArcHzvHY+caYLGNMVq9evVpeRAx33QCICE8//TTx8fHMmTNH58FRSp2lxUEv\nIkki0jm4DkwFNgKLgJsDu90MvNHaIhsUw103Qf379+eRRx5h2bJlLFiwwOlylFIRpjUt+t7AchFZ\nB6wE3jLGLAUeBqaISBFwZeB++FRVxXSLPmjOnDlMnjyZH/zgB+zYscPpcpRSEaTFCWmM2QZcVM/2\nw0Bua4pqFm3RA7YLZ8GCBYwZM4YpU6bw/vvv07dvX6fLUkpFgOg4M1aDHoC0tDT++c9/smfPHq64\n4gr279/vdElKqQjg/qDXrps6LrvsMpYsWcLOnTvJzc2lVSOalFJRwf1Bry36s0ycOJHFixdTUlLC\nlVdeyeHDh50uSSnlIA36KHXFFVewaNEitm7dypQpUzhy5IjTJSmlHOL6oPd9MYKHSr6Bz+d0JZFn\nypQpvPbaa2zatImrrrqKo0ePOl2SUsoBrg56nw9yP1/AzwqvIzcXDft6TJs2jVdeeYW1a9cybdo0\njh075nRJSql25uqgz8+HChNPNV4qKux9dbYZM2bw0ksvsXLlSnJzcykqKnK6JKVUO3J10OfkQEKi\nF6/XkJBg76v6zZ49m1dffZWioiIuuugi/vCHP+D3+50uSynVDlwd9NnZkJcn3H+/kJdn76tzmzVr\nFhs3bmTSpEncddddTJkyRc+iVSoGuDrowYb7j36kId9UKSkpLFmyhAULFrBy5UpGjRrFn/70J50M\nTako5vqgV80nItx2221s2LCBrKws5syZw7XXXsuePXucLk0pFQYa9DFs8ODBvPvuuzz++OPk5+cz\ncuRI/vrXv2rfvVJRRoM+xnk8Hu666y7WrVvHsGHDuPHGGxk1ahTPPfcc779/moce0mGrSrmdBr0C\nICMjgw8//JC//OUvJCQk8J3vfIecnEH85CcPcsUVhzXslXIxDXpVw+v1csMNN7BmzRpuvfVdYAzG\n/JRTpwbyH/9xl16qUCmX0qBXZ7EHa3NJTPwnHs8GvN5vUlDwDBkZGXzta1/D5/PpKB2lXESDXtXL\nnqMADzwwkg8/fI4dO7Zz3333kZeXx6WXXsrQoUO59957yc/Pp6qqyulylVINkEhomWVlZZmCggKn\ny1BNUF5ezsKFC3n99dd57733qKiooFu3bkybNo2ZM2dy9dVX06VLF6fLVComiMhqY0xWo/tp0KuW\nOnbsGO+88w6LFi3irbfe4tChQ8TFxTFp0iRmzpzJjBkzSE1NdbpMpaKWBr1qV9XV1axYsYLFixez\naNEiNm/eDEBqaipZWVlcfPHFZGVlMXbsWG3xK9VGNOiVo4qLi3nzzTf5+OOPKSgo4PPPP6/52QUX\nXEBWVlbNF8Do0aNJSkpysFql3EmDXkWUQ4cOsXr1agoKCli1ahUFBQXs3r0bsCdtZWZmMmbMGDIy\nMkhLSyM9PZ20tDS6d++OiDhcvVKRSYNeRby9e/dSUFBQE/7r16+vCf+grl271oR+6G16ejp9+vTR\nLwEV0zTolSudPHmSbdu2UVJSQnFxMcXFxTXrO3bsoLq6umbfTp060b9/f/r27UufPn3o06dPves9\ne/bE49GRxCr6NDXo49qjGKWaKjExkREjRjBixIizflZZWcmOHTvqhP/u3bvZt28fq1evZt++fZSX\nl5/1OK/XS+/eveuEf48ePejWrVvN0rVr1zrrXbt2JS5O/zxUdNDfZOUa8fHxNd0251JeXs6+fftq\nlr1799ZZ37NnD6tXr6a0tJSKiooGX69z587n/BJITk4mOTmZpKSkBteTkpJISkrSLw3lqLD99onI\n1cDvAS/wJ2PMw+F6LaWCkpOTG/0yADDGcPLkSY4cOUJZWRlHjhypWULvh64XFxdTVlZGWVkZx48f\nb9Y0EB07djzriyAxMZGOHTs2aznXYxISEkhISCA+Pr7ObXBdu65iW1iCXkS8wJPAFGAXsEpEFhlj\nCsPxeko1l4jQqVMnOnXqREpKSrMfH/yiKC8v5/jx45SXl9dZb8q2U6dOUVZWxqlTp2qWkydP1qw3\n9j+O5vB6vfV+ATS0Hh8fT1xcXL2L1+s958+asni93jqLx+MJ2zaPx3PORURi4oB+uFr044FiY8w2\nABH5OzAL0KBXUSH0iyJc/H4/p0+frvNFUN9y8uRJKisrqaiooKKiok3Wjx8/TlVVVZOW6urqOutu\nIyINfhm0ZHnqqafIyclx+q3VCFfQpwD/Crm/C5gQptdSKip5PB4SExNJTEx0upQmM8bUCf7GviCq\nq6vx+/016+HYZozB7/e363Leeec5/VHU4dgRIhGZC8wFGDhwoFNlKKXakIjUdM+oyBGuIzS7gQEh\n9/sHttUwxsw3xmQZY7J69eoVpjKUUkqFK+hXARkikioiCcC3gEVhei2llFINCMv/r4wxVSJyJ/A2\ndnjlc8aYTeF4LaWUUg0LW0eaMWYJsCRcz6+UUqpp9CwKpZSKchr0SikV5TTolVIqymnQK6VUlIuI\n+ehF5CCwo4UP7wkcasNynKDvITLoe4gM+h6abpAxptETkSIi6FtDRAqaMvF+JNP3EBn0PUQGfQ9t\nT7tulFIqymnQK6VUlIuGoJ/vdAFtQN9DZND3EBn0PbQx1/fRK6WUalg0tOiVUko1wNVBLyJXi8hW\nESkWkfucrqclRGS7iGwQkbUiUuB0PU0hIs+JyAER2RiyrbuIvCMiRYHbbk7W2JhzvIdfisjuwGex\nVkSucbLGhojIABFZJiKFIrJJRO4JbHfN59DAe3DT59BRRFaKyLrAe/hVYHuqiHwSyKaXArP4Olen\nW7tuAtel/YyQ69IC17nturQish3IMsa4ZtywiEwEyoEXjDEjA9v+Gyg1xjwc+NLtZoz5LyfrbMg5\n3sMvgXJjzG+crK0pRKQv0NcYs0ZEOgOrgS8D/4ZLPocG3sM3cM/nIECSMaZcROKB5cA9wH8A/zDG\n/F1E/gisM8Y87VSdbm7R11yX1hhTAQSvS6vCzBjzAVB6xuZZwPOB9eexf7AR6xzvwTWMMXuNMWsC\n68eAzdhLeLrmc2jgPbiGscoDd+MDiwGuAF4JbHf8c3Bz0Nd3XVpX/ZIEGOD/RGR14PKKbtXbGLM3\nsL4P6O1kMa1wp4isD3TtRGy3RygRGQyMAT7BpZ/DGe8BXPQ5iIhXRNYCB4B3gBKgzBhTFdjF8Wxy\nc9BHiy8ZY8YC04A7Al0KrmZsf6Ab+wSfBtKA0cBe4LfOltM4EUkGXgXmGWO+CP2ZWz6Het6Dqz4H\nY0y1MWY09pKp44FhDpd0FjcHfaPXpXUDY8zuwO0B4DXsL4ob7Q/0uQb7Xg84XE+zGWP2B/5o/cAC\nIvyzCPQJvwosNMb8I7DZVZ9Dfe/BbZ9DkDGmDFgGZANdRSR4YSfHs8nNQe/669KKSFLgIBQikgRM\nBTY2/KiItQi4ObB+M/CGg7W0SDAgA2YTwZ9F4CDgs8BmY8zvQn7kms/hXO/BZZ9DLxHpGlhPxA4O\n2YwN/K8FdnP8c3DtqBuAwLCrx6i9Lu2DDpfULCIyBNuKB3tZx7+54T2IyItADnaGvv3AL4DXgZeB\ngdiZSL9hjInYg53neA852O4CA2wH/j2kvzuiiMiXgA+BDYA/sPnH2D5uV3wODbyH63DP53Ah9mCr\nF9twftkY8/8Cf9t/B7oDnwI3GGNOO1anm4NeKaVU49zcdaOUUqoJNOiVUirKadArpVSU06BXSqko\np0GvlFJRToNeKaWinAa9UkpFOQ16pZSKcv8fsdMRlhvDj4UAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "tags": [] }, "output_type": "display_data" } ], "source": [ "plt.plot(df['r'],df['v'],'r-')\n", "plt.plot(dff['r'],dff['v'],'b.')\n", "plt.plot(r,1/P(r),'k-')" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "1la5ZCwrEZYh" }, "source": [ "- - -" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "yHx9Utbqjz3i", "outputId": "934ca394-a06a-4e78-e394-8be55e1dc1b2" }, "outputs": [ { "data": { "text/plain": [ "6.601401719618527" ] }, "execution_count": 130, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "np.log(2)/0.105" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "BR6smicNjz3k" }, "source": [ "### Logarithmic interpolation\n", "See: https://stackoverflow.com/a/29359275/2268280" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "VSYozPLFEZYl" }, "source": [ "## Appendix\n", "Thecnical details of interpolation functions: [interpolation_details.ipynb](./interpolation_details.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "some *blue* text.\n", "\n", "Hola" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "colab": { "collapsed_sections": [ "HAld-e8YEZXu", "me-qxh8sEZXv", "QrN1hmlnEZXv", "WSrNnaKcEZX2", "FEj64uDmEZX8", "XFqacQP6EZX8", "-1r8xBk8EZX9", "IAYkvn-_EZYD" ], "include_colab_link": true, "name": "interpolation.ipynb", "provenance": [] }, "deepnote_notebook_id": "a29db036-b736-44e2-9604-7aba7d48298f", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.2" } }, "nbformat": 4, "nbformat_minor": 4 }