{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Convolutional Cubic Splines\n", "\n", "$C^2$-continuous cubic splines through evenly spaced data points can be created by convolving the data points with a $C^2$-continuous piecewise cubic kernel, characterized as follows:\n", "\n", "\\begin{split}\n", " y(0) &= 1\\\\\n", " y(x) &= 0,\\text{ for all integer }x \\neq 0\\\\\n", " y'(x) &= sgn(x) * 3(\\sqrt3-2)^{|x|},\\text{ for all integer }x\\\\\n", "\\end{split}\n", "which implies\n", "\n", " $$y''(x) = -6\\sqrt 3(\\sqrt3-2)^{|x|},\\text{ for all integer }x \\neq 0$$\n", "\n", "The double-sided exponential allows the convolution to be performed extremely efficiently.\n", "\n", "Any of the standard boundary conditions can then be applied by adjusting the start and end derivatives appropritately, and propagating the change to the rest of the curve.\n", "\n", "The following function calculates \"natural\" cubic splines (with $y'' = 0$ at start and end) using this technique, which is much easiser than the way everyone is taught!\n", "\n", "Use it however you like.\n", "\n", "Cheers,\n", "\n", "Matt Timmermans" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import math\n", "#given an array of Y values at consecutive integral x abscissas,\n", "#return array of corresponding derivatives to make a natural cubic spline\n", "def naturalSpline(ys):\n", " vs = [0.0] * len(ys)\n", " if (len(ys) < 2):\n", " return vs\n", " \n", " DECAY = math.sqrt(3)-2;\n", " endi = len(ys)-1\n", "\n", " # make convolutional spline\n", " S = 0.0;E = 0.0\n", " for i in range(len(Y)):\n", " vs[i]+=S;vs[endi-i]+=E;\n", " S=(S+3.0*ys[i])*DECAY;\n", " E=(E-3.0*ys[endi-i])*DECAY;\n", "\n", " #Natural Boundaries\n", " S2 = 6.0*(ys[1]-ys[0]) - 4.0*vs[0] - 2.0*vs[1]\n", " E2 = 6.0*(ys[endi-1]-ys[endi]) + 4.0*vs[endi] + 2.0*vs[endi-1]\n", " # A = dE2/dE = -dS2/dS, B = dE2/dS = -dS2/dS\n", " A = 4.0+2.0*DECAY\n", " B = (4.0*DECAY+2.0)*(DECAY**(len(ys)-2))\n", " DEN = A*A - B*B\n", " S = (A*S2 + B*E2) / DEN\n", " E = (-A*E2 - B*S2) / DEN\n", " for i in range(len(ys)):\n", " vs[i]+=S;vs[endi-i]+=E\n", " S*=DECAY;E*=DECAY\n", " return vs" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": "[]" }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAD4CAYAAADl244TAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3dd3yV1eHH8c/JTiAEQsImCXvPBMJUq7g3uBBcIKi4bbVW22pbqa1t/VkXQ0GgAqIgTpS6ZUPYe0MSRiYJ2eue3x+kDmQkZDw3937frxevwHMfyNfjQ/Ll3POcx1hrERERERHxBj5OBxARERERqS0qvyIiIiLiNVR+RURERMRrqPyKiIiIiNdQ+RURERERr+FXm58sIiLCxsTE1OanFBEREREvtHbt2nRrbeTJx2u1/MbExJCQkFCbn1JEREREvJAx5uCpjmvZg4iIiIh4DZVfEREREfEaKr8iIiIi4jVUfkVERETEa5y1/BpjphtjUo0xW35y7B/GmB3GmE3GmIXGmIY1G1NEREREpOoqMvM7A7jspGNfAN2ttT2BXcDvqjmXiIiIiNRRs2dDTAz4+Jz4OHu204l+dNbya639Hsg86dh/rbWl5b9cCbSqgWwiIiIiUsfMng3jx8PBg2DtiY/jx7tPAa6ONb9jgM9O96IxZrwxJsEYk5CWllYNn05ERERE3NXTT0N+/s+P5eefOO4OqlR+jTFPA6XAabu8tXaqtTbOWhsXGfmLh2yIiIiIiAdJTKzc8dp2zuXXGHMHcBUwylprqy+SiIiIiNRVrVqfuhZGRdVykNM4p/JrjLkM+C1wjbU2/2zni4iIiIjns9bS8cr9GL/Snx0PCYGJEx0KdZKKbHU2F1gBdDLGJBtjxgKvAqHAF8aYDcaYyTWcU0RERETc3Gvf7GFPg+2MeTKD6GgwBqKjYepUGDXK6XQn+J3tBGvtyFMcnlYDWURERESkjvpyWwr//O8uru/TkhdvaoL5i9OJTk1PeBMRERGRKtmTmsMj8zbQo2UYzw/vgTHG6UinpfIrIiIiIucsu6CEcbPWEuTvw5TbYgny93U60hmdddmDiIiIiMiplLksD81dT/KxfOaMG0CLhsFORzorlV8REREROSf/WLyT73alMfH67vSLCXc6ToVo2YOIiIiIVNqHGw4x+bu9jIqPYlR8tNNxKkzlV0REREQqZcuhbH67YBP9YhrxzNXdnI5TKSq/IiIiIlJh6blF3POftTQKCeD1UbEE+NWtOqk1vyIiIiJSISVlLibMXkd6bhHz7x1EZGig05EqTeVXRERERCrkL59sY/X+TP59S296tApzOs45qVvz1CIiIiLiiHdWJzJrxUHGn9eWa3u3dDrOOVP5FREREZEzWnswkz98uIWhHSL47WWdnY5TJSq/IiIiInJaR7ILuOc/62jZMJhXR/bF18d9H11cEVrzKyIiIiKnVFhSxr3/WUtBcSlzxsUTFuLvdKQqU/kVERERkV+w1vLUws1sTM5m6m2xdGwa6nSkaqFlDyIiIiLyC9OXHeD9dYd4dFhHLunWzOk41UblV0RERER+ZunudCZ+uo1LuzXlwQvbOx2nWqn8ioiIiMgPEjPyeWDuOto3qc+/buqNTx2/we1kKr8iIiIiAkBeUSnjZiVgLbxxexz1Az3v9jCVXxERERHB5bL85r2N7E7N4bVb+xLduJ7TkWqEyq+IiIiI8Oo3e/hsy1GeuqILQzpEOB2nxqj8ioiIiHi5L7al8OIXuxjepyVjh7RxOk6NUvkVERER8WK7U3J4dN4GerYK46/De2CMZ93gdjKVXxEREREvlZ1fwrhZCQT5+zLltliC/H2djlTjVH5FREREvFCZy/LQO+s5lFXA5NF9aR4W7HSkWuF5+1eIiIiIyFm9sHgH3+1K4/nhPYiLCXc6Tq3RzK+IiIiIl/lg/SGmfLeP0QOiGNk/yuk4tUrlV0RERMSLbEjK4okFmxjQNpxnru7mdJxap/IrIiIi4iVSjhcyflYCTRsE8vqoWPx9va8Ket9/sYiIiIgXKiwpY/ysBPKKSnnz9n6E1wtwOpIjdMObiIiIiIez1vLkgk1sOpTNlNGxdGoW6nQkx2jmV0RERMTDTf5uHx9sOMxvLunEJd2aOR3HUSq/IiIiIh7sq+0pvLB4B1f1bM6EC9o5HcdxKr8iIiIiHmpXSg4Pv7OB7i3C+McNvTz+0cUVofIrIiIi4oGO5RVz98wTjy6eensswQGe/+jiilD5FREREfEwJWUu7p+zjqPZhUy9PdZrHl1cEdrtQURERMTDPPfJNpbvzeCfN/aib1Qjp+O4Fc38ioiIiHiQOasSmbniIOOGtuGG2FZOx3E7Kr8iIiIiHmLVvgz++OEWzu8YyZOXd3E6jltS+RURERHxAEmZ+dw3ex1RjUN4eWQffH20s8OpnLX8GmOmG2NSjTFbfnIs3BjzhTFmd/lHLSYRERERcUheUSnjZiVQWubizdvjCAv2dzqS26rIzO8M4LKTjj0JfGWt7QB8Vf5rEREREallLpflsXc3sCslh1dv7UvbyPpOR3JrZy2/1trvgcyTDl8LzCz/+UzgumrOJSIiIiIV8NKXu1i8NYXfX9mV8zpGOh3H7Z3rmt+m1tojAOUfm5zuRGPMeGNMgjEmIS0t7Rw/nYiIiIic7JNNh3n56z3cFNeKuwbHOB2nTqjxG96stVOttXHW2rjISP1rRERERKQ6bDmUzW/e20hcdCP+cl13Pbq4gs61/KYYY5oDlH9Mrb5IIiIiInImKccLGTtzDY3rBTJpdCyBfnp0cUWda/n9CLij/Od3AB9WTxwREREROZOC4jLGzUogt7CUN++IIzI00OlIdUpFtjqbC6wAOhljko0xY4G/ARcbY3YDF5f/WkRERERqkMtl+c17G9l8KJt/39KHLs0bOB2pzvE72wnW2pGneemias4iIiIiImfw0le7+XTzEZ6+ogvDujZ1Ok6dpCe8iYiIiNQBH244xMtf7eamuFbcPbSN03HqLJVfERERETe3LvEYj8/fRHybcJ67rod2dqgClV8RERERN3Yoq4Dxs9bSPCyIyaNjCfBTfauKs675FRERERFn5BWVcvfMBIpKy3hnfDyN6gU4HanOU/kVERERcUNlLsvD72xgV0oOb93Zj/ZNQp2O5BE0by4iIiLihl5YvIMvt6fwzNVdOa+jnpJbXVR+RURERNzMewlJTPluH7cNiOb2gTFOx/EoKr8iIiIibmTVvgyeWriZIe0jeObqrk7H8TgqvyIiIiJuIjEjn3vfXkvr8BBeG9UXP19VteqmG97EI5SWucjML+Z4QSk5hSXkFJaSV1RKqcvisuU/XBDg50Owvy8hAb4EB/jSINifyNBAQgP9tGeiiIg46nhhCWNmrsEC0+/oR1iwv9ORPJLKr9QJ1loy8orZm5rL3rQ89qblkpSZT8rxQo4eLyQtpwiXPfc/P8jfh8jQQJo1CCKmcT3aRtanbWQ92kXWI6ZxPf3LW0REalRpmYsH56znQHoe/xkbT0xEPacjeSyVX3E71lqSjxWwKTmbTclZbEzOYsfRHLLyS344J8jfh9aNQmgWFkTHpqE0DwsiMjSQBsH+hAb5ERrkT/1AP/x9DcYYfIzBx0BxqYv84jLyi8soKCklu6CEtJwiUo8XkZZbxJGsQr7ZmcZ7a5N/+FzB/r50a9GAnq0a0qt1GHEx4bRsGAzA7Nnw9NOQmAhRUTBxIowaVetDJiIidZi1lmc/3sp3u9L42/AeDGzX2OlIHk3lVxxnrWV3ai7L96SzYl8GCQeOkZFXDECArw9dmodyRY/mtI+sT7sm9WkXWY8WYcH4+NTcMoXjhSUcSM9jT2oumw9lsyk5mzmrDzJ9mQuANhH1CDvUls8nt6Ko8MSs8MGDMH78id+vAiwiIhU1bel+3l6ZyL3nt+OW/lFOx/F4xtoqvFdcSXFxcTYhIaHWPp+4r8y8Yr7Zkco3O1NZuS+D9NwTZbd1eDDxbRrTq3VDerUKo3OzBm7zGMfSMhc7U3JYuS+TZXvS+c8j3SnNDv7FedHRcOBA7ecTEZG6Z/HWo9z79lou796MV0f2rdGJHW9jjFlrrY37xXGVX6kte1Jz+XJ7Cl9uS2Fd4jFcFiJDAxnSPoKBbRszsF1jWoeHOB2zwnx8LNae6ouU5d01yVzRozn1AvXmioiInNqm5CxumrKCzs0a8M74AQT5+zodyaOcrvzqO7PUqKTMfD7aeJiPNx5mx9EcALq1aMADF3bg4i5N6d6yQZ3dZSEqynDw4C+PBzYs4vH5m3j2o61c2bM5N8W1Jja6UZ397xQRkeqXfCyfsTMTiKgfyJt3xKn41iKVX6l26blFfLLxMB9tPMy6xCwAYqMb8ezVXbmkWzNaNPzlUoG6aOLEE2t88/N/PBYSAlNfDaTT4IG8l5DMJ5sO825CMp2bhTJmcBuu6d1CX+BERLzc8cISxs5IoLCkjDl3xxNRP9DpSF5Fyx6kWrhclqV70nlnTSJfbEuhpMzSuVko1/RuwdU9W9Sp5QyVcbbdHvKKSvlk02HeWnaAHUdzCK8XwKj4KG4bGE2T0CDngouIiCNKylyMmbGGFXszmDmmP4PbRzgdyWNpza/UiJTjhbyXkMS8hCSSMgtoFOLPiL6tuDGuNZ2ahTodz21Ya1mxL4PpSw/w1Y4U/H19GNmvNfec385jZsJFROTMrLU8tXAzc1cn8cKIntzUr7XTkTya1vxKtVqfeIzpyw6waPMRylyWgW0b8/ilnbm0W1MC/fS2/smMMQxqF8GgdhEcSM9j0rd7mb0qkTmrE7khthUTLmjvsbPjIiJywtTv9zF3dRL3/6qdiq+DNPMrFVZa5mLx1hSmLd3HusQsQgP9uLlfa0YNiKaNnkRTacnH8pn83V7eXZOMxTIqPpoHLmyvtV8iIh5o0eYjTJi9jqt6NuflW/poS7NaoGUPcs7yi0uZuzqJ6Uv3cyirgKjwEO4aHMONca2pr628quxodiEvf72beWuSCPLzYfx57bh7aBttkyYi4iHWJx7jlqkr6daiAXPGaUuz2qLyK5WWU1jCrBUHmb50Pxl5xfRvE87dQ9pwUZem+OpfrNVub1ou/1y8k8+2HCWifgCPDOvIyP5RGmsRkTosKTOf619fRkiAHwsnDKKx3t2rNSq/UmFZ+cVMX3aAGcv2c7ywlAs6RfLAr9oTFxPudDSvsC7xGH/7bAer92fStXkD/nRtN/pp7EVE6pzsghJumLSclOOFvD9hMO2b1Hc6kldR+ZWzys4vYfL3e5m1/AB5xWVc2q0pD/yqAz1ahTkdzetYa/l08xEmfrqdI9mFXN+nJb+7vDNNGmh7NBGRuqC41MWdb61mzYFMZo2JZ2C7xk5H8jra7UFOK6+olBnLDzD5u73kFpVyVc8WPPCr9tqqzEHGGK7q2YILOzfh9W/2MvX7ffx361Eevbgjdw6Kwc/Xx+mIIiJyGtZanpi/keV7M/jXjb1UfN2Myq8XKyotY+6qRF79Zg/pucUM69KUX1/SkS7NGzgdTcqFBPjxm0s7cUNsK/708Vae+3Q7H208zN9H9NT/JxERN/WPxTv5YMNhHr+0EyNiWzkdR06iZQ9eyOWyLFx/iBe/2MWhrAIGtA3n8Us7ExvdyOlocgbWWj7ZdIRnP9pKdkEJ95zflgcv7KC7hkVE3Mh/Vh7kDx9s4db4KCZe1x1jdNOyU7TsQQBYvT+Tv3yyjc2HsunRMoznh/dgaIcI/eWsA4wxXN2rBUPaRzBx0XZe+2Yvn20+yvPDexDfVm+piYg47YttKTzz4RYu6tyEP1/TTd9b3ZRmfr1EUmY+z3+2nUWbj9I8LIjfXtaZa3q10CbbddiS3Wk8tXAzSZkFjBnchicu66RZYBERh6xPPMbIN1bSqWkoc8cPICRA84tO08yvl8opLOHVb/bw1tID+PoYHh3WkfHntSU4QCWprhvaIZLFj5zH3z/bwfRl+/l+dxr/d1Nv7c4hIlLLDqTnMXZmAk1Cg3jzjn4qvm5OM78eyuWyvLc2iX8s3kl6bjEj+rbi8Us70SxMW2V5oiW703j8vU2k5xbx0EUdmHBBO+0IISJSCzJyixg+aTnHC0pYcN8g2kZqL193oZlfL7L1cDZ/+GAL6xKziI1uxPQ7+9GzVUOnY0kN+t8s8B8/2sKLX+ziqx2p/N9NvfRFWESkBhUUlzFmZgJHswuZM26AvubWEZoa8iDHC0t49qOtXP3KUg5m5PPPG3sx/96BKr5eIizEn3/f0odXb+3DgfQ8rnplKQvXJzsdS0TEI5WWuXhw7jo2JWfx8sg+2jGpDtHMrwew1vLhhsNMXLSd9NwiRsVH8fglnQkL8Xc6mjjgqp4tiI1uxMNzN/DovI0s3Z3Bn6/tRr1A/XUXEakO1lqe/XgrX25P5c/XduPSbs2cjiSVoO+GddzetFx+v3ALK/Zl0KtVGNPuiNNMr9A8LJg54+J5+avdvPLNHtYnHePVkX3p2kIPxhARqapJ3+3l7ZWJ3HN+W24fGON0HKkkLXuoo0rKXLz2zR4u//cSth7O5rnruvP+hMEqvvIDP18fHrukE7Pvjie3sJTrXl/Gf1YcoDZvchUR8TTz1ybzwuc7ubpXC357aWen48g50MxvHbQxKYvfLtjEjqM5XNmjOc9c05UmodrFQU5tULsIFj08lF+/u5E/fLiVFfsyeOGGXtTXMggRkUr5ansKv12wicHtG/PPG3tqr/w6St/96pD84lJe/O8upi/bT2RoIFNvi+USrTOSCoioH8hbd/Zj6pJ9vPD5DnYezWHKbbG0bxLqdDQRkTph7cFM7p+zjq7NGzDltjgC/bRffl1VpWUPxphHjTFbjTFbjDFzjTGafqwhS3enc+lL3/Pm0v3c0j+KLx47X8VXKsXHx3Dv+e14++54svJLuPbVZSzafMTpWCIibm9XSg5jZiTQPCyYt+7qp3fO6rhzLr/GmJbAQ0CctbY74AvcUl3B5ITjhSU8MX8jo6etwt/Hh3njB/DX63vQIEg7Oci5GdQugk8eGkKHpqFMmL2O5xdtp7TM5XQsERG3dCirgNunrSbAz4dZY/oTUT/Q6UhSRVX9p4sfEGyMKQFCgMNVjyT/s3R3Ok/M38jR44Xcd0E7Hr6oA0H+eptFqq55WDDz7hnAXz7ZxpTv97ExOYtXb+2rL+oiIj9xLK+Y26etIq+olHn3DKR1eIjTkaQanPPMr7X2EPBPIBE4AmRba/978nnGmPHGmARjTEJaWtq5J/UieUWl/OGDLYyetoqgAF8W3DeI317WWcVXqlWgny/PXdeDf97Yi/WJWVz18lI2JGU5HUtExC3kF5dy14w1JB0r4M074rRVpAepyrKHRsC1QBugBVDPGDP65POstVOttXHW2rjIyMhzT+olVu/P5PJ/L+HtVQcZO6QNix4aSp8oPTVGas4Nsa1YcN8g/HwNN01ZwQfrDzkdSUTEUSVlLibMPvH0tldG9iG+bWOnI0k1qsoNb8OA/dbaNGttCfA+MKh6YnmfwpIynvtkGzdPXYHF8s64Afzhqq6a7ZVa0b1lGB/eP5jerRvyyLwN/P3zHbhc2g9YRLyPy2V5Yv4mvt2ZxsTre+jpbR6oKmt+E4EBxpgQoAC4CEiollReZmNSFo++u4F9aXmMHhDF7y7vokfRSq1rXD+Qt8fG8+zHW5n07V52p+Tw0i19dFeziHiV5z/bzsL1h/j1xR0Z2T/K6ThSA6qy5ncVMB9YB2wu/7OmVlMur1Dmsrz69W5GTFpOQXEZ/xnbn+eu66HiK44J8PNh4nXd+fO13fhmZxrDX19GYka+07FERGrFlO/28saS/dwxMJoHLmzvdBypIaY2H3UaFxdnExI0OQyQfCyfx+ZtZPWBTK7q2ZyJ1/UgLETbl4n7WLYnnQmz1+Fj4PVRsQxspzVvIuK55q5O5Hfvb+aqns15+ZY+enqbBzDGrLXWxp18vEoPuZBz8+GGQ1z+0hK2HTnOizf14pWRfVR8xe0Mbh/Bh/cPpnH9QG6btoo5qxKdjiQiUiM+3niYpxZu5oJOkbx4U28VXw+n8luLsgtKePid9Tz8zgY6Ngvls4eHMrxvK4zRXzJxTzER9Xh/wiCGdojgqYWb+eui7boRTkQ8ytc7Unh03gb6xYQzaVQsAX6qRp5Oi0tryer9mTw6bwNHjxfy2MUdmXBBO/x89RdM3F+DIH/euD2OP3+yjanf7yMpM58Xb+pNcIB2IhGRum3lvgzue3sdXZo3YNodcfq65iVUfmtYSZmLl77cxaRv99I6PIT59w7Uvr1S5/j5+vCna7oR3bgez326jcNvrOTN2+OIDNUT4USkbtqUnMXdMxNoHR7CzDH9CQ3S8kNvoanHGpSUmc8Nk1fw2jd7uSG2FZ/qgRVShxljGDukDVNGx7LraA7Xv76M3Sk5TscSEam03Sk53DF9NQ1D/Hl7bDzh9QKcjiS1SOW3hizafIQrXl7CvrRcXru1Ly/c0Ev7pYpHuKRbM+bdM4CiUhfDJy1n2Z50pyOJiFRYYkY+o95chZ+vD7PvjqdZWJDTkaSWqfxWs8KSMp5euJkJs9fRLrI+ix4aypU9mzsdS6Ra9WzVkIUTBtE8LIg7pq/m3TVJTkcSETmrlOOFjJ62iqJSF2+PjSe6cT2nI4kDVH6r0Z7UHK57bRmzVyVyz/ltee/egbQOD3E6lkiNaNUohPn3DWJgu8Y8sWAT//rvTmpz33ARkco4llfMbdNWkZFbxMwx/enULNTpSOIQvQ9fDay1vLc2mWc+3EpwgC9v3dWPX3Vq4nQskRrXIMif6Xf24/cLt/DK13s4kl3I88N74K+dTETEjRwvLOHOt1ZzICOfGXf1o3frhk5HEgep/FZRblEpv1+4mQ82HGZg28a8dEtvmjbQ+iHxHv6+PvxtRA+aNwzipS93k5ZTxOuj+uox3SLiFnKLSrlz+mq2Hj7OlNtiGdQuwulI4jBNz1TBlkPZXP3KUj7aeJjHLu7I23fHq/iKVzLG8Miwjjw/vAdLdqcx8o2VpOcWOR1LRLxcQXEZY2asYWNyNq/e2oeLujR1OpK4AZXfc2CtZcay/Qx/fTkFxWXMHTeAhy7qgK8ehyhebmT/KN64PY5dKTmMmLScA+l5TkcSES9VWFLGuFkJJBzI5P9u7s1l3XXzuZyg8ltJ2QUl3Pv2Wp79eBtDO0Sw6OGhxLdt7HQsEbdxUZemzB03gOMFJYyYtJwNSVlORxIRL1NUWsa9b69l2d50XrihF9f0auF0JHEjKr+V8L9lDl9tT+XpK7rw5h1x2hhb5BT6RDViwX2DCAn0ZeTUlXyzI9XpSCLiJUrKXDwwZz3f7kzjr9f34IbYVk5HEjej8lsB1lrmrk5k+KTlFJe6mHfPAMad1xZjtMxB5HTaRtZnwX2DaNekHnfPStBewCJS40rLXDz8znq+2JbCn6/txsj+UU5HEjek8nsW+cWl/Prdjfzu/c3Etwnn04eGEBsd7nQskTqhSWgQ74wfyKDyvYBf/mq39gIWkRpR5rL8+r2NLNp8lN9f2YXbB8Y4HUnclPYiOoM9qblMmL2W3am5PDKsAw9eqJvaRCqrfqAf0+7ox5MLNvHiF7tIzSnkT9d0198lEak2Lpfltws28eGGwzx+aSfuHtrW6UjixlR+T+OjjYf53YJNBPr7MmtMf4Z2iHQ6kkidFeDnw79u6kWTBkFM/m4vx/JKePHmXgT6+TodTUTqOJfL8tTCzcxfm8zDF3Xg/l+1dzqSuDmV35MUlZYx8dPtzFpxkNjoRrx6ax+ahwU7HUukzjPG8OTlnYmoH8Bzn24nq6CYKbfFUV8PwxCRc+RyWZ58fxPvJiRz/6/a8ciwDk5HkjpAa35/Iikzn5smr2DWioOMG9qGd8YPUPEVqWZ3D23Lizf1YuW+TEZO1cMwROTclLksTyw4UXwfuqgDv7mkk25ElwpR+S339Y4UrnplKfvS8pg8Opanr+yKv6+GR6QmDO/bijduj2V3ag43Tl5BUma+05FEpA4pc1ken7+R+WuTeWRYBx67uKOKr1SY17e70jIXL3y+gzEzEmjZMJhPHhrCZd2bOR1LxONd2Lkps++OJzOvmBGTlrPj6HGnI4lIHVDmsvzmvY28v+4Qjw7ryCPDOjodSeoYry6/qTmFjHpzFa9/u5eR/Vvz/oRBRDeu53QsEa8RGx3Oe/cOxMcYbpq8gjUHMp2OJCJurLTMxWPvbmDh+kP8+uKOPKw1vnIOvLb8rtyXwZUvL2Vjchb/urEXzw/vSZC/7jwXqW0dm4Yy/76BRNQPZPSbq/hyW4rTkUTEDZ0ovht/2M7swYtUfOXceF35dbksr32zh1vfWElokB8f3j+EEXr0oYijWjUK4b17B9K5WSj3vL2W9xL0NDgR+VFpmYtH393IRxsP88RlnbSdmVSJV5XfrPxi7p6VwD8W7+SKHs356IEhdGoW6nQsEQEa1w9kzrgBDGrXmMfnb2LKd3udjiQibqCotIwH5qzn442HefLyzky4QMVXqsajy+/s2RATAz4+0KJVGf3v2s2S3Wn8+dpuvDKyj/YXFXEz9QL9ePOOOK7q2ZznP9vBXxdt1+OQRbxYQXEZ42et5fOtR/njVV259/x2TkcSD+Cx7W/2bBg/HvLLd1A6csgXn4Wd+cs/Y7h9oG5qE3FXgX6+vHxLHxrXC2Dq9/vIyC3mbyN6aOtBES+TW1TK2BlrWH0gk7+P6MHN/aKcjiQewmO/mzz99I/F939cJb5MfVHFV8Td+fgYnr2mG49d3JEF65K59z9rKSguczqWiNSS7PwSRr+5ioSDx3jp5t4qvlKtPLb8JiZW7riIuBdjDA9d1IHnruvO1ztTuW3aKrLzS5yOJSI1LD23iFveWMm2w8eZNKov1/Zu6XQk8TAeW36jTvOPxNMdFxH3NHpANK/d2pdNydncNGUFR7MLnY4kIjXkaHYhN09Zwf70XKbdGccl3fTQKal+Hlt+J06EkJCfHwsJOXFcROqWK3o0Z8Zd/Ug+ls+IScvZl5brdCQRqWZJmfncOGU5KceLmDUmnqEdIp2OJB7KY8vvqFEwdSpER4MxJz5OnVWyDdcAABZfSURBVHriuIjUPYPaR/DO+IEUlpRxw+QVbEjKcjqSiFSTPak53Dh5BTmFpcwZF0//NuFORxIPZmpzG6G4uDibkJBQa59PRDzP/vQ8bp++iozcYiaNjuX8jpodEqnL1iUeY8yMNfj7+vCfsf3p3KyB05HEQxhj1lpr404+7rEzvyLimdpE1GPBfYOIaVyPsTPWsHB9stORROQcfbMzlVFvrCIs2J8F9w5S8ZVaofIrInVOk9Ag5t0zgH4x4Tw6byNvfL/P6UgiUkkfrD/EuJkJtI2sx/x7BxHVOOTsv0mkGqj8ikidFBrkz4wx/biyR3MmLtrOxE+34XLpaXAidcG0pft5ZN4G+sWE8874AUSGBjodSbyIxz7hTUQ8X6CfLy+P7EPj+gG8sWQ/6bnFvHBDTz0NTsRNWWv5x+KdvP7tXi7r1oyXbulNkL+v07HEy6j8ikid5utj+NM13WjaIIh/LN5JRl4xk0b1pV6gvryJuJPSMhdPL9zCvIQkRvaP4rnruuPrY5yOJV6oStMjxpiGxpj5xpgdxpjtxpiB1RVMRKSijDHc/6v2/H1ED5buTuPWN1aSkVvkdCwRKZdfXMq9b69jXkISD17Ynr9er+Irzqnqe4P/Bj631nYGegHbqx5JROTc3Nwviim3xbHjaA43TF5BUma+05FEvF5aThG3TF3J1ztS+PO13fj1JZ0wRsVXnHPO5dcY0wA4D5gGYK0tttZq13kRcdTFXZsy++54MvOKGTFpOduPHHc6kojX2pOay/WvL2NXSg5Tbovj9oExTkcSqdLMb1sgDXjLGLPeGPOmMabeyScZY8YbYxKMMQlpaWlV+HQiIhUTFxPOe/cOxNfHcNPkFazYm+F0JBGvs2pfBiMmLaewpIx54wdycdemTkcSAapWfv2AvsAka20fIA948uSTrLVTrbVx1tq4yEg9iUlEakfHpqEsuG8QTcOCuGP6aj7bfMTpSCJe48MNh7ht2moa1w9g4YTB9Grd0OlIIj+oSvlNBpKttavKfz2fE2VYRMQttGgYzPx7B9K9ZQMmzFnHrBUHnI4k4tGstUz6di8Pv7OB3q0b8v59g2gdrodXiHs55/JrrT0KJBljOpUfugjYVi2pRESqScOQAGbfPYCLOjfljx9u1cMwRGpISZmLpz/Ywt8/38HVvVowa2x/GoYEOB1L5BequhHmg8BsY0wAsA+4q+qRRESqV3CAL1Nui+XPH2/ljSX7OZRVwIs3aXN9kepyLK+YCbPXsWJfBvdd0I7HL+mEj7YyEzdVpfJrrd0AxFVTFhGRGuPrY3j2mm60Dg/huU+3k3J8FW/cHkd4Pc1MiVTFntQcxs5M4EhWIf+8sRc3xLZyOpLIGekZoCLiNYwx3D20La+P6svmQ9mMmLScA+l5TscSqbO+3ZnK9a8tJ6+olLnj41V8pU5Q+RURr3NFj+bMHRdPVn4xwyctZ+3BY05HEqlTrLVMX7qfMTPW0LJRMB/cP5jY6HCnY4lUiMqviHil2Ohw3p8wmNAgP259YyWfb9FWaCIVUVzq4qmFm/nzJ9sY1qUpC+4bRKtG2tFB6g6VXxHxWm0i6vH+fYPo1qIB981ex7Sl+52OJOLWUnMKGf3mKuauTmLCBe2YPDqWeoFVvXdepHap/IqIV2tcP5A54wZwWbdm/OWTbfzxwy2UlrmcjiXidtYePMbVryxl06Es/n1Lb564rLN2dJA6SeVXRLxekL8vr93al/HntWXWioPcNWMN2QUlTscScQvWWt5eeZBbpq4g0M+XhRMGc23vlk7HEjlnKr8iIoCPj+GpK7rwwoierNyXwfWvL9NOEOL1CkvKeGL+Jn7/wRYGt4/g4weG0KV5A6djiVSJyq+IyE/c1K81b4+N51heMde+tozle9OdjiTiiENZBdw0ZQXvrU3moQvbM+2OfoSF+DsdS6TKVH5FRE4S37YxH94/hCahgdw+bTWzVx10OpJIrfp+VxpXv7KU/Wl5vHF7HI9d0glfre8VD6HyKyJyClGNQ1gwYRBDOkTw9MItPPvRVt0IJx6vtMzFPxbv4I63VhNZP5APHhjMxV2bOh1LpFppfxIRkdNoEOTPtDv68ddF25m2dD/70vN4ZWQfwoL11q94niPZBTw8dwOrD2RyS7/WPHN1N4IDfJ2OJVLtNPMrInIGvj6GP1zVleeH92D5nnSuf20Zu1NynI4lUmWzZ0NMDPj4QNOWZQwYs5sth7N56ebe/G1ETxVf8VgqvyIiFTCyfxRzxg3geGEJ1722jM8264lwUnfNng3jx8PBg2AtpB72JfnjboxrcQHX9dE2ZuLZVH5FRCqof5twPnlwKB2ahnLf7HX8/fMdlLms07FEKu3ppyE//+fHXCW+/PtvQc4EEqlFKr8iIpXQLCyIefcMYGT/1kz6di93vrWaY3nFTscSqTBrLYmJp/5HW2JiLYcRcYDKr4hIJQX6+fL88J48P7wHq/ZlcvWrS9l6ONvpWCJnlZVfzANz1uMTWnDK16OiajmQiANUfkVEztHI/lHMu2cApWWWEZOW815CktORRE5r2Z50LntpCYu3HmX0g8cJCfn57G9ICEyc6FA4kVqk8isiUgV9ohrx8YND6NO6EY/P38Sv391IfnGp07FEflBYUsZzn2xj1JurCAn05YP7BzPjuWZMnWqIjgZjIDoapk6FUaOcTitS84y1tXezRlxcnE1ISKi1zyciUlvKXJaXv9rNy1/vpl1kfV4f1ZeOTUOdjiVebu3BTB5/bxP70vMYPSCKp6/oqi3MxGsYY9Zaa+NOPq6ZXxGRauDrY3j04o68PTaerPxirnl1qZZBiGMKisv4yyfbuGHyCopKXbw9Np7nruuh4iuCyq+ISLUa3D6CRQ8N/WEZxGPvbiCvSMsgpPas2pfB5f/+nmlL9zM6PprFj57HkA4RTscScRt6vLGISDVr0iCIt++O/2EZxLqDx/i/m3vTJ6qR09HEg+UWlfLPxTuZsfwArcODmTMunkHtVHpFTqaZXxGRGvC/ZRBzxw2gpMxyw+QVvPTlLkrLXE5HEw9jreXzLUcY9q/vmLniAHcOimHxI+ep+IqchmZ+RURq0IC2jfnskaE88+FWXvpyN9/uTOOlm3sTE1HP6WjiAZIy83n2o618tSOVLs0b8ProvvTVOwwiZ6TdHkREasnHGw/z9MLNlLosf7yqKzf3a40xxulYUgeVlLl4c8l+/v3VLnyM4bGLO3LnoBj8fPWGrsj/nG63B838iojUkqt7tSAuphG/fncjT76/mc+3HuWv1/egRcNgp6NJHbJ8bzp/+mgbO1NyuKRrU565phstdQ2JVJhmfkVEapnLZZm54gAvfL4TXx/Dk5d35tb+Ufj4aBZYTi8xI5+/LtrO51uP0rJhMM9e042LuzZ1OpaI2zrdzK/Kr4iIQ5Iy83ny/U0s25NBfJtw/j6ip9YCyy/kFpXy2jd7mLZkP74+hgkXtGPceW0J8teevSJnovIrIuKGrLW8m5DEc59up7jUxWMXd2TMkDb4a+2m13O5LAvWJfPC4p2k5RQxvE9LnrisM83CgpyOJlIn6AlvIiJuyBjDzf2i+PKx8zmvYyTPf7aDK19ewsp9GcyeDTEx4ONz4uPs2U6nldpgreXrHSlc8fISHp+/iZYNg1k4YRAv3txbxVekGmjmV0TETVhr+XJ7Kn/6eCs7ljYi+789KS3+8a3tkBCYOhVGjXIwpNSoNQcyeeHzHaw5cIzoxiE8dnFHru7ZQuvBRc6Blj2IiNQRBcVltGzt4liq/y9ei46GAwdqP5PUrO1HjvOPxTv5ekcqkaGBPHxRB27u11rLX0SqQFudiYjUEcEBvmSlnfpmpsREC2gW0FPsOHqcV77ew6LNRwgN9OO3l3XmzkExBAfoZjaRmqLyKyLihqKi4ODBXx4PaljEqn15xLdtXPuhpNpsTs7m5a9388W2FOoH+nHf+e2457x2hIX8crZfRKqXyq+IiBuaOBHGj4f8/B+PBQS5aDFsDzdPPciFnZvw6LCO9GgV5lxIqbSEA5m8+s0evt2ZRoMgPx4Z1oG7BrVR6RWpRSq/IiJu6H83tT39NCQmnpgJnjjRh+E3dmH6siCmfr+Pq19dyrAuTXhkWEe6t1QJdlelZS4+33qUN5fsZ0NSFuH1Anjisk7cNiCa0CCVXpHaphveRETqoJzCEmYuP8AbS/aTXVDCsC5NefDC9vRq3dDpaFLueGEJ765J4q1lBziUVUBM4xDGDGnDDbGtCAnQ3JNITdNuDyIiHuh4YQkzlx3gjSX7OF5YSv+YcMad15aLOjfR9lgO2XH0OHNWJfL+ukPkFpXSv004dw9pw0VdmuKr/ycitUblV0TEg+UWlTJvTRLTl+7nUFYBbSPqMXZoG67v01KzjLWgsKSMTzYdYc6qg6xLzCLAz4crujdjzJA29Gyl2XgRJ9RY+TXG+AIJwCFr7VVnOlflV0SkZpWWufhsy1HeWLKPTcnZhAb5MbxPS26Nj6ZTs1Cn43kUay2bkrNZuP4Q769L5nhhKW0j6nFrfBQj+raiUb0ApyOKeLWa3Of3YWA70KAa/iwREakCP18fru7Vgqt6Nifh4DFmrzzI3NVJzFxxkNjoRtzaP4rLezTTbHAVJGbk88GGQ3yw/hD70vMI8PPhkq5NGRUfzYC24RijpQ0i7qxKM7/GmFbATGAi8JhmfkVE3E9mXjEL1iYzd3Ui+9LzCAnw5ZKuTbm2d0uGdIjQU8QqICkzn/9uS2HR5iOsPXgMgAFtw7m+T0su696csGDt2iDibmpk2YMxZj7wPBAK/EblV0TEfVlrWb0/kw82HGbR5iNkF5QQXi+AK3s059JuzejfJpwAPxVhODFWO1NyWLwlhcVbj7LtyHEAOjcL5dreLbmmdwtaNgx2OKWInEm1l19jzFXAFdbaCcaYCzhN+TXGjAfGA0RFRcUePNUji0REpFYVlZbx/a50PthwiC+3pVBU6iI0yI8LOjVhWJcmXNCpidfNZmblF7N8bwZLdqezZHcayccKMAb6RjXi0m5NuaRrM2Ii6jkdU0QqqCbK7/PAbUApEMSJNb/vW2tHn+73aOZXRMT9FBSXsWR3Gl9uT+Gr7alk5BXj62Po0TKMwe0bM6hdBLHRjQjy93U6arXKLihhQ1IWa/ZnsmRPOpuTs3BZqB/ox4C2jflV50gu7tqUJqFBTkcVkXNQo1udnWnm96dUfkVE3FuZy7Ih6Rjf7Ehj+d50NiZnU+ayBPj50Kd1Q3pHNaR3q4b0at2Q5mFBdebmrtIyFwcy8lifmMW6xCzWHTzGrtQcrAVfH0OvVmEM7RDJ0A4R9GrdUOugRTxATe72ICIiHsLXxxAbHU5sdDjQidyiUtbsz2T53nRWHzjGW0sPUFzmAqBJaCDdW4bRoWl9OjQJpWPT+rRvUt/RnSTKXJbDWQUczMhnd2oO248cZ/uRHHal5FBUeiJ3aJAffaMacWXP5vSNakSv1mF6zLCIF9FDLkREpMKKSsvYcSSHDUlZbEjKYvuR4+xLy/uhEAM0bRBIy4bBtGwUUv4xmMj6gYTXC6BRiD+N6gXQMNgfv0rMrpaUucgtLCW3qJSs/BJScwpJzSki9XgRqTmFHMku5EBGHkmZ+ZSU/fh9rXG9ALo0b0DnZqF0ad7gRFlvUl9PvxPxAnrCm4iI1IgTSwry2ZOaw66UXA5m5HMoK5/DWYUcyS74WRn9qQA/HwL9fAj08y3/6IPLWsqsxeU6MYtb6nKRW1RKYYnrlH8GQKMQf5qFBRPTOIToxvV++Ngush6RoYF1ZmmGiFQvLXsQEZEa4efrQ/smJ5Y8XNb956+VuSxpOUWk5xaRlV9CZn4xx/KKOZZfTGGJi6LSMopKXRSV/9zHGHx9TPlH8PXxITTIj9BAP+oH+VE/0I8Gwf40CQ2kSYMgIuoHEOjnWTfiiUjNUvkVEZEa4+tjaBYWRLMw7ZggIu5Bt7OKiIiIiNdQ+RURERERr6HyKyIiIiJeQ+VXRERERLyGyq+IiIiIeA2VXxERERHxGiq/IiIiIuI1VH5FRERExGvU6uONjTFpwMFa+4Q/igDSHfi8dZXGq/I0ZpWj8aocjVflaLwqR+NVORqvynFyvKKttZEnH6zV8usUY0zCqZ7tLKem8ao8jVnlaLwqR+NVORqvytF4VY7Gq3Lccby07EFEREREvIbKr4iIiIh4DW8pv1OdDlDHaLwqT2NWORqvytF4VY7Gq3I0XpWj8aoctxsvr1jzKyIiIiIC3jPzKyIiIiKi8isiIiIi3sOjyq8x5jJjzE5jzB5jzJOneN0YY14uf32TMaavEzndRQXG6wJjTLYxZkP5jz86kdNdGGOmG2NSjTFbTvO6rq+fqMB46foqZ4xpbYz5xhiz3Riz1Rjz8CnO0fX1ExUcM11j5YwxQcaY1caYjeXj9adTnKNrrFwFx0vX10mMMb7GmPXGmE9O8ZrbXF9+Tn3i6maM8QVeAy4GkoE1xpiPrLXbfnLa5UCH8h/xwKTyj16nguMFsMRae1WtB3RPM4BXgVmneV3X18/N4MzjBbq+/qcU+LW1dp0xJhRYa4z5Ql+/zqgiYwa6xv6nCLjQWptrjPEHlhpjPrPWrvzJObrGflSR8QJdXyd7GNgONDjFa25zfXnSzG9/YI+1dp+1thh4B7j2pHOuBWbZE1YCDY0xzWs7qJuoyHjJT1hrvwcyz3CKrq+fqMB4STlr7RFr7bryn+dw4ptHy5NO0/X1ExUcMylXft3klv/Sv/zHyXe86xorV8Hxkp8wxrQCrgTePM0pbnN9eVL5bQkk/eTXyfzyC2FFzvEWFR2LgeVv+3xmjOlWO9HqLF1flafr6yTGmBigD7DqpJd0fZ3GGcYMdI39oPwt6Q1AKvCFtVbX2BlUYLxA19dPvQQ8AbhO87rbXF+eVH7NKY6d/K+0ipzjLSoyFus48VzsXsArwAc1nqpu0/VVObq+TmKMqQ8sAB6x1h4/+eVT/Bavv77OMma6xn7CWltmre0NtAL6G2O6n3SKrrGfqMB46foqZ4y5Cki11q4902mnOObI9eVJ5TcZaP2TX7cCDp/DOd7irGNhrT3+v7d9rLWLAH9jTETtRaxzdH1Vgq6vnytfV7gAmG2tff8Up+j6OsnZxkzX2KlZa7OAb4HLTnpJ19gpnG68dH39zGDgGmPMAU4so7zQGPP2See4zfXlSeV3DdDBGNPGGBMA3AJ8dNI5HwG3l99xOADIttYeqe2gbuKs42WMaWaMMeU/78+J6yWj1pPWHbq+KkHX14/Kx2EasN1a++JpTtP19RMVGTNdYz8yxkQaYxqW/zwYGAbsOOk0XWPlKjJeur5+ZK39nbW2lbU2hhN94mtr7eiTTnOb68tjdnuw1pYaYx4AFgO+wHRr7VZjzL3lr08GFgFXAHuAfOAup/I6rYLjdQNwnzGmFCgAbrFe/EhAY8xc4AIgwhiTDDzDiZsgdH2dQgXGS9fXjwYDtwGby9cYAjwFRIGur9OoyJjpGvtRc2Bm+U4/PsC71tpP9D3ytCoyXrq+zsJdry893lhEREREvIYnLXsQERERETkjlV8RERER8RoqvyIiIiLiNVR+RURERMRrqPyKiIiIiNdQ+RURERERr6HyKyIiIiJe4/8BSuwAXhy81GUAAAAASUVORK5CYII=\n", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "text/plain": "
" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "text/plain": "
" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#\n", "#Plot a different natural spline, along with its 1st and 2nd derivatives, each time you run this\n", "#\n", "%run plothelp.py\n", "%matplotlib inline\n", "import random\n", "import numpy\n", "Y = [random.random()*10.0+2 for _ in range(5)]\n", "V = naturalSpline(Y)\n", "xs = numpy.linspace(0,len(Y)-1, 1000)\n", "plt.figure(0, figsize=(12.0,4.0))\n", "plt.plot(xs,[hermite_interp(Y,V,x) for x in xs])\n", "plt.plot(range(0,len(Y)),[Y[x] for x in range(0,len(Y))], \"bo\")\n", "plt.figure(1, figsize=(12.0,4.0));plt.grid(True)\n", "plt.plot(xs,[hermite_interp1(Y,V,x) for x in xs])\n", "plt.plot(xs,[hermite_interp2(Y,V,x) for x in xs])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Kernel\n", "\n", "The kernel decays quickly around $x=0$, which is why cubic splines suffer from very little \"ringing\" -- moving one point doesn't significantly affect the curve at points far away." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": "[]" }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "text/plain": "
" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#\n", "# Plot the kernel\n", "#\n", "DECAY = math.sqrt(3)-2;\n", "vs = [3*(DECAY**x) for x in range(1,7)]\n", "ys = [0]*len(vs) + [1] + [0]*len(vs)\n", "vs = [-v for v in vs[::-1]] + [0.0] + vs\n", "xs = numpy.linspace(0,len(ys)-1, 1000)\n", "plt.figure(0, figsize=(12.0,4.0));plt.grid(True);plt.ylim([-0.2,1.1]);plt.xticks(range(-5,6))\n", "plt.plot([x-6.0 for x in xs],[hermite_interp(ys,vs,x) for x in xs])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Derivation\n", "\n", "Each segment of the curve is a cubic polynomial, which has 4 unknowns: $Y = Ax^3 + Bx^2 + C +D$.\n", "\n", "The kernel consists of two *main lobe* segments (for $\\text{x in }[-1,0]$ and $\\text{x in }[0,1]$), and many *side lobe* segments.\n", "\n", "For each side lobe, the end points are set:\n", "\n", "$$\n", "\\begin{split}\n", " y_0 &= 0\\\\\n", " y_1 &= 0\n", "\\end{split}\n", "$$\n", "\n", "There are only 2 unknowns left, so specifying the first and second derivatives at one end will fix the first and second derivatives at the other end as well. There is a linear relationship:\n", "\n", "$$\n", "\\begin{bmatrix}\n", " y'_1 \\\\\n", " y''_1\n", "\\end{bmatrix}\n", "=\n", "\\begin{bmatrix}\n", " -2 & -\\frac{1}{2} \\\\\n", " -6 & -2\n", "\\end{bmatrix}\n", "\\begin{bmatrix}\n", " y'_0 \\\\\n", " y''_0\n", "\\end{bmatrix}\n", "$$\n", "\n", "If $(y'_0,y''_0)$ is an eigenvector of this matrix, then $(y'_1,y''_1)$ will be as well, implying the same for $(y'_2,y''_2)$, etc. All of the adjacent sidelobes will have the same shape with different amplitudes.\n", "\n", "The two eigenvectors correspond to exponentially increasing or decreasing sidelobe amplitudes, respectively:\n", "\n", "$$\n", "\\begin{split}\n", "\\begin{bmatrix}\n", " -2 & -\\frac{1}{2} \\\\\n", " -6 & -2\n", "\\end{bmatrix}\n", "\\begin{bmatrix}\n", " 1 \\\\\n", " 2\\sqrt{3}\n", "\\end{bmatrix}\n", "&=\n", "\\frac{1}{\\sqrt{3}-2}\n", "\\begin{bmatrix}\n", " 1 \\\\\n", " 2\\sqrt{3}\n", "\\end{bmatrix}\n", "\\\\\n", "\\begin{bmatrix}\n", " -2 & -\\frac{1}{2} \\\\\n", " -6 & -2\n", "\\end{bmatrix}\n", "\\begin{bmatrix}\n", " 1 \\\\\n", " -2\\sqrt{3}\n", "\\end{bmatrix}\n", "&=\n", "\\left(\\sqrt{3}-2\\right)\n", "\\begin{bmatrix}\n", " 1 \\\\\n", " -2\\sqrt{3}\n", "\\end{bmatrix}\n", "\\end{split}\n", "$$\n", "\n", "To create the kernel, then, we just calculate the main lobes to meet the side lobes with first and second derivaties along these eigenvectors. The $C^2$-continuity requirement then forces exponentially decaying sidelobes on both sides:\n", "\n", "$$\n", "\\begin{gather}\n", "y(0)=1\\\\\n", "y'(0) = 0\n", "\\\\\n", "y(-1) = y(1) = 0\n", "\\\\\n", "\\frac{y''(-1)}{y'(-1)} = -\\frac{y''(1)}{y'(1)} = 2\\sqrt{3}\n", "\\end{gather}\n", "$$" ] } ], "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.8.1-final" } }, "nbformat": 4, "nbformat_minor": 0 }