{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Bayesian filtering in the frequency domain\n", "---------------------------------------------------\n", "\n", "This notebook contains an exploration of the characteristic function as a way to represent a probability distribution, yielding an efficient implementation of a Bayes filter.\n", "\n", "Copyright 2015 Allen Downey\n", "\n", "MIT License: http://opensource.org/licenses/MIT" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import print_function, division\n", "\n", "import thinkstats2\n", "import thinkplot\n", "\n", "import numpy as np\n", "import pandas as pd\n", "from scipy import stats\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set(style=\"white\", palette=\"muted\", color_codes=True)\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose you are tracking a rotating part and want to estimate its angle, in degrees, as a function of time, given noisy measurements of its position and velocity.\n", "\n", "I'll represent possible positions using a vector of 360 values in degrees." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [], "source": [ "n = 360\n", "xs = np.arange(n)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll represent distributions using a Numpy array of probabilities. The following function takes a Numpy array and normalizes it so the probabilities add to 1." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def normalize(dist):\n", " dist /= sum(dist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following function creates a discrete approximation of a Gaussian distribution with the given parameters, evaluated at the given positions, `xs`:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gaussian(xs, mu, sigma):\n", " dist = stats.norm.pdf(xs, loc=180, scale=sigma)\n", " dist = np.roll(dist, mu-180)\n", " normalize(dist)\n", " return dist" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose that initially we believe that the position of the part is 180 degrees, with uncertainty represented by a Gaussian distribution with $\\sigma=4$.\n", "\n", "Here's what that looks like:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos = gaussian(xs, mu=180, sigma=4)\n", "plt.plot(xs, pos);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And suppose that we believe the part is rotating at an angular velocity of 15 degrees per time unit, with uncertainty represented by a Gaussian distribution with $\\sigma=3$:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEDCAYAAADdpATdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGt1JREFUeJzt3X+wXPV53/H33h+SECoyxk4kIoNL6DwoTPoHLaEVTrAF\ntolxhxQTN2O3JjEddzx4qrE7mVYdJzauPZ5CahkynmmUto6TuPYUz0DiQR5rqJ2BEhIbdVzL0/DU\nNC4/BBgJigCpku7du/3jnL13tbp3z569F909vu/XjEe754f0cCx9zvc++z3fbXU6HSRJa8vEahcg\nSTr7DH9JWoMMf0lagwx/SVqDDH9JWoMMf0lag6aqDoiIPcBVQAfYlZmP9uzbAOwFtmfmlX3nnQP8\nAPhUZn5pRauWJC3LwJF/RFwDXJqZO4Bbgbv7DrkD+M4Sp38ceIHipiFJGiNVbZ+dwL0AmfkYcH5E\nbOrZvxv4ev9JEXEZcBlwP9BamVIlSSulKvy3AEd63h8GtnbfZOYxFg/3O4GPLrs6SdJrorLn36dF\nRRsnIj4APJiZT0ZE5ag/ItYDVwLPAu2a9UjSWjVJMRj/bmaerHtyVfg/QzH677qQIqR79d8M3gVc\nEhE3AduAkxHxVGZ+a4k/40rgoSHrlSSd7heB/1b3pKrw3w/cDuyNiCuAQ2Wrp9dpo/vM/LXu64j4\nBPCjAcEP5c3ky1/+Mlu2bBlwmCSp67nnnuP9738/nDkgH8rA8M/MRyLiQEQ8TNGSuS0ibgGOZuZ9\nEfEAxej+oog4CHwuM79Ys4Y2wJYtW9i2bdsI/wmStKaN1C6v7Pln5u6+TQd79l1Xce7toxQlSXpt\n+YSvJK1Bhr8krUGGvyStQYa/JK1Bhr8krUGGvyStQY0L/5deneWXd3+PL+0f6bkGSRINDP//+cSr\nAHz12z9e5UokqbkaF/6SpOVrXPifODW32iVIUuM1LvxfOe6qz5K0XM0L//83u9olSFLjNS78X+4Z\n+c+2/XpgSRpF48L/leOzi76WJA2vgeG/MPJ/2f6/JI2kceH/cu/I3/6/JI2kceHfO/J35o8kjaZx\n4d878n/Znr8kjaRR4d/pdDh+cuEhr+MnHPlL0igaFf4zfVM7Z2ad6ilJo2hW+Jdhv3564rT3kqR6\nGhn+GzeU4d92nR9JGkWzwr8M+43rJ4v3jvwlaSRTVQdExB7gKqAD7MrMR3v2bQD2Atsz88qe7XcA\nbyl//89m5r0rUez8yH+9bR9JWo6BI/+IuAa4NDN3ALcCd/cdcgfwnb5z3gZcXp5zPfD5lSp2oe1T\njvxt+0jSSKraPjuBewEy8zHg/IjY1LN/N/D1vnMeBN5bvj4KnBsRrRWo1baPJK2QqvDfAhzpeX8Y\n2Np9k5nHgNOCPTPb5XYoflq4PzNXJKVt+0jSyqjs+fdpUfT+K0XEjcAHgbfXLWoptn0kaWVUjfyf\noRj9d10IPNt3zBk3g4h4J0VL6PrMfGVZFfbort9v20eSlqcq/PcDNwNExBXAoZ6WTtdpbZ+I2Azc\nCbw7M19aqUIBZma7PX/bPpK0HAPbPpn5SEQciIiHgTZwW0TcAhzNzPsi4gFgG3BRRBwE9gCTwAXA\nPRHR/a0+kJlPLbfY7vIO66cnmJg4c7kHSdJwKnv+mbm7b9PBnn3XLXHa7y+nqKV0R/rTUy2mJyfm\nfxKQJNXTrCd8y7CfnmoxPdWy7SNJI2pW+JdtnunJCcNfkpahWeF/Wtun5VRPSRpRw8K/t+0z4chf\nkkbUsPDvjvxt+0jScjQr/Od7/rZ9JGk5mhX+tn0kaUU0LPxPb/vMdaDtg16SVFuzwr8M+qmy7VNs\ns/UjSXU1K/z7HvIqtjnyl6S6Ghb+vR/4uribJI2qWeHfPr3nX2yz7SNJdTUr/Huf8LXtI0kja1j4\nlz3/3raPs30kqbZmhX/vbB9H/pI0skaF/+xsh+mpFq1Wb/jb85ekuhoV/jPtufn5/bZ9JGl0DQv/\nDlPliH/Kto8kjaxR4T8725kf8U+VPwG4vIMk1deo8G/PdSizn6mJIvxn5wx/SaqrUeE/2+7Mj/gn\ny19nHflLUm3NCv+5znzo2/aRpNE1Kvzb7c58u2fSto8kjWyq6oCI2ANcBXSAXZn5aM++DcBeYHtm\nXjnMOcvR2/aZsu0jSSMbOPKPiGuASzNzB3ArcHffIXcA36l5zsgMf0laGVVtn53AvQCZ+RhwfkRs\n6tm/G/h6zXNG0ul0aM9hz1+SVkBV+G8BjvS8Pwxs7b7JzGNAq845o+qu3GzPX5KWr+4Hvi2KPv5r\nfc4ZZnsWdev91ZG/JNVXFf7PUIzkuy4Enu07pj99hzmnttly6L8Q/t3thr8k1VUV/vuBmwEi4grg\nUNnq6dXf9hnmnNpm28WvCz3/iXK74S9JdQ2c6pmZj0TEgYh4GGgDt0XELcDRzLwvIh4AtgEXRcRB\n4HOZ+cX+c1ai0HbZ27fnL0nLVznPPzN392062LPvuiHPWbYze/7Fdnv+klRfY57w7YZ8/1RP2z6S\nVF9jwn/+Kxz72j5t2z6SVFtjwn++59838vfLXCSpvsaE/5Lz/B35S1JtjQl/e/6StHIaE/6z/VM9\nHflL0siaE/79I//uPP/2qpUkSY3VuPCf9mscJWnZGhP+Z/T850f+c6tWkyQ1VWPCv7/nPzHRYmJi\nYalnSdLwmhP+fSN/KG4Etn0kqb7GhH+7b54/FDcCw1+S6mtM+Pc/5AXFyN+pnpJUX3PCv6/nD8WN\nwJG/JNXXnPBfrOdv+EvSSBoT/vb8JWnlNCb8u22fyb62jz1/SaqvOeFfLt08PeVUT0laruaE/yIj\n/8nJll/jKEkjaEz4L9bzn5pszX/DlyRpeI0Jf3v+krRyGhP+CyP/hW1TEy06Hdf0l6S6GhP+81/g\nPrlQ8vwXutj6kaRapqoOiIg9wFVAB9iVmY/27LsO+AzQBvZl5qcjYhPwh8DrgPXA7Zm5f7mFLtrz\n7y7rPNdh3XL/AElaQwaO/CPiGuDSzNwB3Arc3XfIXcBNwNXAOyJiO/DrwGOZuRO4uTxm2WYXafs4\n8pek0VS1fXYC9wJk5mPA+eXInoi4BHgxMw9lZgfYB1wL/Bi4oDz/9cDhlSi0vcgHvt1v9XLGjyTV\nUxX+W4AjPe8Pl9u6+3qD/Xlga2beA7wpIn4I/BnwsZUodLFVPR35S9Jo6n7g26raFxH/GHgyM/8W\nxU8CXxixttMsuqTz5ELPX5I0vKrwf4aFkT7AhcCz5etDffu2lcfvAPYDZOb3gW0RMeimMZRFR/4T\njvwlaRRV4b+f4kNbIuIK4FBmHgPIzCeA8yLi4oiYAm4Avgk8TjE7iIi4GDhWfiawLIv1/OdH/oa/\nJNUyMPwz8xHgQEQ8DHweuC0ibomIXykP+TDwFeBB4KuZ+Tjwe8CbI+LPgC8DH1qJQge2fQx/Saql\ncp5/Zu7u23SwZ99DFG2e3uOPAf9oRarr0Z6DiQlotQx/SVqu5jzhOzt32lc4wkILyA98JamexoR/\ne65zWssHFh748gNfSaqnMeE/2+aM8J+07SNJI2lM+LfbndO+vB0W1vZxVU9Jqqcx4T871zmj5z/l\n8g6SNJLmhP9iI3+Xd5CkkTQq/Kft+UvSimhM+Nvzl6SV05jwH9Tzn22vRkWS1FzNCf8BPf/Z9txq\n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\nwpQMHmoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "move = gaussian(xs, mu=15, sigma=3)\n", "plt.plot(xs, move);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###The predict step\n", "\n", "What should we believe about the position of the part after one time unit has elapsed?\n", "\n", "A simple way to estimate the answer is to draw samples from the distributions of position and velocity, and add them together.\n", "\n", "The following function draws a sample from a distribution (again, represented by a Numpy array of probabilities). I'm using a Pandas series because it provides a function that computes weighted samples." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def sample_dist(xs, dist, n=1000):\n", " series = pd.Series(xs)\n", " return series.sample(n=n, weights=dist, replace=True).values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a quick check, the sample from the position distribution has the mean and standard deviation we expect." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(179.989, 3.9825719076998474)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pos_sample = sample_dist(xs, pos)\n", "pos_sample.mean(), pos_sample.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And so does the sample from the distribution of velocities:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(14.922000000000001, 3.1240864264613424)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "move_sample = sample_dist(xs, move)\n", "move_sample.mean(), move_sample.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When we add them together, we get a sample from the distribution of positions after one time unit.\n", "\n", "The mean is the sum of the means, and the standard deviation is the hypoteneuse of a triangle with the other two standard deviations. In this case, it's a 3-4-5 triangle:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(194.911, 5.0055048696410243)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sample = pos_sample + move_sample\n", "sample.mean(), sample.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Based on the samples, we can estimate the distribution of the sum.\n", "\n", "To compute the distribution of the sum exactly, we can iterate through all possible values from both distributions, computing the sum of each pair and the product of their probabilities:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def add_dist(xs, dist1, dist2):\n", " res = np.zeros_like(dist1)\n", " for x1, p1 in zip(xs, dist1):\n", " for x2, p2 in zip(xs, dist2):\n", " x = (x1 + x2) % 360\n", " res[x] = res[x] + p1 * p2\n", " return res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This algorithm is slow (taking time proportional to $N^2$, where $N$ is the length of `xs`), but it works:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [], "source": [ "new_pos = add_dist(xs, pos, move)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the result looks like:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEDCAYAAADdpATdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH31JREFUeJzt3X+QHGd95/H37MzsrqS1bPmHkISMifDV1w6F60oBlJMD\nMrJjfMjBKcdwV3YOE5wjpZiKLlTl7nyVYAx2UQcEx76i6mLODiQQuzCcTXKIs4ojYMV2CNYVIO5O\nXxA/ZLKSrBWClbTS7uzOzP3R3Tuj0e70zO7MzuzTn1cV5Z3untlHzc5nnvk+Tz+dq1ariIhItgz0\nugEiIrL0FP4iIhmk8BcRySCFv4hIBin8RUQySOEvIpJBhbQDzOxBYAtQBXa5+4t1+24AHgDKwG53\nv9/MRoC/BC4ChoD73H1PNxovIiIL07Tnb2bbgCvdfStwF/BwwyEPAbcC1wI3mtnVwLuBA+6+Hbgt\nPkZERPpIWtlnO/AUgLsfANbEPXvMbBNwwt1H3b0K7AauB14GLomffzEw1o2Gi4jIwqWF/zrgeN3j\nsXhbsq8+2I8B6939SeByM/sB8HXg/Z1pqoiIdEpqzb9BLm2fmf028JK7v83MrgE+RTRmMCczGwLe\nABwhGjsQEZF0eWA98C13n2r3yWnhf5haTx9gA1FIA4w27NsYH78V2APg7t81s41mlotLQ3N5A7C3\n3YaLiAgAbwL+vt0npYX/HuA+4BEz2wyMuvsEgLsfMrPVZnYF0QfBDuB2ohk+W4D/Hu+baBL8EH+Y\nfO5zn2PdunVNDhPprnd/9P8CcOPrL+H27a/ocWtEmjt69Ch33HEH1DrkbWka/u7+gpntM7PniEoy\nd5vZncC4uz8N7AQejw9/wt0PmtmfA4+Z2dfj139vShvKAOvWrWPjxo0L+TeILFqlUqW4KhreOlW+\nQH+LspwsqFyeWvN393saNu2v27eXqMxTf/wE8K8W0hiRXjn689Lszz88craHLRFZGrrCVwT4ydFa\n4P/81AzjEzM9bI1I9yn8RYDxieib82AhmtB2UuEvgVP4iwCnz0Zhv+7iofixZh1L2BT+ItTCft3F\ngwCcUvhL4BT+ItTCf30c/sk3AZFQKfxFgNOTSc8/KvtMTKrnL2FT+ItwftlHNX8JncJfhCjsi4Uc\nF19QnH0sEjKFvwhRjX9kRZ6R4TygAV8Jn8JfhKinP7Iiz8iK/OxjkZAp/CXzqtUqpyfLXLCiwKrZ\n8NdsHwmbwl8y72ypQqUCI8N58gM5Vg4NaLaPBE/hL5mXlHiSks/IirzKPhI8hb9kXtLLXzWs8Jfs\nUPhL5k1OVQAYHoreDsODeSanK1Srze5BJLK8Kfwl8yan4/AvRm+HoeIAlQpMlxX+Ei6Fv2TeVCkO\n/8GBc/6bbBcJkcJfMm8yDvmhwVrPv367SIgU/pJ5jWWfpOev8JeQpd7DF8DMHgS2AFVgl7u/WLfv\nBuABopsI73b3+83sLuC3617i9e5+QeeaLdI5k/OUfZIPBZEQpYa/mW0DrnT3rWZ2FfAY5960/SHg\nRuAw8A0z+6K7Pwo8Gj//zcA7Ot5ykQ6ZN/zV85eAtVL22Q48BeDuB4A1ZjYCYGabgBPuPuruVWA3\ncH3D8z8AfLhzTRbprMaav8JfsqCV8F8HHK97PBZvS/aN1e07BqxPHpjZG4CX3P3YItsp0jWTpeiC\nrtmevwZ8JQMWMuCba2Pf7wKfXsDvEFkyUxrwlQxqJfwPU+vpA2wAjsQ/jzbs2xhvS2wDnl9MA0W6\nrbHmP6R5/pIBrYT/HuA2ADPbDIy6+wSAux8CVpvZFWZWAHbEx2NmG4DT7q61caWvabaPZFHqbB93\nf8HM9pnZc0TTOe82szuBcXd/GtgJPB4f/oS7H4x/Xge83I1Gi3RSLfzz8X/V85fwtTTP393vadi0\nv27fXs6d+pls/99E3wRE+tpkqUIhn6OQj4asZgd81fOXgOkKX8m8yenKbOCDBnwlGxT+knmTpcrs\nIC/Uh7/W9JdwKfwl86ZKldnAB/X8JRsU/pJ5k9MKf8kehb9kWrVaPa/nP1jQgK+ET+EvmTZTrlKp\n1gIfYGAgx2AhR2lad/KScCn8JdNKM1HADxXPXZlksDhAST1/CZjCXzItCfj6nn/0OEdpRuEv4VL4\nS6YlAT84R89/SmUfCZjCXzItqeuf3/MfYFo9fwmYwl8yLen5Fwvn9vyHirnZ8QCRECn8JdOSnv9Q\n8dy3QrEQDfhWq/oAkDAp/CXTZmv+cwz4VqpQVuVHAqXwl0xLBnXnGvCN9iv9JUwKf8m06SY9//r9\nIqFR+EumJT37YrFxwDd6a2jQV0Kl8JdMm06u8C2cP+AL6CpfCZbCXzKtdpHXuW+FZLkH9fwlVAp/\nybTZAd+Gef5Jz18DvhKq1Hv4mtmDwBagCuxy9xfr9t0APEB0Y/fd7n5/vP0O4I+AGeAD7r67C20X\nWbTpeXr+GvCV0DXt+ZvZNuBKd98K3AU83HDIQ8CtwLXAjWZ2tZldAnwg3nYzcEvHWy3SIUnP//wr\nfJOav8o+Eqa0nv924CkAdz9gZmvMbMTdT5vZJuCEu48CmNlu4HrgGPBVd58AJoDf617zRRYn6dmf\nf4Vv9GEwpZ6/BCqt5r8OOF73eCzeluwbq9t3DFgPvBpYaWZfMrNnzWx7h9oq0nFTs0s6z93zn1bP\nXwKVWvNvkGthXw64BPhNog+CvwOuaLtlIksgmc3TWPOfHfBVz18CldbzP0ytpw+wATgS/zzasG9j\nfPzLwPPuXnH3HwGnzOzSDrVXpKPmvcI3nuqpnr+EKi389wC3AZjZZmA0ruXj7oeA1WZ2hZkVgB3A\nM/FztptZLh78HXH343O/vEhvzbe2T3LRl+7mJaFqWvZx9xfMbJ+ZPUc0nfNuM7sTGHf3p4GdwOPx\n4U+4+0EAM/sC8A/x9vd1p+kiizdfz18DvhK61Jq/u9/TsGl/3b69wNY5nvMI8MiiWyfSZbNr++Q1\n4CvZoit8JdNKM1WKhRwDA/Nc4auevwRK4S+ZVpqunDfNE2pr+6jnL6FS+EumlWaq503zhNoYgAZ8\nJVQKf8m06ZnKeYO9UFvff0o9fwmUwl8ybWq6OnfZJ/5A0MJuEiqFv2RaaaYyd9lntuev8JcwKfwl\n0+Yb8C3O9vxV9pEwKfwls8rlKuXK+ev6AOQHchTyOfX8JVgKf8ms0jxX9yYGCzndxlGCpfCXzJpd\n0XOOsg9E3wg04CuhUvhLZs138/bEYEFlHwmXwl8yqzTPzdsTUc9fZR8Jk8JfMks9f8kyhb9kVmme\nWzgmBgsDGvCVYCn8JbNqA77z9PyLA8yUq1Qq+gCQ8Cj8JbNme/5Nyj6Aev8SJIW/ZFYrUz1B6/tI\nmBT+klmtDPiC1veRMCn8JbNSB3yLyZr+KvtIeFLv4WtmDwJbgCqwy91frNt3A/AA0c3dd7v7/WZ2\nHfAk8L34sP3u/gedbrjIYqUO+GpZZwlY0/A3s23Ale6+1cyuAh7j3Bu2PwTcCBwGvmFmXyT6kPi6\nu7+jS20W6YjagO98PX/d0EXClVb22Q48BeDuB4A1ZjYCYGabgBPuPuruVWA3cH03GyvSSa32/HUr\nRwlRWvivA47XPR6LtyX7xur2HQPWxz//spl9ycz2xqUhkb6TOtUz7vmX1POXALU74Dv39+Nz9/0A\n+KC73wLcCTxqZqljCyJLLXWqp3r+ErC08D9MracPsAE4Ev882rBvIzDq7ofd/UkAd/8RcBR4ZWea\nK9I5rV7kpcXdJERp4b8HuA3AzDYThfsEgLsfAlab2RVxz34HsMfMbjeze+PnrAXWEn1QiPSV2s1c\nmk/11Dx/CVHTcoy7v2Bm+8zsOaLpnHeb2Z3AuLs/DewEHo8Pf8LdD5rZUeCvzezvgTyw091nuvhv\nEFmQ2SWd5+35q+wj4Uqtxbv7PQ2b9tft28u5Uz9x99PA2zvSOpEumkrt+WvAV8KlK3wls6bV85cM\nU/hLZrVyA3eofUiIhEThL5lVmqkyMACFfMqAr3r+EiCFv2RWaboyb68f6tbz12wfCZDCXzKrNFOd\nd7AX6hd2U9lHwqPwl8wqTVfmHewFzfOXsCn8JbNKM5WUnr+u8JVwKfwls6KyT3rPX1M9JUQKf8ms\n1LJPQev5S7gU/pJJ1Wo1dcC3kM+Ry+lOXhImhb9k0nQ56s0Xm5R9crkcg4Wc7uErQVL4SyYlc/eH\n5rmFY2KwMKB5/hIkhb9kUtotHBODxQEN+EqQFP6SSUkdv9ik5p/sV9lHQqTwl0xKZvAMNZntk+xX\n2UdCpPCXTCq12PPXgK+ESuEvmZS2ln+iWFDNX8Kk8JdMSpZpHkob8C3kqFRgpqzev4RF4S+ZlNya\nsZg21VNLPEigUu/ha2YPAluAKrDL3V+s23cD8ADRzd13u/v9dftWAN8DPuTun+l0w0UWYzrlLl6J\n2pr+VVYOdb1ZIkum6V++mW0DrnT3rcBdwMMNhzwE3ApcC9xoZlfX7ftj4GdEHxoifSVZpnmwhYu8\nQD1/CU9a2Wc78BSAux8A1pjZCICZbQJOuPuou1eB3cD18b6rgKuALwPN310iPTDdxkVeoLt5SXjS\nwn8dcLzu8Vi8Ldk3VrfvGLA+/vljwB92ooEi3VC7eXv6VE/Qmv4SnnYHfJu9U3IAZvYu4Fl3fynl\neJGemWpxqqfu5iWhShvwPUytpw+wATgS/zzasG9jfPzbgE1mdmu8bcrMfuruX+tMk0UWr+0BX/X8\nJTBp4b8HuA94xMw2A6PuPgHg7ofMbLWZXUH0QbADuN3dP5k82czuBX6s4Jd+U1vYrbWpnlrTX0LT\nNPzd/QUz22dmzxFN57zbzO4Ext39aWAn8Hh8+BPufrC7zRXpjNLsbJ/Wev4q+0hoUuf5u/s9DZv2\n1+3bC2xt8tz7Ft40ke5pt+evso+ERlf4SiaV2qz5q+wjoVH4SyaVWrzIK7nNo27iLqFR+EsmtXon\nryEN+EqgFP6SSa32/DXVU0Kl8JdMSsK8mNLzr5V91POXsCj8JZNK0xUK+Rz5AS3vINmk8JdMKs1U\nU2/hCLWavxZ2k9Ao/CWTSjOV1Ju3Q+0ev1rSWUKj8JdMKk1XUi/wgvolnVX2kbAo/CWTpmeqqYO9\noJu5SLgU/pJJU9MVhlKmeUJtKqh6/hIahb9kUkk9f8k4hb9kTqVSZaZcbanmX8jnGBjQRV4SHoW/\nZE4S5K3M9oGo96+pnhIahb9kTrJOTytlH4gu9FLPX0Kj8JfMaXUt/8RgcUA1fwmOwl8yZ6rFu3gl\nBgs5lX0kOAp/yZzazdtb7PkXBlT2keAo/CVzWl3LPzFYHNB6/hKc1Hv4mtmDwBagCuxy9xfr9t0A\nPEB0c/fd7n6/ma0EPg2sBYaBD7v7l7vQdpEFWUjZZ2q6SrVaJZdr7duCSL9r+tdvZtuAK919K3AX\n8HDDIQ8BtwLXAjea2dXAzcA/uvt1wDuBT3S60SKLMd3mgG8yK2i6rNKPhCOt67MdeArA3Q8Aa8xs\nBMDMNgEn3H3U3avAbuB6d/+8u388fv6rgJ92p+kiC1Nqs+efLAOhNf0lJGlln3XAvrrHY/G2g/F/\nx+r2HQNekzwws+eBVxJ9ExDpG21P9ay7m9eq4XzX2iWylNod8G32bjlnX1wqejvw2XYbJdJN7fb8\na4u7adBXwpH213+YqIef2AAciX8ebdi3EThsZr9iZpcDuPt3gIKZXdqh9oosWjLg2+ryDslxU1rZ\nUwKS9te/B7gNwMw2A6PuPgHg7oeA1WZ2hZkVgB3AM8CbgPfHz3kFMOLux7vUfpG21cK/tbJPLfzV\n85dwNA1/d38B2GdmzwF/BtxtZnea2W/Gh+wEHgeeBZ5w94PAfwXWmtmzwP8Afr9rrRdZgMkF9/wV\n/hKO1Hn+7n5Pw6b9dfv2Alsbjp8E7uhI60S6YKoUr+o52GL4x8dNlRT+Eg5d4SuZk/Tgh9XzlwxT\n+EvmLHzAV+Ev4VD4S+Yk5ZuWyz7xwPCkwl8CovCXzJmaabPnH39I6CbuEhKFv2TObM+/xfAfVtlH\nAqTwl8yZXdWzxeUdZmv+mu0jAVH4S+ZMTVcZLOQYGGgx/AfV85fwKPwlc6amKy2XfKDW89eAr4RE\n4S+ZM1WqtDzTB1T2kTAp/CVzFtrzV9lHQqLwl8yZbDv8o7EBreopIVH4S+aUpisMt1H2Sdb913r+\nEhKFv2TKTLlKudL6cs4A+YEcxUJOA74SFIW/ZMpUm3fxSgwVB1Tzl6Ao/CVT2r26NzFUHNBsHwmK\nwl8ypd0buSSG1fOXwCj8JVPaXc45MTSYY1I9fwmIwl8yJQnwdmb7RMfnmZquUK1quqeEQeEvmZKE\n/4q2w3+AcgWmywp/CUPqPXzN7EFgC1AFdrn7i3X7bgAeAMrAbne/P97+UeDX4tf/iLs/1YW2i7Tt\n7FQZgBVD7YV/8mExOVVhsKA+kyx/Tf+KzWwbcKW7bwXuAh5uOOQh4FbgWuBGM7vazN4CvDZ+zk3A\nn3W+2SILUyv75Nt6XlImOqu6vwQirQuzHXgKwN0PAGvMbATAzDYBJ9x91N2rwG7geuBZ4J3x88eB\nVWbW+hU1Il10doFlnxVD0YfFZKnc8TaJ9EJa2WcdsK/u8Vi87WD837G6fceA17h7GZiIt90FfDn+\ncBDpubNTcc+/zbLPbM9/Sj1/CUNqzb9Bsx78OfvM7BbgPcCvt9sokW5Jeu5t9/xV9pHApL0DDhP1\n8BMbgCPxz6MN+zbG2zCztwL3ADe5+6nONFVk8c4usOafDBBrrr+EIi389wC3AZjZZmDU3ScA3P0Q\nsNrMrjCzArAD2GNmFwIfA2529190r+ki7ZuMyzYr2y77RB8WyWwhkeWuadnH3V8ws31m9hzRdM67\nzexOYNzdnwZ2Ao/Hhz/h7gfN7L3AJcCTZpa81Lvc/afd+SeItG6257/QqZ7q+UsgUmv+7n5Pw6b9\ndfv2Alsbjn8EeKQjrRPpsIXW/JMPC9X8JRS6WkUyZXa2T7s1/7qLvERCoPCXTDlbqlAs5Cjk27v0\nZLbmr3n+EgiFv2TKZKnSdskHarN9VPaRUCj8JVPOTpXbXtETVPaR8Cj8JVMmS5XZpRraoQFfCY3C\nXzLlbKmyoJ7/cDGZ6qmav4RB4S+ZMVOuMj1TXVD4FwsDFPI5zqjsI4FQ+EtmnJmMeu2rhtsv+wCs\nHB7gjK7wlUAo/CUzTi8y/EeG80ycVfhLGBT+khmL7fmvGs4zMamyj4RB4S+ZMTEb/gv7s185HN3E\nfUb38ZUAKPwlMzpR9oHah4jIcqbwl8xY/ICvwl/CofCXzEjq9Yvt+Z9R+EsAFP6SGclMnZWLGPCF\nWvlIZDlT+EtmJOWakRULn+df/zoiy5nCXzJjdsB3AWv7QO1DQ3P9JQQKf8mM2QHfBff8NeAr4VD4\nS2ZMdGiq5xld6CUBSL2Hr5k9CGwBqsAud3+xbt8NwANEN3ff7e73x9uvAZ4CPuHun+xGw0XaNTFZ\nZqjY/l28EhrwlZA0DX8z2wZc6e5bzewq4DHOvWH7Q8CNwGHgG2b2ReAQ8KfAM91pssjCTEyWFzzT\nB2rlIpV9JARpZZ/tRD143P0AsMbMRgDMbBNwwt1H3b0K7AauB6aAm4GXu9ZqkQU4OVHmwpWpX3bn\ntTp+7skzM51qkkjPpIX/OuB43eOxeFuyb6xu3zFgvbuX3X2qc00UWbyZcpXTk2UuXLXw8F85FK3p\nP35a4S/LX7sDvs2KpQsrpIosgZMTUWAvJvxzuRyrV+YZn1D4y/KXFv6HqfX0ATYAR+KfRxv2bYy3\nifSdJLBXLyL8IfrwUPhLCNLCfw9wG4CZbQZG3X0CwN0PAavN7AozKwA74uMT+iYgfWP8TNLzX/iA\nb/T8AmemKkzPaLqnLG9Nu0Hu/oKZ7TOz54imc95tZncC4+7+NLATeDw+/Al3P2hmvwp8ClgLzJjZ\n7wHb3P3n3ftniDQ33oGyD9S+OZw8U+aS1bpMRpav1HeCu9/TsGl/3b69nDv1E3f/B+B1HWmdSIck\ng7SLDf/k+eMTM1yyurjodon0iroukgmdrPnXv57IcqXwl0w4eSa6MGvRPf+VCn8Jg8JfMqFTNf8L\nRxT+EgaFv2TCz05OM5BjUVf4AqyJw//EyelONEukZxT+kgnHx0tcvLpIfoGLuiUuu2gQgLFxhb8s\nbwp/CV65UuX4yWnWxsG9GJesLpLLwdh4qQMtE+kdhb8E78SpaSoVuPTCxU/NLORzXHxBkbFfqOcv\ny5vCX4J3PA7qyzoQ/snr/OzkNOVKtSOvJ9ILCn8J3rG4RHNZB8o+AGsvGmSmXOUXWt1TljGFvwRv\nrMM9/0svKsavq7q/LF8Kfwne0RPR7SXWrulMz/8V8TeIoycU/rJ8KfwleIeOTZLLweWXDXfk9V71\niuHZ1xVZrhT+ErRqtcqho5NsuHiIoWJn/txfnYT/y2c78noivaDwl6D9/PQMp86WZ3vrnXDRSJHV\nq/L85Kh6/rJ8KfwlaIdejgL61R0M/+j1VnD05yUmS7qpiyxPCn8Jmv/0DAC/tH5FR1/3l9YNU63C\n9//pTEdfV2SpKPwlaN8+eIpcDq7ZNNLR1/3nr7kgev0fnuro64osFYW/BGuyVOH/HJpg0/oVi17K\nudHrNo0wMADf+eHpjr6uyFJJfUeY2YPAFqAK7HL3F+v23QA8QHR/393ufn/ac0SWyjcPjDNTrrL5\nn13Q8ddeNZznqstXceClCY79otSRReNEllLTnr+ZbQOudPetwF3Aww2HPATcClwL3GhmV7fwHJGu\nq1arfOm5MQDe+vpLuvI7bnrDxVSq8LcvHO/K64t0U1rZZzvwFIC7HwDWmNkIgJltAk64+6i7V4Hd\nwPXNniOyVP7nt07w/146wxuvWs0rLx3qyu/Yds0a1lxQ4EvPj/HDwxr4leUlreyzDthX93gs3nYw\n/u9Y3b5jwGuAS+d4znrgB81+0amz5TlvjVdNXTix+QHNnr/Il059frXJL+/m7+7mOVv0717Uazd/\ncrkCR05Mse/7p/jyN4+zaniA33/7xpQGLdxgcYB/d+vl3PuZH/PvHznIbW9ey1WvWsVlFxYpFnIU\n8gPkB3LkFnf/mCAt51OSz+dYNZzvdTMWrd1RsGb/n823L0fz93QeYOdHn6ewojtfzyV7LrtwkJ1v\n28j0xDH+aaJ7v2fDCLznuiKf2XOER58+2r1fJH3lvTteydbXXtjTNhw9Ovv3tqBPorTwP0zUw09s\nAI7EP4827NsYH19q8py5rAc48uwH01sr0qKfAv/2871uhYTqT57pdQvOsR74YbtPSgv/PcB9wCNm\nthkYdfcJAHc/ZGarzewKog+CHcDtwGXzPWce3wLeRPQBUW73HyAiklF5ouD/1kKenEuro5rZR4A3\nEwXz3cBmYNzdnzazNwH/OT70C+7+ibme4+77F9I4ERHpjtTwFxGR8OgKXxGRDFL4i4hkkMJfRCSD\nOrva1QL06zpAZnYd8CTwvXjTd4GPAZ8l+tA8Avwbd+/JjVzN7BqiK6k/4e6fNLPLgb9qbJuZ3QHs\nAirAI+7+WI/b+WmiSQM/iw/5qLt/pQ/a+VHg14jeEx8BXqTPzuccbbyFPjuXZrYS+DSwFhgGPkz0\n3um3czlXO99Bn53PuvauIMqiDwFfowPns6c9/2WwDtDfuftb4v/tIvoD+S/u/maiq5zf04tGxX+4\nfwo8Q+0Cug81ts3MVgF/QrTsxnXAH5rZmh63swr8x7rz+pU+aOdbgNfGf4c3Ea1ZdR99dD7naWPf\nnUvgZuAf3f064J3Ag/TZuWzSzn48n4k/BpJFpDryXu912aff1wFqvGp5G/A38c9/C9ywtM2ZNUX0\nx/ty3ba52vZG4FvufsrdJ4HniBbh60U7689l43ndQm/b+SxRAACMA6vov/PZ2MaVRPO8++pcuvvn\n3f3j8cNXEV1vdx39dS7nayf02fkEMLOrgKuAL8ebOvK32euyz1xrB6WuA7REqsAvm9mXgIuJPm1X\nuft0vD9p65Jz9zJQNrP6zXO1ba71l5aszfO0E+B9Zvb+uD3voz/amVyIeBfRm+yt/XQ+52jjbqLr\naPrqXCbM7Hmiq/t/A/hqP53Leg3tfD/9eT4/RnSN1e/EjzvyXu91z79R2jpAS+kHwAfd/RbgTuBR\nzl1Do5/Xpmq2zlKv/RXwH9z9euDbwAc5///znrTTzG4heoO9r2FX35zPuI3vIQqDvj2XcXnqFuBz\nDbv65lzCOe38LPCX9Nn5NLN3Ac+6+0vz/P4Fn89eh3+ztYN6yt0Pu/uT8c8/Ao4SlaWS9YFfSdT+\nfnF6jrY1nt+NREtx9Iy7f83dvxs//BvgdfRBO83srcB/Av6lu5+kD89n3MZ7gJvir/d9dy7N7Ffi\nyQe4+3eIqgunzGw4PqRfzuVc7fxev51P4G3AO8zsBeB3iWr/HTmfvQ7/PcBtAC2uA7RkzOx2M7s3\n/nkt0ZpFf0HcXuC3gK/0qHmJHLVP+K9yftu+CbzBzC6Mx1K2AnuXvJV1vRAz+4KZvS5+uA3YT4/b\naWYXEn213uHuv4g399X5rGvjzUkb+/FcEq3T9f64fa8gGj/5KtE5hD44l/O0cwT48347n+7+r939\nje7+L4D/RjTp5H/RgfPZ8+Ud+nUdoPgE/jVRvT9PNGPh20RfDYeBnwC/E9dil7ptvwp8imia2gzR\n1LSbiKaundM2M/st4I+Ivr4+7O6P97CdJ4B7iXrYp4FTcTuP97id743b9f14UxV4N9GbrS/O5xxt\nhKgz8gf017kcJiqRXg6sICqd7GOO900ftnMC+Dh9dD4b2nwv8GOiTvOiz2fPw19ERJZer8s+IiLS\nAwp/EZEMUviLiGSQwl9EJIMU/iIiGaTwFxHJIIW/iEgGKfxFRDLo/wM7acnC64UsNwAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(xs, new_pos);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can check the mean and standard deviation:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def mean_dist(xs, dist):\n", " return sum(xs * dist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The mean of the sum is the sum of the means:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "195.00000000000006" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mu = mean_dist(xs, new_pos)\n", "mu" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the standard deviation of the sum is the hypoteneuse of the standard deviations:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def std_dist(xs, dist, mu):\n", " return np.sqrt(sum((xs - mu)**2 * dist))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which should be 5:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5.0" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sigma = std_dist(xs, new_pos, mu)\n", "sigma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we just computed is the convolution of the two distributions.\n", "\n", "Now we get to the fun part. The characteristic function is an alternative way to represent a distribution. It is the Fourier transform of the probability density function, or for discrete distributions, the DFT of the probability mass function.\n", "\n", "I'll use Numpy's implementation of FFT. The result is an array of complex, so I'll just plot the magnitude and ignore the phase." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy.fft import fft\n", "\n", "char_pos = fft(pos)\n", "plt.plot(xs, np.abs(char_pos));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Fourier transform of a Gaussian is also a Gaussian, which we can see more clearly if we rotate the characteristic function before plotting it." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(xs, np.roll(np.abs(char_pos), 180));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also compute the characteristic function of the velocity distribution:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "char_move = fft(move)\n", "plt.plot(xs, abs(char_move));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You might notice that the narrower (more certain) the distribution is in the space domain, the wider (less certain) it is in the frequency domain. As it turns out, the product of the two standard deviations is constant.\n", "\n", "We can see that more clearly by plotting the distribution side-by-side in the space and frequency domains:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_dist_and_char(dist):\n", " f, (ax1, ax2) = plt.subplots(1, 2, figsize=(7, 4))\n", " ax1.plot(xs, dist)\n", " ax1.set_xlabel('space domain')\n", " char = fft(dist)\n", " ax2.plot(xs, np.roll(abs(char), 180))\n", " ax2.set_xlabel('frequency domain')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following function plots Gaussian distributions with given parameters." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_gaussian_dist_and_char(mu=180, sigma=3):\n", " dist = gaussian(xs, mu, sigma)\n", " plot_dist_and_char(dist)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's a simple example:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_gaussian_dist_and_char(mu=180, sigma=3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can make sliders to control `mu` and `sigma`." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.html.widgets import interact, fixed\n", "from IPython.html import widgets\n", "\n", "slider1 = widgets.IntSliderWidget(min=0, max=360, value=180)\n", "slider2 = widgets.FloatSliderWidget(min=0, max=100, value=3)\n", "interact(plot_gaussian_dist_and_char, mu=slider1, sigma=slider2);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you increase `sigma`, the distribution gets wider in the space domain and narrower in the frequency domain.\n", "\n", "As you vary `mu`, the location changes in the space domain, and the phase changes in the frequency domain, but the magnitudes are unchanged.\n", "\n", "But enough of that; I still haven't explained why characteristic functions are useful. Here it is: If the characteristic function of X is $\\phi_X$ and the characteristic function of Y is $\\phi_Y$, the characteristic function of the sum X+Y is the elementwise product of $\\phi_X$ and $\\phi_Y$.\n", "\n", "So the characteristic function of the new position (after one time step) is the product of the two characteristic functions we just computed:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "char_new_pos = char_pos * char_move\n", "plt.plot(xs, abs(char_new_pos));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we compute the inverse FFT of the characteristic function, we get the PMF of the new position:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nvi7yISluAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy.fft import ifft\n", "\n", "new_pos = ifft(char_new_pos).real\n", "plt.plot(xs, new_pos);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check the mean and standard deviation of the result:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def mean_std_dist(xs, dist):\n", " xbar = mean_dist(xs, dist)\n", " s = std_dist(xs, dist, xbar)\n", " return xbar, s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yup, that's what we expected (forgiving some floating-point errors):" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(195.00000000000006, 4.9999999999995675)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_std_dist(xs, new_pos)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can encapsulate this process in a function that computes the convolution of two distributions:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fft_convolve(dist1, dist2):\n", " prod = fft(dist1) * fft(dist2)\n", " dist = ifft(prod).real\n", " return dist" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since FFT is $N \\log N$, and elementwise multiplication is linear, the whole function is $N \\log N$, which is better than the $N^2$ algorithm we started with.\n", "\n", "The results from the function are the same:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(195.00000000000006, 4.9999999999995675)" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_pos = fft_convolve(pos, move)\n", "mean_std_dist(xs, new_pos)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###The update step\n", "\n", "Now suppose that after the move we measure the position of the rotating part with a noisy instrument. If the measurement is 197 and the standard deviation of measurement error is 4, the following distribution shows the likelihood of the observed measurement for each possible, actual, position of the part:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nvi7yISluAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "likelihood = gaussian(xs, mu=197, sigma=4)\n", "plt.plot(xs, new_pos);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can take our belief about the position of the part and update it using the observed measurement. By Bayes's theorem, we compute the product of the prior distribution and the likelihood, then renormalize to get the posterior distribution:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n/wN08IYmwlLQUQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "new_pos = new_pos * likelihood\n", "normalize(new_pos)\n", "plt.plot(xs, new_pos);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The prior mean was 195 and the measurement was 197, so the posterior mean is in between, at 196.2 (closer to the measurement because the measurement error is 4 and the standard deviation of the prior is 5).\n", "\n", "The posterior standard deviation is 3.1, so the measurement decreased our uncertainty about the location." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(196.21951219512201, 3.123475237772122)" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean_std_dist(xs, new_pos)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can encapsulate the prediction step in a function:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(xs, pos, move):\n", " new_pos = fft_convolve(pos, move)\n", " return new_pos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And likewise the update function:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def update(xs, pos, likelihood):\n", " new_pos = pos * likelihood\n", " normalize(new_pos)\n", " return new_pos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following function takes a prior distribution, velocity, and a measurement, and performs one predict-update step.\n", "\n", "(The uncertainty of the velocity and measurement are hard-coded in this function, but could be parameters.)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict_update(xs, pos1, velocity, measure):\n", " # predict\n", " move = gaussian(xs, velocity, 3)\n", " pos2 = predict(xs, pos1, move)\n", " \n", " #update\n", " likelihood = gaussian(xs, measure, 4)\n", " pos3 = update(xs, pos2, likelihood)\n", " \n", " #plot\n", " plt.plot(xs, pos1, label='pos1')\n", " plt.plot(xs, pos2, label='pos2')\n", " plt.plot(xs, pos3, label='pos3')\n", " plt.legend()\n", " \n", " return pos3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the figure below, `pos1` is the initial belief about the position, `pos2` is the belief after the predict step, and `pos3` is the posterior belief after the measurement.\n", "\n", "The taller the distribution, the narrower it is, indicating more certainty about position. In general, the predict step makes us less certain, and the update makes us more certain." ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEDCAYAAAA1CHOzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X2UZHV95/H3rcfu6u55BOYRcBH9ggbcoMhm0IAwURZM\nMEiUE1ZRJ8ccxZNZNaziwRCj4nGIEtnNSZyQ9SEis4uKhDhGZDVhRAzDbNBhzfx0FAcyT8xMM9M9\nXc9Vd/+4t7qra6qrqqu7p2tuf17ncKbrPvT99aW7PvX9/e79Xc/3fURERGLz3QAREekNCgQREQEU\nCCIiElIgiIgIoEAQEZGQAkFERABIdLujmd0FXAL4wEbn3JN16/qAzcD5zrmLG/brB54G/sw596Vu\njy8iIrOrqwrBzC4DznXOrQM2AHc3bLIJeGKK3W8DjhAEiYiI9Ihuu4yuAB4AcM7tApaa2WDd+luB\nhxp3MrPzgPOAbwFel8cWEZE50G0grAQO170+BKyqvXDOjdH8Df9O4P1dHlNEROZQ12MIDTzadAGZ\n2duBR51zz5pZ2+rAzNLAxcB+oDIrrRQRib44wQf07c65wnR27DYQ9hFUCTWrCd646zUGxNXAOWZ2\nHbAWKJjZc865701xjIuBbV22T0RkoXst8IPp7NBtIDwMfAzYbGYXAXvDbqJ6k6oA59wNta/N7Hbg\nmRZhAGHA3HvvvaxcubLFZiIiUnPgwAFuvPFGOPFDeltdBYJz7nEz22FmjxF059xsZjcBx5xz3zSz\nRwiqgLPMbCfwWefcF6Z5mArAypUrWbt2bTfNFBFZyKbd1d71GIJz7taGRTvr1q1vs+/Huj2uiIjM\nDd2pLCIigAJBRERCCgQREQEUCCIiElIgiIgIoEAQEelZu3btYv369dx7770n5XgKBBGRHpTL5fj0\npz/Na17zmpN2zNmay0hERBp84xvfYNu2bWSzWfbv38873vEO1qxZw1133UUymWTFihXccccdHD58\nmFtuuYV4PE6lUuHOO+9kxYoVfP7zn2fz5s0nrb0KBBFZEO7ZupdtO4/O6vd87QVL+IOr17TcZvfu\n3Tz44IMcO3aM3/md3yGTyfDlL3+ZFStW8PGPf5x/+Id/YGRkhEsvvZT3vve9/PSnP+XQoUOsXr2a\neDw+q+1tR11GIiJzxPM8Xv3qVxOLxVi6dClDQ0MkEglWrFgBwCWXXMJPf/pTLr30Uh588EE+/elP\nUywWecUrXjEv7VWFICILwh9cvabtp/m5UK1Wx7/2PI9SqTT+ulgsEovFeMlLXsKDDz7ID37wAz7z\nmc/w5je/mTe96U0nva2qEERE5ojv+zz11FNUq1WGh4fJZrMkk0n27w8mIt2+fTsXXHABW7du5Wc/\n+xnr169n48aNPP3005O+x8miCkGkDd/3OfSNbzDw8pczcN55890cOYV4nseaNWvYuHEje/bs4f3v\nfz9r1qzhgx/8IPF4nLPPPptrrrmGXbt2cfvtt5PJZIjH49x22238+Mc/5rbbbuPIkSPE43G2bNnC\nV77yFRYvXjxn7VUgiLRROnSIIw89xJGHHuL8L35xvpsjp5gzzzyTD33oQ5OWffWrX530+mUvexn3\n33//Cfs+9NAJj6afU+oyEmmjmsvNdxPkFOZ5bZ8Y3DNUIYi0UclmJ74eGyM+MDCPrZFTye/+7u/O\ndxOmRRWCSBuVsYmnwxb2T/uphCKnDAWCSBvV+kDYu3ceWyIytxQIIm3UdxmVjxyZx5aIzK2uxxDM\n7C7gEsAHNjrnnqxb1wdsBs53zl1ct3wT8JrwuJ9yzj3Q7fFFTpb6LqNqsTiPLRGZW11VCGZ2GXCu\nc24dsAG4u2GTTcATDfu8Dnh5uM9VwF90c2yRk62+QlAgyMm0adMmbrjhBq6//nq++93vzvnxuu0y\nugJ4AMA5twtYamaDdetvBRovoH0UeEv49TFgwMxOneuxZMGqH0PwC4V5bIksJD/60Y/YvXs3W7Zs\n4Z577uGOO+6Y82N222W0EthR9/oQsAr4OYBzbszMTq/fwTlXAWp/WRuAbznnTt492SJdUpeRdGsm\n019ffPHFXHjhhQAMDQ2RzWbxfX9O72uYrfsQPIKxhLbM7FrgXcBvzdKxReZUfZeRr0A4ZX3j37/G\nv76wo/2G0/DrS1/JdWuvb7nNTKa/zmQyAHzta1/j8ssvn/Ob3LrtMtpHUCXUrAYaL9A+ISDM7A0E\n3UlXOedGuzy2yElVHRsjPjQUfK1AkGmYjemvH3nkEb7+9a/z0Y9+dM7b222F8DDwMWCzmV0E7HXO\njTVsMynKzGwxcCdwhXNudp9SITKHKtks8YEBqrkcVY0hnLKuW3t920/zc2Em019v27aNzZs3c889\n9zA4ONjs28+qrgLBOfe4me0ws8eACnCzmd0EHHPOfdPMHgHWAmeZ2U7gLiAOLAfuN7Pat3q7c+65\nGf8UInOoWiySXL4cL51Wl5FMS/3010ePHiWbzZLJZNi/fz+rVq1i+/btvOpVr2Lr1q2sXbuW9evX\ns2TJEv7xH/+RK6+8kk2bNvGlL32JRYsWnZT2dj2G4Jy7tWHRzrp166fY7W+6PZ7IfPFLJbxkklgq\npQpBpmUm019v3bqVo0ePsnHjxvHvt2nTJlatWjVn7dXkdiIt+JUKVKvjgVDJ5+e7SXKK6Xb663PO\nOYe3vvWtc96+epq6QqSF2iByLJnES6XUZSTTpumvRSLCDwcAvWSSWDqtq4xkWjT9tUiE1AeCl0pB\npYJfLs9zq0TmhgJBpIVJFUIqBeheBIkuBYJIC9UwEGIKBFkAFAgiLUzqMkqng2UKBIkoDSqLtNC0\ny0j3IshJkMvl+PCHP8zw8DCFQoH3vve9XH755XN6TAWCSAv1XUaoQpCT6Pvf/z4XXnghGzZsYN++\nfbzzne9UIIjMp0ldRuGcNBpDkE7NZPrrq6++evz77Nu3b07vUK5RIIi0MKnLyA8m8FWX0anp4JYt\njG7fPqvfc+jii1lxww0tt5nJ9NcAN9xwAwcPHuSv//qvZ7XtzWhQWaSFE+5DQF1G0rnZmP56y5Yt\n/NVf/RW33HLLnLdXFYJIC/VjCNWwQtCNaaemFTfc0PbT/Fzodvrrc889l+XLl7Nq1SrOO+88KpUK\nw8PDLFu2bM7aqkAQaWFShVALhLo/aJFWupn+eunSpXz729/m6NGj7Nu3j4985CMcPnyYbDY7p2EA\nCgSRliYFQqUSLAv/FWlnJtNfr1mzho985CPceOON5PN5br/99jlvrwJBpIX6LqNaEKhCkOnodvpr\ngM985jNz2rZGGlQWaWHSVUaJ4PNTVWMIMg2a/lokIiZ1GYVfa1BZOqXpr0UiZFIghBWCAkGiqusK\nwczuAi4BfGCjc+7JunV9wGbgfOfcxZ3sI9KLJo0hJJOAxhAkurqqEMzsMuBc59w6YANwd8Mmm4An\nprmPSM+ZVCHE48EyVQgSUd12GV0BPADgnNsFLDWzwbr1twIPTXMfkZ4zKRBqFYICQSKq20BYCRyu\ne30IGJ95yTk3BjQOrbfcR+Rk8H2fSsXvePv6LiONIUjUzdagskcwLjDX+4jMyHd3DPPG237Mrw7k\nOtpeFYIsJN0Gwj6CT/w1q4H9Dds0vtl3so/InLrr688B8J0nhzva3i+VwPPw4nGNIUjkdRsIDwPX\nA5jZRcDesJuoXmOXUSf7iJwUY/nOpp/wK5XxysDTVUYScV1dduqce9zMdpjZY0AFuNnMbgKOOee+\naWaPAGuBs8xsJ/BZ59wXGveZrR9CpBO5wkQI/GJftqN9/FJpfOxAYwgSdV3fh+Ccu7Vh0c66des7\n3EfkpPnl/olxgz0H8xRLVVLJ1kWyXy5PBIK6jCTidKeyLBgHX5h4sE2lCodH2nf9TAqEWAzicQWC\nRJYCQRaM0VzQZXTGkmAs4Hiu/ThCfSBA+KAcBYJElAJBFozj2SAAVi1PAzCabf/G7lcqkwLBi8dB\ngSARpUCQBWM0F7yRr64FQicVQt2gMgRXGqlCkKhSIMiCMVqrEJalgImKoZXGLiMvkdBlpxJZCgRZ\nMGpjBuNdRvnWn/R9328eCKoQJKIUCLJgjObKxGNw+uIOK4TwkZkKBFkoFAiyYIzmKgxlEiwaiI+/\nbsVvFgjJpAJBIkuBIAvG8VyFwf44g/3x8HWbLqPaxHYNVxkpECSqFAiyIPi+z2i2zFB/nIF0HM+b\nGGSecp/wjT/WUCFQreJXq3PaXpH5oECQBSFXrFKpwlB/gljMY7Av3r7LKAyExjEE0AR3Ek0KBFkQ\natXAUCY+/m+7G9PGu4aaBYK6jSSCFAiyIGTD6a4zfUEgDPTF206BXRtUjikQZIFQIMiCkCsGff6Z\ndPAr35+OUyj5VKpTP7Sv2mxQWYEgEaZAkAWh9iyEvlQ8/Df41S+UWgwOawxBFhgFgiwI+bBC6A+D\noPZvvjB1IFSbBULtqWmVzp64JnIqUSDIglDrMuob7zKKTVreTLOrjGrjCVVVCBJBCgRZEGqVQK0y\nqHUd5YpTf9JvedmpxhAkghQIsiDU3vhrQdBJl5ECQRaarp+pbGZ3AZcAPrDROfdk3br1wCeBCrDV\nOfcJMxsEvgwsAdLAx5xzD8+k8SKdqnUN1bqK+rrsMlIgSJR1VSGY2WXAuc65dcAG4O6GTT4HXAdc\nCrzezM4H3gHscs5dAVwfbiNyUjR2GdX+rV191EzTQKgNKmsMQSKo2y6jK4AHAJxzu4ClYQWAmZ0D\nDDvn9jrnfGArcCVwEFge7r8MODSThotMx/ig8gljCKoQRGq6DYSVwOG614fCZbV19W/2zwOrnHP3\nA2ea2c+BfwI+0OWxRaYtH44h9KfDMYR052MIWQqMlkYBBYJE22wNKnvt1pnZfwGedc69hKBi+MtZ\nOrZIW40VwniXUQcVwlf3fpVP/dvH8X1fgSCR1m0g7GOiIgBYDewPv97bsG5tuP064GEA59xPgLVm\n1ipIRGZNrRKY6DIKK4QOLjstx32OlY7yzNgvFQgSad0GwsMEA8OY2UXAXufcGIBzbg+wyMzONrME\ncA3wHWA3wVVJmNnZwFg4xiAy53LFKumkRzwWfAapdR3lOugyqoR/JU8M/0iBIJHWVSA45x4HdpjZ\nY8BfADeb2U1m9qZwk/cA9wGPAlucc7uBzwMvMrN/Au4F3j3Txot0KlesjA8kw0SF0EmXUSrVj4fH\nvtw+XWUkkdb1fQjOuVsbFu2sW7eNoIuofvsx4K3dHk9kJvKF6vi4AdTdmNYiEKrl4E1/Sf9ylqTy\nHCkcUoUgkaY7lWVByBWr4zejQd1cRi3uQ8gXjgOwqH8Zp6VO42jpKNWwyFAgSBQpEGRByBer9CUn\nft3TyRie17rLKFccA2Bx33JOS58OwKifBRQIEk1ddxmJnCpK5Srlij9eFQB4nkc6GWvZZVQojJEG\nlmSW46eDSuJodYQYCgSJJgWCRF7tITh9qckFcV+qTSCUsqSBZf2nE0sHAfBCdYTlTDwrQSRKFAgS\neYVScHVzOtkQCMlYyyemlUoFAJb0n4aXKgJwzD/OcnSVkUSTxhAk8mpVwAmB0KZCqJaCEBjqX8Ki\nxCIAjvs5QF1GEk2qECTypuoyajeGULvsNJXsZyge3H8wigaVJbpUIUjktaoQyhWfSqX5DfN+aWK2\n075YPwkvwYgfXIqqQJAoUiBI5E1ZIdRuTmsyjuD7Pn6lTDUGXiyG53kMJoYY9YNLUTWGIFGkQJDI\na1UhABSadBvlKlliFfDjE/sMJYc4VqsQKlPf0CZyqlIgSOTV3vDTTcYQoPn0FaPlUeIV8BN1gZAY\nokARYjFVCBJJCgSJvPEuoykqhGZdRqOlUeIVH+ITE+INhVcakYhrDEEiSYEgkZefokJo1WU0Wh4h\nXp38+MzB5FDwRVyBINGkQJDIq1UIzW5MgykqhPIoscrkQBhKBIHgJ2IKBIkkBYJEXr7Y5iqjJhXC\nWHmMeAVidYEwkBgAwkDQGIJEkAJBIm/KCqFFIOQqWeIVxh+IA5CJZwCoxjxdZSSRpECQyMtPNbld\nGBDN5jPKlrPEqhBP1AVCIgyEuKcKQSJJgSCRV2hzH0KzCiFbHiNRgXgyPb6sPx50GVUSmu1UokmB\nIJGXn6LLqNV9CLWH48QTqfFltS6jSszXoLJEUteT25nZXcAlgA9sdM49WbduPfBJoAJsdc59Ilx+\nI3ALUAb+xDm3dQZtF+lIYYpB5VYVQj4MhPqrjGpdRuWYD5UKfrWKF9NnKomOrn6bzewy4Fzn3Dpg\nA3B3wyafA64DLgVeb2bnm9ly4E/CZW8Eru261SLTUKsQUglv0vLx+xCajCEUisGsprG6QeV0LI2H\nRykeTIanKkGiptsK4QrgAQDn3C4zW2pmg86542Z2DjDsnNsLYGZbgSuB54FHnHNjwBjwhzNvvkh7\nhWKVdNIjFpscCK26jIphIHh1dyrHvBiZeIZSLA9oPiOJnm7r3ZXA4brXh8JltXWH6tY9D6wCXgRk\nzOxBM3vUzK7o8tgi05IvVU8YP4Cpu4wqfoVy+LS0+stOAfoTGUqxYHtdaSRRM1sPyPE6WOcBy4E3\nEYTD94GzZ+n4IlMqFKsnjB9AfZfR5E/6uUqO8D1/UoUAwcByMRZ0FanLSKKm2wphHxMVAcBqYH/4\n9d6GdWvD7Q8CP3TOVZ1zvwRGzey0Lo8v0rF8sXrCPEZQf6fy5AfkZMvZYGI7Jg8qQxAI5ZjGECSa\nug2Eh4HrAczsImBvODaAc24PsMjMzjazBHAN8J1wnyvMzAsHmAedc4ebf3uR2ZMvVk+Y6RQgGfeI\neScOKtfuUoYTu4wyiQEqYdGgQJCo6arLyDn3uJntMLPHCC4tvdnMbgKOOee+CbwHuC/cfItzbjeA\nmX0N+FG4/H0za7pIe5WqT7HsN+0y8jyPdCpGvji5yyhbGZuyy6g/3j8RCBpDkIjpegzBOXdrw6Kd\ndeu2Aeua7LMZ2NztMUWma+LxmfGm6/tSsRMGlYMuo+DrEyqE+ABjYbaoQpCo0V01EmlTzXRa05eM\nUSg1jCHUdxk1DionMuoykshSIEiktQuEZl1GtecpQ7MKIUMlHlw4p0CQqFEgSKSNT1vRZFC5trxl\nl1HjVUZ1FUJVYwgSMQoEibTxie2m6jJKxahUoVSeCIVsJUu8Gl52esKgcoZqrctIdypLxCgQJNLa\njiE0mc8oGz4tDabqMgq+1lVGEjUKBIm0qWY6rWk2n1G2fgxBg8qygCgQJNI6rRAaAyHlB+/6zS47\nreiyU4koBYJE2vjjM6caVK4FQl2XUa6cpd8PHozTOKgc3Jimq4wkmhQIEmkdjyE0VAjpahAEjRVC\nzIuRSAZhoTEEiRoFgkRa2/sQGsYQqn6VXCVHXxgIsYZAAEiEz1nWVUYSNQoEibTaG32z5yHAiV1G\n+UoeH5/UFBUCQDLZD6hCkOhRIEik1e5CbnWnMkx0GWUrwZPS0pXmg8oAyXQfAJVScXYbKzLPFAgS\naROT2019pzJMVAi5MBCS1WB546AyQDqsEEql/Ow2VmSeKRAk0sa7jDqtEMphIFSCK4majSEkUxkA\nSkUFgkSLAkEirZPZTuu3y1bGAEiEgdCsy6gvHQRCWRWCRIwCQSKt0OF9CIXxLqMcAIkppq4ASKcG\nAKiUNYYg0aJAkEjLF6vEY5BMdHancq3LaKrZToN9gkAoFwuz3VyReaVAkEjLF6tTdhfBifch1AaV\n4+VwttOmXUaDgK4ykuhRIEikBYHQ/PGZ0KRCCAMhVq7iJRJ4nnfCPpkwEKpl3Ycg0dL1M5XN7C7g\nEsAHNjrnnqxbtx74JFABtjrnPlG3rh94Gvgz59yXuj2+SCfypSqZDgKhNoZQ6zLyytWm1QFAX3qI\nInpAjkRPVxWCmV0GnOucWwdsAO5u2ORzwHXApcDrzez8unW3AUcIgkRkTuWL1SkvOQXGq4fGCsEr\nV6YMhExqEB/wVSFIxHTbZXQF8ACAc24XsNTMBgHM7Bxg2Dm31znnA1uBK8N15wHnAd8CTqzFRWaR\n7/sU2owhJOIe8djkMYQYMfxSecpAGEgMUolrtlOJnm4DYSVwuO71oXBZbd2hunXPA6vCr+8E3t/l\nMUWmpVT2qfpT34NQ05eKjd+pnC2PkUkM4JfLTW9Kg9oU2EBZk9tJtMzWoHKrT/segJm9HXjUOfds\nm+1FZkW7m9Jq+lLxurmMcmTiGfxSacoKIRlLBs9VViBIxHQ7qLyPiYoAYDWwP/x6b8O6teH2VwPn\nmNl14bKCmT3nnPtel20Qaandw3Fq+pIxssUKvu+Tq2RZllrWMhAAKokYsXJ1yvUip6JuA+Fh4GPA\nZjO7CNjrnBsDcM7tMbNFZnY2QThcA/y+c+4vazub2e3AMwoDmUudVgjplMfw8Solv0TZL49XCFN1\nGQFUkzGSeVUIEi1dBYJz7nEz22FmjxFcWnqzmd0EHHPOfRN4D3BfuPkW59zu2WmuSOfaPQuhptZl\nNFYK5jEaIJjeutldyjV+Ik68VKbqV4l5up1HoqHr+xCcc7c2LNpZt24bsK7Fvh/r9rginWo39XVN\nOhmj6sNIGAgZPwyEFhUCqQSJcoFCtUB/vH92Giwyz/TRRiKr80Hl4BqHkXxDhdAqEJJJYj6MFUZn\noaUivUGBIJHV7lkINelkcHPascJxADJ+EAStxhBqYZHNHZtxO0V6hQJBIqvzCiFYP1oMKoT+ahpo\nXSHEUikAcnlVCBIdCgSJrMI0A+F4KZi2oi+sEFoNKo8HQm5kxu0U6RUKBImsTu9DqF2FNFYOKoS+\nahAErSqEeDoYZ8irQpAIUSBIZOWLwX0CnVYIY+FMp32V9oGQSAWBUCyMzbidIr1CgSCRlSsEFUKm\nb+rprwEy6eDPoPb4zJQfbN9qUDmRDi41LeQVCBIdCgSJrGwhqBAy6TaBEAZG7WlpqXLwZ+GF4wTN\npNIZQBWCRIsCQSJrLB9WCOnWv+a19flqEAjJUvCojlg6PeU+qb4gEMqF/IzbKdIrFAgSWdlwrqG2\nXUbh+qKfoz/ej18MHnzTKhDS4WM0i4XsbDRVpCcoECSysoUK8RikEq1nWx+oBYI3xkBikGqhAIDX\nIhBqYwjlQm6WWisy/xQIElnZQpWBvjie1zoQgjEGn3Isy2BiED8MhFYVQjxcpy4jiRIFgkRWNl9p\nO6AMwRiClyiBV2WwrkJoFQi1S1IrRQWCRIcCQSJrLF8h09f+VzzTFyeeCt7Y67uMYi2uMqqt80tl\nylU9W1miQYEgkVSt+uSK1Y4qhFTCI9UfBELHFUIYCMmyz1jl+Cy0WGT+KRAkkvKlKr7f/h4EAM/z\n6B8MQqB+DKHVoHKtQoiX4XhZgSDRoECQSJq45LSzX/G+TBGAgfj0xhASZRhTIEhEKBAkkrIdTltR\nk87UjSEUg3BoFQi1CiGhCkEiRIEgkTSW72zaippEX1AVZOIDVAsFvEQCLz71vpPGEMqavkKioetn\nKpvZXcAlgA9sdM49WbduPfBJoAJsdc59Ily+CXhNeNxPOecemEHbRaY03S6jRDpPGUj4GfxiseX4\nAUCsL5jtNFmC42VNgS3R0FWFYGaXAec659YBG4C7Gzb5HHAdcCnwejM738xeB7w83Ocq4C+6b7ZI\na+NdRqnOKgQvFdxxHCtnqBYKLS85hXAMIRYjVYTRkrqMJBq67TK6AngAwDm3C1hqZoMAZnYOMOyc\n2+uc84GtwJXAo8Bbwv2PAQNm1voWUpEujeaCewOGMp0FAskx/GqMaiEdBEKbCsHzPGKZfpJFGCnr\nucoSDd0GwkrgcN3rQ+Gy2rpDdeueB1Y55yrOuVpn6wbgW2FgiMy60WzQZTSU6axXtJo4TiXfz2iu\nGowhtAkEgHh/P6miz0hJj9GUaOh6DKFBq0/6k9aZ2bXAu4DfmqVji5xgJBtUCIs6qBB836cUO045\nv5SRsTKnFYttKwSAWF8/6WMeoyVVCBIN3VYI+5ioCABWA/vDr/c2rFsbLsPM3gDcClzlnNNInMyZ\n6VQI+WqOqlemks9wfCQHvt92DAEg1t9PsugzUlQgSDR0GwgPA9cDmNlFwN5ad5Bzbg+wyMzONrME\ncA3wsJktBu4E3uicOzrzpotMbToVQq3Lp5LPcHw0HFzusMvIAyqFPIVKofvGivSIrrqMnHOPm9kO\nM3uM4NLSm83sJuCYc+6bwHuA+8LNtzjndpvZu4HlwP1mVvtWb3fOPTezH0HkRKPZCrHYxLMOWhkJ\nu3wqhQw5P3jgTe2y0lZi/cEzEVJFGC2PkI6fPoMWi8y/rscQnHO3NizaWbduG7CuYfvNwOZujycy\nHSPZMkP9ibbPQoDJFUIhH1xCGstk2u5XC41UMfgep6UVCHJqm61BZZGeMpIts7jDK4wmAqGfUim4\nEC4+ONh2v4kKwedYSb2gcurT1BUSOdWqz/FshUUDnQXCC6XhYL/8IJWxMBAGBtruF6/rMjpaVCDI\nqU+BIJEzlq9Q9TsbUAYYLhwBoI8l+NlgDCHeSZdRXSAMF4902VqR3qFAkMgZmeZNacPFYRJegsH4\nIrz8NLqMxscQfAWCRILGECRyXjheAmBJh11Gw8VhlqSWkh5IEi8El51Op0LoK8U5UhzusrUivUMV\ngkTOkZEgEE5bnGy7balaYrQ8wrLUck5bnKK/Gj4cp4MKoTaGsLjcpwpBIkGBIJFz+FgQCMsXtQ+E\n4fCT/bLUMpYvSpLxgwfldFIh1LqVFhVTHC8fp1jVzWlyalMgSOTUAuG0xe2nn6h9sg8qhCT91TAQ\nOrnKaPFiAIZywZ/RcEHdRnJqUyBI5Ix3GXVQITyfPwjAGX1ncNriJJlqnkoy3fJpaTWJoSHwPPqz\nwaS9BwsHZ9BqkfmnQJDIOXysSDwGiwfbDyofyAdzMq7sW8Vpi1L0+wVKyf6OjuPF48SHhkgfD+ZN\nOpDb32YPkd6mQJDIOTJSYtlQknis/bQV+3P78PBY0beC5YsSDFRz5OPt5zGqSSxeTCycEK8WLiKn\nKgWCREql6nNkpNTRgDLAgfwBlqWWk4qlWeQVSPtljsaHOj5eYvFi/HyevnJcgSCnPAWCRMqB4SKV\nKqw5rf3s+U4dAAALlklEQVT01WPlMUbLI6zsCx7fURkOBpgPVAfx/c4e5pcIB5bXVpZzIH+Aql/t\nsuUi80+BIJGy52DQfXPWivbdPnvGfgXAmsyZAJQOB0+FPeAP8UI4LtBOLRDOKi+nWC1wMH9guk0W\n6RkKBImUPc8Hl42+qINA+OXYbgBePPhiYCIQXogvYs/BfEfHG68QSsuC73n8F9NrsEgPUSBIpOw5\nELyRn91JIIRv3v9hYHIgDCc6D4TkGWcAcPqx4DLVX44pEOTUpUCQSPnVwTx9qRint7kprVQt8czY\nM6zsW8VAIrgJrb5CeOZArqPj9Z11FgCp/cfoj/fz81HX8fiDSK9RIEhkDI+U2HMwz/lnZYi1ueT0\n/x17mmK1wK8tvmB8WWHvXmKZAWL9GZ7aPdrRG3ti2TJimQyF557j5Ysu4EjxCM9m98z4ZxGZDwoE\niYwnfxY8+exVL13UdtsdL2wH4JVLLwagdOQIpUOHyNhL+fWXLuL5oyWeO9R+biLP8+g780yKBw9y\n0eArgnYMb+/2RxCZV10HgpndZWY/NLPHzOxVDevWm9m/hOtv62QfkZl67OljALzKWgfCwfwB/vWF\nHazqW82ZmaDLZ+zf/g2AgfPP51UvDe5D+MHOzp6C1nf22eD7vOhAkqHEED88vI3j5dFufwyRedNV\nIJjZZcC5zrl1wAbg7oZNPgdcB1wKvN7Mzu9gH5GuuefGeMKN8LKzBzjz9KnvQShXy9y35yv4+Lxx\n9bV4XtC1NPLEEwBkzj+fS39tCYN9cR547BDHc+0vP1306lcDMLrtMd6w6mry1Tz/69n7dE+CnHK6\nfUDOFcADAM65XWa21MwGnXPHzewcYNg5txfAzLYCVwKnT7XPzH+M+ef7fss+Z7/bNwffx8cfP0az\n9VPs1roPvO77AjRu2ar33K+2+FmaNXHSYVvtW219Dpu8Hh0r84v9Ob788D76YhVueO1ysmMvNGzo\nM1o+zr7cXv75+e/xbHYPr1x8Ib+Weinl0VFGHn+csZ/8hIwZ6bVr8TyP6y87gy9+Zz+3feGXvPMN\nq3jRyn4G++LEYoyHSE3fi19Meu1aRp98kgtffj47F5/N/x3eTq6S5bLTX8fq/jUMJoZIxOLEiJ+w\nv0iv6DYQVgI76l4fCpftDv89VLfueeDFwGlN9lkF/LzVgX723/6Yo30nXkLodXkhR7v99Kd66lkB\n3FJ7cSc8O8V2/cBV46928PO6X8dYfz8r3va28Tfr6197BnsO5vn+Uy/w4XtOvJQ0FoNY3Rv7mYXX\n8G6+zvNf/DK/BawHfO8p4Ckab1Xz9UsWSS8sTnDxp/4HfU3er04Vs/UIzVa/4lOt82j9QRSAI8tS\nkGneBdD1xX1eq2bN9PtOze8yburfQJp9h9btbfFzzuSNqcWnXL/lUTs5v833btbemBe8MSeTXsvJ\n7OKxBOlYmqHkEP3xyQ+/Sa9axdIrryS5fPnE9nGPW95yFusvWsa/7h7l3w/lyRerVH2oVn2qJ1Rg\n5/Dgqndx3vNPsajwAulyDmJ5iBcgXgaCiszD7+Z/opwCxhYPkkx2NodWr+o2EPYRVAI1q4HazF57\nG9atDbcvtthnSr/x4TtYu3Ztl80U6Z7neVz0kiEueknnk93Bb8xZe0TmWrdXGT0MXA9gZhcBe51z\nYwDOuT3AIjM728wSwDXAd1rtIyIi86+rCsE597iZ7TCzx4AKcLOZ3QQcc859E3gPcF+4+Rbn3G5g\nd+M+s9B+ERGZJV2PITjnbm1YtLNu3TZgXQf7iIhIj9CdyiIiAigQREQkpEAQERFAgSAiIiEFgoiI\nAAoEEREJKRBERARQIIiISEiBICIigAJBRERCCgQREQEUCCIiElIgiIgIoEAQEZGQAkFERAAFgoiI\nhBQIIiICKBBERCQ07UdomlkS+CJwFsGzkd/pnHumYZsbgY1AFdjsnPufZpYA/hY4JzzuHzvnHptZ\n80VEZLZ0UyH8PjDsnHst8EngU/UrzWwA+ChwJXA58H4zWwq8DRgL99sAfHYG7RYRkVnWTSBcATwQ\nfv1/gEsb1l8CbHfOjTrn8sBj4TZfAT4YbnMYWN7FsUVEZI50EwgrgUMAzrkq4IfdQTUrautDzwOr\nnHMl51wuXPZfgXu7OLaIiMyRlmMIZrYB+IOGxZc0vPbaHGPSejO7GfiPwG+32S8OcODAgTabiYhI\nTd17Zny6+7YMBOfc3xIMBI8zsy8Aq4Cd4QCz55wr122yj6CKqFkLPB7uuwG4BniTc67Spm2rAG68\n8cYOfgwREWmwCvjFdHaY9lVGwMPA74X//jbwvYb1TwD3mNligquQ1gF/ZGbnAH8IXOacK3ZwnO3A\na4H94fcREZH24gRhsH26O3q+709rBzOLAfcALwHywDucc3vN7EPAPzvnfmRmbwZuAXzgbufcfWb2\nSeAG4Nm6b/d651xpuo0WEZHZN+1AEBGRaNKdyiIiAigQREQkpEAQERGgu6uM5pyZ3UVwv4MPbHTO\nPTnPTQLAzC4H7geeDhf9BLiT4C7sGMEVUW/r8CqqOWFmFxLcSf5Z59xfmtmZwN81tq/ZfFPz2MYv\nAhcBR8JNNjnnvj2fbQzbuQl4DcHfyaeAJ+mxczlFO6+lx86nmWUI5kA7A+gDPk7w99NT53OKdv4e\nPXY+w7b2E7wX/RnB1Z4zPpc9VyGY2WXAuc65dQRzHt09z01q9H3n3OvC/zYS/ML8d+fcbwK7gXfN\nV8PCX+bPAN8hCFMIflkmta/FfFPz1UYf+HDdef32fLYxbOfrgJeHv4dXAZ8DPkYPncsW7ey58wm8\nEXjCOXc58BbgLnrwfE7Rzl48nwC3EUwDBLP0d95zgUDdXEnOuV3AUjMbnN8mTdJ4Z/ZlwN+HXz8E\nrD+5zZmkQPALfbBuWbP2vZrm802d7DbWn8vG8zrVnFgny6MEbwgAx4ABeu9cNmtnhuA69J46n865\n/+2c+/Pw5VnAcwRvUj11PqdoJ/TY+TSz84DzgG+Fi2bld7MXu4xWAjvqXh8iuMni5/PTnEl84GVm\n9iCwjCCVB+rupai1dV6Ed39XzKx+cbP2jc9HFXqek9TuKdoI8D4z+0DYlvfNZxthvJ1j4csNBH94\nb+ilczlFO7cS3MjZU+ezxsx+CKwmuKn1kV47nzUN7fwAvXc+7wRuBt4Zvp6Vv/NerBAaeUx0Lcy3\nnwN/6py7FriJYFqP+vlC2s3rNN+mat98t/vvgA85564EngL+lBP/n89LG83sWoI/uvc1rOqpcxm2\n810EbxI9ez7Drq1rOXFyy546n3Xt/ArwZXrofJrZ24FHnXO1m3wbj931uezFQGicC2k1wSDJvHPO\n7XPO3R9+/UvgAEGXVjrcZA1B+3vJ8Sbtazbf1N6T3bAa59z3nHM/CV/+PXABPdBGM3sD8BHgPzvn\nRujRcxm281bgqrB7oOfOp5m9MrzAAefcjwl6J0bNrC/cpCfO5xTtfLrHzufVwO+Z2eMEk4/exiyd\ny14MhIeB6wHM7CJgr3NurPUuJ4eZ/b6Z3R5+fQZwOvAFwvYCbwa+PU/Nq+cx8WngEU5s378AF5vZ\n4nB8Zh2wbR7aCICZfc3MLghfXgbsnO82hnNx3Qlc45w7Gi7uuXNZ18431trZi+eTYF6yD4TtW0Ew\nJvMIwXmEHjmfTdo5CHy+l86nc+4G59yrnXO/QTCN0McJnk0z43PZk1NXmNmngN8k6Au92Tm3c56b\nBEB4Ur9KMH4QJ7hK4imCkrIP+BXBI0XnZTI+M/tPwN8QXDJXJrhM7iqCy+gmta/ZfFPz1MZh4HaC\nT+LHgdGwjYfnq41hO98dtutn4SIfeAfBH2BPnMsp2gnBh5Q/orfOZx9BF+uZQD9Bt8sOmvzt9GA7\nx4A/p4fOZ117bweeIfggPeNz2ZOBICIiJ18vdhmJiMg8UCCIiAigQBARkZACQUREAAWCiIiEFAgi\nIgIoEEREJKRAEBERAP4/QICaRNNxnfIAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos1 = gaussian(xs, 180, 4)\n", "pos3 = predict_update(xs, pos1, velocity=15, measure=197)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So far I've been using Gaussian distributions for everything, but in that case we could skip all the computation and get the results analytically.\n", "\n", "The implementation I showed generalizes to arbitrary distribitions. For example, suppose our initial beliefs are multimodal, for example, if we can't tell whether the part has been rotated 90 degrees." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos1 = (gaussian(xs, 0, 4) + gaussian(xs, 90, 4) + \n", " gaussian(xs, 180, 4) + gaussian(xs, 270, 4))\n", "normalize(pos1)\n", "plt.plot(xs, pos1);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can do the same predict-update step:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEDCAYAAAA1CHOzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl0XHd98P/3nUUabZZkydq9yXa+zp4aEoNDyGZCSChL\nSEtO06cB0j78ID3kR/vk0HDShj5sD6GQwnNawKW0LIH8GkoIAUNCICFOcBInwbGd2N/EtrxJsrVZ\n24xmv78/7p3RaDSjWTSy5sqf1zk+1txl7ldf3Xs/97tewzRNhBBCCNdiJ0AIIUR5kIAghBACkIAg\nhBDCJgFBCCEEIAFBCCGETQKCEEIIADzF7qiUuh/YDJjAnVrrF1PW+YBtwLla60tTlt8HvM0+7he1\n1g8Xe3whhBClVVQJQSl1JbBea70FuB34etom9wEvpO1zNXC+vc/1wD8Xc2whhBALo9gqo2uAhwG0\n1geARqVUbcr6u4FH0/Z5GvhT++cxoEYpZRR5fCGEECVWbEBoA4ZSPg8C7YkPWms/MONmr7WO2cvB\nKlX8Qmstw6SFEKJMFN2GkMbAakvISSn1XuAjwDtybFcJXAr0A7H5JlAIIc4SbqwH9F1a61AhOxYb\nEPqwSgkJHVg37lSzAoRS6p1Y1UnXa60nchzjUmBHkekTQoiz3RXAM4XsUGxAeBz4R2CbUmoT0JtS\nHZQwo8pIKVUPfBm4Rms9mscx+gEeeOAB2tracm0rhBACOHnyJLfeeivMfkjPqaiAoLXeqZR6SSn1\nLFZ1zh1KqduAMa31T5VSTwBdwCql1F7gfqxiTBPwkFIq8VV/obU+nuUwMYC2tja6urqKSaYQQpzN\nCq5qL7oNQWt9d9qivSnrtmbZ7d+KPZ4QQoiFJSOVhRBCABIQhBBC2CQgCCGEACQgiCVict8+jnzu\nc8QmJxc7KUI4lgQEsSQc/6d/YurgQU7/9reLnRQhHEsCglgSDK8XQEoIYkk5cOAAW7du5YEHHjgj\nx5OAIJYEd00NADF/+vhIIZxpamqKL33pS7ztbW87Y8cs1VxGQiwqd00N0dFRomNji50UIZJ+8pOf\nsGPHDgKBAP39/XzoQx+is7OT+++/H6/XS2trK1/4whcYGhrirrvuwu12E4vF+PKXv0xrayvf+ta3\n2LZt2xlLrwQEsSSYMWtQZnhwcJFTIsrVt7f3smNvPrPm5O+KCxv4yxs659zm4MGDPPLII4yNjfGe\n97yH6upqvve979Ha2spnP/tZfv7znzM+Ps7ll1/Oxz/+cV577TUGBwfp6OjA7XaXNL25SJWRWBIS\nVUWRoaFkcBBisRmGwWWXXYbL5aKxsZG6ujo8Hg+tra0AbN68mddee43LL7+cRx55hC996UuEw2Eu\nvvjiRUmvlBCE45mmOd12EIsRCwTw1NUtbqJE2fnLGzpzPs0vhHg8nvzZMAwikUjyczgcxuVysWHD\nBh555BGeeeYZvvKVr/CBD3yA973vfWc8rVJCEI4XDwYh5aIzw+FFTI0Q00zTZPfu3cTjcUZGRggE\nAni9Xvr7rYlId+3axYUXXsj27dt5/fXX2bp1K3feeSf79u2b8R1nipQQhOPF03oWxVOewIRYTIZh\n0NnZyZ133snRo0f55Cc/SWdnJ3/7t3+L2+1m9erV3HjjjRw4cIB7772X6upq3G4399xzD6+88gr3\n3HMPw8PDuN1uHnzwQX7wgx9QX1+/YOmVgCAcL72rqRkq6CVRQiyolStX8qlPfWrGsh/+8IczPp93\n3nk89NBDs/Z99NH0V9MvLKkyEo6XHhCkhCDKiWEYuTcqE1JCEI6XCAjuujpiExPShiDKxvvf//7F\nTkJBpIQgHC8eDALgsetW4xIQhCiKBATheKZdRZSYvkJKCEIURwKCcLxEm4Grutr6LAFBiKJIQBCO\nlywh1NZanyUgCFEUaVQWjpcMCFJCEEvMfffdx8svv0w0GuWjH/0o73jHOxb0eBIQhONJG4JYip57\n7jkOHjzIgw8+yOjoKO9///slIAiRS7INwQ4IUkIQ5WI+019feumlXHTRRQDU1dURCAQwTXNBxzUU\nHRCUUvcDmwETuFNr/WLKOh+wDThXa31pPvsIUSwpIYh8/OTEj/nD6ZdK+p1/1Pgmbuq6ec5t5jP9\ndbVdDfrjH/+Yq666asEHuRXVqKyUuhJYr7XeAtwOfD1tk/uAFwrcR4iipAcEKSGIclGK6a+feOIJ\n/vu//5u///u/X/D0FltCuAZ4GEBrfUAp1aiUqtVaJ15oezfQDNxWwD5CFCUuJQSRh5u6bs75NL8Q\n5jP99Y4dO9i2bRvf/va3qbV70S2kYrudtgFDKZ8HgfbEB621H0gv28y5jxDFkhKCKFfzmf56YmKC\n++67j29+85ssW7bsjKS3VI3KBla7wELvI8QsEhBEuZrP9Nfbt29ndHSUO++8M/l99913H+3tC/cc\nXWxA6MN64k/oAPrTtkm/2eezjxAFM9NGKpsy26koI8VOf93d3c0HP/jBBU9fqmKrjB4HbgZQSm0C\neu1qolTpVUb57CNEweKRCIbXi+FyYXg8xOV9CKKMLPnpr7XWO5VSLymlngViwB1KqduAMa31T5VS\nTwBdwCql1F7gq1rr/0jfp1S/hDi7mXZAADAqKqSEIMqG06a/LroNQWt9d9qivSnrtua5jxDzlhoQ\nXBUV0oYgRJFkcjvhePFIBFdqCUGqjIQoigQE4Xgzqow8HsxYbJFTJIQzSUAQjjcjIHi90oYgRJFk\ncjvheGZqlZHbjRmNLnKKhJi/qakp/u7v/o6RkRFCoRAf//jHueqqqxb0mBIQhKOZ8ThmNDrdqOz1\nYkajCz4rpBAL7cknn+Siiy7i9ttvp6+vjw9/+MMSEISYS6I0YHg8M/4nFgOPnN5icc1n+usbbrgh\n+T19fX0LOkI5Qa4Y4WiJ9oLURmWwAoUhAUGkOPXgg0zs2lXS76y79FJab7llzm3mM/01wC233MKp\nU6f45je/WdK0ZyKNysLRki/HyRAQhFhspZj++sEHH+Qb3/gGd91114KnVx6hhKNlKyHEo1Hci5Yq\nUY5ab7kl59P8Qih2+uv169fT1NREe3s7GzduJBaLMTIywvLlyxcsrRIQhKNlCwhICUGUgdTpr0dH\nRwkEAlRXV9Pf3097ezu7du3izW9+M9u3b6erq4utW7fS2NjIL3/5S0ZHR+nr6+PTn/40Q0NDBAKB\nBQ0GIAFBONxcJQQhFtt8pr/u7Ozk05/+NLfeeivBYJB77713wdMrAUE4miltCKLMFTv9NcBXvvKV\nBU1bOmlUFo6WmKYivdupBARRLpw0HkZKCMLRso1DkIAgyoHTpr+WEoJwtES301kBQeYzEqJgEhCE\noyWrjNxWJ9NkQJAZT4UomAQE4WyJqiEpIQgxbxIQhKMl2gpc0oYgxLxJQBCONqtR2e5+KgFBiMJJ\nQBCOFk8PCHZbggQEIQonAUE4W7Y2BAkIQhRMAoJwtERvImlDEGL+JCAIR5OBaUKUTtEjlZVS9wOb\nARO4U2v9Ysq6rcDngRiwXWv9OaVULfA9oAGoBP5Ra/34fBIvxKyBadKoLETRiiohKKWuBNZrrbcA\ntwNfT9vka8BNwOXAdUqpc4EPAQe01tcAN9vbCDE/6QPTpFFZiKIVW2V0DfAwgNb6ANBolwBQSnUD\nI1rrXq21CWwHrgVOAU32/suBwfkkXAhIufFLCUGIeSs2ILQBQymfB+1liXWpN/sBoF1r/RCwUin1\nBvAU8DdFHluIpOTANJn+Woh5K1Wj8lzzuxoASqk/B45prTdglRj+pUTHFmexZKNy+lxGEhCEKFix\nAaGP6RIBQAfQb//cm7auy95+C/A4gNZ6D9CllHLOROGiLGXtZSRzGQlRsGIDwuNYDcMopTYBvVpr\nP4DW+iiwTCm1WinlAW4EHgMOYvVKQim1GvDbbQxCFC29DcEls50KUbSiAoLWeifwklLqWeCfgTuU\nUrcppd5nb/Ix4EfA08CDWuuDwLeANUqpp4AHgP8538QLkT4wDSkhCFG0oschaK3vTlu0N2XdDqwq\notTt/cAHiz2eEJmkVxlJCUGI4slIZeFo2doQ4lJCEKJgEhCEoyXbENJ6GSElBCEKJgFBOJoZjYLb\njWHYHdbswCAlBCEKJwFBOJoZjSYHpQEYhoHh8cg4BCGKIAFBOJoZiyUHpSVIQBCiOBIQhKOZkUiy\nq2mC4fVKQBCiCBIQhKOZ0eh0Q7LNcLslIAhRBAkIwtHMWGx6UJpNSghCFEcCgnA0KSEIUToSEISj\nmdGotCEIUSISEISjmdGo9DISokQkIAjHMk0zc5WRBAQhiiIBQThXYqbTlIFpYE9fEY9jxuOLkSoh\nHEsCgnCs5IymGaqMQN6aJkShJCAIx0q88yBTlVHqeiFEfiQgCMdKn/o6wZB3IghRFAkIwrFmvS3N\nJiUEIYojAUE4Vvr7lBOkhCBEcSQgCMfKWWUkJQQhCiIBQThWMiBILyMhSkICgnCsnCUECQhCFEQC\ngnAsCQhClJYEBOFYiUZjCQhClIYn9yaZKaXuBzYDJnCn1vrFlHVbgc8DMWC71vpz9vJbgbuAKPAP\nWuvt80i7OMtlG5iWmMpCAoIQhSmqhKCUuhJYr7XeAtwOfD1tk68BNwGXA9cppc5VSjUB/2Avezfw\n3qJTLQRzVBnZjcxxCQhCFKTYEsI1wMMAWusDSqlGpVSt1npSKdUNjGitewGUUtuBa4EB4AmttR/w\nAx+df/LF2SxrlVFisjsJCEIUpNg2hDZgKOXzoL0ssW4wZd0A0A6sAaqVUo8opZ5WSl1T5LGFAKSE\nIESpFd2GkMbIY50BNAHvwwoOTwKrS3R8cRbKOrmdtCEIUZRiSwh9TJcIADqAfvvn3rR1Xfb2p4Df\na63jWuvDwIRSqrnI4wsxXWWUbWCajFQWoiDFBoTHgZsBlFKbgF67bQCt9VFgmVJqtVLKA9wIPGbv\nc41SyrAbmGu11kOZv16I3GS2UyFKq6gqI631TqXUS0qpZ7G6lt6hlLoNGNNa/xT4GPAje/MHtdYH\nAZRSPwaes5f/9fySLs52MpeREKVVdBuC1vrutEV7U9btALZk2GcbsK3YYwqRSkoIQpSWjFQWjiUl\nBCFKSwKCcCyZy0iI0pKAIBxL5jISorQkIAjHkhKCEKUlAUE4VtaBaRIQhCiKBAThWFkHpslIZSGK\nIgFBOFauuYwkIAhRGAkIwrGSASExu6lNSghCFEcCgnCsZEBIrzKSEoIQRZGAIBxLehkJUVoSEIRj\nZS0huFzgdktAEKJAEhCEY5mxGLjdVgBIY3g8EhCEKJAEBOFYZjQ6q7ooQQKCEIWTgCAca86AIFVG\nQhRMAoJwLDMandV+kGB4vTLbqRAFkoAgHCtnlZG8D0GIgkhAEI5lRqOzBqUluDweKSEIUSAJCMKx\n4pEIriwBASkhCFEwCQjCscxIJGuVkcvjIS4lBCEKIgFBOJYZiWStMjI8HojFME3zDKdKCOeSgCAc\nyYzFwDTnDgjI9BVCFEICgnCkbC/HSZCAIEThJCAIR4rbN/psjcoSEIQoXObHqzwope4HNgMmcKfW\n+sWUdVuBzwMxYLvW+nMp66qAfcD/1lp/t9jji7NbsoQgAUGIkimqhKCUuhJYr7XeAtwOfD1tk68B\nNwGXA9cppc5NWXcPMIwVSIQoigQEIUqv2Cqja4CHAbTWB4BGpVQtgFKqGxjRWvdqrU1gO3CtvW4j\nsBH4BWDMM+3iLCZtCEKUXrEBoQ0YSvk8aC9LrBtMWTcAtNs/fxn4ZJHHFCLJlDYEIUquVI3Kcz3t\nGwBKqb8AntZaH8uxvRA5xaWEIETJFduo3Md0iQCgA+i3f+5NW9dlb38D0K2UusleFlJKHdda/7bI\nNIizWM42BHu5BAQh8ldsQHgc+Edgm1JqE9CrtfYDaK2PKqWWKaVWYwWHG4E/01r/S2JnpdS9QI8E\nA1GsnAHBnhZbAoIQ+SsqIGitdyqlXlJKPYvVtfQOpdRtwJjW+qfAx4Af2Zs/qLU+WJrkCmFJvk85\nVwlB5jMSIm9Fj0PQWt+dtmhvyrodwJY59v3HYo8rBOTRyyhRQpAZT4XIm4xUFo6Uc6SylBCEKJgE\nBOFIMg5BiNKTgCAcSUYqC1F6EhCEI0lAEKL0JCAIR8o1UjmxPB4On7E0CeF0EhCEI+UcqVxZCYAp\nAUGIvElAEI6Uq8ooWUKQXkZC5E0CgnCknG0IFRXWdlJCECJvEhCEI+UaqeyyA4KUEITInwQE4UiJ\nEoIrWxtCYmBaKHTG0iSE00lAEI4UlxKCECUnAUE4krQhCFF6EhCEI+WauiJRQpC5jITInwQE4Ujx\ncBgMI2sJAbcbDEMGpglRAAkIwpHMUAhXZSWGkfltrIZhYFRUSJWREAWQgCAcKR4KJdsJsnFVVEgJ\nQYgCSEAQjhQPh3HZ01NkIyUEIQojAUE4khkKJRuOs3F5vdLtVIgCSEBYAn790jAP/e4UpmkudlLO\nmHg4nJzALptMJYSe/in+9ZETjE7KtNi5BMNxtv28l309k4udFHGGlH1AGJMLd077eib56o+P851f\n9fPk7tOLnZwzwozHMSOR3CWEiooZJYRgOMZd297g0eeG+NpPji10Mh3vP37Vx8PPDnLXtoOMTEhJ\nay69QyF27B1d7GTMW9kHhKf2nB03uWI99LuBjD8vZYmn/nzaEIjFkvMe7dg7ij8YB+C5/eOcGAwu\nbEIdzB+M8fPnh5KfH9s1vIipKX/f+nkvX/jhESLR+GInZV7KPiDo44HFTkLZisVN9h2ZpLOpkkvW\n1XLkVJBx/9IvUSV6DuXsZZQ2BfbeHj8AN25umvFZzPbqET/xONwgeZVTLGZdh10rKvF6yv6WOqey\nT/3BvoDjo+5C6Tk5RSAU54K1NVy4thaAfUeWfn1v3J6wLq8SAtMlir09k9T63PzxW5uTn0VmifPo\n8vMbWN3qY/8xP9HY2dNGVYhD/VNMheJcsKZ2sZMyb5nH/edBKXU/sBkwgTu11i+mrNsKfB6IAdu1\n1p+zl98HvM0+7he11g/nOk44YnKwb4pzV9UUm9Qla5/91HbB2lpaGqyb36tH/Gw5v2Exk7XgklVG\nebQhgFWiGB6PcHIkzOZzl7GqxceyGjevngXBs1j7eiZxueDcVdVcsKaGo6eCHOoLoFbKdZgucR5d\nuNb5eVNUCUEpdSWwXmu9Bbgd+HraJl8DbgIuB65TSp2rlLoaON/e53rgn/M9Xs/JqWKSueQl8mVD\nZzUbOqtmLFvKEiWEXFVGRsp8Rj39dl51VGMYBud0VjMwGmFyaulXsRXKNE16TgZZtcJHVaWbDV3V\nAPSclDaXTBL5sqGzepFTMn/FVhldAzwMoLU+ADQqpWoBlFLdwIjWuldrbQLbgWuBp4E/tfcfA2qU\nUpnnHUhz7JSciJkcOxXE7YLO5kqqKt20NHg5NrD05//Pt8ootYRwbMA6h1a1+qz/W6z/j58F+VWo\nwbEIwXB8Vl7JdZjZsVNBPG6Djqa5z0cnKDYgtAFDKZ8H7WWJdYMp6waAdq11TGudaJm6HfiFHTBy\nSlzM2Zimye+HnuE7h7cxFBqcc9ulwjRNjg0E6Wz24XFbcXVVi4/h8dxPvb2BE/zboW+w+/QfzkRS\nSy7vNoTES3LCYY4mAoJ9c0vc7I7mOLeCsSD/37Ef8kjvw0TiZ0fXy6On0vKqJb+8mnkdDs257VKR\nuA67mitxu/N6vi1rRbchpJkrJ2asU0q9F/gI8I58vrhpWe6n3ueGf88DR78HwOsTr/OZCz6Hz+3L\n5+sda2g8QiAUZ1XL9E1xVYuPF1+f4NhAiPNWZ/7TjoZH+Yr+EqF4iN2jf+Dj6z/B+fUXnKlkl4SZ\nby8jn3UOxINBjp0iWZqC/J96v334W+wffxWAicg4f77mtnml3QmOpQXPGp/bvg7nzqvfDz/DD49+\nH4A3Jl7nMxd8nkq385+a5zI4FmEqpTTldMWWEPqYLhEAdAD99s+9aeu67GUopd4J3A1cr7WeyOdA\nnU2Vcz71xs04j538JR7Dwx81bGIiOs7OoWcL+20cKHEjW51yIiafeue4yT018BtC8RBvXn4ZAL/q\n/8UCpnJhxPMch+CqstpVYlNTGUtTMPdT71H/EfaPv8rq6jW0VLbw/PBORsJLvz9+4safem6tbvUx\nNBbBH4xl3Cdmxni837oOL2nYxHh0nJ3DZ891mDifnK7YgPA4cDOAUmoT0JuoDtJaHwWWKaVWK6U8\nwI3A40qpeuDLwLu11nkP6Wuz6+V6hzKXEvaPv8ZgaIDLmt7CLav/HK/h5enBJ5f8NA6J/Ohsnj4R\nu5oTeZX5JhczozwztIM6zzL+fPVtXFB/IYf9hzgROL7wCS6hfKuM3HYJYXLUTyAUT5YOwHrqXV7n\nyXpeATw9+BQA7+l8H+9sv4E4cZ4dfGaeqS9/vUMhXAa0L58ugU2fW9mvw6HwEG9p2sItq261rsOB\nJ89IehfT9HW4NEpCRQUErfVO4CWl1LNYvYXuUErdppR6n73Jx4AfYTUkP6i1Pgh8EGgCHlJKPWn/\nW5nrWG2N1kmZ7UTcO/YKAJctfwu1nlrOr7+QgdAAp0Ini/nVHKNv2MqP1IasRHDIllcHJw4yFQuw\nqfHNeF1eLl2+GYC9Y3sWOLWllXeVkV1CGB22CqPpF21ncyUDo2HCkdnjXOJmnH1je6j31nNO3UYu\nadiEx/Akz7elrG84REtDxYxBVp05AsKe0d0AXNb0Fuq8dZxXfz6nQqcYCJ5a+AQvot7hpRUQim5D\n0FrfnbZob8q6HcCWtO23AdsKPU7r8gpgKuOJaJom+0b3UO2uprt2HQAX1F/E7tGX2Tu6h7a29kIP\n5xj9w9ZNsaN5+qZYX+Om1udOnqTpEjezCxsuBOC8ZRfgwsXe0Vd4V/uNC5zi0kmWEPIMCJOjVl+G\n9F4gnc0+9vb46R8Jz6geATji72EyOsnlzVfgMlz43D7OqVO8Nv4qw6FhmiqbSvXrlJWpUIzTE1E2\nbaibsTxxw+vLdh2O7aXGXcPamm7Aug5fGd3N3rE9XOvLq7nQkfozPJg5WdmPVJ6rhHAqeJLTkdOc\nu+x83IYbgAvsBtID46+duUQugt7hEMuq3dRVTcd0wzDoaK6kfzhMLD67ymz/+GtUuCpYX3sOANWe\natbVrudo4AiBqHOmJsh7YJodEAJjiYAwc/vOOarYEg3JqQ3u59dbgfTAxNI9tzKVPGE6r05kuA77\ng32MRUY5r/4CXIZ1S0nk1f4lfh32DYeor/FQ43MvdlJKouwDwvI6DxUeI2NAOOQ/CMCGunOSy+q8\ny2j1tdHjP0zMzNwA5nSxmMmp02HaMzyVdDZXEo2ZDI7OnPbZH/VzMtjPmppuvK7p9xCvr9sAwGH/\n4YVNdAnFAtb8Vq7quQcCJdoQgpPW9tlucpnOrcOThwCSwRNgg/1zYt1S1JcoeaYFzxUNFXjcRjJg\npDo0aV2H62s3JJfVe+tpqWylZ/IQcXNpTj0TjZmcPB2elVdOVvYBwTCsAR+9w6FZDcWJCzNRXZSw\nrmY9oXiIvqneM5bOM2lwLEw0ZmYspnZmaYTv8Vt5tS4tr7pr1gNw2L6onSCeZ0BIlBCigSkqPAZN\ny7wz1ifyL/0mFzNj9PgP0+Zrp8YzPR1Be1UHPpfPUXlVqEQVSPrDhttl0N5UQe9QcI7rcP2M5d21\n6wjGg/RP9S1gihfPwOkw8fjSqS4CBwQEsJ7kpkJxTqe9G+Hw5CF8Lh/tvo4Zy9fWdifXL0Vz9WzI\n9tSbyIu1NTMDwtratRgYjsqrRAnBnWdAiE9N0dFUics1c7hMe1MFhjG7GqRvqo9QPER3Wl65DBdr\na7sZCA0wEcmr17TjJPKiK8O51dVciT8YZ8w/s+R92H+IKnc1bb62GcsTD2qH/c45twpxYon1MAKH\nBISODA1aE5EJBkKnWFu7LllvmbCuNvHUe/adiB1zBAQDg247WCZUuatpr+rgiL+HmOmMeX1ifj+G\n15uzDcHwesHlxhsLZ8yrCo+LloaKWQ2liRJAeskTUkpUS/Qm1zsUwuWC1sbZedvRNLvNZTwyzlBo\nkLU13bOvQzuvDi3RElUiHyQgnGGZnnoPZ6kCAWipbKXWU5tsY1hqegftp7gV+ZUQYmaUI/4e2qs6\nqHLPfqrurllPxIxwInCiJOmLDA0R6lu4aoJ4IJCzugis6kazshKfGc6YV2Dl18hElEBo+qk3WxWI\ntcx+6l2iN7kTQ0HaGzPP65+pW3MiHzJeh75Watw1S/bBLJEPXSuWxqA0cFhAOJHhREw8saUyDIO1\nNes4HR7hdHjpvXEtWULIUHdZ43PTWOuZ0fX0eOA4ETOSMa9g+mIuxZNcZHiYns98hp5/+Af8Bw7M\n+/syiQUCuGvym2o46qnEF89cQoDM3SkP+Q9S66mjpbJl1vZratbiwrUkb3ITgSjj/ljuvEo5tw7N\nETytKrZ1DIeHGIs4//WS6RLXoTQqn2GdGRr/Dk8ewoWL1TVrMu6zbgk/yfUOBWla5qWqMnNXt47m\nSgZOh5MvFprrKQ6mL+ZS5NXAQw8Rm5zEjEY59YMfzPv70pmmSczvz9l+kBB2VeIzQzNGdKdKNsLb\n59bp8GlOh0forunGMGZP0eVz++is7uJY4OiSm+wu16jbjA9m/oO4cLEmx3V4aAkG0N6hEM31XnwV\nS6PLKTgkIDTUeqiudCVP2Eg8wrHAUbqqV2adxC55k1tidb2hSJzBscic9ZadzZXETTg5YnUhnKsK\nBKCpool6bz2H/YfnNeWHGY0y+coreFesoPbiiwmdOEF4oLTveTZDIYjH86oyAgjgpdIM05nlKS5Z\nxWZXw+XKK7BKpVEzyvHAsUKSXvaSJc8s1WvL6zz4KlzJ0lQ4HuZ44Bgrq1dR4cq8T6JU2rPEAkIw\nHGNoLJKx8d3JHBEQDMOgs7mSvuEQ8bjJ8cAxomZ0Vo+ZVKuqV+MxPEuuaN83HMI0527ISu16apom\nh/2HWeZZRlNF5tG1iSq2scgoI+GRotMWeOMN4lNT1F50EbWbNgEw8fLLRX9fJjG/Ncgs3yqjibgX\nF1DnyTzzEd4jAAAXaklEQVQmJb0RPtE9N1ODckL3Eu3FlquEkOgCnrgOjwWOEjNjc+bVqprVVhXb\nEnswS4zXWEoNyuCQgABWxkeiJoNjkZSnuO6s23tdXlZWr+JE4Dih2NJ5CUrvHN0CE5JPvcMhRsLD\njEVG6a5dn7EKJGG6i2Dx1Ub+ffsAqL34Ymovvtha9lppR6rm2+UUrAF8o1GrZBCbzPy6zFZ7wFWi\nyujQ5EE8hodV1auzfm+yF9sS67SQz7nV1VxJKGIyPBHJOg4oVYWrgpXVqzgeOEY4Hs66ndMstUnt\nEhwTEDpSnnqnexhlL9aDdaLGiXM0cGShk3fG5HMipj71Hs7jiTd1/XyeeqcOHQLDoGrDBrwNDXhX\nrGDq4EHMeOlGquY7KA3g5OkwYy5ru+j4eMZt3G6DtuUV9A6FCMVCnAgcZ2X1qhmjudM1ViynwdvI\n4clDS2pW3d6hIJVe16wBfKlmnFtZxrakW1e7npgZ45j/aOkSu8hODFpdTpdSDyNwUEBInXfm8OQh\nGryNNFYsn3OfxMCipVS0T5yIcwaEptkXbfogq3Qrq1bhMTxF1/WasRhTPT1UdnbitgeEVW/YQDwQ\nINzfn2Pv/BVSZdQ7FGTCZW0XHc3ey6WzuZLJqRj7Rw4RJ54zeIIVQCeiEwyFl8Yb+uJxk96hEJ3N\nlXOWJKcbloP0+A/RWLGcxorGOb977RIcoCYlhEWW6CVy+HQ/E9HxvC7atUuwp1HvUAi3C9qWZz8R\nK70uWhq8yYDgMTysrF415/d6XB5W16zhxNQJgrHC350b6u3FDIWo6p6uxqtab5XgAm+8UfD3ZZMM\nCHmUEHqHQkwkSghjY1m3S1zUe4ZeB3IHTyhNiaqcDI9HCEXMnI2kibzqGelnMjqZHHw2l+kHs6Vz\nHZ4YCuFxG7Q2LJ0up+CggLDSflXksaA1CVs+F229t57mimYO+w8viQm24nGTI6eCdDRXJt/8lc2q\nFh8jAT+9UydYXbMGjyv3TOfdNeswMTlSxER3U4esG2PVuum/S9UGa7KzqYOluxFET1vjSjwNDTm3\n7TkZZNxtlxDmCAiJt10lnmDXztE2lZA4/5bKKNyek/m9+Sv5prlg/nnVUNHA8oomDi+Rie7icZOj\np5bOe5RTOSYgVFe66Wyq5LTLulmtq8v9ZAKwvu4cpmIBTkw5661gmfSPhJkKxVnfkfvpeF1HFVUr\n+jAxWZcyC+VcEjOf6gldcNoSN/1EqQCgsrMTV1UVUyUsIURGrF5Q3qbc7yM41BcgWJE7IKzrqAIj\nxrDZw4rKFuq9uYNNV3UXPpeP14vIq3J0qM9qm1nXWTXndjU+N23LKzjttq7D9fmeW7Ub8Mf8S2LC\nyb7hEMFw3DpvlhjHBASA7k4f3ubjVLtq6arK+bI1ADYuOxeAA+P7FzJpZ8RB+6Jdn8eJuK6jmqoW\nKwieu+y8vL5/fe05uA13Ue+SmDp0CFdVFRXt0y8lMlwuqtatI3zqVNZG3UIlAoJn+dztR+FInKOn\ngjR1WIFjroCwusVHzYoB4q5w3nnlNjxsqFMMhgYYDg3lmfrydbBvCsj33PLhWX6cGncdnVVdeX3/\nkroOe+286sxvLIyTOCogdHRN4Kny08zsCe2y2ViXOBGd/6KO6RMx90W7vrOKqtYTGHFv8i1Wufjc\nPtbWdHM8cIzJaP6zecYmJwmfPElVdzeGa+bfpdTVRtHhYVw1NcmG62yOnAoSi0PXquXgdhObIyB4\nPS5a11oN3xtqzs07LUvrJhegodYzZw+jhI6VE3iqAqww5+7KnCqRV4kXDzlZ4sFMSgiLzFxuN+Cd\nXpP3PnXeZayqXs0bE6876q1gmRw47scwoLs994loVJ2mYtlpIsNdc3ahTHd+/QWYmOwd3Zt7Y1ui\n0Ti1uiih2g4IpWhYNk2TyPAw3hylA4ADx6y/9fquGjz19XP2MgKobD2MGXfh9c/d+J4q8Ta1PWO7\n896nHI2MRxgYjbC+oyqvG3zyOhxdk/cx6r0NdFWt5I3J1wlEA0WmtDwcOB7Aled16DSOCggneRUz\n7uL4gfyKqQmXNGwiTpw9Dn5BejAc58CxAOs7qqityt1A/MroHwAYObKW/pH8B+Zd0mCNMN49mv8I\n48B+6wm5euPGWeuqurvBMErSjhAPBIgHg3m1H+w+ZA1Eu7i7Fm9zM5GRkeS7mNMNBE8RqhggcGol\nB3rynwJ8RWULnVVd7B9/jamYc29yrxy282pdXY4tLSeNfZgxF8cOdBZ0nEsaNxEzY+wb21NwGsvF\nVCjGgWN+1ndWL5nXZqZyTEA4GeznRPAYnonVHD5hMhHI/8L9o0brJvfiyAsLlbwF9+qRSaIxM6+L\n1jRNXhx5HsN0Eehbw+6DmUfpZtLia6WzqosD46/l/RIY//79GB7PjB5GCS6fj8pVqwgeOUI8PL+R\nqpHhYSB3g3IsbrL38CRtjRW0La/Et3IlmCah3swNmi+O7LJ+jxPrkoEkX5sa30TMjPGH06WdouNM\n2n3I+jtfsq4257b9U330BU/gnljDoeNxJqbyvw43Nb4JgF0jzxeX0DLw6hE/sXh+eeVEjgkITw/8\nDoANnksxTdil82+kbPG1sq52PfvHX2MgeGqhkrigEr9vPifiocmD9AX7UNUXE4/42KWz159n8tam\ny4maUXYOP5Nz28jwMKHjx6nasCHrC2tqNm7EjEbnPY1FsKcHYEbDdSb7j/mZDMa42M6rylVWNVDw\n2OzJ6GJmlGeGnsbn8tEcOY99PZP4g/m/i/uyprdgYPD04FOOHLUci5u89PoEdVVu1uZRBfL04FMA\nbPBchmnCSzr/tqZWXxtra7rZP/4ag6HSTnp4prxgX4f5lqacxhEBYTwyznPDz1LvbeA9G98KwBMv\nF/aegytXXG3td+rxkqdvoUWicZ585TT1NZ68TsRfn/oVANd3XcPaNh8vHBhndDL/J7m3NL+VClcl\nTw08mXMeqPEXrFLXsksvzbpNYt3Erl15pyGTwOvWwLFqpebc7omXrJ5IV15sjaD12QEhdHx21+MX\nhl9gLDLK5qa38vbzWwhHTZ7Zm//c/csrmrio4WKOB46hJxbm/Q8LaffBCYbHI1xxYQNu19ztB2OR\nMZ4b3kmDt5H3btwMwBMvFzYZ4pUtV2Ni8sRJ512H4Wicp3afpqHWw0XdUkKYQSl1v1Lq90qpZ5VS\nb05bt1Up9by9/p589pnLI70/IRQP8c62d7G6pYbzVtew+9AExwfyH1F7SeMm2nzt/H7oGcfNqbJj\n7yjj/hhXX9KYc0Daq2N72Te2lw2157C+7hze8ablxOLwy135d42scldzdcs1jEVGeezk9qzbmfE4\nY888A243dXMEBN+6dXiamph46SWiWSaZy0fg9ddxVVdT2Zm97np0MsrTe0ZZUe/lYvuirezsBLeb\ngNYznuID0QCP9v0Ur+Fla9t1XLtpOYYBP39uiHg8/6f969tuxMDgv0/8l+PekfCzndZ5sfVNuRvq\nH+n9CeF4iHe2v4vVrTVsXFnNywcnktOp5GNT45to9bXx7NAOx00f/vSeUSamYlzzR7mvQ6cqKiAo\npa4E1muttwC3A19P2+RrwE3A5cB1Sqlz89gno+eGd/Lc8O/prOribSveDsDNb2/BNOFffnaCWCy/\nC9dtuPmTlR/ExOTbh7/JcGg4r/0W27g/ynd+1Y/XY/CeLc1zbts31ct3e76D23DzgZUfxDAM3vGm\n5SyrcfNfTw0U1Lh8Xdu7aPQ28vjJX/Hy6RczbjO2cyeh3l7qN2/GU5e95GIYBsuvu454MMjwo4/m\nnYZUU4cOERkcpPqcc2Z1bU0wTZNvb+9lKhznA1e04LKfeF0VFdRdcgmhEyeS1U6hWIjv9GxjLDLK\ndW3vYnlFEy0NFVx5UQMH+6bY/kL+58eqmtVsaX4bfVO9PHD0e455N/Vz+8d44cA4F6yxbu5zeXLg\nNzw/vJOuqpVc3nwFMH0d/mtB16EneR3+26FvMhJ2xnU45o/yn4/1U+ExeM9b574OnSx3d5XMrgEe\nBtBaH1BKNSqlarXWk0qpbmBEa90LoJTaDlwLrMi2z1wH2t7/KCvam/mrdf8PbsNq1X/Lucu4TC3j\nBT3Ovd89zC1Xt9K1wseyanfyJpDJxmXn8ccd7+XRvkf4P/s/y5UtV7Nx2Xk0V6yg2lNNhSu/eUkS\nT5mJh83kpZD2Obmd/fOMz0x/h7Xc+pd4MA1F4ujjfr7/xElG/EFuuaqFxnqTYCxo72ttGI6HGQgO\n8OrYPn43+CTheIhbV/8FK6utgXu1VR7+8l2dfPXHx/jUtoN8+PoOzl9TQ2OtJ+N7cxN8bh9/te5j\n/PPrX+HfD29jz/JXuKRhE11VXfiCcSKvHODUAw9geL2suOmmnHlVf9XVnP71rxl57DEMn49ll1+B\np74ePJ4Z2wHEk/lrYsbjRAYGGPzudwGounYrk8HQjLyKmya9wyEe3TnE03tO093p4x2X1qbkFVS/\n/a1MvPQSx7777wz/6WZ+E32Bk9EBLqi/kOvbb0ge+yPv6mCXHucbPzvB6YkIb7+ogZaGiqxvp0u4\neeUHORE4zq6R5zkZ7Ofy5itYV7uBOk8d1Z7q5Lk7l/TzCnKfW6l5lVhvYk6fm2bcWmJOrxvzR3l+\n/xg//O1JvBVw+7tXEIqH7P3N5PaT0Un6pnp5fvj37Bl7hVpPHX+17mPJ32XL+fW8+Zw6Xnx9gs98\n7zAfvLqVrubc1+G5y87nxvb38Iv+n/F/Xvscb2+5mnOXnUdTRXMZXocxDhwP8P0n+hnxh/iza1qo\nXzb7OozGo3hcXqrczu6KahTTEKaU+hbwC631z+zPTwMf0VofVEptAf6X1vome91HgHVAc4Z9btda\nZ+yPqJRaA/R849JNtFfVYDD7BIvETMwCivbJbzDiGMaZawBciENl/U6DmXm1gA2dUTdsv97L0TX2\nzS55Ic78Wxn2isbTcW76aZjqqel1sQwxKfV3M8zpv9v+jS5+844in2FMk62/jrFRT8+lE3cbGW/U\nJhCNmRmzzszRT99wxRbmD77IXBi4Dc/scQomRGJxZs1wnkeNimHEweX8uY0SxhpdvPUL/4rHu7hT\nYp84cYJrr70WYK3W+kgh+xZbQkg3158/2zqDlKCeTVXHSny1mRtwKgF/MIZ/KkYkZhJLCQ7Z74N2\ncow4pjsE7jAYcfvfHMkxsJOberMFM+eJX2hdo5H8z2WAx+3C7Upbx3TmGYaB1/BS6fZR46nGyFAL\nmLiIQ5E4o5NRQpF42g0v8ZyULa0muMOYniC4ooQrDIaaPLy2oZbJWg/ugPUN0wEXZueVwbgPfvj+\nGOe+4ad1MIQvFMMTNVM3mbmPYX1LoMrD0ZU1vNFdh2fCYDrkTW9b4XGxrMZDY60XI+V3Tg2PAx+A\n6gNBWg75WRby4I7MvBnNLKXAuD9CMJySV6aZ+4QFMGLgDmG6I/Y5lePcKsjsv1F+Z9jMrdwuA4/b\nSPubzdzehQuvy4PPXUVllldkQsp1GIwRTVyHZh4XNwAmeEKYrjyvw4JkzplC88u6Dg1chpG+Krmt\nAVS1rsDtcfZ02MUGhD6gLeVzB5CY9L43bV2XvX14jn2yWvmJT9DVVdhANFHmrlvEY5+ziMcWoswV\n28voceBmAKXUJqBXa+0H0FofBZYppVYrpTzAjcBjc+0jhBBi8RVVQtBa71RKvaSUehaIAXcopW4D\nxrTWPwU+BvzI3vxBrfVB4GD6PiVIvxBCiBIpug1Ba3132qK9Ket2AFvy2EcIIUSZcMRIZSGEEAtP\nAoIQQghAAoIQQgibBAQhhBCABAQhhBA2CQhCCCEACQhCCCFsEhCEEEIAEhCEEELYJCAIIYQAJCAI\nIYSwSUAQQggBSEAQQghhk4AghBACkIAghBDCJgFBCCEEIAFBCCGETQKCEEIIQAKCEEIImwQEIYQQ\ngAQEIYQQNgkIQgghAPAUuoNSygv8J7AKiAEf1lr3pG1zK3AnEAe2aa2/o5TyAP8OdNvH/V9a62fn\nl3whhBClUkwJ4c+AEa31FcDngS+mrlRK1QB/D1wLXAV8UinVCPwPwG/vdzvw1XmkWwghRIkVExCu\nAR62f/4NcHna+s3ALq31hNY6CDxrb/MD4G/tbYaApiKOLYQQYoEUExDagEEArXUcMO3qoITWxHrb\nANCutY5orafsZf8v8EARxxZCCLFA5mxDUErdDvxl2uLNaZ+NHMeYsV4pdQdwCfDHOfZzA5w8eTLH\nZkIIIRJS7pnuQvedMyBorf8dqyE4SSn1H0A7sNduYDa01tGUTfqwShEJXcBOe9/bgRuB92mtYznS\n1g5w66235vFrCCGESNMOHCpkh4J7GQGPA39i///HwG/T1r8AfFspVY/VC2kL8AmlVDfwUeBKrXU4\nj+PsAq4A+u3vEUIIkZsbKxjsKnRHwzTNgnZQSrmAbwMbgCDwIa11r1LqU8DvtNbPKaU+ANwFmMDX\ntdY/Ukp9HrgFOJbydddprSOFJloIIUTpFRwQhBBCLE0yUlkIIQQgAUEIIYRNAoIQQgiguF5GC04p\ndT/WeAcTuFNr/eIiJwkApdRVwEPAPnvRHuDLWKOwXVg9ov5Hnr2oFoRS6iKskeRf1Vr/i1JqJfD9\n9PRlmm9qEdP4n8AmYNje5D6t9S8XM412Ou8D3oZ1nXwReJEyy8ss6XwvZZafSqlqrDnQWgAf8Fms\n66es8jNLOv+EMstPO61VWPei/43V23PeeVl2JQSl1JXAeq31Fqw5j76+yElK96TW+mr7351YJ8z/\n1Vq/HTgIfGSxEmafzF8BHsMKpmCdLDPSN8d8U4uVRhP4u5R8/eViptFO59XA+fZ5eD3wNeAfKaO8\nnCOdZZefwLuBF7TWVwF/CtxPGeZnlnSWY34C3IM1DRCU6Dovu4BAylxJWusDQKNSqnZxkzRD+sjs\nK4Gf2T8/Cmw9s8mZIYR1Qp9KWZYpfZeReb6pM53G1LxMz9dsc2KdKU9j3RAAxoAayi8vM6WzGqsf\nelnlp9b6v7TW/2R/XAUcx7pJlVV+ZkknlFl+KqU2AhuBX9iLSnJulmOVURvwUsrnQaxBFm8sTnJm\nMIHzlFKPAMuxonJNyliKRFoXhT36O6aUSl2cKX3J+ahsA5yhdGdJI8BfK6X+xk7LXy9mGiGZTr/9\n8XasC++d5ZSXWdK5HWsgZ1nlZ4JS6vdAB9ag1ifKLT8T0tL5N5Rffn4ZuAP4sP25JNd5OZYQ0hlM\nVy0stjeAz2it3wvchjWtR+p8IbnmdVps2dK32On+PvAprfW1wG7gM8z+my9KGpVS78W66P46bVVZ\n5aWdzo9g3STKNj/tqq33Mntyy7LKz5R0/gD4HmWUn0qpvwCe1lonBvmmH7vovCzHgJA+F1IHViPJ\notNa92mtH7J/PgycxKrSqrQ36cRKfzmZzJC+TPNN9Z7phCVorX+rtd5jf/wZcCFlkEal1DuBTwPv\n0lqPU6Z5aafzbuB6u3qg7PJTKfUmu4MDWutXsGonJpRSPnuTssjPLOncV2b5eQPwJ0qpnViTj95D\nifKyHAPC48DNAEqpTUCv1to/9y5nhlLqz5RS99o/twArgP/ATi/wAeCXi5S8VAbTTwNPMDt9zwOX\nKqXq7faZLcCORUgjAEqpHyulLrQ/XgnsXew02nNxfRm4UWs9ai8uu7xMSee7E+ksx/zEmpfsb+z0\ntWK1yTyBlY9QJvmZIZ21wLfKKT+11rdorS/TWr8Vaxqhz2K9m2beeVmWU1copb4IvB2rLvQOrfXe\nRU4SAHam/hCr/cCN1UtiN1aR0gccwXql6KJMxqeUegvwb1hd5qJY3eSux+pGNyN9meabWqQ0jgD3\nYj2JTwITdhqHFiuNdjr/p52u1+1FJvAhrAuwLPIySzrBekj5BOWVnz6sKtaVQBVWtctLZLh2yjCd\nfuCfKKP8TEnvvUAP1oP0vPOyLAOCEEKIM68cq4yEEEIsAgkIQgghAAkIQgghbBIQhBBCABIQhBBC\n2CQgCCGEACQgCCGEsElAEEIIAcD/D5Cfejv9wmLTAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos3 = predict_update(xs, pos1, velocity=15, measure=151)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After the predict step, our belief is still multimodal.\n", "\n", "Then I chose a measurement, 151, that's halfway between two modes. The result is bimodal (with the other two modes practically eliminated).\n", "\n", "If we perform one more step:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos5 = predict_update(xs, pos3, velocity=15, measure=185)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the posterior is unimodal again (and very close to Gaussian). In general, if the likelihood function is Gaussian, the result will converge to Gaussian over time, regardless of the initial distribution." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }