PEP-8 compliance, better variable names.

This commit is contained in:
Roger Labbe committed 2014-12-01 09:13:43 -08:00
1 parent 6e73cd9786
commit 5f1cc41067
1 file changed
+195 -187
+195 -187
View File
@@ -1,7 +1,7 @@
{
"metadata": {
"name": "",
"signature": "sha256:a7ff3c98bbd62de00e4ac578a1ebc6606df5c76dd2d2e757a71b513d92a423c5"
"signature": "sha256:83a0cc97c2553a428390210b3c7ca528383ef83c162d206cb853248bfe8bc04e"
},
"nbformat": 3,
"nbformat_minor": 0,
@@ -259,7 +259,7 @@
"output_type": "pyout",
"prompt_number": 1,
"text": [
"<IPython.core.display.HTML at 0x7f167808a978>"
"<IPython.core.display.HTML at 0x7fce9a598978>"
]
}
],
@@ -319,7 +319,7 @@
" self.velocity = velocity\n",
" self.noise = math.sqrt(variance)\n",
"\n",
" def sense(self):\n",
" def sense_position(self):\n",
" self.x = self.x + self.velocity\n",
" return self.x + random.randn() * self.noise"
],
@@ -332,7 +332,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The constructor `_init()__` initializes the DogSensor class with an initial position `x0`, velocity `vel`, and an noise scaling factor. The `sense()` function has the dog move by the set velocity and returns its new position, with noise added. If you look at the code for `sense()` you will see a call to `numpy.random.randn()`. This returns a number sampled from a normal distribution with a mean of 0.0. and a standard deviation of 1.0. *Variance* is defined as the standard deviation squared, so in `__init()__` we take the square root of the variance to get the standard deviation. Therefore the expression `self.x + random.randn() * self.noise` computes a number with the variance that we desire. \n",
"The constructor `_init()__` initializes the DogSensor class with an initial position `x0`, velocity `vel`, and an noise scaling factor. The `sense_position()` function has the dog move by the set velocity and returns its new position, with noise added. If you look at the code for `sense_position()` you will see a call to `numpy.random.randn()`. This returns a number sampled from a normal distribution with a mean of 0.0. and a standard deviation of 1.0. *Variance* is defined as the standard deviation squared, so in `__init()__` we take the square root of the variance to get the standard deviation. Therefore the expression `self.x + random.randn() * self.noise` computes a number with the variance that we desire. \n",
"\n",
"Let's look at some example output for that."
]
@@ -342,7 +342,7 @@
"collapsed": false,
"input": [
"for i in range(20):\n",
" print('{: 5.4f}'.format(random.randn()),end='\\t')\n",
" print('{: 5.4f}'.format(random.randn()), end='\\t')\n",
" if (i+1) % 5 == 0:\n",
" print ('')"
],
@@ -353,10 +353,10 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"-0.2367\t 0.2690\t 0.2938\t 1.7591\t-0.3278\t\n",
"-0.3011\t-0.2756\t-1.0273\t-0.4946\t 1.4776\t\n",
" 1.7101\t-0.7903\t-1.3902\t 0.1243\t-1.4785\t\n",
" 0.3633\t-2.3127\t-0.5851\t-1.6827\t-1.1897\t\n"
" 1.2921\t 0.1444\t 0.7473\t 0.3516\t 0.4305\t\n",
" 1.8350\t-0.1108\t-0.1800\t 0.3818\t-0.2313\t\n",
"-0.2557\t 1.3211\t 0.1475\t 0.9038\t-0.1875\t\n",
"-0.3380\t-1.1683\t 0.6501\t-1.3499\t-0.9251\t\n"
]
}
],
@@ -378,10 +378,10 @@
"import matplotlib.pyplot as plt\n",
"import matplotlib.pylab as pylab\n",
"\n",
"dog = DogSensor (variance=0.0)\n",
"dog = DogSensor(variance=0.0)\n",
"xs = []\n",
"for i in range(10):\n",
" x = dog.sense()\n",
" x = dog.sense_position()\n",
" xs.append(x)\n",
" print(\"%.4f\" % x, end=' '),\n",
"plt.plot(xs, label='dog position')\n",
@@ -401,9 +401,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/nM5nU5J0syZMzV69Gh9/fXX6ty5s9577z3l5OTo4YcfliT94he/0EcffaTFixf7w/fYsWPq1KmT\nbr31VkmX36h3tdTUVEmS3W6/5r64uDilp6fr0qVLkqSUlBSlp6dfs11ycrKSk5OVlJRU4+kQy5cv\nV9u2bfXCCy9Iktq3b68dO3ZoyZIl1cI3NzdXY8eOlSQ99thj2rBhg44ePaquXbsanBgAAKhPtASv\nj+XDN9gjs+FQVlamsrIyZWVl+W/r1q1btW0OHz4sSbr55pv9t/m+PnTokDp16qRDhw4pNzfXf39S\nUpLatWsX0JquXIsv/g4fPqzOnTvr8OHD1fbjW8v27dv9348fP16PPfaYhg4dqjvvvFP9+vXTPffc\n0+ifenb48GFlZ2dfs9bNmzdXu61Dhw7+r1NSUiRd/nsBAADBi7bg9bF8+FpRqGKwpuep701hDXku\nI/f5DB06VJ999pk+/vhjffLJJ3riiSc0evTooC9b1lA2m83QDOLjr33pBjo7AABwWbQGr09kr94k\nLVq0UFpamr766iv/bfv27au2je/I7d69e/23+b5u3769pMtHLb/88kv//eXl5f4jxQ115Vr2799f\nbQ3t2rWrth/fWnzr8ElLS9O9997rP2d206ZNDV5HQkKCJKmysrLebWsK8nbt2lX7s9S2VgAAEDqR\n/qY1ozjiG6AJEyZo4cKF6tmzp1JTU/Wb3/ym2v1ZWVnq3bu3Zs2apXnz5snr9WrWrFnq27evOnfu\nLEl68MEH9cADD2jx4sXKycnRokWL5Ha7A1rP4sWL1aNHD6WnpysvL0933HGHunTp4t/PT3/6Uy1a\ntEgDBgxQfn6+duzYodWrV/sf/9prr6lbt27KysrSxYsXtXXrVnXv3t1/f3l5ub799ltJl6P2woUL\n/itUtGzZ0r9dy5YtlZycrI0bN6pHjx5KSkpSUlKSbDabqqqq/G9oKy8vV0VFhc6cOSOv16vU1FQl\nJCRo/PjxWrhwoebOnat/+Zd/0a5du7R+/XrNmzev2p+Xo7sAAAQv2o/wXo3wDdCUKVN0+vRpPfzw\nw2rWrJmeffZZ7dy5s9o2f/jDH/Tiiy/635TldDqrBXK/fv300ksv6fe//73mzZunCRMmqGfPnkpM\nTGzweh566CHNmDFDx48f1+23317tcmN33XWX5s6dq7feekt5eXlq3bq1FixYUO0DJpKSkrRgwQId\nO3ZMTZs2VZ8+fTR79mz//evXr9czzzwj6fKR2rfffltvv/22bDabXC6Xf7u4uDgtWLBAr7zyim65\n5Ra53W7/h1mcOHHCf7kz3/P06tVLNptNq1atUp8+fdSxY0f98Y9/1IIFC/Sf//mfSk9P15QpU3T/\n/fdX+/NefbS4sc9FBgAgksVa8PrYiouLw3bozOVyXfNGpSudOXNGGRkZ4dp9ROrdu7ceeughTZ48\n2dD2Rj8pLZbF4uvM4XBIkkpKSkxeibUxJ2OYk3HMyhjmZFyoZxWtwetwOFRUVKTMzMw6t+OIr8le\nffVVDRkyRC1atNCaNWtUUlKi0aNHm70sAAAQRaI1eBuK8DXZF198ocWLF6uiokJdu3bVe++9V+M1\ndOvCr/kBAEBNCN7qCF+TLV26NKjHZ2ZmVjvHFgAAgOCtGeELAAAQJQjeuhG+AAAAEY7gNcbU8PV6\nvfJ6vZyjirCpqqrimr8AgKhF8DZMUOH7+eef6+WXX9bRo0fVvn17zZkzR1lZWYYfn5ycrPPnzysl\nJSWYZQA1qqqq0unTp/2XggEAIFoQvIEJOHwrKir01FNP6bnnntOoUaP0xz/+UVOmTNGWLVsMP8d1\n113n//SuWBYff/mvwcjH/Mayhs7J6/XK4XD4P0YZAIBIR/AGJ+DwPXTokC5duuS/5uzPf/5z/e53\nv9Nf//pX/0flGsHRXi7kbRRzAgDEKoI3NEJ2jq/vXN1jx441KHwBAABQswq3R8vy92ru+x8TvCEQ\ncPh26NBBTZs21YcffqgRI0Zo0aJFstvtunTpUrXtOL+yfr5fxTOrujEn45iVMczJGOZkHLMyhjnV\nzxe8r6xcpSMnyyRJWTc5NH18f43NyZLdTvBeyehpjQGHb2Jion73u9/pN7/5jebNm6cRI0aoTZs2\nSk5OrrZdXl6e/2un06nc3NxAdwkAABDVfME7f8V2HT11XpKUfVO6po3vR/BepaCgQIWFhZIku90u\np9NZ72NsxcXFIbnWU2lpqXJzc7V582bdeOONkiSXy6Xs7OxQPH1U49xVY5iTcczKGOZkDHMyjlkZ\nw5yuVds5vDMedGpsTpbKykpNXqG1ORwOFRUVKTMzs87tgjrH99ChQ2rTpo0uXbqkvLw89enTxx+9\nAAAAqFt9b1prmZFh8gqjS1Dhm5+fr4ULF6qyslJOp1OvvPJKqNYFAAAQtbhKgzmCCt9JkyLine truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAAF2CAYAAACI1JsxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VIW5x/HfMA4hiBAyECogW1kSjFJ5LBJjJkpu+9AK\nCLIpGqRQa+XCRcUFURRv9IIs4k5dAoiUarEiXrWtEmlCBCoKlUY2EQQE2VICQoCZJHP/sDOXQJI5\nmSXnzMz38zx9niRzZublddp+GU/O2Lxer1cAAABAjGtk9gAAAABAQyB8AQAAEBcIXwAAAMQFwhcA\nAABxgfAFAABAXCB8AQAAEBcIXwAAAMSFOsN3xYoVysjIUJMmTfSrX/3K/3OPx6Nx48apefPm6tix\no5YtWxbxQQEAAIBQXFDXjUlJSbr//vu1cuVKlZeX+38+b948ffnll/r222+1ceNGDRgwQBkZGWrf\nvn3EBwYAAACCUec7vtnZ2RoyZIiSk5Or/XzZsmX6r//6LzVv3lzZ2dnKyMjQ8uXLIzooAAAAEIo6\n3/H1OfdTjbdv364ePXro1ltv1cCBA9WzZ09t27YtIgMCAAAA4WDol9tsNlu170+ePKlmzZqppKRE\n+/fv10UXXaQTJ05EZEAAAAAgHIJ6x/fCCy/UyZMn9Y9//EOSNGnSJF100UXn3a+goCAMIwIAAACB\n5eTk1Hm7ofA99x3f7t27a8uWLerdu7ckafPmzbrhhhtqvG9aWpqRp4hrTqdTb7/9trKzs80exdLY\nk3Hsyhj2ZAx7Mo5dGcOejGNX1bkrKvXW6q/07IqN2nv4h7MNurVN0sO5LrVz/Cvg/esM36qqKrnd\nblVUVKiyslJnzpyR3W7XiBEj9Oyzz2rAgAHauHGj1q1bp0WLFoXlDwQAAACcrbbgvfvG3hpwVWel\ntG6t4uLigI9TZ/guXrxYY8eO9X+/ZMkSTZ8+XVOnTtXWrVt1ySWXqGXLllqwYIHatWsX4h8JAAAA\n+H+BgtfeqH6fxVZn+I4ZM0Zjxoyp8bb8/Hzl5+fX68lQO04JMYY9GceujGFPxrAn49iVMezJuHjc\nVbiD18fQOb6IvLS0NJWWlpo9huWxJ+PYlTHsyRj2ZBy7MoY9GRdPu4pU8PoQvgAAADBVpIPXx/Tw\nLSsrk8fjMXsMUx09elSSVFFRYfIk1lbfPXm9XrVs2VIOhyOSYwEAgCA1VPD6mBq+5eXlkqTWrVub\nOQZiVFVVlQ4dOiSn00n8AgBgIQ0dvD6mhu+JEyeIXkRMo0aNlJKSoiNHjiglJcXscQAAiHtmBa+P\nqeFrs9nO+3AMIJwaNWrEawwAAJOZHbw+pp/jCwAAgNhkleD1IXwBAAAQVlYLXh/CFwAAAGFh1eD1\nMffZY0z79u21bNkys8eIuL59+2revHkhPcZdd92lYcOGhWkiAABgJndFpZau2irXvX/Ufa+u1t7D\nJ9StbZJenNBPBU8O1Q0ZPzY9eiXe8UUQPvjgAyUmJtZ42969e5WRkaG33npLffv2rfUxHn/8cVVW\nVkZqRAAA0ACs/g7vuQhf1FtycnLAY7xeb523N2vWLFzjAACABhZtwetjzamiwOnTp3XvvfeqR48e\n6t27t/7whz+cd8x3332ncePGqUePHurRo4duv/12HTp0qNox+fn5uuKKK9SjRw89+uijGjp0qO6+\n+27Dc+zdu1ft27fXiy++qOuuu04//vGPddNNN2nfvn3Vjvv973+vzMxMde7cWddcc43efPPNarcf\nP35cEydOVK9evdS1a1f169dPy5cvr3aMy+VS+/bt1b59ez311FM1zpGRkSFJGj58uP/YdevW+Y97\n4IEH/D+v7VSHv/71r8rJyVGXLl3Up08fvfDCC9VuHzZsmB5//HFNnDhR3bt3V0ZGhv76178a3hkA\nAAhOtJzSUBvLv+Pb7pZXIvK4+35/e0j3f/rpp1VQUKAFCxYoKSlJU6dOPe+YCRMm6PTp03rrrbfk\n9Xp1//33a8KECfrjH/8oSfrkk0/02GOP6b//+7/lcrn0yiuv6PPPP1fHjh3rPU9+fr7mzZun1q1b\n68EHH9TEiRP19ttv+59nypQpmj59uvr166eVK1fq3nvvVadOnXTVVVdJkubMmaP169dr4cKFSklJ\n0bZt2/yfrOezYsUKVVRU6Je//OV518Zt166d/vGPf2jfvn26/vrr9eqrr+rKK6+UJLVo0cJ/3LRp\n03TvvffqkUce0ZEjR877c+zcuVO/+c1vdOedd2rkyJH6/PPP9cADD6hNmzbVQnnp0qXKy8vT5MmT\nNWvWLE2ePFnZ2dlq0qRJvXcHAADqFq3v8J7L8uFrVUuWLNH48eOVmZkpSXr44Yc1ZMgQ/+3btm3T\n3//+d73zzju67LLLJEmPPfaYhg4dqh07dqhr165avHixsrKyNGbMGEnS9OnTtWLFiqDmGTt2rFwu\nlyTpkUce0aBBg/TVV1+pW7dueu2115SVlaVx48ZJkm6//XZ99NFHWrhwoT989+zZo65du6p3796S\nfvhFvXO1bNlSkmS328+7rVGjRmrVqpVOnTolSUpKSlKrVq3OO65Zs2Zq1qyZEhISajwd4ve//706\nduyoKVOmSJI6d+6stWvXatGiRdXCNzs7W0OHDpUk3XnnnXr33Xe1e/du9ejRw+DGAABAILESvD6W\nD99Q35mNhLKyMpWVlSk1NdX/s549e1Y7ZteuXZKkSy+91P8z39c7d+5U165dtXPnTmVnZ/tvT0hI\nUKdOnYKa6exZfPG3a9cudevWTbt27ar2PL5Z1qxZ4/9+1KhRuvPOO/Xzn/9cV111la6++mr179+/\nwT/1bNeuXUpLSztv1r/85S/VftalSxf/10lJSZJ++OcCAABCF2vB62P58LWicMVgTY8T6JfC6vNY\nRm7z+fnPf67169dr9erV+uSTTzRhwgQNGjQo5MuW1ZfNZjO0gwsuOP+lG+zuAADAD2I1eH2ie3qT\ntGjRQsnJydqyZYv/Z5s3b652jO+d25KSEv/PfF937txZ0g/vWn755Zf+20+fPu1/p7i+zp5l69at\n1Wbo1KlTtefxzeKbwyc5OVk33HCD/5zZDz74oN5zOBwOSVJFRUXAY2sK8k6dOlX7s9Q2KwAACJ9o\n/6U1o3jHN0i5ubl69dVX1atXL7Vs2VJPPPFEtdtTU1PVp08fPfroo5o5c6a8Xq8effRRZWRkqFu3\nbpKk0aNHa+TIkVq4cKGysrKUn58vj8cT1DwLFy7UZZddplatWikvL08//elP1b17d//z3HzzzcrP\nz9d1112nlStXau3atXrrrbf89587d6569uyp1NRUnTx5Uh9++KHS09P9t58+fVrHjx+X9EPUnjhx\nwn+FipSUFP9xKSkpatasmd5//31ddtllSkhIUEJCgmw2m6qqqvy/0Hb69Gm53W4dPnxYXq9XLVu2\nlMPh0KhRo/Tqq69qxowZGjFihDZs2KAVK1Zo5syZ1f68vLsLAEDoYv0d3nMRvkGaNGmSDh06pHHj\nxunCCy/Ufffdp88//7zaMc8//7wefvhh/y9luVyuaoF89dVX67HHHtOzzz6rmTNnKjc3V7169VLj\nxo3rPc+YMWM0bdo0ffvtt7ryyiurXW7smmuu0YwZMzR//nzl5eWpXbt2mj17drUPmEhISNDs2bO1\nZ88eJSYmqm/fvpo+fbr/9hUrVmjy5MmSfnin9qWXXtJLL70km82mvXv3+o9r1KiRZs+erVmzZukn\nP/mJPB6P/8Ms9u3b57/cme9xrrjiCtlsNi1btkx9+/bVj3/8Y/3ud7/T7Nmz9fLLL6tVq1aaNGmS\nhg8fXu3Pe+67xQ19LjIAANEs3oLXx+aN4FtnBQUF5/2i0tkOHz6s1q1bR+rpo1KfPn00ZswYjR8/\n3tDxRj8pLZ7F4+vM6XRKkkpLS02exNrYkzHsyTh2ZQx7Mi7cu4rV4HU6nSouLlZOTk6dx/GOr8nm\nzJmjn/3sZ2rRooX+9Kc/qbS0VIMGDTJ7LAAAEENiNXjri/A12RdffKGFCxfK7XarR48eeu2112q8\nhm5d+Nf8AACgJgRvdYSvyV5//fWQ7n/JJZdUO8cWAACA4K0Z4QsAABAjCN66Eb4AAABRjuA1xtTw\n9Xq98nq9nKOKiKmqquKavwCAmEXw1k9I4VtcXKyJEydqx44d6tGjh/Lz89WrVy/D92/WrJmOHTum\npKSkUMYAalRVVaVDhw75LwUDAECsIHiDE3T4njlzRsOHD9ecOXM0atQo/c///I+GDx+u7du3G36M\npk2b+j+9K55dcMEP/xiMfMxvPKvvnrxer5xOp/9jlAEAiHYEb2iCDt9t27apvLxct9xyiyRp8uTJ\nmjZtmkpKSqp91G0gvNvLhbyNYk8AgHhF8IZH0OF77nmTvnN1d+zYUa/wBQAAQM3cnkotWVmiGUtX\nE7xhEHT4pqam6sILL9Trr7+um266SXPmzJHdbld5eXm14zi/MjDfv4pnV3VjT8axK2PYkzHsyTh2\nZQx7CswXvLPeXKZvDpRJklI7ODV1VKaGZqXKbid4z2b0tMagwzchIUHLli3TpEmTdM899+imm25S\nly5d1Lx582rH5eXl+b92uVzKzs4O9ikBAABimi94n3xjjXYfPCZJSuvQSg+OuprgPUdhYaGKiook\nSXa7XS6XK+B9bN4wXeuptLRU7du317Zt29ShQwdJUkFBgdLS0sLx8DGNc1eNYU/GsStj2JMx7Mk4\ndmUMezpfbefwThvt0tCsVJWVHTV5QmtzOp0qLi5WTk5OnceFdDmzbdu2qVOnTiovL9eECRPUr18/\nf/QCAACgboF+aS2ldWuTJ4wtIYXv8uXLNWvWLFVUVOgXv/iFXn/99XDNBQAAELO4SoM5QgLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1669269240>"
"<matplotlib.figure.Figure at 0x7fce7e0e9978>"
]
}
],
@@ -427,10 +427,11 @@
"\n",
" xs = []\n",
" for i in range(100):\n",
" x = dog.sense()\n",
" x = dog.sense_position()\n",
" xs.append(x)\n",
"\n",
" plt.plot(xs, label='sensor')\n",
" plt.plot([0,99],[1,100], 'r--', label='actual')\n",
" plt.plot([0, 99], [1, 100], 'r--', label='actual')\n",
" plt.xlabel('time')\n",
" plt.ylabel('pos')\n",
" plt.ylim([0,100])\n",
@@ -446,9 +447,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAGWCAYAAAA5TTZIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xdc1WX/x/HXOYe9EbeiAqaiuHdu06LUXIm37a0/79LU\nsl2mZd2VUmTepplpZpqDxm02NPdOxYUrB+JCBFRkc8739wd5ksQNHJT38/HgIec7rvP5wveBby6u\n73WZDMMwEBERERGRYmF2dAEiIiIiIqWJAriIiIiISDFSABcRERERKUYK4CIiIiIixUgBXERERESk\nGCmAi4iIiIgUIwVwEZFisGzZMsxmMytWrHB0KSIi4mAK4CIixcRkMjm6hFvG/PnzMZvNBAYG3lA7\nCQkJPPDAA/j7++Pj48O9997LwYMHC6lKEZGCmbQQj4hI0TMMg5ycHJydnRXEb1BmZiahoaEcP36c\n8uXLc/jw4etqJzs7m+bNm3P48GFGjhyJm5sbH374Ic7OzsTExODn51fIlYuI5HFydAEiIqWByWTC\nxcXF0WXcEj744APKli1L9erV2b9//3W3M2vWLLZv3868efPo06cPALfffjutW7fm008/5dVXXy2s\nkkVE8tEQFBG5ZWVkZODt7c2TTz550b41a9ZgNpuZPn26fdv06dMJDw+nSpUquLm5UaNGDZ577jlO\nnz590fnnx3QvX76cyMhIgoODcXd3p1atWvz888/247p3747ZbLZ/LF++vMBaf/zxR3r37k316tVx\nc3OjcuXKPP744xw9ejTfcaNGjcJsNrN//366du2Kl5cXtWrV4quvviqw3WPHjjFw4EACAwNxd3fn\ntttuY+TIkZw7dy7fcRs2bCA8PBw/Pz88PT3p3LkzGzduvPQX10GOHDnCf/7zHz788EPgxob1fP/9\n9/j7+9O7d2/7tpYtW1K3bl2io6NvuFYRkUtRD7iI3LLc3d3p0aMH33//PZ999hkWi8W+b968ebi4\nuOQLX+PGjaNy5co8//zz+Pr6snXrViZNmsSGDRtYs2ZNge/x0UcfsWXLFh5//HEqVKjApk2bOHTo\nkH3/Cy+8wP33309sbCxjx469ZGCcPHkyycnJDB48mAoVKrB3714mTpzIsmXL2LVrF66urvmO79Wr\nF/fccw99+vTh888/59FHH6Vhw4Y0aNDAfsyxY8do0aIFycnJPP3009SvX5/jx4/z5Zdf8uCDD9qP\n/f3337n77rsJDQ1l1KhRmEwmvvjiCzp27MiGDRuoV6/eNX3dU1JSsFqtlz2mbNmy19TmeS+88AKd\nO3emQ4cO13X+hbZt20b9+vUv+p40atSIefPm3XD7IiKXZIiI3MKio6MNk8lkLF68ON/2atWqGd27\nd8+37dixYxedP2rUKMNkMhkbNmzIt33p0qWGyWQyAgMDjdOnT+fbZ7VaL2rn/PHLly8vsM6jR49e\ntO3LL780TCaT8e2339q3vfnmm4bJZDKioqLs2+Li4gyz2WyMGTMm3/kPP/ywYTKZjJUrV+bbnpGR\nYZw5c8Zea82aNY0GDRoY2dnZ9mPOnDljlCtXzujfv3+B9V5O9erVDZPJdMkPs9l8zW0ahmGsXLnS\ncHJyMmJjYw3DMIwOHToYgYGB19WWYRiGu7u7ERERYRiGYYSHhxvBwcFGYmKiMXz4cMNkMhlJSUnX\n3baIyOWoB1xEbml333033t7ezJ8/nzvuuAPIG24RHx/P22+/ne/YSpUq2T9PTU0lKyuL0NBQAP78\n80+aN29+UfuDBw/G19c33zaz+dpH91WuXNn+eVpaGhkZGdSqVcv+3v9033332T+vVq0aAQEBHDly\nxL7NZrMRHR1N586dadu2bb5z3dzccHNzA2DLli3s37+f0aNHc+bMmXzHNWrU6JJDZi5n1qxZZGZm\nXvN5l2Oz2RgyZAiPP/64/Xtyo7Kysuzj8g8cOEBCQgJpaWn2vzZkZGQUyvuIiPyTAriI3NJcXV3p\n0aMH0dHRTJw4EcgbfuLq6kqvXr3yHbt582ZGjRrFihUrOHv2bL59lwqUdevWLZQ6//zzT0aNGsWi\nRYtISUm54ntf+MsCgKenJ9nZ2fbXiYmJnDt37or1nQ/3b7zxBm+88cZF+y8ctnO1br/99ms+50o+\n//xz9u3bx6JFiwqtTTc3N/vXLCYmhqysLPz8/MjKygLyhjCJiBQFBXARueVFREQwa9YsVq1aRdu2\nbZk/fz533nkn3t7e9mPi4uJo164d1atXZ+zYsQQHB+Pi4sKmTZt48cUXMS4xY2thTFWXmppKu3bt\ncHJy4pVXXqFOnTq4u7tz9OhRHnnkkUu+d2EaPXp0oQXnxMTEK44Br1ix4lW3l52dzWuvvcZDDz1E\nTk6Ovac/KyuL3Nxcjh49ire3Nz4+PtdUZ6VKlUhISADywvb5wJ2QkICrqyv+/v7X1J6IyNVSABeR\nW95dd92Fj48P8+bNw8PDg4MHDzJ69Oh8x3z33XdkZGTw008/UaNGDfv24liU5ffffychIYHff/+d\njh072rcvWbLkutssV64c3t7e7Ny587LHhYSEANhnPikM5+fWvhSTyXTFgH6h9PR0Tp06xaRJk5g0\nadJF+wMDA3nuuecYP378NdUZFhbGihUrMAwj34OYW7ZsoV69epqvXUSKjAK4iNzyXF1duffee1mw\nYAHu7u64urrSs2fPfMecH2px4ZCLnJwc+7CVolTQexuGQVRU1HW3aTab6d27NzNmzGDlypW0a9fO\nvi8zM5OcnBy8vb1p2rQpQUFBfPLJJzz11FN4eXnlayc+Pv6aV5ss7DHg3t7e/Pjjj/kCsWEYvPzy\nyxw/fpzp06cTHBx80XnR0dG8/PLLtGzZMt90k+f16tWLH374gQULFtC3b18A1q1bx65duy76BU1E\npDApgItIqRAREcHMmTP59NNPCQ8Pvyho3n333bi5udGjRw+eeuopMjMz+frrr8nNzb3u9zxw4IB9\n+sJdu3YB8Ouvv9p7h9u0aUNQUBBt27alXLlyPProozzzzDNYLBaio6NJSkq66vcqaJjKu+++y5Il\nS7jzzjsZOHAgYWFhJCQkMGPGDObOnUuDBg0wmUx89tlndO/enfr16/PYY49RsWJFDhw4wE8//UTT\npk2ZNm3aNV13YY8Bt1gsdOvW7aLtH3zwASkpKdxzzz0FnnfmzBn27t2b7wHXCz3wwAOMHz+eJ554\ngr179+Lm5sYHH3xAYGAgzz77bKFeg4jIhRTARaRUuOuuu/D19eXs2bNERERctD8kJIQff/yRV155\nhRdffBE/Pz/uv/9+7rrrLrp27Vpgm1caorBixQoef/zxfMePHTvW/vm0adMICgrCz8+Pn3/+mREj\nRvDmm2/aHxCdMGEC9evXv+g9C3rfgrZVqlSJDRs2MGrUKObPn8+kSZMIDAykd+/e+XqMu3TpwqpV\nqxgzZgwff/wx6enpBAYG0q5dOwYOHHjZa3SkS30tLtx/Oc7Ozvz2228MGzaM999/H6vVSseOHfno\no48umtlGRKQwmYzieLqHvBXH3nvvPbZs2cKAAQPsPSo5OTkMGjSIuXPn4u/vz4cffki/fv3s50VF\nRTF27Fiys7MZNGiQ/T8vEREREZGbUbH1gPv5+TFy5EgWL15Menq6fXtkZCQ7d+7kyJEjbNmyhe7d\nu9O6dWuqVq3K+vXreeutt1i1ahW+vr60bduWxo0b5wvoIiIiIiI3k2tfLeI6dejQgd69e1OmTJl8\n2+fOncuQIUPw8fGhQ4cOtG7dmujoaCBvrt6+ffsSGhpK5cqVefLJJ5k9e3ZxlSwiIiIiUuiKfQz4\nP0e87N27l9q1a/Pggw/So0cP6taty549e+z72rdvz8cff0x8fDxt27Zl1qxZxV2yiIiIiEihKbYe\n8PP++VBMWloaXl5e7Nixg2PHjuHt7c25c+fy7Ttw4AB//vlnvn0iIiIiIjcjh/eAe3p6kpaWRkxM\nDABDhw61r07n6enJuXPn+Pjjj4G8OV3/OXXYeTeyYIWIiIiIyNW64447buj8Yg/g/+wBr1WrFrt2\n7aJJkyYAxMbG2hfIqFWrFrt377YfGxsbS506dS7ZdmhoaBFULDergIAAFixYQIcOHRxdipQQuiek\nILovpCC6LxwjOTUTq81GOV+PQmvz4IkzPDdpOX/sSwDg4S6hvDagJZ5uzlgOHcI7Kgr3efPIbtWK\npG+/vWxbAQEBrFq16oZrKrYhKDabjczMTHJzc7FarWRlZZGbm0tERARRUVGcOXOGZcuWsW7dOnr3\n7g1Av379WLBgAbGxsRw9epQvvviC/v37F1fJIiIiIlJMcnJthL8aTceR80hISb/yCVdhweo/6frK\nAv7Yl0BFfw++fjGcdx9ri8+Jo/gNH0759u3xmDMHAGuVKpCVVSjveyXF1gM+Y8aMfAtSzJw5k1Gj\nRvHKK6+we/duAgMD8ff354svvqBKlSoAtGjRgjfffJNOnTrZ5wvXFIQiIiIit541scc4mpT3rN/7\nczcy7ukb++tDQko6L0xZQWaOlT5tajLmkdvx83SFnBzK9uqFJTERw2IhPSKC1CFDsAYFFcZlXJVi\nW4inqC1ZskRDUCSfgIAAdu3aRfny5R1dipQQuiekILovpCC6L4rfyKkr+fr3vKHHJhMsGtOb+kFl\nr7u9UTPXMmXRDu5uVoPPh+Vf0dhz0iSc9+y55uB9fgjKjY4BL/ZZUESKk34pk3/SPSEF0X0hBdF9\nUXxyrTZ+/uMQAJ0bBmIY8MZXay6avONqJZ5J56slu3CyWXmud5OL9qcNGsTpyMhi7fW+kAK4iIiI\niDjU+t0nSDqbSVBFHz59pjMBPm5s2JPA/zYcvK725k3/jU+3zSd29wzCqvkXcrU3rthnQXLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668dae2e8>"
"<matplotlib.figure.Figure at 0x7fce7dc2d3c8>"
]
}
],
@@ -480,9 +481,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668f914a8>"
"<matplotlib.figure.Figure at 0x7fce7e0e9278>"
]
}
],
@@ -500,9 +501,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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\nq1Z4eXmxdOlS3N3dOXLkCMOGDct3zIoVK8jKymLatGmEhobmbT9y5EiR59uwYQOnT59mxowZNGvW\nLG/7+vXrr/uc/v7+eHp6sn///r89LiwsDLg4HvrPY+RvxN13313oY8Br1qyJ3W5n79691KlTJ2/7\npQVzrvVB0SsxDINjx44V2k82REQKogIuIjc9FxcXYmNjWb58OW5ubri4uNCuXbt8x1waavHnIRdW\nq5WvvvqqyPMV9N6GYfD5559f9znNZjMdOnRgwYIFeXf+L8nOzsZqteLl5UXdunUJDQ1l5syZ9O7d\nG09Pz3znOX78OCEhIdf03kUxBjw2NpbXXnuN+fPn5xXw8+fPs2TJEpo2bXrZOHyA5cuX89Zbb9Gg\nQQNee+21y/afOXPmstlY5s+fT2pqKq1bty7U/CIif6YCLiJlQufOnfnuu+/48ssvadWq1WVFs3Xr\n1ri6ujJ48GD69OlDdnY2ixYtIjc397rfMykpiS1btgBw8OBBANauXZt3d7hhw4aEhYXRqFEj/P39\nGT16NPfffz9ms5nly5ff8DCIkSNHsn79eh5++GHuueceatSowenTp1mwYAHvvPMOtWrVwmQyMX78\neAYNGkT37t256667qFChAklJSaxatYq6devyyiuvXNP7FsUY8LCwMO6++25mzZqFyWSievXqzJs3\nj/T0dP7zn/8U+Jr09HQSEhIuGy9/yR133MEtt9xCzZo18fLyYseOHSxcuJDq1aszYMCAQv8aREQu\nUQEXkTKhZcuWeHt7c/78+cum9AOoXLkyH3zwAZMmTeLNN9/E29ubbt260apVKx566KECz3mlOb0v\n2bRpE88880y+4y9NRWgymXjllVcICwujXLlyfPzxx7z66qtMmTIl7wHRsWPH0r1798ve85/e95LA\nwEDmzp3L1KlTWbZsGbNnzyYkJIT27dvnDT0BaN68ObNmzeL9999n5syZZGZmEhISQqNGjbj33nuv\n6r2Kw/PPP4+fnx/ffvstX3/9NTVr1mTatGlER0cXePw/fZ86derEunXr+OWXX8jKyiIwMJD+/fvz\n+OOP4+7uXhRfgogIAKZ9+/YV/dM9XBxf+dFHH7Fnzx66deuWd0fFarUybtw4lixZgo+PD6NGjcr3\nl+Pnn3/Ohx9+iNVq5d5772XkyJHFEVdEREREpEgU2x3wcuXK8cgjj7Bu3bp887V+9tlnHDhwgNWr\nV7Nnzx4GDRpETEwMwcHBbN++nffee49Zs2bh5eXFfffdR1RUVIF3r0RERERESoNrXy3iOjVt2pQO\nHTrg4+OTb/uSJUvo378/Xl5eNG3alJiYGJYvX5637/bbbycyMpKgoCB69+7Njz/+WFyRRUREREQK\nXbGPAf/rfLYJCQmEh4fz5JNPEhsbS2RkJIcOHcrb16RJE2bMmMGJEydo1KgR33//fXFHFhEREREp\nNMV2B/ySvz4Uk5mZiYeHB/v37+fkyZN4enqSkZGRb19SUhKJiYn59omIiIiIlEYOvwPu7u5OZmYm\nCxcuBGDChAl504O5u7uTkZHBc889B1yc09XDw6PA8yYlJRVhahERERGRi/48k9T1KPYC/tc74FWr\nViU+Pj5vYYX4+Pi8BTKqVq2aN3cuwIEDB4iIiLjiuaOiooogsZRWAQEBzJ8/nzZt2jg6ipQQuiak\nILoupCC6LsoGS0ICx0e9SN1fl7PWPxzLskVEhvhe8fiAgADWrl17w+9bbENQ7HY72dnZ2Gw2bDYb\nOTk55Obm0rlzZ2bOnEl6ejpxcXFs27aNDh06ABcXzli+fDkHDhwgOTmZb775RjOgiIiIiMgNsSQk\n4DtyJBVatSb612UAhDSoSaR/8awBUGx3wBcsWJBvQYrvvvuOoUOHMnjwYA4ePEibNm3w8fFh4sSJ\nBAUFAVC/fn0ee+wxBgwYQG5uLvfee68KuIiIiIhclczsXOKPp1Lex53y5dxxspjBaqX8nXdiOXWK\nXJOZGcHR7L9/IENH3FVsuYptIZ6ilpSUpCEokk9AQAC///77FZehlrJH14QURNeFFETXRen3++Ez\n9HttMcmpFyfwMJtMlPdxI8jXk8fiVxF47DBPBTTFt0EU857rhouT5R/PeWkIyo2OAS/2WVBEipP+\nUSZ/pWtCCqLrQgqi66L02rjvBL1eWkTKmXSC/TwoX84du2FwMjWTnQmnGWypw11hnTkbVIn/Pt7u\nqsp3YSr2hzBFRERERIrKsi2JvP7qXCbF/0xr4yzmdb/g5uaCNdfOqbQMklMzSD6bwam0TG6pFUyl\nAK9iz1hmCrjVauXs2bOXzcIixc/Z2Rlf3ys/YSwiIiJyPZZ8vRLT65PYcXwbThgYFgun9/2OtUED\nnJ3MVAzwoqIDCvdflYkCbrVaSUlJITAwELNZo24cLTU1lYyMjCvO6S4iIiJyrfY9+iQDfpLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668efb4e0>"
"<matplotlib.figure.Figure at 0x7fce7dd79470>"
]
}
],
@@ -536,9 +537,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAssAAAF2CAYAAACYtNXtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYlOXixvHvDDsDiOAuLgUKKu5b5gKopaatZmj7amnZ\nsZ3Kc1rMMlssK8v2snJNs71Mc01NLQ0QNRRQMRcWZZFhnd8flOfnUUEReAa4P9fldTHb+94zzzXM\n7fC+z2NxOBwORERERETkJFbTAUREREREnJXKsoiIiIjIaagsi4iIiIichsqyiIiIiMhpqCyLiIiI\niJyGyrKIiIiIyGmoLIuIiIiInEa5ZXnfvn1ERkZis9no3r078fHx5W7U4XAQHR1NixYtsFqt7Nmz\n54TbFy5cSNu2bfH392fAgAFs27at4s9ARERERKSKlFuWx44dS6dOncjIyCA6Opro6Ogz2nC/fv1Y\nuHDhSdcfPHiQG2+8kXfffZfMzEyioqK4+eabzzq4iIiIiEhVs5S1gl9WVhaBgYGkpKTQrFkzCgoK\nCAwMZN26dYSHh5e78aKiItzd3UlOTqZly5YArFu3jquuuoq//voLgNjYWPr06UNOTk4lPSURERER\nkcpR5jfLiYmJeHp6YrPZ6N+/P0lJSQQHB7N9+/YK77Bz5864ubmxYsUKiouLWbBgASNGjKjw9kRE\nREREqoprWTfm5ubi4+NDdnY2CQkJZGZm4uvrS25uboV36O3tzcyZMxk+fDgFBQW0bt2a5cuXV3h7\nIiIiIiJVpcyybLPZyMnJISgoiLS0NACys7Px8fGp8A63bNnCuHHj2LRpE6Ghobz22mtccsklxMbG\nnnTfZcuWVXg/IiIiIiJnatCgQae8vsyyHBISQl5eHqmpqTRv3pyCggJ27dpFaGhohYMsXbqUXr16\n0a5dOwBuv/127rvvPg4ePEjjxo1Puv8/95OqFRgYyKJFi4iIiDAdpc7SGJhX08egoKiY4hIHbi5W\nXKwWLBaL6UhnraaPQW2gMTBPY1D9EhISTntbmWXZz8+PIUOGMHXqVF544QVeffVVWrVqdcLJfZGR\nkVxwwQVMnTr1hMfm5+dTWFgIgN1ux2634+npSfv27XnppZfYuXMnbdq0Yfbs2TRo0IBGjRqdy3MU\nEan1HA4HKYey2br7MHHJaSQfzGbP4SwOZBwjO6+A/MLi4/e1WiwE+HrS0N+LpgE22javT2hQfTqd\n14C2zetjtda8Ii0iYkKZZRlg1qxZXH/99QQEBNCuXTvmzZt3wu0pKSmcf/75Jz0uNDSUPXv2YLFY\nCAsLw2KxUFxczPDhw7n33nsZPHgwR48eJSwsjMWLF9fIb0BERKrakdx8ft6yl5//2MvKP1JJy8o7\n7X1drBZcrBaKih2UOBykZeWRlpVHwp4Mlm/Ze/x+9X086B3WhEFdWnJxt1Y0qOdVHU9FRKRGKnPq\nONOWLVumwzCqSWBgIAkJCfqG3yCNgXnOMgYFRcX8uDmFRWsTWb5lL4XFJcdva+DnRefzG9D5/IYE\nN61Hy0Z+NAu0Uc/bA093l+NfPBQWlZCRbefQkWPsTctmx75Mtu/NYNPOQxzI/O9J2laLhd5hTYiO\naMuI3ufj5V7udyhVylnGoC7TGJinMah+CQkJpz1mWWVZgNI3JkB6errhJHWXxsA802OQkW1n9rIE\nPlq6jYNHjgGlZbZP+6YM6tKCqE4taNPc/5z+EudwONhzOJvVcan8sCmF1XGpx8u4n7c7owa05c5h\nHWneoOIncp8L02MgGgNnoDGofmWVZbNfIYiICIeOHOPVL35n7ood2P8+7jg0qD6jI0O5/IJgGtf3\nrrR9WSwWWjXyo9VAP64f2I6sYwV8tX43n/28nS27D/Pe93F8tDSey/sE868ruhLc1L/S9i0iUhOp\nLIuIGJJ1rICZX2/l3e/jyMsvAmBglxbcMawj/Ts0q5ZzOfy83bluYBjXDQwjLjmNt775gyXrdvP5\nmkS++GUX1w9sx/1XddNxzSJSZ6ksi4hUs5ISB/NX7eSZORvIzMkHYEj3Vjw8qgdhLQKM5Qpv3YDX\n7x7Iw6N6MGPJFuat3MlHP21j4Zo/mXBZF+4c3hF3Vxdj+URETFBZFhGpRjv3ZRLz/ho27DgAwAVh\nTXh0dC96tDl5nnlTWjby48U7BnDHsHCmzPmVZVv2MnX+Rr74JZEX7hhAtxCddCQidYfKsohINSgu\nKeG1JVt4ZfHvFBaX0MDPiyevv4ArLgx22qkzQ4MC+PihoayKS+XR99ewfV8mlz25hFsv7sCj0b3w\n8tBHiIjUflbTAUREars9h7IYOflrXli4mcLiEq4fGMbKF0dxZd8Qpy3K/9+A8Ob89NxI7r60M1aL\nhfd+iGfYpMXEp+hMfRGp/VSWRUSq0OK1iVz06CI27jxIY39v5sQM4/nb+uNv8zAd7ax4ebjy2Ohe\nfDv5Cto08+fP/Ue49IklvP9DHE48A6mIyDlTWRYRqQKFRSX85+NfuGfmz+TYCxnWozU/TR3JgI5B\npqOdk/DWDfjumSu5bmAY+YXF/PvjdYx99Sdy7YWmo4mIVAmVZRGRSnb46DFGP/cN7/0Qj5uLlWdv\n6cs7EwcT4OtpOlql8PJwZdpt/Xn7X4Px83bn243JXPbEElIOZZmOJiJS6VSWRUQqUXxKOsMmfcH6\n7Qdo7O/Nwn+P4KbB7WvEsclna3iv8/j66csJaebP9n2ZXPLvL1gdl2o6lohIpVJZFhGpJCv/2MdV\nT3/FXxm59GzbmO+eudKppoSrCsFN/fnqqcsZ3LUlR3LyuX7ad8xftdN0LBGRSqOyLCJSCeat3MGN\nL35Pjr2Qy/sEM++x4ZW6TLUz8/N254P7L+buSztTVOzgvlkrmbHkd534JyK1gsqyiMg5mrHkd+5/\nexVFxQ7uvrQzr4+PwsOtbq10Z7VaeGx0L5656UIsFnh+/iYe//AXiktKTEcTETknmlFeRKSCHA4H\nzy/YxGtLtmCxwDM39eXmi9qbjmXULRd3oGE9L+59cwUf/bSN7LwCpt8ZgauLvpsRkZpJZVlEpAIc\nDgdPfLKe976Pw8VqYca4SK64MMR0LKcwovf5BPp5cdOLP7BobSKFRSW8Nj4KN1cVZhGpefSbS0Tk\nLDkcDmLeX8N738fh5mJl1r2DVJT/R592TfksZhi+Xm58tWE3415bRkFRselYIiJnTWVZROQsOBwO\nnpi9jk+Wb8fTzYUPHriYYT3PMx3LKfVo05i5jw6nnrc7321K5q4Zyygs0jHMIlKzqCyLiJyFqfM3\n8d4P8bi7Wnnv/ouI6tzCdCSn1iW4IfMfH46/zYMfNqdw36wVlJRolgwRqTlUlkVEztCrX/zO619u\nwcVq4a0Jg4jspKJ8JsJbN+CTR4Zi83Rj8S+7eOzDtZpWTkRqDJVlEZEz8M53sUxbsAmLBWaMi2RI\nj9amI9UoXYMb8eEDF+Pp5sLsZQlMmfOrCrOI1AgqyyIi5ViybhdPfrIegBdvH6CT+SrowvbNmPWv\nwbi6WHjzmz94/cutpiOJiJRLZVlEpAy/bNvPxLdWAPDva3szOjLUbKAabnDXlrw2PgqLBabO38ii\ntYmmI4mIlEllWUTkNHbsy+C26UspKCrh1os7cOclHU1HqhUuuyCYp67vA8D9s1byy7b9hhOJiJye\nyrKIyCkcyMzl+mnfk3WsgGE9WvPkDRdgsVhMx6o1bhsazm1DwyksLuH26Uv5MzXTdCQRkVNSWRYR\n+R+59kJufOEH9qfn0r1NI167OwoXq35dVrYnruvNsB6tOXqsgOunfc+hI8dMRxIROYl++4uI/D8l\nJQ4mvrWS+JR0Wjf248MHhuDl7mo6Vq3kYrXy2vgougY3ZF9aDre+/CP2giLTsURETlBuWd63bx+R\nkZHYbDa6d+9OfHx8uRt1OBxER0fTokULrFYre/bsOeH2pKQkhg4diq+vL02bNuWjjz6q+DMQEalE\nz81Zy7cbk/D1cuPDBy4mwNfTdKRazcvDlQ8fGEJQAx9+33WYe2Z8rynlRMSplFuWx44dS6dOncjI\nyCA6Opro6Ogz2nC/fv1YuHDhSdcXFxczYsQIunTpwsGDB9m9ezd9+/Y9++QiIpXsizU7mDx7DRYL\nvHHPQNo0r286Up3QoJ4X7913MZ7uLnzyUxxvLNlkOpKIyHFlluWsrCyWLl1KTEwMHh4eTJw4kZSU\nFOLi4srcqMViYcKECXTv3v2k21avXs2RI0eYMmUK3t7eeHl5ERKiOUtFxKz4lHRufeFrAB4f3YtB\nXVoaTlS3hLcO5OWxEQA88vZyVselGk4kIlKqzLKcmJiIp6cnNpuN/v37k5SURHBwMNu3b6/wDrdu\n3UpYWBjXXXcdDRs2JCIigoSEhApvT0TkXGXm2Llt+o8cyy9kzMAO3DW8k+lIddLlfYJ58JoLKC5x\ncNdry0g5lGU6kogIZZ61kpubi4+PD9nZ2SQkJJCZmYmvry+5ubkV3mFWVharV6/m7bff5pNPPmHa\ntGmMGTOGLVu2nPL+gYGBFd6XnDk3NzdAr7dJGgMzSkoc3DFjIXsP59AjtCnvPHgprjr12Zhnbx9E\nfEoa321I5M4Zy1n1yo14ebiZjlWn6HeReRoD51JmWbbZbOTk5BAUFERaWhoA2dnZ+Pj4VHiH3t7e\nBAQEcPPNNwNwzz33MGnSJI4ePUq9evVOuv/kyZOP/zxgwAAiIiIqvG8Rkf/10oL1fLthF/V9PJn3\nn6vx8nCjsLDQdKw6y8XFyiePXUmvce8Sm3SY+9/8iTcnDjMdS0RqmZUrV7Jq1arjl6Oiok573zLL\nckhICHl5eaSmptK8eXMKCgrYtWsXoaEVX+41JCTklBP7n+7s5/Hjx59wOT09vcL7ltP753Line truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668e3a898>"
"<matplotlib.figure.Figure at 0x7fce7dae7518>"
]
}
],
@@ -563,7 +564,7 @@
"xs = range(100)\n",
"ys = []\n",
"for i in xs:\n",
" ys.append(dog.sense())\n",
" ys.append(dog.sense_position())\n",
" \n",
"plt.plot(xs,ys, label='dog position')\n",
"plt.legend(loc='best')\n",
@@ -575,9 +576,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16692693c8>"
"<matplotlib.figure.Figure at 0x7fce79cf12b0>"
]
}
],
@@ -678,9 +679,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAF2CAYAAACoOMTMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VNX9//HXnclkmWwkkw1ICGAgLAGTsKsBRBBB64Io\nFKFaFbXaqqhFq8W6YxXqVmuLP6xUURE3kNUdRJB9EZEk7CEsWcm+z/z+iKTNV0jIerO8n4+HD5O5\n9577nsM8kk/OnDnHSExMdCEiIiIiIufMYnYAEREREZHWRkW0iIiIiEgdqYgWEREREakjFdEiIiIi\nInWkIlpEREREpI5URIuIiIiI1JGKaBERERGROqq1iD5x4gTTpk0jNjaWCRMmkJycXGuj33//Pb/6\n1a8YMGAAw4YN48EHH6SgoKDq+MaNGxk7dixxcXHcdddd5OfnN+xZiIiIiIg0o1qL6FmzZhEdHc2m\nTZsYN24cM2bMqLXR8847j//3//4fW7du5YsvviAjI4N58+YBUFRUxD333MPdd9/Nhg0bMAyDuXPn\nNvyZiIiIiIg0kxqL6Pz8fNavX8/06dNxd3fnxhtvJDU1laSkpBobDQ4OJjQ0FIDy8nJcLhfe3t5A\n5Si0n58fl19+OZ6entx8882sWLGikZ6OiIiIiEjTq7GIPnz4MO7u7tjtdqZMmcLRo0fp0qULBw4c\nqLXhY8eOMWDAAIYMGYKfnx+33XYbAAcPHqR79+5s3bqVW265hcjISHJycsjOzm6cZyQiIiIi0sRq\nLKKLiorw9vamoKCA/fv3k5ubi7e3N0VFRbU23KlTJ7Zu3crnn3/OoUOHePfddwEoLCzEbreTkZHB\n/v37cXd3r3pcRERERKQ1cKvpoJeXFwUFBYSFhbFx40YACgoKsNvt53yDiIgIbrvtNubPn8+vf/1r\n7HY7hYWFjB07lrFjx5KTkwNwxjZTUlLq8lxEREREROolIiKiTufXWERHRkZSUlLCyZMnCQ0NpbS0\nlCNHjtCtW7c63cTpdOJyuQDo2rVr1ag0wL59+/D39ycgIOCM1/bu3btO95KGczgcfPTRR4wYMcLs\nKO2S+t9c6n/zqO/Npf43l/rfPA6Hg3Xr1tX5uhqnc/j4+HDRRRcxb948SkpKePPNN+ncuTM9e/as\nOmfatGnMmTOn2nXLly8nMTERp9PJsWPHeOONNxg+fDgAQ4cOJS8vj2XLllFYWMgbb7zB+PHj6xxc\nRERERMQstS5x98QTT5CUlMTgwYNZtWoVL7zwQrXjqampZGZmVnvs1KlT3H333QwYMIBJkyYxcOBA\n7rzzTqByishLL73EK6+8wgUXXADA/fff31jPR0RERESkyRmJiYkus0OcTUpKiqZzmMDhcPDTTz8R\nEhJidpR2Sf1vLvW/edT35lL/m0v9b57T0znqOida237LGemPF3Op/82l/jeP+t5c6n9zqf9bFxXR\nIiIiIiJ1VOPqHCIiIiLtSVlZGdnZ2RiG0az3Pb3pXHl5ebPetz1wuVwEBARgs9katV0V0SIiIiJU\nFtCZmZmEhIRgsejN+rbC6XSSlpaGw+Fo1EJarxARERERKkeDVUC3PRaLhZCQkKrR/kZrt1FbExER\nEWmlDMNQAd1GWSyWRp+io1eKiIiIiEgdqYgWEREREakjFdEiIiIiInWkIlpEREREqgkPD2fx4sUN\namPixIncd999jZSoutdff53w8HDCw8MZOnRok9yjNlriTkRERESq2bFjBz4+Pg1qY/78+Vit1kZK\nVN3UqVO55pprWLJkCa+//nqT3KM2KqJFREREpJqgoKAGt+Hv798ISc7My8sLLy+vBhf6DaHpHCIi\nIiJtwEsvvcTAgQPp3r07o0eP5osvvvjFOUOGDOH5559n9uzZ9O/fn6ioKGbOnFl1vHv37lXTJN5/\n//1fXJ+Tk8P06dOJioriggsu4D//+Q/h4eF8//33VefccMMNVW3MmDHjF23MnTuXiRMn8vLLL3P+\n+efTv39/nn/++WrnvPrqq4wePZoePXrQt29fbr/9do4fP96Q7ml0GokWERERqYPONzTN9IHUhdPr\nfe2iRYt4+eWXef7554mLi+Pdd99l+vTpfPPNN0RGRladZxgGixcv5pJLLuH999/H5XKxc+fOquOb\nN2/G6XQSFxd3xnWVH330Ufbs2cO7776LzWZjxowZvzjvtddeo6SkhFtvvfWsazPv3LmT2NhYlixZ\nwqpVq3jqqacYPXo0cXFxAOTm5jJz5kyio6PJy8tj1qxZ3H777SxdurTefdTYNBItIiIi0sotWLCA\na6+9lgkTJtCtWzcefvhhOnXqxNtvv13tPJfLhcPhYPbs2fTq1YvevXszefLkquMOh4Pg4OAz3iM3\nN5clS5Ywc+ZMBg0aRGxsLPfeey8ul6vaeX5+fgQHB9e4xbafnx+PPPIIXbt25Y477sDX17daMf+n\n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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668150978>"
"<matplotlib.figure.Figure at 0x7fce79d0dc18>"
]
}
],
@@ -726,9 +727,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAF2CAYAAACoOMTMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xdc1uX++PHX52Zv5BYc4EBwoOSAVEwBRyrlqFxYnXZZ\nXxvHOiezU5alzaOl59fUTmnDVBxZjlylQOJKU8CJIgIOpux9X78/SE6Ug/1hvJ+Phw9vPuO63p8L\nvHnfl9fQlFIKIYQQQgghRJUZ9A5ACCGEEEKIpkaSaCGEEEIIIapJkmghhBBCCCGqSZJoIYQQQggh\nqkmSaCGEEEIIIapJkmghhBBCCCGqSZJoIYQQQgghqumGSXRSUhJDhw7Fzs4Of39/YmNjb1jozz//\nTO/evXFycsLNzY0HHniA3NzcivM7d+6ke/fu2Nvbc9ddd5GdnV27pxBCCCGEEKIB3TCJnjZtGr17\n9yYjI4PQ0FBCQ0NvWKiPjw+bN28mKyuLM2fOcOnSJd566y0A8vPzmTx5Mq+99hqpqalomsaLL75Y\n+ycRQgghhBCigVw3ic7Ozmbbtm3MmjULKysrZsyYQUJCAjExMdcttG3btri7uwNQUlKCyWTC0dER\nKO+ldnZ2ZurUqdjY2PDPf/6TlStX1tHjCCGEEEIIUf+um0THxcVhbW2NnZ0dgYGBxMfH4+XlxfHj\nx29Y8Llz53BycsJoNNKqVSteeOEFAE6cOEGPHj345ZdfGD16NN7e3mRkZJCenl43TySEEEIIIUQ9\nu24SnZeXh729PTk5ORw7dozMzEwcHBzIy8u7YcEdO3YkKyuL06dPc/LkST755JNKZV68eJFjx45h\nZWUFUGnMtBBCCCGEEI2Z+fVO2tnZkZubi4eHB2lpaQDk5ORgb29f5Qo8PT2ZNWsW8+fP54knnqgo\nc+LEiUycOJHMzEyAq5a5Y8eO6jyLEEIIIYQQNTJixIhqXX/dJNrb25uCggKSk5Nxd3enuLiY06dP\n071792pVYjKZUEoB0K1bNz7++OOKc0ePHsXFxQWj0XjVe318fKpVl6g9o9HI2rVrCQ4O1juUFkna\nX1/S/vqRtteXtL++pP31YzQaiYyMrPZ91x3O4ejoyOjRo3n77bcpLCzk/fffp1OnTvj6+lZcM3To\nUGbNmlXpvhUrVhAdHY3JZOLcuXPMnz+f2267DYDhw4eTlZXFt99+S15eHvPnz6/Sih9CCCGEEEI0\nFjdc4u7TTz8lOjoaFxcXVq1a9ZeVNBISEkhJSal0LD09nUmTJuHk5MSgQYMICgpi9uzZANja2hIW\nFsacOXNwc3MD4O23366r5xFCCCGEEKLeXXc4B4CHhwc7d+685vn4+Pi/HHvyySd58sknr3lPcHAw\nJ06cqFqEQhcyjEZf0v76kvbXj7S9vqT99SXt37TItt/iquQfsr6k/fUl7a8faXt9SfvrS9q/aZEk\nWgghhBBCiGq64XAOIYQQQojm4vLly5SUlOgdxl9cWfK3tLRU50iaH6UUrVq1wsLCok7LlSRaCCGE\nEC1Cfn4+AK6urjpHIhqSyWQiJSUFo9FYp4m0DOcQQgghRIuQm5uLk5OT3mGIBmYwGHBzc6vo7a+z\ncuu0NCGEEEKIRkrTNDRN0zsMoQODwVDn33tJooUQQgghhKgmSaKFEEIIIYSoJkmihRBCCCGEqCZJ\nooUQQgghhKgmSaKFEEIIIUSTc/LkSR5//HEGDRqEh4cH7733XoPWL0m0EEIIIYRocvLy8nB3d2fW\nrFm4ubk1+MorkkQLIYQQQjRiu3fvxs/Pj4cffhgfHx+WLl3KyJEj6d27NxERERXXZWdnM3PmTPr0\n6YOPjw933303p06dqjgfFxfHQw89RL9+/ejSpQvBwcEsX768Ul0lJSW88sor+Pv74+XlxZAhQ1i8\neHHF+cTERDw8PEhOTq44tmDBAgICAiqVs3LlSjw8PIiJiWHs2LF4eXkxYMAAYmNjASguLmbevHn4\n+/vTtWtXxo8fz4EDB6rVLv369eOVV17hjjvuwNLSslr31gXZsVAIIYQQ4nfu9y6pl3KTv3msVven\npqbyxBNP0KlTJ2bPnk1YWBjbt29n8eLFBAYGopTivvvuw8LCgmXLluHk5MSSJUuYOnUqERER2Nra\nkpGRQb9+/ZgxYwZGo5Hw8HBeeOEF3N3dCQ4OBuCLL75g9erVLF68GE9PT86ePUtiYuIN47tWL/BL\nL73E008/jY+PD9HR0RU7Bj777LOcOHGCDz/8kPbt27N27VruvvtuwsPDadeuXa3aqqFIEi2EEEII\n0cgZjUYGDBhAbm4u69atIyAggIKCAnbs2AFAREQEBw8e5ODBgxXbms+dO5fVq1ezfft2xo8fz4AB\nAxgwYEBFmffccw9fffUVO3bsqEiiExMTadOmDUOGDAHA3d29SvEppa56/KmnnmLkyJEAdOzYEYAz\nZ86wfv16Nm7cSJ8+fQCYMWMG69atY926dUyfPr26zaMLSaKFEEIIIX5X2x7j+mJtbV3x95XXVlZW\nFBYWAhATE4NSisGDB1e6r7CwkHPnzgFQUFDAwoUL2bZtG5cuXaKkpITCwkJ69epVcf3EiRNZs2YN\ngYGB3HLLLQwcOJCxY8fWeLjEwIED/3IsJiYGgMmTJ1c6XlRUREJCQo3q0YMk0UIIIYQQTdQfe4Ad\nHR3ZvHnzX65xdnYGynumIyMjmT17Nl26dMHMzIxp06ZhMpkqru3bty/79u0jMjKSqKgoXn75ZZYv\nX87q1auBqw/b+OP9f+bo6HjNc9999x12dnaVjjk4OFzz+sZGkmghhBBCiCbO19eX7OxsSkpK8Pb2\nvuo1+/bt4+GHH64YXlFQUEBSUhK+vr6VrrO3tyckJISQkBD8/f2ZPn06ly9fxtnZuSIpzs3Nrbg+\nKSmpWitjXOn5vnTpEsOGDavWczYmsjqHEEIIIUQTFxgYiJ+fH48//jjh4eEkJCQQHh7O888/T3x8\nPABdunTh+++/58SJExw9epRnnnmGsrKySuUsWbKEtWvXEhcXx6lTp1i/fj3u7u4VvdmOjo54enqy\nZs0aAGJjY9m6dWu1YvXy8mLcuHG88MILbN68mYSEBPbu3curr77K3r17q1xOSUkJMTExxMTEUFxc\nzKVLl4iJiam0ckh9kp5oIYQQQohG7o89vVd7rWkaX3/9NW+99RYzZszg8uXLuLq6EhQURKtWrQCY\nM2cOM2fOZNy4cTg6OvLYY4+Rk5NTqR4HBwcWL15MfHw8ZmZm9O3bl2XLllW65t1332XmzJmsWLEC\nPz8/JkyYwE8//XTdmP9s0aJFLFiwgDlz5pCSkoKLiwsBAQFVnsgIcPHiRUJCQio9/9dff82UKVMa\nZOMVTV1rOmUjsGPHDnx8fPQOo8UxGo0ApKen6xxJyyTtry9pf/1I2+urJbR/ampqxcoVouW51vff\naDQSGRnJiBEjqlWeDOcQQgghhBCimiSJFkIIIYQQopokiRZCCCGEEKKaJIkWQgghhBCimiSJFkII\nIYQQopokiRZCCCGEEKKaJIkWQgghhBCimiSJFkIIIYQQopokiRZCCCGEEKKaJIkWQgghhBCimiSJ\nFkIIIYQQTc7y5csZN24cPXv2pFevXkyZMoUDBw40WP2SRAshhBBCiCZn7969TJkyhTVr1rB+/Xpc\nXV255557iI+Pb5D6JYkWQgghhGjEdu/ejZ+fHw8//DA+Pj4sXbqUkSNH0rt3byIiIiquy87OZubM\nmfTp0wcfHx/uvvtuTp06VXE+Li6Ohx56iH79+tGlSxeCg4NZvnx5pbpKSkp45ZVX8Pf3x8vLiyFD\nhrB48eKK84mJiXh4eJCcnFxxbMGCBQQEBFQqZ+XKlXh4eBATE8PYsWPx8vJiwIABxMbGAlBcXMy8\nefPw9/ena9eujB8/vtq9yIsWLeK+++7Dx8cHb29v3nzzTfLz89m5c2e1yqkp8wapRQghhBCiCVgZ\ne1+9lBva66ta3Z+amsoTTzxBp06dmD17NmFhYWzfvp3FixcTGBiIUor77rsPCwsLli1bhpOTE0uW\nLGHq1KlERERga2tLRkYG/fr1Y8aMGRiNRsLDw3nhhRdwd3cnODgYgC+++ILVq1ezePFiPD09OXv2\nLImJiTeMT9O0qx5/6aWXePrpp/Hx8SE6OhoLCwsAnn32WU6cOMGHH35I+/btWbt2LXfffTfh4eG0\na9euRm2UlZUFgJOTU43ury5JooUQQgghGjmj0ciAAQPIzc1l3bp1BAQEUFBQwI4dOwCIiIjg4MGD\nHDx4EFdXVwDmzp3L6tWr2b59O+PHj2fAgAEMGDCgosx77rmHr776ih07dlQk0YmJibRp04YhQ4YA\n4O7uXqX4lFJXPf7UU08xcuRIADp27AjAmTNnWL9+PRs3bqRPnz4AzJgxg3Xr1rFu3TqmT59e3eYB\nYN68eXTp0oUxY8bU6P7qkiRaCCGEEOJ3te0xri/W1tYVf195bWVlRWFhIQAxMTEopRg8eHCl+woL\nCzl37hwABQUFLFy4kG3btnHp0iVKSkooLCykV69eFddPnDiRNWvWEBgYyC233MLAgQMZO3YslpaW\nNYp74MCBfzkWExMDwOTJkysdLyoqIiEhoUb1zJ8/nz179rB27VqsrKxqVEZ1SRIthBBCCNFE/bEH\n2NHRkc2bN//lGmdnZ6C8ZzoyMpLZs2fTpUsXzMzMmDZtGiaTqeLavn37sm/fPiIjI4mKiuLll19m\n+fLlrF69Grj6sI0/3v9njo6O1zz33XffYWdnV+mYg4PDNa+/lg8++IClS5eycuVKvL29q31/TUkS\nLYQQQgjRxPn6+pKdnU1JSck1E8l9+/bx8MMPVwyvKCgoICkpCV9f30rX2dvbExISQkhICPLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f166802a438>"
"<matplotlib.figure.Figure at 0x7fce79c932e8>"
]
}
],
@@ -776,9 +777,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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\nV18NwPjx4wE4duwYL7/8Mq+99hqzZs0CYM2aNbz00ku89NJLrFq1KtBvT0goiRYRERHpNNAZ48ES\nHx/v/+j7PC4ujtbWVgD279+PaZpcddVV3R7X2tpKaWkpAE6nk8cff5y33nqLiooK2traaG1tZebM\nmf7jb7zxRl544QUWLFjAlVdeydy5c7nuuuv6XS4xd+7c827bv38/ADfffHO3210uFyUlJf06Tygo\niRYRERGxqLNngJOTk3njjTfOOyY1NRXwzkzv3LmTdevWMWnSJGw2G3fccQcej8d/bH5+Pnv27GHn\nzp2899573HfffWzatImtW7cCFy7bOPvx50pOTr7ofX/4wx9ITEzsdtuIESMueny4URItIiIiYnF5\neXk0NjbS1tbGlClTLnjMnj17WLFihb+8wul0UlZWRl5eXrfjkpKSuOaaa7jmmmsoLCxk1apV1NfX\nk5qa6k+Km5ub/ceXlZUF1BnDN/NdUVHBV77ylYCeZzhRdw4RERERi1uwYAGzZ8/me9/7Hjt27KCk\npIQdO3bwox/9iOPHjwMwadIkXnnlFQ4dOsTBgwdZvXo1HR0d3cZ56qmnePHFFzly5AiHDx/m5Zdf\nJicnxz+bnZyczMSJE3nhhRcAOHDgAH/+858DinXy5Mlcf/313HvvvbzxxhuUlJSwe/dufvrTn7J7\n9+4+j9PW1sb+/fvZv38/brebiooK9u/f361zyGDSTLSIiIhImDt7pvdCnxuGwe9+9zseeeQR1qxZ\nQ319PZmZmSxcuJC0tDQAHnjgAe655x6uv/56kpOTWblyJU1NTd3OM2LECDZs2MDx48ex2Wzk5+fz\n7LPPdjvmn//5n7nnnnv4r//6L2bPns3SpUt55513eoz5XE888QTr16/ngQceoLKykvT0dObNm9fn\nhYwAZ86c4Zprrun2/H/3u99xyy23DMnGK8ahQ4cuvJwyDJw8eZIZM2aEOgwJUEZGBgA1NTUhjkT6\nQ9fPunTtrE3Xb/BVVVX5O1fI8HOx65+RkcHOnTsZN25cQOOpnENEREREJEBKokVEREREAqQkWkRE\nREQkQEqiRUREREQCpCRaRERERCRASqJFRERERAKkJFpEREREJEBKokVEREREAqQkWkREREQkQEqi\nRUREREQCpCRaRERERCxn06ZNXH/99Vx66aXMnDmTW265hQ8//HDIzq8kWkREREQsZ/fu3dxyyy28\n8MILvPzyy2RmZrJs2TKOHz8+JOdXEi0iIiISxnbt2sXs2bNZsWIFM2bMYOPGjVx99dVcfvnlvPvu\nu/7jGhsbueeee5g1axYzZszgtttu4/Dhw/77jxw5wre//W0KCgqYNGkSixYtYtOmTd3O1dbWxv33\n309hYSGTJ09m/vz5bNiwwX//yZMnGTt2LOXl5f7b1q9fz7x587qNs3nzZsaOHcv+/fu57rrrmDx5\nMkVFRRw4cAAAt9vNww8/TGFhIZdccgk33HBDwLPITzzxBMuXL2fGjBlMmTKFf/qnf6KlpYW//OUv\nAY3TX9FDchYRERERC9h8YPmgjPvNmc8N6PFVVVXceeed5Obmsm7dOrZs2cK2bdvYsGEDCxYswDRN\nli9fTkxMDM8++ywpKSk89dRT3Hrrrbz77rvY7XZqa2spKChgzZo1ZGRksGPHDu69915ycnJYtGgR\nAP/xH//B1q1b2bBhAxMnTuTEiROcPHmy1/gMw7jg7T/5yU/4wQ9+wIwZM/jss8+IiYkBYO3atRw6\ndIhf//rXjBkzhhdffJHbbruNHTt2MHr06H59jxoaGgBISUnp1+MDpSRaREREJMxlZGRQVFREc3Mz\nL730EvPmzcPpdPL2228D8O6777J371727t1LZmYmAA899BBbt25l27Zt3HDDDRQVFVFUVOQfc9my\nZTz33HO8/fbb/iT65MmTZGVlMX/+fABycnL6FJ9pmhe8/e/+7u+4+uqrARg/fjwAx44d4+WXX+a1\n115j1qxZAKxZs4aXXnqJl156iVWrVgX67QHg4YcfZtKkSXzta1/r1+MDpSRaREREpNNAZ4wHS3x8\nvP+j7/O4uDhaW1sB2L9/P6ZpctVVV3V7XGtrK6WlpQA4nU4ef/xx3nrrLSoqKmhra6O1tZWZM2f6\nj7/xxht54YUXWLBgAVdeeSVz587luuuuIzY2tl9xz50797zb9u/fD8DNN9/c7XaXy0VJSUm/zvPo\no4/y/vvv8+KLLxIXF9evMQKlJFpERETEos6eAU5OTuaNN94475jU1FTAOzO9c+dO1q1bx6RJk7DZ\nbNxxxx14PB7/sfn5+ezZs4edO3fy3nvvcd9997Fp0ya2bt0KXLhs4+zHnys5Ofmi9/3hD38gMTGx\n220jRoy46PEX8+STT7Jx40Y2b97MlClTAn58fymJFhEREbG4vLw8GhsbaWtru2giuWfPHlLine truncated
"png": "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\nEyYAcOTIEV577TVef/11Zs2aBcDq1avZsmULW7ZsYdWqVYF+e0JCSbSIiIhIp8HOGA+V+Ph4/0ff\n53FxcbhcLgAKCwsxTZNLL72023Eul4vS0lIAWlpaeOyxx3jrrbc4ffo0bW1tuFwuZsyY4X/88uXL\neeWVV1i4cCFf/epXmT9/PldfffWAyyXmz59/zm2FhYUArFixotvtra2tlJSUDOg8oaAkWkRERMSi\nzpwBTklJ4c033zznMWlpaYB3Znrnzp3cd999TJ48Gbvdzm233YbH4/E/dvbs2XzwwQfs3LmT3bt3\n89Of/pQXX3yRzZs3A+cv2zjz+LOlpKT0eN8f//hHHA5Ht9uSk5N7fHy4URItIiIiYnH5+fnU19fT\n1tZGbm7ueR/zwQcfcOutt/rLK1paWigrKyM/P7/b45KSkli2bBnLli2joKCAVatWUVtbS1pamj8p\nbmxs9D++rKwsoM4Yvpnv06dPc/nllwf0PMOJunOIiIiIWNzChQuZO3cut99+O9u3b6ekpITt27fz\nox/9iOLiYgAmT57Mn/70Jw4ePMj+/fu566676Ojo6DbO008/zauvvkpRURGHDh3itddeIysryz+b\nnZKSwqRJk3jllVcA2LdvH3/9618DijUnJ4drrrmGe++9lzfffJOSkhL27NnDz372M/bs2dPvcdra\n2igsLKSwsBC3283p06cpLCzs1jlkKGkmWkRERCTMnTnTe77PDcPg+eef5+GHH2b16tXU1taSmZnJ\nokWLSE9PB2Dt2rXcc889XHPNNaSkpPC9732PhoaGbudJTk5mw4YNFBcXY7fbmT17Ns8991y3x/zy\nl7/knnvu4Q9/+ANz587luuuu429/+1uvMZ/t8ccf55FHHmHt2rWUl5eTkZHBggUL+r2QEeDUqVMs\nW7as2/N//vnnueGGG4Zl4xXD7Gk5ZRjYunUreXl5oQ5DAuR0OgGoqqoKcSQyELp+1qVrZ226fkOv\noqLC37lCok9P19/pdLJz506uvPLKgMZTOYeIiIiISICURIuIiIiIBEhJtIiIiIhIgJREi4iIiIgE\nSEm0iIiIiEiAlESLiIiIiARISbSIiIiISICURIuIiIiIBEhJtIiIiIhIgJREi4iIiIgESEm0iIiI\niFjOiy++yDXXXMP06dOZMWMGN9xwAx999NGwnV9JtIiIiIhYzp49e7jhhht45ZVXeO2118jMzOTm\nm2+muLh4WM6vJFpEREQkjO3atYu5c+dy6623kpeXx7PPPstVV13FzJkz2bFjh/9x9fX13HPPPcya\nNYu8vDxuuukmDh065L+/qKiI73znO8yZM4fJkyezePFiXnzxxW7namtr4/7776egoICcnBwuu+wy\nNmzY4L//2LFjZGdnc/z4cf9tjzzyCAsWLOg2zsaNG8nOzqawsJCrr76anJwc5s2bx759+wBwu908\n+OCDFBQUMGXKFK699tqAZ5Eff/xxvv3tb5OXl0dubi7/+q//SnNzM9u2bQtonIGKGZaziIiIiFjA\nxn3fHpJxV874/aCOr6io4I477mDixIncd999bNq0ibfffpsNGzawcOFCTNPk29/+NrGxsTz33HOk\npqby9NNPc+ONN7Jjxw4SExOprq5mzpw5rF69GqfTyfbt27n33nvJyspi8eLFAPzHf/wHmzdvZsOG\nDUyaNImjR49y7NixPuMzDOO8t//kJz/hzjvvJC8vj7179xIbGwvA3XffzcGDB3niiScYN24cr776\nKjfddBPbt29n7NixA/oe1dXVAZCamjqg4wOlJFpEREQkzDmdTubNm0djYyNbtmxhwYIFtLS0sHXr\nVgB27NjBxx9/zMcff0xmZiYADzzwAJs3b+btt9/m2muvZd68ecybN88/5s0338zvf/97tm7d6k+i\njx07xujRo7nssssAyMrK6ld8pmme9/Z/+qd/4qqrrgJgwoQJABw5coTXXnuN119/nVmzZgGwevVq\ntmzZwpYtW1i1alWg3x4AHnzwQSZPnsw3vvGNAR0fKCXRIiIiIp0GO2M8VOLj4/0ffZ/HxcXhcrkA\nKCwsxDRNLr300m7HuVwuSktLAWhpaeGxxx7jrbfe4vTp07S1teFyuZgxY4b/8cuXL+eVV15h4cKF\nfPWrX2X+/PlcffXVjBgxYkBxz58//5zbCgsLAVixYkW321tbWykpKRnQedavX8/777/Pq6++Slxc\n3IDGCJSSaBERERGLOnMGOCUlhTfffPOcx6SlpQHememdO3dy3333MXnyZOx2O7fddhsej8f/2Nmz\nZ/PBBx+wc+dOdu/ezU9/+lNefPFFNm/eDJy/bOPM48+WkpLS431//OMfcTgc3W5LTk7u8fE9+c1v\nfsOzzz7Lxo0byc3NDfj4gVISLSIiImJx+fn51NfX09bW1mMi+cEHH3Drrbf6yytaWlooKyLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668019e10>"
"<matplotlib.figure.Figure at 0x7fce74a743c8>"
]
}
],
@@ -882,7 +883,7 @@
"\n",
"pos,s = 2, 5\n",
"for i in range(20):\n",
" pos,s = update(pos, s, dog.sense(), 5)\n",
" pos,s = update(pos, s, dog.sense_position(), 5)\n",
" print('time:', i, \n",
" '\\tposition =', \"%.3f\" % pos, \n",
" '\\tvariance =', \"%.3f\" % s)"
@@ -894,26 +895,26 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"time: 0 \tposition = 1.529 \tvariance = 2.500\n",
"time: 1 \tposition = 1.416 \tvariance = 1.667\n",
"time: 2 \tposition = 1.260 \tvariance = 1.250\n",
"time: 3 \tposition = 0.756 \tvariance = 1.000\n",
"time: 4 \tposition = 0.854 \tvariance = 0.833\n",
"time: 5 \tposition = 0.728 \tvariance = 0.714\n",
"time: 6 \tposition = 0.531 \tvariance = 0.625\n",
"time: 7 \tposition = 0.376 \tvariance = 0.556\n",
"time: 8 \tposition = 0.306 \tvariance = 0.500\n",
"time: 9 \tposition = 0.353 \tvariance = 0.455\n",
"time: 10 \tposition = 0.357 \tvariance = 0.417\n",
"time: 11 \tposition = 0.268 \tvariance = 0.385\n",
"time: 12 \tposition = 0.423 \tvariance = 0.357\n",
"time: 13 \tposition = 0.455 \tvariance = 0.333\n",
"time: 14 \tposition = 0.481 \tvariance = 0.312\n",
"time: 15 \tposition = 0.399 \tvariance = 0.294\n",
"time: 16 \tposition = 0.387 \tvariance = 0.278\n",
"time: 17 \tposition = 0.432 \tvariance = 0.263\n",
"time: 18 \tposition = 0.463 \tvariance = 0.250\n",
"time: 19 \tposition = 0.489 \tvariance = 0.238\n"
"time: 0 \tposition = 1.848 \tvariance = 2.500\n",
"time: 1 \tposition = 1.440 \tvariance = 1.667\n",
"time: 2 \tposition = 1.032 \tvariance = 1.250\n",
"time: 3 \tposition = 0.551 \tvariance = 1.000\n",
"time: 4 \tposition = 0.504 \tvariance = 0.833\n",
"time: 5 \tposition = 0.379 \tvariance = 0.714\n",
"time: 6 \tposition = 0.244 \tvariance = 0.625\n",
"time: 7 \tposition = 0.321 \tvariance = 0.556\n",
"time: 8 \tposition = 0.381 \tvariance = 0.500\n",
"time: 9 \tposition = 0.305 \tvariance = 0.455\n",
"time: 10 \tposition = 0.435 \tvariance = 0.417\n",
"time: 11 \tposition = 0.423 \tvariance = 0.385\n",
"time: 12 \tposition = 0.445 \tvariance = 0.357\n",
"time: 13 \tposition = 0.404 \tvariance = 0.333\n",
"time: 14 \tposition = 0.397 \tvariance = 0.312\n",
"time: 15 \tposition = 0.282 \tvariance = 0.294\n",
"time: 16 \tposition = 0.239 \tvariance = 0.278\n",
"time: 17 \tposition = 0.161 \tvariance = 0.263\n",
"time: 18 \tposition = 0.204 \tvariance = 0.250\n",
"time: 19 \tposition = 0.160 \tvariance = 0.238\n"
]
}
],
@@ -999,23 +1000,23 @@
"input": [
"# assume dog is always moving 1m to the right\n",
"movement = 1\n",
"movement_error = 2\n",
"sensor_error = 10\n",
"movement_variance = 2\n",
"sensor_variance = 10\n",
"pos = (0, 500) # gaussian N(0,50)\n",
"\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_variance)\n",
"\n",
"zs = []\n",
"ps = []\n",
"\n",
"for i in range(10):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
" print('PREDICT: {: 10.4f} {: 10.4f}'.format(pos[0], pos[1]),end='\\t')\n",
" \n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
" \n",
" print('UPDATE: {: 10.4f} {: 10.4f}'.format(pos[0], pos[1]))\n",
@@ -1033,24 +1034,24 @@
"output_type": "stream",
"stream": "stdout",
"text": [
"PREDICT: 1.0000 502.0000\tUPDATE: -1.2045 9.8047\n",
"PREDICT: -0.2045 11.8047\tUPDATE: -1.4522 5.4138\n",
"PREDICT: -0.4522 7.4138\tUPDATE: 3.2771 4.2574\n",
"PREDICT: 4.2771 6.2574\tUPDATE: 6.7788 3.8490\n",
"PREDICT: 7.7788 5.8490\tUPDATE: 7.2769 3.6904\n",
"PREDICT: 8.2769 5.6904\tUPDATE: 7.7228 3.6267\n",
"PREDICT: 8.7228 5.6267\tUPDATE: 7.7554 3.6007\n",
"PREDICT: 8.7554 5.6007\tUPDATE: 8.6251 3.5900\n",
"PREDICT: 9.6251 5.5900\tUPDATE: 9.8390 3.5856\n",
"PREDICT: 10.8390 5.5856\tUPDATE: 9.2933 3.5838\n"
"PREDICT: 1.0000 502.0000\tUPDATE: -2.4457 9.8047\n",
"PREDICT: -1.4457 11.8047\tUPDATE: 0.7765 5.4138\n",
"PREDICT: 1.7765 7.4138\tUPDATE: 1.4225 4.2574\n",
"PREDICT: 2.4225 6.2574\tUPDATE: 2.3347 3.8490\n",
"PREDICT: 3.3347 5.8490\tUPDATE: 4.8032 3.6904\n",
"PREDICT: 5.8032 5.6904\tUPDATE: 5.4486 3.6267\n",
"PREDICT: 6.4486 5.6267\tUPDATE: 6.5119 3.6007\n",
"PREDICT: 7.5119 5.6007\tUPDATE: 8.9309 3.5900\n",
"PREDICT: 9.9309 5.5900\tUPDATE: 9.5451 3.5856\n",
"PREDICT: 10.5451 5.5856\tUPDATE: 9.8194 3.5838\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16680dd160>"
"<matplotlib.figure.Figure at 0x7fce79c8bfd0>"
]
}
],
@@ -1063,15 +1064,15 @@
"There is a fair bit of arbitrary constants code above, but don't worry about it. What does require explanation are the first few lines:\n",
"\n",
" movement = 1 \n",
" movement_error = 2\n",
" movement_variance = 2\n",
" \n",
"For the moment we are assuming that we have some other sensor that detects how the dog is moving. For example, there could be an inertial sensor clipped onto the dog's collar, and it reports how far the dog moved each time it is triggered. The details don't matter. The upshot is that we have a sensor, it has noise, and so we represent it with a Gaussian. Later we will learn what to do if we do not have a sensor for the `predict()` step.\n",
"\n",
"For now let's walk through the code and output bit by bit.\n",
"\n",
" movement = 1\n",
" movement_error = 2\n",
" sensor_error = 10\n",
" movement_variance = 2\n",
" sensor_variance = 10\n",
" pos = (0, 500) # gaussian N(0,500)\n",
" \n",
" \n",
@@ -1084,7 +1085,7 @@
"source": [
"Next we initialize the RFID simulator with\n",
"\n",
" dog = DogSensor(pos[0], velocity=movement, noise=sensor_error)\n",
" dog = DogSensor(pos[0], velocity=movement, noise=sensor_variance)\n",
"\n",
"It may seem very 'convenient' to set the simulator to the same position as our guess, and it is. Do not fret. In the next example we will see the effect of a wildly inaccurate guess for the dog's initial position.\n",
"\n",
@@ -1103,7 +1104,7 @@
"Now we just enter our `update() ... predict()` loop.\n",
"\n",
" for i in range(10):\n",
" pos = predict(pos[0], pos[1], movement, sensor_error)\n",
" pos = predict(pos[0], pos[1], movement, sensor_variance)\n",
" print 'PREDICT:', \"%.4f\" %pos[0], \", %.4f\" %pos[1]\n",
"\n",
"Wait, why `predict()` before `update()`? It turns out the order does not matter once, but the first call to `,DogSensor.sense()` assumes that the dog has already moved, so we start with the update step. In practice you will order these calls based on the details of your sensor, and you will very typically do the `sense()` first.\n",
@@ -1114,14 +1115,14 @@
"\n",
"What is this saying? After the prediction, we believe that we are at 1.0, and the variance is now 502.0. Recall we started at 500.0. The variance got worse, which is always what happens during the prediction step.\n",
"\n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
"Here we sense the dog's position, and store it in our array so we can plot the results later.\n",
"\n",
"Finally we call the update function of our filter, save the result in our *ps* array, and print the updated position belief:\n",
"\n",
" pos = update(pos[0], pos[1], Z, movement_error)\n",
" pos = update(pos[0], pos[1], Z, movement_variance)\n",
" ps.append(pos[0])\n",
" print 'UPDATE:', \"%.4f\" %pos[0], \", %.4f\" %pos[1]\n",
" \n",
@@ -1150,20 +1151,20 @@
"%precision 2\n",
"# assume dog is always moving 1m to the right\n",
"movement = 1\n",
"movement_error = 2\n",
"sensor_error = 4.5\n",
"movement_variance = 2\n",
"sensor_variance = 4.5\n",
"pos = (0, 100) # gaussian N(0,50)\n",
"\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_variance)\n",
"\n",
"zs, ps, vs = [], [], []\n",
"for i in range(50):\n",
" pos = predict(pos[0], pos[1], movement, movement_error) \n",
" Z = dog.sense()\n",
" pos = predict(pos[0], pos[1], movement, movement_variance) \n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" vs.append(pos[1])\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
" \n",
"#plt.subplot(121) \n",
@@ -1185,17 +1186,17 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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\ncAMvvPBC9b7o6GgALBYLdrudmJiYOt2viIiISEO0mjBc3ye6jfkE+OcEBQVVfz32OjAwEJfLxfbt\n2zEMg8GDB9c4x+VysX//fgCcTifPP/88y5cv58iRI7jdblwuF717964+/uqrr2bx4sUMHTqU888/\nn4EDB3LppZcSEBDQoJqPhdAf2759OwDXXnvtcbXu27evTvebm5vLkSNHePrpp2t88M3tdpOQkFCj\n3S5dulS/joyMpLCwsEH3IiIiInKqWk0Ybk2OPZUNDw9n6dKlx+2PjIwEqp4Ur127lscee4wuXbpg\nsVi4++678fl81cf27duXDRs2sHbtWr744gseffRR3njjDd59912g9uEQPz7/p8LDw3923wcffIDd\nbq+xLSws7AR3WuXHT6F/97vfVT/FPsZqtZ7wexERERF/USppIr1796a4uBi3203Xrl1rPWbDhg3c\nfvvt1cMWnE4nBw4cIDk5ucZxoaGhXHTRRVx00UX069ePSZMmUVhYSGRkZHW4LS0trT7+wIED9ZqN\n4diT6CNHjjBixIh63ecxMTExtG3bln379nHzzTc3qI0fs9lsuN3uU25HRERE5EQ0m0QTGTp0KKmp\nqUyYMIG0tDT27dtHWloaDz74IBkZGUDVcIF///vf7Nq1i507dzJlyhS8Xm+Ndl599VXee+899uzZ\nw+7du1myZAkdOnSofrocHh5OYmIiixcvBmDHjh18+umn9ao1KSmJyy67jOnTp7N06VL27dvH+vXr\nefzxx1m/fn2d25kyZQqvv/46r7/+Ounp6WzdupVXXnmFefPm1aseqHpv0tLSOHz4MC6X67j3RURE\nRKQxKAyfgh8/ff3pa5PJxMKFCxkwYABTp05lxIgRPPjggwBERUUBMHPmTEJCQrjsssu49dZbOffc\nc0lJSalxjbCwMObOncsll1zCFVdcgdPpZP78+TWO+eMf/8jSpUs555xzePrpp7nqqqtOWu9P/fnP\nf+bKK69k5syZXHDBBUyaNInc3Nw6f2AP4NZbb+XJJ5/kzTffZPTo0dx0002kpaXRrVu3E55XW12/\n+c1vMJvNDBs2jK5du/KXv/ylznWIiIiI1JVp165dtU870EiysrLo2bNnrfuOHj1aPdOCSEOoD50+\nHA4HAHl5eX6uRFoS9QupjfqF1MbhcLB27drjPrh/MnoyLCIiIiJnLIVhERERETljKQyLiIiIyBlL\nYVhEREREzlgKwyIiIiJyxlIYFhEREZEzlsKwiIiIiJyxFIZFRERE5IylMCwiIiIiZyyF4VNUUlLC\nHXfcQc+ePYmPj+e5556rsX/q1Klcc801x503Y8YM4uPjiY+Pr3W/iIiIiDQ9heFTtGDBAjZu3Mh7\n773Hli1bmDhxYo39s2fP5vXXXz/uvOnTp7N582YmTJiAyWT62fY///xz4uPjOXjwYKPXLiIiInKm\ns/q7gNZu7969dO/enZ49e9a6PzQ0tNbtdrsdu91OSEgIhmGc9Dp1OUZERERE6kdPhhto6tSpxMfH\n89Zbb/Hll19WD3k4Nkxi+vTppzQM4tgT4euuuw6AQYMGVbf346fEhw8fZuLEifTu3Zvk5GTuuusu\nDh8+XKOtt99+m/j4eLZv386ll15KUlISAwYMYMeOHafwDoiIiIi0fq3iyfDbO8Y2SbvX917Q4HNn\nzZrFI488wowZMzh8+DCvvfYaACEhIQA89thjTJs2jRkzZpCbm1vv9vv378+WLVvYuHEjd911F598\n8gnt27cHIDo6GoDy8nKuueYakpOTWbx4MVarlT/84Q+MHz+epUuXHjf84pFHHmHy5Mn07NmTbdu2\nYbPZGnz/IiIiIqeDVhGGW6KwsDDCwsIIDAzEarUSExNTY39oaCihoaEEBgY2aIiDzWYjJiaGiIgI\nABwOx3HX+OCDDygsLOTFF1+sDra///3vSU1NZcuWLaSkpNQ4/r777mP06NEAdOzYsd41iYiIiJxu\nWkUYPpUnuKezbdu2UVJSQu/evWtsN5lM7N+//7gwPHDgwOYsT0RERKTFaxVhWH5e165d+cc//nHc\n9p8+RQYIDw9vjpJEREREWg2F4UZwoqnRTrbfbrfjcrl+dv+x4Q8ej+e4fWeffTbvvvsuYWFh1eOI\nRURERKTuNJtEI/jpmGCfz0dOTg45OTm4XC4qKys5evQoOTk5uN3uGsf27duXHTt2kJaWRk5ODmVl\nZTX2d+7cGYvFwpIlSygpKakRnK+88kpiY2O566672LhxI5mZmSxfvpyJEyfidDqb7oZFREREThMK\nw6fIZDId9+T34MGDpKamkpqaykcffcSmTZtISUmhX79+/O9//6tx7KBBg5g4cSL33nsvqampPP30\n0zX2t2nThpkzZ7Jo0SKSk5Pp1q1b9dRqwcHBLF68mPbt23P77bczatQonnjiCWJjYwkICDLine truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAF2CAYAAACLY5UZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4VOX9///nbJnJNslkspJA2AQCQSTsiqAg1togxSoq\nYq361VJUhFarFbVa2tqqFUWtrQpi3eoPBbUqH7FUDYigCCiEXbYkQPY9mWSW8/sDiEYChKyQvB7X\nxUUy5z73eZ9wruHFzT33bTIMw0BEREREpBMyt3cBIiIiIiLtRWFYRERERDothWERERER6bQUhkVE\nRESk01IYFhEREZFOS2FYRERERDothWERERER6bROGoarq6v55S9/idvtxuVyceuttwLg9Xq56aab\ncDqdJCcns3jx4lYvVkRERESkJVlP1mD27Nns3r2bLVu2EBsby9atWwGYN28emZmZZGdns2HDBtLT\n0xk1ahRJSUmtXrSIiIiISEswnWgHuurqatxuN+vXr6dfv371jg0bNozZs2czdepUAC6++GImTpzI\n7bff3roVi4iIiIi0kBNOk9ixYwcmk4mlS5cSHx/PgAEDePvtt+uO9e3bl2nTpvHGG2/Qv39/tm/f\n3iZFi4iIiIi0hBNOkygrK6O2tpY9e/awf/9+Vq9ezcSJE9m5cyeVlZWEhYWxefNmhgwZQnh4OFlZ\nWW1Vt4iIiIhIs50wDIeEhOD3+/nNb35DUFAQF1xwAX369GHNmjWEhoZSWVnJxo0bAbjjjjsIDw8/\npo8VK1a0TuUiIiIiIj8wfvz4U2p/wjDcs2dPTCbTMa8bhkGfPn3YunUraWlpAGzZsoVJkyY12E9K\nSsopFSUdm9vtZsmSJYwdO7a9S5HTiJ4LaYieC2mIngtpiNvtZtWqVad83gnnDLtcLsaOHcvjjz+O\nz+cjIyODHTt2MGrUKKZMmcL8+fMpLS3lk08+Yc2aNUyePLnJNyAiIiIi0tZOurTawoUL+cUvfkFk\nZCRJSUm88sorxMfHM3v2bLZt20bXrl1xuVwsXLiQxMTEtqhZRERERKRFnDQMd+/enU8++eTYE61W\nFixYwIIFC1qjLungNHVGGqLnQhqi50IaoudCWoq2Y5Z2oTcxaYieC2mIngtpiJ4LaSkKwyIiIiLS\naZ10mkRr83q9FBcXN7hqhXRMxcXFAPh8vib3YRgGLpcLm83WUmWJiIhIJ9SuYdjr9VJYWEhsbCxm\nswappfECgQB5eXm43W4FYhEREWmydk2gxcXFCsLSJGazmdjY2LpRZhEREZGmaNcUajKZFISlycxm\ns6bXiIiISLMoiYqIiIhIp6UwLCIiIiKdlsKwiIiIiHRaCsMiIiIi0mkpDMtpacSIETz++OPtXYaI\niIh0cArDclrSKhEiIiLSFhSGm2j16tWkpaVx4403kpKSwqJFi5gwYQJnn302K1euBKCsrIzf/va3\nDBo0iJSUFK655hp27txZ18euXbu44YYbGDx4MD179mTs2LG89tpr9a7j9Xp54IEHGDJkCL169WL0\n6NE899xzdcezsrJISkoiJyen7rW//e1vjBw5sl4/b7zxBklJSWzevJn09HR69erF8OHDyczMBKC2\ntpY//vGPDBkyhLPOOovLLruMdevW1Z0/YsQIbr/9dgYMGMAtt9zC3Llz6dOnD/fee+8x1xk7diy9\nevXiggsu4PXXX693PCkpiVdffZWf/vSn9O7dm/T0dHbt2lXvOklJSWRnZ/P444+TlJREUlIS8+bN\nO6U/HxEREZHGaPftmBurS2Jig68f+F4IbE77psjPz2f69OkkJydz//33s3jxYv773//y3HPPcf75\n53Pddddhs9l46aWXiIiI4Pnnn+fqq69m5cqVhISEUFRUxODBg5k1axZut5uMjAzuvvtuEhMTGTt2\nLAAvvvgib775Js899xw9evRg7969ZGVlnbS2442szpkzh9tvv52UlBQ2bdpUt3vb7Nmz2b59O888\n8wxdunRhyZIlXHPNNaxcuZL4+HhMJhMul4uXXnqJyZMnc8MNN/Dvf/+bn/70p/zmN7/B7Xbzyiuv\n8Oc//5mHH36YIUOG8PXXXzN79mxcLheXXHJJXQ0vvPACf/nLX3A6ncyYMYOHHnqIl19+GYBly5bh\n9/u59NJLmTRpEtOnTwcgJCSkWX9WIiIiIg05Y8Lw6cjtdjN8+HAqKipYunQpI0eOpLq6mhUrVrBy\n5UrWr1/P+vXriYmJAWDu3Lm8+eab/Pe//+Wyyy5j+PDhDB8+vK6/qVOn8vLLL7NixYq6MJyVlUVc\nXByjR48GIPE4If+HDMNo8PXbbruNCRMmANCtWzcAdu/ezTvvvMP777/PoEGDAJg1axZLly5lyZIl\nzJgxA4Bx48YxdOhQ3G4348aNIy0tDbfbTXZ2Nm63m3nz5jFz5kwmTZoEHB4FzsjI4NVXX60Xhm+4\n4QZGjBgBwNVXX81TTz1VdywqKgoAi8VCaGgo0dHRjbpfERERkaY4Y8LwqY7otuQI8PE4HI66349+\nbbfb8Xg8bN68GcMwOO+88+qd4/F42L9/PwDV1dU88cQTfPTRR+Tm5uL1evF4PAwYMKCu/c9+9jPe\neustzj//fM4991xGjBhBeno6QUFBTar5aAj9vs2bNwNw5ZVXHlPrvn37GnW/BQUF5Obm8uijj9b7\n4JvX66Vr1671+u3Zs2fd15GRkZSUlDTpXkRERESa64wJw2eSo6OyTqeTZcuWHXM8MjISODxSvGrV\nKu6//3569uyJxWLhlltuIRAI1LU955xz+OKLL1i1ahWff/459913H6+99hpvvvkm0PB0iO+f/0NO\np/O4x95++21CQ0PrvRYeHn6COz3s+6PQf/jDH+pGsY+yWq0n/F5ERESkvSiVtJIBAwZQVlaG1+ul\nd+/eDbb54osvuPHGG+umLVRXV5OdnU1qamq9dmFhYVxyySVccsklDBkyhBkzZlBSUkJkZGRduK2o\nqKhrn52dfUqrMRwdic7NzeXCCy88pfs8Kjo6mvj4ePbt28e1117bpD6+z2az4fV6m92PiIiIyIlo\nNYlWcv7555OWlsYvf/lLMjIy2LdvHxkZGdx1113s2bMHODxd4N1332X79u1s2bKFmTNn4vf76/Xz\n/PPPs2TJEnbt2sXOnTt55513SExMrBtddjqd9OjRg7feeguAzMxMli9ffkq19urVi4kTJ3L33Xez\nbNky9u3bx9q1a/n973/P2rVrG93PzJkzWbBgAQsWLODbb7/lm2++4dlnn2XRokWnVA8c/tlkZGRw\n8OBBPB7PMT8XERERkZagMNwM3x99/eHXJpOJV155heHDhzNr1iwuvPBC7rrrLgBcLhcADz74ICEh\nIUycOJGf//znDB06lMGDB9e7Rnh4OM899xw/+clPmDRpEtXV1bz00kv12jzyyCMsW7aMs88+m0cf\nfZTLL7/8pPX+0JNPPsnkyZN58MEHueCCC5gxYwYFBQWN/sAewM9//nMefvhhXn/9dSZMmMDUqVPJ\nyMjgrLPOOuF5DdV1zz33YDabGTNmDL1792b+/PmNrkNERESksUzG8ZYdaCErVqwgJSWlwWP5+fl1\nKy2INIWeoY7D7XYDUFhY2M6VyOlEz4U0RM+FNMTtdrNq1SrGjx9/SudpZFhEREREOi2FYRERERHp\ntBSGRURERKTTUhgWERERkU5LYVhEREREOi2FYRERERHptBSGRURERKTTUhgWERERkU5LYVhERERE\nOi2F4WYqLy/npptuIiUlhaSkJObNm1fv+KxZs7jiiiuOOe+BBx4gKSmJpKSkBo+LiIiISOtTGG6m\nl19+mS+//JIlS5awceNGpk+fXu/4H//4RxYsWHDMeXfffTcbNmzgl7/8JSaT6bj9r169mqSkJHJy\nclq8dhEREZHOztreBZzpdu/eTZ8+fUhJSWnweFhYWIOvh4aGEhoaSkhICIZhnPQ6jWkjIiIiIqdG\nI8NNNGvWLJKSkvj3v//NmjVr6qY8HJ0mcffddzdrGsTREeEpU6YAMHLkyLr+vj9KfPDgQaZPn86A\nAQNITU3l5ptv5uDBg/X6euONN0hKSmLz5s2kp6fTq1cvhg8fTmZmZjN+AiIiIiJnvjNiZPiNzOta\npd+rBrzc5HPnzp3LnDlzeOCBBzh48CAvvPACACEhIQDcf//93HnnnTzwwAMUFBSccv/Dhg1j48aN\nfPnll9x888188MEHdOnSBYCoqCgAqqqquOKKK0hNTeWtt97CarXy17/+lRtuuIFly5YdM/1izpw5\n3H777aSkpLBp0yZsNluT719ERESkIzgjwvDpKDw8nPDwcOx2O1arlejo6HrHw8LCCAsLw263N2mK\ng81mIzo6moiICADcbvcx13j77bcpKSnh6aefrgu2f/rTn0hLS2Pjxo0MHjy4XvvbbruNCRMmANCt\nW7dTrklERESkozkjwnBzRnA7sk2bNlFeXs6AAQPqvW4ymdi/f/8xYXjEiBFtWZ6IiIjIae+MCMNy\nfL179+bFF1885vUfjiIDOJ3OtihJRERE5IyhMNwCTrQ02smOh4aG4vF4jnv86PQHn893zLGBAwfy\n5ptvEh4eXjePWEREREQaT6tJtIAfzgkOBALk5eWRl5eHx+OhtraW/Px88vLy8Hq99dqec845ZGZm\nkpGRQV5eHpWVlfWOd+/eHYvFwjvvvEN5eXm94Dx58mRiY2O5+eab+fLLL9m7dy8fffQR06dPp7q6\nuvVuWERERKSDUBhuJpPJdMzIb05ODmlpaaSlpfHee++xfv16Bg8ezJAhQ/jqq6/qtR05ciTTp0/n\n1ltvJS0tjUcffbTe8ZiYGB588EFeffVVUlNTOeuss+qWVgsODuatt96iS5cu3HjjjYwfP5Line truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653bd9a20>"
"<matplotlib.figure.Figure at 0x7fce74a4a710>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAGDCAYAAADZHo16AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X101NW97/HPTDLJJDMTAhGKSSASbZAYrYVeeiOQUOgD\nVDDkKqR2oaXgKZXjAjn1SC9dp2BpPZ66FAk9Ph2TIj5caTwEj621VR4SI6K1wsKQhMiDSKCooCCZ\nPEwmmftHnIEMA5pA5rdD3q+1WGR+M7NnB76L9cnm+9vbFggEAgIAAAAQYrd6AgAAAIBpCMkAAABA\nGEIyAAAAEIaQDAAAAIQhJAMAAABhCMkAAABAGEIyABhoy5YtstvtqqystHoqANAvEZIB4DRr1qyR\n3W7XM888c8ZzPp9PiYmJysvLi8pcbDZbVD4HAHAmQjIAnGbKlCmSpE2bNp3x3BtvvKGWlhZ9//vf\n7/V55Ofnq7m5WRMmTOj1zwIAnCnW6gkAgEmGDh2qr33ta9q8efMZzwWvBYN0b7LZbIqLi+v1zwEA\nRMZKMgCEmTp1qt5//329//77Xa5v2rRJQ4cO1bXXXitJevLJJzVlyhSlpaXJ6XTqsssu05133qnj\nx4+fMWawx7iiokIrV65UZmamEhISlJWVpZdffjn0umnTpslut4d+VVRURJzjiy++qMLCQmVkZMjp\ndCo1NVVz587VoUOHurxu+fLlstvt2rt3r77zne/I7XYrKytLTz31VMRxDx8+rPnz52vYsGFKSEjQ\nV7/6Vd19991qbGzs8rq33npLU6ZMUXJyslwulyZNmqS//e1vX/hnCwB9BSEZAMJEarloamrSm2++\n2WUV+YEHHpAk3XXXXXr44YdVUFCgRx999JztGA899JBWrVqlOXPm6KGHHtLEiRO7hPF//dd/1dNP\nP62lS5dKOntf8uOPP66PPvpICxYs0KOPPqo5c+Zo/fr1mjBhglpbW894/YwZMzR69Gjdf//98ng8\nmjNnjnbu3NnlNYcPH9bYsWP11FNP6cYbb9Tvfvc7/ehHP9L69eu1b9++0Os2bdqkCRMm6MiRI1q+\nfLnuvfdeHTt2TBMnTtSuXbvO+r0DQJ8SAAB04fP5AgMGDAjMnj07dO2vf/1rwGazBdatWxe6dvjw\n4TPeu3z58oDNZgu89dZbXa5v3rw5YLPZAsOGDQscP368y3Pt7e1njBN8fUVFRcQ5Hjp06Ixra9as\nCdhstsAf/vCH0LVly5YFbDZboLi4OHTtwIEDAbvdHlixYkWX9996660Bm80WeO2117pcb25uDpw4\ncSI01yuuuCJwzTXXBHw+X+g1J06cCAwePDhQVFQUcb4A0NewkgwAYRwOhyZPntylL3nTpk2y2+36\n7ne/G7p26aWXhr4+efKkjh49qlGjRkmS9uzZE3HsBQsWaMCAAV2u2e3d/6c4NTU19LXX69XRo0eV\nlZV11s++6aabQl8PHz5cKSkpamhoCF3r6OhQeXm5Jk2apPHjx3d5r9PpVFJSkiRp+/bt2rt3r2bO\nnKkTJ07o6NGjOnr0qHw+n6699tqztocAQF9DSAaACKZMmaLDhw+rvr5eUmdI/uY3v6nk5OTQa955\n5x3dcMMNSk5O1oABAzRkyBD94Ac/kCS1tLREHDc7O/uCzG/Pnj2aPXu2UlJS5PF4NGTIEI0bN+6s\nn316oJckl8sln88Xevzxxx+rsbHxC+cXDOC//OUvNWTIkC6/Xn31VR09evR8vzUAMAK7WwBABN/7\n3vckde5oMXToUL3zzjtatmxZ6PkDBw5owoQJysjI0L333qvMzEzFxcXp73//u5YsWaJAIBBx3NND\ndk+dPHlSEyZMUGxsrJYuXaorr7xSCQkJOnTokH70ox+d9bMvpF/96le67rrrev1zAMAqhGQAiGD4\n8OHKzs7Wxo0blZaWpvb2dk2dOjX0/IYNG9Tc3KyXXnpJl112Wej6/v37e31umzZt0ocffqhNmzZp\n4sSJoesbN27s8ZiDBw+Wx+P5whvvLr/8ckkK7WgBABcr2i0A4CymTJmiLVu2aNOmTRo8eLDGjBkT\nei4mJqbL75LU1tamhx9+uNfnFemzA4GAiouLezym3W5XYWGhNm/erNdee63Lcy0tLTp58qQkacyY\nMRoxYoRWr159xrZwknTw4MEezwEATMJKMgCcxZQpU/Tggw/qySef1PXXX9/lualTp8rpdGr69On6\np3/6J7W0tOiZZ56R3+/v8eft27dPW7dulSTV1tZKkv7617/qgw8+kCSNGzdOI0aM0Pjx4zV48GDN\nmTNHd9xxh2JiYlReXq5jx4596c+K1JLx7//+79q4caO++93vav78+crJydGHH36otWvXqqysTNdc\nc41sNpsee+wxTZs2TVdffbV+/OMfa+jQodq3b59eeukljRkzRr///e97/GcAAKYgJAPAWeTl5Skx\n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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668c71128>"
"<matplotlib.figure.Figure at 0x7fce79d0d320>"
]
},
{
@@ -1270,17 +1271,17 @@
"source": [
"For many purposes the code above suffices. However, if you write enough of these filters the functions will become a bit annoying. For example, having to write\n",
"\n",
" pos = predict(pos[0], pos[1], movement, movement_error) \n",
" pos = predict(pos[0], pos[1], movement, movement_variance) \n",
" \n",
"is a bit cumbersome and error prone. Let's investigate how we might implement this in a form that makes our lives easier.\n",
"\n",
"First, values for the movement error and the measurement errors are typically constant for a given problem, so we only want to specify them once. We can store them in instance variables in the class. Second, it is annoying to have to pass in the state (pos in the code snippet above) and then remember to assign the output of the function back to that state, so the state should also be an instance variable. Our first attempt might look like:\n",
"\n",
" class KalmanFilter1D:\n",
" def __init__(self, initial_state, measurement_error, movement_error):\n",
" def __init__(self, initial_state, measurement_variance, movement_variance):\n",
" self.state = initial_state\n",
" self.measurement_error = measurement_error\n",
" self.movement_error = movement error\n",
" self.measurement_variance = measurement_variance\n",
" self.movement_variance = movement_variance\n",
"\n",
"That works, but I am going to use different naming. The Kalman filter literature has settled on one letter notations for each of these concepts, and so you might as well start getting exposed to it now. At first it seems impossiblely terse, but as you become familiar with the nomenclature you'll see that the math formulas in the textbooks will have an exact one-to-one correspondance with the code. Unfortunately there is not a lot of meaning behind the names chosen; you will just have to memorize them.\n",
"\n",
@@ -1413,15 +1414,15 @@
"metadata": {},
"source": [
"#####Exercise:\n",
"Modify the values of `movement_error` and `sensor_error` and note the effect on the filter and on the variance. Which has a larger effect on the value that variance converges to. For example, which results in a smaller variance:\n",
"Modify the values of `movement_variance` and `sensor_variance` and note the effect on the filter and on the variance. Which has a larger effect on the value that variance converges to. For example, which results in a smaller variance:\n",
"\n",
" movement_error = 40\n",
" sensor_error = 2\n",
" movement_variance = 40\n",
" sensor_variance = 2\n",
" \n",
"or:\n",
"\n",
" movement_error = 2\n",
" sensor_error = 40 "
" movement_variance = 2\n",
" sensor_variance = 40"
]
},
{
@@ -1472,7 +1473,7 @@
"source": [
"Now we need to write the Kalman filter processing loop. As with our previous problem, we need to perform a cycle of predicting and updating. The sensing step probably seems clear - call `volt()` to get the measurement, pass the result into `update()` function, but what about the predict step? We do not have a sensor to detect 'movement' in the voltage, and for any small duration we expect the voltage to remain constant. How shall we handle this?\n",
"\n",
"As always, we will trust in the math. We have no known movement, so we will set that to zero. However, that means that we are predicting that the temperature will never change over time. If that is true, then over time we should become extremely confident in our results. Once the filter has enough measurements it will become very confident that it can predict the subsequent temperatures, and this will lead it to ignoring measurements that result due to an actual temperature change. This is called a *smug* filter, and is something you want to avoid. So we will add a bit of error to our prediction step to tell the filter not to discount changes in voltage over time. In the code below I set `movement_error = .2`. This is just the expected variance in the change of voltage over each time step. I chose this value merely to be able to show how the variance changes through the update and predict steps. For an real sensor you would set this value for the actual amount of change you expect. For example, this would be an extremely small number if it is a thermometer for ambient air temperature in a house, and a high number if this is a thermocouple in a chemical reaction chamber. We will say more about selecting the actual value in the next chapter. \n",
"As always, we will trust in the math. We have no known movement, so we will set that to zero. However, that means that we are predicting that the temperature will never change over time. If that is true, then over time we should become extremely confident in our results. Once the filter has enough measurements it will become very confident that it can predict the subsequent temperatures, and this will lead it to ignoring measurements that result due to an actual temperature change. This is called a *smug* filter, and is something you want to avoid. So we will add a bit of error to our prediction step to tell the filter not to discount changes in voltage over time. In the code below I set `movement_variance = .2`. This is just the expected variance in the change of voltage over each time step. I chose this value merely to be able to show how the variance changes through the update and predict steps. For an real sensor you would set this value for the actual amount of change you expect. For example, this would be an extremely small number if it is a thermometer for ambient air temperature in a house, and a high number if this is a thermocouple in a chemical reaction chamber. We will say more about selecting the actual value in the next chapter. \n",
"\n",
"Let's see what happens. "
]
@@ -1482,7 +1483,7 @@
"collapsed": false,
"input": [
"variance = 2.13**2\n",
"movement_error = .2\n",
"movement_variance = .2\n",
"actual_voltage = 16.3\n",
"\n",
"N=50\n",
@@ -1494,7 +1495,7 @@
" P = 1000, # initial variance \n",
" # large says 'who knows?'\n",
" R=variance, # sensor noise\n",
" Q=movement_error) # movement noise\n",
" Q=movement_variance) # movement noise\n",
"\n",
"for i in range(N):\n",
" kf.predict(movement)\n",
@@ -1521,17 +1522,17 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668055668>"
"<matplotlib.figure.Figure at 0x7fce7dd40780>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAAGDCAYAAAAyKTZ5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VOXd///3zCSTPYQMIQIBA0k1YNgKUhVIRAWNW1sU\npdLEinrrl/jzq4ILrbW2tPampfSuW4vVtixuRdyLVBS+oQgJoCy3IGgIYAwSIAFC9szy+yPMSOSQ\nmQkkc5K8ng/nwcyZa858kM9D37m4znUsu3bt8ggAAABAC9ZQFwAAAACYEUEZAAAAMEBQBgAAAAwQ\nlAEAAAADBGUAAADAAEEZAAAAMEBQBgCTKioqUkZGhjZu3BjqUgCgWyIoA8C3vP7668rIyNDbb799\nynuNjY0aPny4pk2b1iG1WCyWDvkeAMCpCMoA8C3jx4+XJBUWFp7y3pYtW9TQ0KDs7Ox2r2PMmDHa\nunWrRo8e3e7fBQA4VVioCwAAs0lKSlJGRoaKiopOec97zBum25PFYpHdbm/37wEAGGNGGQAMZGVl\nqaysTF999VWL44WFherVq5cGDx4sSXrjjTd0++23a/z48Ro6dKguu+wy/eY3v1FVVdUp5/SuOd6w\nYYP+8Y9/6PLLL9ewYcN05ZVXas2aNb5xd911lzIyMnyPDRs2GNa4atUq5efna8KECRo6dKjGjRun\n2bNnq7y8vMW4p556ShkZGfryyy912223aeTIkbryyiv15ptvGp63vLxcjz32mLKzszVs2DBNmjRJ\nv/vd71RTU9Ni3LZt23T77bdr9OjRGjFihPLy8rRt2zb//3IBoJNgRhkADIwfP17PPfecCgsLdeON\nN0qS6urqtHXrVl133XW+cX/729/Uu3dv3X777YqNjdXOnTv1yiuv6H//93/1yiuvGJ574cKF+uyz\nzzR58mT16tVL27dvV1lZme/922+/Xddee62Ki4u1YMGC065T/uc//6mjR4/qRz/6kXr16qW9e/fq\npZde0oYNG/Tee++dMhudn5+vrKwsTZw4Ua+99ppmz57tC+Ne5eXlmjJlio4dO6abbrpJ5513ng4d\nOqQ33nhD119/vW/s+vXrdeeddyotLU333HOPLBaLli1bpry8PC1dulTf+c532vYvHgBMhKAMAAZG\njBih2NhYFRUV+YLyJ598IqfT2WLZxQsvvKDevXu3+GxCQoKefvppbdu2TcOGDTvl3Nu3b9c777yj\nuLg43zG32+17PmbMGEnNM9ALFiw4bY2//OUvlZyc3OLYwIEDNXv2bH344YfKyclp8d5NN92k3Nxc\nSdKll16qyy+/XKtWrWoRlOfPn6+DBw9qyZIlLdZG33777WpqavLV+otf/EKDBg3Sa6+9pvDwcEnS\nDTfcoIkTJ+rZZ5/VH//4x9PWDQCdBUsvAMBAeHi4Lr744hbrlAsLC2W1WjVu3DjfsZNDcnV1tSor\nKzVo0CBJ0pdffml47ltuuaVFSJYkqzX4/xyfHJJra2tVWVmp1NTU0373lVde6Xvet29fJSQk6MCB\nA75jbrdbK1eu1EUXXXTKBYQRERGKjY2VJO3YsUNffvmlrrrqKh0/flyVlZWqrKxUY2OjBg8ezHZ2\nALoMZpQB4DTGjx+vlStXas+ePRo4cKAKCws1bNgwxcfH+8Zs375dTz31lDZt2qTq6uoWn29oaDA8\nb1pa2lmpb9++fXrqqaf0n//8R8eOHfP73d+e+Y6KivLNEktSZWWlamtrlZ6e3ur3ekP4k08+qSef\nfPKU9202W8C/BwAwM4IyAJyGd+a4qKhISUlJ2rFjh/Lz833vl5WVadq0aerbt6/uv/9+9e/fX+Hh\n4dq+fbvmzZsnj8djeN6Tg3ZbVVdXa9q0abLZbLrrrrs0aNAgRUREqLy8XI888shpv/tsuvfeezVy\n5Mh2/x4ACBWCMgCcRt++fZWenq7169crOTlZLpdLWVlZvvc/+OAD1dfX67nnnlNKSorv+Ld3ymgP\nhYWFOnz4sBYuXKjvfe97vuPr169v8zkTExMVExOjL774otVx/fv3lyRFR0fr4osvbvP3AYDZsUYZ\nAFoxfvx4bdiwQYWFhUpMTFRmZqbvPe8Sg5OXGjQ1Nenll19u97qMvtvj8WjRokVtPqfVatXEiRNV\nVFSkTZs2tXivoaHBt7QkMzNTKSkpWrx48SlbxknS119/3eYaAMBMmFEGgFaMHz9ef//73/Xmm2+e\ncje+rKwsRURE6O6779ZNN92khoYGvfPOO3I6nW3+vtLSUn3yySeSpJKSEknS2rVrtX//fknSd7/7\nXfXv31+jRo1SYmKiHnnkEf34xz+W1WrVypUrdfTo0TZ/tyQ98MADWr9+vaZPn66bb75Z5513ng4f\nPqw333xTf/rTn5SRkSGLxaJf/epXuuuuu3Tddddp8uTJSkpKUmlpqQoKCpSZmanf/va3Z1QHAJgB\n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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f165c042e80>"
"<matplotlib.figure.Figure at 0x7fce74adaa90>"
]
},
{
@@ -1647,9 +1648,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653b8c4a8>"
"<matplotlib.figure.Figure at 0x7fce74aac3c8>"
]
}
],
@@ -1684,25 +1685,25 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30\n",
"sensor_variance = 30\n",
"movement_sensor = 30\n",
"pos = (0,500)\n",
"\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_variance)\n",
"\n",
"zs = []\n",
"ps = []\n",
"vs = []\n",
"\n",
"for i in range(100):\n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
" vs.append(pos[1])\n",
"\n",
" pos = predict(pos[0], pos[1], movement+ random.randn(), movement_error)\n",
" pos = predict(pos[0], pos[1], movement+ random.randn(), movement_variance)\n",
"\n",
"plt.plot(ps, label='filter')\n",
"plt.plot(zs, linestyle='dashed', c='r', label='measurement')\n",
@@ -1718,17 +1719,17 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAF2CAYAAAB+nR6pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd0VVXax/Hvvbk3N500Qgu9hqYUKdIExApSBbsUEWRE\ncXTEwYroWFBR1HcclKagMHQLMAJSpamAAoHQpCQC6ZByb259/whEQxJISEIS+H3WYpGcs8/ezwln\nhSc7+zzb4PF4PIiIiIiIyEUZyzoAEREREZGKQImziIiIiEghKHEWERERESkEJc4iIiIiIoWgxFlE\nREREpBCUOIuIiIiIFIISZxERERGRQrhk4rxs2TI6duyIj48Pw4YNyzn+9ttv06hRI4KCgmjRogVf\nf/11ruumTp1K1apVCQ0NZcKECSUfuYiIiIjIFWS6VIPg4GCeffZZVq9eTWZmZs5xs9nMkiVLaNas\nGZs3b+b2229n165d1K1bl23btjFx4kQ2bdpEpUqV6Ny5M61ateLuu+8u1ZsRERERESktl5xx7tat\nG/379yc0NDTX8aeeeopmzZoBcOONN1KvXj127NgBwMKFCxk4cCBRUVFUr16dRx55hHnz5pVC+CIi\nIiIiV0ah1zhfbGfulJQUDhw4QPPmzQE4cOAAjRs35oMPPuCZZ56hadOmxMTEFD9aEREREZEyUujE\n2WAwFHhu1KhRDB06lMaNGwOQkZFBQEAAR44c4dChQwQGBpKenl78aEVEREREysgl1zifV9CM84QJ\nE0hJSeHLL7/MOebv7096ejoffPABAEuWLCEgICDf69esWVOUeEVERERELkvPnj2LdX2hE+f8Zpyn\nTJnCqlWrWLduHSbTn101atSI/fv353weHR1NkyZNCuw7KiqqsGHINSAsLIzFixfTrVu3sg5Fygk9\nE5IfPReSHz0Xkp+wsDA2bdpU7H4uuVTD7XZjs9lwOp24XC6ysrJwOp3Mnj2b//znPyxfvhx/f/9c\n19x9990sXryY6Oho4uLimDFjBkOGDCl2sCIiIiIiZeWSifPnn3+On58fb731FnPmzMHX15fXX3+d\niRMncuzYMerVq0dgYCCBgYG8+eabALRr146XX36Z7t2706JFC4YMGaJSdCIiIiJSoRk8FyuXcQWs\nWbNGSzUkl7CwMPbt20dERERZhyLlhJ4JyY+eC8mPngvJz/mlGsVd46wtt6Vc0g9TciE9E5IfPReS\nHz0XUlqUOIuIiIiIFEKhq2qIiIiIlDaHw0FKSspF94+4mJSUFACcTmdJhiXlnMfjISQkBLPZXKrj\nKHEWERGRcsHhcJCUlERERARGo34pLoXndruJj48nLCysVJNnPZUiIiJSLqSkpChplstiNBqJiIjI\n+Y1DqY1Tqr2LiIiIFJLBYFDSLJfNaDRe9hKfQo9Rqr2LiIiIiFwllDiLiIiIiBSCEmcRERERkUJQ\n4iwiIiJSAtLS0hgxYgRRUVFERkYyZcqUXOfHjRvHoEGD8lz30ksvERkZSWRkZL7npfxQ4iwiIiJS\nAr744gt++uknFi9ezK5duxg9enSu86+99hrTp0/Pc9348ePZuXMno0aNuujLbZs3byYyMpK4uLgS\nj10KR3WcRURERErAkSNHaNSoUYFbfgcEBOR73N/fH39/f/z8/PB4PJccpzBtpHRoxllERESkGMaN\nG0dkZCTz5s1j69atOcsuzi/VGD9+fLGWYpyfaR48eDAAHTp0yOnvr7PPJ0+eZPTo0TRr1ozmzZsz\ncuRITp48mauv+fPnExkZyZ49e+jduzf169enXbt27N27txhfgWuHZpxFRESkwqhx/6el1nfc3JGX\ndd2kSZN4/vnneemllzh58iSfffYZAH5+fgC8+OKLPPPMM7z00kskJiYWuf8bbriBXbt28dNPPzFy\n5EiWL19O9erVAQgNDQUgMzOTQYMG0bx5cxYtWoTJZOKtt95i2LBhrFixIs8SkOeff56xY8cSFRXF\n7t27S32r6quFEmcRERGRYggMDCQwMBCLxYLJZCI8PDzX+YCAAAICArBYLJe1zMJsNhMeHk6lSpUA\nCAsLyzPG0qVLSU1N5aOPPspJgl9//XVat27Nrl27aNWqVa72jz/+OL169QKgVq1aRY7pWqXEWURE\nRCqMy50Vvtrt3r2btLQ0mjVrluu4wWDg+PHjeRLn9u3bX8nwrhpKnEVERESuAg0aNGDmzJl5jl84\nOw0QFBR0JUK66ihxFhERESkhFysnd6nz/v7+2Gy2As+fX4LhdDrznGvRogULFy4kMDAwZ92zlDxV\n1RAREREpIReuYXa73cTHxxMfH4/NZsNut5OQkEB8fDwOhyNX2+uvv569e/eyYcMG4uPjycjIyHW+\nTp06eHl5sWzZMtLS0nIl2f379yciIoKRI0fy008/cfToUVatWsXo0aOxWq2ld8PXGCXOIiIiIiXA\nYDDkmVGOi4ujdevWtG7dmm+//ZYdO3bQqlUr2rRpwy+//JKrbYcOHRg9ejR/+9vfaN26NZMnT851\nvnLlyrzyyivMnTuX5s2b07Bhw5xydL6+vixatIjq1aszfPhwevbsycSJE4mIiMDb2ztPnHJ5DJ4y\nrqK9Zs2aAguFy7UpLCwMgKSkpDKORMoLPROSHz0XV5+EhAQqV65c1mFIBVbQMxQWFsamTZvo2bNn\nsfrXjLOIiIiISCEocRYRERERKQQlziIiIiIihaDEWURERESkEJQ4i4iIiIgUghJnEREREZFCUOIs\nIiIiIlIISpxFRERERApBibOIiIiISCEocRYRERERKQQlziIiIiJSbrVv35733nuvrMMAlDiLiIiI\nSDlmMBgK3dbhdOHxeEotFiXOIiIiIsWwefNmWrduzfDhw4mKimLWrFn06tWLli1bsnHjRgDOnj3L\ns88+y3XXXUdUVBT33nsvBw8ezOnj0KFDDBs2jFatWlGvXj26devGl19+mWsch8PBSy+9RJs2bahf\nvz6dO3dm2rRpOedPnDhBZGQkcXFxOcfeffddOnTokKuf+fPnExkZyZ49e+jduzf169enXbt27N27\nFwC73c5rr71GmzZtaNiwIXfddRc///xzzvXt27dn7NixNGvWjEcffZRJkybRqFEjJkyYkGecbt26\nUb9+fW666Sa++uqrXOcjIyOZO3cu/fr1o0GDBvTu3ZtDhw7lGicyMpLY2Fjee+89IiMjiYyMZMqU\nKQX+W+w4nMD3vxwr8HxxmUqtZxEREZFSUL1GjXyP//GXhLE47S9HQkICo0ePpnbt2rz44ossWLCA\n1atXM23aNLp06cKDDz6I2Wxm9uzZVKpUiU8//ZR77rmHjRs34ufnR3JyMq1atWLcuHGEhYWxYcMG\nxo8fT40aNejWrRsAM2fOZOHChUybNo26dety9OhRTpw4ccnYCpqxff755xk7dixRUVHs3r0bs9kM\nwFNPPUVMTAwff/wx1atXZ/Hixdx7771s3LiRqlWrYjAYCAkJYfbs2fTv359hw4Yxb948+vXrx9NP\nP01YWBhz5szhX//6F2+88QZt2rTh119/5amnniIkJITbbrstJ4bPPvuMN998k6CgIMaMGcPEiRP5\n4osvAFixYgUul4s77riDvn37Mnr0aAD8/PwKvFe328PW/ae4tW2dQv27FZUSZxEREZFiCgsLo127\ndqSnp7NkyRI6dOiA1WplzZo1bNy4kR07drBjxw4qV64MwKRJk1i4cCGrV6/mrrvuol27drRr1y6n\nv/vuu48vvviCNWvW5CTOJ06coEqVKnTu3BmAGgX8QHChgpYuPP744/Tq1QuAWrVqAXDkyBGWLVvG\nd999x3XXXQfAuHHjWLJkCYsXL2bMmDEA9OjRg7Zt2xIWFkaPHj1o3bo1YWFhxMbGEhYWxpQpU3ji\niSfo27cvkD27vGHDBubOnZsrcR42bBjt27cH4J577uHDDz/MORcaGgqAl5cX/v7+hIeHX/Jem9UK\n5a6uLQv1dbkcSpxFRESkQinqTHFJziwXxMfHJ+fv8x9bLBZsNht79uzB4/HQqVOnXNfYbDaOHz8O\ngNVq5f3332fVqlWcPn0ah8OBzWajWbNmOe0HDhzIokWL6NKlCzfeeCPt27end+/eeHt7X1bM5xPW\nv9qzZw8Ad999d55Yjx37cwnExe43MTGR06dPM3ny5Fwv9TkcDmrWrJmr33r16uV8HBwcTGpq6mXd\ny3lB/pZiXX8pSpxFRERESsn52d6goCBWrFiR53xwcDCQPQO9adMmXnzxRerVq4eXlxePPvoobrc7\np+3111/P9u3b2bRpE1u2bOGFF17gyy+/ZOHChUD+SzL+ev2FgoKCCjy3dOlS/P39cx0LDAy8yJ1m\n++vs9quvvpozO36eyWS66Ofl3SVfDly2bBkdO3bEx8eHYcOG5Rx3OByMGDGCoKAgateuzYIFC3Jd\nN3XqVKpWrUpoaGiexeIiIiIi14pmzZpx9uxZHA4HtWvXzvWnUqVKAGzfvp3hw4fTq1cv6tevT5Uq\nVYiNjc3TV0BAALfddhsTJ07kzTffZOvWrTmztOcT4fT09Jz2sbGxRapKcX6G+/Tp03liPb904lLC\nw8OpWrUqx44dy9NHYZeX/JXZbMbhcBT5utJwycQ5ODiYZ599lhEjRuQ6PmXKFPbu3UtsbCyff/45\nw4cPz/kH3rZtGxMnTmTt2rXs2bOHefPm5UmsRURERK4FXbp0oXXr1owaNYoNGzZw7NgxNmzYwD/+\n8Q9+//13IHvJwtdff01MTAzR0dE88cQTuFyuXP18+umnLF68mEOHDnHw4EGWLVtGjRo1cmatg4KC\nqFu3LosWLQJg7969fP/990WKtX79+vTp04fx48ezYsUKjh07xrZt23j55ZfZtm1boft54oLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1668f3e160>"
"<matplotlib.figure.Figure at 0x7fce74aa2358>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f166815b3c8>"
"<matplotlib.figure.Figure at 0x7fce79d25080>"
]
}
],
@@ -1774,26 +1775,26 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30000\n",
"movement_error = 2\n",
"sensor_variance = 30000\n",
"movement_variance = 2\n",
"pos = (0,500)\n",
"\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(pos[0], velocity=movement, variance=sensor_variance)\n",
"\n",
"zs = []\n",
"ps = []\n",
"\n",
"for i in range(1000):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
" \n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
"\n",
"p1, = plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
"p1, = plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
"p2, = plt.plot(ps, c='#004080', label='filter')\n",
"plt.legend(loc='best')\n",
"plt.show()"
@@ -1804,9 +1805,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAF2CAYAAABULe8GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4E+X2wPHvZGmb7jtbFWUvoGwKgmgVRVwARQQX3Fjk\nIlcQFcULigjeq/zcrl53RVB22URQFEERUFSUXRBFBKFAW0r3Ns02vz+SSSdp2qal0ILn8zw+tpnJ\nzJtkgDNvznuOoqqqihBCCCGEEKJWGOp6AEIIIYQQQpxNJMAWQgghhBCiFkmALYQQQgghRC2SAFsI\nIYQQQohaJAG2EEIIIYQQtUgCbCGEEEIIIWqRBNhCCCGEEELUoioD7OXLl9O9e3fCwsIYOnSo9/Ep\nU6ZgNpuJiooiKiqKZs2a+Tzv1VdfpWHDhsTHxzNx4kSfbevWraN169ZERkYyYMAA8vPza+nlCCGE\nEEIIUbeqDLBjY2N57LHHGD58uM/jiqJw++23U1BQQEFBAfv37/du++GHH3j66af5+uuv2bVrFwsW\nLGDRokUAFBcXM2jQIJ5++mmysrJQFIV//etftfyyhBBCCCGEqBtVBthpaWkMGDCA+Ph4n8dVVaWi\nJpCLFy9m4MCBpKam0rhxY0aMGMGCBQsA+Prrr4mNjeW2227DYrEwfvx4Fi5cWAsvRQghhBBCiLoX\ndA62fzCtKAorVqwgMTGRTp06sXLlSu+23377jdatW/PKK68wfvx42rZty969ewHYu3cvbdq04dtv\nv6VPnz60aNGCEydOkJ2dXUsvSQghhBBCiLoTdICtKIrP77feeiv79+8nIyODyZMnc9ttt/H7778D\nUFRURGRkJPv372ffvn1ERUVRWFjos+3YsWPs2bOH0NBQAO92IYQQQgghzmSmYHf0n8Fu06aN9+cB\nAwZwxRVX8Pnnn9OyZUsiIiIoLCzklVdeAWDZsmVERkYCeLcNHDiQgQMHkpOTA+Ddrrd27drqvyIh\nhBBCCCGq6aqrrqq1YwUdYPvPYFemVatW/Prrr97fd+/e7Q3IW7VqxZtvvumzLT4+noSEhIDHSk1N\nDfq84uyXkJDA0qVLSUtLq+uhiHpErgsRiFwXIhC5LoS/hIQENm7cWKvHrDJFxOVyYbVacTgcOJ1O\nSktLcTgcLFu2jNzcXFwuF59++inffPMNffr0AWDQoEEsXbqU3bt3k56ezvvvv8+tt94KQK9evcjL\ny2P+/PkUFRXxwgsveLcJIYQQQghxpqtyBvvDDz9k2LBh3t/nzJnDU089xe7duxk6dChOp5OWLVuy\ncOFCWrVqBUDXrl156qmnuPLKK7Hb7YwaNYpBgwYBEB4ezqJFixg5ciQjRozgmmuu4bnnnjtFL08I\nIYQQQojTS1ErqrVXD6xdu1ZSRISPhIQE9uzZQ3Jycl0PRdQjcl2IQOS6EIHIdSH8aSkitZmDLa3S\nxRlHbrpEIHJdiEDkuhCByHUhTjUJsIUQQgghhKhFQVcRqY/sdjs5OTnVqnAizmxaWUeHw1HjY6iq\nSlxcHGazubaGJYQQQgjhdcYG2Ha7nezsbJKTkzEYZCJeBM/lcpGZmUlCQoIE2UIIIYSodWdsZJqT\nkyPBtagRg8FAcnKydzZcCCGEEKI2nbHRqaIoElyLGjMYDJJaJIQQQohTQiJUIYQQQgghapEE2EII\nIYQQQtQiCbCFEEIIIYSoRRJgCyGEEEIIUYskwBZnlW7duvHSSy/V9TCEEEII8TcmAbY4q0hlECGE\nEELUNQmwT7PvvvuOzp07M2zYMFJTU5k1axa9e/fmwgsvZMOGDQDk5+fz2GOP0aFDB1JTU7n99tv5\n/fffvcfYt28fQ4cOpVOnTjRr1oy0tDTmzZvncx673c7kyZPp0qULzZs3p2fPnrzzzjve7YcOHSIl\nJYX09HTvYy+++CKXXHKJz3EWLlxISkoKu3btom/fvjRv3pyuXbvyyy+/AGCz2XjmmWfo0qULLVu2\npH///vz000/e53fr1o0xY8bQrl07Ro4cybRp02jVqhUTJ04sd560tDSaN2/OFVdcwfz58322p6Sk\nMHfuXG666SZatGhB37592bdvn895UlJSOHz4MC+99BIpKSmkpKTw8ssvV+vzEUIIIYQ4WWdsJ8dg\nNW7SJODjR3SB5cnsXxNZWVmMGjWKpk2b8uSTT7Jo0SLWrFnDO++8w2WXXcZdd92F2Wzmgw8+ICYm\nhnfffZfbbruNDRs2EB4ezokTJ+jUqRPjxo0jISGB9evXM2HCBJo0aUJaWhoAM2fOZPHixbzzzjuc\nf/75HDhwgEOHDlU5topmgCdNmsSYMWNITU1l586d3g6IDz30EHv37uX111+ncePGLF26lNtvv50N\nGzbQsGFDFEUhLi6ODz74gAEDBjB06FAWLFjATTfdxCOPPEJCQgJz5szhP//5D88++yxdunRh+/bt\nPPTQQ8TFxXHttdd6x/Dee+/x3HPPER0dzejRo3n66aeZPXs2AKtWrcLpdHL99ddz4403MmrUKADC\nw8NP6rMSQgghhKiusz7Aro8SEhLo2rUrhYWFLFu2jEsuuYSSkhLWrl3Lhg0b2LJlC1u2bCEpKQmA\nadOmsXjxYtasWUP//v3p2rUrXbt29R7vjjvuYPbs2axdu9YbYB86dIgGDRrQs2dPAJpUcOPgT1XV\ngI8/8MAD9O7dG4Bzzz0XgP3797N8+XI+/fRTOnToAMC4ceNYtmwZS5cuZfTo0QD06tWLiy66iISE\nBHr16kXnzp1JSEjg8OHDJCQk8PLLLzN27FhuvPFGwD1bvX79eubOnesTYA8dOpRu3boBcNttt/G/\n//3Puy0+Ph4Ao9FIREQEiYmJQb1eIYQQQojadtYH2NWdea7NmeqKhIWFef+v/RwaGorVamXXrl2o\nqsqll17q8xyr1cpff/0FQElJCf/973/58ssvycjIwG63Y7VaadeunXf/gQMHsmTJEi677DJ69OhB\nt27d6Nu3LyEhITUasxbY6u3atQuAQYMGlRvrwYMHg3q9x48fJyMjg+eff95ncaLdbuecc87xOW6z\nZs28P8fGxpKbm1uj1yKEEEIIcSqd9QH2mUSbPY6OjmbVqlXltsfGxgLuGe2NGzfy5JNP0qxZM4xG\nIyNHjsTlcnn37dixIz/++CMbN25k06ZNPPHEE8ybN4/FixcDgVNB9M/3Fx0dXeG2jz/+mIiICJ/H\noqKiKnmlbvrZ8qlTp3pn2zUmk6nS34UQQggh6iOJWOqZdu3akZ+fj91up0WLFgH3+fHHHxk2bJg3\nZaOkpITDhw/Tvn17n/0iIyO59tprufbaa+nSpQujR48mNzeX2NhYb8BcWFjo3f/w4cPVqsKhzZhn\nZGRw5ZVXVut1ahITE2nYsCEHDx5kyJAhNTqGntlsxm63n/RxhBBCCCFqSqqI1DOXXXYZnTt35h//\n+Afr16/n4MGDrF+/nkcffZQ///wTcKdKfPLJJ+zdu5fdu3czduxYnE6nz3Heffddli5dyr59+/j9\n999Zvnw5TZo08c6CR0dHc/7557NkyRIAfvnlF1avXl2tsTZv3px+/foxYcIEVq1axcGDB/nhhx94\n6qmn+OGHH4I+ztixY5kxYwYzZszgjz/+YMeOHbz55pvMmjWrWuMB93uzfv16jh49itVqLfe+CCGE\nEEKcahJg1wH9LLH/z4qiMGfOHLp27cq4ceO48sorefTRRwGIi4sDYMqUKYSHh9OvXz/uvvtuLrro\nIjp16uRzjqioKN555x1uuOEGbrzxRkpKSvjggw989vm///s/Vq1axYUXXsjzzz/PzTffXOV4/b3y\nyisMGDCAKVOmcMUVVzB69GiOHz8e9KJKgLvvvptnn32W+fPn07t3b+644w7Wr19Py5YtK31eoHE9\n/vjjGAwGLr/8clq0aMGrr74a9DiEEEIIIWqDolZUNqIeWLt2LampqQG3ZWVleatsCFETcg2dPRIS\nEgDIzs6u45GI+kSuCxGIXBfCX0JCAhs3buSqq66qtWPKDLYQQgghhBC1SBY5CiGEEEKIM5pl2TJQ\nFEr69wdD3c8fS4AthBBCCCHOaHEPPACAtXdvVL/SwXWh7kN8IYQQQgghakq/nNBmq7tx6EiALYQQ\nQgghzlz6ALue1O6QAFsIIYQQQpy5dJ2oFQmwhRBCCCGEOEm6ANvn5zokAbYQQgghhDhz6RvP1ZMA\nW6qICCGEEEKIM5fZTN5TT6EUF9eLCiIgM9h1pqCggOHDh5OamkpKSgovv/yyz/Zx48Zxyy23lHve\n5MmTSUlJISUlJeB2IYQQQoizVkkJhmPHUPLyfB4uGjmSwnHjUCMj62hgviTAriOzZ89m8+bNLF26\nlG3btjFq1Cif7c888wwzZswo97wJEyawdetW/vGPf6DovxLx891335GSkkJ6enqtj10IIYQQoi6E\nrVlDwy5diB0/vq6HUilJEakj+/fvp1WrVqSmpgbcHlnBHVhERAQRERGEh4ejBrFSNph9hBBCCCHO\nCFqOtdFYt+Oogsxgn2bjxo0jJSWFBQsW8P3333vTPbQUkQkTJpxUCog2cz148GAALrnkEu/x9LPZ\nR48eZdSoUbRr14727dtz3333cfToUZ9jLVy4kJSUFHbt2kXfvn1p3rw5Xbt25ZdffjmJd0AIIYQQ\np4XLReTLLxPy/fd1PZJaozidAKj1PMA+q2ewmwx595QcN33ufTV+7rRp05g0aRKTJ0/m6NGjvPfe\newCEh4cD8OSTTzJ+/HgmT57M8ePHq338iy++mG3btrF582buu+8+PvvsMxo3bgxAfHw8AMXFxdxy\nyy20b9+eJUuWYDKZmD59OkOHDmXVqlXlUk8mTZrEmDFjSE1NZefOnZjN5hq/fiGEEEKcHqLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f166802d748>"
"<matplotlib.figure.Figure at 0x7fce74a748d0>"
]
}
],
@@ -1839,26 +1840,26 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30\n",
"movement_error = 2\n",
"sensor_variance = 30\n",
"movement_variance = 2\n",
"pos = (1000,500)\n",
"\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_variance)\n",
"\n",
"zs = []\n",
"ps = []\n",
"\n",
"for i in range(100):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
" \n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
"plt.plot(ps, label='filter')\n",
"plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
"plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
"plt.legend(loc='best')\n",
"plt.show()"
],
@@ -1868,9 +1869,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAF2CAYAAAB+nR6pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYVVX3wPHvHZkHuYCo4ASWBg6AommKs/mmmWZllpaZ\n5pSvTWpmamlab7+yQZvM1MyycixTc0w0zSHnIZVBxQEZleleuMP5/YGSxCBwAdHW53l8gnP22Xsd\nPMlis8/aqpMnTyoIIYQQQgghSqS+1QEIIYQQQghxO5DEWQghhBBCiFKQxFkIIYQQQohSkMRZCCGE\nEEKIUpDEWQghhBBCiFKQxFkIIYQQQohSkMRZCCGEEEKIUrhp4rxp0yYee+wxmjZtyquvvpp/fN68\nefTo0YOwsDB69+7N5s2bC1z39ddf065dOyIiInj//fcrPnIhhBBCCCGqkPZmDdzd3Xn22WfZuXMn\nJpMp/7hOp2POnDk0atSI/fv3M2zYMFatWkVAQACHDh1i7ty5fPvtt7i6ujJw4ECaNGlCz549K/Vm\nhBBCCCGEqCw3nXGOiIigW7dueHh4FDj+9NNP06hRIwDCwsIICAjg+PHjAKxfv57u3bsTGBhIzZo1\neeSRR1i7dm0lhC+EEEIIIUTVuOmM83WKUvzO3FevXuXMmTP5ifSZM2do1aoVixYtIiEhgfDwcNas\nWWN/tEIIIYQQQtwipX45UKVSFXtuypQp9O3bl4YNGwJgNBpxdnYmPj6es2fP4uLiQnZ2tv3RCiGE\nEEIIcYvYPeP8/vvvk56eznvvvZd/zMnJiezsbCZPngzAxo0bcXZ2LvL6+Pj4ssQrhBBCCCFEuQQE\nBNh1fakT56JmnBcuXMjvv//O4sWL0Wr/7qp+/frExsbmfx4dHZ0/G12UJk2alDYM8S9gMBhYsWIF\nkZGRtzoUUU3IMyGKIs+FKIo8F6IoBoOBHTt22N3PTZdq2Gw2cnJysFqtWK1WcnNzsVgsrFy5kqVL\nlzJv3rxCs8k9e/Zk48aNREdHc/nyZZYvXy4VNYQQQgghxG3tpjPOq1atYtKkSfmf//TTT4wZM4aV\nK1eSlJREly5d8s+NHDmS4cOH06xZM0aPHs3gwYOxWCwMGDBAEmchhBBCCHFbU508ebL4chlVID4+\nXpZqiAIMBgMnTpzA19f3Vociqgl5JkRR5LkQRZHnQhTl+lINe9c4y5bbolqSH6bEP8kzIYoiz4Uo\nijwXorJI4iyEEEIIIUQplLqqxq1iNptJS0srsY60uLOkpaUBYLFYyt2HTqfD09OzokISQgghhKje\nibPZbCYlJQVfX1/UapkcF6V35coVsrOzi60fLoQQQghRVtU6G01LS5OkWZSLh4cHmZmZtzoMIYQQ\nQtxBqnVGqlKpJGkW5aJSqWR5jxBCCCEqlGSlQgghhBBClIIkzkIIIYQQQpSCJM5CCCGEEEKUgiTO\nlSgjI4OhQ4fSpEkT/P39mT17doHz48aNo3///oWumzJlCv7+/vj7+xd5XgghhBBCVD1JnCvR4sWL\n2bt3LytWrODgwYOMGDGiwPkZM2Ywf/78QtdNmDCBAwcO8Nxzz5X4gtvOnTvx9/fnwoULFR67EEII\nIYQoqFrXcb7dxcbGctdddxW79aerq2uRx11cXHBxccHZ2RlFUW46TmnaCCGEEEII+8iMcyUYN24c\n/v7+LF26lD/++CN/2cX1pRoTJkywaynG9ZnmRx99FIA2bdrk93fj7POlS5cYMWIEwcHBhISEMGzY\nMC5dulSgr++//x5/f3+OHj1Kr169CAwMJCIigmPHjtnxFRBCCCGEuPPc9jPOdZ6YVyn9XlgyrNzX\nTp8+nddee40pU6Zw6dIlvvzyS4D8Xexef/11Xn75ZaZMmUJycnKZ+2/VqhUHDx5k7969DBs2jLVr\n11K7dm0AvLy8AMjOzqZ///6EhISwfPlytFot77zzDkOGDGHdunWFloC89tprPP/88zRp0oQjR46g\n0+nKff9CCCGEEHei2z5xro7c3Nxwc3PDwcEBrVaLt7d3gfOurq64urri4OBQrmUWOp0Ob29vPDw8\nADAYDIXGWLVqFVeuXGHOnDn5SfBbb71FWFgYBw8eJDQ0tED7MWPG0K1bNwDq1q1b5piEEEIIIe50\nt33ibM/M8J3syJEjZGRkEBwcXOC4SqXi3LlzhRLn1q1bV2V4QgghhBC3nds+cRbFCwoKYsGCBYWO\n/3N2GsDd3b0qQhJCCCGEuG1J4lzJSiond7PzLi4umEymYs9fX4JhsVgKnWvatCnLli3Dzc0tf92z\nEEIIIYQoP6mqUcn+uYbZZrORmJhIYmIiJpOJ3NxckpKSSExMxGw2F2jbokULjh07RlRUFImJiWRl\nZRU4X79+fTQaDatXryYjI6NAkt23b198fX0ZNmwYe/fu5cyZM2zcuJERI0ZgNBor74aFEEIIIe5Q\nkjhXIpVKVWhG+cKFC4SFhREWFsaaNWvYv38/oaGhhIeH8+effxZo26ZNG0aMGMHo0aMJCwvj3Xff\nLXDex8eHadOmsWTJEkJCQmjUqFF+OTonJyeWL19O7dq1eeaZZ+jSpQtvvPEGvr6+6PX6QnEKIYQQ\nQoiSqU6ePHlLd8+Ij48vdoOQpKQkfHx8qjgicaeQ5+fOYTAYAEhJSbnFkYjqRJ4LURR5LkRRDAYD\nO3bsICAgwK5+ZMZZCCGEEEKIUpDEWQghhBBCiFKQxFkIIYQQQohSkMRZCCGEEEKIUpDEWQghhBBC\niFKQxFkIIYQQQohSkMRZCCGEEEKIUpDEWQghhBBCiFKQxFkIIYQQQlQp9eXL+HTsiPu0abc6lDLR\n3uoAhBBCCCHEv4t+7150p09jrVXrVodSJjLjLG47rVu35v3337/VYQghhBCinPT79gGgO3UK98mT\nUWVk2N+p2Wx/HzchibO47ahUqlsdghBCCCHscD1x1iQk4LpgAdqYGLv79HrqKWqGhqLfu9fuvooj\niXMl2LlzJ2FhYTzzzDM0adKEhQsX0q1bN5o1a8b27dsBSE9PZ/z48TRv3pwmTZrw+OOPc/r06fw+\noqOjGTJkCKGhoTRs2JDIyEi+/fbbAuOYzWamTJlCeHg4gYGB3HfffXzxxRf55+Pj4/H39+fChQv5\nx9577z3atGlToJ/vv/8ef39/jh49Sq9evQgMDCQiIoJjx44BkJuby4wZMwgPD6dRo0Y8+OCD7Lv2\nwEPeDPDzzz9PcHAww4cPZ/r06dx1111MmjSp0DiRkZEEBgbSsWNHvvvuuwLn/f39WbJkCQ899BBB\nQUH06tWL6OjoAuP4+/tz/vx53n//ffz9/fH392f27Nll+vsRQgghxC1kNKI7cgRFrcbUsSMA2hu+\n35eXNjoaTWIiVoPB7r6KHaPSeq5CtevUKfL4xRsSRnval0dSUhIjRoygXr16vP766/z4449s2rSJ\nL774gvbt2zNo0CB0Oh2LFi3Cw8ODefPmMWDAALZv346zszOpqamEhoYybtw4DAYDUVFRTJgwgTp1\n6hAZGQnAggULWLZsGV988QUNGjTgzJkzxMfH3zS24mZsX3vtNZ5//nmaNGnCkSNH0Ol0ALzwwguc\nPHmSuXPnUrt2bVasWMHjjz/O9u3b8fPzQ6VSUaNGDRYtWkTfvn0ZMmQIS5cu5aGHHuKll17CYDDw\nzTffMHPmTGbNmkV4eDiHDh3ihRdeoEaNGtx///35MXz55Ze8/fbbuLu7M2rUKN544w0WL14MwLp1\n67BarfznP/+hT58+jBgxAgBnZ2e7/q6EEEIIUXV0x46hslgw33MP5hYtcPztN7sTZ1V2NtoLF1B0\nOqx161ZQpIXdEYlzdWQwGIiIiCAzM5OVK1fSpk0bjEYjmzdvZvv27ezfv5/9+/fj4+MDwPTp01m2\nbBmbNm3iwQcfJCIigoiIiPz+Bg4cyOLFi9m8eXN+4hwfH0/NmjW57777AKhTzA8E/6QoSpHHx4wZ\nQ7du3QCoe+2hi42NZfXq1fzyyy80b94cgHHjxrFy5UpWrFjBqFGjAOjcuTMtW7bEYDDQuXNnwsLC\nMBgMnD9/HoPBwOzZsxk7dix9+vQB8maXo6KiWLJkSYHEeciQIbRu3RqAAQMG8PHHH+ef8/LyAkCj\n0eDi4oK3t3ep7lcIIYQQpadOTsZmMEAlLY00t2xJwv79qJOS0F37bbu9SzU0sbEAWOrXB23lpbd3\nROJc1pniipxZLo6jo2P+f69/7ODggMlk4ujRoyiKQrt27QpcYzKZOHfuHABGo5EPPviAjRs3cvny\nZcxmMyaTieDg4Pz2Dz/8MMuXL6d9+/a0bduW1q1b06tXL/R6fblivp6w3ujo0aMAPPLII4ViPXv2\nbKnuNzk5mcuXL/Puu+8WeKnPbDYTEBBQoN+GDRvmf+zp6cmVK1fKdS9CCCGEKDv97t149+tHxujR\nZPxjyWVFstWsia1mTVTXJvPsnXG+nnhbgoLsjq3EcSq1d1HI9dled3d31q1bV+i8p6cnkDcDvWPH\nDl5//XUaNmyIRqNh+PDh2Gy2/LYtWrRgz5497Nixg127djF58mS+/fZbli1bBhS9JOPG6//J3d29\n2HOrVq3CxcWlwDE3N7cS7jTPjbPbb775Zv7s+HXaf/xU+M/PhRBCCFF1nH76CQBNUlKVjGcJDCTj\nxRcx3323Xf1oLl9GUauxBAZWUGRFu2mWsmnTJubNm8fx48fp1asXs2bNAvJmC6dOncr69evx8PBg\n/Pjx9OzZM/+6r7/+ms8//xyz2cyAAQN48cUXK+8ubjPBwcGkp6djNpsJKuYnoz179vDMM8/kL50w\nGo2cP3+ekJCQAu1cXV25//77uf/++wkPD2fUqFFcuXIFT0/P/EQ4MzMzv/358+fLVJXi+gLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653a7f978>"
"<matplotlib.figure.Figure at 0x7fce749750b8>"
]
}
],
@@ -1902,25 +1903,25 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30000\n",
"movement_error = 2\n",
"sensor_variance = 30000\n",
"movement_variance = 2\n",
"pos = (1000,500)\n",
"\n",
"\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_error) \n",
"dog = DogSensor(0, velocity=movement, variance=sensor_variance) \n",
"zs = []\n",
"ps = []\n",
"\n",
"for i in range(1000):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
" \n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
"plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
"plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
"plt.plot(ps, c='#004080', label='filter')\n",
"plt.legend(loc='best')\n",
"plt.show()"
@@ -1931,9 +1932,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAF2CAYAAABULe8GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4VFX6xz9Tk0x6htACShekKC2gCFgWA0gRVkT0J4qA\nhSaIBRVQxLLqiouKjV0priJI7wq4S0BYQFCqKKHXNNJnkmn398fce3NnMkkmIRjA83keH2bOOfec\n9965yPe+9z3vq/vtt98kBAKBQCAQCAQCQZWgr24DBAKBQCAQCASCawkhsAUCgUAgEAgEgipECGyB\nQCAQCAQCgaAKEQJbIBAIBAKBQCCoQoTAFggEAoFAIBAIqhAhsAUCgUAgEAgEgipECGyBQCAQCAQC\ngaAKKVdgb9y4kcGDB9O6dWtefPHFEv05OTl07tyZ5557zqd9/vz5dOnShcTERGbMmOHTt2PHDpKS\nkmjbti2jR48mPz//Ek9DIBAIBAKBQCC4MihXYEdFRTFixAjuu+++gP0zZsygfv366HQ6tW3v3r3M\nmjWL+fPns2rVKtasWcO6desAsNvtPP3004wbN47t27ej0+l47733quh0BAKBQCAQCASC6qVcgZ2Y\nmEiPHj2Ijo4u0XfgwAHOnj1L9+7dkaTigpDr16/n7rvvpnHjxtSqVYtBgwaxdu1awOu9joqK4p57\n7iE0NJTHHntM7RMIBAKBQCAQCK52go7B1gpo5fsbb7zBpEmTSvSdOHGChg0bMm/ePN5++22aNGnC\n8ePHATh+/DiNGjVi9+7dDB8+nOuvv56cnByysrKq4HQEAoFAIBAIBILqJWiBrQ0BAVi8eDE33HAD\nTZo0KdFnt9uxWCycPn2akydPEh4ejs1mA8Bms2GxWMjIyODo0aOYzWa1XSAQCAQCgUAguNoxBjtQ\n66XOy8vjs88+Y9GiRSX6AMLCwrDZbEyePBmADRs2YLFYALBYLNhsNpKSkkhKSiInJ0dt9+f06dMV\nPB2BQCAQCAQCgaDi1K9fv8rmClpga73UZ86c4cyZM9x6660+Y1JSUli2bBkNGjTg2LFjPu2NGjUC\noEGDBixYsMCnLzo6mtjY2IDrtmjRIlgTBX8CrFYrS5cupXv37tVtiuAKQtwXgkCI+0IQCHFfCPyx\nWq1s3bq1SucsN0TE4/FQVFSE2+3G7XbjcDho1qwZhw8fVv8bM2YM/fr1Y9myZQD06tWLDRs2kJKS\nQmpqKkuWLKFXr14AdO7cmby8PFavXo3NZuOLL76gd+/eVXpSAoFAIBAIBAJBdVGuwF6+fDk33XQT\ns2fPZuXKlbRp04ZPPvmkzGPatGnD6NGjGTp0KH379qV3796qwA4LC2PmzJl8+OGHqgd84sSJVXAq\nAoFAIBAIBAJB9aP77bffpPKHVQ+nT58WISICH6xWK7/++is1a9asblMEVxDivhAEQtwXgkCI+0Lg\njxIiUpUx2KJUuuCqQzx0CQIh7gtBIMR9IQiEuC8ElxshsAUCgUAgEAgEgiok6CwiVyJOp5OsrKwS\nebgF1y5KQSKXy1XpOSRJIjY2FpPJVFVmCQQCgUAgEKhctQLb6XSSmZlJzZo10euFI14QPB6Ph7S0\nNKxWqxDZAoFAIBAIqpyrVplmZWUJcS2oFHq9npo1a6recIFAIBAIBIKq5KpVpzqdTohrQaXR6/Ui\ntEggEAgEAsFlQShUgUAgEAgEAoGgChECWyAQCAQCgUAgqEKEwBYIBAKBQCAQCKqQqzaLiEAgEAgE\nAoGgGP3Zs4R/+SXu2rWxPfpodZvzp0Z4sAXXFJ06dWLGjBnVbYZAIBAIBH84hrQ0Ij/8EMu331a3\nKX96hMAWXFOIzCACgUAg+NOiZFfzeKrXDoEQ2H8027Zto127djz22GO0aNGCuXPn0qNHD9q0acOW\nLVsAyM3N5fnnn+emm26iRYsWDBkyhCNHjqhzpKSkMGzYMNq2bUujRo3o3r07X3/9tc86TqeTqVOn\n0r59exo3bsxtt93G559/rvafPn2aevXqcfbsWbXtvffeo3Pnzj7zLFy4kHr16nHgwAH69OlD48aN\nSUxM5ODBgwA4HA5ef/112rdvT9OmTenXrx8//fSTenynTp0YO3YsLVu25PHHH2f69Ok0a9aMl156\nqcQ63bt3p3Hjxtx+++0sWLDAp79evXp89dVX3HvvvTRp0oQ+ffqQkpLis069evU4c+YMM2bMoF69\netSrV4/333+/Qr+PQCAQCARXK6Z9+wAwy38Kqo9rPga7bkJCwPZzGmF5KeMrQ3p6Ok8++STXX389\nU6ZM4dtvv2Xjxo18/vnndO3alYcffhiTycS8efOIjo5m9uzZPPDAA2zZsgWLxcLFixdp27Yt48eP\nx2q1kpyczAsvvEBCQgLdu3cHYM6cOSxevJjPP/+chg0bcuLECU6fPl2ubaV5gF9++WXGjh1LixYt\n2L9/v1oBccKECfz222/MmjWLunXrsnTpUoYMGcKWLVuoXbs2Op2O2NhY5s2bx4ABAxg2bBjffPMN\n9957LxMnTsRqtfLvf/+bN998k7feeov27duzd+9eJkyYQGxsLD179lRt+Oc//8nf/vY3oqKiGDVq\nFNOmTePLL78EYN26dbjdbnr37k3//v158sknAbBYLJf0WwkEAoGgeghbuhTDmTPkjxtX3aZcNegK\nCqrbBIHMNS+wr0SsViuJiYnk5+ezbNkyOnfujN1uZ9OmTWzZsoU9e/awZ88e4uPjAZg+fTqLFy9m\n48aN9OvXj8TERBITE9X5HnzwQb788ks2bdqkCuzTp09Tq1YtbrvtNgASSnlw8EeSpIDtY8aMoUeP\nHgBcd911ABw7dowVK1awZs0abrrpJgDGjx/PsmXLWLp0KaNGjQLgzjvvpEOHDlitVu68807atWuH\n1WrlzJkzWK1W3n//fcaNG0f//v0Br7c6OTmZr776ykdgDxs2jE6dOgHwwAMP8OGHH6p9cXFxABgM\nBsLDw6lRo0ZQ5ysQCASCK5PYsWMBsPfti7thw2q2RuCP7uJFJIsFQkOr25QrkmteYFfU81yVnurS\nCJVvxtDQUPVzSEgIhYWFHDhwAEmS6NKli88xhYWFnDp1CgC73c4//vEPNmzYQGpqKk6nk8LCQlq2\nbKmO/+tf/8qSJUvo2rUrt956K506daJPnz6YzeZK2awIWy0HDhwAYNCgQSVsPXnyZFDnm5GRQWpq\nKu+++67P5kSn00n9+vV95m3UqJH6OSYmhuzs7Eqdi0AgEAiuHnQ2W3WbcNXg+YOcS7rsbOq0bo07\nNpZUWQsIfLnmBfbVhOI9joqKYt26dSX6Y2JiAK9He+vWrUyZMoVGjRphMBh4/PHH8Wg2Ndx8883s\n3LmTrVu3sn37diZPnszXX3/N4sWLgcChIJ4yNkVERUWV2rd8+XLCw8N92iIjI8s4Uy9ab/lrr72m\netsVjEZjmd8FAoFAIBAU45Hf5hbefvtlXcd0+DAAhqysy7rO1YxQLFcYLVu2JDc3F6fTSZMmTQKO\n2blzJ4899pgasmG32zlz5gytWrXyGRcREUHPnj3p2bMn7du3Z9SoUWRnZxMTE6MK5vz8fHX8mTNn\nKpSFQ/GYp6amcscdd1ToPBVq1KhB7dq1OXnyJA899FCl5tBiMplwOp2XPI9AIBAIqpf84cPR5+Tg\nDjLEUQAojqvLnVFLZCkpF5FF5Aqja9eutGvXjieeeILk5GROnjxJcnIyzz33HMePHwe8oRIrV67k\nt99+49ChQ4wbNw632+0zz+zZs1m6dCkpKSkcOXKEFStWkJCQoHrBo6KiaNiwIUuWLAHg4MGDfP/9\n9xWytXHjxvTt25cXXniBdevWcfLkSXbs2MErr7zCjh07gp5n3Lhx/Otf/+Jf//oXR48eZd++fXzy\nySfMnTu3QvaA99okJydz/vx5CgsLS1wXgUAgEFwd5L72GtkzZyLJ/24JysfRoQPpK1eS+8orl3Ud\nTxlvtQVehMCuBrReYv/POp2Of//73yQmJjJ+/HjuuOMOnnvuOQBiY2MBePXVV7FYLPTt25ehQ4fS\noUMH2rZt67NGZGQkn3/+Offccw/9+/fHbrczb948nzHvvPMO69ato02bNrz77rsMHDiwXHv9mTlz\nJgMGDODVV1/l9ttvZ9SoUWRkZAS9qRJg6NChvPXWWyxYsIAePXrw4IMPkpycTNOmTcs8LpBdkyZN\nQq/X061bN5o0acIHH3wQtB0CgUAgEFzNSNHRONu3x1XOv5+XiqtVK86dPfuH7Fu7WtH99ttvgdNG\nXAGcPn2aFi1aBOxLT09Xs2wIBJVB3EPXDlarFYDMzMxqtkRwJSHuC0EgxH0h8MdqtbJ169YSyRUu\nBRGDLRAIBAKBQHANoMvNJeKTT5DCw8kfM6a6zflTI0JEBAKBQCAQCK4BdDYbkR98QPgXX1S3KX96\nhMAWCAQCgUBwxVE3IYG6CQnoL1yoblOuHvSyrBNZPqodIbAFAoFAIBBcsegvXqxuE64azNu3A2BI\nT7+s6+gzM7HMmUPoypWXdZ2rGSGwBQKBQCAQCK4B9JWocGw4doyYCRMwnDypvjUoTzibDh4kZvJk\n4p56qrKmXvOITY4CgUAgEAgE1wKVKDBjffhhjCdOYNq3T23TvjUwb99OyA8/4OjUiaK//MXbKEJQ\nyqVcD/bGjRsZPHgwrVu35sUXX1TbZ8+eTVJSEu3ataNv375s2rTJ57j58+fTpUsXEhMTmTFjhk/f\njh07SEpKom3btowePdqnmqBAIBAIBAKBoOJIoaEVPsYg57I2nDuntulcLvWz6ZdfiPz4Y0Lk8JOr\nGumPy0xdrsCOiopixIgR3HfffT7tJpOJjz76iD179jBt2jSef/55Tp8+DcDevXuZNWsW8+Line truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f16539c9128>"
"<matplotlib.figure.Figure at 0x7fce74943a90>"
]
}
],
@@ -1952,27 +1953,27 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30000\n",
"movement_error = 2\n",
"sensor_variance = 30000\n",
"movement_variance = 2\n",
"pos = None\n",
"\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_error)\n",
"dog = DogSensor(0, velocity=movement, variance=sensor_variance)\n",
"\n",
"zs = []\n",
"ps = []\n",
"\n",
"for i in range(1000):\n",
" Z = dog.sense()\n",
" Z = dog.sense_position()\n",
" zs.append(Z)\n",
" if pos == None:\n",
" pos = (Z, 500)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
"\n",
"plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
"plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
"plt.plot(ps, c='#004080', label='filter')\n",
"plt.legend(loc='best')\n",
"plt.show()"
@@ -1983,9 +1984,9 @@
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAF2CAYAAABULe8GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FFXbh++tSTa90KNSVQRRWkBRsLwICFKsKL58AoKI\ngFh5lSKKYhewi2JXbCBYAAUsgAiiFAERIfSWENKT3Wz9/tiZyexm0xMC+NzX5cXunJkzZ2YH+Z1n\nnvN7DDt27PAhCIIgCIIgCEKNYKzrAQiCIAiCIAjC6YQIbEEQBEEQBEGoQURgC4IgCIIgCEINIgJb\nEARBEARBEGoQEdiCIAiCIAiCUIOIwBYEQRAEQRCEGkQEtiAIgiAIgiDUIOUK7OXLl3PTTTdx/vnn\n89BDD2nbX3rpJdq0aUP79u1p3749V155ZcBx77//Pt26dSMlJYUXXnghoG3dunX06tWL9u3bc9dd\nd5Gfn19DlyMIgiAIgiAIdUu5AjsmJobbb7+d66+/PmC7wWCgb9++bNy4kY0bN7JixQqtbfPmzbzy\nyiu8//77fP3113z77bcsWbIEALvdzt1338348eP59ddfMRgMPP/88zV8WYIgCIIgCIJQN5QrsFNS\nUujZsyexsbEB230+Hz5f6CKQS5cu5aqrrqJFixY0aNCAG264gcWLFwP+6HVMTAx9+/YlPDyc4cOH\na22CIAiCIAiCcKpT4RzsYDFtMBj48ccf6dKlCwMHDuTHH3/U2vbu3UuzZs147733ePrpp2nZsiV7\n9uwBYM+ePTRv3pw//viDESNGcNZZZ5GTk0NWVlYNXZIgCIIgCIIg1B0VFtgGgyHge58+fVi+fDlr\n1qzhrrvu4t5772Xv3r2APw3EZrNx4MAB9u3bR2RkJIWFhQAUFhZis9nIyMggNTUVq9WqbRcEQRAE\nQRCEUx1zRXcMjmC3aNFC+9yzZ09SUlJYtWoVTZs2JSIigsLCQiZPngzAsmXLsNlsANhsNgoLC+nV\nqxe9evUiJydH2x7MgQMHKn9FgiAIgiAIglBJzjjjjBrrq8ICOziCXRZNmzZl9+7d2vddu3bRvHlz\nrW3evHkBbbGxscTHx4fsq3Xr1hU+r3D6k5iYyIIFC+jRo0ddD0U4iZDnQgiFPBdCKOS5EIJJTExk\n9erVNdpnuSkiXq+XoqIiPB4PHo8Hp9OJ2+1m2bJl5Obm4vV6+emnn/jtt9+45JJLAH/6yLJly9i1\naxdpaWnMnz+fPn36ANC1a1fy8vL45ptvKCws5O233+bqq6+u0YsSBEEQBEEQhLqi3Aj2woULefjh\nh7XvX331FWPHjmXXrl089NBDeDwemjZtyqxZs2jWrBkA7dq146677mLo0KG43W4GDx6sCeyIiAhm\nz57NlClTmDx5Mt26deO+++6rpcsTBEEQBEEQhBOLYceOHaG99k4CDhw4ICkiQgCJiYls376d+vXr\n1/VQhJMIeS6EUMhzIYRCngshGDVFpCZzsKVUunDKIZMuIRTyXAihkOdCCIU8F0JtIwJbEARBEARB\nEGqQCruInIy4XC6ysrIq5XAinNqoBYncbneV+/D5fMTHx2OxWGpqWIIgCIIgCBqnrMB2uVwcP36c\n+vXrYzRKIF6oOF6vl/T0dBITE0VkC4IgCIJQ45yyyjQrK0vEtVAljEYj9evX16LhgiAIgiAINckp\nq04NBoOIa6HKGI1GSS0SBEEQBKFWEIUqCIIgCIIgCDWICGxBEARBEARBqEFEYAuCIAiCIAhCDSIC\nWxAEQRAEQRBqEBHYwmlFly5deOGFF+p6GIIgCIIg/IsRgS2cVogziCAIgiAIdY0I7BPMmjVr6NCh\nA8OHD6d169a8++679OzZk3bt2rFq1SoAcnNzefDBB7ngggto3bo1N998Mzt37tT62LVrF8OGDaN9\n+/Y0b96cHj168PHHHwecx+VyMXXqVDp27EiLFi245JJLmDNnjtZ+4MABkpOTOXTokLbt+eefp2vX\nrgH9fPrppyQnJ7N161b69etHixYtSElJYdu2bQA4nU4ef/xxOnbsSKtWrejfvz+///67dnyXLl0Y\nN24cbdq0YdSoUUyfPp2zzz6bhx9+uMR5evToQYsWLbjsssuYN29eQHtycjIfffQRAwcOpGXLlvTr\n149du3YFnCc5OZmDBw/ywgsvkJycTHJyMjNnzqzU7yMIgiAIglBdTtlKjhWlcZMmIbcf1gnL6uxf\nFY4dO8bo0aM566yzmDJlCp9//jnLly9nzpw5XHrppfz3v//FYrHw3nvvERsby5tvvsngwYNZtWoV\nNpuNzMxM2rdvz4QJE0hMTGTlypVMnDiRJk2a0KNHDwDeeecdvvjiC+bMmUOzZs3Yu3cvBw4cKHds\npUWAJ02axLhx42jdujVbtmzRKiDec8897Nixg1deeYXGjRuzYMECbr75ZlatWkXDhg0xGAzEx8fz\n3nvvMWjQIIYNG8Ynn3zCwIEDue+++0hMTOTDDz9kxowZPPnkk3Ts2JHNmzdzzz33EB8fT+/evbUx\nvPXWWzz11FPExMQwZswYHn30UT744AMAlixZgsfj4eqrr2bAgAGMHj0aAJvNVq3fShAEQRAEobKc\n9gL7ZCQxMZGUlBTy8/P58ssv6dq1K3a7nRUrVrBq1So2bNjAhg0bqFevHgDTp0/niy++YPny5fTv\n35+UlBRSUlK0/m655RY++OADVqxYoQnsAwcO0KBBAy655BIAmpQycQjG5/OF3D527Fh69uwJwJln\nngnA7t27WbRoEd9++y0XXHABABMmTODLL79kwYIFjBkzBoArrriCTp06kZiYyBVXXEGHDh1ITEzk\n4MGDJCYmMnPmTMaPH8+AAQMAf7R65cqVfPTRRwECe9iwYXTp0gWAwYMH89JLL2ltCQkJAJhMJiIj\nI0lKSqrQ9QqCIAiCINQ0p73ArmzkuSYj1aURHh6u/al+DgsLw+FwsHXrVnw+H926dQs4xuFwsH//\nfgDsdjuzZs1i2bJlpKWl4XK5cDgctGnTRtv/uuuuY/78+Vx66aVcfPHFdOnShX79+mG1Wqs0ZlXY\n6tm6dSsAN9xwQ4mx7tu3r0LXm5GRQVpaGs8++2zA4kSXy8UZZ5wR0G/z5s21z3FxcWRnZ1fpWgRB\nEARBEGqT015gn0qo0eOYmBiWLFlSoj0uLg7wR7RXr17NlClTaN68OSaTiVGjRuH1erV9L7zwQn77\n7TdWr17Nr7/+yuTJk/n444/54osvgNCpIPrjg4mJiSm1beHChURGRgZsi46OLuNK/eij5Y899pgW\nbVcxm81lfhcEQRAEQTgZEcVyktGmTRtyc3NxuVy0bNky5D6//fYbw4cP11I27HY7Bw8epG3btgH7\nRUVF0bt3b3r37k3Hjh0ZM2YM2dnZxMXFaYI5Pz9f2//gwYOVcuFQI+ZpaWlcfvnllbpOlaSkJBo2\nbMi+ffsYMmRIlfrQY7FYcLlc1e5HEARBEAShqoiLyEnGpZdeSocOHbjjjjtYuXIl+/btY+XKlTzw\nwAPs2bMH8KdKfPXVV+zYsYO//vqL8ePH4/F4Avp58803WbBgAbt27WLnzp0sWrSIJk2aaFHwmJgY\nmjVrxvz58wHYtm0b33//faXG2qJFC6655homTpzIkiVL2LdvH+vWreORRx5h3bp1Fe5n/PjxzJ07\nl7lz55Kamsqff/7Ja6+9xrvvvlup8YD/3qxcuZIjR47gcDhK3BdBEARBEITaRgR2HaCPEgd/NhgM\nfPjhh6SkpDBhwgQuv/xyHnjgAQDi4+MBmDZtGjabjWuuuYahQ4fSqVMn2rdvH3CO6Oho5syZQ9++\nfRkwYAB2u5333nsvYJ9nnnmGJUuW0K5dO5599lmuvfbacscbzOzZsxk0aBDTpk3jsssuY8yYMWRk\nZFR4USXA0KFDefLJJ5k3bx49e/bklltuYeXKlbRq1arM40KN63//+x9Go5Hu3bvTsmVLXnzxxQqP\nQxAEQRAEoSYw7NixI7RtxEnAgQMHaN26dci2Y8eOaS4bglAV5Bk6fUhMTATg+PHjdTwS4WRCngsh\nFPJcCMEkJiayevXqEuYK1UEi2IIgCIIgCIJQg4jAFgRBEARBEIQaRAS2IAiCIAiCINQgIrAFQRAE\nQRCEUxrjkSOYdEXu6hrxwRYEQRAEQRBOaRp26gTA4d27ISysjkcjEWxBEARBEAThNMFYUFDXQwBE\nYAuCIAiCIAinCV6bra6HAIjAFgRBEARBEE4XToL0EJAcbEEQBEEQhDrDvG0bpuPHcbVujVeKn1UN\nrxcAn8EAZVSfPpFIBLuOyMvLY8SIEbRu3Zrk5GRmzpwZ0D5hwgSuv/76EsdNnTqV5ORkkpOTQ7YL\ngiAIgnDqED17Nok334z111/reiinLgYDRzdvJu2PP+p6JBoSwa4jPvjgA9avX8+CBQuoV68ekZGR\nAe2PP/44Ho+nxHETJ05k3LhxvP766/z555+l9r9mzRpuvPFG1q1bR5MmTWp8/IIgCIIg1ABK9BWT\nqW7HcSpjMOBNSqrrUQQgAruO2L17N2effTatW7cO2R4VFRVye2RkJJGRkdhsNnw+X7nnqcg+giAI\ngiDUEWowTQT2aYWkiJxgJkyYQHJyMp988glr167V0j3UFJGJEydWKwVkzZo1JCcnc+ONNwLQtWtX\nrb9Dhw5p+x05coTRo0fTpk0b2rZty8iRIzly5EhAX59++inJycls3bqVfv360aJFC1JSUti2bVs1\n7oAgCIIgCCoGRWD7jKeoJHM6CVu+HEMd2+PFTpxIwi23YNJpnbrktI5gNxnyZq30e+ijkVU+dvr0\n6UyaNImpU6dy5MgR3nrrLQBsiq3MlClTuP/++5k6dSoZGRmV7r9z585s2rSJ9evXM3LkSBLine truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653abbd30>"
"<matplotlib.figure.Figure at 0x7fce748d07b8>"
]
}
],
@@ -2033,10 +2034,10 @@
"\n",
"interact(plot_kalman_filter,\n",
" start_pos=(-10,10), \n",
" sensor_noise=widgets.IntSliderWidget(value=5,min=0,max=100), \n",
" movement=widgets.FloatSliderWidget(value=1,min=-2.,max=2.), \n",
" movement_noise=widgets.FloatSliderWidget(value=5,min=0,max=100.),\n",
" noise_scale=widgets.FloatSliderWidget(value=1,min=0,max=2.))"
" sensor_noise=widgets.IntSliderWidget(value=5, min=0, max=100), \n",
" movement=widgets.FloatSliderWidget(value=1, min=-2., max=2.), \n",
" movement_noise=widgets.FloatSliderWidget(value=5, min=0, max=100.),\n",
" noise_scale=widgets.FloatSliderWidget(value=1, min=0, max=2.))"
],
"language": "python",
"metadata": {},
@@ -2080,7 +2081,7 @@
" move_error = random.randn()*movement_noise\n",
" dog.x += move_error\n",
" \n",
" z = dog.sense()\n",
" z = dog.sense_position()\n",
" zs.append(z)\n",
"\n",
" pos = update(pos[0], pos[1], z, sensor_noise)\n",
@@ -2088,16 +2089,16 @@
"\n",
" pos = predict(pos[0], pos[1], movement, movement_noise)\n",
"\n",
" plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
" plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
" plt.plot(ps, c='#004080', alpha=0.7, label='filter')\n",
" plt.legend(loc='best')\n",
" plt.show()\n",
"\n",
"interact(plot_kalman_filter,\n",
" start_pos=(-10,10), \n",
" sensor_noise=widgets.FloatSliderWidget(value=5,min=0.,max=100), \n",
" movement=widgets.FloatSliderWidget(value=1,min=-2.,max=2.), \n",
" movement_noise=widgets.FloatSliderWidget(value=.1,min=0,max=.5))"
" start_pos=(-10, 10), \n",
" sensor_noise=widgets.FloatSliderWidget(value=5, min=0., max=100), \n",
" movement=widgets.FloatSliderWidget(value=1, min=-2., max=2.), \n",
" movement_noise=widgets.FloatSliderWidget(value=.1, min=0, max=.5))"
],
"language": "python",
"metadata": {},
@@ -2105,13 +2106,21 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653b22048>"
"<matplotlib.figure.Figure at 0x7fce79c68c88>"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"<function __main__.plot_kalman_filter>"
]
}
],
"prompt_number": 34
"prompt_number": 29
},
{
"cell_type": "heading",
@@ -2146,7 +2155,8 @@
],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 30
},
{
"cell_type": "markdown",
@@ -2159,24 +2169,22 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30\n",
"movement_error = 2\n",
"sensor_variance = 30\n",
"movement_variance = 2\n",
"pos = (100,500)\n",
"\n",
"zs = []\n",
"ps = []\n",
"\n",
"zs, ps = [], []\n",
"\n",
"for i in range(100):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
"\n",
" Z = math.sin(i/3.)*2\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
"plt.plot(zs,c='r', linestyle='dashed', label='input')\n",
"plt.plot(zs, c='r', linestyle='dashed', label='input')\n",
"plt.plot(ps, c='#004080', label='filter')\n",
"plt.legend(loc='best')\n",
"plt.show()"
@@ -2187,13 +2195,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "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 truncated
"text": [
"<matplotlib.figure.Figure at 0x7f1653b3b278>"
"<matplotlib.figure.Figure at 0x7fce79c28ba8>"
]
}
],
"prompt_number": 35
"prompt_number": 31
},
{
"cell_type": "markdown",
@@ -2231,7 +2239,8 @@
],
"language": "python",
"metadata": {},
"outputs": []
"outputs": [],
"prompt_number": 32
},
{
"cell_type": "markdown",
@@ -2244,23 +2253,22 @@
"cell_type": "code",
"collapsed": false,
"input": [
"sensor_error = 30\n",
"movement_error = 2\n",
"sensor_variance = 30\n",
"movement_variance = 2\n",
"pos = (100,500)\n",
"\n",
"zs = []\n",
"ps = []\n",
"zs, ps = [], []\n",
"\n",
"for i in range(100):\n",
" pos = predict(pos[0], pos[1], movement, movement_error)\n",
" pos = predict(pos[0], pos[1], movement, movement_variance)\n",
"\n",
" Z = math.sin(i/3.)*2 + random.randn()*1.2\n",
" zs.append(Z)\n",
" \n",
" pos = update(pos[0], pos[1], Z, sensor_error)\n",
" pos = update(pos[0], pos[1], Z, sensor_variance)\n",
" ps.append(pos[0])\n",
"\n",
"p1, = plt.plot(zs,c='r', linestyle='dashed', label='measurement')\n",
"p1, = plt.plot(zs, c='r', linestyle='dashed', label='measurement')\n",
"p2, = plt.plot(ps, c='#004080', label='filter')\n",
"plt.legend(loc='best')\n",
"plt.show()"
@@ -2271,13 +2279,13 @@
{
"metadata": {},
"output_type": "display_data",
"png": "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 truncated
"png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAF2CAYAAABtSl5dAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xdc1fX3wPHX57L3uIKoiAtNFBFBwY1bc2tpZmZpy6/t\naWbZ0LKy7Ptt+rOhllbm3mZOwL0RQUEcCCJ7yL6Xe39/XO7NAcq4C3g/H48eGffezz3Ex8v5vD/n\nfY6kVqvVCIIgCIIgCEIDJzN1AIIgCIIgCIJgDkRiLAiCIAiCIAiIxFgQBEEQBEEQAJEYC4IgCIIg\nCAIgEmNBEARBEARBAERiLAiCIAiCIAiASIwFQRAEQRAEAdBDYlxUVMRzzz2HXC7Hzc2N559/Xh9x\nCYIgCIIgCIJRWdb2AK+++iqXLl0iJiYGT09PYmJi9BGXIAiCIAiCIBiVVJvJd0VFRcjlck6ePEn7\n9u31GZcgCIIgCIIgGFWtSini4uKQJIn169fj5eVFx44d2bBhg75iEwRBEARBEASjqVUpRV5eHqWl\npVy+fJnExEQOHjzIqFGjiI+Px8vLS18xCoIgCIIgCILB1Soxtre3p6ysjNdffx1ra2v69etHu3bt\nOHz4MGPHjgVg9+7deglUEARBEARBEO5n4MCBNX5trRLj1q1bI0nSfZ/n5+dXm7cR6hm5XM66desI\nCwszdSiCGRHnhVARcV4IFRHnhVARuVxOZGRkrY5RqxpjNzc3wsLCWLRoEUqlkoiICOLi4ujevXut\nghIEQRAEQRAEY6t1u7ZffvmFJ598EldXV7y9vVmxYoWoLxYEQRAEQRDqnFonxi1btmTfvn16CEVo\nSER5jVARcV4IFRHnhVARcV4IhiBGQgsmIT7QhIqI80KoiDgvhIqI80IwBJEYC4IgCIIgCAJ6KKXQ\nB4VCQXZ2dpU6XAh1X3Z2NgBKpbLGx1Cr1bi5uWFlZaWvsARBEARBaOBMnhgrFAoyMzPx9PREJhML\n2ELVqFQq0tLSkMvlIjkWBEEQBEEvTJ6JZmdni6RYqDaZTIanp6du9VkQBEEQBKG2TJ6NSpIkkmKh\nRmQymSi/EQRBEARBb0RGKgiCIAiCIAiIxFgQBEEQBEEQAJEYC4IgCIIgCAIgEmNBEARBEARBAERi\nLJip0NBQFi1aZOowBEEQBEFoQERiLJgl0W1CEARBEARjE4lxDR08eJCgoCCmT5+On58fy5YtY/Dg\nwQQEBBAREQFAXl4eb731Fp07d8bPz49HH32U+Ph43TEuXrzItGnT6NKlC61btyYsLIzff//9tvdR\nKBTMnTuX4OBg2rRpQ+/evVmyZInu8WvXruHt7U1ycrLua19++SXdu3e/7TirVq3C29ub6OhoRo4c\nSZs2bQgJCeHcuXMAlJaWMn/+fIKDg2nbti2jR4/m+PHjuteHhoby4osv0rFjR5599lnmzZtHu3bt\neOedd+56n7CwMNq0aUO/fv34448/bnvc29ublStXMnbsWHx9fRk5ciQXL1687X28vb1JSkpi0aJF\neHt74+3tzVdffVWtn48gCIIgCEJ1mXzyXVU1bdaswq9fvyUhrM3zayI9PZ0ZM2bQokUL3nvvPVav\nXs2uXbtYsmQJffr04fHHH8fKyorly5fj4uLCjz/+yKRJk4iIiMDe3p6srCy6dOnCK6+8glwuJzw8\nnFmzZtGsWTPCwsIAWLp0KWvWrGHJkiW0atWKK1eucO3atfvGVtmK65w5c3jxxRfx8/Pj7Nmzuqlx\nr776KhcuXOC7776jadOmrFu3jkcffZSIiAi8vLyQJAk3NzeWL1/OuHHjmDZtGn/++Sdjx47l9ddf\nRy6Xs2LFCj755BMWLFhAcHAwZ86c4dVXX8XNzY1hw4bpYvjpp5/49NNPcXZ2ZubMmXz44Yf89ttv\nAGzfvp2ysjKGDx/OmDFjmDFjBgD29va1+lkJgiAIgiDcT51JjM2RXC4nJCSE/Px81q9fT/fu3Skq\nKmL37t1ERERw8uRJTp48iYeHBwDz5s1jzZo17Nq1i9GjRxMSEkJISIjueJMnT+a3335j9+7dusT4\n2rVrNG7cmN69ewPQrJKE/05qtbrCr7/wwgsMHjwYAB8fHwAuXbrExo0b2bp1K507dwbglVdeYf36\n9axbt46ZM2cCMGDAALp27YpcLmfAgAEEBQUhl8tJSkpCLpfz1Vdf8dJLLzFmzBhAszocHh7OypUr\nb0uMp02bRmhoKACTJk3im2++0T3m7u4OgIWFBQ4ODjRq1KhK368gCIIgCEJt1ZnEuLorvfpcGa6M\nra2t7t/aP9vY2FBcXEx0dDRqtZpevXrd9pri4mISExMBKCoq4r///S///PMPqampKBQKiouL6dix\no+75Dz30EGvXrqVPnz707NmT0NBQRo4cibW1dY1i1iakt4qOjgZgwoQJd8V69erVKn2/GRkZpKam\nsnDhwts2zSkUCpo3b37bcVu3bq37s6urKzk5OTX6XgRBEARBEPSpziTGdYl2tdbZ2Znt27ff9bir\nqyugWUGOjIzkvffeo3Xr1lhYWPDss8+iUql0zw0MDOTo0aNERkZy6NAh3n33XX7//XfWrFkDVFwy\ncevr7+Ts7FzpYxs2bMDBweG2rzk5Od3jO9W4dXX6o48+0q1ua1laWt7zvwVBEARBEMyByFAMpGPH\njuTl5aFQKPD19a3wOUePHmX69Om60oaioiKSkpLw9/e/7XmOjo4MGzaMYcOGERwczMyZM8nJycHV\n1VWX6Obn5+uen5SUVK2uDtoV6tTUVPr371+t71OrUaNGeHl5cfXqVR577LEaHeNWVlZWKBSKWh9H\nEARBEAShqkRXCgPp06cPQUFBPPfcc4SHh3P16lXCw8N58803uXz5MqApKdi0aRMXLlwgJiaGl156\nibKystuO8+OPP7Ju3TouXrxIfHw8GzdupFmzZrpVZ2dnZ1q1asXatWsBOHfuHDt37qxWrG3atGHU\nqFHMmjWL7du3c/XqVY4cOcL777/PkSNHqnycl156iZ9//pmff/6ZhIQEoqKi+OGHH1i2bFm14gHN\n/5vw8HBSUlIoLi6+6/+LIAiCIAiCvonEuBZuXZW988+SJLFixQpCQkJ45ZVX6N+/P2+++SYAbm5u\nAHzwwQfY29szatQopk6dSteuXenSpctt7+Hk5MSSJUsYMWIEY8aMoaioiOXLl9/2nM8//5zt27cT\nEBDAwoULGT9+/H3jvdP//vc/xo0bxwcffEC/fv2YOXMmGRkZVd7sBzB16lQWLFjAH3/8weDBg5k8\neTLh4eG0bdv2nq+rKK63334bmUxG37598fX15euvv65yHIIgCIIgCDUhqStrX6Anu3fvxs/Pr9LH\n09PTdV0bBKG6xPlTf8jlcgAyMzNNHIlgTsR5IVREnBdCReRyOZGRkQwcOLDGxxArxoIgCIIgCIKA\nSIwFQRAEQRAEARCJsSAIgiAIgiAAIjEWBEEQBEEQBEAkxoIgCIIgCIIAiMRYEARBEARBEAA9JMb9\n+vXDzs4OJycnnJyceOKJJ/QRlyAIgiAIgiAYVa1HQkuSxHfffcf06dP1EY8gCIIgCIIgmIReSikM\nPCNEEARBEARBEAxOL4nx7Nmz8fDwYMiQIZw/f14fh6wzbt68yVNPPYWfnx/e3t589dVXtz3+yiuv\n8PDDD9/1urlz5+Lt7Y23t3eFjwvm6eL1HLYcuSQuBgVBEAShHqp1KcUXX3yBv78/ZWVlzJs3j9Gj\nRxMTE4Ol5b+H1o5urEh2dnZtQzCp3377jWPHjrFu3To8PDxwcHC47fH58+dTVlZ21+tmzZrFiy++\nyOLFi4mKiqr0+AcPHmTixIkcOXKEZs2a6T3+us7S0vKe55c+HYi+xpi5G8kvKmXxqw/y5NDORnnf\nhsLKygq49+eF0PCI80KoiDgvhIpoz4vaqHViHBwcrPvzJ598wnfffcf58+fx9/fXfX3evHm6P/ft\n25ewsLDavq3ZuHTpEu3atcPPz6/Cxx0dHSv8uoODAw4ODtjb21dp9VGsUJpWeFQi4+aupqBYAcCH\nyyOYEOaHg621iSMTBEEQhIZr//79hIeHA2BhYUHfvn1rdbxaJ8Z3kiTpriRu5syZt/13Zmam7s9K\npVLfIRjFK6+8wpo1a3T/7e3tDcDrr7/Oq6++yqxZs1i5ciUA3bt3v+25VaFdKdbq3r277s+3rh6n\npKTw4YcfEhERgSRJ9OjRg48++ogmTZronr9q1Spef/11duzYwdtvv01sbCxyuZylS5fSsWPH6n/z\nZkSpVN52PhlCRHQyT375N8WlZTzcpy0Xk3M4fSmdT37dx2sPBd//AEKVaFd+DP3zFOoWcV4IFRHn\nhaDl7++vW4yVy+VERkbW6ni1Soxzc3M5ePAgAwYMAGDBggU0btyYDh061CqoOzV77Ee9Hk8reeUz\nNX7tvHnzmDNnDnPnziUlJYWffvoJAHt7ewDee+893njjDebOnUtGRka1j9+tWzdOnz7NsWPHeOaZ\nZ9i2bRtNmzYFwN3dHYDCwkIefvhh/P39Wbt2LZaWlnz22WdMmzaN7du3I0nSbcecM2cOL774In5+\nfpw9e1Yvtxzqu31R13hq0T8UK8qYFNaOz5/uw7ELqTw0fwvfb43isQF+NHazN3WYgiBU0YJVx1j+\nzzkGB7VgYt929OrQFJlMuv8LBUEwC6cT0knPLaSHXxMc7fR/17ZWibFCoWDOnDnEx8djZWVFSEgI\nmzdvxsLCQl/xmS1t32YbGxssLS1p1KjRbY87Ojri6OiIjY1NjcogrKysaNSoES4uLoDmKujO99iw\nYQM5OTl8++23uiT3448/JigoiNOnT9OlS5fbnv/CCy8wePBgAHx8fKodU31TWKxAJpOwtaLine truncated
"text": [
"<matplotlib.figure.Figure at 0x7f165c03de10>"
"<matplotlib.figure.Figure at 0x7fce749f6128>"
]
}
],
"prompt_number": 36
"prompt_number": 33
},
{
"cell_type": "markdown",