Switch to np.array.
I switched all the equations to use np.array instead of np.matrx. Also, I am starting to write the Kalman Math chapter in earnest.
This commit is contained in:
1 parent
e5f968a2e3
commit
5590a57bb9
6 files changed
+815
-169
No files matched your search
+249
-118
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:9d11bcd4ef99a8c59d3debbacc1dd13ef2280c966fe5c9e19cd4963b8e29bdea"
|
||||
"signature": "sha256:4543c870ab0c051c4385acc09b0cc240e855d61acec8a6789fb611a90a05eca3"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -41,10 +41,10 @@
|
||||
" margin-right: auto;\n",
|
||||
" }\n",
|
||||
" div.text_cell code {\n",
|
||||
" background: #FFFFFF;\n",
|
||||
" background: transparent;\n",
|
||||
" color: #000000;\n",
|
||||
" font-weight: 600;\n",
|
||||
" font-size: 13pt;\n",
|
||||
" font-size: 11pt;\n",
|
||||
" font-style: bold;\n",
|
||||
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
|
||||
" }\n",
|
||||
@@ -248,13 +248,13 @@
|
||||
],
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 16,
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"<IPython.core.display.HTML at 0x2c27ad0>"
|
||||
"<IPython.core.display.HTML at 0x203ad10>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 16
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
@@ -316,7 +316,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 3
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -343,13 +343,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2e04950>"
|
||||
"<matplotlib.figure.Figure at 0x2fb3b50>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -414,40 +414,40 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from KalmanFilter import KalmanFilter\n",
|
||||
"from filterpy.kalman import KalmanFilter\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"f1 = KalmanFilter(dim_x=4, dim_z=2)\n",
|
||||
"dt = 1. # time step\n",
|
||||
"\n",
|
||||
"f1.F = np.mat ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])"
|
||||
"f1.F = np.array ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 5
|
||||
"prompt_number": 11
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"##### **Step 3**: Design the Motion Function\n",
|
||||
"We have no control inputs to our robot (yet!), so this step is trivial - set the motion transition function $\\small\\mathbf{B}$ to zero. This is done for us by the class when it is created so we can skip this step, but for completeness we will be explicit."
|
||||
"We have no control inputs to our robot (yet!), so this step is trivial - set the motion input $\\small\\mathbf{u}$ to zero. This is done for us by the class when it is created so we can skip this step, but for completeness we will be explicit."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"f1.B = 0."
|
||||
"f1.u = 0."
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 6
|
||||
"prompt_number": 18
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -498,8 +498,8 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"f1.H = np.array ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"print(f1.H)"
|
||||
],
|
||||
"language": "python",
|
||||
@@ -514,7 +514,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 7
|
||||
"prompt_number": 13
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -533,8 +533,8 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"f1.R = np.mat([[5,0],\n",
|
||||
" [0, 5]])\n",
|
||||
"f1.R = np.array([[5,0],\n",
|
||||
" [0, 5]])\n",
|
||||
"print (f1.R)"
|
||||
],
|
||||
"language": "python",
|
||||
@@ -549,7 +549,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 8
|
||||
"prompt_number": 14
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -584,7 +584,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -603,7 +603,7 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"f1.x = np.mat([0,0,0,0]).T\n",
|
||||
"f1.x = np.array([[0,0,0,0]]).T\n",
|
||||
"f1.P = np.eye(4) * 500.\n",
|
||||
"print(f1.x)\n",
|
||||
"print()\n",
|
||||
@@ -628,7 +628,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 10
|
||||
"prompt_number": 15
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
@@ -652,18 +652,18 @@
|
||||
"f1 = KalmanFilter(dim_x=4, dim_z=2)\n",
|
||||
"dt = 1.0 # time step\n",
|
||||
"\n",
|
||||
"f1.F = np.mat ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])\n",
|
||||
"f1.B = 0.\n",
|
||||
"f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"f1.F = np.array ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])\n",
|
||||
"f1.u = 0.\n",
|
||||
"f1.H = np.array ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"\n",
|
||||
"f1.R = np.eye(2) * 5\n",
|
||||
"f1.Q = np.eye(4) * .1\n",
|
||||
"\n",
|
||||
"f1.x = np.mat([0,0,0,0]).T\n",
|
||||
"f1.x = np.array([[0,0,0,0]]).T\n",
|
||||
"f1.P = np.eye(4) * 500.\n",
|
||||
"\n",
|
||||
"# initialize storage and other variables for the run\n",
|
||||
@@ -675,7 +675,7 @@
|
||||
"\n",
|
||||
"for i in range(count):\n",
|
||||
" pos = s.read()\n",
|
||||
" z = np.mat([[pos[0]],[pos[1]]])\n",
|
||||
" z = np.array([[pos[0]],[pos[1]]])\n",
|
||||
"\n",
|
||||
" f1.predict ()\n",
|
||||
" f1.update (z)\n",
|
||||
@@ -696,13 +696,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2e0e790>"
|
||||
"<matplotlib.figure.Figure at 0x31e6290>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
"prompt_number": 17
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -722,18 +722,18 @@
|
||||
"f1 = KalmanFilter(dim_x=4, dim_z=2)\n",
|
||||
"dt = 1.0 # time step\n",
|
||||
"\n",
|
||||
"f1.F = np.mat ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])\n",
|
||||
"f1.B = 0.\n",
|
||||
"f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"f1.F = np.array ([[1, dt, 0, 0],\n",
|
||||
" [0, 1, 0, 0],\n",
|
||||
" [0, 0, 1, dt],\n",
|
||||
" [0, 0, 0, 1]])\n",
|
||||
"f1.u = 0.\n",
|
||||
"f1.H = np.array ([[1/0.3048, 0, 0, 0],\n",
|
||||
" [0, 0, 1/0.3048, 0]])\n",
|
||||
"\n",
|
||||
"f1.R = np.eye(2) * 5\n",
|
||||
"f1.Q = np.eye(4) * .1\n",
|
||||
"\n",
|
||||
"f1.x = np.mat([0,0,0,0]).T\n",
|
||||
"f1.x = np.array([[0,0,0,0]]).T\n",
|
||||
"f1.P = np.eye(4) * 500.\n",
|
||||
"\n",
|
||||
"# initialize storage and other variables for the run\n",
|
||||
@@ -745,7 +745,7 @@
|
||||
"\n",
|
||||
"for i in range(count):\n",
|
||||
" pos = s.read()\n",
|
||||
" z = np.mat([[pos[0]],[pos[1]]])\n",
|
||||
" z = np.array([[pos[0]],[pos[1]]])\n",
|
||||
"\n",
|
||||
" f1.predict ()\n",
|
||||
" f1.update (z)\n",
|
||||
@@ -756,8 +756,8 @@
|
||||
" pys.append(pos[1]*.3048)\n",
|
||||
"\n",
|
||||
" # plot covariance of x and y\n",
|
||||
" cov = np.mat([[f1.P[0,0], f1.P[2,0]], \n",
|
||||
" [f1.P[0,2], f1.P[2,2]]])\n",
|
||||
" cov = np.array([[f1.P[0,0], f1.P[2,0]], \n",
|
||||
" [f1.P[0,2], f1.P[2,2]]])\n",
|
||||
" \n",
|
||||
" #e = stats.sigma_ellipse (cov=cov, x=f1.x[0,0], y=f1.x[2,0])\n",
|
||||
" #stats.plot_sigma_ellipse(ellipse=e)\n",
|
||||
@@ -777,9 +777,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAFtCAYAAAAOBwJXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmcTfX/wPHX3e/M3Jmx74YxlrHOELIMki2EEFJ2WmxR\nZEmRLEnayK98K0oMJSJRlGyTJdkjY82+M+udu5/fHzfDmDOrMQbv5+PRQ+eee8/5jHk/6j3veZ/3\nRxMdHa0ghBBCCCHEQ0B7rxcghBBCCCFEbpHkVwghhBBCPDQk+RVCCCGEEA8NSX6FEEIIIcRDQ5Jf\nIYQQQgjx0JDkVwghhBBCPDT0d+OiZ8+exePx3I1LCyGEEEIIkczj8VCmTJlMv/+uJL8ej4datWrd\njUuL+9jKlStp167dvV6GyGMkLoQaiQuhRuJCqNm1a1eW3i9tDyLXnDp16l4vQeRBEhdCjcSFUCNx\nIXKCJL9CCCGEEOKhIcmvyDXNmze/10sQeZDEhVAjcSHUSFyInCDJr8g1lSpVutdLEHmQxIVQI3Eh\n1EhciJxwVx54S09CQgKxsbFoNJrcvrW4y3Q6HUWKFEnzexsVFUVEREQur0rkdRIXQo3EhVAjcSFy\nQq4mv1evXgWgRIkSkvw+gKxWK5cuXaJo0aL3eilCCCGEEKpyte3BbrdTsGBBSXwfUL6+vrjd7jTP\ny0/rQo3EhVAjcSHUSFyInCA9v0IIIYQQ4qEhya/INVFRUfd6CSIPkrgQaiQuhBqJC5ETJPm9zRdf\nfEGFChUICgpi06ZNya+PGDGCGTNmpHjvqFGjCAoKolChQmzcuDG3lyqEEEIIIbJIEx0dreT0RU+f\nPq26vfG5c+coUaJETt8uxzidTsqWLcuvv/5KlSpVMv258PBwZs6cSePGjVOda9euHV27dqVnz545\nudQ8K69/j4UQQgjxYNm1axelS5fO9Pul8nuLixcvYrPZcnSOoDzcJ4QQQgiRd0jy+5/69etTv359\nAIKDg5PbHtauXUtQUBBFixZlypQpmb7eBx98QFBQEFu3bmX06NEEBQXRrFmz5PPXr1/nxRdfJDQ0\nlJo1azJ//vwUnx88eDBjx46lV69eBAUFERYWRkJCQs58sfeI9GoJNRIXQo3EhVAjcSFyQq5vcpFX\nbd26ldOnTxMeHs6///6LVnvz54JTp04xePDgLFVxX331VV599VXat29P165d6dGjR4rzL730EkWK\nFGHv3r2cP3+etm3bUqNGDcLDw5Pf89133/Hpp5/y9ddfc+DAAfR6+XYJIYQQQtwJyaZuoSjptz9n\ndD6zn7tw4QLr1q3j2LFjmEwmypYtS7t27Vi1alWK5LdRo0a0bNkSgGrVqmXr3nmJzGcUaiQuhBqJ\nC6FG4kLkhDzX9mCeNo38BQqk+sc8bVqm35/We++V2yvGZ8+eBbwPygUHBxMcHExkZCSXL19O8b6Q\nkJBcW6MQQgghxMMgz1V+bWPGYBsz5q69/06k1fZgNBrT3Nns1vaJG0qWLInZbOb48ePptlKoffZ+\nJnuyCzUSF0KNxIVQI3EhcsKDlV3dZWm1PZQvX54tW7aonitSpAgHDx5M8VqxYsVo0KABb731FomJ\niTidTrZv386BAwdyfM1CCCGEEOImSX5vc3sltlOnTgQFBfH9998za9YsgoKCGDJkSIr3jBs3jpUr\nV1K6dGnGjx+f4tzgwYPZsGEDVatWpUOHDsmvz5kzhytXrlCnTh0qVqzIpEmTUlWPH7QxafLTulAj\ncSHUSFwINRIXIifIJhciR8n3WAghhBC5STa5EHmWzGcUaiQuhBqJC6FG4kLkBEl+hRBCCCHEQ0OS\nX5FrpFdLqJG4EGokLoQaiQuREyT5FUIIIYQQDw1JfkWukV4toUbiQqiRuBBqJC5ETpDkVwghhBBC\nPDQk+RW5Rnq1hBqJC6FG4kKokbgQOSHd5Pfdd9+lYcOGtGvXLvm11atX06pVK1q1asX69evv+gKF\nEEIIIYTIKekmvy1btmTOnDnJxw6Hg/fff59Fixbx1VdfMXXq1Lu+QPHgkF4toUbiQqiRuBBqJC5E\nTkg3+a1Zsyb58uVLPt63bx8VKlSgQIECFC9enGLFinHo0KG7vkiRdxQsWJB///33Xi9DCCGEECJb\n9Fl58+XLlylcuDCLFy8mMDCQwoULc+nSJUJDQ+/W+kQeoihKij+zSnq1hBqJC6FG4kKokbgQOSFb\nD7w988wztG7dGgCNRqP6nkGDBjFt2jSmTZvGp59+mud/VREZGcnjjz9O1apV6devH927d6dy5coc\nPHgQj8fDu+++S3h4OKGhoYwZMwaXywXAyZMn6dChA+XKlaNMmTL07duXuLi45OuuWbOGunXrEhQU\nRJ06dfj999+Tz4WFhbFx48bk49urqoMHD2bs2LH06tWLoKAgwsLCSEhIAGDlypU0aNCAcuXK0a1b\nNy5evJj8mXbt2lGxYkXGjx/Po48+yuOPP05SUhIA169f58UXXyQ0NJSaNWsyf/78FPcbOnQobdq0\nISgoiKFDhyaf69KlC2XKlAGgcePGBAUFMW7cONW/y6ioqBTfbzmWYzmWYzmWYzmW45w6joqKYtq0\naQwaNIhBgwaRVZro6Oh0y3hnzpxh4MCBrFy5kp07d/L555/z2WefAdCzZ0/GjRuXqvJ7+vRpatWq\nlepa586do0SJElleZG6IjIzkm2++4dtvvyU0NJT58+ezfft2APz9/Vm+fDmRkZFYLBZ69uxJ8+bN\nGTx4MEeOHGH//v088cQTuN1uevbsSdWqVZkyZQoAlStX5p133uGpp57i9OnTJCQkULlyZQDCw8OZ\nOXMmjRs3BrzJ786dOylbtizgTUZ/+eUXPv30U1q0aMGBAwcoX748Bw4coEuXLixdupSwsDDeeecd\nDhw4QGRkJIMHD6Z48eI0aNCA5557jkOHDtG9e3dGjx5NkyZN6NatG0WKFGHGjBmcP3+etm3bsnDh\nQsLDwxk8eDCbNm3il19+QVEUGjRowPLly1N8L29f4+3S+x5HRUXJT+0iFYkLoUbiQqiRuBBqdu3a\nRenSpTP9fn1WLl69enWOHDnCtWvXsNvtXLx48YFqeQgODiYgIIACBQpQvnx5zp8/z86dO/nxxx95\n6623KFasGAD9+/dn9uzZDB48mAoVKlChQoXka7Rv354ff/wx+Vir1XLixAni4uKy9I25oVGjRrRs\n2RKAatWqAbBgwQK6d+9OzZo1AW+SXL58eRwOR/LXUbZsWQoVKkRgYCBBQUFcuXKFCxcusG7dOo4d\nO4bJZKJs2bK0a9eOVatWER4eDkDr1q0pWbIkAFWqVOHYsWOqP8gIIYQQQtyP0k1+J06cyK+//kpM\nTAxNmjRhwoQJjBgxgu7duwPw+uuv5/iCWn6xO0eus3ZAzSx/5kYLh16vR6fTodfrcblcnD17lpde\negmt1tsl4vF4khPhy5cvM2bMGLZt24bVasXpdCYnkgDz5s3jo48+YubMmVSoUIGPP/44ufKbGSEh\nIaleO3v2LFu2bCEyMjL5NZPJlNz6cGPtOp0u+djpdHLu3DmAFOtzu9106tQp+TgwMDD5341GI3a7\nPdNrzYj8tC7USFwINRIXQo3EhcgJ6Sa/EyZMYMKECaleb9OmzV1bUHaS1rtJURRKlizJ7NmzqV27\ndqrzb7/9Njqdju3bt2OxWJgzZw4rVqxIPl+3bl0iIyNxOBy88sorTJ06lW+++QbwJqw3eodv7RO+\n1Y2E+1alSpVi5MiRDB8+PEtfS8mSJTGbzRw/fjzNXu2MZPdzQgghhBB5gezwlo4bUw2ee+45pk6d\nyoULF1AUhaNHjyZv8JGYmIjFYsHX15eTJ0/y1Vdfpfj8d999R0JCQnLSGBAQkHw+JCSEnTt3AqRo\nlchI9+7dmTdvHvv27UNRFC5fvswPP/yQat23K1q0KA0aNOCtt94iMTERp9PJ9u3bOXDgQIZ/B7de\n4+DBg5le661ubVoX4gaJC6FG4kKokbgQOUGS3/9oNJoUVc0bxxqNhsGDB1O/fn3atGlD2bJl6d27\nN1evXgVg1KhR7Nmzh7Jly9K/f39at26dfB1FUViyZAnVq1enQoUKXLx4McWEhNdee43vvvuO5s2b\nc/HiRdWqqtprderUYfLkyQwZMoSyZcvSrFkz9u3bp7r2282ZM4crV65Qp04dKlasyKRJk3C73Wne\n7/bjN954g1GjRlG1alUmT56c7t+pEEIIIURek+G0h+y4H6c9iJwh32MhhBBC5Ka7Ou1BCCGEEEI8\nuFwuOHxYy5EjOqxWDTod5M/voVo1N8WL53i99J6QtgeRa6RXS6iRuBBqJC6EGomLuyMxEebPN9K2\nrYXg4Hz06WNh6VIjmzbp+e03PZ9+aqZRowCqVAnkhRd82bpVTzY3e80TpPIrhBBCCPEQSkqC9983\nM2+eiXr1XLz8sp369RO45dn8ZIoCp09rWb3awPDhvhgMCuPHJ9GypSv3F36HpOdX5Cj5HgshhBB5\n359/6hg61I+qVd1MnJhE6dKeTH9WUWDdOj2jRvlSr56LqVOTyJfv3pWCs9rzK20PQgghhBAPkW++\nMdKzp4WxY5OYOzcxS4kvgEYDzZu72LQpDotFoWlTf06cuH9SylxfqceTtb9gcf9QFCXNGcMgvVpC\nncSFUCNxIdRIXNy5r7828t57Zlatiuepp5x3dC2LBaZPT+Lll220a+fPyZP3RwKcqz2/hQoV4uzZ\ns5QsWVJ15zJxf7t27VqK7ZGFEEIIkXds2qTn3Xd9+OmneMqVy7liZN++DlwuDV27WtiwIQ4fnxy7\n9F2Rqz2/AA6HgytXruT0LUUeYDKZKFiw4L1ehhBCCCFuEx8PjRoF8N57Vlq0uDsPqfXv70Line truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3836690>"
|
||||
"<matplotlib.figure.Figure at 0x3a3e5d0>"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -794,7 +794,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 12
|
||||
"prompt_number": 21
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -831,7 +831,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 13
|
||||
"prompt_number": 23
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -864,11 +864,11 @@
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2fbfa50>"
|
||||
"<matplotlib.figure.Figure at 0x3031ed0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 14
|
||||
"prompt_number": 24
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -922,30 +922,56 @@
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from math import radians, sin, cos\n",
|
||||
"import math\n",
|
||||
"\n",
|
||||
"def rk4(y, x, dx, f):\n",
|
||||
" \"\"\"computes 4th order Runge-Kutta for dy/dx.\n",
|
||||
" y is the initial value for y\n",
|
||||
" x is the initial value for x\n",
|
||||
" dx is the difference in x (e.g. the time step)\n",
|
||||
" f is a callable function (y, x) that you supply to compute dy/dx for\n",
|
||||
" the specified values.\n",
|
||||
" \"\"\"\n",
|
||||
" \n",
|
||||
" k1 = dx * f(y, x)\n",
|
||||
" k2 = dx * f(y + 0.5*k1, x + 0.5*dx)\n",
|
||||
" k3 = dx * f(y + 0.5*k2, x + 0.5*dx)\n",
|
||||
" k4 = dx * f(y + k3, x + dx)\n",
|
||||
" \n",
|
||||
" return y + (k1 + 2*k2 + 2*k3 + k4) / 6.\n",
|
||||
"\n",
|
||||
"def fx(x,t):\n",
|
||||
" return fx.vel\n",
|
||||
" \n",
|
||||
"def fy(y,t):\n",
|
||||
" return fy.vel - 9.8*t\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class BallTrajectory2D(object):\n",
|
||||
" def __init__(self, x0, y0, velocity, theta_deg=0., g=9.8, noise=[0.0,0.0]):\n",
|
||||
" theta = radians(theta_deg)\n",
|
||||
" self.vx0 = velocity * cos(theta)\n",
|
||||
" self.vy0 = velocity * sin(theta)\n",
|
||||
" self.x = x0\n",
|
||||
" self.y = y0\n",
|
||||
" self.t = 0\n",
|
||||
" \n",
|
||||
" self.x0 = x0\n",
|
||||
" self.y0 = y0\n",
|
||||
" theta = math.radians(theta_deg)\n",
|
||||
"\n",
|
||||
" fx.vel = math.cos(theta) * velocity\n",
|
||||
" fy.vel = math.sin(theta) * velocity\n",
|
||||
" \n",
|
||||
" self.g = g\n",
|
||||
" self.noise = noise\n",
|
||||
" \n",
|
||||
" def position(self, t):\n",
|
||||
" \"\"\" returns (x,y) tuple of ball position at time t\"\"\"\n",
|
||||
" \n",
|
||||
" x = self.vx0*t + self.x0\n",
|
||||
" y = -0.5*self.g*t**2 + self.vy0*t + self.y0\n",
|
||||
" \n",
|
||||
" return (x +random.randn()*self.noise[0], y +random.randn()*self.noise[1])"
|
||||
" def step (self, dt):\n",
|
||||
" self.x = rk4 (self.x, self.t, dt, fx)\n",
|
||||
" self.y = rk4 (self.y, self.t, dt, fy)\n",
|
||||
" self.t += dt \n",
|
||||
" return (self.x +random.randn()*self.noise[0], self.y+random.randn()*self.noise[1])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 15
|
||||
"prompt_number": 25
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -969,7 +995,7 @@
|
||||
" t = 0\n",
|
||||
" dt = 0.25\n",
|
||||
" while y >= 0:\n",
|
||||
" x,y = ball.position(t)\n",
|
||||
" x,y = ball.step(dt)\n",
|
||||
" t += dt\n",
|
||||
" if y >= 0:\n",
|
||||
" plt.scatter(x,y)\n",
|
||||
@@ -986,21 +1012,21 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAFyCAYAAAAzqYbaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8VOW97/HvmkvuF0iYGECugoAIAlIQyFaxlEi8FmsF\naxG31ipeqtJ6QXuqVXe3ntra04u72qqtPZUjXks3IIhsFbFaRQxqg7TcBSGQQCaTZK7r/DGSEBI0\nl0nWPJnP+/XyZZ6VyeSBL2vyyzO/9Sxr06ZNtgAAAAC0mcvpCQAAAACmoYgGAAAA2okiGgAAAGgn\nimgAAACgnSiiAQAAgHaiiAYAAADaqcNF9KhRo3ThhRfqwgsv1P333y9JWrZsmUpLS1VaWqo1a9Y0\nPvZYxwEAAAATWR3dJ3r8+PF6//33G8ehUEizZs3SkiVLFAwGNW/ePK1ateqYxwEAAABTeRL1ROXl\n5Ro+fLgKCgokScXFxaqoqFBtbW2rx0eOHJmobw0AAAB0qw4X0aFQSLNnz1Z6eroWLlyo/fv3y+fz\nafHixcrPz5fP59O+fftUV1fX6nGKaAAAAJiqw0X066+/rsLCQm3cuFHXX3+9brnlFknSnDlzJKlF\ny8aRxy3L6ui3BQAAABzX4SK6sLBQkjRmzBgVFRWpf//+Wr58eePnKysrVVRUpEAgoMrKymbHfT5f\ni+d7//331adPn45OBwAAAGgTv9+vk046qVPP0aEi+tChQ0pPT1dGRoZ27drV2J6xefNmVVVVKRgM\nau/evRo5cqRCoVCrx4/Wp08fTZgwoVN/GDhn6dKlOu+885yeBjqA7MxGfuYiO7ORn9nWr1/f6efo\nUBG9ZcsW3XHHHUpLS5Pb7dZ9992nnJwcLVy4UHPnzpUkLVq0SJKUlpbW6nH0LDt27HB6CuggsjMb\n+ZmL7MxGfuhQET1+/HitWLGixfGysjKVlZW1+TgAAABgIu5YiISYMWOG01NAB5Gd2cjPXGRnNvID\nRTQSYsSIEU5PAR1EdmYjP3ORndnIDxTRSIi1a9c6PQV0ENmZjfzMRXZmIz9QRAMAAADtZG3atMl2\nehKStHPnTra4AwAAQJdbv369BgwY0KnnYCUaAAAAaCeKaCQEvWHmIjuzkZ+5yM5s5AeKaAAAAKCd\n6IkGAABASqEnGgAAAHAARTQSgt4wc5Gd2cjPXGRnNvIDRTQAAADQTvREAwAAIKXQEw0AAAA4gCIa\nCUFvmLnIzmzkZy6yMxv5gSIaAAAAaCd6ogEAAJBS6IkGAAAAHEARjYSgN8xcZGc28jMX2ZmN/EAR\nDQAAALQTPdEAAABIKfREAwAAAA6giEZC0BtmLrIzG/mZi+zMRn6giAYAAADaiZ5oAAAApBR6ogEA\nAAAHUEQjIegNMxfZmY38zEV2ZiM/UEQDAAAA7URPNAAAAFIKPdEAAACAAyiikRD0hpmL7MxGfuYi\nO7ORHyiiAQAAgHaiJxoAAAAphZ5oAAAAwAEU0UgIesPMRXZmIz9zkZ3ZyA8U0QAAAEA70RMNAACA\nlEJPNAAAAOAAimgkBL1h5iI7s5GfucjObOQHimgAAACgneiJBgAAQEqhJxoAAABwAEU0EoLeMHOR\nndnIz1xkZzbyA0U0AAAA0E70RAMAACCl0BMNAAAAOIAiGglBb5i5yM5s5GcusjMb+aFTRXRtba1K\nSkr0+OOPS5KWLVum0tJSlZaWas2aNY2PO9ZxAAAAwESd6on+6U9/qn/+85+aPHmyvvWtb2nWrFla\nsmSJgsGg5s2bp1WrVikUCrV6/Gj0RAMAAKA7JKIn2tPRL9yyZYuqqqp08skny7ZtlZeXa/jw4Soo\nKJAkFRcXq6KiQrW1ta0eHzlyZKcmDgAAADilw+0cP/vZz3TDDTc0jvfv3y+fz6fFixdr+fLl8vl8\n2rdv3zGPo2ehN8xcZGe2ROcXCEiRSOufO9ZxdAznntnIDx0qol999VUNHjxYffv2lW037waZM2eO\nZs2a1eJrjjxuWVZHvi0AoA1sW9q/31JNTcvPbdrk0pNPpmnpUq8qK5tei6NRaeVKj8rKcnX11dna\nsqXpc7GYtGaNRxdemKNbb83U9u3Nf3Rs3erS8uUevf22W/X1XfbHAoCk0qF2jvLycq1cuVKrV69W\ndXW1XC6XLr30UlVWVjY+prKyUkVFRQoEAi2O+3y+Vp93wYIFGjhwoCQpPz9fY8aMUUlJiaSm3/gY\nJ+f48LFkmQ/jto9LSkqSaj6M2zb2etM0ePBkjR5dojfffFO2baukpETRqPTCCxHdc0+hjjsuql/+\nsk4HDrwuSRo06N908cU52rXLLUm6++463XhjUGvXrpVljdZllw1RJGJp40YpLy+shx8OSZLWrTuo\nOXMGKxy2tG6dV5mZYZ133juaOHGidu60NGdOljZv9kqy9X//b6169XpD0WhU06aV6O9/d+vZZ106\n8cSQzj/fpaIiOyn+/hgzZpxa48Mf79ixQ5J01VVXqbM6fbOVX/3qV8rOztZll12ms88+u/ECwssv\nv1wrV65scWHh4eNH48JCAGibaFRascKj738/W717x/ToowGdfHJMkvTJJy6VlOQpEomvJJ99dkhP\nPRWQ2y198IFL06fnNz7PtGlhvfhibaufO+ec+NdJ0nvvufW1r+U1fu7rXw/p97+Pf+7tt92aNavp\ncxdfHNRvf1snSfrHP1yaMSNP9fXxufzsZwHNnx9qfOz777u1bp1HQ4ZENXVqRL16JfSvCQCOKalu\ntuL1erVw4ULNnTtX8+fP16JFiyRJaWlprR5Hz3Lkb3owC9klr4oKlx58MEOPPZamnTub2iu2bnXp\niitytHevSxUVHt15Z6ZCn9em0Wj8v8Pq6uLtHZJUXGxr0qTw55+xddllQbnji9IaOjSmH/wg3ovR\nu3dMN9/c0PgcQ4ZENX9+fJyba+uaa5o+16ePrcLCWOP49NMjjR9XV1uNBbQkbdzobvZnO//8XP3w\nh1m67LJcvfqqt9mfvbLS0gcfuFq0jvQknHtmIz94OvsE119/fePHZWVlKisra/GYYx0HgFRn29Jn\nn1nyeCSfr+mNwc8+szR3bra2b4+/TH/0UYN++tN6eT5/1Y411a2Nq86SNGRITA8/XKfvfz9LffrY\nuvvuhsavOe44W48+GtBHH7mVny+dckpTwZubK91wQ4MuuiikjAxbAwc2zaWgQPpf/6teV1wRVHZ2\nvOA+7IQTYnrxRb/+/neP+vaNadKkpuccPDimSZPCeucdr9LSbM2e3bQKXVlpKRBomvd773k0e3a8\nwN+zx9Itt2Tp5ZfT1KdPTM8/729caQeAZNHpdo5EoZ0DQKqJxeIX8113XbZycmw9/nhAp54aX0be\nvNmlyZOb2itGjYpq+fIa5eVJ4bD00kte3XxzvJ3jj38MaNy4puXncFjas8eltDRbxcXOvsR/+qml\nrVtd6tXL1kknxeT6fGF5+3aXvvGNbP3rXx653baee662cRX7tdc8+vrXcxuf49Zb63X77U2r35s2\nufTPf7pUXGxr7NiovM0XsQHgSzm6TzQAoG0Orza73VJRUVNRu3NnvC0jGLRUXS3dckuW/vpXv3Jz\nJZ8vpksvDerPf06XZOvaaxuU93nrsdcrXXhhWFOmHJLHE19hPpLXKw0cmBwrt/372+rfP9ri+KBB\nMT3zTECbN7vUp0+8GD4sN9eWZdmy7fhKdb9+TX+WzZtduuCCXO3b55Lbbeull/yaOrXl8wNAV+u5\nzWboVvSGmYvsupZtS6+84tHpp+fpq1/N07vvur/w8Yd3AO3VS/rRj+r10ks1evllf7NWCEnyeOIF\n6ubNb3TV1LvckCExzZwZ0YQJ0caWE0k6+eSo/vCHgEpKwrr11nrNmBFu/Nz27S7t2xf/0RWNWnrz\nzebL0Nu2ufTaax794x/J/+ONc89s5AdWogGgC+3caemKK3JUVxevjm+8MVvLltWoVy9pwICYnnyy\nVtdfH2/n+PnP65ST0/S1Pp8tny/1VlnT0qRzzw1r1qxw44WPh/XtG1NWlt349zluXFMP9pYtLl18\ncba2bvUoO9vWX/7i1/jxqff3B6B7UEQjIQ7vxwjzkF1ibN7s0l/+kqb0dFvnnBPWkCHxFoSj7y1l\nWU3HXC5p5syI3nijRm538wsL26on53d0AS1Jo0fHtHSpX+Xlbg0aFNNXvtJURP/rXy5t3Rr/sRYI\nWHrrLU+zItq2Jb9fyspSs5Vvp/Tk7FIB+SEJXkYAwGxVVZa++90sbdgQby14662QHn00oOxs6fjj\nbf3hD7VasCBbGRm2fvGLgPKbrheUZcnxi/9MM358tNUV5j59bLndtqLR+G8pQ4c2PaamRvrzn9P0\nxz9maPr0sK6/vkF9+/L3DqDjkr9pDEagN8xcZNc++/ZZzW6XLUm1tZY+/LBpTWL9eo9qa+OPsSzp\nq1+N6LXXavTKK35NnJjY9gLyazJmTFQvvFCrG2+s1xNP1Oq005pWqTds8GjRomxVVLj1yCMZeust\n59eQyM5s5AfnX0UAwBBr13p07bXZcrni+y1PnhwviPv0iem66xr0i19kSpKuv75BBQXNVzlZbe56\nHo9UUhJRSUmkxefq65uP/f7mvwhVVUlVVS7l59sdaqsBkHrYJxoA2uCzzyydcUaeKivjb+Adf3xU\nq1f7Gwuu6mrp44/dcrvju0sceYEgnLdnj6WFC7O0YkWaTjopoj/8IaATToj3rX/6qaUf/CD+uQkT\nwnrssYCGDEmKH40Augj7RANAF6iqkiSrxWrykbfTtm2r8XbaktS7tzRtGjtBJKu+fW396lcB7d9f\nr/x8u9ne2uXlbq1YkSZJWr/eq7ff9mjIkPCxngoAJNETjQShN8xcZNfcO++4NXNmnr72tVLine truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x2fc9e50>"
|
||||
"<matplotlib.figure.Figure at 0x3175550>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAFyCAYAAAAzqYbaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW9//H3mUkmO5GEiQEkChgIILIooBB3NBDEurQI\nLkCtt1qqVqW3KrW/Lg+11lav3Wyv3lpb7S2VaheuoGDFKmqlyioaBBQDgiSQQCbbrOf3x0hCSFCS\nTHLmO/N6Ph4+HpxvMsk3vnMmn/nO53yPtWXLFlsAAAAAjpnL6QkAAAAApqGIBgAAADqJIhoAAADo\nJIpoAAAAoJMoogEAAIBOoogGAAAAOqnLRfSIESN06aWX6tJLL9W9994rSVq2bJnKyspUVlamVatW\ntXzu0cYBAAAAE1ld3Sd63LhxWrduXctxIBDQ9OnTtWTJEvn9fs2dO1crV6486jgAAABgqpRYfaGN\nGzequLhYeXl5kqTCwkJVVFSovr6+w/GSkpJYfWsAAACgV3W5iA4EArr88suVlpamhQsXat++ffJ6\nvVq8eLFyc3Pl9XpVVVWlxsbGDscpogEAAGCqLhfRr7zyivLz87Vp0ybddNNNuv322yVJs2fPlqR2\nLRuHj1uW1dVvCwAAADiuy0V0fn6+JGn06NEqKCjQwIEDtXz58paPV1dXq6CgQA0NDaqurm4z7vV6\n2329devWqV+/fl2dDgAAAHBMfD6fRo4c2a2v0aUi+uDBg0pLS1N6erp27drV0p6xdetW1dTUyO/3\na+/evSopKVEgEOhw/Ej9+vXT+PHju/XDwDlLly7VzJkznZ4GuoDszEZ+5iI7s5Gf2dauXdvtr9Gl\nIvqDDz7QXXfdJY/HI7fbrXvuuUfZ2dlauHCh5syZI0latGiRJMnj8XQ4jsRSWVnp9BTQRWRnNvIz\nF9mZjfzQpSJ63Lhxev7559uNl5eXq7y8/JjHAQAAABNxx0LExNSpU52eArqI7MxGfuYiO7ORHyii\nERPDhw93egroIrIzG/mZi+zMRn6giEZMrF692ukpoIvIzmzkZy6yMxv5gSIaAAAA6CRry5YtttOT\nkKSdO3eyxR0AAAB63Nq1azVo0KBufQ1WogEAAIBOoohGTNAbZi6yMxv5mYvszEZ+oIgGAAAAOome\naAAAACQVeqIBAAAAB1BEIyboDTMX2ZmN/MxFdmYjP1BEAwAAAJ1ETzQAAACSCj3RAAAAgAMoohET\n9IaZi+zMRn7mIjuzkR8oogEAAIBOoicaAAAASYWeaAAAAMABFNGICXrDzEV2ZiM/c5Gd2cgPFNEA\nAABAJ9ETDQAAgKRCTzQAAADgAIpoxAS9YeYiO7ORn7nIzmzkB4poAAAAoJPoiQYAAEBSoScaAAAA\ncABFNGKC3jBzkZ3ZyM9cZGc28gNFNAAAANBJ9EQDAAAgqdATDQAAADiAIhoxQW+YucjObORnLrIz\nG/mBIhoAAADoJHqiAQAAkFToiQYAAAAcQBGNmKA3zFxkZzbyMxfZmY38QBENAAAAdBI90QAAAEgq\n9EQDAAAADqCIRkzQG2YusjMb+ZmL7MxGfqCIBgAAADqJnmgAAAAkFXqiAQAAAAdQRCMm6A0zF9mZ\njfzMRXZmIz9QRAMAAACdRE80AAAAkgo90QAAAIADKKIRE/SGmYvszEZ+5iI7s5EfulVE19fXq7S0\nVI8//rgkadmyZSorK1NZWZlWrVrV8nlHGwcAAABM1K2e6J/85Cfatm2bJk2apKuvvlrTp0/XkiVL\n5Pf7NXfuXK1cuVKBQKDD8SPREw0AAIDeEIue6JSuPvCDDz5QTU2NTjnlFNm2rY0bN6q4uFh5eXmS\npMLCQlVUVKi+vr7D8ZKSkm5NHAAQW42N0qZNbvl8lkaMCGvgwLi47hwA4lKX2zkeeugh3XzzzS3H\n+/btk9fr1eLFi7V8+XJ5vV5VVVUddRyJhd4wc5Gd2TqTX2OjtG6dW2vXutXQ0P7jy5alavr0HM2a\nlaMFC7JUVWXFcKY4Euee2cgPXSqiX3rpJZ100knq37+/bLvtSsXs2bM1ffr0do85fNyyeGIGgJ5S\nVWXpww8t1de3jgWD0h/+4NEFF+Ro6tQcPfWUR4FA68fDYenxx9MkRZ+fX301VZ980vpcfeCAtHx5\nih55JE0bNrT90/HBB5aefTZVK1emqKamJ38yAIgfXWrn2Lhxo1asWKF//OMfqq2tlcvl0lVXXaXq\n6uqWz6murlZBQYEaGhrajXu93g6/7oIFC1RUVCRJys3N1ejRo1VaWiqp9RUfx/F5fGgsXubD8bEf\nl5aWxtV8OG5//Nprr8myLE2ePLnNx6dMKdXQoWfprbc+UiCwS5MnT9aWLS7NnZuprVtTtGBBsxYu\nbNbmzauVljZE9947QoeK5Pvuy9TFFwc1cKCt1atXKz09XRdcMEX/+leqJGngwLD69o0ukrzxxhva\nvn2SbrklR5KUk2Prf//3Q02Z0ld79liaNy9LmzdHH3fPPY2aMGG1/H6/pkwp1VtvubV8ua1hw4Iq\nK3Orb1/n/39yzDHHyXd86N+VlZWSpOuvv17d1e2brfziF79QVlaWrrnmGk2bNq3lAsJ58+ZpxYoV\n7S4sPDR+JC4sBID2du2ytHp1ihobLZ17bkhDhkQkSbYtrVyZoptuylJmpq3HH2/Q+PFh3Xdfun7y\nk4yWx//f/9Vp8uSwamulWbOy9fbb0WJ3/Pignn66Xp9eriJJ2rvX0muvpai62qWzzw5qxIhIy8fu\nuCNDjz2W3nL897/XqbQ0rHfecenss3Nbxk8/PaSlS31KS5PeecelCy/sI78/Wrj/5jf1uuyyoCSp\nstLSO++4lZ0tjR0bUp8+sf9/BwBH4+iFhUdKTU3VwoULNWfOHEnSokWLJEkej6fDcSSW1atbV6Fh\nFrKLX36/9OMfp+vJJ6PF69ixIf3pT/Xyem1VVro0f362mpujBeptt2Vq2TKfsrMPXxex5fFE/9W3\nr/TLXzbqiSfSFIlI113nb1NAS9Lxx9u6/PJgh3OZPj2o3/wmTZGIpZNPDmnQoOj36dfP1qmnhrRx\nY/TPyeWX+5WWFn3Mvn2ulgJakjZvduuyy4KqqrJ0441ZLaveDz7YoC9/OdDm+zU3Sykp0f8SFeee\n2cgP3X56uummm1r+XV5ervLy8nafc7RxAMDR1ddbeuWV1Jbj9evd8vmkQx1xh1+SEolE/7vkkqDW\nrQto/Xq3brmlWSNHhls+Z9iwiO67r6lLc5kyJaQVK3zat89ScXFEJ54YXaUuLLT129/Wa/36FOXk\n2DrttFDLYwYPjqi4OKStW1Pk8diaOjVaoFdVWS0FtCT98Y9puvrqQEvB/8Ybbn33u5nyeiP67neb\nNGxY64o4AMSLbrdzxArtHACSVW2tVFtrKTdXys9vfUoOhaRHHknT976XKUm68kq/7r+/Ubm50YJ5\nxYoUff3rWcrKsvXb3zbotNOiBXNTk9TUZCk315bb7ciP1GLHDpc+/NClfv0iGjUqIpdL2r3b0mWX\nZWvr1ug6zre/3aiFC/2SpI8+cumss/qovj66gl1WFtDvftfQUmBL0qZNLj31VJoKCiL60pcCKiqK\niz9jAAwSV+0cAICjq662FA5HWyYO36Bo925Ld9yRoeee8+iMM0J65JFGnXRSdOU1JUWaN8+vcePC\nCgSk0aPDyv20/djlksrKQlq9uk5ut1RQ0FpIZmRIGRnxUViedFKk5ec5ZMAAW3/4Q4PWrElRbq6t\niRNbV68DAbXZVeSTT1wKhdRSRO/caemLX8xRdXV0h5DKSpceeqhJbnf0hUVtraX0dFtZWT3+owFI\nct267TdwyOFXv8IsZNfz1q5168ILc3TWWX30wgspihxWU65f79Zzz0W3lvvXv1K1Zk3bpePcXOms\ns0K64IJQm0JZkixL2r791XbjJjj55IiuuiqgGTOC8npb53/CCRHde2+jJFuZmbZ+8IMmZWa2Pq6+\n3mopoCVpw4YU+f3R4vuZZ1J1/vk5uvbabG3dGv9/3jj3zEZ+iP9nGQCIc8Gg9O9/u/XnP6dq3Tp3\nm17l+npp4cJMVVa6tX9/9GLAysrWp97D2xQkKT1dSS0jQ5o/P6A33qjTq68e1Flnhdp8fMCAiObP\nb5YkWZat225rVmamVFHh0o03ZmnnTrdefjlVjz6a5sT0ASQR2jkQE1yhbC6y675169yaMSNH4bCl\ntDRbzz/v05gxrRf02Z+xUDxuXEh33NGkxYs9KisLasKE0NE/uQOJmF9GhjR8eMcXE+bmSt/+dpNm\nzQooI0MaMSL6/zkctmTbrX0yh3qqD/nwQ5eeesqj6mpL11/v16mnOn+xYiJml0zIDxTRANBN27e7\nFA5Hiza/39JHH7laiujsbOmhhxp13XVZqq+39ItfNKioqLWAy8+Xbr+9Wddf71dOjt1uZRrt5edL\n+fnhNmPFxWF997uNuueeDA0YENFNNzW3fCwYlH74w3T9+c/R1ekVKzx68cU6nXCCeW0wAOIH7RyI\nCXrDzEV23XfyyRG53dGCLCPDbtn+7ZDx48NaudKnV1+tU1lZSK4jnnlTU6O7cnSlgCa/qOxs6atf\n9evf/67TihU+jRrVmoHfL737bmuveVWVS42NVkdfpleRndnID6xEA8Axqq62tGuXpT59pKFDW4u0\ncePCWr7cp8pKl4YMiejUU8PtHnv4xXPoGRkZarcTiBQtsL/1rWZdd12WIhFLX/96k/r3b/t5+/dL\nH3zgVmamrZKSiONbAwKIf+wTDQDHYO9eS7ffnqnlyz3KzY3o2WfrNW5c+2IZ8SkYjF582Nxsqbg4\nrOOOa/1Yba30ve9l6skn05SSYusPf6jXhRd2rjcdgFlisU807RwAcAy2bXNp+fJov8XBgyLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3a24a90>"
|
||||
"<matplotlib.figure.Figure at 0x362cc90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 16
|
||||
"prompt_number": 26
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1107,7 +1133,6 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from KalmanFilter import KalmanFilter\n",
|
||||
"from math import sin,cos,radians\n",
|
||||
"\n",
|
||||
"def ball_kf(x, y, omega, v0, dt):\n",
|
||||
@@ -1119,25 +1144,27 @@
|
||||
"\n",
|
||||
" ay = .5*dt**2\n",
|
||||
"\n",
|
||||
" f1.F = np.mat ([[1, dt, 0, 0, 0], # x = x0+dx*dt\n",
|
||||
" [0, 1, 0, 0, 0], # dx = dx\n",
|
||||
" [0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2\n",
|
||||
" [0, 0, 0, 1, dt], # dy = dy0 + ddy*dt \n",
|
||||
" [0, 0, 0, 0, 1]]) # ddy = -g.\n",
|
||||
" f1.F = np.array ([[1, dt, 0, 0, 0], # x = x0+dx*dt\n",
|
||||
" [0, 1, 0, 0, 0], # dx = dx\n",
|
||||
" [0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2\n",
|
||||
" [0, 0, 0, 1, dt], # dy = dy0 + ddy*dt \n",
|
||||
" [0, 0, 0, 0, 1]]) # ddy = -g.\n",
|
||||
" \n",
|
||||
" # compute velocity in x and y\n",
|
||||
" omega = radians(omega)\n",
|
||||
" vx = cos(omega) * v0\n",
|
||||
" vy = sin(omega) * v0\n",
|
||||
" \n",
|
||||
" f1.Q *= 0.\n",
|
||||
"\n",
|
||||
" f1.x = np.mat([x, vx, y, vy, -g]).T\n",
|
||||
" f1.x = np.array([[x, vx, y, vy, -g]]).T\n",
|
||||
" \n",
|
||||
" return f1"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 17
|
||||
"prompt_number": 36
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1158,12 +1185,11 @@
|
||||
"\n",
|
||||
"ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[0,0])\n",
|
||||
"f1 = ball_kf(x,y,theta,v0,dt)\n",
|
||||
"\n",
|
||||
"t = 0\n",
|
||||
"while f1.x[2,0] > 0:\n",
|
||||
" t += dt\n",
|
||||
" f1.predict() \n",
|
||||
" x,y = ball.position(t)\n",
|
||||
" x,y = ball.step(dt)\n",
|
||||
" p1 = plt.scatter(f1.x[0,0], f1.x[2,0], color='black', marker='+', s=75)\n",
|
||||
" p2 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
"\n",
|
||||
@@ -1178,11 +1204,11 @@
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x4204350>"
|
||||
"<matplotlib.figure.Figure at 0x42b71d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 18
|
||||
"prompt_number": 41
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1263,11 +1289,11 @@
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"##### Step 6: Design the Process Noise Matrix\n",
|
||||
"Finally, we design the process noise. As with the robot tracking example, we don't yet have a good way to model process noise. However, we are assuming a ball moving in a vacuum, so there should be little to no process noise. For now we will assume the process noise is 0.02 for each state variable. This is a bit silly - if we were in a perfect vacuum then our predictions would be perfect, and we would have no need for a Kalman filter. We will soon alter this example to be more realistic by incorporating air drag and ball spin. \n",
|
||||
"Finally, we design the process noise. As with the robot tracking example, we don't yet have a good way to model process noise. However, we are assuming a ball moving in a vacuum, so there should be no process noise. For now we will assume the process noise is 0 for each state variable. This is a bit silly - if we were in a perfect vacuum then our predictions would be perfect, and we would have no need for a Kalman filter. We will soon alter this example to be more realistic by incorporating air drag and ball spin. \n",
|
||||
"\n",
|
||||
"We have 5 state variables, so we need a $5{\\times}5$ covariance matrix:\n",
|
||||
"\n",
|
||||
"$$\\mathbf{Q} = \\begin{bmatrix}0.02&0&0&0&0\\\\0&0.02&0&0&0\\\\0&0&0.02&0&0\\\\0&0&0&0.02&0\\\\0&0&0&0&0.02\\end{bmatrix}$$"
|
||||
"$$\\mathbf{Q} = \\begin{bmatrix}0&0&0&0&0\\\\0&0&0&0&0\\\\0&0&0&0&0\\\\0&0&0&0&0\\\\0&0&0&0&0\\end{bmatrix}$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1292,10 +1318,9 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from KalmanFilter import KalmanFilter\n",
|
||||
"from math import sin,cos,radians\n",
|
||||
"\n",
|
||||
"def ball_kf(x, y, omega, v0, dt, r=0.5, q=0.02):\n",
|
||||
"def ball_kf(x, y, omega, v0, dt, r=0.5, q=0.):\n",
|
||||
"\n",
|
||||
" g = 9.8 # gravitational constant\n",
|
||||
" f1 = KalmanFilter(dim_x=5, dim_z=2)\n",
|
||||
@@ -1325,7 +1350,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 19
|
||||
"prompt_number": 75
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1341,10 +1366,10 @@
|
||||
"y = 1.\n",
|
||||
"x = 0.\n",
|
||||
"theta = 35. # launch angle\n",
|
||||
"v0 = 50.\n",
|
||||
"v0 = 80.\n",
|
||||
"dt = 1/10. # time step\n",
|
||||
"\n",
|
||||
"ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[1,1])\n",
|
||||
"ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[.2,.2])\n",
|
||||
"f1 = ball_kf(x,y,theta,v0,dt)\n",
|
||||
"\n",
|
||||
"t = 0\n",
|
||||
@@ -1352,7 +1377,7 @@
|
||||
"ys = []\n",
|
||||
"while f1.x[2,0] > 0:\n",
|
||||
" t += dt\n",
|
||||
" x,y = ball.position(t)\n",
|
||||
" x,y = ball.step(dt)\n",
|
||||
" z = np.mat([[x,y]]).T\n",
|
||||
"\n",
|
||||
" f1.update(z)\n",
|
||||
@@ -1361,7 +1386,7 @@
|
||||
" \n",
|
||||
" f1.predict() \n",
|
||||
" \n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='.', s=75, alpha=0.5)\n",
|
||||
"\n",
|
||||
"p2, = plt.plot (xs, ys,lw=2)\n",
|
||||
"plt.legend([p2,p1], ['Kalman filter', 'Measurements'])\n",
|
||||
@@ -1373,13 +1398,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3a43e50>"
|
||||
"<matplotlib.figure.Figure at 0x3eea950>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 22
|
||||
"prompt_number": 74
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1417,7 +1442,7 @@
|
||||
"source": [
|
||||
"Our first step is to implement the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a nonspinning baseball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n",
|
||||
"\n",
|
||||
"**Important**: Before I continue, let me point out that you will not have to understand this next piece of physics to proceed with the Kalman filter. My goal is to create a reasonably accurate behavior of a baseball in the real world, so that we can test how our Kalman filter performs with real-world behavior. In real world applications it is usually impossible to completely model the physics of a real world system, and we make do with a process model that incorporates the large scale behaviors. We then tune $\\mathbf{Q}$ and $\\mathbf{R}$ until the filter works well with our data. There is a real risk to this; it is easy to finely tune a Kalman filter so it works perfectly with your test data, but performs badly when presented with slightly different data. This is perhaps the hardest part of designing a Kalman filter, and why it gets referred to with terms such as 'black art'. \n",
|
||||
"**Important**: Before I continue, let me point out that you will not have to understand this next piece of physics to proceed with the Kalman filter. My goal is to create a reasonably accurate behavior of a baseball in the real world, so that we can test how our Kalman filter performs with real-world behavior. In real world applications it is usually impossible to completely model the physics of a real world system, and we make do with a process model that incorporates the large scale behaviors. We then tune the measurement noise and process noise until the filter works well with our data. There is a real risk to this; it is easy to finely tune a Kalman filter so it works perfectly with your test data, but performs badly when presented with slightly different data. This is perhaps the hardest part of designing a Kalman filter, and why it gets referred to with terms such as 'black art'. \n",
|
||||
"\n",
|
||||
"I dislike books that implement things without explanation, so I will now develop the physics for a ball moving through air. Move on past the implementation of the simulation if you are not interested. \n",
|
||||
"\n",
|
||||
@@ -1453,7 +1478,7 @@
|
||||
"\n",
|
||||
"I will not belabor this issue further because the computational physics is beyond the scope of this book. Recognize that a higher fidelity simulation would require incorporating things like altitude, temperature, ball spin, and several other factors. My intent here is to impart some real-world behavior into our simulation to test how our simpler prediction model used by the Kalman filter reacts to this behavior. Your process model will never exactly model what happens in the world, and a large factor in designing a good Kalman filter is carefully testing how it performs against real world data. \n",
|
||||
"\n",
|
||||
"The code below computes the behavior of a baseball in air, at sea level, in the presense of wind. I plot the same initial hit with no wind, and then with a tail wind at 10 mph. Baseball statistics are universally done in US customary units, and we will follow suit here (http://en.wikipedia.org/wiki/United_States_customary_units). Note that the velocity of 50 m/s corresponds to a velocity of 110 mph, which is a typical exit speed for a baseball for a home run hit."
|
||||
"The code below computes the behavior of a baseball in air, at sea level, in the presense of wind. I plot the same initial hit with no wind, and then with a tail wind at 10 mph. Baseball statistics are universally done in US units, and we will follow suit here (http://en.wikipedia.org/wiki/United_States_customary_units). Note that the velocity of 110 mph is a typical exit speed for a baseball for a home run hit."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1462,13 +1487,16 @@
|
||||
"input": [
|
||||
"from math import sqrt, exp, cos, sin, radians\n",
|
||||
"\n",
|
||||
"def mph_to_mps(x):\n",
|
||||
" return x * .447\n",
|
||||
"\n",
|
||||
"def drag_force(velocity):\n",
|
||||
" \"\"\" Returns the force on a baseball due to air drag at\n",
|
||||
" the specified velocity. Units are SI\"\"\"\n",
|
||||
"\n",
|
||||
" return (0.0039 + 0.0058 / (1. + exp((velocity-35.)/5.))) * velocity\n",
|
||||
"\n",
|
||||
"v = 50.\n",
|
||||
"v = mph_to_mps(110.)\n",
|
||||
"y = 1\n",
|
||||
"x = 0\n",
|
||||
"dt = .1\n",
|
||||
@@ -1500,7 +1528,7 @@
|
||||
"x,y = solve(x=0, y=1, vel=v, v_wind=0, launch_angle=theta)\n",
|
||||
"p1 = plt.scatter(x, y, color='blue')\n",
|
||||
"\n",
|
||||
"x,y = solve(x=0, y=1,vel=v, v_wind=4.47, launch_angle=theta) # roughly 10 mph wind\n",
|
||||
"x,y = solve(x=0, y=1,vel=v, v_wind=mph_to_mps(10), launch_angle=theta)\n",
|
||||
"p2 = plt.scatter(x, y, color='green', marker=\"v\")\n",
|
||||
"plt.legend([p1,p2], ['no wind', '10mph wind'])\n",
|
||||
"plt.show()"
|
||||
@@ -1511,13 +1539,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3424650>"
|
||||
"<matplotlib.figure.Figure at 0x31e2f10>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 29
|
||||
"prompt_number": 72
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1587,13 +1615,13 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 30
|
||||
"prompt_number": 66
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Now we can test the Kalman filter against measurements created by this model. There is truly a significant difference in the predictions by the process model; the Kalman filter assumes that the ball is in a vacuum, and thus predicts that the ball would travel about twice as far as it actually does."
|
||||
"Now we can test the Kalman filter against measurements created by this model."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1642,34 +1670,137 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAsIAAAFyCAYAAAD/MLwxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlc1VX++PHX5+73sgsICFxA3JdccssUd00KW8zJpdEW\nG53IJW38Ttn0bWbUmXTa/Nak5fzSxmkszVzKSls0cV9KRQUVkU1AEGS7l7t+fn+QN/FeEPWiouf5\nePCA+1nOPZ83F3hz7vtzjpSeni4jCIIgCIIgCHcYxc3ugCAIgiAIgiDcDCIRFgRBEARBEO5IIhEW\nBEEQBEEQ7kgiERYEQRAEQRDuSCIRFgRBEARBEO5IIhEWBEEQBEEQ7kgNSoQrKyvp168f/+///T8A\nNm3axIgRIxgxYgQ//PBDo3ZQEARBEARBEBqDqiEHLVmyhE6dOiFJElarlddff53Vq1djsViYOHEi\ngwYNaux+CoIgCIIgCIJXXXFE+PTp05SUlNCpUydkWebw4cO0bt2aZs2aERERQXh4OGlpaTeir4Ig\nCIIgCILgNVdMhN944w2mTZvmelxcXExoaCirVq3iq6++IjQ0lHPnzjVqJwVBEARBEATB2+otjfj+\n+++JjY0lIiICWa69EvPYsWMB2LJlC5IkNV4PBUEQBEEQBKER1JsIHz58mM2bN/Pdd99RWlqKQqFg\n/PjxFBUVuY4pKioiNDTU7dyffvqJkJAQ7/dYEARBEARBEC5RUVFBhw4drvq8ehPhmTNnMnPmTADe\neecdfHx8ePzxx7nvvvsoKSnBYrFQWFhIu3bt3M4NCQmhe/fuV90hwbONGzeSlJR0s7txWxCx9C4R\nT+8S8fQuEU/vEbH0LhFP7zp48OA1ndegWSMupVarmT17NuPGjQPgpZdeuqYnFq5Odnb2ze7CbUPE\n0rtEPL1LxNO7RDy9R8TSu0Q8bw0NToSfe+4519eJiYkkJiY2SocEQRAEQRAE4UZQTps27dXGaLi8\nvJyIiIjGaPqOFBAQIGquvUTE0rtEPL1LxNO7RDy9R8TSu0Q8vSs/P5+AgICrPk9KT0+Xr3zY1cvJ\nyRE1woIgCIIgCEKjO3jwINHR0Vd93lXXCAs3R0pKCv369bvZ3bgtiFh6l4ind4l4etedFE9Zljl3\n7hwOh6NR2i8rK7umETfBMxHPqyPLMgEBAfj6+nq1XZEIC4IgCMJt4Ny5c/j5+WEwGBql/RYtWjRK\nu3cqEc+rI8uya8ay4OBgr7UrSiMEQRAE4TZw9uxZkVwJt726XufXWhpxxSWWBUEQBEEQBOF2JBLh\nJiIlJeVmd+G2IWLpXSKe3iXi6V0inoIg1EckwoIgCIIgCMIdSSTCTcSdctfzjSBi6V0int4l4uld\nIp71k2WZ/QX7+b8D/8e8nfP42+6/8fGxjzlvPu+15/j73/9OcHAw3377LVAzW0J4eDijRo3y2nPc\nDoKDgzlz5szN7sYdR8waIQiCIAi3qWp7Nd9nfU9aSRoWhwVftS89I3rSK6IXEhJrT6zlUNEhDCoD\nKkVNSpB5IZN3Dr7D5LsmE+kXCYDZbuZo0VGqHdW0CmpFuE94g/sgSRLx8fFs2LCBoUOH8tVXX2E0\nGpEkqVGuuSmSZbnWZ+HGESPCTYSoc/MeEUvvEvH0LhFP77qT41llq2LxgcXsK9iH1WFFQqLKVsWm\n05v4KPUjTpae5OfCnzGoak+3plQo0Sg0fJr+KU6nk/Un17Nw90LWn1rPt2e+5Z0D7/DuT+9SZilr\ncF+6detGamoqDoeDjRs3kpSUhCzLOJ1OXnvtNbp27Uq7du344x//iN1uByArK4sHH3yQli1bEhMT\nw5NPPkl5ebmrzW+++YZevXphNBrp2bMn33//vWtfly5d2LZtm+vx5aOtycnJvPjii0ycOBGj0UiX\nLl2orKwEYOPGjfTt25eWLVvy2GOPUVhY6DonKSmJNm3a8Morr9C7d28GDx6M2WwGoLS0lClTptCu\nXTu6devGRx99VOv5pk2bRmJiIkajkWnTprn2jRkzhpiYGAASEhIwGo3MnTu3QdcpXD+RCAuCIAjC\nbeiz9M+wOWxoldpa2w0qA5llmXyU+hEGtec5hyVJ4rz5PCuOruCnwp/QqrT4qH3QqXT4any5YL7A\n0p+XYnPYGtQXSZLo27cvmzZtoqioiNjYWADeeecdvv76a77++mv2799Peno6S5cuBcBqtTJp0iRS\nU1NJTU2ltLSU1157zdXmzJkzeemll8jOzmbt2rVERETUer4rjTh/+umnPP7442RlZfGf//wHlUrF\ngQMHmDFjBu+++y6nTp3irrvu4vnnn3ed07t3b5YsWcIHH3zA5s2b0el07N27F4CpU6ei0Wg4dOgQ\nn3/+Oa+99ho///yz69ytW7fywQcfsHPnTtavX8/BgwcBWL16NdnZ2QBs376d7Oxs5s+f36DrFK6f\nSISbCFHn5j0ilt4l4uldIp7edafG02w3c7rsNEqF0uN+vUrPyQsn600WnU4ne8/uRafSue1TKpRU\n2arYX7C/wX1KSkrixRdfZMSIEa5t//nPf5gzZw7h4eH4+vry9NNP88UXXwDQunVrHnnkEQwGA35+\nfowaNYqjR4+6zlUoFGRmZlJeXk50dDTt27dvcF8A+vfvz/Dhw5EkiU6dOqHT6Vi5ciXjxo2jW7du\nKBQKkpOT2bx5M1arFYC4uDhiY2MJCQkhICAAo9FIcXExBQUFfPfdd8ybNw+tVktsbCxJSUl8+eWX\nrucbOXIkkZGRREVF0aFDBzIyMhrUz+u9TqF+IhEWBEEQhNtMmaXsiqO1dqe93v1FpiLUSnWd+/Uq\nPUeKj1yxL7IsI0kSvXv3pl27djz44IOufXl5eUydOpW4uDji4uJITk6mpKSk5vmLinj66afp2LEj\ncXFxvPLKK66yCYAPP/yQffv20aVLF4YPH87x48ev2JdLxcfHu23Ly8tjxYoVrv5069YNrVbrKo9Q\nKpWoVCqUSqXrsc1m4+zZswB07drVde7HH39MUVGRq+1Ll1PWaDRYLJYG9fN6r1Oon0iEm4g7uc7N\n20QsvUvE07tEPL3rTo2nXqVHIdX/J97oZ8RkN9W5X6vSEqQLqreNhtzcJUmS67g1a9bQqlUr177I\nyEg+++wzMjMzyczMJCsriz179gDwl7/8BaVSyZ49e8jMzORPf/oTTqfTdW6vXr34+OOPSU9Pp3Xr\n1ixYsODXvmu1rqT50rriSykU7vGJiorihRdecPUnMzOTvLy8K65YFhkZiU6n4/Tp067zsrOzeeut\nt64Yn4vqGp2v7zqF6ycSYUEQBEG4zQRoA2huaF5nompz2BhgHECETwRWp9Vtv9lu5qHWD+FwOup8\nDrvTTnND8yv2xVMfLm6bMGECCxYsoKCgAFmWOXXqFD/88AMAVVVV+Pr6YjAYyMrKYvny5bXO//TT\nT6msrHQlkP7+/q798fHxHDhwAIANGzZcsY8XjRs3jg8//JDDhw8jyzJFRUV8/vnn9V4LQFhYGH37\n9uXVV1+lqqoKm83Gnj17apVy1BWDS9s4duyY2zH1Xadw/UQi3ETcqXVujUHE0rtEPL1LxNO77uR4\n3t/yfqrt1W4Jl8PpQKVQMTx2OJPvmkyn4E7YnXYqbZVU2arQq/T8pt1vGBo7lAi/iDqTYavTyuCY\nwVfsh6cb1y5uS05O5p577iExMZHY2FgmTZrE+fM1cxjPmTOHn3/+mdjYWJ5++mlGjhzpakeWZVav\nXk3nzp1p3bo1hYWFtWZa+MMf/sCnn37K0KFDKSws9Dja6mlbz549mTdvHs899xyxsbEMGTKEw4cP\nu/Xb07lLly6luLiYnj170qZNG/7617/icDhqnVvf87/88svMmTOHjh07Mm/ePNf2+q5TuH5Senp6\no0xal5OTQ/fu3RujaUEQBEEQLnP27FlatGhRa1tGaQabTm+i0FSILMuolCpi/GIY3XY0Adpfa1Zt\nDhtlljI0Sg3+2l9HHMssZSz9eakrQYaakWCr08pDrR+ie5j4Oy/cWJ5e5wAHDx68YgmLJ2JBjSYi\nJSXljh7Z8CYRS+8S8fQuEU/vutPjGR8Uz7S7p1FaXYrJZiJQF4iP2sftOLVSTYghxG17gDaA53s8\nz/6C/RwpPoIsyzQ3NGdwzOBaibQgNFUiERYEQRCE21yQLuiKN77VRa1Uc0/kPdwTeY+XeyUIN5+o\nEW4i7uQRDW8TsfQuEU/vEvH0LhFPQRDqIxJhQRAEQRAE4Y4kEuEm4k6dC7MxiFh6l4ind4l4epeI\npyAI9RGJsCAIgiAIgnBHEolwEyHq3LxHxNK7RDy9S8TTu0Q8BUGoj0iEBUEQBEEQhDuSSISbCFHn\n5j0ilt4l4uldIp7eJeLZtM2ZMwej0UhISAjbtm272d1xkWWZZ599ltjYWIxGIzabrdb+vn37snPn\nzlrb+vfvT3R0NMHBwTidzhvZXQBGjhxJamrqDX/eq2GxWOjduzfFxcU37DlFIiwIgiAIQqNJSUmh\nU6dOrsfl5eUMGDCA+fPnX/HchQsXkp2dTVRUlMdljW+W3bt38+OPP5KWlkZ2djZqtbrW/p07d9K3\nb99a27Zv3+6WHF8uODiYM2fOeLu7bNmyBT8/v1rfh+TkZMLDwzEajbRv354ZM2ZgNpsb1F5eXh5J\nSUlERUUxaNAgjh8/3qDzUlJSCA4Oxmg0uj5Onjzp2q/Vann88cd58803r+4Cr8MVE+HS0lJGjx7N\ngw8+yKhRo9i0aRMA7du356GHHuKhhx5q0ItZuD6izs17RCy9S8TTu0Q8vUvE89ZiNpsZN24cvXr1\nYu7cuTe7O9csJycHo9GITqe7qvNkWb7ivvqOuVbLly/nsccec9s+ffp0srOz2bp1KwcOHOLine truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3443950>"
|
||||
"<matplotlib.figure.Figure at 0x42b0890>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 48
|
||||
"prompt_number": 70
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I have plotted the output of two different Kalman filter settings. The measurements are depicted as green circles, a Kalman filter with R=0.5 as a thin blue line, and a Kalman filter with R=10 as a thick red line. These R values are chosen merely to show the effect of $\\textbf{R}$ on the output, they are not intended to imply a correct design.\n",
|
||||
"I have plotted the output of two different Kalman filter settings. The measurements are depicted as green circles, a Kalman filter with R=0.5 as a thin blue line, and a Kalman filter with R=10 as a thick red line. These R values are chosen merely to show the effect of measurement noise on the output, they are not intended to imply a correct design.\n",
|
||||
"\n",
|
||||
"With R=0.5 we see that the Kalman filter follows the measurements quite closely, albeit slightly overshooting at the end of the trajectory. This small value of R tells the Kalman filter that we expect there to be about 1/2 meter error in the ball measurements, which is quite small, so the Kalman filter prefers the position implied by the measurement vs the process model. The small amount of overshoot is attributable to the incorrect assumption that the ball is travelling in a vacuum during the predict step. We see the effect of this when we set R=10, which incorrectly tells the Kalman filter that the noise in the measurments is on order of 10 meters. In this case the Kalman filter weights the prediction more, and the trajectory ends up overshoooting the measurements because air drag is not being considered by the filter. \n",
|
||||
"We can see that neither filter does very well. At first both track the measurements well, but as time continues they both diverge. This happens because the state model for air drag is nonlinear and the Kalman filter assumes that it is linear. If you recall our discussion about nonlinearity in the g-h filter chapter we showed why a g-h filter will always lag behind the acceleration of the system. We see the same thing here - the acceleration is negative, so the Kalman filter consistently overshoots the ball position. There is no way for the filter to catch up so long as the acceleration continues, so the filter will continue to diverge.\n",
|
||||
"\n",
|
||||
"At this point we should question the value of $\\textbf{Q}$, which tells the Kalman filter how much process noise there is in the system. We can think of air drag as process noise, and setting $Q=\\verb,I*0.1,$, for example, would cause the Kalman filter to fit the measurements quite well. If you are reading this in IPython Notebook I urge you to modify the code above to see the effects of various values for $\\textbf{Q}$ and $\\textbf{R}$. \n",
|
||||
"What can we do to improve this? The best approach is to perform the filtering with a nonlinear Kalman filter, and we will do this in subequent chapters. However, there is also what I will call an 'engineering' solution to this problem as well. Our Kalman filter assumes that the ball is in a vacuum, and thus that there is no process noise. However, since the ball is in air the atmosphere imparts a force on the ball. We can think of this force as process noise. This is not a particularly rigorous thought; for one thing, this force is anything but Gaussian. Secondly, we can compute this force, so throwing our hands up and saying 'it's random' will not lead to an optimal solution. But let's see what happens if we follow this line of thought.\n",
|
||||
"\n",
|
||||
"However, the errors caused by our process model are anything but Gaussian, so a large $\\textbf{Q}$ is a poor representation of the errors in the model. A better approach is to redesign the Kalman filter to model the behavior of a ball in air.\n",
|
||||
"\n",
|
||||
"This is where Kalman filter design becomes an 'art'. I prefer to think of it as emperical engineering. We try designs, measure their performance, work to understand the limits of the mathematical model that we are using, make changes based on that new understanding, and measure the performance of that new system to see if it matches our expectations. Blithely changing $\\textbf{Q}$ and $\\textbf{R}$ will eventually give you a filter that performs very well for a specific set of data, but the filter is likely to perform badly in different situations. Much of this theory and practice was developed by the radar folks in the 1960s and beyond. They were trying to develop filters to track aircraft and missles based on signals generated by radar. Testing was (and is) cumbersome and expensive, and they endlessly faught against overtuning their filters to the rather sparse data they had available. Your application may be less expensive and difficult to test, and you must do everything you can to ensure that your filter is robust in the presense of various process noise. There is significant literature devoted to this topic, and you will have to read it and master it if your application is critical. An excellent introduction to the topic (and excellent introduction to Kalman filters taking a g-h filters approach is the book *Tracking and Kalman Filters Made Easy* by Eli Brookner. I highly recommend this book even if tracking is not your primary interest, as its approach to the math is very clear, yet still rigorous."
|
||||
"The following code implements the same Kalman filter as before, but with a non-zero process noise. I plot two examples, one with `Q=.1`, and one with `Q=0.01`."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def plot_ball_with_q(q, r=1., noise=0.3):\n",
|
||||
" y = 1.\n",
|
||||
" x = 0.\n",
|
||||
" theta = 35. # launch angle\n",
|
||||
" v0 = 50.\n",
|
||||
" dt = 1/10. # time step\n",
|
||||
"\n",
|
||||
" ball = BaseballPath(x0=x, \n",
|
||||
" y0=y, \n",
|
||||
" launch_angle_deg=theta, \n",
|
||||
" velocity_ms=v0, \n",
|
||||
" noise=[noise,noise])\n",
|
||||
" f1 = ball_kf(x,y,theta,v0,dt,r=r, q=q)\n",
|
||||
" t = 0\n",
|
||||
" xs = []\n",
|
||||
" ys = []\n",
|
||||
"\n",
|
||||
" while f1.x[2,0] > 0:\n",
|
||||
" t += dt\n",
|
||||
" x,y = ball.update(dt)\n",
|
||||
" z = np.mat([[x,y]]).T\n",
|
||||
"\n",
|
||||
" f1.update(z)\n",
|
||||
" xs.append(f1.x[0,0])\n",
|
||||
" ys.append(f1.x[2,0]) \n",
|
||||
" f1.predict() \n",
|
||||
"\n",
|
||||
"\n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
"\n",
|
||||
" p2, = plt.plot (xs, ys,lw=2)\n",
|
||||
" plt.legend([p1,p2], ['Measurements', 'Kalman filter'])\n",
|
||||
" plt.show()\n",
|
||||
" \n",
|
||||
"plot_ball_with_q(0.01)\n",
|
||||
"plot_ball_with_q(0.1)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x319e550>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3d70850>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 90
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"However, for now we must leave this problem as it is. The effects of air drag are nonlinear, and so we have to bring nonlinear Kalman filters to bear on the problem. We will revisit this design problem once we have discussed the theory behind these filters."
|
||||
"The second filter tracks the measurements fairly well. There appears to be a bit of lag, but very little.\n",
|
||||
"\n",
|
||||
"Is this a good technique? Usually not, but it depends. Here the nonlinearity of the force on the ball is fairly constant and regular. Assume we are trying to track an automobile - the accelerations will vary as the car changes speeds and turns. When we make the process noise higher than the actual noise in the system the filter will opt to weigh the measurements higher. If you don't have a lot of noise in your measurements this might work for you. However, consider this next plot where I have increased the noise in the measurements."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"plot_ball_with_q(0.01, r=3, noise=3.)\n",
|
||||
"plot_ball_with_q(0.1, r=3, noise=3.)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x415b2d0>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3dccb10>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 91
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This output is terrible. The filter has no choise but to give more weight to the measurements than the process (prediction step), but when the measurements are noisy the filter output will just track the noise. This inherent limitation of the linear Kalman filter is what lead to the development of nonlinear versions of the filter.\n",
|
||||
"\n",
|
||||
"With that said, it is certainly possible to use the process noise to deal with small nonlinearities in your system. This is part of the 'black art' of Kalman filters. Our model of the sensors and of the system are never perfect. Sensors are non-Gaussian and our process model is never perfect. You can mask some of this by setting the measurement errors and process errors higher than their theoretically correct values, but the trade off is a nonoptimal solution. Certainly it is better to be nonoptimal than to have your Kalman filter diverge. However, as we can see in the graphs above, it is easy for the output of the filter to be very bad. It is also very common to run many simulations and tests and to end up with a filter that performs very well under those conditions. Then, when you use the filter on real data the conditions are slightly different and the filter ends up performing terribly. \n",
|
||||
"\n",
|
||||
"For now we will set this problem aside, as we are clearly misapplying the Kalman filter in this example. We will revisit this problem in subsequent chapters to see the effect of using various nonlinear techniques. In some domains you will be able to get away with using a linear Kalman filter for a nonlinear problem, but usually you will have to use one or more of the techniques you will learn in the rest of this book."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+408
-28
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:2703ec2a794449aaabf6044e38967bdacd2cadc551c734b81dfa513e4ae2ea54"
|
||||
"signature": "sha256:8cbcb6e649c23718ffea2f8ea7b974233a106f2a4079bd1aea11f0c7aa86e976"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -248,13 +248,13 @@
|
||||
],
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 1,
|
||||
"prompt_number": 2,
|
||||
"text": [
|
||||
"<IPython.core.display.HTML at 0x2e14cd0>"
|
||||
"<IPython.core.display.HTML at 0x12acb10>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 1
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -341,13 +341,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAssAAAFyCAYAAAADJZf7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3VGIW2d6//GfdGRpkhl7XDvj2snfITcmzi5u2dAWuhtY\nAktm7WzakIvFblnvTS52sy2FGlriZQkLzcUWcltaCr0rmBrCgqkDdotha/aiNG4Tt4tNyC7rTKK1\nxiNbGknWOdKR/hdjyZozRzOS5pXOe875fiCsJcueM9knj5559Tvvm7l9+3ZXAAAAALbIRn0BAAAA\ngK0YlgEAAIAhGJYBAACAIRiWAQAAgCEYlgEAAIAhGJYBAACAIbYdlu/evaszZ87oW9/6lt544w39\n/Oc/lyRdvnxZy8vLWl5e1rVr1/qvH/d5AAAAwGaZ7fZZXltb07179/T888/riy++0OnTp/Xv//7v\n+uY3v6mLFy/KdV2dPXtWV69eled5Onny5MjPAwAAALbLbfebBw8e1MGDByVJTz/9tFqtlv7nf/5H\nx44d04EDByRJhw8f1q1bt1Sr1cZ6/vjx49P8vgAAAIBd23ZYHvQf//Ef+vKXv6y1tTUtLS3pwoUL\nWlxc1NLSkkqlkhqNxljPMywDAADAdiPd4Le6uqq//du/1TvvvNN/7vTp0zp58uSW147yfCaTmfR6\nAQAAgJnZcWXZdV39xV/8hf76r/9aR48eValU0urqav/3V1dXdejQIdXr9ZGfX1pa2vJ1/vu//1tP\nPfXUbr8fAAAAYKj19XV96UtfGvn12w7L3W5Xb7/9tr71rW/ppZdekiSdOHFCn3zyicrlslzX1d27\nd3X8+HF5njfW80FPPfWUXnzxxTG/XSTdpUuX9Nprr0V9GbAMdYEw1AWCqAmEuXHjxliv33ZY/vDD\nD3XlyhX98pe/1L/8y78ok8noH/7hH3Tu3DmdOXNGknT+/HlJUj6fH+t5YBR37tyJ+hJgIeoCYagL\nBFETMGHbYfn3fu/39L//+79bnj916pROnTq16+cBAAAAm3GCH6z2jW98I+pLgIWoC4ShLhBETcAE\nhmVY7fnnn4/6EmAh6gJhqAsEURMwgWEZVrt+/XrUlwALURcIQ10giJqACQzLAAAAwBCZ27dvd6O+\nCEn67LPP2DoOAAAAU3Xjxg0dPXp05NezsgwAAAAMwbAMq5E3QxjqAmGoCwRREzCBYRkAQhSrrtbd\ndtSXAQCIGJllAAjx0Rfr+u29eR3eW4j6UgAABpFZBgAAAAxhWIbVyJshDHWBMNQFgqgJmMCwDAAB\nxaorz+9EfRkAAAswLMNqL730UtSXAAtNuy5KNU+ev/V2jmLVVbHqTvVrY3L0CwRREzCBYRlA6o06\nBJdqnko1bwZXBACwBcMyrEbeDGEmqYvtBuJSzdNawwv9fVaT44N+gSBqAiYwLANIhZ1WhStNP/T3\ng3/OyYr9lwEgRRiWYTXyZggz67oYHJB7QzWrzfahXyCImoAJDMsAIMnJZIb+XqXpq+75/cflRovs\nMgCkBMMyrEbeDGGmURdOoBtuNzzDTvQLBFETMIFhGUDqjHLTnpOV6p4/0n7L3AQIAMnFsAyrkTdD\nmN3WxahbwJUbrdD9lif9+zBd9AsEURMwgWEZQKKwygsAMIlhGVYjb4Yw29XFqKu883lnV9fgZLXj\nUM7gPlv0CwRREzCBYRlAqhSrrjy/o4XCZMNy78a/YfsyDyKeAQDxx7AMq5E3Q5jd1EWp5m2bQy5W\nXfnd4b8f3DVj8PXFqsuBJRGiXyCImoAJDMsAUqOQy247CEsbw7Tf2fmmPmkjytF7fe/Xvf2YeyvY\nAIB4Y1iG1cibIcykdbHutuV3upv2UB5cGR5lmB6Uyaj/+mCsY6cVbJhHv0AQNQETclFfAADMWi9K\nUay6Kq67/ZXksAiFk8mEDtBOJqNyozXV6wQARI+VZViNvBnCmKqLUSIXvcG67vmbhuZgdhnRo18g\niJqACbR7AIll8oa7cqM1cpYZAJAcDMuwGnkzhBmlLopVVyuVZv+Gu90YzDgPE1x5xuzRLxBETcAE\nMssAEql3g13d8/WrtcaudqYYJXJBfhkAkolhGVYjb4Yw49RFb4j1/K7yzs4rxIgv+gWCqAmYQAwD\nAKaMw0oAIL4YlmE18mYIY3Nd1D1/02AcPKwE02NzXSAa1ARMIIYBIBGKVTfqS5C0EfuYzz8+oGSh\n4DAoA0CMsbIMq5E3Q5iwurB19ZZdMmaHfoEgagImMCwDiKVi1d2ymhw8ctoG7M8MAPHGsAyrkTdD\nmOvXr6tU81SqeSP/mVH2SjZt8GvWPV9r9dGvF+OjXyCImoAJZJYBxJaTfZxVbnU2H0X9sNXZ8tpZ\nG/yawSwzACAeWFmG1cibIUyvLipNv7/C3B3IBVeavjzfzugD28hND/0CQdQETGBYBhBb20UrnEwm\nkujFduqer+K6a+WNiACAcAzLsBp5M4Tp1UUwWjG484STjSZ6EbyOQdzsN130CwRREzCBzDKAxOgd\nbT2KaW7pNs51AADsxsoyrEbeDGFM1AWrvMlDv0AQNQETGJYBIAJh+0QDAOzDsAyrkTdDmCTUxbj7\nRGNnSagLmEVNwASGZQCxM3/oqDy/s/MLAQDYJYZlWI28GcJkFw5Yu48yokO/QBA1ARMYlgEAAIAh\nGJZhNfJmCFOpVPq/jvsR0tzoZw79AkHUBExgn2UAsZbJaGr7Jc9CqebJyUoLBUd7C7RkALANK8uw\nGnkzhFlcXOz/Oo77JQcPRKk0fZVqntbq7I6xG/QLBFETMIFhGQBmLGzALzdaasVs6AeANGBYhtXI\nmyFMvV6P+hKMcjKZ/q/JME+OfoEgagImMCwDiB0nl6xsrzPQiUs1T3XPZ2gGAEswLMNq5M0QNjTO\nFQoRXc1sLBQcTvibAP0CQdQETGBYBmC13kpr0GB0AQCAaWFYhtXIm0HaWGntKVZdee32pugCINEv\nsBU1ARN4uwEQK6Wap06XVWUAwGwwLMNq5M0QJptNxrAcPH0wuP8yxkO/QBA1AROSdUs5gMQqVl15\nfidRw2Tw9MFyoxXh1QAAwrCyDKuRN0NPb3cIv9NVJyGHd8Tx9EGb0S8QRE3ABIZlAAAAYAiGZViN\nvBnCJCWzDLPoFwiiJmACwzIA66T99Lq658vzO1FfBgBADMuwHHmzdNrp9LqkZJaHKTda8vxkf4/T\nQL9AEDUBExiWAQAAgCEYlmE18mYIQ2YZYegXCKImYALDMgArDR7YkcbDOpxMRk5WWnfbUV8KAKQa\nwzKsRt4svRYKj4fl4H7ESc8sS5KTlSpNX3XPj/pSYoN+gSBqAiYwLAMAAABDcNw1rEbeLF0Gt4ur\ne75+ff9h6BZqZJYRhn6BIGoCJjAsA7DG4HZx5UZLkuT5XeUdhmMAQDSIYcBq5M0QJg2Z5TBpP6xl\nJ/QLBFETMGHHYfknP/mJvva1r+m1117rP/fCCy/o9ddf1+uvv6533323//zly5e1vLys5eVlXbt2\nbcfnAaQXg9/4djqsBQBg3o4xjFdeeUWvvvqq3n777f5zc3Nz+ulPf7rpdZ7n6b333tPFixfluq7O\nnj2rl19+eejzwCjImyVXb+g7sq8w9p8ls4ww9AsEURMwYcdh+Stf+YpWVlZ2/Is+/vhjHTt2TAcO\nHJAkHT58WLdu3VKtVgt9/vjx47u8dABIvrrna91ta2+BW0wAIAoTZZY9z9Mbb7yhM2fO6L/+678k\nSffu3dPS0pIuXLigDz74QEtLSyqVSkOfB0ZB3iw9ilU3dOeLMGnKLJcbLZVq3tCdQfAY/QJB1ARM\nmGip4mc/+5kOHjyomzdv6s/+7M905coVdR+drnX69GlJ0tWrVzf9mcHnMxk+QgWwWanmPdr5YvPz\nDv0isDNIxBcDACkz0bB88OBBSdKJEyd06NAhff755zp06JBWV1f7r1ldXdWhQ4dUr9e3PL+0tBT6\n97711lt69tlnJUmLi4s6ceJEP2/U++mQxzzmcTIedw4+p8XFxU2PnScWJElN15WyOWWzG0c+91aS\nB7PKnU63/zj4++12W7lMbujvx+Xx4Pc66M6dO7pz545V/3/ymMc2Pn7ppZesuh4eR/P45s2bqlQq\nkjb655tvvqlxZG7fvr3j55krKyv6/ve/r0uXLunBgweam5vT3NycVlZW9Cd/8ie6cuWKstmsTp48\n2b+R77vf/a6uXLkiz/NCnw/67LPP9OKLL4518QDi66Mv1iVJv/v03v7jmudr4dHS6W4iB0nZmzn4\nfXh+Vwt5R7/79N7+TiKT3CAJAGl248YNHT16dOTX53Z6wY9//GNdvXpVDx480Ne//nV9+9vf1qVL\nl5TP5+U4jt59913Nzc1Jks6dO6czZ85Iks6fPy9Jyufzoc8Do7h+/Xr/p0OgZ3BVOW3m846KVVcr\nlabyTpZheQD9AkHUBEzYcVh+55139M4772x67gc/+EHoa0+dOqVTp06N/DwAYDwLBUd318Pz3QAA\n8zjBD1ZjRSBdRr2ZL62rytge/QJB1ARMYFgGYA2HjrQtdgYBgNnjrQlW693VCgxK0z7Lg/hhYnv0\nCwRREzCB1gvAKvMEcQEAFmFYhtXIm6VPJiP53e1XjtOcWa57/o7/ftKKfoEgagIm7LgbBgBMU2+/\n4J7eaXUI1/v3M5hfZs9lAJgeVpZhNfJmyVeqeSrVvLH+TFozy4MG88uT/DtMIvoFgqgJmMCwDCBy\n5JQnw783AJg+hmVYjbxZshVyWXl+RwuF8Ya+NGeWB4377y3p6BcIoiZgAsMygMisu215PpEKAIC9\nGJZhNfJm6TDuDg9klhGGfoEgagImsBsGgMixA4YZ7IoBAOaxsgyrkTdDGDLLG+qer0/vNfLine truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3d8f9d0>"
|
||||
"<matplotlib.figure.Figure at 0x12085d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 2
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -373,13 +373,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAF9CAYAAADsuhWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//H3ZN/3QFgSwxIIaESCiguKoEWhgNpqlbbS\nXqWtor39tVytgK16K67XVqsW29vb63JbtSpFoW4otBrcKqBEkQiBkAUIWSf7OvP7IzImkGUmzJkz\nZ+b1fDx81DM5mfP22y/ffDj5zPfYioqKnAIAAACCWIjZAQAAAACzURQDAAAg6FEUAwAAIOhRFAMA\nACDoURQDAAAg6FEUAwAAIOhRFAMAgD66u7u1atUqzZw5U7m5uVq5cqVpWT744AMtXLhQp5xyinJz\nc3Xw4EHTsgzlkUce0dy5c82OgWGiKIZlzZ07V48++qjh18nNzdX69esNvw6AwFVeXq7c3Fz961//\nMjuKW15//XW9/PLLWrt2rbZu3arVq1ebluXOO+9Ubm6u3nrrLW3dulUZGRmm5HDnZ8F1112nF198\n0UeJ4G1hZgcA/JnT6ezzvwBwIqyylpSUlGjEiBHKz883NYfT6dSBAwe0bNkyjRw50tQcvf93IDEx\nMYqJifFFJBjAxhPt4Gtr167Vs88+q9raWmVnZ2vFihW64IILXF/Pzc3V008/rTPOOEOStG7dOq1a\ntUq7d++W1HOHuL9fn91000266aabJEnXXHONUlNTZbPZtHnzZqWlpWnFihVasGCBpJ67NhdddJE2\nb96s0aNHS+r5tdff/vY3bd682ZWjP/fee68uu+wy7wwGgIB2dK3pT+91TupZ2y699FJ1dXXphRde\nUGtrqxYtWqRf/epX2rdvnx544AEVFhbKbrdr7Nixuvbaa3XllVe6vv+aa65RXl6ejhw5orfeeksp\nKSlauXJln+t/8cUXWrNmjT799FPZbDbl5OTo9ttvd613jzzyiB577LHjsl5++eW65557JEkdHR16\n6KGHtHHjRjU2Nmry5Mn6+c9/runTpx/33/3b3/5WL7/8srZu3aqIiAjdfPPNuuKKK9wau4HW4KPr\n9rp16/Too4+61uyjYzB27FhXVnfGRJKef/55Pfnkkzpw4IBSU1M1f/58/fznPx80R++fBX/4wx/0\n61//WpI0evToPpmO2rZtm+69914VFRUpPj5eixcv1ooVKxQW1nN/8tZbb5XD4VBCQoJeeuklRUVF\nafny5VqyZIlb44UTR/sEfOrFF1/U448/rhUrVmjjxo2aPXu2brrpJpWVlXn0HgUFBcrIyNC1116r\nrVu3auvWrbr22mv7nLdp0yZNmDBBL730kr75zW/q5ptvVklJyaDvbbPZXP++detWFRQUSJJWr17t\nus78+fPd/w8GENRGjx6trVu36vnnn5ckPfroo6615LTTTjvu/PXr16uxsVFPPvmknnvuOU2bNk2S\nVFtbq2nTpmnt2rV67bXXdO211+qXv/yla4066vnnn9d5552nl156SdOmTdPq1avV3t7u+vp//Md/\nKCoqSn/961/1wgsv6KqrrlJnZ6fr69ddd522bt2qf/u3f1NGRoYra+/2iZUrV6qgoEAPPvigXn75\nZZ1//vm69tprVVlZedx/z4MPPqiZM2dq/fr1euyxx5SWlub22A20BnvaPjHUmPzf//2f/vM//1NX\nXHGFNm7cqN/85jfq7u4eMkfvnwXXXHONa9x6/xw5ym6360c/+pFycnK0fv163XXXXVq3bp1+//vf\n9zlv06ZNGjt2rNatW6cFCxZozZo1/Y4rjEH7BHzqL3/5iy699FItXrxYUs8C/cYbb+jZZ5/VzTff\n7NZ7JCcnS5JCQkIUExOj1NTUfs876aSTXHeOly9frg0bNuivf/2rbrnllgHfu/evxnq/b3x8/IDX\nAYCBhISEKDU1Va2trZKkxMTEQdeS5ORk3XHHHa7jyZMnS5JOP/10nX766a7Xr7zySj3zzDP6xz/+\noVmzZrlenzVrli699FJJPQXuK6+8otLSUuXk5EjquYO7cOFCTZgwQZKUnZ3d5/pHf/0fExPjyt5b\nSUmJ/v73v+v5559XXl6epK/W15dfflk/+MEP+pw/d+5cXXPNNZJ61mRPeGsNHmpMHn/8cX3nO9/R\n97//fVfO3ne93ckRHR2t6OhoxcTE9NtisXHjRknSHXfcoYiICI0fP15Lly7Vn//8Z914442u83Jy\nclw5brjhBj355JP6/PPPTW0dCSYUxfCp0tJSfeMb3+jzWm5urg4cOOD1ax1d8Hofl5aWev06AOAt\nvQvf3lpbW/W73/1OW7Zs0ZEjR9TZ2an29nZNmTKlz3m9i9zExERJPXcpj/rud7+rhx9+WO+++66m\nTZumuXPnuu5Gu2PXrl2SpKVLl/Z5vaOjo9/f+M2YMcPt9zbKYGNSU1Oj6urqPm0sRigpKVF2drYi\nIiJcr02ZMkW1tbVqampSXFzccVmTkpIkSfX19YZmw1coimE6p9PZ76+bjnI4HF6/Zn/XM+I6AOCJ\nhISEfl+///779d577+nnP/+5srOzFRoaqn//938/bt0KDQ097nt737n82c9+pm9+85t6//33tWXL\nFv3+97/X3XfffdzNiqE888wzio2N7fPascfSV0WoEdxdx4caE18Z6po2m63frPAdeorhU1lZWa4P\nzEk9i8Tu3buVlZXlei0hIUFNTU2u44H2pAwPD1dXV9eA1/riiy+OOz56naM/eJqbm/tcp79FNiws\nbNDrAMBQwsPDJWnYa8lHH32ka665RnPmzNG4ceOUnp6uioqKYb3XSSedpKuuukqPP/64zj//fL3x\nxhtuf+/RO9NHjhxRZmZmn39SUlKGlWe44uPj+6zhknTo0CGP3iM1NVXp6en68MMPhzz3RH4WZGdn\n68CBA316mXft2qWUlBTXXWKYj6IYPrVkyRK9/PLLeumll7R//37913/9lw4dOqSrr77adU5eXp42\nbtwop9OpioqKAfeFHDdunN59911VVlaqvb29zwcjpJ5Wjccee0z79+/X7373O5WVlbk+qR0fH6+T\nTjpJL730kiRp9+7deuuttwa8zubNm1VbW6v29nbuKAPwWHp6umJjY/X666+roaFB7e3tHt2tHDdu\nnF555RXt2bNHu3fv1i233HLcmjeUzs5O3X777frggw9UXl6ud999V5999pmmTp3qUY758+fr9ttv\n16ZNm1RWVqaPPvpId999tz766COP8pyoqVOnqqmpSW+//bYk6YUXXhjWh9Kuv/56PfPMM3ryySdV\nUlKinTt3as2aNcedN9jPgqqqKlVVVamlpUUOh0PV1dWqqqpyFcELFy6U1NNTXFxcrM2bN+vpp5/W\nt7/9bdd7WGW7vkBGUQyfuuKKK/TDH/5Qv/71r7Vo0SK9/fbb+u1vf6vMzEzXObfeequKi4t11lln\n6dZbb9Wll17a7x3cn/70pwoJCdEll1zi+lR2bxdddJGKiop02WWX6cUXX9T999+vcePGub7+q1/9\nSps2bdLZZ5+thx56yPXhv2Pddtttqqio0AUXXKBp06bp5Zdf9tJoAAgWISEhuuuuu/Tee+/pnHPO\n0bRp0zwqIletWqXo6Gh961vf0o9+9CPl5+e71Qvce+0MCQlRc3OzVq5cqfnz52vlypVauHChbrjh\nhn6/b6C2tvvuu0+LFi3SPffco/nz5+tnP/uZampqNGrUqAGvbYTRo0frlltu0cqVKzV79mzt2bOn\nzwfkBnJsru985zv6xS9+oRdeeEGLFi3S8uXL+21jGOxnwXnnnafzzjtP//u//6vKykrNmjVL5513\nnl599VVJPW0kjz/+uPbu3avLLrtMt912my677DJdf/31A+aC7w17n+L77rtPL7/8slJSUrRhwwZJ\n0iuvvKKHH35YUk9hM2fOHO8lBTxw7F6VQLBjzQaAwQ37TvG8efP67K/X0dGhBx98UM8884yeeOIJ\n3X333V4JCAA4cazZADC4YRfF06dPd20XIkk7d+5UTk6OUlJSNGrUKGVkZPT5QBUAwDys2QAwOK9t\nyVZVVaX09HQ9++yzSkxMVHp6uo4cOTLg4xEBIz399NNmRwD8Gms2APTl9X2Kj+4isGnTJprGAcDP\nsWYDQA+vFcUjRoxQVVWV6/joXYhjfbhzl0Ylx3vrsgDgM42NjR5tX+XP3F2zd+zYobS0NF9GAwCv\n8WTd9lpRnJeXpz179rj276usrOz313CjkuOVn5/vrcsa7rHHHuvzXHJ/ZqWskrXyktU4Vsq7fft2\nsyN4jbtrdlpamqXWbLNZaT77A8arZ3/ip7cf1lt7a7Xmkgkamxg16PmMmWc8WbeHXRTfeeed2rRp\nk+rr6zV79mzdfvvtWrFihZYsWSKpZ09FAIB/YM0G/E+Xw6mH3inVgfo2PbR4kpKjw82OFNSGXRTf\nfvvtuv322497fcGCBScUyN/0fvywv7NSVslaeclqHKvltapgWbPNxnz2TDCPV3NHt3711n5FhNp0\n/4KJig4//oEh/QnmMTOa1z9oF2gmTZpkdgS3WSmrZK28ZDWO1fICg2E+eyZYx6u6uUO3vb5PU0fG\n6sazxyo0xP0PuQbrmPkCj3keQu8Povg7K2WVrJWXrMaxWl5gMMxnzwTjeJXUter/bfhCF0xI0o/P\n8awgloJzzHyFO8UAAAA+8PHBRt29uUTXnzVGcyemmB0Hx7AVFRU5fXnBsrIyPskMwJK2b9+uzMxM\ns2P4FGs24B2b99bq8fcrtGputk4bzda0vuLJus2dYgAAAIM4nU49t7NSGz+v1n0LJmpcSrTZkTAA\neoqHUFBQYHYEt1kpq2StvGQ1jtXyAoNhPnsm0Mer2+HUI++W6x/FdXpo0SSvFMSBPmZm4kLine truncated
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAF9CAYAAADsuhWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//H3ZN/3BAIkhCUQwIAsxQ1FXKhwwaXVWttK\ney33VtHe/ipXK6AVb4tWvbZatdh7e1uX2+tOEa2CKFQbXFBBiSIRiCFhy0L2dWYy8/sjJRKyzYQ5\nc+bMvJ6Ph496JrO8/fbLNx/OfM732EpKStwCAAAAQliY2QEAAAAAs1EUAwAAIORRFAMAACDkURQD\nAAAg5FEUAwAAIORRFAMAACDkURQDAIAeOjs7tXLlSp1xxhkqKCjQihUrTMvy/vvva9GiRTrttNNU\nUFCgw4cPm5ZlMA8//LAuuOACs2NgiCiKYVkXXHCBHnnkEcM/p6CgQOvXrzf8cwAEr4MHD6qgoEAf\nfPCB2VE8smnTJm3YsEFr167Vtm3btGrVKtOy3HXXXSooKNCbb76pbdu2afjw4abk8OR3wQ9/+EO9\n+OKLfkoEX4swOwAQyNxud4//BYBTYZW1pKysTFlZWZoxY4apOdxutw4cOKClS5dq2LBhpuY48X/7\nExcXp7i4OH9EggFs3NEO/rZ27Vo988wzqq2tVV5enpYvX67zzz+/++cFBQV66qmn9LWvfU2StG7d\nOq1cuVJ79uyR1HWGuK+vz2666SbddNNNkqRrr71W6enpstls2rJlizIyMrR8+XItXLhQUtdZm4su\nukhbtmzRiBEjJHV97fWXv/xFW7Zs6c7Rl1/96le6/PLLfTMYAILa8bWmLyeuc1LX2nbZZZfJ6XTq\nhRdeUFtbmxYvXqxf/OIXKi0t1f3336/i4mI1NDRo1KhRuu6663TVVVd1v/7aa69VYWGhqqqq9Oab\nbyotLU0rVqzo8flffPGF1qxZo08//VQ2m035+fm68847u9e7hx9+WI8++mivrFdccYXuueceSZLd\nbteDDz6oV155RU1NTZo4caJ+9rOfafr06b3+u3/7299qw4YN2rZtm6KionTLLbfoyiuv9Gjs+luD\nj6/b69at0yOPPNK9Zh8fg1GjRnVn9WRMJOn555/XE088oQMHDig9PV0LFizQz372swFznPi74L/+\n67/061//WpI0YsSIHpmO++ijj/SrX/1KJSUlSkxM1KWXXqrly5crIqLr/ORtt90ml8ulpKQkvfTS\nS4qJidGyZct0zTXXeDReOHW0T8CvXnzxRT322GNavny5XnnlFc2dO1c33XSTKioqvHqPoqIiDR8+\nXNddd522bdumbdu26brrruvxvM2bN2vcuHF66aWX9M1vflO33HKLysrKBnxvm83W/e/btm1TUVGR\nJGnVqlXdn7NgwQLP/4MBhLQRI0Zo27Ztev755yVJjzzySPdacvrpp/d6/vr169XU1KQnnnhCzz77\nrKZNmyZJqq2t1bRp07R27Vpt3LhR1113nX7+8593r1HHPf/88zr33HP10ksvadq0aVq1apU6Ojq6\nf/7v//7viomJ0XPPPacXXnhBV199tRwOR/fPf/jDH2rbtm3653/+Zw0fPrw764ntEytWrFBRUZEe\neOABbdiwQeedd56uu+46VVZW9vrveeCBB3TGGWdo/fr1evTRR5WRkeHx2PW3BnvbPjHYmPzv//6v\n/uM//kNXXnmlXnnlFf3mN79RZ2fnoDlO/F1w7bXXdo/bib9HjmtoaNCPfvQj5efna/369frlL3+p\ndevW6fe//32P523evFmjRo3SunXrtHDhQq1Zs6bPcYUxaJ+AX/3f//2fLrvsMl166aWSuhbo119/\nXc8884xuueUWj94jNTVVkhQWFqa4uDilp6f3+bzRo0d3nzletmyZXn75ZT333HO69dZb+33vE78a\nO/F9ExMT+/0cAOhPWFiY0tPT1dbWJklKTk4ecC1JTU3V6tWru48nTpwoSZo1a5ZmzZrV/fhVV12l\np59+Wn/72980Z86c7sfnzJmjyy67TFJXgfvqq6+qvLxc+fn5krrO4C5atEjjxo2TJOXl5fX4/ONf\n/8fFxXVnP1FZWZn++te/6vnnn1dhYaGkr9bXDRs26F/+5V96PP+CCy7QtddeK6lrTfaGr9bgwcbk\nscce03e/+1394Ac/6M554llvT3LExsYqNjZWcXFxfbZYvPLKK5Kk1atXKyoqSmPHjtWSJUv05z//\nWTfeeGP38/Lz87tz3HDDDXriiSf0+eefm9o6EkooiuFX5eXl+sY3vtHjsYKCAh04cMDnn3V8wTvx\nuLy83OefAwC+cmLhe6K2tjb97ne/09atW1VVVSWHw6GOjg5NmjSpx/NOLHKTk5MldZ2lPO573/ue\nHnroIb3zzjuaNm2aLrjggu6z0Z7YvXu3JGnJkiU9Hrfb7X1+4zdz5kyP39soA43JsWPHVFNT06ON\nxQhlZWXKy8tTVFRU92OTJk1SbW2tmpublZCQ0CtrSkqKJKm+vt7QbPgKRTFM53a7+/y66TiXy+Xz\nz+zr84z4HADwRlJSUp+P33fffXr33Xf1s5/9THl5eQoPD9e//du/9Vq3wsPDe732xDOXN998s775\nzW/qvffe09atW/X73/9ed999d6+TFYN5+umnFR8f3+Oxk4+lr4pQI3i6jg82Jv4y2GfabLY+s8J/\n6CmGX+Xm5nZfMCd1LRJ79uxRbm5u92NJSUlqbm7uPu5vT8rIyEg5nc5+P+uLL77odXz8c47/4mlp\naenxOX0tshEREQN+DgAMJjIyUpKGvJZ8+OGHuvbaazVv3jyNGTNGmZmZOnTo0JDea/To0br66qv1\n2GOP6bzzztPrr7/u8WuPn5muqqpSTk5Oj3/S0tKGlGeoEhMTe6zhknTkyBGv3iM9PV2ZmZnavn37\noM89ld8FeXl5OnDgQI9e5t27dystLa37LDHMR1EMv7rmmmu0YcMGvfTSS/ryyy/1n//5nzpy5Ii+\n/e1vdz+nsLBQr7zyitxutw4dOtTvvpBjxozRO++8o8rKSnV0dPS4MELqatV49NFH9eWXX+p3v/ud\nKioquq/UTkxM1OjRo/XSSy9Jkvbs2aM333yz38/ZsmWLamtr1dHRwRllAF7LzMxUfHy8Nm3apMbG\nRnV0dHh1tnLMmDF69dVXtXfvXu3Zs0e33nprrzVvMA6HQ3feeafef/99HTx4UO+8844+++wzTZ48\n2ascCxYs0J133qnNmzeroqJCH374oe6++259+OGHXuU5VZMnT1Zzc7PefvttSdILL7wwpIvSrr/+\nej399NN64oknVFZWpl27dmnNmjW9njfQ74Lq6mpVV1ertbVVLpdLNTU1qq6u7i6CFy1aJKmrp3j/\n/v3asmWLnnrqKX3nO9/pfg+rbNcXzCiK4VdXXnml/vVf/1W//vWvtXjxYr399tv67W9/q5ycnO7n\n3Hbbbdq/f7/OPPNM3Xbbbbrsssv6PIP705/+VGFhYbrkkku6r8o+0UUXXaSSkhJdfvnlevHFF3Xf\nffdpzJgx3T//xS9+oc2bN+uss87Sgw8+2H3x38luv/12HTp0SOeff76mTZumDRs2+Gg0AISKsLAw\n/fKXv9S7776rs88+W9OmTfOqiFy5cqViY2P1rW99Sz/60Y80Y8YMj3qBT1w7w8LC1NLSohUrVmjB\nggVasWKFFi1apBtuuKHP1/XX1nbvvfdq8eLFuueee7RgwQLdfPPNOnbsmLKzs/v9bCOMGDFCt956\nq1asWKG5c+dq7969PS6Q68/Jub773e/qjjvu0AsvvKDFixdr2bJlfbYxDPS74Nxzz9W5556rP/3p\nT6qsrNScOXN07rnn6rXXXpPU1Uby2GOPad++fbr88st1++236/LLL9f111/fby7435D3Kb733nu1\nYcMGpaWl6eWXX5Ykvfrqq3rooYckdRU28+bN811SwAsn71UJhDrWbAAY2JDPFM+fP7/H/np2u10P\nPPCAnn76aT3++OO6++67fRIQAHDqWLMBYGBDLoqnT5/evV2IJO3atUv5+flKS0tTdna2hg8f3uOC\nKgCAeVizAWBgPtuSrbq6WpmZmXrmmWeUnJyszMxMVVVV9Xt7RMBITz31lNkRgIDGmg0APfl8n+Lj\nuwhs3ryZpnEACHCs2QDQxWdFcVZWlqqrq7uPj5+FONn2T3YrOy3RVx8LAH7T1NTk1fZVgczTNXvn\nzp3KyMjwZzQA8Blv1m2fFcWFhYXau3dv9/59lZWVfX4Nl52WqBkzZvjqYw336KOP9rgveSCzUlbJ\nWnnJahwr5d2xY4fZEXzG0zU7IyPDUmu22aw0nwMB49W1P/FTO47qzX21WnPJOI1Kjhnw+YyZd7xZ\nt4dcFN91113avHmz6uvrNXfuXN15551avny5rrnmGkldeyoCAAIDazYQeJwutx78e7kO1LfrwUsn\nKDU20uxIIW3IRfGdd96pO++8s9fjCxcuPKVAgebE2w8HOitllayVl6zGsVpeqwqVNdtszGfvhPJ4\ntdg79Ys3v1RUuE33LRyv2MjeNwzpSyiPmdF8fqFdsJkwYYLZETxmpayStfKS1ThWywsMhPnsnVAd\nr5oWu27fVKrJw+J141mjFB7m+UWuoTpm/sBtngdx4oUogc5KWSVr5SWrcayWFxgI89k7oTheZXVt\n+n8vf6Hzx6Xox2d7VxBLoTlm/sKZYgAAAD/4+HCT7t5SpuvPHKkLxqeZHQcnsZWUlLj9+YEVFRVc\nyQzAknbs2KGcnByzY/gVazbgG1v21eqx9w5p5QV5On0EW9P6izfrNmeKAQAADOJ2u/Xsrkq98nmN\n7l04XmPSYs2OhH7QUzyIoqIisyN4zEpZJWvlJatxrJYXGAjz2TvBPl6dLrcefueg/ra/TgLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3d92e90>"
|
||||
"<matplotlib.figure.Figure at 0x3f70990>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 3
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -407,13 +407,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAr0AAAF9CAYAAAAJJNDxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4U1X+BvA3SZvua9rSnZa2UJCyy2YRRERBFhVRUEEU\nxoGOy4w4KCgjjuM+LqMoqDOOiL8RRZBNVFBQaEHZpVDLUlra0tJ9X9Mkvz9qQ0u3JE16z03fz/Pk\ngZvcJG9Pb09PT773XMWZM2cMICIiIiKyY0qpAxARERER2RoHvURERERk9zjoJSIiIiK7x0EvERER\nEdk9DnqJiIiIyO5x0EtEREREdo+DXiIioh5Kp9NhxYoVGDVqFGJjY7F8+XLJsvzyyy+YNm0aBg4c\niNjYWOTk5EiWpTPvvPMOJk6cKHUMMhMHvSS8iRMnYvXq1TZ/n9jYWGzZssXm70NE9is7OxuxsbE4\nfPiw1FFM8t1332Hbtm1Ys2YNkpKS8PTTT0uW5bnnnkNsbCx++OEHJCUlITAwUJIcpvwuWLhwITZt\n2tRNichaHKQOQCQCg8HQ4l8ioq6QS1+SkZGBgIAADBs2TNIcBoMBFy9exKJFi9CrVy9JczT/tz2u\nrq5wdXXtjkhkRQpekY1sZc2aNdiwYQOKi4sRERGBpUuXYsKECcbHY2NjsX79elx77bUAgM2bN2PF\nihVITU0F0DjD29bHWw8//DAefvhhAMC8efOg0WigUCiwZ88e+Pn5YenSpZg6dSqAxlmXSZMmYc+e\nPQgODgbQ+LHUV199hT179hhztOXll1/GbbfdZp3GICK71tTXtKV5Pwc09m0zZ85EQ0MDvvzyS9TU\n1GD69Ol4/vnnceHCBbz22mtITk5GWVkZQkND8eCDD2L27NnG58+bNw9xcXHIz8/HDz/8AF9fXyxf\nvrzF+589exYvvPACTp06BYVCgZiYGDz77LPG/u6dd97Bu+++2yrr7bffjpdeegkAUF9fj7feegs7\nduxARUUF+vXrhyeffBJDhw5t9XW//fbb2LZtG5KSkqBWq/HXv/4Vd955p0lt114f3NRvb968GatX\nrzb22U1tEBoaasxqSpsAwMaNG7Fu3TpcvHgRGo0GU6ZMwZNPPtlhjua/Cz744AO88cYbAIDg4OAW\nmZocPXoUL7/8Ms6cOQMPDw/MmDEDS5cuhYND4zzjU089Bb1eD09PT2zduhXOzs5ISEjA3LlzTWov\nshzLG8gmNm3ahLVr12Lp0qXYsWMHxo8fj4cffhhZWVlmvUZiYiICAwPx4IMPIikpCUlJSXjwwQdb\n7Ld7925ERUVh69atmDVrFv76178iIyOjw9dWKBTG/yclJSExMREA8PTTTxvfZ8qUKaZ/wUTUowUH\nByMpKQkbN24EAKxevdrYlwwZMqTV/lu2bEFFRQXWrVuHzz//HIMHDwYAFBcXY/DgwVizZg2+/fZb\nPPjgg/jb3/5m7KOabNy4EePGjcPWrVsxePBgPP3006irqzM+/sQTT8DZ2RlffPEFvvzyS9x9993Q\narXGxxcuXIikpCQ88MADCAwMNGZtXt6wfPlyJCYm4vXXX8e2bdtw/fXX48EHH0ReXl6rr+f111/H\nqFGjsGXLFrz77rvw8/Mzue3a64PNLW/orE0+/fRT/P3vf8edd96JHTt24M0334ROp+s0R/PfBfPm\nzTO2W/PfI03Kysrwxz/+ETExMdiyZQv+8Y9/YPPmzXj//fdb7Ld7926EhoZi8+bNmDp1Kl544YU2\n25Wsi+UNZBP/+9//MHPmTMyYMQNAYwe8a9cubNiwAX/9619Neg0fHx8AgFKphKurKzQaTZv79e7d\n2zjzm5CQgO3bt+OLL77AsmXL2n3t5h9dNX9dDw+Pdt+HiKg9SqUSGo0GNTU1AAAvL68O+xIfHx+s\nWrXKuN2vXz8AwIgRIzBixAjj/bNnz8Znn32GH3/8EfHx8cb74+PjMXPmTACNA9idO3ciMzMTMTEx\nABpnYKdNm4aoqCgAQERERIv3b/p43tXV1Zi9uYyMDHz99dfYuHEj4uLiAFzpX7dt24Y//OEPLfaf\nOHEi5s2bB6CxTzaHtfrgztpk7dq1uPfee7FgwQJjzuaz1qbkcHFxgYuLC1xdXdssgdixYwcAYNWq\nVVCr1ejTpw/mz5+P//u//8Of/vQn434xMTHGHEuWLMG6devw22+/SVra0RNw0Es2kZmZiTvuuKPF\nfbGxsbh48aLV36upQ2u+nZmZafX3ISKyluYD2+Zqamrw3nvvYe/evcjPz4dWq0VdXR369+/fYr/m\ng1gvLy8AjbOMTe677z7861//woEDBzB48GBMnDjROJtsipSUFADA/PnzW9xfX1/f5id2w4cPN/m1\nbaWjNikqKkJhYWGLMhNbyMjIQEREBNRqtfG+/v37o7i4GJWVlXB3d2+V1dvbGwBQWlpq02zEQS91\nI4PB0ObHQU30er3V37Ot97PF+xARmcPT07PN+1999VUcPHgQTz75JCIiIqBSqfDoo4+26rdUKlWr\n5zafeXz88ccxa9Ys/Pzzz9i7dy/ef/99vPjii60mIzrz2Wefwc3NrcV9V28DVwaZtmBqP95Zm3SX\nzt5ToVC0mZVsjzW9ZBPh4eHGE9KAxk4gNTUV4eHhxvs8PT1RWVlp3G5vTUZHR0c0NDS0+15nz55t\ntd30Pk2/WKqqqlq8T1udqIODQ4fvQ0TUGUdHRwCwuC85cuQI5s2bhxtuuAGRkZHw9/fHpUuXLHqt\n3r174+6778batWtx/fXXY9euXSY/t2lmOT8/H2FhYS1uvr6+FuWxlIeHR4s+HAByc3PNeg2NRgN/\nf38cOnSo03278rsgIiICFy9ebFFLnJKSAl9fX+MsL0mHg16yiblz52Lbtm3YunUr0tPT8c9//hO5\nubmYM2eOcZ+4uDjs2LEDBoMBly5danddxMjISBw4cAB5eXmoq6trceIB0FhK8e677yI9PR3vvfce\nsrKyjGc6e3h4oHfv3ti6dSsAIDU1FT/88EO777Nnzx4UFxejrq6OM8JEZDZ/f3+4ubnhu+++Q3l5\nOerq6syabYyMjMTOnTtx7tw5pKamYtmyZa36vM5otVo8++yz+OWXX5CdnY0DBw7g9OnTGDBggFk5\npkyZgmeffRa7d+9GVlYWjhw5ghdffBFHjhwxK09XDRgwAJWVldi3bx8A4Msvv7TopK/Fixfjs88+\nw7p165CRkYGTJ0/ihRdeaLVfR78LCgoKUFBQgOrqauj1ehQWFqKgoMA4yJ02bRqAxpretLQ07Nmz\nB+vXr8c999xjfA25LGdnjzjoJZu488478dBDD+GNN97A9OnTsW/fPrz99tsICwsz7vPUU08hLS0N\no0ePxlNPPYWZM2e2OQP7l7/8BUqlErfccovxrObmJk2ahDNnzuC2227Dpk2b8OqrryIyMtL4+PPP\nP4/du3djzJgxeOutt4wn113tmWeewaVLlzBhwgQMHjwY27Zts1JrEFFPoVQq8Y9//AMHDx7E2LFj\nMXjwYLMGiStWrICLiwvuuusu/PGPf8SwYcNMqsVt3ncqlUpUVVVh+fLlmDJlCpYvX45p06ZhyZIl\nbT6vvbKzV155BdOnT8dLL72EKVOm4PHHH0dRURGCgoLafW9bCA4OxrJly7B8+XKMHz8e586da3EC\nWnuuznXvvfdi5cqV+PLLLzF9+nQkJCS0WWbQ0e+CcePGYdy4cfjvf/+LvLw8xMfHY9y4cfjmm28A\nNJZ5rF27FufPn8dtt92GZ555BrfddhsWL17cbi7qPl1ap7eyshK33HILHnzwwVbLSBF1h6vXaiSi\n9rHPJqKerEszvWvXrsXAgQP5VwsRkQywzyainsziQe+FCxdQXFyMgQMHsj6FiEhw7LOJqKezeND7\nxhtv4JFHHrFmFiKzrV+/nqUNRCZgn01EPZ1Fg949e/YgIiICQUFBnDEgIhIc+2wiIgsvTnHy5Ens\n2rULP/zwA0pKSqBUKhEQEGBcqgMAjh8/bta1t4mIRFJRUWHWEk8iY59NRPbOlD67S6s3AMDq1avh\n5uaGBx54oMX9WVlZGDZsWLvPSy+uwZ7zxVg4MqQrb2817777bovrYotMTlkBeeWVU1ZAXnnllBUA\njh071mKJPXthaZ8tFVsfN3qDAat2X0CAuxoPjzX9+y3y8SxqNuYyD3OZx5Q+W7J1eiN9XaBUKPhR\nGxERSUapUGDZ+N44kl2B3eeKpI5DRDZkUXlDcw8//LDFz1U7KPHV6QIM7OWOvv6uXY3SJc0vjys6\nOWUF5JVXTlkBeeWVU1Z71pU+Wwrdcdy4Ozng2UmRWLbzPCJ9XBDt1/nvI5GPZ1GzMZd5mMv6JL0i\n2+xBAYjWuOKLk+ZfTtDa+vbtK3UEk8kpKyCvvHLKCsgrr5yykji667iJ9HXBw2ND8dz36Sivbeh0\nf5GPZ1GzMZd5mMv6JB30qlVKRGtcoNMbTOpkbKmgoEDS9zeHnLIC8sorp6yAvPLKKSuJozuPm/F9\nfDAu0hsv7s2ATt9x6Z3Ix7Oo2ZjLPMxlfZIOegHAVa3CA9cG4+vUQqmjEBFRD7fw2mDoDQZ8fCRH\n6ihEZGVdXr2hPeacCaw3GPDKjxex/IYIW0QhIjKbva7e0B5RV2+QQmmNFg9vPYOHRobg+j4+Usch\nIhMIvXpDc0qFAk4qJWq0OqmjEBFRD+ft4ohnJ/XBOweykVZULXUcIrISIQa9AHB9H29sSs6X7P0T\nExMle29zySkrIK+8csoKyCuvnLKSOKQ6bmL8XPGnMaFYtTsdJTXaVo+LfDyLmo25zMNc1ifMoHd4\niAfK6zjTS0REYpgQ5YOJUT54/od0aHV6qeMQURcJUdPbZNfZIlyuqEdRtRazBgYg3MfZFtLine truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x5b20b50>"
|
||||
"<matplotlib.figure.Figure at 0x226bad0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
"prompt_number": 5
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -443,13 +443,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x5b1e550>"
|
||||
"<matplotlib.figure.Figure at 0x226a910>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 5
|
||||
"prompt_number": 6
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -472,12 +472,12 @@
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"input mean, variance: 0.0010, 1.0013\n",
|
||||
"output mean, variance: -0.0291, 2.2439\n"
|
||||
"input mean, variance: 0.0009, 1.0005\n",
|
||||
"output mean, variance: -0.0293, 2.2432\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 6
|
||||
"prompt_number": 7
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -502,20 +502,20 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x61c3250>"
|
||||
"<matplotlib.figure.Figure at 0x3f5d090>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"output mean, variance: -0.0015, 2.2530\n"
|
||||
"output mean, variance: -0.0014, 2.2510\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 7
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -544,12 +544,12 @@
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"linear output mean, variance: -0.0877, 7491.7787\n",
|
||||
"nonlinear output mean, variance: -2.0078, 26241.0351\n"
|
||||
"linear output mean, variance: -0.0794, 7485.2514\n",
|
||||
"nonlinear output mean, variance: -1.9762, 26213.4745\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 8
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -572,13 +572,393 @@
|
||||
"source": [
|
||||
"The extended Kalman filter (EKF) works by linearizing the system model at each update. For example, consider the problem of tracking a cannonball in flight. Obviously it follows a curved flight path. However, if our update rate is small enough, say 1/10 second, then the trajectory over that time is nearly linear. If we linearize that short segment we will get an answer very close to the actual value, and we can use that value to perform the prediction step of the filter. There are many ways to linearize a set of nonlinear differential equations, and the topic is somewhat beyond the scope of this book. In practice, a Taylor series approximation is frequently used with EKFs, and that is what we will use. \n",
|
||||
"\n",
|
||||
"This approach has many issues. First, of course, is the fact that the linearization does not produce an exact answer. More importantly, we are not linearizing the actual path, but our filter's estimation of the path. We linearize the estimation because it is statistically likely to be correct; but of course it is not required to be. So if the filter's output is bad that will cause us to linearize an incorrect estimate, which will almost certainly lead to an even worse estimate. In these cases the filter will quickly diverge. This is where the 'black art' of Kalman filter comes in. We are trying to linearize an estimate, and there is no guarantee that the filter will be stable. A vast amount of the literature on Kalman filters is devoted to this problem. Another issue is that we need to linearize the system using analytic methods. It may be difficult or impossible to find an analytic solution to some problems. In other cases we may be able to find the linearization, but the computation is very expensive. \n",
|
||||
"\n",
|
||||
"Consider the function $f(x)=x^2\u22122x$, which we have plotted below."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"xs = np.arange(0,2,0.01)\n",
|
||||
"ys = [x**2 - 2*x for x in xs]\n",
|
||||
"plt.plot (xs, ys)\n",
|
||||
"plt.xlim(1,2)\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3f4ac50>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 14
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We want a linear appoximation of this function so that we can use it in the Kalman filter. We will see how it is used in the Kalman filter in the next section, so don't worry about that yet. We can see that there is no single linear function (line) that gives a close approximation of this function. However, during each innovation of the Kalman filter we know it's current state, so if we linearize the function at that value we will have a close approximation. For example, suppose our current state is $x=1.5$. What would be a good linearization for this function?\n",
|
||||
"\n",
|
||||
"We can use any linear function that passes through the curve at (1.5,-0.75). For example, consider using f(x)=8x\u221212.75 as the linearization, as in the plot below."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def y(x): \n",
|
||||
" return 8*x - 12.75\n",
|
||||
"plt.plot (xs, ys,c='k')\n",
|
||||
"plt.plot ([1.25, 1.75], [y(1.25), y(1.75)], c='r')\n",
|
||||
"plt.xlim(1,2)\n",
|
||||
"plt.ylim([-1.5, 1])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x45b0d90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 18
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is not a good linearization for $f(x)$. It is exact for $x=1.5$, but quickly diverges when $x$ varies by a small amount.\n",
|
||||
"\n",
|
||||
"A much better approach is to use the slope of the function at the evaluation point as the linearization. We find the slope by taking the first derivative of the function:\n",
|
||||
"\n",
|
||||
" $$f(x) = x^2 -2x \\\\\n",
|
||||
" \\frac{df}{dx} = 2x - 2$$, \n",
|
||||
" \n",
|
||||
" so the slope at 1.5 is $2*1.5-2=1$. Let's plot that."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def y(x): \n",
|
||||
" return x - 2.25\n",
|
||||
"\n",
|
||||
"plt.plot (xs, ys,c='k')\n",
|
||||
"plt.plot ([1,2], [y(1),y(2)], c='r')\n",
|
||||
"plt.xlim(1,2)\n",
|
||||
"plt.ylim([-1.5, 1])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3f6c750>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 19
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Here we can see that this linearization is much better. It is still exactly correct at $x=1.5$, but the errors are very small as x varies. Compare the tiny error at $x=1.4$ vs the very large error at $x=1.4$ in the previous plot. This does not constitute a formal proof of correctness, but this sort of geometric depiction should be fairly convincing. Certainly it is easy to see that in this case if the line had any other slope the errors would accumulate more quickly. \n",
|
||||
"\n",
|
||||
"To implement the extended Kalman filter we will leave the linear equations as they are, and use partial derivatives to evaluate the system matrix $\\mathbf{F}$ and the measurement matrix $\\mathbf{H}$ at the state at time t ($\\mathbf{x}_t$). Since $\\mathbf{F}$ also depends on the control input vector $\\mathbf{u}$m we will need to include that term:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"F \n",
|
||||
"&\\equiv {\\frac{\\partial{f}}{\\partial{x}}}\\biggr|_{{x_t},{u_t}} \\\\\n",
|
||||
"H &\\equiv \\frac{\\partial{h}}{\\partial{x}}\\biggr|_{x_t} \n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"All this means is that at each update step we compute $\\mathbf{F}$ as the partial derivative of our function $f()$ evaluated at x. \n",
|
||||
"\n",
|
||||
"We approximate the state transition function $\\mathbf{F}$ by using the Taylor-series expansion \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"** orphan text\n",
|
||||
"This approach has many issues. First, of course, is the fact that the linearization does not produce an exact answer. More importantly, we are not linearizing the actual path, but our filter's estimation of the path. We linearize the estimation because it is statistically likely to be correct; but of course it is not required to be. So if the filter's output is bad that will cause us to linearize an incorrect estimate, which will almost certainly lead to an even worse estimate. In these cases the filter will quickly diverge. This is where the 'black art' of Kalman filter comes in. We are trying to linearize an estimate, and there is no guarantee that the filter will be stable. A vast amount of the literature on Kalman filters is devoted to this problem. Another issue is that we need to linearize the system using analytic methods. It may be difficult or impossible to find an analytic solution to some problems. In other cases we may be able to find the linearization, but the computation is very expensive. **\n",
|
||||
"\n",
|
||||
"In the next chapter we will spend a lot of time on a new development, the unscented Kalman filter(UKF) which avoids many of these problems. I think that as it becomes better known it will supplant the EKF in most applications, though that is still an open question. Certainly research has shown that the UKF performs at least as well as, and often much better than the EKF. \n",
|
||||
"\n",
|
||||
"I think the easiest way to understand the EKF is to just start off with an example. Perhaps the reason for some of my mathmatical choices will not be clear, but trust that the end result will be an EKF."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 3,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Example: Tracking a Flying Airplane"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We will start by simulating tracking an airplane by using ground based radar. Radars work by emitting a beam of radio waves and scanning for a return bounce. Anything in the beam's path will reflects some of the signal back to the radar. By timing how long it takes for the reflected signal to get back to the radar the system can compute the *slant distance* - the straight line distance from the radar installation to the object.\n",
|
||||
"\n",
|
||||
"For this example we want to take the slant range measurement from the radar and compute the horizontal position (distance of aircraft from the radar measured over the ground) and altitude of the aircraft, as in the diagram below."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import ekf_internal\n",
|
||||
"ekf_internal.show_radar_chart()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAFtCAYAAAAgQiPFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xtw1vWB7/FPAklASCxGrccVvLRW3LogiLUKAkWpKCsM\nai+CVj3qdq10sa2n1kVHV6230eNlba1ud1E8Vq233VJXugooxVqqpXrsrlCrHgytUBUUBRICyfmD\nmjVyx1x+SV6vmc6Y5/nlyfdhpvr2k19iyaJFixoDAAAFVNreBwAAgM0RqwAAFJZYBQCgsMQqAACF\nJVYBACgssQoAQGGJVaBDO/XUU3PhhRe29zHazZIlS9K/f/8888wzW732oYceSv/+/dvgVAAtp3t7\nHwDoGj4YSVVVVdlvv/1y5plnZvTo0e14qh0zatSo/PGPf9zs87Nnz86ee+7ZhifaNmPHjs2IESPa\n+xgA20WsAm1m6tSpOe6447JixYpMnz49U6ZMyb333psBAwa099G2y4MPPpiGhoYkyQ9/+MPMnDkz\nDzzwQNPzffr0aa+jbVFFRUUqKira+xgA28VtAECbqaysTHV1dT75yU/m29/+dhoaGrJgwYKm56++\n+uoce+yxGThwYA4//PBMnTo17777brPXuOOOOzJs2LAMGjQol19+eRobm/9H+B588MGceOKJOeSQ\nQzJo0KCcddZZ+f3vf7/RWfr375977rknF110UYYMGZJDDjkk3/ve97bpffTp0yfV1dWprq7OTjvt\nlJKSkqaPq6urU1q64W+t73+L/j/+4z8yefLkDBo0KIcddlhT2M6ePTsTJ07MZz7zmQwcODATJ07M\nr3/9642+3uOPP56TTjopAwYMyLBhw3LhhRemvr5+k2d75513csIJJ+S8887LunXrkiSPPPJI+vfv\n3/S/D3v/nP/+7/+ecePGZdCgQTn99NPz5ptvNrvuhhtuyGc+85kcdthhuf322zNq1Kjccsst2/Rn\nBrCjxCrQZt4Py/r6+jz44IMpLS3NwQcf3PR8bW1tLrroojzyyCP53ve+l9/85je59NJLm55/6qmn\ncu2112bKlCl5+OGHs3bt2vzmN79p9jXeeuutnHnmmXnggQfywAMPpGfPnjn77LObwu2D/umf/il7\n7LFHfvzjH2fatGnZd999W+V9X3/99TnssMPyr//6r7nllluy2267JUnefPPNnHDCCbn77rszY8aM\n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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7ff3e5813750>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"As discussed in the introduction, our measurement model is the nonlinear function $x=\\sqrt{slant^2 - altitude^2}$. Therefore we will need a nonlinear \n",
|
||||
"\n",
|
||||
"Predict step:\n",
|
||||
"$$\n",
|
||||
"\\begin{array}{ll}\n",
|
||||
"\\textbf{Linear} & \\textbf{Nonlinear} \\\\\n",
|
||||
"x = Fx & x = \\underline{f(x)} \\\\\n",
|
||||
"P = FPF^T + Q & P = FPF^T + Q\n",
|
||||
"\\end{array}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Update step:\n",
|
||||
"$$\n",
|
||||
"\\begin{array}{ll}\n",
|
||||
"\\textbf{Linear} & \\textbf{Nonlinear} \\\\\n",
|
||||
"K = PH^T(HPH^T + R)^{-1}& K = PH^T(HPH^T + R)^{-1}\\\\\n",
|
||||
"x = x + K(z-Hx) & x = x + K(z-\\underline{h(x)}) \\\\\n",
|
||||
"P = P(I - KH) & P = P(I - KH)\\\\\n",
|
||||
"\\end{array}\n",
|
||||
"$$\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"As we can see there are two minor changes to the Kalman filter equations. The first change replaces the equation $\\mathbf{x} = \\mathbf{Fx}$ with $\\mathbf{x} = f(\\mathbf{x})$. In the Kalman filter, $\\mathbf{Fx}$ is how we compute the new state based on the old state. However, in a nonlinear system we cannot use linear algebra to compute this transition. So instead we hypothesize a nonlinear function $f()$ which performs this function. Likewise, in the Kalman filter we convert the state to a measurement with the linear function $\\mathbf{Hx}$. For the extended Kalman filter we replace this with a nonlinear function $h()$, giving $\\mathbf{z}_x = h(\\mathbf{x})$.\n",
|
||||
"\n",
|
||||
"The only question left is how do we implement use $f()$ and $h()$ in the Kalman filter if they are nonlinear? We reach for the single tool that we have available for solving nonlinear equations - we linearize them at the point we want to evaluate the system. For example, consider the function $f(x) = x^2 -2x$\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The rest of the equations are unchanged, so $f()$ and $h()$ must produce a matrix that approximates the values of the matrices $\\mathbf{F}$ and $\\mathbf{H}$ at the current value for $\\mathbf{x}$. We do this by computing the partial derivatives of the state and measurements functions:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"F \\equiv {\\frac{\\partial{f}}{\\partial{x}}}\\biggr|_x, \\\\\n",
|
||||
"H \\equiv \\frac{\\partial{h}}{\\partial{x}}\\biggr|_x \n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"All this means is that at each update step we compute F as the partial derivative of our function $f()$ evaluated at the point of f. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"xs = np.arange(0,2,0.01)\n",
|
||||
"ys = [x**2 - 2*x for x in xs]\n",
|
||||
"plt.plot (xs, ys)\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x239d790>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 18
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Suppose we want to linearlize this equation so we can evaluate it's value at 1.5. In other words, we want to create a linear function of the form $y_l(x) = ax+b$ such that $y_l(1.5)$ gives the same value as $y(1.5)$. Obviously there is not single linear equation that will do this. But if we linearize $y(x)$ at 1.5, then we will have a perfect answer for $y_l(1.5)$, and a progressively worse answer as our evaluation point gets further away from 1.5.\n",
|
||||
"\n",
|
||||
"The simplest way to linearize a function is to take a partial derivative of it. In geometic terms, the derivative of a function at a point is just the slope of the function. Let's just look at that, and then reason about why this is a good choice.\n",
|
||||
"\n",
|
||||
"The derivative of $f(x) = x^2 -2x$ is $\\frac{\\partial{f}}{\\partial{x}} = 2x - 2$, so the slope at 1.5 is $2*1.5-2=1$. Let's plot that."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def y(x): \n",
|
||||
" return x - 2.25\n",
|
||||
"\n",
|
||||
"plt.plot (xs, ys)\n",
|
||||
"plt.plot ([1,2], [y(1),y(2)], c='r')\n",
|
||||
"plt.ylim([-1.5, 1])\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x29f0c90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 71
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is a nice visual demonstration of how the slope of the function gives the ideal linear approximation of the function near a point. We could use any linear function such that $f(1.5)=-0.75$, here, but as x varies the value computed by the function would potentially be very far from the functions value. For example, consider using $f(x) = 8x - 12.75$ as the linearization, as in the plot below."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def y(x): \n",
|
||||
" return 8*x - 12.75\n",
|
||||
"plt.plot (xs, ys)\n",
|
||||
"plt.plot ([1.25, 1.75], [y(1.25), y(1.75)], c='r')\n",
|
||||
"plt.ylim([-1.5, 1])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x23a8c90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 73
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can see that the linearization is exactly correct for $x=1.5$, but very quickly diverges as x varies from 1.5. This does not constitute a proof that taking the derivative is a good linearization, but it should be fairly convincing. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We will begin by writing a simulation for the radar."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import random\n",
|
||||
"import math\n",
|
||||
"\n",
|
||||
"class Radar(object):\n",
|
||||
" def __init__(self, pos, vel, alt, dt):\n",
|
||||
" self.pos = pos\n",
|
||||
" self.vel = vel\n",
|
||||
" self.alt = alt\n",
|
||||
" self.dt = dt\n",
|
||||
" \n",
|
||||
" def get(self):\n",
|
||||
" \"\"\" Simulate radar range to object at 1K altidue and moving at 100m/s.\n",
|
||||
" Adds about 5% measurement noise. Returns slant range to the object.\n",
|
||||
" Call once for each new measurement at dt time from last call.\n",
|
||||
" \"\"\"\n",
|
||||
" \n",
|
||||
" # add some process noise to the system\n",
|
||||
" vel = self.vel + 5*random.gauss(0,1)\n",
|
||||
" alt = self.alt + 10*random.gauss(0,1)\n",
|
||||
" self.pos = self.pos + vel*self.dt\n",
|
||||
" \n",
|
||||
" # add measurment noise\n",
|
||||
" err = self.pos * 0.05*random.gauss(0,1)\n",
|
||||
" return math.sqrt(self.pos**2 + alt**2) + err"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$$F = I + \\begin{bmatrix}0 & 1 & 0\\\\ 0 & 0 & 0\\\\0&0&0\\end{bmatrix}dt$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"H&=\\begin{bmatrix}\n",
|
||||
"\\frac{\\partial h}{\\partial x_{pos}} & \n",
|
||||
"\\frac{\\partial h}{\\partial x_{vel}} &\n",
|
||||
"\\frac{\\partial h}{\\partial x_{alt}}\\end{bmatrix} \\\\\n",
|
||||
"&= \\begin{bmatrix}\n",
|
||||
"\\frac{x_{pos}}{\\sqrt{x_{pos}^2 + x_{alt}^2}} & 0 & \\frac{x_{alt}}{\\sqrt{x_{pos}^2 + x_{alt}^2}}\n",
|
||||
"\\end{bmatrix}\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 3,
|
||||
@@ -599,7 +979,7 @@
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import ekf_internal\n",
|
||||
"ekf_internal.plot_ball()b"
|
||||
"ekf_internal.plot_ball()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:dd34f4987a60a8a3c453361b731ac3f9a06c88bce6e4f0c67907f60ea9ab99fc"
|
||||
"signature": "sha256:e3462ab986f9dc643d523b8cb2a8312877c7122edff3d6d7accda49234359e80"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -260,11 +260,68 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This chapter is optional, especially the first time you go through this material. If you are a hobbiest you will be able to get quite far by just skipping this chapter and going on to learn the examples. However, to have any hope of reading the literature or to design more sophsticated kilters you will have to acquire some of the more formal mathematics. I will not endevour to teach linear algebra, statistics, or calculus here as each topic deserves a book on its own. \n",
|
||||
"If you've gotten this far I hope that you are thinking that the Kalman filter's fearsome reputation is somewhat undeserved. Sure, I handwaved some equations away, but I hope implemention has been fairly straightforward for you. The underlying concept is quite straightforward - take two measurements, or a measurement and a prediction, and choose the output to be somewhere between the two. If you believe the measurement more your guess will be closer to the measurement, and if you believe the prediction is more accurate your guess will lie closer it it. That's not rocket science (little joke - it is exactly this math that got Apollo to the moon and back!). \n",
|
||||
"\n",
|
||||
"blah blah blah\n",
|
||||
"Well, to be honest I have been choosing my problems carefully. For any arbitrary problem finding some of the matrices that we need to feed into the Kalman filter equations can be quite difficult. I haven't been *too tricky*, though. Equations like Newton's equations of motion can be trivially computed for Kalman filter applications, and they make up the bulk of the kind of problems that we want to solve. If you are a hobbiest, you can safely pass by this chapter for now, and perhaps forever. Some of the later chapters will assume the material in this chapter, but much of the work will still be acceessible to you. \n",
|
||||
"\n",
|
||||
"**authors note: need to start with continuous equations with $\\phi$, etc. Then discuss linearization into discrete case.**"
|
||||
"But, I urge everyone to at least read the first section, and to skim the rest. It is not much harder than what you have done - the difficulty comes in finding closed form expressions for specific problems, not understanding the math in this chapter. \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 2,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Modelling a Linear System that Has Noise"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We need to start by understanding the underlying equations and assumptions that the Kalman filter uses. We are trying to model real world phenomena, so what do we have to consider?\n",
|
||||
"\n",
|
||||
"First, each physical system has a process. For example, a car travelling at a certain velocity goes so far in a fixed amount of time, and it's velocity varies as a function of it's aceleration. We describe that behavior with the well known Newtonian equations we learned in high school.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"v&=at\\\\\n",
|
||||
"d &= \\frac{1}{2}at_2 + v_0t + d_0\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"But, of course we know this is not all that is happening. First, we do not have perfect measures of things like the velocity and acceleration - there is always noise in the measurements, and we have to model that. Second, no car travels on a perfect road. There are bumps that cause the car to slow down, there is wind drag, there are hills that raise and lower the speed. If we do not have explicit knowledge of these factors we lump them all together under the term \"process noise\".\n",
|
||||
"\n",
|
||||
"Trying to model off of those factors explicitly and exactly is impossible for anything but the most trivial problem. I could try to modify Newton's equations for things like bumps in the road, the behavior of the car's suspension system, heck, the effects of hitting bugs with the windshield, but the job would never be done - there would always be more effects to add. What is worse, each of those models would in themselves be a simplification - do I assume the wind is constant, that the drag of the car is the same for all angles of the wind, that the suspension act as perfect springs, and so on?\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"So control theory makes a mathematically correct simplification. We acknowledge that there are many factors that influence the system that we either do not know or that we don't want to have to model. At any time $t$ we say that the actual value (say, the position of our car) is the predicted value plus some unknown process noise:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"x(t) = x_{pred}(t) + noise(t)\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"This is not meant to imply that $noise(t)$ is a function that we can derive analytically or that it is well behaved. If there is a bump in the road at $t=10$ then the noise factor will just incorporate that effect. Again, this is not implying that we model, compute, or even know the value of *noise(t)*, it is merely a statement of fact - we can *always* describe the actual value as the predicted value plus some other value. \n",
|
||||
"\n",
|
||||
"Let's express this in linear algebra. Using the same notation from previous chapters, we can say that our model of the system (without noise) is:\n",
|
||||
"\n",
|
||||
"$$ f(x) = Fx$$\n",
|
||||
"\n",
|
||||
"That is, we have a set of linear equations that describe our system. For our car, \n",
|
||||
"$F$ will be the coefficients for Newton's equations of motion. \n",
|
||||
"\n",
|
||||
"Now we need to model the noise. We will just call that *w*, and add it to the equation.\n",
|
||||
"\n",
|
||||
"$$ f(x) = Fx + w$$\n",
|
||||
"\n",
|
||||
"Finally, we need to consider inputs into the system. We are dealing with linear problems here, so we will assume that there is some input $u$ into the system, and that we have some linear model that defines how that input changes the system. For example, if you press down on the accelerator in your car the car will accelerate. We will need a matrix $G$ to convert $u$ into the effect on the system. We just add that into our equation:\n",
|
||||
"\n",
|
||||
"$$ f(x) = Fx + Gu + w$$\n",
|
||||
"\n",
|
||||
"And that's it. That is the equation that Kalman set out to solve, and he found a way to compute an optimal solution if we assume certain properties of $w$.\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -392,9 +449,20 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"cell_type": "heading",
|
||||
"level": 2,
|
||||
"metadata": {},
|
||||
"source": []
|
||||
"source": [
|
||||
"Design of the Process Noise Matrix"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
|
||||
+37
-1
@@ -125,4 +125,40 @@ def plot_ball():
|
||||
p2, = plt.plot (xs, ys,lw=2)
|
||||
p3, = plt.plot (xs2, ys2,lw=4, c='r')
|
||||
plt.legend([p1,p2, p3], ['Measurements', 'Kalman filter(R=0.5)', 'Kalman filter(R=10)'])
|
||||
plt.show()
|
||||
plt.show()
|
||||
|
||||
|
||||
def show_radar_chart():
|
||||
plt.xlim([0.9,2.5])
|
||||
plt.ylim([0.5,2.5])
|
||||
|
||||
plt.scatter ([1,2],[1,2])
|
||||
#plt.scatter ([2],[1],marker='o')
|
||||
ax = plt.axes()
|
||||
|
||||
ax.annotate('', xy=(2,2), xytext=(1,1),
|
||||
arrowprops=dict(arrowstyle='->', ec='r',shrinkA=3, shrinkB=4))
|
||||
|
||||
ax.annotate('', xy=(2,1), xytext=(1,1),
|
||||
arrowprops=dict(arrowstyle='->', ec='b',shrinkA=0, shrinkB=0))
|
||||
|
||||
ax.annotate('', xy=(2,2), xytext=(2,1),
|
||||
arrowprops=dict(arrowstyle='->', ec='b',shrinkA=0, shrinkB=4))
|
||||
|
||||
|
||||
ax.annotate('Aircraft', xy=(2.04,2.), color='b')
|
||||
ax.annotate('altitude', xy=(2.04,1.5), color='k')
|
||||
ax.annotate('X', xy=(1.5, .9))
|
||||
ax.annotate('Radar', xy=(.95, 0.9))
|
||||
ax.annotate('Slant\n (r)', xy=(1.5,1.62), color='r')
|
||||
|
||||
plt.title("Radar Tracking")
|
||||
ax.xaxis.set_ticklabels([])
|
||||
ax.yaxis.set_ticklabels([])
|
||||
ax.xaxis.set_ticks([])
|
||||
ax.yaxis.set_ticks([])
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
show_radar_chart()
|
||||
+44
-14
@@ -5,18 +5,44 @@ Created on Sat Jul 05 09:54:39 2014
|
||||
@author: rlabbe
|
||||
"""
|
||||
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function
|
||||
import matplotlib.pyplot as plt
|
||||
from scipy.integrate import ode
|
||||
import math
|
||||
import numpy as np
|
||||
from numpy import random, radians, cos, sin
|
||||
|
||||
|
||||
class BallTrajectory2D(object):
|
||||
def __init__(self, x0, y0, velocity, theta_deg=0., g=9.8, noise=[0.0,0.0]):
|
||||
theta = radians(theta_deg)
|
||||
self.vx0 = velocity * cos(theta)
|
||||
self.vy0 = velocity * sin(theta)
|
||||
|
||||
self.x0 = x0
|
||||
self.y0 = y0
|
||||
self.x = x
|
||||
|
||||
self.g = g
|
||||
self.noise = noise
|
||||
|
||||
def position(self, t):
|
||||
""" returns (x,y) tuple of ball position at time t"""
|
||||
|
||||
self.x = self.vx0*t + self.x0
|
||||
self.y = -0.5*self.g*t**2 + self.vy0*t + self.y0
|
||||
|
||||
return (self.x +random.randn()*self.noise[0], self.y +random.randn()*self.noise[1])
|
||||
|
||||
|
||||
|
||||
class BallEuler(object):
|
||||
def __init__(self, y=100., vel=10.):
|
||||
def __init__(self, y=100., vel=10., omega=0):
|
||||
self.x = 0.
|
||||
self.y = y
|
||||
self.vel = vel
|
||||
self.y_vel = 0.0
|
||||
omega = radians(omega)
|
||||
self.vel = vel*np.cos(omega)
|
||||
self.y_vel = vel*np.sin(omega)
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +74,7 @@ def rk4(y, x, dx, f):
|
||||
k3 = dx * f(y + 0.5*k2, x + 0.5*dx)
|
||||
k4 = dx * f(y + k3, x + dx)
|
||||
|
||||
return y + (k1 + 2*k2 + 2*k3 + k4) / 6
|
||||
return y + (k1 + 2*k2 + 2*k3 + k4) / 6.
|
||||
|
||||
def rk2 (y,x,dx,f):
|
||||
"""computes the 2nd order Runge-kutta for dy/dx"""
|
||||
@@ -78,8 +104,9 @@ class BallRungeKutta(object):
|
||||
self.x = rk4 (self.x, self.t, dt, fx)
|
||||
self.y = rk4 (self.y, self.t, dt, fy)
|
||||
self.t += dt
|
||||
print(fx.vel)
|
||||
return (self.x, self.y)
|
||||
|
||||
|
||||
|
||||
def ball_scipy(y0, vel, omega, dt):
|
||||
|
||||
@@ -104,22 +131,25 @@ if __name__ == "__main__":
|
||||
dt = 1./30
|
||||
y0 = 15.
|
||||
vel = 100.
|
||||
omega = 0.
|
||||
omega = 30.
|
||||
vel_y = math.sin(math.radians(omega)) * vel
|
||||
|
||||
def f(t,y):
|
||||
return vel_y-9.8*t
|
||||
|
||||
be = BallEuler (y=y0, vel=vel)
|
||||
be = BallEuler (y=y0, vel=vel,omega=omega)
|
||||
#be = BallTrajectory2D (x0=0, y0=y0, velocity=vel, theta_deg = omega)
|
||||
ball_rk = BallRungeKutta (y=y0, vel=vel, omega=omega)
|
||||
|
||||
|
||||
while be.y >= 0:
|
||||
be.step (dt)
|
||||
ball_rk.step(dt)
|
||||
|
||||
print (ball_rk.y - be.y)
|
||||
|
||||
plt.scatter (be.x, be.y, color='red')
|
||||
|
||||
plt.scatter (ball_rk.x, ball_rk.y, color='blue', marker='v')
|
||||
#plt.scatter (brk.x, y[0], color='green', marker='+')
|
||||
#plt.axis('equal')
|
||||
'''
|
||||
p1 = plt.scatter (be.x, be.y, color='red')
|
||||
p2 = plt.scatter (ball_rk.x, ball_rk.y, color='blue', marker='v')
|
||||
|
||||
plt.legend([p1,p2], ['euler', 'runge kutta'])
|
||||
'''
|
||||
@@ -12,7 +12,8 @@ faster, at least on my machine. For example, gaussian average 794 ns, whereas
|
||||
stats.norm(), using the frozen form, averages 116 microseconds per call.
|
||||
"""
|
||||
|
||||
from __future__ import division
|
||||
from __future__ import (absolute_import, division, print_function,
|
||||
unicode_literals)
|
||||
|
||||
import math
|
||||
import numpy as np
|
||||
@@ -252,4 +253,4 @@ if __name__ == '__main__':
|
||||
plot_covariance_ellipse((2,7), cov=cov, variance=[1,2], title='my title')
|
||||
plt.show()
|
||||
|
||||
print "all tests passed"
|
||||
print("all tests passed")
|
||||
Reference in new issue
Block a user