Altered example to be consistent with text.

The first example for computing the prediction used two different
values for the covariance matrix, making it a bit confusing.
This commit is contained in:
Roger Labbe committed 2015-08-08 10:05:39 -07:00
1 parent 022cde4a1f
commit d481f3aaf4
1 file changed
+30 -26
+30 -26
View File
@@ -28,6 +28,7 @@
"@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
"@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
"@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
"@import url('http://fonts.googleapis.com/css?family=Fira_sans');\n",
"\n",
" div.cell{\n",
" width: 900px;\n",
@@ -118,9 +119,9 @@
" white-space: nowrap;\n",
" }\n",
" div.text_cell_render{\n",
" font-family: 'Arimo',verdana,arial,sans-serif;\n",
" font-family: 'Fira sans', verdana,arial,sans-serif;\n",
" line-height: 125%;\n",
" font-size: 120%;\n",
" font-size: 115%;\n",
" text-align:justify;\n",
" text-justify:inter-word;\n",
" }\n",
@@ -427,7 +428,7 @@
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtYAAAEgCAYAAACQMzRfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VfX9x/H3zWAFAgEiQ0AIeymGElRWIiNQy5TWIkNw\nVIIDRESGSlBBpEKxtSCGKbgoFVBkE4Zahj/GozKKiIAgCISRAM3O+f3x7b3kJjfjhgMh5PV8PHgk\n95zv+Z7vPUntO9/7Od/jsCzLEgAAAIDr4lPYAwAAAABuBwRrAAAAwAYEawAAAMAGBGsAAADABgRr\nAAAAwAYEawAAAMAGBGsAAADABgRrAAAAwAYEawAAgP/Zt0/y85M2bvTuuBUrpJIlpR9/vDHjQtHg\n4MmLAADgdrJ3r7R8uTRkiHTXXd4d26WLlJoqbdrk/Xl/8xtzvn/+0/tjcXtgxhoAANxW9u6VXn9d\nOn7cu+O2bZM2bJBGjizYeYcPl5Ytkw4cKNjxKPoI1gAAFGPp6VJiYmGP4sbw9jP5mTOl4GDpt78t\n2Pn69JHKlJHef79gx6PoI1gDAIqtBQskHx8pNlZ6802pdm0TjFq3lr791rTZvFlq21YqW1aqXt20\nyyo5WZo8WWraVCpdWgoKknr0MDOnmV25Ir3yiuk/OFgqVUqqX18aOzZ7uE1KkqKjpYYNpYAA0+fd\nd0ujR7u3i4427+Hnn7OPq3ZtKSIi+/vduFF64w2pbl0z3iVLvHsfdl23gpxz0ybpnXfM2EuVMtfn\nww/dr8fjj5vvIyLMMT4+piwkN2lppnykUyfJ1zf3tjkJCJDatZOWLi3Y8Sj6/Ap7AAAAFLYxY6SM\nDGnECBP0pk2TunaV5s6VoqKkoUOlgQOlzz6TXntNqlNH6t/fHJuaatpu2yYNGiQ9/7x06ZIUEyO1\naSNt3Sq1bGnanjxp+uzbVxowwNwkt3mzNHWqtGePtGbNtTE984w0f7702GPSAw+Y4PfDD97V/joc\n5l9Wo0aZ/p5+WgoMlBo18u592HHdvL12TuPGmT86oqKkEiWkWbOkwYOlevXMdXr4YenXX6UPPpDG\nj5caNzbH1a2b+7XatUu6elUKC8v/9fXkvvuktWulQ4dM6EcxYwEAUEzNn29ZDodltWxpWamp17Z/\n8YXZ7udnWbt2XduekmJZ1apZ1v33X9s2fbppu26de98JCZZVq5ZlhYe7H5+Wln0cr75q+ti589q2\noCDLeuihvN/DhAnm2OPHs++76y7LiojI/n4bNbKsxET3tt68DzuuW0HPGRrqfs5ffrGskiUtq1+/\n7G23bMl+TXIyb5455ssvPe+/fNmyeve2rMBAy/rb38y2hQst6//+z73dokWmn88/z/+5cfugFAQA\nUOxFRZnZY6e2bc3X+++XQkOvbff3l1q1kg4fvrZt8WIzKxoaKsXFXfuXnGzKCr75xnzvPN5ZZpCW\nJl28aNp27Gi27dx5rd8KFczSb/v335j3W6qU+zZv3kfmfgp63Qp6zmHD3M9ZvbrUoMH1L3N37pz5\nWrGi5/1vv23e34IF0i+/SI8+Kl24kH1GvVIl8/Xs2esbD4omSkEAAMVeSIj766Ag87VOnextg4Kk\n8+evvT540JQmBAd77tvhMGHxzjvN65kzzc1tBw6YMorMLl689v2MGaaMonlzM76ICKl7d/PPU3mH\nNxo0yL7N2/chXd91s+uckgnDJ0547iO/nNc0pxseR4689v5q1TLlHiNGZG/nPP56f0YomgjWAIBi\nL6eb1fJzE5tlmZsKp0/PuU3lyubr9Ommvjky0oSy6tVNnfDJk6ZOOHPQ7tFDOnZMWrVK2rLFLAM3\nd665OW7DBjMLLOUe4NLSPG8vU+b63ofT9Vw3u895vU/lcIb7Cxc873eG6nXrzB8E48Z5buc8Pqc/\nFnB7I1gDAHAdGjQwH/tHROQ9S7lokZnNXb3afXvmmxYzCwoyN/s5b/gbM8bc6LhihbkBUrpWunDh\ngplJdUpKkk6f9jw7fb3vwy436pwF6at5c/M1a7lKZp98YpYnHD485zbOkpRmzbwfA4o+aqwBAPBS\n5uA2aJBZhSKnWdczZ65976wNzjwznZYmTZnifkxGhlkdI6sWLczXzCUjzpUn1q93b/uXv3g3i+vN\n+yiorIH3Rp2zbFnzNWvpSW5atDArpGzb5nn/ggVmOb0BA8xryzLLJGa1fbtUtapZRhHFDzPWAAB4\nKXNgHT7chNqXXjLrOkdEmID2889mvejSpc12ycwyjx0rdesm9e4tJSRIH39sykEyS0iQqlWTevY0\nge+OO6SjR83SchUrmjprp06dTLh+7TUTJGvXNjf97dhhyijyG669eR8FlXUsdp4zc99hYWbt6kmT\nzEx+QICpzc5tKT1fX/OAl+XLpZQU95/J55+bTwlq1zY3LgYGSh99ZJYrzOzKFenrr6Unn8zfmHH7\nIVgDAIo1b8sGsq4N7ecnffWVuSlx0SLzgBLJ3HAXFmbWoXZ66SUTAOfONTXW1apJjzxi6qubNLnW\nLiBAeuEFEy43bDCBrXp1qVcvE8yrVr3W1sdH+uILswb03/5mAmFkpKnLbtMm+/vL6f168z5y6ycn\nntbUtuucWfuuWVOaN8+s5DFsmFkve/DgvNeojooyM9MrV5qQLZlZ80OHzKPKjx41P4O4OFOS07On\n+/H//Kd50E/WwI3iw2FZ11vuDwAAcHvo1s08KGbrVu+PDQ01M+M8ebH4IlgDAAD8z4ED0j33mBtM\nO3XK/3HLl0t//KNZdzyvpzzi9kWwBgAAAGzAqiAAAACADQjWAAAAgA1YFQQAAGRjWZYSEtK0b1+a\nTp40S27UqGGpWTM/BQb6ycEzu4FsqLEGAABuLMvSjh1JmjDBX+vW+UpyhmhLkZHpmjgxVWFhpQjX\nQBYEawAA4OIM1V27llJ8vOfgXL68pTVrktS6NeEayIwaawAA4JKQkKYJE/xzDNWSFB/vUHS0vxIS\n0m7iyIBbH8EaAAC47NuX9r/yj9ytXeur/fsJ1kBmBGsAAOBiblTMT3mHQydOUAYCZEawBgAAAGxA\nsAYAAC41aliS8rOugaWaNVn/AMiMYA0AAFyaNfNTly7pebaLjExX06Y8DgPIjOX2AACAi2VZ2rkz\nSZGROS+3V6FChlavTma5PSALZqwBAICLw+FQWFgprVmTpMjINLmXhVjq2jWNUA3kgBlrAACQjfOR\n5vv3p7lW/6hZ01LTpjzSHMgJwRoAAOTo/PnzGjZsmPz8/DRr1iwFBgYW9pCAWxZ3HQAAgBwtWrRI\nS5YskSSFh4frqaeeKuQRAbcuaqwBAECOzp075/r+7NmzhTgS4NZHsAYAAABsQLAGAAAAbECwBgAA\nAGxAsAYAAABsQLAGAAAAbECwBgAAAGxAsAYAAABsQLAGAAAAbECwBgAAAGxAsAYAAABsQLAGAAAA\nbECwBgAAAGxAsAYAAABsQLAGAAAAbECwBgAAAGxAsAYAAABsQLAGAAAAbECwBgAAAGxAsAYAAABs\nQLAGAAAAbECwBgAAAGxAsAYAAABsQLAGAAAAbECwBgAAAGxAsAYA2GLz5s3y8fHRwoULC3soN9y+\nffvk5+enjRs35tjm0KFD+e5vxYoVKlmypH788Uc7hgegkBCsAQD5tnfvXkVHR+v48eMe9zscDjkc\njps8Knd5jdEOI0eOVLt27dSxY0eP+2fPnq1+/fppzpw5+eqvZ8+eat68uV5++WU7hwngJiNYAwDy\nbe/evXr99dc9htYOHTooMTFRAwYMKISRXZPbGO2wbds2bdiwQSNHjvS4PyYmRpcvX9bu3bt17tw5\nzZ07N1/9Dh8+XMuWLdOBAwfsHC6Am4hgDQDwmmVZ2bY5HA6VKFFCPj63xv+1eBqjHWbOnKng4GD9\n9re/9bi/ffv2GjVqlCRp7NixatOmTb767dOnj8qUKaP333/ftrFeD8uyFB8frxMnTri2HT9+XPHx\n8Tfs2gJF3a3xXz8AKEIWLFggHx8fbdq0Se+8847q1q2rUqVKqWHDhvrwww+ztU9OTtbkyZPVtGlT\nlS5dWkFBQerRo4f27t3ranP8+HH5+PgoOjra7djIyEj5+PhoxowZbttbt26tJk2a5DnW/JzbKSkp\nSdHR0WrYsKECAgIUFBSku+++W6NHj5YkRUdH6/HHH5ckRUREyMfHRz4+PhoyZIgkzzXWzmsVGxur\nN998U7Vr11aZMmXUunVrffvtt67j2rZtq7Jly6p69ep688033cZ15coVvfLKK2rdurWCg4NVqlQp\n1a9fX2PHjlViYqJb27zG6O01ySotLU3Lly9Xp06d5Ovr67FNw4YN3V43atQoz34lKSAgQO3atdPS\npUvz1f5GsixLO3bs0B/+8ActWrTItT0mJkaPPPKIdu7cSbgGPPAr7AEAQFE1btw4JSUlKSoqSiVK\nlNCsWbM0ePBg1atXTw888IAkKTU1VV27dtW2bds0aNAgPf/887p06ZJiYmLUpk0bbd26VS1bttRd\nd92lkJAQxcbGusJ1SkqKvvnmG1cwHTFihCQpISFBu3fv1tChQ3MdX37P7fTMM89o/vz5euyxx/TA\nAw8oLS1NP/zwgzZt2iRJevjhh/Xrr7/qgw8+0Pjx49W4cWNJUt26dd3O66nGesyYMcrIyNCIESOU\nnJysadOmqWvXrpo7d66ioqI0dOhQDRw4UJ999plee+011alTR/3795cknTx5UnPnzlXfvn01YMAA\n+fn5afPmzZo6dar27NmjNWvWuM6T1xi9vSZZ7dq1S1evXlVYWFiu176g7rvvPq1du1aHDh3KFtDt\ntHLbD9px8KT+9LuWqnlHebd9zlDdtWtXxcfHZzt27dq12r59u9asWaPWrVsXek09cLine truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x437c6a0>"
"<matplotlib.figure.Figure at 0x431ca90>"
]
},
"metadata": {},
@@ -691,8 +692,8 @@
"\n",
"We will do the same thing in this chapter, using multivariate Gaussians instead of univariate Gaussians. You might imagine this sort of implementation:\n",
"\n",
"$$ \\mathbf{x} = \\begin{bmatrix}10.0\\\\4.5\\end{bmatrix}, \\, \\, \n",
"d\\mathbf{x} = \\begin{bmatrix}1.2\\\\0.\\end{bmatrix} \\\\\n",
"$$ \\mathbf{x} = \\begin{bmatrix}5.4\\\\4.2\\end{bmatrix}, \\, \\, \n",
"d\\mathbf{x} = \\begin{bmatrix}1.1\\\\0.\\end{bmatrix} \\\\\n",
"\\mathbf{x} = \\mathbf{x} + d\\mathbf{x}$$\n",
"\n",
"But we need to generalize this. The Kalman filter equations work with *any* linear system, not just Newtonian ones. Maybe the system you are filtering is the plumbing system in a chemical plant, and the amount of flow in a given pipe is determined by a linear combination of the settings of different valves. \n",
@@ -752,7 +753,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 41,
"metadata": {
"collapsed": false
},
@@ -777,12 +778,12 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's test this! `KalmanFilter` has a `predict` method that performs the prediction by computing $\\mathbf{\\bar{x}} = \\mathbf{Fx}$. Let's call it and see what happens. We've set the position to 10.0 and the velocity to 0.45 meter/sec. We've defined `dt=0.1`, which means the time step is 0.1 seconds, so we expect the new position to be 10.45 meters after the innovation. The velocity should be unchanged."
"Let's test this! `KalmanFilter` has a `predict` method that performs the prediction by computing $\\mathbf{\\bar{x}} = \\mathbf{Fx}$. Let's call it and see what happens. We've set the position to 10.0 and the velocity to 0.45 meter/sec. We've defined `dt = 0.1`, which means the time step is 0.1 seconds, so we expect the new position to be 10.45 meters after the innovation. The velocity should be unchanged."
]
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 43,
"metadata": {
"collapsed": false
},
@@ -797,6 +798,7 @@
],
"source": [
"kf.x = np.array([10.0, 4.5])\n",
"kf.P = np.diag([500, 400])\n",
"# Q is amount of noise in the system,\n",
"# we will learn about it later\n",
"kf.Q = 0\n",
@@ -813,7 +815,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 44,
"metadata": {
"collapsed": false
},
@@ -822,16 +824,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[ 10.9 4.5]\n",
"[ 11.35 4.5 ]\n"
"x = [ 10.9 4.5]\n",
"x = [ 11.35 4.5 ]\n"
]
}
],
"source": [
"kf.predict()\n",
"print(kf.x)\n",
"print('x =', kf.x)\n",
"kf.predict()\n",
"print(kf.x)"
"print('x =', kf.x)"
]
},
{
@@ -850,7 +852,7 @@
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 45,
"metadata": {
"collapsed": false
},
@@ -862,7 +864,7 @@
" [ 120., 400.]])"
]
},
"execution_count": 13,
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
@@ -877,12 +879,12 @@
"source": [
"Inspecting the diagonals shows us that the position variance got larger. We've performed three prediction steps with no measurements, and our uncertainty grew. The off-diagonal elements became non-zero - the Kalman filter detected a correlation between position and velocity! The variance of the velocity did not change.\n",
"\n",
"Here I plot the covariance before and after the predictions. The intial value is in solid red, and the final value is in dashed black."
"Here I plot the covariance before and after the predictions. The intial value is in solid red, and the final value is in dashed black. I've altered the time step to 0.2 seconds for this example to better illustrate the change."
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 46,
"metadata": {
"collapsed": false,
"scrolled": true
@@ -890,9 +892,9 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAAEWCAYAAABRx5AbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcleX/x/HXYSMqmIq4R+LInDly4cRRafmztCwc2bDM\nmdr49k1tqJiVmWaWlaZp5iwrcc+0viJazlw4UkFDQ0BRgfP74wrNxMl9Bvh+Ph7nweGc+9zXh1uP\nvs/FNWx2u92OiIiIiIg4lIerCxARERERuR0oeIuIiIiIOIGCt4iIiIiIEyh4i4iIiIg4gYK3iIiI\niIgTKHiLiIiIiDiBgreIiIiIiBNYGrwnTJhA9erVCQwMJDAwkAYNGvDjjz9edsywYcMoXrw4efLk\noVmzZuzYscPKEkRERERE3JKlwbtkyZKMHj2azZs3s2nTJpo3b85DDz3Er7/+CkBkZCTvvfce48eP\nZ+PGjQQHBxMeHk5ycrKVZYiIiIiIuB2bo3euLFiwIKNGjeKpp56iWLFi9O3bl1deeQWA1NRUgoOD\nGTNmDM8884wjyxARERERcSmHjfFOT0/n66+/JjU1lbCwMGJjY4mPj6dVq1YXj/Hz8yMsLIz169c7\nqgwREREREbfgZfUJt27dSv369Tl37hz+/v588803VKxY8WK4LlKkyGXHBwcHc/ToUavLEBERERFx\nK5YH70qVKvHbb7+RmJjI7NmzefTRR1m5cuU1X2Oz2S77PjEx0eqyREREREScJjAw8IrHLB9q4u3t\nTbly5ahZsyYjRozg3nvvZcKECRQtWhSA+Pj4y46Pj48nJCTE6jJERERERNyKw9fxTk9PJyMjg7Jl\nyxISEsKSJUsuPpeamsq6deto0KCBo8sQEREREXEpS4eavPzyyzzwwAOUKFGCpKQkZsyYwerVq4mK\nigKgf//+jBgxgkqVKhEaGspbb71Fvnz56NKly1XPmVU3fabo6GgAateubeWPITdI1991dO1dS9ff\ntXT9XUfX3rV0/V3nRq/99YZLWxq84+PjeeKJJ4iLiyMwMJDq1asTFRVFeHg4AEOGDOHs2bP07t2b\nU6dOce+997JkyRICAgKsLENERERExO1YGry/+OKL6x4zdOhQhg4damWzIiIiIiJuz+FjvEVERERE\nRMFbRERERMQpFLxFRERERJxAwVtERERExAkUvEVEREREnEDBW0RERETECRS8RUREREScQMFbRERE\n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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAAEWCAYAAABRx5AbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8zvX/x/HHde1gDBurGTbnY5IwsYWcDxXx1a++FNHB\nWQ5JkXL6EqmoCPWt9CVCikpOhRZGTnMOFTm1kcPYmJ2u3x9vG2PY7DrNnvfb7bpd167P+/p4XR82\nz+u998Fis9lsiIiIiIiIQ1ldXYCIiIiISF6g4C0iIiIi4gQK3iIiIiIiTqDgLSIiIiLiBAreIiIi\nIiJOoOAtIiIiIuIECt4iIiIiIk5g1+A9depUatSogZ+fH35+foSHh/PDDz9kaDNy5EhKlixJgQIF\naNy4MXv27LFnCSIiIiIibsmuwTskJIS33nqLbdu2sWXLFpo0aUK7du3Yvn07ABMmTODdd99lypQp\nbNq0icDAQJo3b05cXJw9yxARERERcTsWR+9cGRAQwPjx43n++ecpUaIEL774IkOHDgUgISGBwMBA\n3n77bbp37+7IMkREREREXMphY7xTUlL48ssvSUhIoGHDhhw8eJCYmBhatGiR3sbHx4eGDRuyfv16\nR5UhIiIiIuIWPO19wp07dxIWFsalS5fInz8/8+fPp3LlyunhulixYhnaBwYGcvz4cXuXISIiIiLi\nVuwevKtUqcKOHTuIjY1lwYIF/Pvf/2b16tU3fY3FYsnwdWxsrL3LEhERERFxGj8/v+ues/tQEy8v\nL8qVK0fNmjUZN24c9erVY+rUqRQvXhyAmJiYDO1jYmIICgqydxkiIiIiIm7F4et4p6SkkJqaStmy\nZQkKCmLFihXpxxISEli7di3h4eGOLkNERERExKXsOtTk1Vdf5dFHHyU4OJjz588zZ84cfv75Z5Yt\nWwbAgAEDGDduHFWqVKFixYr85z//oVChQnTq1OmG58ysmz7N5s2bAQgNDbXn25As0vV3HV1719L1\ndy1df9fRtXctXX/Xyeq1v9VwabsG75iYGJ5++mmio6Px8/OjRo0aLFu2jObNmwMwZMgQLl68SJ8+\nfThz5gz16tVjxYoV+Pr62rMMERERERG3Y9fg/dlnn92yzYgRIxgxYoQ9/1gREREREbfn8DHeIiIi\nIiKi4C0iIiIi4hQK3iIiIiIiTqDgLSIiIiLiBAreIiIiIiJOoOAtIiIiIuIECt4iIiIiIk6g4C0i\nIiIi4gQK3iIiIiIiTqDgLSIiIiLiBAreIiIiIiJOoOAtIiIiIuIECt4iIiIiIk6g4C0iIiIi4gQK\n3iIiIiIiTqDgLSIiIiLiBAreIiIiIiJOoOAtIiIiIuIECt4iIiIiIk6g4C0iIiIi4gSeri5ARERu\nQ2oqnD4NMTEZbydOZPz61ClISoLkZEhJMffJyWC1gqenuXl4mPuCBSEwEIoV47SfHwesVk54enLG\n05MzFgv1mzShdrNm4OOToZQhQ4Ywffp0PD098fLySr8NGzaMF1544brSFy1aREREBCEhIQQHBxMc\nHExISAhBQUF4euq/JRG5c+knnIiIO0tOhgMHYOdO2LHD3HbuhCNHTJC2tz17GAhMzuTQ+EmTqA3g\n5wdVq0L16nDffXgcP8758+evax8XF5fpH/Hjjz8yderU656fMGECQ4YMyfQ8BQoUwGrVL2lFJHdT\n8BYRcRcnT8L27VfC9Y4dsHs3XLqUefsiRdJ7qNNv1359113g7c35hAQio6L45ddf2bZrF/sOHKDb\nv//NsH79TLhPSoK4OIiJIeSzz/D96isq+ftT3NubIqmpFElKolZqKpw7B7GxsGGDuQGvAa8CycWL\nk3TPPSRVrkxSxYoUqVPHnPuaXuwnnniCUqVKcfToUY4ePcqRI0c4evQopUqVyvRtvvTSS8ydO5ca\nNWpQu3ZtihUrxn333WfHCy8i4hwK3iIirnLhAvzyC6xcCStWmLCdmdKl4b77zO1yLzPlykG+fFn6\nY/773//So0cPUlNTMzy/+9AhCArK2Lh6dfo2bMjA2bOxWCzXn8xmMx8Qdu9O74EvuHMn7NoFf/9t\nbj/9dKW9vz80aQItWkDz5lCuHA0bNqRhw4ZZqh3g6NGjnD9/nrVr17J27dr05xcuXMi//vWvLJ9H\nRMTVFLxFRJwlNdX0aKcF7bVrM/Zm588PNWteCdn33Qf33muGdtzC77//TkxMDA8++OB1xypXrozV\naqVOnTrUr1+fevXqUaVKFSpUqJDpuby9vW/8B1ksplc9MBAaN77yfEoK/PFHxt76qCg4dAi+/trc\nAMqXNwG8RQvzen//W763JUuWcOLECbZt28avv/7K0qVL2bVrF3Xq1Mm0fUxMDMWKFbvleUVEnE3B\nW0TEkc6dg0WLYPlyE7hPnrxyzGKB2rWvBNHw8Cz3YttsNqKioli4cCELFy7kt99+o2rVquzZs+e6\ntmFhYZw9exZfX197vavreXhApUrm9vjjV54/ePDKB42ffjLh/I8/YPp0M8Gzbl3z/tu1g/vvN9ck\nE4GBgbRs2ZKWLVvSunVrUlNTCQkJua5dYmIilStXpnjx4rRr14527dpRp04djQ8XEbeg4C0iYm8p\nKfDjj/D55/DNN5CQcOVYcLAJ2S1aQNOmZgx2Np05c4batWtz8ODB9OeKFi1KtWrVSE5Ovm5lEE9P\nT9etFlK2LHTvbm4pKbB585UgHhl55TZ6tBlG88wz8NRT1w+BucaNgvSBAwewWq389ttvjB8/nvHj\nx1O8eHH+9a9/8d577+Hh4eGIdykikiUK3iIi9rJnjwnbs2fD8eNXnn/oIfjXv0zYrlz5hr26WVWk\nSBEKFChAsWLFaN++PR06dOChhx7Cy8srh2/AwTw8TA933bowfDicPw9r1sDSpTBvnhmiMngwvPIK\ntGwJXbrAY49dt3zhzVSrVo2YmBh++eUXFi1axKJFizhy5Ah//vmnQreIuJyCt4hITvzzD3z5pQnc\nmzdfeb58edN727kzlCmT7dPu2rWLadOm0aNHj0xX8Fi2bBnFixfP3WGyUCFo08bcJk+GJUvMdVyy\nBH74wdz8/ODJJ821DAvL0ocWLy8vmjRpQpMmTXjvvffYunUr+bI4hEdExJEUvEVEbkP+fftg4kQz\nlCQpyTxZuPCVkBgenu2e7cTERL755hs+/PBDIiIiANO7nVnwDg4OzvF7cCve3tC+vbmdPAlz58L/\n/gdbtsBHH5lbxYowcCCW++7DlsUgbbFYqF279g2P9+3bl8TERF588UXuvfdee70bEZFMKXiLiGTH\n2rVUfOUV/NavN19brdC6tQnbbdualUluw4oVK+jSpQsxMTEAFCxYkM6dO9OxY0d7VZ573H03vPii\nue3aZQL47NlmI6HevakeEEDMU0+ZYTuFCt32H3Pu3Dk++eQTEhIS+Pjjj2nevDnjx4+nVq1adnwz\nIiJXaJq3iMit2GxmVZKGDaFBA/zWryfFxwcGDYK//jJDIp588rZDN0CFChU4ceIE1apV48MPP+T4\n8eN8+OGHVKtWzY5vJBe691546y04fBjmz4eaNfE+dYqQ998365uPHAmnTt3WqQsXLsy2bdvo06cP\nvr6+rFy5ktDQULp163bdmuciIvag4C0iciOpqbBwIYSGQqtWZrMbf3+OP/ccO7/7Dt55x6xSkg2X\nbrALZbly5di+fTs7d+6kV69eFMpBT+4dydMT/u//YMsW9k+ezPkaNeDMGRg1ygTwwYMzTmjNoipV\nqjBlyhSOHDnC4MGD8fT0xGKxaPlBEXEI/WQREblWaqoZ2lCtmlmTeutWs/36hAnw118c79mT5Cxs\n/HK1uLg4Jk6cSKlSpdiyZUumbapXr575bpFyhcXCuQcfZN9//wsREWb1k/h48yGobFno2ROOHMn2\naYsUKcLEiRPZu3cv48aNc0DhIiIK3iIiGW3ebFbP6NwZfvsNSpWCKVPMRjBDhpgJlNlw7tw53nzz\nTcqUKcOQIUM4ceIE8+bNc1DxeUyDBrBsmfk769DBTHKdMQOqVIE338y4K2gWlS9fnqAbrCH+22+/\n5bRiEcnjFLxFRMCME+7RAx54AH79FYoXh08/hd9/hz59sj1+++LFi0ycOJGKFSsybNgwTp06RVhY\nGMuWLWPChAkOehN5VO3a8NVXsHu3CeAXLsCwYWZDnmXL7PJHbN26lXvuuYdevXpx4cIFu5xTRPIe\nBW8RydtSUsz25ZUqmSXrPDzg5Zdh3z7o1g2yuSlNUlISM2bMoEKFCuk93GFhYaxcuZJ169bRsmVL\nDSdxlKpVTQBfudL0eh84YFacad8eDh3K0an37t2Ll5cX06dPJzQ0lO3bt9unZhHJU+wWvN98803q\n1KmDn58fgYGBtG3blt27d1/XbuTIkZQsWZICBQrQuHFj9uzZY68SRESyZ8MG08PdqxecPm22cN+x\nw6yicRuTG+fPn88999xDz549OX78ODVr1mTp0qWsW7eOZs2aKXA7S7NmsH27+Xv09YVFi0woHz0a\nEhJu65RPPfUUGzdupEqVKuzdu5cHHniA9957D5vNZufiReROZrfg/fPPP9O3b18iIyNZtWoVnp6e\nNGvWjDNnzqS3mTBhAu+++y5Tpkxh06ZNBAYG0rx5c+Li4uxVhojIrZ04Ac8+a8Zyb91qViaZP9/0\nlFatetunXblyJb///juVKlVi/vz5bN68mVatWilwu4K395XfXHTsaAL3iBFmwux3393WKe+//362\nbNlCjx49SExMZNSoUenrrouIZIXdNtBZds04ulmzZuHn58f69et55JFHsNlsTJ48maFDh9K+fXsA\nPv/8cwIDA5kzZw7du3e3VykiIje2dKnZ7ObkSTOMZPBgeO010zOaQ+PHj6du3bp07Line truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x221d400>"
"<matplotlib.figure.Figure at 0x92d31d0>"
]
},
"metadata": {},
@@ -901,20 +903,22 @@
],
"source": [
"from filterpy.stats import plot_covariance_ellipse\n",
"x = np.array([10.0, 4.5])\n",
"P = np.array([[500., 0], [0, 400.]])\n",
"plot_covariance_ellipse(x, P, edgecolor='r')\n",
"\n",
"x = np.array([11.35, 4.5])\n",
"P = np.array([[564., 160], [160, 400.]])\n",
"plot_covariance_ellipse(x, P, edgecolor='k', ls='dashed')"
"dt = 0.2\n",
"kf.F = np.array([[1, dt], [0, 1]])\n",
"kf.x = np.array([10.0, 4.5])\n",
"kf.P = np.diag([500, 400])\n",
"plot_covariance_ellipse(kf.x, kf.P, edgecolor='r')\n",
"\n",
"kf.predict()\n",
"plot_covariance_ellipse(kf.x, kf.P, edgecolor='k', ls='dashed')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"How does the filter compute new values for $\\mathbf{\\bar{P}}$, and what is it based on? It's a little to early to discuss this, but recall that in every filter so far the predict step entailed a loss of information. The same is true here. I will give you the details once we have covered a bit more ground."
"You can see that the center of the ellipse shifted by a small amount (from 10 to 10.45) and the ellipse elongated, showing the correlation between position and velocity. How does the filter compute new values for $\\mathbf{\\bar{P}}$, and what is it based on? It's a little to early to discuss this, but recall that in every filter so far the predict step entailed a loss of information. The same is true here. I will give you the details once we have covered a bit more ground."
]
},
{