{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Get started with Math\n", "\n", "### Numerical differentiation\n", "\n", "#### Create an array of x and define the parabola function" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "dx = 0.5 # step length. Set a smaller value to get more points in the range and higher resolution.\n", "x = np.arange(-5,5,dx) # create an array of x from -5 to 5 with step 0.5\n", "\n", "# define a function for parabola in vertex form\n", "def parabola(x,xv,yv,a):\n", " y = a*(x-xv)**2+yv\n", " return y\n", "\n", "# Change parameters here\n", "xv = 0\n", "yv = -2\n", "a = 0.5\n", "\n", "y = parabola(x,xv,yv,a)\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(x,y)\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Define a function for calculating analytical derivative of parabola" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-5. -4.5 -4. -3.5 -3. -2.5 -2. -1.5 -1. -0.5 0. 0.5 1. 1.5\n", " 2. 2.5 3. 3.5 4. 4.5]\n" ] } ], "source": [ "# Calculate the analytical derivative of parabola in vertex form\n", "def d_parabola(x,xv,a):\n", " dy_dx = 2*a*(x-xv)\n", " return(dy_dx)\n", "\n", "dy_dx_acc = d_parabola(x,xv,a) # accurate derivative\n", "print(dy_dx_acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Numerically estimate the derivative" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-4.5 -4. -3.5 -3. -2.5 -2. -1.5 -1. -0.5 0. 0.5 1. 1.5 2.\n", " 2.5 3. 3.5 4. 4.5 5. ]\n", "[-4.75 -4.25 -3.75 -3.25 -2.75 -2.25 -1.75 -1.25 -0.75 -0.25 0.25 0.75\n", " 1.25 1.75 2.25 2.75 3.25 3.75 4.25 4.75]\n", "[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25\n", " 0.25 0.25 0.25 0.25 0.25 0.25]\n", "0.25\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEKCAYAAAASByJ7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XucznX+//HH22CRQ6uDDrS0HVBjMEauzWEUsYVNKmvbSlqSpm2/rQ5KtqLVuSQlRdpMEeVQOSUzKENmQokSGptqCxVGBjPz/v3xvsxPzOHCXPO+5rqe99ttbszMNZ/r9b6Mec37836/3i9jrUVERKSS7wBERCQyKCGIiAighCAiIkFKCCIiAighiIhIkBKCiIgASggiIhKkhCAiIoASgoiIBFX2HcCROPHEE23Dhg19h3FUdu/ezXHHHec7DG80fo0/lscPfl+DrKysbdbak0p7XIVKCA0bNiQzM9N3GEclPT2d5ORk32F4o/Fr/LE8fvD7GhhjNofyON0yEhERQAlBRESClBBERASoYGsIRdm/fz9btmwhNzfXdyglqlOnDuvWrfMdhjeRMP5q1apRv359qlSp4jUOkUhV4RPCli1bqFWrFg0bNsQY4zucYu3atYtatWr5DsMb3+O31rJ9+3a2bNlCo0aNvMUhEskq/C2j3NxcTjjhhIhOBuKfMYYTTjgh4meSIj5V+IQAKBlISPR9IhVWRgaMHOn+DKMKf8tIRCSqZWTAxRfDvn1QtSq8/z4EAmF5qqiYIVQk6enpLF269JiuUbNmzVIfc//99/P4448f0XVnzZrFww8/fFQxzZgxg7Vr1xa+P2zYMBYsWHBU1xKRg6Snu2SQn+/+TE8P21NphlDO0tPTqVmzJn/4wx98h/IreXl59OjRgx49ehzV18+YMYNu3brRtGlTAB588MGyDE8kdiUnu5nBgRlCGKudNUMoA5dffjmJiYmcd955jBs3rvDjc+fOpWXLliQkJNC9e3eys7MZO3YsTz31FM2bN2fJkiX07duXadOmFX7Ngd/+c3JyuPjii2nZsiXx8fHMnDmz1Dgeeughzj33XDp16sQXX3xR+PGNGzfStWtXEhMTadeuHZ9//jkAffv25fbbb6djx47cddddTJw4kZSUFHbs2EHDhg0pKCgA4JdffqFBgwbs37+fF198kaSkJBISEujVqxe//PILS5cuZdasWdxxxx00b96cjRs3Fo5rzpw5XH311YWxpKen0717dwDmz59PIBCgZcuWXHXVVeTk5BzDv4JIlAoE3G2i4cPDersIomyG8I9/wKpVZXvN5s3h6adLfsyECROoW7cue/bsISkpiV69elFQUED//v1ZvHgxjRo1YvPmzfzud79j4MCB1KxZk8GDBwMwfvz4Iq9ZrVo1pk+fTu3atdm2bRtt2rShR48exS6MZmVlMXnyZFauXEleXh4tW7YkMTERgAEDBjB27FjOPvtsli9fzqBBg1i4cCEA69evZ8GCBcTFxTFx4kTA1QwkJCSwaNEiOnbsyNtvv02XLl2oUqUKV1xxBf379wdg6NChjB8/nltvvZUePXrQrVs3rrzyyl/F1blzZ2666SZ2795NrVq1mDJlCr1792bbtm2MGDGCBQsWcNxxx/HII4/w5JNPMmzYsJD+XURiSiAQ1kRwQFQlBF+eeeYZpk+fDsDXX3/Nl19+ydatW2nfvn3hnve6dese0TWttdxzzz0sXryYSpUq8c033/D9999zyimnFPn4JUuW0LNnT2rUqAFQeOsnJyeHpUuXctVVVxU+du/evYV/v+qqq4iLizvser1792bKlCl07NiRyZMnM2jQIADWrFnD0KFD+fnnn8nJyaFLly4ljqNy5cp07dqVOXPmcO211/Luu+/y6KOPsmjRItauXcuFF14IwL59+wiUwze8SEWTkwNPPAGDB0O4D0uNqoRQ2m/y4ZCens6CBQvIyMigRo0aJCcnk5ubi7U2pG2OlStXLrw1Y61l3759AKSmprJ161aysrKoUqUKDRs2LHUPfVHPV1BQwPHHH8+qYqZOxR3H26NHD4YMGcKPP/5IVlYWF110EeBuM82YMYOEhAQmTpxIeggLXL1792bUqFGcfvrpJCUlUatWLay1dO7cmddff73UrxeJVe++C4MGwddfQ7Nm0LNneJ9PawjHaMeOHfz2t7+lRo0afP755yxbtgyAQCDAokWL+OqrrwD48ccfAahVqxa7du0q/PqGDRuSlZUFwMyZM9m/f3/hdU8++WSqVKlCWloamzeXfHpt+/btmT59Onv27GHXrl28/fbbANSuXZtGjRoxdepUwCWd1atXlzqumjVr0rp1a2677Ta6detWOIvYtWsXp556Kvv37yc1NbXw8YeO62DJycmsXr2aF198kd69ewPQpk0bPvzwQzZs2AC4dYr169eXGpdILPjf/6B3b+jWDWrVgg8+CH8yACWEY9a1a1fy8vJo1qwZ9913H23atAHgpJNOYty4cVxxxRUkJCRwww03ANC9e3emT59euKjcv39/Fi1aROvWrVm+fHnhb+zXXHMNmZmZtGrVitTUVBo3blxiHC1btqR37940b96cXr160a5du8LPpaamMn78eBISEjjvvPNCWqAG95v9pEmTCn+IAwwfPpwLLriAzp07/yqmP//5zzz22GO0aNGCjRs3/uo6cXFxdOnShTlz5tCtW7fC12fixIn06dOHZs2a0aZNm8LFbpFYVVAAL74ITZrAzJkwYgR8/DGU26ZEa22FeUtMTLSHWrt27WEfi0Q7d+70HYJXkTJ+X98vaWlpXp43UsT6+O3SpXbj3/5m7dKlxT5k3Tpr27WzFqxNTrb2iy/K7umBTBvCz1jNEEREwilYadxowgRXcXzI8RN798IDD0BCAqxZAxMmwMKFcM455R+qEoKISDgFK41NQcFhlcZLlrit7fffD1deCZ9/DjfcAL6O3VJCEBEJp2ClcUGlSoWVxj//DDfdBO3bQ24uzJkDqalw8sl+Q/WeEIwxccaYlcaYd3zHIiJS5oKVxtn9+mEXvM/ULQGaNIGXXnK1BWvWQNeuvoN0IqEO4TZgHVDbdyAiImERCJD5Ndw2MsA770DLlq7GoGVL34H9mtcZgjGmPnAZ8JLPOEREwiU/H555Bvr2TWLhQnjySVi+PPKSAfifITwN3AkU21vRGDMAGABQr169wypj69SpU2xBVCTJz89n165dpKamctFFF3HqqacCkJKSQkpKSql1BqXZvHkzy5cv/9VBcqEYOHAgXbt25fLLLy/x2ldffTXLly8/omt36tSp8AjsA+MPxaFj+fjjj3n99dd57LHHjuj5i5KbmxtSdXVZy8nJ8fK8kSJWx79hw3E88cS5fP55bRITf2Tw4E2cckouH3zgO7JihLI3NRxvQDfgueDfk4F3SvuaaKhD6NChg12xYkWZXz8tLc1edtllR/x1119/vZ06dWqJj/nqq6/seeedF/I18/LyDvvYkdQhHO1YQqE6BD9ibfy7d1t7113WxsVZe/LJ1r7+urULF6Z5i4cKUIdwIdDDGJMNTAYuMsZMKpdnLuN2dJMmTaJ169Y0b96cm266ifz8fPLz8+nbty/nn38+8fHxPPvss0ybNo3MzEyuueYamjdvzp49e0hOTiYzMxNwx0XcddddJCYm0qlTJz766COSk5M588wzmTVrFgDZ2dm0a9eOli1b0rJly8JmO3fffTdLliyhefPmPPXUU+Tn53PHHXeQlJREs2bNeOGFFwD3C0BKSgpNmzblsssu44cffihyTFlZWSQkJBAIBBgzZkzhx4u7bnp6Oh07duQvf/kL8fHxheMBV/E8b968wmv07duXN998M+SxpKen061bNwoKCmjYsCE///xz4bXOOussvv/+e7Zu3UqvXr1ISkoiKSmJDz/88Nj/YUWOwnvvQXw8PPKI20K6bh38+c/+tpIekVCyRrjfKM8ZwtKl1lav7lJ39eolVg6GYu3atbZbt25237591lprb775ZvvKK6/YzMxM26lTp8LH/fe//7XWHj5DOPh9wM6ePdtaa+3ll19uO3fubPft22dXrVplExISrLXW7t692+7Zs8daa+369evtgdfk0N+qX3jhBTt8+HBrrbW5ubk2MTHRbtq0yb755pu2U6dONi8vz37zzTe2Tp06Rc4Q4uPjbXp6urXW2sGDBxfOEIq7blpamq1Ro4bdtGlT4TWOO+44a621b731lu3Tp4+11tq9e/fa+vXr219++SXksRz8/t///nc7YcIEa621y5YtsxdffLG11to+ffrYJUuWWGut3bx5s23cuHGx/14+xNpvyIeKhfH/8IO1117rKo3POcfa4H+fQj5fA0KcIfheQyh/RbWjO4Zjl99//32ysrJISkoCYM+ePZx88sl0796dTZs2ceutt3LZZZeFdLRz1apV6RrcfxYfH89vfvMbqlSpQnx8PNnZ2QDs37+flJQUVq1aRVxcXLEHws2fP59PPvmksPnOjh07+PLLL1m8eDF9+vQhLi6O0047rfAU04Pt2LGDn3/+mQ4dOgBw7bXXMmfOnBKvW7VqVVq3bl143PfB/vjHP3Lrrbeyd+9e5s6dS/v27alevTo7duwIaSwH6927Nw8++CA33HADkydPLjxnacGCBb9q4blz50527dpFrVrFLk+JhCYjw/2cSE4u8meFtfCf/8A//wk7d8KwYTBkCFSrVu6RHrOISAjW2nQgvVyerIzb0Vlruf766xk5cuRhn1u9ejXz5s1jzJgxpKam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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dx = 0.5 # set a small increment\n", "x1 = x+dx # an array with increment\n", "print(x1)\n", "\n", "y1 = parabola(x1,xv,yv,a) # calculate y(x+dx)\n", "dy_dx_est = (y1-y)/dx # estimated derivative [y(x+dx)-y(x)]/dx\n", "print(dy_dx_est)\n", "\n", "error = abs(dy_dx_est-dy_dx_acc) # absolute error\n", "print(error)\n", "error_mean = np.mean(error) # mean absolute error\n", "print(error_mean)\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(x,dy_dx_acc,'b')\n", "plt.plot(x,dy_dx_est,'r.')\n", "plt.xlabel('x')\n", "plt.ylabel('dy/dx')\n", "plt.legend(['actual derivative','estimated derivative'])\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create a generic function for calculating numerical differentiation" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEKCAYAAAASByJ7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XucznX+//HH22CRQ6uDDrS0HVBjMEauzWEUsYVNKmvbSlqSpm2/rQ5KtqLVuSQlRdpMEeVQOSUzKENmQokSGptqCxVGBjPz/v3xvsxPzOHCXPO+5rqe99ttbszMNZ/r9b6Mec37836/3i9jrUVERKSS7wBERCQyKCGIiAighCAiIkFKCCIiAighiIhIkBKCiIgASggiIhKkhCAiIoASgoiIBFX2HcCROPHEE23Dhg19h3FUdu/ezXHHHec7DG80fo0/lscPfl+DrKysbdbak0p7XIVKCA0bNiQzM9N3GEclPT2d5ORk32F4o/Fr/LE8fvD7GhhjNofyON0yEhERQAlBRESClBBERASoYGsIRdm/fz9btmwhNzfXdyglqlOnDuvWrfMdhjeRMP5q1apRv359qlSp4jUOkUhV4RPCli1bqFWrFg0bNsQY4zucYu3atYtatWr5DsMb3+O31rJ9+3a2bNlCo0aNvMUhEskq/C2j3NxcTjjhhIhOBuKfMYYTTjgh4meSIj5V+IQAKBlISPR9IhVWRgaMHOn+DKMKf8tIRCSqZWTAxRfDvn1QtSq8/z4EAmF5qqiYIVQk6enpLF269JiuUbNmzVIfc//99/P4448f0XVnzZrFww8/fFQxzZgxg7Vr1xa+P2zYMBYsWHBU1xKRg6Snu2SQn+/+TE8P21NphlDO0tPTqVmzJn/4wx98h/IreXl59OjRgx49ehzV18+YMYNu3brRtGlTAB588MGyDE8kdiUnu5nBgRlCGKudNUMoA5dffjmJiYmcd955jBs3rvDjc+fOpWXLliQkJNC9e3eys7MZO3YsTz31FM2bN2fJkiX07duXadOmFX7Ngd/+c3JyuPjii2nZsiXx8fHMnDmz1Dgeeughzj33XDp16sQXX3xR+PGNGzfStWtXEhMTadeuHZ9//jkAffv25fbbb6djx47cddddTJw4kZSUFHbs2EHDhg0pKCgA4JdffqFBgwbs37+fF198kaSkJBISEujVqxe//PILS5cuZdasWdxxxx00b96cjRs3Fo5rzpw5XH311YWxpKen0717dwDmz59PIBCgZcuWXHXVVeTk5BzDv4JIlAoE3G2i4cPDersIomyG8I9/wKpVZXvN5s3h6adLfsyECROoW7cue/bsISkpiV69elFQUED//v1ZvHgxjRo1YvPmzfzud79j4MCB1KxZk8GDBwMwfvz4Iq9ZrVo1pk+fTu3atdm2bRtt2rShR48exS6MZmVlMXnyZFauXEleXh4tW7YkMTERgAEDBjB27FjOPvtsli9fzqBBg1i4cCEA69evZ8GCBcTFxTFx4kTA1QwkJCSwaNEiOnbsyNtvv02XLl2oUqUKV1xxBf379wdg6NChjB8/nltvvZUePXrQrVs3rrzyyl/F1blzZ2666SZ2795NrVq1mDJlCr1792bbtm2MGDGCBQsWcNxxx/HII4/w5JNPMmzYsJD+XURiSiAQ1kRwQFQlBF+eeeYZpk+fDsDXX3/Nl19+ydatW2nfvn3hnve6dese0TWttdxzzz0sXryYSpUq8c033/D9999zyimnFPn4JUuW0LNnT2rUqAFQeOsnJyeHpUuXctVVVxU+du/evYV/v+qqq4iLizvser1792bKlCl07NiRyZMnM2jQIADWrFnD0KFD+fnnn8nJyaFLly4ljqNy5cp07dqVOXPmcO211/Luu+/y6KOPsmjRItauXcuFF14IwL59+wiUwze8SEWTkwNPPAGDB0O4D0uNqoRQ2m/y4ZCens6CBQvIyMigRo0aJCcnk5ubi7U2pG2OlStXLrw1Y61l3759AKSmprJ161aysrKoUqUKDRs2LHUPfVHPV1BQwPHHH8+qYqZOxR3H26NHD4YMGcKPP/5IVlYWF110EeBuM82YMYOEhAQmTpxIeggLXL1792bUqFGcfvrpJCUlUatWLay1dO7cmddff73UrxeJVe++C4MGwddfQ7Nm0LNneJ9PawjHaMeOHfz2t7+lRo0afP755yxbtgyAQCDAokWL+OqrrwD48ccfAahVqxa7du0q/PqGDRuSlZUFwMyZM9m/f3/hdU8++WSqVKlCWloamzeXfHpt+/btmT59Onv27GHXrl28/fbbANSuXZtGjRoxdepUwCWd1atXlzqumjVr0rp1a2677Ta6detWOIvYtWsXp556Kvv37yc1NbXw8YeO62DJycmsXr2aF198kd69ewPQpk0bPvzwQzZs2AC4dYr169eXGpdILPjf/6B3b+jWDWrVgg8+CH8yACWEY9a1a1fy8vJo1qwZ9913H23atAHgpJNOYty4cVxxxRUkJCRwww03ANC9e3emT59euKjcv39/Fi1aROvWrVm+fHnhb+zXXHMNmZmZtGrVitTUVBo3blxiHC1btqR37940b96cXr160a5du8LPpaamMn78eBISEjjvvPNCWqAG95v9pEmTCn+IAwwfPpwLLriAzp07/yqmP//5zzz22GO0aNGCjRs3/uo6cXFxdOnShTlz5tCtW7fC12fixIn06dOHZs2a0aZNm8LFbpFYVVAAL74ITZrAzJkwYgR8/DGU26ZEa22FeUtMTLSHWrt27WEfi0Q7d+70HYJXkTJ+X98vaWlpXp43UsT6+O3SpXbj3/5m7dKlxT5k3Tpr27WzFqxNTrb2iy/K7umBTBvCz1jNEEREwilYadxowgRXcXzI8RN798IDD0BCAqxZAxMmwMKFcM455R+qEoKISDgFK41NQcFhlcZLlrit7fffD1deCZ9/DjfcAL6O3VJCEBEJp2ClcUGlSoWVxj//DDfdBO3bQ24uzJkDqalw8sl+Q/WeEIwxccaYlcaYd3zHIiJS5oKVxtn9+mEXvM/ULQGaNIGXXnK1BWvWQNeuvoN0IqEO4TZgHVDbdyAiImERCJD5Ndw2MsA770DLlq7GoGVL34H9mtcZgjGmPnAZ8JLPOEREwiU/H555Bvr2TWLhQnjySVi+PPKSAfifITwN3AkU21vRGDMAGABQr169wypj69SpU2xBVCTJz89n165dpKamctFFF3HqqacCkJKSQkpKSql1BqXZvHkzy5cv/9VBcqEYOHAgXbt25fLLLy/x2ldffTXLly8/omt36tSp8AjsA+MPxaFj+fjjj3n99dd57LHHjuj5i5KbmxtSdXVZy8nJ8fK8kSJWx79hw3E88cS5fP55bRITf2Tw4E2cckouH3zgO7JihLI3NRxvQDfgueDfk4F3SvuaaKhD6NChg12xYkWZXz8tLc1edtllR/x1119/vZ06dWqJj/nqq6/seeedF/I18/LyDvvYkdQhHO1YQqE6BD9ibfy7d1t7113WxsVZe/LJ1r7+urULF6Z5i4cKUIdwIdDDGJMNTAYuMsZMKpdnLuN2dJMmTaJ169Y0b96cm266ifz8fPLz8+nbty/nn38+8fHxPPvss0ybNo3MzEyuueYamjdvzp49e0hOTiYzMxNwx0XcddddJCYm0qlTJz766COSk5M588wzmTVrFgDZ2dm0a9eOli1b0rJly8JmO3fffTdLliyhefPmPPXUU+Tn53PHHXeQlJREs2bNeOGFFwD3C0BKSgpNmzblsssu44cffihyTFlZWSQkJBAIBBgzZkzhx4u7bnp6Oh07duQvf/kL8fHxheMBV/E8b968wmv07duXN998M+SxpKen061bNwoKCmjYsCE///xz4bXOOussvv/+e7Zu3UqvXr1ISkoiKSmJDz/88Nj/YUWOwnvvQXw8PPKI20K6bh38+c/+tpIekVCyRrjfKM8ZwtKl1lav7lJ39eolVg6GYu3atbZbt25237591lprb775ZvvKK6/YzMxM26lTp8LH/fe//7XWHj5DOPh9wM6ePdtaa+3ll19uO3fubPft22dXrVplExISrLXW7t692+7Zs8daa+369evtgdfk0N+qX3jhBTt8+HBrrbW5ubk2MTHRbtq0yb755pu2U6dONi8vz37zzTe2Tp06Rc4Q4uPjbXp6urXW2sGDBxfOEIq7blpamq1Ro4bdtGlT4TWOO+44a621b731lu3Tp4+11tq9e/fa+vXr219++SXksRz8/t///nc7YcIEa621y5YtsxdffLG11to+ffrYJUuWWGut3bx5s23cuHGx/14+xNpvyIeKhfH/8IO1117rKo3POcfa4H+fQj5fA0KcIfheQyh/RbWjO4Zjl99//32ysrJISkoCYM+ePZx88sl0796dTZs2ceutt3LZZZeFdLRz1apV6RrcfxYfH89vfvMbqlSpQnx8PNnZ2QDs37+flJQUVq1aRVxcXLEHws2fP59PPvmksPnOjh07+PLLL1m8eDF9+vQhLi6O0047rfAU04Pt2LGDn3/+mQ4dOgBw7bXXMmfOnBKvW7VqVVq3bl143PfB/vjHP3Lrrbeyd+9e5s6dS/v27alevTo7duwIaSwH6927Nw8++CA33HADkydPLjxnacGCBb9q4blz50527dpFrVrFLk+JhCYjw/2cSE4u8meFtfCf/8A//wk7d8KwYTBkCFSrVu6RHrOISAjW2nQgvVyerIzb0Vlruf766xk5cuRhn1u9ejXz5s1jzJgxpKam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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Numerically estimate the derivative of a given function.\n", "# x- input array, dx- increment, func- name of the given function, *args- all other input arguments of func except x.\n", "# A function name can be an input argument of another function. *args are passed on to func inside the num_diff function.\n", "def num_diff(x,dx,func,*args):\n", " dy_dx = (func(x+dx,*args)-func(x,*args))/dx\n", " return dy_dx\n", "\n", "# In following example, func = parabola, *args = (xv,yx,a).\n", "dy_dx_est = num_diff(x,dx,parabola,xv,yv,a) #estimated derivative\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(x,dy_dx_acc,'b')\n", "plt.plot(x,dy_dx_est,'r.')\n", "plt.xlabel('x')\n", "plt.ylabel('dy/dx')\n", "plt.legend(['actual derivative','estimated derivative'])\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Calculate the numerical differential error vs. increment" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dx = np.arange(0.01,0.5,0.03)\n", "err = [] # create an empty list\n", "\n", "# loop over all elements in dx. One element from dx is assigned to h in each iteration\n", "for h in dx:\n", " dy_dx_est = num_diff(x,h,parabola,xv,yv,a) # estimated derivative\n", " err.append( np.mean(abs(dy_dx_est-dy_dx_acc)) ) # mean absolute error calculated in each iteration is appended to the list of err\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(dx,err,'r.')\n", "plt.xlabel('dx')\n", "plt.ylabel('mean absolute error')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numerical differentiation for sine function" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# define a function for sine. amp - amplitude, omega - angular speed, phi - phase\n", "def sine(x,amp,omega,phi):\n", " y = amp*np.sin(omega*x+phi)\n", " return y\n", "\n", "amp = 2\n", "omega = np.pi/4\n", "phi = -np.pi/2\n", "\n", "x = np.arange(-10,10,0.1)\n", "y = sine(x,amp,omega,phi)\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(x,y)\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEKCAYAAAAFJbKyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd8VFXax78nPUDoVREBRZpASAhwAWEAKSpiZQELsNiw+7q66rvNd9W17K6yrq5iQSysoBRFpSgDIyUhkCCIAaUoIEWqpEBIm/P+cSdhuEySmcnM3Dsz5/v55AOZzNzzO+fMveec53nOc4SUEoVCoVAovCXGbAEKhUKhCC/UwKFQKBQKn1ADh0KhUCh8Qg0cCoVCofAJNXAoFAqFwifUwKFQKBQKn1ADh0KhUCh8Qg0cCoVCofAJNXAoFAqFwifizBYQDJo3by7bt2/v12dPnjxJ/fr1AysoAChdvmNVbUqXbyhdvuOPttzc3KNSyhZevVlKGXE/6enp0l9Wrlzp92eDidLlO1bVpnT5htLlO/5oA3Kkl89YZapSKBQKhU+ogUOhUCgUPqEGDoVCoVD4hBo4FAqFQuETauBQKBQKhU+ogUOhUCgUPqEGDoVCoVD4RERuAFRUQ1YWOBzQrBny6DG+a27DUaIREwN9+0KfPiCE2SIVASErC957D4CDIyZhP6Wxfz9ceinYbGDRfWsKX3G7p0sOHGPH+TYuvUMLerFq4IgW3ngD7rsPysuRUuJE0JlYXuZV3uJOAC6/HF55BTp3Nlmrwn8qB4y330aWlQHQ9PW3KeQ2PmESj6Nx3nnwz3/ChAkma1XUDcM9HYfgEmIpKXkVLr0kqEWbaqoSQswUQhwWQnxXzd9tQoh8IcQm18+fQ60x7MnKgrvvhnvugbIykBKAWCTxlPNG7D0U3HI3cx7MYsMG6N8fNmwwWbPCP954A4YMgRkzkGVlCEAACZQxjdfJjBvMlgfeoE0bmDgR/u//zBas8Ita7unEh++jYV5eUCWYveKYBbwCvFfDe1ZLKceERk6EkZUFw4fD6dNVXy7p+pNEf6hQUUHK7BmMT3qXwR/YGfA7jREjYM0a3ayhCBOysuDee6G8vOqlyr6usj6Wl3Ppa/eRvaIHt7+t8eSTkJgIjz8eYq0K//Hynm68aVNQZZi64pBSrgKOm6khonnvvaovmAQqgHLiOH3DzYj4+DMODSmhpIQ2M54k68UskpJg/Hg4dcpM8QqvycqCJ5+EigpAf4CUE8v+vtcirr0WYmPPvLe8nNinnuTt27OYMAH+8AdYvdoU1Qp/8HBPV4g4nDe57umYGEhM5ERqalBlhENUlSaE2CyEWCKE6G62mLAhKwtmzqyalVSIeN4U0/jhjVUkz/sAvv4a7rpLn3LGxIDTCcuX0/rm4Sx6IoutW+GRR0yug6J2Kmegy5eDy3dVRhwLhv2HttkLYeFC+M9/oHKiICUsX07MiOG8dVsWHTvCTTfBiRNmV0RRK273tATKiGdOyjRKvlxF7GzXPf3002C3U9A9uI9KIaWs/V3BFCBEe+BzKeU5hhEhREPAKaUsEkJcCfxLStmpmuvcCbqXt1WrVulz5szxS09RURENGjTw67PBxBddDfPyaD9rFk1ycxGuh8kM7mL9lN8zefKemt8rBAfHjOGhxFeZN+8CXn89h86diwKiK9RYVVsgdXV68UXO+/zzqr77On4Y/276v0x7N5aEhDP3dnX9/NmVf+Gee9IYN24ft966OeLbK5CEUld197R89Q66dSsIiLahQ4fmSin7ePVmb9PoBusHaA985+V7dwPNa3tfVKdVz8yUMjlZypgYKUE6Y2JksUiW17bKlKdO1fCZhAQp9fmolImJsvDLTNmihZSXXSal0xkAXSZgVW0B02Xot7K4RNmfTPnll969XyYmSpmZKadOlTI+XsoPPlgXGF0BJuL7sTY83NMnSZZ/vSIzoNqIlLTqQojWQuiGeCFEX3TT2jFzVVkchwNKS3XTU0wMB7pdzlBpZ8K/NJKTq/mMpsHUqWd8HuXlNMhx8PTTuv37009DJV7hEw7HGb+GEMzit7S4Wg9u8IiHfsah93NiIrz5ZoeQyFb4iOGe/rbF5VyVaOe2t4K/X6M6zA7H/RDIAjoLIfYJIW4TQkwTQkxzveVG4DshxGbgZWCCa2RUVEezZrrPIiYGmZjI7wqe5HSqxm9+U8vnJk2CpCTdkRobC3v3clu3LC6+GJ55pspVorAKWVmwdy/ExUFsLOWxSbxdPom//a2Wz3no5za7s3joIVi1qgXffx8S9QpvMfSzMyGRuw89Sf//0ffjmIa3S5Nw+olaU5X7kjYuTubcNUOClHPmeFlIZqaU06bpJozYWCmTk+XC32dKkHL58jroMgmraquzrsp+jo2VMiFBlt42TY5MyZRXX+3D5w39fPyLTJmYWC6nTKmbtGAQsf1YG4Z+ltOmyWfGZMqkJCl/+SXw2ogUU5XCR9yWtFJK1n1+jIsughtv9PLzmgbt2ukmjIoKKC1lTAMHbdrAs88GU7jCJyr7uaICKipY/0s7vizUeOIJLz/voZ+bbHZw5ZUH+eAD+PnnYIpXeI2hn/Mbt+PJZRpTp0KrVuZKUwNHpGBc0sYl8MF+Gw8/fHYYf63YbJCQoJu7hCCuVTPuvx/sdpQZwyq4myMTEvjXZhsDBujjgdcY+plmzfjNb/ZRUaFvQFdYALd+JiGBjw/bKC+H3/3ObGFq4IgMKmP533xTd0bccQfPXW5nS32NW27x8VqaBtOn66ON0wkPPcRdPbOIi1MPFEuQlQUPPaTPQmNi+H7adD7epzFtWu0fPQsP/XzJsVxGj4a339YzWShMxNDP5f+czpPLNEaOhI4dzRanBo7IwLCkLW7RjmdWaNx0EzRs6Mf1jh3THyZOJ5SW0vRbB9dfD+++q29aVZiIe4SNlGxafoymTX0wR7pj6OfGmzYxbRocPAiffx5o4QqfMPTz9qxj7N+P7xOEIKEGjkig0uwQGwsJCXxx0kZxsb4xPBDXw2bjrrvg+HGYPz+AuhW+49Y3Mj6B/2y1MXky1Ydae3ktEhI4kZrKlVfC+eer1aXpGPpm5i4b550HYyyStc/sJIeKQDF5sv7vpEn84380evaE9HQ/r6VpulPDlecfh4OhQ6B9e43334ebbw6UaIVPVJ69MH06HDvG/KM21ryo8dpUP69n6OfGGzYQtyGLyZM1nnsOfvkFWrcOoH6Fdxj6+XhPG9Ov0Xj0Ud2FaQUsIkPhN5X+jdJSSEhg37BJZGfD88/X8bqVnlbXtUVCAo+Ns3PvBxqHDpkf1RF1GPoZu51/PqxPEOqUxditnzuUlMDs2dz+lp2/OTXmzoUHHwyIeoW3eOjn/+ZqVFRYa8KmTFXhjrt/o7SUH2Y4EEI/byHQ176uiQOnE+bODcC1Fb5h6Itj8x2sW6cnKAzUtYXL19Fhj4PUVJg9OwDXVviGoZ9xOJg9G3r0sNYxB2rgCHfcbd4JCby5w8bgwXDBBYG9NgkJtBpvo1cv9UAxBUNfLCqwAQGaILiu7XSFfWKzcfPN+oFeO3YE4PoK7zH08/5ONtats9ZqA9TAEf5U2qmfeoof37Azd68WmIeJ4drY7aDp116/Xt8yogghhr6Ynq0xaJC+jy9Q1949dWpVP1ceKztvXgCur/AeQz/P/lE3JVrtmF81cIQzWVlntnQ/8QQf7NIQAq69NoBlaJo+C3I4ICuL66/XX164MIBlKGqn0mFqs7Grpca331LVFwFB09hbOa199lna/pxF376wYEEAy1DUjls/o2ksWKAHuVx4odnCzkY5x8MVD060hQs1BgwIsOPaUE4nu51LL9VYuFA5TkOGoQ/WTbUDGtddF9hiGublwaOPVpVz72Q7k1/X2Ls3QCsbRc0Y+vnIHDvZ2RrPPGO2sHNRK45wxeBEO77AwebNBPxh4slZd911err1I0cCXJbCM4Y+KPjMQe/e0L59YItpvGnTWeVckewA4JNPAluOohoM/bzzLQcQhHs6AKiBI1wxONGWnrYBQfiSedgMeP31+obWRYsCXJbCM2594IxP4P29tsCaqVycSE09q69bjLPRrZsyS4YMw73234M2unSBrl3NFnYuylQVrrhv3rLZePN/NS69NAh5bAzloGn0krrp4vPPlbkqJLj1wReFNrKe1Xh9bOCLKeje/Zy+vuYaeOEF/Uzyxo0DX6bCDbd+Pplh4/UrNB5+2GxRnlErjnDFzYmW301jzRq46qoglaVpVOXsfvZZxLosrrwSli+H0lIRpEIVwDkBELN+0GjbVo/rDwqGYIgrr9QtJ199FaTyFDqGfl5WoFFeHsR7uo6oFUc4YnCibfyjnfJyjSuvDF2ZN/+fndeLNLZsacTIkUEsN5oxtHnZUjtffaWHRItgjdeGMvsvs9OkicbixTBuXJDKjHY8BLosXqzRqJGPqfJDiFpxhCPGXcQLHDRqBAMGhK7MvqccJCbCunXNglholGNo873vOSgsDPIs1FBm3BoHo0bB4sW6X0sRBAxtLlc6WLwYRo2C+HizxXlGDRzhiGG3+KyfbIwaFeQEaAbHXcJIGzYbZGergSNoGNp88SkbCQkwbFjoysRm46qr4PBhyM0NYrnRjKHNt59n4+BBgmtBqCPKVBWOuDnRdrW18cUkjZmjQ1dmpeP0iitg2bJ67NljvQ1KEYExAOIujcsugwYNQlcmmsaoi/U/ffUVZGQEsexoxdDmn6zS7VOjRpkrqybUiiPcMDjRPjuqf8mGDw9B2QbHaWWZK1aEoOxow9DPhy/S2LIFLr88BGUbgiFa7MyiVy/92aYIAobd4na7ntDQyint1YojnPDgRFuxQuPii0O0s9dQfvfldpo0SWfFigR++9sQlB8teOjnlXv1CUJQzVQ1aPjtWDuPfaJx+jQkJYVIQzRgaOfSJXbWrNG44w6zhdWMqSsOIcRMIcRhIcR31fxdCCFeFkLsFEJ8K4RIC7VGS2FwolWscPD11yFabXgoX3ztoHfvX7Hb9aPOFQHCw259ux0aNYK0UN0BBg2jEh2UlOjPOUUAMbTz/tkOiotDeE/7idmmqllATdb5K4BOrp87gddCoMm6GJxo21raKCwM4SzUg+O0d+8THDwIP/wQIg3RgId2XrEChgwJ4QlwBg0X3GojNlaZqwKOoZ2Xl9uIiYHBg80WVjOmmqqklKuEEO1reMs1wHtSSgmsE0I0FkK0kVIeDIlAq2Fwoi1aqZsvhg41p3w0jbSf1gH6y126hEhHpGNo5z3naezaBQ88YJ6G+ppGRobyZwUcQzu/93uN9HTr79K3uo/jfOBnt9/3uV6LzoED9C+aa1fQij9Bz57QooU55QO0aXOaCy/UHyj33htCHZGOez+/o78UspWlBw2gm0+eew4KCyElJcRaIhlXO588CevWwSOPmC2odqw+cHjaH+vRmi6EuBPdnEWrVq1wOBx+FVhUVOT3Z4NJUVERG199lcabNnEiNZWjnXqwevVAxo49gMOxK+R6Gubl0XjTJuI7d6Zr18589VVzVqxYS4zZxk83rNyXNemqbNsTqakUdO/Ohx92oUmTphw5kkkwq+NJl7uWpk0HUlGRyiuvfIumHQ+eEC90WYG66jL28/r1TSkv70mzZptxOH41VVutSClN/QHaA99V87cZwES3338A2tR2zfT0dOkvK1eu9PuzwST3lVekTE6WMjZWyuRkmfPvTAlSfvaZCWIyM6u0lCcmyqV/0bXk5pqgpQas2pc16nJrW5mcLJ1rM2WbNlJOmGCCLoOW0yszZWKilA8/HHwtNeqyCHXSZWhbmZkpH31UyoQEKU+eNEcbkCO9fG5baH7okUXAJFd0VX8gX0apf8N4VsKx+Q5iY01yorlFgoiyMrQSB6Ds3wHBEGVzZJ6DgwdNMFN50JKY5WDgQOUgDwjVRM5pGtSrZ7a42jE7HPdDIAvoLITYJ4S4TQgxTQgxzfWWxcCPwE7gTeAek6SajvGshHlHbWRkQMOGJohxT3kSH0/DsTa6dlUPlIBgiLJZJWyASeGZHqK7hg2DzZvh6FET9EQShrYtSLPxzTcmTRD8wOyoqom1/F0CyuXK2WclnMywMXO0xmOPmSTGLRJkc8OGpGkaw4bBO++c2bOm8BNDlM2H/9C48ELo0MF8LWgalc+1lStVttw6YWhb+y8aUqqBQxEMXNEXa7/UV7g2m/laClwOOJsNXn0VvvkG+vUzUVck4GpbKfUjeq+8Mohp1L3UUkmfPropZfVqNXDUGbe2XfU/+o78vn1N1uQlVvdxKDywdi3ExED//mYrOcPAgfq/a9eaqyOS2LFDP9e9sm2tQHy8PjFQ/RxY1q7VB41wWa2rgSMcyMqi3ezZVfke1q7V92+YHkvvpqtNG92coh4odaAysaFbP4NFBg43bQMHwqZN+n4OhZ+4tefJk/pK3RL97CXKVGV1XEnQOpSUwOzZlC+zs26dZn5SQYMu7HYGDdJYtkzPW2WaaSVc8ZDYcM0ajaZNLbAj36DtqmfsPO3UyM4OUbbeSMPQnt+/oJ/gOWiQ2cK8R604rI4rbE84nVBayqG5Dk6etMDsxKALhx6qefgw7Ar9fsTwx0N45tq1+qmOpm+qNGhLPeFACLW69BtDe+Z/6gCse0ysJ8z+SipqwxW254yJgYQE1sbbAAsMHAZd2GzKz1EXDOGZJ1Jt/PCDBfoZztGWNNpGjx6qn/3G0J6fFdro3h2aNDFbmPeogcPquML2dk+dCnY78w9oXHABXHCBtXShaXTrpidnUw8UP6gMz3zqKbDbWVWmTz8tMXAYtKFpDByo51WqqDBbXBji1p7Or+y8871mjX72AeXjCAc0jb0lJXTor7FmjYVSLrt0dXStsWNi9HtCDRx+4haeufYxPYKpTx+TNVViCMsdOBBeew22bIHUVBN1hSuu9szbAvn5Fpkg+IBacVgdV/RFw7w89uyBAwewnhPNLUJk0CDYuhWOhy4HXmRgiKhas0YfNJKTTdbljqGfQdep8AEP/QwWvKdrQa04rIxb9EWvuDiWH0kDrLWsbZiXB48+WhUhcsU/7PwBjcxMGDPGbHVhgiHKpmSxnZwcLbTnb9SGQWO75XbOP19j7Vq47z6zxYUJHiLn1q7VaN3apMwAdUCtOKyMIZng6aUOUlKgRw+zhZ3BmHyx+xEHcXHKXOUThiibg3MclJZazHzh4djggQNVP/tENZFzAweGX/i6GjisjCGZ4LyjNvr314MxrIIx+WLCSBtpaeqB4hOGKJs1sTZAD8W1DB4SHg4cCD//DHv3mi0uTDC04ZHuNnbvttgEwUuUqcrKuCVCy4pvwuzfazw5yWxRZ+OefLEyEd6gQXreqpISSEw0W2EYYEh499GzGpdcAi1bmi3MDQ8JDwe5+nbtWmjXzkxxYYKhDVf+rAcbhJt/A9TAYX1c0RdZf9+MlBabhVZiiLgZMABefFFPS6ESHnqJW2LDdevgqqvMFuQBQz/37KknPMzKgok15rlWVOHWhlkf6YkNwzEqTZmqwoTvv2+IEJCRYbaS2qkcLNavN1dHOLJ7t57YMBwG3Lg4PfJL9bN/rF8P6el62HW4oQYOq2II29u2LYUuXaBRI5N1VYeb3vPPhzZtIDvbbFFhgKGfK9vM0um13TT366cn6CspMVtUGODWbmVlsHFjeEwQPKFMVVbEELYnl9vZti2da64xW1g1GPQKu51+/TQ1E60ND+GZ69drJCVZK3LuLAyaR//Bzt9LNTZvtvhgZzaGdtv1qp3Tp7WwbTO14rAihrC9E584OHEiwbqzEw9hhv366edJqI2ANeCh3bKzLW6+MGhOK3AAylxVKx7uaQjfFYcaOKyIIWwvN8UGWPhL5iFUs3ImpR4oNWBot/JBNjZutPjM3aC50TU2ZZb0BkO7fVVmo2VLuPBCs4X5hzJVWRFD2N7ijzUSEiro0cNCGzjc8RCq2adA39S0fj2MHm22QItiaLdvEzVOn7bwBAHO0Sw03dyiBo5aMLTbf6fq7RZuG/8qUQOHVXEL21v/KHTqVER8vFU945wTqtmwIXTtqh4oteLWbtmv6S9ZesUB5/R1v37w6ae6WbJpUxN1WR1Xu+Xnw/ffw803my3If5SpyuKUlUFuLnTtWmC2FJ/p109fcUhptpLwYP16aNEC2rc3W4lvVK6QNmwwV0e4UNlOll5Z1oIaOKyGITxzyxY4fRq6dg2TA54NoZpHj8JPP5ktyqJ4CMXt1y9MzBdu2vv00TWr1WU1VBNyHQ57sqrDVFOVEGI08C8gFnhLSvmc4e9TgL8D+10vvSKlfCukIkOJp/DMzbpJICxWHAb9tv/YAf1s6o4dzRZnMQxtVfSpne+/18JjB7ZBe0O7na5dVfi1R6oJue7cWT/0LFwxbcUhhIgFXgWuALoBE4UQ3Ty8da6UMtX1E7mDBlQbntmiBbRufdpsdbVj0H/xfgfJySqyyiOGtvpljgMpw8R8UU34dXa2Mkueg6Gt5EpH1coynDHTVNUX2Cml/FFKWQrMAay6xS00eAhrzc4mfKIvDPpjh9lIT1cmDI8Y2qryLPmwMF9UE36tzJIeMLTVL11sHDoUBgEQtWCmqep84Ge33/cBnsbhG4QQg4HtwP9IKX/28J7IwBCyl99N4/vvwyiBnIew3L599Uy5ZWUW3tRmBoa2Wvi8nhG3SROzhXmBh37ul6T/af16ZZY8C0Nbrdmnm57DfcVh5sDhaQ5tXOh+BnwopSwRQkwD3gWGebyYEHcCdwK0atUKh8Phl6iioiK/PxswNA1KStj49iakTCUxcbM1dHnAoy6XfhwOGjRoQUlJd2bOzKFz5yLztVmAs3S52mrNmhLS0n7F4fjeGrq8wa2fKyoEiYmDmD//AK1b7zJXV4jwSZerrebP30t8fFt+/XU1Dkfw7HpBbzMppSk/gAYsc/v9CeCJGt4fC+R7c+309HTpLytXrvT7s4Hm+eelBCmPHrWWLndq07Vrl16HGTNCo8edcGmz/fv1Npo+3Rw9ldS1vTRNyssuC4wWd8KlH73BZpMyIyPwWoz4ow3IkV4+v830cWwAOgkhOgghEoAJwCL3Nwgh2rj9OhbYFkJ9occQtpebq6ckaNbMZF2+4laPDh1080tOjtmirEPDvLxz+hn0FOVhh1tfp6frGV8rKswWZSHc2sfp1NsnPd1sUXXHNFOVlLJcCHEfsAx9NTFTSpknhPgr+si3CHhACDEWKAeOA1PM0ht0PITt5eZq4fcw8ZApNz1dq3o4Rj1ZWfT63e+gvPysfo6JCcMDfQx9fcXv7LxyUmP7dj1rQNRjaJ/9s+wUFIThPe0BUzcASikXSykvkVJeJKV8xvXan12DBlLKJ6SU3aWUvaSUQ6WU5hmAg40hbK94iYNdu8JwduIhVLNPH30jozqzAXA4iCkrO6t9cnOhSxeoX99scT5i6Ov0QgegVpdVGNrn+AIHEIb3tAfUznGrYAjby2thA8LwS+YhVDM9XY+q2rLFbHEWwGbDGR9/Vvvk5oZhP8M5fd38Rhv16qFWl5UY2md1rI3EROje3WxhdUclObQKxoPs1+hhe2H3QPGUKXe3/qecnDC14wcSTWPzP/9JWkEB2GwcuFDj4MEw7Gc4p69jNY3evdWKowpD+yz4g0bPnpERlq4GDivhlnU0Z3qYOsbhnOypF16oZ01VM1Gdgu7d9UEVyP1Mfy0sBw44p6/T0+Gtt3TrTKxFTwEIKa72cTr17/9NN5ktKDAoU5VFCVvzhQeE0FcaaiZ6Lrm5evuEnWO8Gvr0gVOn9LThijPs2gUFBZFzT6uBw4KcOEF4OsZroE8f+O47PdOv4gx6ynxo0MBsJYGh8jurJglnU7najpR7Wg0cVsCwf2PjRv3lsP+SGWL8y8vh22/NFmUyWVm0mz37rD0ckdTPnTvr0WFRb5b0sCcrISEyHOOgfBzmU83+DQjzB4qhXgNm6ynWc3LCP8Gb37japENJCcyezdG5dg4e1CKqn2Ptdnr31qJ7xVHNPd2zp/5rJKBWHGbjYd9D5Y7x5s3NFlcHDPVqtc1B8+ZRPhN1tYlwOqG0lCPzHECYTxCq2bezaZO+woxKPKRS37gxsiIK1cBhNh72PUSE+cJQLzHUphzkrjZxxsRAQgKZ8bbwd4xXs2+nuBi2RXaCoOoxtMn+Tjby8yPgnnZDDRxmUxnr/dRTYLdzoqvGzp0R8CUz1AtNT7WQl6c/VKISV5vsnjoV7HY+PazRpUuYO8ar6WeI4tWloU3WOiPA9GxA+TisgFss/MYV+ksR8SXzEONfUQGbN0P//ibqMhNNY29JCR013Q8wfHjgLl1WVsa+ffs47WfoWqNGjdjmzzKhcWO49lr9/9u2ISUsXaoPiIFYdfitK8jUqMutTS6Q21iyBBITQ7cKq0lbUlISbdu2Jb4OOxHVwGExIi1szx33mWjUDhwuDh4k4DvG9+3bR0pKCu3bt0f4cWRkYWEhKSkpAdESE6MfIxuIZIeB1BVIvNX1ww/6ONLN08HYQaI6bVJKjh07xr59++jQoYPf11emKouRmwvt2oW5Y7wazj8fWraMcj+Hi2CkUj99+jTNmjXza9AINPXr6xsBo/0Mcin1drBKAkshBM2aNfN7VVqJWnGYTVbWWXmdIsIx7o5b/YTL/h2Vtm/3fiZ4O8ZNHTSKiqCwEFJSqFevAVLq/qx69cyTZApu7VAS14CKCmu1QSC+I16tOIQQ5yyyhBC2Opce7VTGe//pTzB8OEVfZUWGY7wSQ/0qNwLm5emzsKjB0A4N8/KqUqmHtWPcnaIi2L4d9u+H7dtpIPRjgmvqZ4fDQWZmZp2KbeBFAz755JP84x//8Om6ixYt4rnnnvNdUFERn8yYwdbVq2H7dkqPF/H6638mO3u579eyMN6aqj4SQjwmdJKFEP8Gng2msKjAEO996CMHEEEDRzUx/k6nHucfNRjaofGmTZG3siws1DsWwOkkoaSQmBg4ebL6jwRi4AgG5eXljB07lscff9z3DxcW8snKlWz96SdwOpEFhdx991+58srLAy/URLwdOPoBFwCZ6Ee+HgAGBktU1GCI916XaAMi6IHiIcY/KkNlFgqZAAAgAElEQVQ1De2wt2MGBw5EUD8DpKRATAzXPvII6bfeyqXDhvH5529UrTiWLl1KWloavXr1Yvjw4ezevZvXX3+dl156idTUVFavXs2UKVOYN29e1SUrVxNFRUUMHz6ctLQ0evTowaefflqrnGeeeYbOnTtz+eWX88MPP1S9vmvXLkaPHk16ejqXXXYZ37uyMU6ZMoWHH36YoUOH8thjjzFr1izuu+8+8vPzad++PU7XoHjq1CkuuOACysrKmDVrFhkZGfTq1YsbbriBU6dOkZmXx6LVq3n05ZdJvflmvt19hKeemsKCBfNYsmQJv/nNb6q0OBwOrr76agC+/PJLNE0jLS2NcePGUVRUVKfuCDbe+jjKgGIgGUgCfpJSOoOmKlow5Ov//GWNdu2gRQuzhQUID2dznAe0bh1lDnJDO2Q5dE9pMAeOhx7yfVVXUZFcYyr01FSYPr2aPzZoAJdcwsz//Iem7dpRHBtLamoGAwfeQNOmTu644w5WrVpFhw4dOH78OE2bNmXatGk0aNCARx55BIC3337b46WTkpJYuHAhDRs25OjRo/Tv35+xY8dWa6vPzc1lzpw5fPPNN5SXl5OWlka6q7HvvPNOXn/9dTp16kR2djb33HMPK1boMfDbt29n+fLlxMbGMmvWLEAPa+3Vqxdff/01Q4cO5bPPPmPUqFHEx8dz9dVXc//99wPwxz/+kbfffpv777+fsWPGMMZm44aJE9m0owFxrqfsiBEjuOuuuzh58iT169dn7ty5jB8/nqNHj/L000+zfPly6tevz/PPP8+LL77In//85xp6y1y8HTg2AJ8CGUAzYIYQ4kYp5Y1BUxYtuJ/BMSnCZqFwzl4O0OsYVSsOOKsdtr/xE0JA794mawo0DRrw8kcfsXDhQgAOHvyZvXt38OuvRxg8eHBV+GfTpk19uqyUkv/93/9l1apVxMTEsH//fg4dOkTr1q09vn/16tVcd9111HN5pMeOHQvoK5fMzEzGjRtX9d4St/OMx40bR6yHkXP8+PHMnTuXoUOHMmfOHO655x4Atm3bxq233sqJEycoKipi1KhR+gfi46FJkyrHeOXAERcXx+jRo/nss8+48cYb+eKLL3jhhRf4+uuv2bp1KwMH6kac0tJSNMM9YzW8HThuk1JWzhF/Aa4RQtwaJE1RSX4+7NwJU6aYrST49OkDS5bo9m+rhCmGku3bU4LuGK92ZVADhYXFddov4XA4WL58OVlZWdSrV4/Bg22Ulp6muFh6FckTFxdXZRKSUlJaWgrARx99xJEjR8jNzSU+Pp727dvXGk7qqTyn00njxo3ZVM1SrH41X8axY8fyxBNPcPz4cXJzcxk2bBgAd999N59++im9evVi1qxZOByOsz5XaaaLc3vKjh8/nldffZWmTZuSkZFBSkoKUkpGjBjBhx9+WGOdrESNPg4hRFMhRFPgx8r/u732RWgkRiiRmkq9Ogwp1qPKQW7o6+3bUyKyn/Pz82mSkkK9/Hy+z81l/fp1xMRA9+4aX3/9NT/99BMAx48fByAlJYXCwsKqz7dv355c11L0008/paysrOq6LVu2JD4+npUrV7Jnz54adQwePJiFCxdSXFxMYWEhn32mH7PYsGFDOnTowMcffwzog9PmzZtrrVeDBg3o27cvDz74IGPGjKlalRQWFtKmTRvKysqYPXs2lJXBwYOkJCVRWFjIqVN6yLX7IsZms7Fx40befPNNxo8fD0D//v1Zu3YtO3fuBHQ/yvbt22vVZSa1OcdzgRzXv0eA7cAO1/+jzdgQODyEqUbyjnFjffvLM2cURDyGuh/7PIujRxMjsp9HDxpEeUEBPQcP5k+PPUb/jAwSEyE5uQVvvPEG119/Pb169ap6YF599dUsXLiwyjl+xx138PXXX9O3b1+ys7OrVgDjx48nJyeHPn36MHv2bLp06VKjjrS0NMaPH09qaio33HADl112WdXfZs+ezdtvv02vXr3o3r27V472Sg0ffPBBlXbQ/Rr9+vVjxIgRdLnoIv2Iv/37mdC3L39//nlGjuzNkSO7cF/8xMbGMmbMGJYsWcKYMWMAaNGiBbNmzWLixIn07NmT/v37VzntLYuUstYf4HXgSrffrwD+6c1na7nuaOAHYCfwuIe/JwJzXX/PBtp7c9309HTpLytXrvT7s17zt79JGRsrJej//u1vcsIEKS+4wGRdfuCVLg/1bd1aykmTLKAt2Bjqvm3S3yRIuWpV4IvaunVrnT5fUFBQNwEHDki5YcOZnwMH5N69UubkSFlRYaKuIHGWLkPdnQcOyI0bpdy92wLaPODpuwLkSC+f3d6G42ZIKRe7DTZLgCF1GbCEELHAq65BqBsw0cNGw9uAX6WUFwMvAc/XpUzLEKmp1KujmtTbUbHiMNQ9M8GGEDLyHONQFZIL6P+mpFCvnp52I+KPDDbUvSwxxXI7xgOJt87xo0KIPwIfABK4BThWx7L7AjullD8CCCHmANcAW93ecw3wpOv/84BXhBDCNTqGL4bwzPxuGjt2wKRJZgsLEh7CctPTo8RBbqj7p89pXHDBSRo0iMBKu0JyK9Nt0KAB9V1PmJMnI/chCpxT96JSPfIhUuvs7cAxEfgLsBB94Fjleq0unA/87Pb7PvSNhh7fI6UsF0Lko4cDH61j2ebjFp75jUN/KZJOCDsHDynWnU49xfqAASbqCgVudc/Nha5di4AIHDhAf4C6hYslJuoT8ahIMeNW91P7dMd4crLJmoJEjQOHEOIJYKmU8hvgwQCX7Sk+z7iS8OY9+huFuBO4E6BVq1bnhMZ5S1FRkd+f9Ze5cy8ALuL06bU4HGWW0eUN/uoqKUkABjBnzg5KS/cHXBdYr82OH09g//4BXHHFURyOwB/M0KhRo7OilHyloqKiTp+vjsTEZAoLBYWF/o0ewdJVV2rSVVCQTGKi4ORJc0bM2trs9OnTdbo3altx/AQ8KIToBWwGlgBfSil/9bvEM+xDT2NSSVv0VCae3rNPCBEHNAKOe7qYlPIN4A2APn36SJsrC6mvOBwO/P2sv8yYARdcANdeW30WFzN0eYO/uqTUd5Dn53fCZusUeGFYr82+cAWw9+hRGhRd27Ztq9M+jGCde9GwIRw+DPXrp1S5Aaygq65Uf+YFlJRA06aYpru2NktKSqJ3HRxtNQ4cUso5wBwAIURv9CioBS7H9nL01ch6P8veAHQSQnQA9gMTgJsM71kETAaygBuBFWHv34DIT6VeE666C5uN9HQtsh3kHvpZCOjUydp5iAKChxTrp09Hrs3f6qnUA43X47+U8hsp5bNSyqHAGCAPuN3fgqWU5cB9wDJgG/CRlDJPCPFXIcRY19veBpoJIXYCDwN+pKu0GB5Sqe/YESUDh6Hu17TMYtu2mjOohi3V7NXp3BmSkyvMVhdcqkmxbuznWbNmceDAGSPD7bffztatW6kru3fv5r///a/PnzMmWazu2pdeeunZLxrqW3pcr6/7wDHAT0eesS45OTk88MADfl0rkHh7HkeOEOJeIUQTACllgZRyvpTyzroULqVcLKW8REp5kZTyGddrf5ZSLnL9/7SUcpyU8mIpZd/KCKywxpBi+3CkpVKvCUPdB5Y7qhzkEYeHlPJRs7KsJsW60UFuHDjeeustugXgfFV/Bw6/MdRXFhRWOcYrKvRJgr/p44116dOnDy+//HKdJdcVb1ccE4DzgA1CiDlCiFHCCudThiPGVOpJNiBKHiiGure40QZE6H4OQ12P97Sxf78F+9mQDqWufPDBB/S9+mpSb76Zu/72NyqkxFmvHk89NYXLL7+UHj168NJLLzFv3jxycnK4+eabSU1Npbi4GJvNRo4rbXKDBg147LHHSE9PZ+zYsaxfvx6bzUbHjh1ZtGgRoD9UL7vsMtLS0khLS6t6OD/++OOsXr2a1NRUXnrpJSoqKnj00UfJyMigZ8+ezJgxA9A3P993331069aNq666isOHD3usU25uLr169ULTNF599dWq16uuO2YMPSdOZMaCBRATw9J1m7j77qHccstN9OjRo6o+oO9AX7y4akscU6ZMYf78+V7XxeFwMGbMGJxOJ+3bt+fEiRNV17r44os5dOgQR44c4ZZbbiEjI4OMjAzWrl0biK49G293CrpcCzHAWHSfxM/A/wFNfblGKH4sv3M8M1PfUZyZKSdOlLJt29o/Yold0B7wWZdb3Z1OKVu1knLy5GAos0CbudX1iy/0zeNffx08XT7vHM/MlDI5Wd/Znpwsi776qs7ljxkzRpaWlkpZWCjvnjxZvjtjhszJyZGDBl1etYP8119/lVJKOWTIELlhw4aqz7v/DsjFixdLKaUcM2aMHDFihCwtLZWbNm2SvXr1klJKefLkSVlcXCyllHL79u2y8r5fuXKlvOqqq6quO2PGDPnUU09JKaU8ffq0TE9Plz/++KOcP3++vPzyy2V5ebncv3+/bNSokfz444/PqVePHj2kw+GQUkr5yCOPyO7du0sppfzXv/515rpHj8r0nj3lri1b5BtvrJTJyfXkjz/+WHWN+vXrSymlXLBggZzkSplQUlIi27ZtK0+dOuV1Xdx/f+CBB+TMmTOllFKuW7dODh8+XEop5cSJE+WyZcuklFLu2bNHdunSxWNfGcGHneNenzkuhOgJTEXf6T0fmA0MAlYAAT45OcJxj+ufYsFZaDBxq7sgwlOsu/fzU1SlUrdMfQ3mtLg1a+By/0+qs9vt5ObmkpGRAUBxcTEt27fn6nHj2LfvR1544X4mTryKsWNH1nqthIQERo8eDUC3bt1o2LAh8fHx9OjRg927dwNQVlbGfffdx6ZNm4iNja02MeCXX37Jt99+W+W/yM/PZ8eOHaxatYqJEycSGxvLeeedV5X11p38/HxOnDjBkCF6ooxbb72VJUuWALBixQq2bt165roFBWzdfQCnM4G0tL5VaeTdueKKK3jggQcoKSlh6dKlDB48mOTkZPLz872qizvjx4/nr3/9K7/97W+ZM2dOVR6t5cuX89133xHjCmErKCgIeGSaVwOHECIXOAG8BTwmpaxMYp8thFAnAfpJfr7uU7s1ihPUp6fD0qWRv4M8J0d3jFsqqrTSnFZaCgkJlA8aRGIdLielZPLkyTz77LmnSm/YsJmZM5fx2muvsmjRR8ycObPGa8XHx1elRo+JiSExMbHq/+Xl5QC89NJLtGrVis2bN+N0OklKSqpW17///e8z52W4WLx4ca3p3qWsPiW8p+sePw4ff+wgJcXzlzkpKQmbzcayZcuYO3cuEydO9Kku7miaxs6dOzly5AiffPIJf/zjHwE9ffzy5ctp2bJlrdfwl9rSqj8shHgYPdHgF0Ab4F6315FSXh80dRHON9/o/0b0jvFaqDyDPCId5G7k5lqwnyvToTz1FNjtOPsZEzf4xvDhw5k3b16Vr+D48ePs2bOHo0ePEh/v5PLLb+DBB59io+sMAWNadV/Jz8+nTZs2xMTE8P7771c5oo3XHTVqFK+99lpVmvbt27dz8uRJBg8ezJw5c6ioqODgwYOsXLnynDIaN25Mo0aNWLNmDaBn13Wvr/G6R4/qoWM17VeZMGEC77zzDqtXr64adLytiztCCK677joefvhhunbtSrNmzQAYOXIkb7zxRtX7qjt/pC7UtuKonB91Rj/9b5Hr96vR044ofMEQ1195fGpUmargrHZITz+TiiOiUo+41fGXDpo1HeNwdiqYOu7O7tatG08//TQjR47E6XQSHxvLq089RXKzZvz23nspLnYiJbz0kr4imTJlCtOmTSM5OZksP5zz99xzDzfccAMff/wxQ4cOrUrD3rNnT+Li4ujVqxdTpkzhwQcfZPfu3aSlpSGlpEWLFnzyySdcd911rFixgh49enDJJZdUmaOMvPPOO0ydOpV69eqdtbqYPHkyv+zdS1rPnkghaNGqFX//+yckJkJNC5mRI0cyadIkxo4dS0JCgk91MW7aGz9+PBkZGVVH3QK8/PLL3HXXXfTs2ZPy8nIGDx7M66+/7nP71og3jhDgSyDF7fcU9M1/pjvCPf1Y0jlucETKzEw5YYKU7dqZrKuO+OUcd2sH59rMoDnITWszQx3X/D1TgpSrVwdXl+lp1d0pLJQyN1dPM56bK2Vhod8p1q2aVr3o0KGz6ugsLDQ1lbo7Vkmr3g4odfu9FGgfuOErCvAQ15+TY9FZaDAxtIP42hF5DnJDHU8vdSAEpEZTCIlhbwOFhRGXYj3u1Kmz6ljxa2HE7xivxNuB431gvRDiSSHEX9APVXo3eLIiEENcf2G6jZ07LWj3DjbVnM2xdWsEZVA11HHJaRtduwb3jHHL4eFsjsrgh0jp5/J69c6q46lY3bIfyUEelXgVVSWlfEYIsQSoPIPxt1LPmKvwFsO5DBuKdbty1K04PJ3NcfiMg9wt83r4Yqjjf2/Q6hLlGp54OJsjUerP2ZMnoXlzswXWHWdy8ll1zP+1AUKAFwFRYY/X+ziklBuBjUHUEvm4x/X/XX8p6gYO8Hg2B+jmqogYOKCqjgcOwMGDoVtZyhrCR0OO4WwOIXQzTqSsOICzz+DYr9fPnwzAoUR3Z9QNi1cxcsnJgQsvjIyZV105/3xo2ZKqKLNIotJ3E4oJQlJSEseOHQvIgyFY1K+vDxwWlugXUur1srp/Q0rJsWPHvNonUhNerzgUdcRDiu2o828YcUux3qdPhKRY9xByHRMTGsd427Zt2bdvH0eOHPHr86dPn67zA8UjJSW6RzwpiZPliRw9Ct9+q7uBTNVVF0pKKC8qIq5BA0hMpKwMDh2C8nJrrKhqarOkpCTatm1bp+urgSMUVKbYdu3QLVhoZ9cujdv9TkofARja5NoJdqYt1cJi1lYthjpht5Obq9GtW2gcpvHx8R7TXHiLw+Go0+E+HjG0yZ6ZdjImasycCb/9rYm66oKrTrKkBJGYCHY7H+7WuOkm2LQJunY1W2Dw20yZqkJBNKdSrw5jivWyCEixbqiTXBmlIdfuGNrkgh8dpKSEefi1q07C6TwrZX5iIgQgK3xYoAaOUGAIz8xKtAFR/kAxtEnzSEixbqjTke42Dh2KcpOkoU1ihtqslejRH1x1csbEVIWU5+To5sj4eLPFhQZlqgoFhvDMRS9qdOign0kctRjapEV/jZYtw/yBYqhT1uEoDbl2x1P4dTq89pruD4gLxyeQq067Z86k49SpOPtpbNwYXclKw7HbwhP3UFzlGNeJxBTrbnXK+ZM+0e7Vy2RNZuMh/Pr0aX3TZ8+eJuqqC5rG3pISOmoaO37Qt3JE0z2tTFUh5tgx+OmnKJ+FVkN6OuTlWSMqJRDk5uo277B19gcJ9307kUA0JitVA0eIcWWUjqrZibekp0dOinUp9QeK6udzueQSfc9cpAwcubn6bvFocYyDGjiCj+FM58rZSVqaiZqshFv7hP1M1K0u+/bBkSPRNQutEbe2iYmx2EmIvuKqS8O8PIAqx3hY+mv8JIqqagLVxPVfdBE0aWK2OAtgaJ+2y+20bBmmGwENdfnxz3ZAUysO8Hgf9Omj8frrYeggd6tLr7g4Knql8c03GlOmmC0stKgVRzCpJpW6epi4iKQU68ZU6sscxMWFsfM3kHi4D9LTobgYtm0zW5yPuNVFlJVxbL6DoqLou6dNGTiEEE2FEF8JIXa4/vU4/xZCVAghNrl+Fnl6j6UxxLCfSLWxZ48yX1RRQ4r14mKzxfmIoS5Li2107w7JyWYLswDV9DOE4STBrS4yPp6NDW1A9N3TZi0SHwfsUsrnhBCPu35/zMP7iqWU4Xv8jSGGPbtAD0mMttlJtXiK8T+kT0w3b4b+/c0W6ANudZFDbLw/VuPaa80WZRE89PMlzjMO8rAy87jVZXPDhizdoVGvHnTpYraw0GLWwHENYHP9/13AgeeBI/xxj+t/Rn/JSml3TKeaFOsbNoTZwAFVddmzWw+7jrZZaI0Y+rnSQb5hg4ma/MVVlwKHg5wPo88xDub5OFpJKQ8CuP5tWc37koQQOUKIdUKIsJ+/rV8PnTtD48ZmK7EubdtC69Zh+kBxsX69/m/fvubqsDp9++pJAUtLa3+vFSkvF2zcGJ39HLRxUgixHGjt4U9/8OEy7aSUB4QQHYEVQogtUspd1ZR3J3AnQKtWrXA4HL5KBqCoqMjvzxppmJdH402bOJGaSn637qxePYCMjOM4HN+bqiuQBEqXe1t17Dgeh6MeDsd6S2irDXftBd27M2/eRcTHn8/x46txOM49eCLS+7Im3NuqQQMbJSXdeeedXDp3LjRVlzcY+zkvL4biYkhJ2YrDcdhseWcR9DaTUob8B/gBaOP6fxvgBy8+Mwu40Zvrp6enS39ZuXKl3589i8xMKZOTpYyNlTI5WR6YnylByldeMVlXgAmILkNbzbpLb6vjxy2grTYM2mVmphw0SEpNM1mXHwRdl5/3hCXay0M//8///CBByl27zBZ3Lv60GZAjvXyGm2WqWgRMdv1/MvCp8Q1CiCZCiETX/5sDA4GtIVNYVwwhiEfnOQDo189UVdbEQ4p1CBNzlUF7hV1Psa362QOGtmr9vYNWrc6Y9iyNh5DibdtSaN4c6nAESthi1sDxHDBCCLEDGOH6HSFEHyHEW673dAVyhBCbgZXAc1LK8Bk4DCGIDmwkJqq4fo8Y2qr1BBtCQHa22cK8wKB9Z1sbxcXRafeuFUNbiaE2+vULz37GZmPbtob066efpR5tmBILIKU8Bgz38HoOcLvr/5lAjxBLCxyGEMSPfq/Ru7f3x2VGFYa2aqBpdOkSJjNRg3bHt3rkkFpxeMBDWG7fvrBoEfz6q8WzKRi0F3TX2LtXMnWq2cLMIcqCyEKMK2yvvFyPV7/zTrMFWRhDuGbfvrB4sZ4s0PIzOjft2W8SteYLrzD0c+UAm5MDI0aYpMlb3EPrV4CUImonCCrlSAj47jt9J3S0fsn8oV8/PUngnj1mK/GN9ev1Qc/yg51FyMjQ/w0Lc5UblXor9UcbauAIBoaMuJVfMmX3rgW3dqscZC3/QHHTXFCgp0tREwQvcLVbo61ZdOkSXv0Mut62bU9F7SmeylQVaDxkAl2/XqN5c+jY0WxxFsbQbj2X2UlK0sjOhvHjzRZXDQbN25+3I6WmJgi1YWi3m2x2XlmvWdcsadArl9vJztbo0aMAiM5TutSKI9B4CNvLzlbmi1oxtFvcGgdpaRZ3kBs0F33hANTKslYM7TYi3sHhwxY2Sxr05n/q4JdfoGvX6jctRjpq4Ag0hrC9kxk2tm5VD5Na8RDu2K+fHlRQVma2uGrwkBG3Uyei1nzhNYZ2a3ytDbCwucqgtzIjbpcuBabKMhM1cASayrC9p57SzVSx+hJc2b1rwdBulaGap0/rwQWWxKD5/Z3KTOUVhna76BaNpCQLry4NepfmayQkwEUXFZmtzDSUjyMYuIdnPqe/pB4oXlBNqGZ2toUzCrs079sHBw6oCYLXuPV1PPpRypZdccDZ9/TjuPZknZuHLFpQK44gk5kJl1yizBf+0L49tGypt6HVqdQYdqngLUL//vpejpISs5XUTFlZmKb8DzBq4Ag0bmF7UuoPlIEDzRYVZrjaUKzLYuBAWLvWbEEeMIRnrl0L9erpZzMovMStDQcO1AeNjRvNFmXA0M/ffKPvyYr2e1qZqgKJIWxvz9t2jh3Tov5L5hOGNhx3u52FCzUOHoQ2bcwW58JDyPXatbp/Iz7ebHFhgqENbR/bAY21a8+yVpqLp35ep4sbOBC2bzdZn4moFUcgMYTtHfnYAcCgQaaqCi8MbTio3AFYbNVh0FiyzMGmTaqffcLQhk2/dXDxxbBmjdnC3PAQWr9mjZ5O5rzzzBZnLmrgCCSGsL1lJTaaN9d9HAov8ZApNynJYgOHQeO3zWxUVCjzhU94CL8eOFA37Uqr+JwNGuUQG2vXqn4GZaoKLIYMmu9N1hgwQG388wlDG8ZrGv36WWzgMGhc8pWGEBYysYQDHjLlDvwO3n0XduywyGTLoPHHlhqHDqmBA9TAEXhcYXuHD+s3wO23my0oDDGE5Q4cCC+8AKdO6Q5oS+Cmce2TcOml0KiRuZLCDg/9DPokwRIDB5zdz+/pL6mBQ5mqgkZleKaye9edgQOhvNyaG8QqKnQfqurnutOlix62bqnVpRtr1+qTg+7dzVZiPmrgCBSGsL01ayAxEdLTTdYVrri1Z+Wk1BKOU0M/b9kChYVqFlonXG0ak53FgAEW6WfweE8PGAAx6qmpTFUBoZrwzD599MFD4SOG9mxit3PppZr5M1FP/bzxTHimwg+M4deT7Uz+XOPoUf1ALKvoKlhoZ+tWjZtuMlGThVBjZyAwhO2VfeUgN1c9TPzGQxjkwIH6vex0WkvX2rV6aOaFF5qoK5wxtOllTgdggWwBBl0H/usA1D1diRo4AoEhbC+vhY2yMvUl85tqQjXz8yEvz1q6KsMzVeScnxja9LyJNuLjLeDnMOhaKW3Examcc5UoU1UgMIZnOnTzxYAB5soKWzyEag5qrf9pzRro0cMaun5uq7F3L/zudybpiQQMbZqo6SZe0/0cBl0fPqaRlmahqD6TUQNHoHAL21v1V+ja1WQbbbhjCNVs3x7OPx9WrYK77zZP1ln9PFt/SUVU1RFDX192Gbz0kgXCr126iov1iL577zVRi8UwxVQlhBgnhMgTQjiFEH1qeN9oIcQPQoidQojHQ6nRJ9yiL0pL9Yfb8OFmi4oQ3BIeDhsGK1aYuLPYEGVjt0OTJiqxYUBwa9thw/QstKatOgz9nJmpJ2BU9/QZzFpxfAdcD8yo7g1CiFjgVWAEsA/YIIRYJKXcGhqJXmKIvtj2op1TpzSGDTNbWARgaNvxD9t5/7BGXp6+4c5MLXK5HbtdY+hQFZ5ZZwxtO/hzO3FxGitWwMiR5mrBbmfFCo3YWH0lpNAx5Ssvpdwmpfyhlrf1BXZKKXLuX74AABZYSURBVH+UUpYCc4Brgq/ORwzRF0fnORAChgwxW1gEYGjbgWUOQF91mK3l14UO9u5FTRACgaFtk7Md9O9vjX7G4WDFCt0pnpJigh6LYuW50vnAz26/73O9Zi0M0Rfzj9lIS1MHNwUED2dTX3yxbiIyW8vqWBugzBcBwUO02vDh+nnzJ06Yq+Vkho0NG1Q/GwmaqUoIsRxo7eFPf5BSfurNJTy8Vq11WwhxJ3AnQKtWrXA4HN7IPIeioiKfP9vw73+n8aZNHO7Wmzd/348bbtiLw/GjX+UHUlcoCLauyrY9kZpKQUkJXbocwG5vid2+ltjYmp0dgdbmruXlBR1p1qyEgwez+OUX364TrX1ZE8Z+btLkG5zO3rzyyhZSU0Ory13Lsg0NqKiApk034XCcPYpZtR8hBNqklKb9AA6gTzV/04Blbr8/ATzhzXXT09Olv6xcudLvzy5bJiVIuWSJ35eolrroCiah1jVnjt7G2dm1vzdY2pxOKVu2lPKWW/z7vOrL2jl9WsrkZCnvv99cXQ89JGVSkpTFxef+zUrtZcQfbUCO9PLZbWVT1QagkxCigxAiAZgALDJZ09kYoi9WrIC4OOVECzhu7Tx0qP5SSO3fhn7Oy4PDh5V/Iyi42jpxYxaXXWaCn8PDPT1wICQlhViHxTElqkoIcR3wb6AF8IUQYpOUcpQQ4jzgLSnllVLKciHEfcAyIBaYKaU0c9/w2XiIvrDbNfr3h/r1zRYXQRjauaXdTo8eGnY7PB6KAG1P/bxe33OgBo4AY2jrW6bYmfSlxvHjCaaUf/xjO99+q/HMM6EpPpwwK6pqoZSyrZQyUUrZSko5yvX6ASnllW7vWyylvERKeZGU0lrdZ4i+KF7iYONG9TAJOB6iXIYN02P8S0rMKX/FCrjoIpWfKuAY2nqocADwzTeNTSl/3wd6+eqePhcrm6qsjSH6YkN9G06nir4IONVE3Jw+DevWhb788kE2HA71MAkKhrZuM9FGo0YhHDgM5S8ptpGSAn2q3aIcvaiUI/5iyGUz70ON5GTo189sYRGGh7xVg/P1TXd2ewj2yxjK3xirUVCgJghBwdDWsZqGzQbr1zdByhAkkjSU/9YkjSFDdL+l4mzUisMfKh1oAE88AZrG0qUweLA6fyMoaJrezgDPPkujrVn06wdLl4ag7KysswatpUv1B5hacQQJTdPb2uGArCxGjICDB5PZsSPI5Rru6Z0tNHbuhMsvD3K5YYoaS33Fg7N0R3ONHTvg/vvNFhfBGNr9jlvsTH1T49AhaNUqNGVit7N4sUbfvtCiRZDKjHYMbX7d+3buQ2Px4iCeQ+6hn5fk6AEQV10VpDLDHLXi8BUPztLFi/U/qS9ZEDG0+6hEBxDkVYehzKIvHKxfr/o5qBja/LztDi688CRffBG6MnE4+OILfaC6+OIglhvGqIHDVzw4axcvhs6doWNHs8VFMB4cp23aUDVoh6LM1TE2pIQrr6ztgwq/8XB/9et3nK+/hqKi0JRZ3E8PgFD9XD3KVOUrBgfayZ4aDofK1R90DO0uNI0rroD586G8PEgOTEOZ772s0aoV9O4dhLIUOh6CIfplbeKjjy7AbodrgpHm1FCm/ZhGSYkaOGpCrTh8xeAs/fJLfXWrzBchwOA4HTNGP0521aoglGVwlpamayxZoj9MVBr1IGMIhhgUm0nDhvCpNxnu/MFwTy9aBA0a6MEuCs+oFYcveHCiLVig0bSp+pKFBEP7j/7cTlKSxsKFAY5y8tDPKws08vPhuusCWI6ietz6ID0ujocG9+bVRVrgV5eGvq740s4nn2hcdZWKkKwJNXfyBYMTrdzu4PPP4eqrIT7ebHFRgIdzG0aPhoULwekMXjk4HCxcqKeSGTEigOUoqsetD0RZGTe2cHDsWBBOBTT09d73HRw5oiYItaEGDl8wONFyG9g4cQKuv95sYVGCB8fpddfB/v2QkxO8cious/HJJ7qZSiW7CxFufSDj47loqo2kJFiwIHjlkJDApydsJCQo/0ZtKFOVLxicaLPe09QsNJR4cJyO6aybLhYs0E9pC0Y565z6fhE1QQghbn2wuWFD0oZrjBqlry6nTw+gn8mtHDnExvSbNEaOVKf91YZacXiLwVla1kdj3jzdKZ6cbK60qMLgOG36QxbDh8PcuSBrPtfJewzO0jlz9JWGmoWGGFcwRONNmyArixtvhH37qjKe1x3DPZ0do7FnD9xwQ4CuH8GoFYc3eHCWfvWrxtGjcPPNZouLQgz98cAjdq5appGVBQMGBPba5cvszJ2rcfXV0LBhQNQrvMXVFx1KSmD2bK5bZCc5WWP2bP2MjEBc2/2env1fjaQktbL0BrXi8AYPztLZs/VzxUePNltcFGLoj+ExDpKTYfbswF9719u6s1RNEEzA1RfC6YTSUupvcHDNNfDRR1BWFphrV/Zzhd3B3LmoCYKXqIHDGwwOtFN9dWfpuHH6y4oQY+iPxFE2xo4N0APFcO0PD9po0gSuuCIAuhW+4eoLZ0xMVTDEzTfDsWOwbFlgrl3Zz+vr2dQEwQeUqcpbJk/W/500iY9+0Dh1Sn3JTKPSofnee1Uv3Xyz7uf44gu49lo/r1vp25g+HY4do6iPjb9fq3HLLWqCYAquft49cyYdMzLA4WDUQGjeXGPWLBgzpo7Xd7unp0/XaNJEWRC8RQ0ctWG0hU6axIwZ0KULDBpktrgo59139X55912uWGbn/PM1Zszwc+DwYPN+d6M+QbjjjoArV3iLpnFi40Z46CEoLSU+IYE/X2vn4Y81fvkFWrf245rGI2LHTGLhQj1tkNr05x3KVFUbBlvowTkO1q2DO+8MwcEyiuox9EvcGge33aabMHbvrvv15EoHM2ZAWpo6Ac5sGm/adFbfTGjjoLwcZs7084KGvt7ybwdlZfo9rfAONXDURFYW7N2rbxRw2UJn77ORmHhmlaswCXcbdWws7N3LPb2zEALeeMOP6zVrpm8OcNnTv2tuY8sWmDYt0MIVvnIiNVXv65gYEIIWnZsxbJjezxUVPl7McE/LhAT+vcXGkCHQtWtQ5EckauCojsrl7Jtv6hsE7riDE/Pt/GWpxoQJekSVwkQq/Rx33KEv/d58k1Y3DefRQVnMmOFjCu6sLN0UUlGhP5ymT+f/vtRo1AgmTgxaDRReUtC9u+53io3Vc8s89BB/HJ7Fnj36hkCv8XBPr/qznfkHNO6+O2jyIxI1cFSH+3K2ogLatWN6tm7zfvRRs8UpAH3waNdOz6vuMjvc3c3B8ePw1ls+XKeyr51OkJIj3x9jwQLd5t2gQbDEK3zi2DG9f1yhuUOkg06d4LnnfNj4abin5QXt+P1CjY4d1aY/X1EDR3UYTBen+tp4+WX9PIDu3c0Wp6ii0mTlMmNc2LsZQ4bAP/8JZWVeOKE8mCPf3KGbIx98MOjqFd5iME3G7NvLP27IIjcXli/38hqGezo3xcb69fD73wfpPJcIxpSBQwgxTgiRJ4RwCiGqdT0KIXYLIbYIITYJIQKZxq5mPJgu/pmp8euv8PjjIVOh8AZNO8eM8dw1WezbB4sWnVfzZz2YLvbM1M2Rt98OLVuGpgoKL/Bgmrz6X8O5unkWf/qTF9mRDfe0nD6dB+dotG6t/JX+YNaK4zvgesCbI3iGSilTpZShi20xmC4KfjrGc8/py9n+/UOmQuEtBjNGv2IHw4fDu++25/jxGj7nwRx532yN5GT44x9DpF3hPQbTpCgt5S9DHGRnw5w5tXzWcE9vWXmMzEx4+mmV8dgfTBk4pJTbpJQ/mFF2bTTMyzvHdDF9k43ycnjhBbPVKTxiMGOIn/fy+uQsTp6M4y9/qeFzBtPFuiQbn3+uDxqtWoVKvMInDKbJ3iOakZYGjz1WQ0CEh0iqv6y0kZoKU6aEUHsEIWTAUor6UbgQDuARKaVHM5QQ4ifgV0ACM6SU1QZaCiHuBO4EaNWqVfqcWqcg59Lms8/o9K9/IZxOnHFx/DJ6NEtb/obb376FW27Zw223/eTzNQNFUVERDSzoqbWKroZ5ebRatow2S5ciKipwxsay7LxxPLXnPq5/oR4ZGb96fm95OTImhs13/o6RH/+V5OQK3nprAwkJwbsvrNJmRsJFl/E+3dpvLHeteZhGozvw2GNnz0c93dMvHr2D/2/v7mOkqs44jn9/u+suVI1AfQF8qWCMLTQ2vJS6tSWLElRCoNrW0P6xBEiMtpraxLSojaFqqFqtxmrV1pcKlWpbiqW+gsi2TTZaFQE1gCzUpisIFVuwMcvbPv3jnMHrMANzZ+fOLMvzSSZz994zc5855+x95p575947X5rCXXet4uyzd1Qsrt6knNgmTJjwWskjO2aWyQN4gTAklf+YlijTBow9yHsMjc8nAquB8aWse8yYMZZae7tZQ4OFHVnM6ups+zXzbMAAs3HjzHbvTv+WlbRixYraBlBEr4pr3jyz+vrQfmDdyD5Sf5s8sN3efTeWaW8369/fTPq4XH29PfrZedbYaLZyZfZh9qo6Szhs4sprZ5NsV0N/O4d2mz8/US7+T1vif/r1S+cZmF13XQZx9SLlxAa8aiVu3zM7l8DMJlbgPTbH522SFgPjKO24SHptbdDdTe48HKurZ/aCFgAWLvRbwx4WcsMYXV1ghjD60cVlO26jbcRgpk6FYz58b/9yAJPYTSP3rWvh9rth1KjafgRXgrx2xoyj9nVxy6DbWDtjMBt/A2d8fRQsWvSJXwh2q56rFrVw7rkwd27Nou8Teu1JaJKOBurM7MM4PQm4MbMVtrRAUxPdXV1YXT0/6H8Pf9ndzPLlcMYZma3VVVLy4ocPPYTt2YPMmGpPwg5gQRjzzLGGo/jzCbO5ZUsrU25u5qqrahW4SyWvnYntPP6DJxkPsBRsKSAhM0xin+r5bvc97P1SM8897V8Ee6omiUPSxcDPgROApyWtMrMLJA0FHjSzycBJwGKFC0I1AAvN7LmsYto9ppkrTl/OkPUrWL5vAoxs5m8P+m82DjvNzeEB8MADcc/jYwYI2If45d7Z/GjXfdz+MMycWYNYXflKaWcz9lLHCzaRH9tcRsxq5vk7/X4blVCTxGFmi4EDLhYQh6Ymx+lNwBeqFVNjY0geHWefzLXfPo0pUyp4X2NXfa2tdD/yCPV79uw/yT+3t9GtOvbVNXHS91t5e044ucodplpbw1WSd+064MccuXbeMmsu917ezOjRNYqxD+q1Q1W1sGABtLVtoqXltFqH4nqquZnVd9zB6J07Q2Z4/fXwjXTUKLR9O40tLVyS+8bqDl+5Yau2tv3tDKDYzk0tLcz0dq44Txyuz9o5cmQ4duX6tuSwlasKH4xxzjmXiicO55xzqXjicM45l4onDuecc6l44nDOOZeKJw7nnHOpeOJwzjmXSk0vq54VSf8G/lnmy48H3q9gOJXicaXXW2PzuNLxuNIrJ7bPmNkJpRTsk4mjJyS9atW822CJPK70emtsHlc6Hld6WcfmQ1XOOedS8cThnHMuFU8cByp6e9oa87jS662xeVzpeFzpZRqbH+NwzjmXiu9xOOecS+WITBySvinpLUndksbmLbtWUoek9ZIuKPL6YZJelrRB0hOSGjOI8QlJq+LjHUmripR7R9IbsdyrlY6jwPrmSno3EdvkIuUujHXYIWlOFeL6qaR1ktZIWixpQJFyVamvQ31+SU2xjTtiXzo9q1jy1nuqpBWS1sb/ge8VKNMiaUeijW+oUmwHbRsFd8c6WyMp81szSTorUQ+rJO2UdHVemarVl6SHJW2T9GZi3iBJy+L2aJmkgUVeOyOW2SBpRo8CMbMj7gF8DjgLaAPGJuaPAFYDTcAwYCNQX+D1vwOmx+n7gSsyjvcO4IYiy94Bjq9i3c0FrjlEmfpYd8OBxlinIzKOaxLQEKdvBW6tVX2V8vmB7wD3x+npwBNVar8hwOg4fSzwdoHYWoCnqtWnSm0bwt1BnyXc/fcc4OUqx1cPvEf4vUNN6gsYD4wG3kzMuw2YE6fnFOr7wCBgU3weGKcHlhvHEbnHYWZrzWx9gUXTgMfNbJeZ/QPoAMYlCyjcBP084A9x1qPA17KKNa7vUuC3Wa0jA+OADjPbZGa7gccJdZsZM1tqZnvjny8Bp2S5vkMo5fNPI/QdCH3p/NjWmTKzLWa2Mk5/CKwFTs56vRUyDZhvwUvAAElDqrj+84GNZlbuj4t7zMz+CnyQNzvZl4ptjy4AlpnZB2b2H2AZcGG5cRyRieMgTgb+lfi7kwP/qT4N/DexkSpUppK+Cmw1sw1FlhuwVNJrki7LMI6kK+NQwcNFdotLqccszSJ8My2kGvVVyuffXyb2pR2EvlU1cXhsFPBygcXNklZLelbSyCqFdKi2qXW/mk7xL3C1qK+ck8xsC4QvBsCJBcpUtO767K1jJb0ADC6w6Hoz+1OxlxWYl3/aWSllSlJijN/i4Hsb55rZZkknAsskrYvfSsp2sLiA+4CbCJ/5JsIw2qz8tyjw2h6fvldKfUm6HtgLPFbkbSpeX4VCLTAvs35UDknHAIuAq81sZ97ilYThmP/FY1hPAmdWIaxDtU3N6iwex5wKXFtgca3qK42K1l2fTRxmNrGMl3UCpyb+PgXYnFfmfcIuckP8plioTEVilNQAXAKMOch7bI7P2yQtJgyT9GhDWGrdSfoV8FSBRaXUY8Xjigf8pgDnWxzYLfAeFa+vAkr5/LkynbGdj+PAIYhMSDqKkDQeM7M/5i9PJhIze0bSLyQdb2aZXpephLbJpF+V6CJgpZltzV9Qq/pK2CppiJltiUN32wqU6SQci8k5hXCMtyw+VPVJS4Dp8YyXYYRvDX9PFogbpBXAN+KsGUCxPZiemgisM7POQgslHS3p2Nw04QDxm4XKVkremPLFRdb3CnCmwtlnjYRd/CUZx3Uh8ENgqpl9VKRMteqrlM+/hNB3IPSlF4slu0qKx1EeAtaa2c+KlBmcO94iaRxhO7E947hKaZslQGs8u+ocYEduiKYKiu7516K+8iT7UrHt0fPAJEkD4/DypDivPNU4E6C3PQgbvE5gF7AVeD6x7HrCGTHrgYsS858Bhsbp4YSE0gH8HmjKKM5fA5fnzRsKPJOIY3V8vEUYssm67hYAbwBrYocdkh9X/Hsy4YydjVWKq4MwhrsqPu7Pj6ua9VXo8wM3EhIbQL/YdzpiXxqedR3F9X6FMESxJlFXk4HLc30NuDLWz2rCiQZfrkJcBdsmLy4B98Y6fYPEGZEZx/YpQiI4LjGvJvVFSF5bgD1xGzabcGxsObAhPg+KZccCDyZeOyv2tw5gZk/i8F+OO+ecS8WHqpxzzqXiicM551wqnjicc86l4onDOedcKp44nHPOpeKJwznnXCqeOJxzzqXiicO5jEn6YrwoZL/4C+m3JH2+1nE5Vy7/AaBzVSDpZsKvxfsDnWb2kxqH5FzZPHE4VwXxmlWvAF2ES1Lsq3FIzpXNh6qcq45BwDGEu+71q3EszvWI73E4VwWSlhDuBDiMcGHIK2scknNl67P343Cut5DUCuw1s4WS6oF2SeeZ2Yu1js25cvgeh3POuVT8GIdzzrlUPHE455xLxROHc865VDxxOOecS8UTh3POuVQ8cTjnnEvFE4dzzrlUPHE455xL5f+Og04NwOWVywAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Calculate the analytical derivative of sine\n", "def d_sine(x,amp,omega,phi):\n", " dy_dx = amp*np.cos(omega*x+phi)*omega\n", " return(dy_dx)\n", "\n", "dx = 0.5\n", "dy_dx_acc = d_sine(x,amp,omega,phi) # accurate derivative\n", "dy_dx_est = num_diff(x,dx,sine,amp,omega,phi) #estimated derivative\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(x,dy_dx_acc,'b')\n", "plt.plot(x,dy_dx_est,'r.')\n", "plt.xlabel('x')\n", "plt.ylabel('dy/dx')\n", "plt.legend(['actual derivative','estimated derivative'])\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Numerical differential error vs. increment\n", "dx = np.arange(0.001,0.02,0.001)\n", "err = [] # create an empty list\n", "\n", "for h in dx:\n", " dy_dx_est = num_diff(x,h,sine,amp,omega,phi) # estimated derivative\n", " err.append( np.mean(abs(dy_dx_est-dy_dx_acc)) )\n", "\n", "plt.figure(figsize=(6,4))\n", "plt.plot(dx,err,'r.')\n", "plt.xlabel('dx')\n", "plt.ylabel('mean absolute error')\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }