Streamlined description of EKF linearization
This commit is contained in:
1 parent
331d8cf880
commit
8a01161ea4
3 files changed
+245
-273
No files matched your search
+29
-19
@@ -296,7 +296,9 @@
|
||||
"\n",
|
||||
"Modeling dynamic systems is properly the topic of several college courses. To an extent there is no substitute for a few semesters of ordinary and partial differential equations followed by a graduate course in control system theory. If you are a hobbyist, or trying to solve one very specific filtering problem at work you probably do not have the time and/or inclination to devote a year or more to that education.\n",
|
||||
"\n",
|
||||
"Fortunately, I can present enough of the theory to allow us to create the system equations for many different Kalman filters. My goal is to get you to the stage where you can read a publication and understand it well enough to implement the algorithms. The background math is deep, but in practice we end up using a few simple techniques over and over again.\n",
|
||||
"Fortunately, I can present enough of the theory to allow us to create the system equations for many different Kalman filters. My goal is to get you to the stage where you can read a publication and understand it well enough to implement the algorithms. The background math is deep, but in practice we end up using a few simple techniques over and over again. \n",
|
||||
"\n",
|
||||
"This is the longest section of pure math in this book. You will need to master everything in this section to understand the Extended Kalman filter (EKF), the workhorse nonlinear filter. I do cover more modern filters that do not require as much of this math. You can choose so skim now, and come back to this if you decide to learn the EKF.\n",
|
||||
"\n",
|
||||
"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",
|
||||
@@ -314,10 +316,10 @@
|
||||
"$$ \\mathbf v = \\frac{d \\mathbf x}{d t}, \n",
|
||||
"\\quad \\mathbf a = \\frac{d \\mathbf v}{d t} = \\frac{d^2 \\mathbf x}{d t^2}\n",
|
||||
"$$\n",
|
||||
" \n",
|
||||
"Perfectly modeling a system is impossible except for the most trivial problems. A typical automobile tracking problem would have you compute the distance traveled given a constant velocity or acceleration. But, of course we know this is not all that is happening. 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. The suspension is a mechanical system with friction and imperfect springs. Gusts of wind alter the car's state.\n",
|
||||
"\n",
|
||||
"So control theory is forced to make a simplification. At any time $t$ we say that the true state (such as the position of our car) is the predicted value from the imperfect model plus some unknown *process noise*:\n",
|
||||
"A typical automobile tracking problem would have you compute the distance traveled given a constant velocity or acceleration as we did in previous chapters. But, of course we know this is not all that is happening. 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. The suspension is a mechanical system with friction and imperfect springs. Gusts of wind alter the car's state.\n",
|
||||
"\n",
|
||||
"Acurately modeling a system with linear equations is impossible except for the most trivial problems. So control theory is forced to make a simplification. At any time $t$ we say that the true state (such as the position of our car) is the predicted value from the imperfect model plus some unknown *process noise*:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"x(t) = x_{pred}(t) + noise(t)\n",
|
||||
@@ -384,7 +386,7 @@
|
||||
"\n",
|
||||
"We can do that only because $\\dot x = v$ is simplest differential equation possible. Almost all other in physical systems result in more complicated differential equation which do not yield to this approach. \n",
|
||||
"\n",
|
||||
"*State-space* methods became popular around the time of the Apollo missions, largely due to the work of Dr. Kalman. The idea is simple. Model a system with a set of $n^{th}$-order differential equations. Convert them into an equivalent set of first-order differential equations. Put them into the vector-matrix form used in the previous section: $ \\dot{\\mathbf x} = \\mathbf{Ax} + \\mathbf{Bu}$. Once in this form we use of of several techniques to convert these linear differential equations into the recursive equation:\n",
|
||||
"*State-space* methods became popular around the time of the Apollo missions, largely due to the work of Dr. Kalman. The idea is simple. Model a system with a set of $n^{th}$-order differential equations. Convert them into an equivalent set of first-order differential equations. Put them into the vector-matrix form used in the previous section: $\\dot{\\mathbf x} = \\mathbf{Ax} + \\mathbf{Bu}$. Once in this form we use of of several techniques to convert these linear differential equations into the recursive equation:\n",
|
||||
"\n",
|
||||
"$$ \\mathbf x_k = \\mathbf{Fx}_{k-1} + \\mathbf B_k\\mathbf u_k$$\n",
|
||||
"\n",
|
||||
@@ -478,16 +480,18 @@
|
||||
"\n",
|
||||
"$$ \\dot{\\mathbf x} = \\mathbf{Ax}$$\n",
|
||||
"\n",
|
||||
"and want to find the *fundamental matrix* $\\mathbf F$ that propagates the state $\\mathbf x$ with the equation\n",
|
||||
"where $\\mathbf A$ is the system dynamics matrix, and want to find the *fundamental matrix* $\\mathbf F$ that propagates the state $\\mathbf x$ over the interval $\\Delta t$ with the equation\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mathbf x(t_k) = \\mathbf F(\\Delta t)\\mathbf x(t_{k-1})\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"It is conventional to drop the $t_k$ and use the notation\n",
|
||||
"In other words, $\\mathbf A$ is a set of continuous differential equations, and we need $\\mathbf F$ to be a set of discrete linear equations that computes the change in $\\mathbf A$ over a discrete time step.\n",
|
||||
"\n",
|
||||
"$$\\mathbf x_k = \\Phi(\\Delta t)\\mathbf x_{k-1}$$\n",
|
||||
"It is conventional to drop the $t_k$ and $(\\Delta t)$ and use the notation\n",
|
||||
"\n",
|
||||
"$\\mathbf x_k$ does not mean the k$^{th}$ value of $\\mathbf x$, but the value of $\\mathbf x$ at the k$^{th}$ value of $t$.\n",
|
||||
"$$\\mathbf x_k = \\mathbf {Fx}_{k-1}$$\n",
|
||||
"\n",
|
||||
"$\\mathbf x_k$ does not mean the k$^{th}$ value of $\\mathbf x$, but the value of $\\mathbf x$ at the k$^{th}$ value of $t$. In this book I go even further and drop the suffixes entirely in favor of an overline to denote the prediction: $\\overline{\\mathbf x} = \\mathbf{Fx}$.\n",
|
||||
"\n",
|
||||
"Broadly speaking there are three common ways to find this matrix for Kalman filters. The technique most often used with Kalman filters is to use a matrix exponential. Linear Time Invariant Theory, also known as LTI System Theory, is a second technique. Finally, there are numerical techniques. You may know of others, but these three are what you will most likely encounter in the Kalman filter literature and praxis."
|
||||
]
|
||||
@@ -532,15 +536,15 @@
|
||||
"\n",
|
||||
"$$\\begin{bmatrix}\\dot x \\\\ \\dot v\\end{bmatrix} =\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix} \\begin{bmatrix}x \\\\ v\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"This is a first order differential equation, so we can set $\\mathbf{A}=\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}$ and solve the following equation.\n",
|
||||
"This is a first order differential equation, so we can set $\\mathbf{A}=\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}$ and solve the following equation. I have substituted the interval $\\Delta t$ for $t$ to emphasize that the fundamental matrix is discrete:\n",
|
||||
"\n",
|
||||
"$$\\mathbf F e^{\\mathbf At} = \\mathbf{I} + \\mathbf At + \\frac{(\\mathbf At)^2}{2!} + \\frac{(\\mathbf At)^3}{3!} + ... $$\n",
|
||||
"$$\\mathbf F = e^{\\mathbf A\\Delta t} = \\mathbf{I} + \\mathbf A\\Delta t + \\frac{(\\mathbf A\\Delta t)^2}{2!} + \\frac{(\\mathbf A\\Delta t)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
"If you perform the multiplication you will find that $\\mathbf{A}^2=\\begin{bmatrix}0&0\\\\0&0\\end{bmatrix}$, which means that all higher powers of $\\mathbf{A}$ are also $\\mathbf{0}$. Thus we get an exact answer without an infinite number of terms:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"\\mathbf F &=\\mathbf{I} + \\mathbf At + \\mathbf{0} \\\\\n",
|
||||
"\\mathbf F &=\\mathbf{I} + \\mathbf A \\Delta t + \\mathbf{0} \\\\\n",
|
||||
"&= \\begin{bmatrix}1&0\\\\0&1\\end{bmatrix} + \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}t\\\\\n",
|
||||
"&= \\begin{bmatrix}1&t\\\\0&1\\end{bmatrix}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
@@ -1241,7 +1245,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1ecb9df2278>"
|
||||
"<matplotlib.figure.Figure at 0x8264b70>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1275,7 +1279,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1ecb9ffa7b8>"
|
||||
"<matplotlib.figure.Figure at 0x829a9e8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1356,7 +1360,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAADnCAYAAABfROOYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYU2f6PvA7YQuBEBbZQQUFxF2hoqIoKlXr2tZW7aLW\nTmdax1rbmXHG9jcuU61jZxy/Tke7t2pbu1m7WJeKO4obrlUEFxAXIGwxrGFJzu8P5GgKsoacgPfn\nurjI+56Tkxum8/B4cvIemSAIAoiIiIiIyCLkUgcgIiIiInqQsAEnIiIiIrIgNuBERERERBbEBpyI\niIiIyILYgBMRERERWRAbcCIiIiIiC2IDTmTlZs2aBblcjuvXr0sdhYiIiMyADTg16NKlS3jllVfQ\np08fuLm5wcHBAb6+vnjkkUfw/vvvo7S0VOqIFrVhwwbI5XL84x//sMjryWQyyGQyi7wWEZE5yOXy\ner9sbGxw8OBBqWPW6cCBA5DL5Zg9e7bUUagds5U6AFm3N998E0uXLoUgCIiKisLMmTOhUqmQm5uL\nhIQEvPTSS1i1ahUuXbokdVSLYkNMRFQ/mUyGJUuW4H73++vcubNlAxFZETbgdF9vvfUWFi9ejI4d\nO+Kbb77BgAEDau2zf/9+vPHGGxKkk44gCPf9g0JERHf9/e9/lzpCk7G+kyXwEhSqU0ZGBpYuXQp7\ne3ts27atzuYbAIYPH479+/ebzG3ZsgWxsbFwdXWFo6MjunfvjsWLF6OkpKTO58vlcmRkZOB///sf\nevToAUdHRwQFBWHFihXift9++y0GDhwIZ2dneHt74+WXX4Zer691PLlcjuDgYOh0OsyZMwf+/v5w\ndHREz549sW7dulr717zVeL/LSWry1Xjuuecwe/Zs8cxOfW+nfvfddxg1ahQ8PDygUCgQGhqKhQsX\noqioqM7X2r17N4YOHQpnZ2d4eHjg0UcfRWpqap37EhG1FzqdDsHBwXBwcMCJEydqbR83bhzkcrlJ\nDc/KysI//vEPDBkyBL6+vnBwcIC/vz+eeuopJCcn3/e1kpKSMG3aNAQEBIiXU44cORIbN24EACxd\nuhQjRoyATCbD+vXrTS6bqdmHyBx4Bpzq9Mknn6CyshLTp09Hjx496t3Xzs5OfLxo0SIsW7YMHh4e\nmD59OlxdXREfH48333wTW7duRUJCApycnMT9a65v/tOf/oRDhw5h/PjxGDVqFDZv3ow33ngDVVVV\nUKlUWLx4MSZPnozo6Gj8/PPPWLt2LYxGI9auXVsrT0VFBeLi4lBYWIinn34a5eXl+PbbbzF37lxc\nvnwZq1evbvTv4bfXXz/66KPQ6XT44YcfMHz4cAwfPlzcdu/bqXPmzMF7772HwMBAPPbYY3Bzc8PR\no0excuVK7NixA4cPHzb5PWzevBnTpk2Dvb09pk6dCj8/Pxw+fBiDBg1C7969G52XiKitUavV+Prr\nrzFkyBBMnToVp0+fhlqtBgD861//wo4dOzBlyhTMmTNHfM7Bgwfx9ttvIzY2FlOmTIGzszMuX76M\nLVu24KeffsLhw4fRp08fk9f56KOP8NJLL8HGxgYTJkxAWFgY8vLycOrUKaxZswYzZszA8OHDkZGR\ngfXr16Nv376YPHmy+Py+ffta5hdCDwaBqA4jR44U5HK58PHHHzf6OUePHhVkMpnQsWNHITs722Tb\nzJkzBblcLrz88ssm88OHDxdkMpkQEhIi5ObmivPXrl0T7O3tBWdnZ8HHx0e4evWquE2n0wmenp6C\nQqEweY4gCIJMJhPkcrkQExMjVFRUiPP5+flCUFCQIJfLhSNHjojz+/fvF2QymbB06dI6f6bhw4cL\ncrncZG79+vX1Puezzz4TZDKZMGXKFKG8vNxk2/LlywWZTCb8+c9/FueKi4sFd3d3wc7OTjhx4oTJ\n/gsWLBB/poyMjDpfj4jI2tTUrSVLltz367f+85//CDKZTHjssccEQaj+m2Jvby906dJF0Ol0Jvvm\n5uYKxcXFtY5x7tw5wdnZWRg7dqzJfHJysmBnZye4ubkJFy5cqPW8mzdvio9r/i4899xzzfrZiRqD\nDTjVqXv37oJcLhd++eWXRj/nd7/7nSCXy4X33nuv1jaNRiMolUpBpVIJVVVV4nxNg7tx48Zaz6n5\nR8A//vGPWttmz54tyOVy4eDBgybzNUX/8OHDtZ7zwQcfCDKZTPj9738vzrVGA96/f3/Bzs5O0Gq1\ntbYZDAbB09NT8PHxEee++OILQSaTCc8++2yt/QsLCwVXV1c24ETUptTU4vt92djY1Pm8iRMninU/\nKChIcHBwqHVioiETJ04UHB0dTf7WzJ07V5DL5cKqVasafD4bcLIEXoJCZnP69GkAQGxsbK1tXl5e\n6NWrF06cOIFLly4hPDzcZHtdb+35+vred5ufnx8A4ObNm7W22draYtCgQbXmhw0bZpKzNZSVleHM\nmTPw8PDAmjVram0XBAH29vbIysqCVquFm5sbTp06BZlMhpiYmFr7q1Qq9OvXDwcOHGi1zERErcVg\nMDRp//Xr16Nfv35YvHgxZDIZVq1ahcjIyDr33bZtG9577z2cPHkSeXl5qKqqErfJZDLk5eXB29sb\nAHDs2DEAwJgxY5r5kxCZFxtwqpOvry9SUlLqbHDvR6fTAQB8fHzue0wAuH37dq1tNdf73cvW1rbB\nbZWVlbW2dejQoc5lAmsKcU3O1qDVaiEIAvLz8+tdJ1wmk6G4uBhubm5inpp8v3W/eSKi9sbNzQ0j\nRozA+vXr4ezsjOeff77O/dasWYNXX30V7u7uiIuLQ8eOHaFUKiGTyfD999/j3LlzKC8vF/ev+bvj\n7+9vkZ+DqCFswKlOQ4YMwd69e7Fnz55G34ygplHOzs6Gi4tLre1ZWVkm+7WWvLw8CIJQqwnXaDS1\nXr9mhZN7z5zcq65/LNSn5ti9evXCmTNnmvScmny/db95IqL2ZsuWLVi/fj08PT2Rl5eHF198EV98\n8YXJPgaDAUuXLoWvry9Onz4NLy8vk+2JiYm1juvq6goAuHXrVqv/DSJqDC5DSHV67rnnYGdnh+++\n+67eJZ2A6lVHAKB///4AgH379tXaJzc3F+fPn4eTkxPCwsLMH/geVVVVdRbgmuUSa3IC1WdbAODG\njRu19i8sLKzzBkM2NjYA6n5r1cnJCT179kRKSgoKCgoalbd///4QBKHOy0yKi4tb9ZIZIiJrkZ6e\njtmzZ8Pd3R0nTpzAmDFj8NVXX+Gjjz4y2S8vLw+3b9/G4MGDazXfJSUlOHXqVK1jDxw4EACwY8eO\nBnPUV+OJzIUNONWpU6dOWLJkCSoqKvDII4/g+PHjde63d+9e8drq2bNnQxAEvPXWW7XO2i5YsACl\npaWYNWuWWNxa0+uvvy7+wwCoLtgrVqyATCbDrFmzxPlu3bpBrVbjhx9+QE5OjjhvMBjwyiuvoKys\nrNaxPTw8AADXr1+v87X/9Kc/oaKiArNmzYJWq621vbi42OT3OWnSJLi5ueHrr7+u9XteunRpq14y\nQ0RkDaqqqjB16lQUFRXhk08+QceOHbFx40b4+vpi/vz5uHDhgrivl5cXlEolTp48aXJ/iaqqKsyb\nNw95eXm1jl+z/ODy5ctNjlXj1q1b4uOGajyROfASFLqvhQsXim/1DRw4EIMGDcJDDz0ElUqFnJwc\nJCQkICUlRTyjPXDgQCxcuBD//Oc/0bNnTzzxxBNQq9WIj4/HqVOn0KdPH7z11ltmyyfc525lvr6+\nKCsrQ69evTBx4kTo9Xp899130Gg0eOWVV8QzIUD1teSvvvoqli5dir59++LRRx+FTCYTz+L36dMH\n586dMzn+4MGD4eTkhK+++gq2trbo1KkTZDIZZsyYgcDAQMycOROnT5/GO++8gy5dumD06NHo3Lkz\nbt++jWvXruHgwYMYPXo0tmzZAqD6rPkHH3yAadOmYdiwYSbrgJ8/fx4xMTFISEgw2++NiMhSli5d\net9tY8aMQVRUFIDqkzRJSUmYN28eJk6cCKC6Ed60aRNGjhyJqVOn4vjx4+J13vPmzcPKlSvRq1cv\nTJo0CRUVFdi3bx+0Wi1iY2Nr3SAuPDwc69atw0svvYSIiAhxHfCCggKcPn0aFRUVOHnyJAAgLCwM\ngYGBSEhIwDPPPIPQ0FDY2Nhg0qRJ6NmzZ+v8oujB05ilUrKysoSZM2eKay/36NGj1vJvixcvFvz8\n/ARHR0dh+PDhda6zSW1Tamqq8Morrwi9e/cWXF1dBXt7e8HHx0cYPXq08P777wtlZWUm+2/evFkY\nPny4oFarBYVCIYSHhwuLFi2qc83W4cOHCzY2NnUusTdr1ixBLpcLBw4cqLVtyZIlglwuFzZs2GAy\nL5PJhKCgIEGn0wlz5swR/P39xf9m161bd9+fcdWqVUJoaKjg4OAg+Pn5CX/84x8FrVYr5vut3bt3\nC0OHDhVcXFzEZbV+m/OXX34RJk+eLPj6+goODg6Ct7e3EBERIfz1r38Vzpw5c99jOjk5Ce7u7sKj\njz4qpKamCrNmzbrv74iopVjfqTXUtwRhzdeaNWsEQRCErVu3CnK5XIiIiDC5f0ONpUuXCnK53GRZ\nQIPBIKxevVro0aOHoFQqBV9fX2HmzJnC9evX662Zx44dE5544gmxLvv5+QmjRo0SvvjiC5P9Tp8+\nLTz88MOCm5ubYGNjU+ffG6KWkAnCfU4j3qHT6dC/f3/ExMRg7ty56NChA9LS0uDn5yee+Vy5ciXe\neustbNiwAaGhoVi6dCkOHTqES5cumdztj6i1yeVydO7cGWlpaVJHIbJ6rO9ERNJosAF//fXXkZCQ\nUO9b4H5+fpg3bx7+9re/AQD0ej28vLywatUqvPDCC+ZNTFQPNuBEjcf6TkQkjQY/hLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1ecba098470>"
|
||||
"<matplotlib.figure.Figure at 0x859cb70>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1513,7 +1517,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1ecbc11be80>"
|
||||
"<matplotlib.figure.Figure at 0xa8197f0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1558,7 +1562,7 @@
|
||||
"\n",
|
||||
"In filtering our goal is to compute an optimal estimate for a set of states $\\mathbf x_{0:t}$ from time 0 to time $t$. If we knew $\\mathbf x_{0:t}$ then it would be trivial to compute a set of measurements $\\mathbf z_{0:t}$ corresponding to those states. However, we receive a set of measurements $\\mathbf z_{0:t}$, and want to compute the corresponding states $\\mathbf x_{0:t}$. This is called *statistical inversion* because we are trying to compute the input from the output. \n",
|
||||
"\n",
|
||||
"Inversion is a difficult problem because there is typically no unique solution. For a given set of states $\\mathbf x_{0:t}$ there is only one possible set of measurements (plus noise), but for a given set of measurements there are many different sets of states that could have led to those measurements. This difficulty is compounded by the requirement to find the inverse function **blah - is this inversion statement true and complete revisit this whole paragraph**\n",
|
||||
"Inversion is a difficult problem because there is typically no unique solution. For a given set of states $\\mathbf x_{0:t}$ there is only one possible set of measurements (plus noise), but for a given set of measurements there are many different sets of states that could have led to those measurements. \n",
|
||||
"\n",
|
||||
"Recall Bayes Theorem:\n",
|
||||
"\n",
|
||||
@@ -1592,7 +1596,11 @@
|
||||
"\n",
|
||||
"The details of the mathematics for this computation varies based on the problem. The **Discrete Bayes** and **Univariate Kalman Filter** chapters gave two different formulations which you should have been able to reason through. The univariate Kalman filter assumes that for a scalar state both the noise and process are linear model are affected by zero-mean, uncorrelated Gaussian noise. \n",
|
||||
"\n",
|
||||
"The Multivariate Kalman filter make the same assumption but for states and measurements that are vectors, not scalars. Dr. Kalman was able to prove that if these assumptions hold true then the Kalman filter is *optimal*. Colloquially this means there is no way to derive more information from the noise. In the remainder of the book I will present filters that relax the constraints on linearity and Gaussian noise."
|
||||
"The Multivariate Kalman filter make the same assumption but for states and measurements that are vectors, not scalars. Dr. Kalman was able to prove that if these assumptions hold true then the Kalman filter is *optimal*. Colloquially this means there is no way to derive more information from the noise. In the remainder of the book I will present filters that relax the constraints on linearity and Gaussian noise.\n",
|
||||
"\n",
|
||||
"Before I go on, a few more words about statistical inversion. As Calvetti and Somersalo write in *Introduction to Bayesian Scientific Computing*, \"we adopt the Bayesian point of view: *randomness simply means lack of information*.\"[4] Our state parametize physical phenomena that we could in principle measure or compute: velocity, air drag, and so on. We lack enough information to compute or measure their value, so we opt to consider them as random variables. Strictly speaking they are not random, thus this is a subjective position. \n",
|
||||
"\n",
|
||||
"They devote a full chapter to this topic. I can spare a paragraph. Bayesian filters are possible because we ascribe statistical properties to unknown parameters. In the case of the Kalman filter we have closed-form solutions to find an optimal estimate. Other filters, such as the discrete Bayes filter or the particle filter which we cover in a later chapter, model the probability in a more ad-hoc, non-optimal manner. The power of our technique comes from treating lack of information as a random variable, describing that random variable as a probability distribution, and then using Bayes Theorem to solve the statistical inference problem."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1797,7 +1805,9 @@
|
||||
"\n",
|
||||
" * [2] *LTI System Theory* http://en.wikipedia.org/wiki/LTI_system_theory\n",
|
||||
" \n",
|
||||
" * [3] C.F. van Loan, \"Computing Integrals Involving the Matrix Exponential,\" IEEE Transactions Automatic Control, June 1978."
|
||||
" * [3] C.F. van Loan, \"Computing Integrals Involving the Matrix Exponential,\" IEEE Transactions Automatic Control, June 1978.\n",
|
||||
" \n",
|
||||
" * [4] Calvetti, D and Somersalo E, \"Introduction to Bayesian Scientific Computing: Ten Lectures on Subjective Computing,\", Springer, 2007."
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
+197
-251
@@ -288,16 +288,29 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Linearizing a System"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Consider the function $f(x)=x^2−2x$. It could be our measurement function or process model. We want a linear approximation of this function to use in the Kalman filter. There is no linear function that gives a close approximation of this function for all values of $x$. However, during each epoch (update) of the Kalman filter we know its current state, so if we linearize the function at that value we will have a close approximation in that location. For example, suppose our current state is $x=1.5$. What would be a good linearization for this function?\n",
|
||||
"## Linearizing the Kalman Filter\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−12.75 as the linearization, as in the plot below."
|
||||
"The Kalman filter uses linear equations, so it does not work with nonlinear problems. Problems can be nonlinear in two ways. First, the process model might be nonlinear. An object falling through the atmosphere encounters drag which reduces its acceleration. The amount of drag varies based on the velocity the object. The resulting behavior is nonlinear - it cannot be modeled with linear equations. Second, the measurements could be nonlinear. For example, a radar gives a range and bearing to a target. We use trigonometry, which is nonlinear, to compute the position of the target.\n",
|
||||
"\n",
|
||||
"For the linear filter we have these equations for the process and measurement models:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\\overline{\\mathbf x} &= \\mathbf{Ax} + \\mathbf{Bu} + w_x\\\\\n",
|
||||
"\\mathbf z &= \\mathbf{Hx} + w_z\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"For the nonlinear model these equations must be modified to read:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\\overline{\\mathbf x} &= f(\\mathbf x, \\mathbf u) + w_x\\\\\n",
|
||||
"\\mathbf z &= h(\\mathbf x) + w_z\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"The linear expression $\\mathbf{Ax} + \\mathbf{Bu}$ is replaced by a nonlinear function $f(\\mathbf x, \\mathbf u)$, and the linear expression $\\mathbf{Hx}$ is replaced by a nonlinear function $h(\\mathbf x)$.\n",
|
||||
"\n",
|
||||
"You might imagine that we proceed by finding a new set of Kalman filter equations that optimally solve these equations. But if you remember the charts in the **Nonlinear Filtering** chapter you'll recall that passing a Gaussian through a nonlinear function results in a probability distribution that is no longer Gaussian. So this will not work.\n",
|
||||
"\n",
|
||||
"The EKF does not alter the Kalman filter's linear equations. Instead, it *linearizes* the nonlinear equations at the point of the current estimate, and uses this linearization in the linear Kalman filter. \n",
|
||||
"\n",
|
||||
"*Linearize* means what it sounds like. We find a line that most closely matches the curve at a defined point. The graph below linearizes the parabola $f(x)=x^2−2x$ at $x=1.5$."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -309,9 +322,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x720fb00>"
|
||||
"<matplotlib.figure.Figure at 0x4b42710>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -319,112 +332,68 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"xs = np.arange(0, 2, 0.01)\n",
|
||||
"ys = [x**2 - 2*x for x in xs]\n",
|
||||
"\n",
|
||||
"def y(x): \n",
|
||||
" return 8*x - 12.75\n",
|
||||
"\n",
|
||||
"plt.plot(xs, ys)\n",
|
||||
"plt.plot([1.25, 1.75], [y(1.25), y(1.75)])\n",
|
||||
"plt.xlim(1, 2)\n",
|
||||
"plt.ylim([-1.5, 1]);"
|
||||
"import ekf_internal\n",
|
||||
"ekf_internal.show_linearization()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"If the curve above is the process model, then the dotted lines shows the linearization of that curve for the estimate $x=1.5$.\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",
|
||||
"We linearize systems by finding the slope of the curve at the given point:\n",
|
||||
"\n",
|
||||
"$$f(x) = x^2 -2x \\\\\n",
|
||||
"\\frac{df}{dx} = 2x - 2$$ \n",
|
||||
" \n",
|
||||
"Let's plot that."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x720f748>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def y(x): \n",
|
||||
" return x - 2.25\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"f(x) &= x^2 -2x \\\\\n",
|
||||
"\\frac{df}{dx} &= 2x - 2\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"plt.plot(xs, ys)\n",
|
||||
"plt.plot([1, 2], [y(1), y(2)])\n",
|
||||
"plt.xlim(1, 2)\n",
|
||||
"plt.ylim([-1.5, 1]);"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"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. It is easy to see that if the line had any other slope the errors would accumulate more quickly. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Linearizing the Kalman Filter\n",
|
||||
"and then finding its value at the evaluation point:\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 filter's state at time t ($\\mathbf x_t$). In other words we linearize the equations at time t by finding the slope (derivative) of the equations at that time. Since $\\mathbf F$ also depends on the control input vector $\\mathbf u$ we will need to include that term:\n",
|
||||
"$$\\begin{aligned}m &= f'(x=1.5) \\\\&= 2(1.5) - 2 \\\\&= 1\\end{aligned}$$ \n",
|
||||
"\n",
|
||||
"Our math will be more complicated because we are working with systems of differential equations. We linearize $f(\\mathbf x, \\mathbf u)$, and $h(\\mathbf x)$ by taking the partial derivatives ($\\frac{\\partial}{\\partial \\mathbf x}$) of each to evaluate $\\mathbf A$ and $\\mathbf H$ at the point $\\mathbf x_t$ and $\\mathbf u_t$. This gives us the the system dynamics matrix and measurement model matrix:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"\\mathbf F \n",
|
||||
"&\\equiv {\\frac{\\partial{f(\\mathbf x_t, \\mathbf u_t)}}{\\partial{\\mathbf x}}}\\biggr|_{{\\mathbf x_t},{\\mathbf u_t}} \\\\\n",
|
||||
"\\mathbf H &\\equiv \\frac{\\partial{h(\\mathbf x_t)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t} \n",
|
||||
"\\mathbf A \n",
|
||||
"&= {\\frac{\\partial{f(\\mathbf x_t, \\mathbf u_t)}}{\\partial{\\mathbf x}}}\\biggr|_{{\\mathbf x_t},{\\mathbf u_t}} \\\\\n",
|
||||
"\\mathbf H &= \\frac{\\partial{h(\\mathbf x_t)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t} \n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, we find the discrete state transition matrix $\\mathbf F$ by using the approximation of the Taylor-series expansion of $e^{\\mathbf A \\Delta t}$:\n",
|
||||
"\n",
|
||||
"This notation states that at each update step we compute $\\mathbf F$ as the partial derivative of our function $f()$ evaluated at $\\mathbf x_t$, $\\mathbf u_t$.\n",
|
||||
"$$\\mathbf F = e^{\\mathbf A\\Delta t} = \\mathbf{I} + \\mathbf A\\Delta t + \\frac{(\\mathbf A\\Delta t)^2}{2!} + \\frac{(\\mathbf A\\Delta t)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
"This leads to these equations for the EKF:\n",
|
||||
"Alternatively, you can use one of the other techniques we learned in the **Kalman Math** chapter. \n",
|
||||
"\n",
|
||||
"<u>Predict step</u>:\n",
|
||||
"This leads to the following equations for the EKF. I placed them beside the equations for the linear Kalman filter, and put boxes around the only changes:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mathbf F &= {\\frac{\\partial{f(\\mathbf x)}}{\\partial{\\mathbf x}}}\\biggr|_{{\\mathbf x_t},{\\mathbf u_t}} \\\\\n",
|
||||
"\\mathbf{\\overline x} &= \\mathbf{Fx} + \\mathbf{Bu} \\\\\n",
|
||||
"\\mathbf{\\overline P} &= \\mathbf{FPF}^\\mathsf T + \\mathbf Q \n",
|
||||
"\\end{aligned}$$\n",
|
||||
"$$\\begin{array}{l|l}\n",
|
||||
"\\text{linear Kalman filter} & \\text{EKF} \\\\\n",
|
||||
"\\hline \n",
|
||||
"& \\boxed{\\mathbf A = {\\frac{\\partial{f(\\mathbf x_t, \\mathbf u_t)}}{\\partial{\\mathbf x}}}\\biggr|_{{\\mathbf x_t},{\\mathbf u_t}}} \\\\\n",
|
||||
"& \\boxed{\\mathbf F = e^{\\mathbf A \\Delta t}} \\\\\n",
|
||||
"\\mathbf{\\overline x} = \\mathbf{Fx} + \\mathbf{Bu} & \\boxed{\\mathbf{\\overline x} = f(\\mathbf x, \\mathbf u)} \\\\\n",
|
||||
"\\mathbf{\\overline P} = \\mathbf{FPF}^\\mathsf{T}+\\mathbf Q & \\mathbf{\\overline P} = \\mathbf{FPF}^\\mathsf{T}+\\mathbf Q \\\\\n",
|
||||
"\\hline\n",
|
||||
"& \\boxed{\\mathbf H = \\frac{\\partial{h(\\mathbf x_t)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t}} \\\\\n",
|
||||
"\\textbf{y} = \\mathbf z - \\mathbf{H \\bar{x}} & \\textbf{y} = \\mathbf z -\\mathbf{H \\bar{x}}\\\\\n",
|
||||
"\\mathbf{K} = \\mathbf{\\bar{P}H}^\\mathsf{T} (\\mathbf{H\\bar{P}H}^\\mathsf{T} + \\mathbf R)^{-1} & \\mathbf{K} = \\mathbf{\\bar{P}H}^\\mathsf{T} (\\mathbf{H\\bar{P}H}^\\mathsf{T} + \\mathbf R)^{-1} \\\\\n",
|
||||
"\\mathbf x=\\mathbf{\\bar{x}} +\\mathbf{K\\textbf{y}} & \\mathbf x=\\mathbf{\\bar{x}} +\\mathbf{K\\textbf{y}} \\\\\n",
|
||||
"\\mathbf P= (\\mathbf{I}-\\mathbf{KH})\\mathbf{\\bar{P}} & \\mathbf P= (\\mathbf{I}-\\mathbf{KH})\\mathbf{\\bar{P}}\n",
|
||||
"\\end{array}$$\n",
|
||||
"\n",
|
||||
"<u>Update step</u>:\n",
|
||||
"We don't normally use $\\mathbf{Fx}$ to propagate the state for the EKF as the linearization causes inaccuracies. It is typical to compute $\\overline{\\mathbf x}$ using a numerical integration technique such as Euler or Runge Kutta. Thus I wrote $\\mathbf{\\overline x} = f(\\mathbf x, \\mathbf u)$.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mathbf H &= \\frac{\\partial{h(\\mathbf x)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t} \\\\\n",
|
||||
"\\mathbf K &= \\mathbf{\\overline PH}^\\mathsf T(\\mathbf{H\\overline PH}^\\mathsf T + \\mathbf R)^{-1}\\\\\n",
|
||||
"\\mathbf x &= \\mathbf{\\overline x} + \\mathbf K(\\mathbf{z}-\\mathbf{H\\overline x}) \\\\\n",
|
||||
"\\mathbf P &= \\mathbf{\\overline P}(\\mathbf{I} - \\mathbf{KH})\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"I think the easiest way to understand the EKF is to start off with an example. Perhaps the reason for some of my mathematical choices will not be clear, but trust that the end result will be an EKF."
|
||||
"I think the easiest way to understand the EKF is to start off with an example. After we do a few examples you may want to come back and reread this section."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -447,16 +416,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAADVCAYAAABe6Zj7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt8z3X/x/Hn98vOmOOwMTalGkMIEZoi5dCldKCTCZUs\nJOWYU+qX6IquSq4QrpR0uoor1NUPcfHbUJPk3BznNLYuh9nh+/n98W77+trGxrbvtu/jfrvt1vb5\nfg7v77euy9N7r9f7bbMsyxIAAADgAezuHgAAAABQXAi/AAAA8BiEXwAAAHgMwi8AAAA8BuEXAAAA\nHoPwCwAAAI9B+AVQptntdkVFRbl7GCXa6tWrZbfbFR0dna/zJ06cKLvdrjVr1hTxyACg8BF+ARQZ\nu93u8lWuXDlVqVJF7dq109/+9jdlZGQUyzhsNluxPOdiWYGyIF8HDhwo9nFeLL+fk81my/4CgNKm\nvLsHAKBss9lsmjBhgiQpIyNDCQkJ+uKLL7RhwwZ9//33+uqrr9w8wqIRFhamiRMnuhyzLEuTJk1y\n+UwuVrly5WIa3bUZMmSI+vTpo7p167p7KABQYDZ2eANQVOx2u2w2mzIzM12O7969W82bN9fZs2e1\nevVqdejQoUjHcPvtt+uHH34osmcURF6fiTutXr1anTp1Ur9+/TRv3jx3DwcAihRlDwCK3fXXX58d\neDdt2uTy2q5duzRq1Ci1bNlSNWrUkK+vr+rXr6+BAwfq4MGDud4vLS1NU6ZMUYMGDeTr66vw8HCN\nHz9eFy5cyPX8I0eOaPLkyWrXrp1q1aolHx8fhYSEqG/fvtq+fXuO8xMSErJrh48cOaL+/furdu3a\nKl++vP75z39e46dh2O12hYWF6Y8//tCwYcNUr149eXl5aebMmVf9uUjSd999p549e6pmzZry9fVV\n3bp11b17dy1btuyKY7IsSyNHjpTdblf37t119uxZSc6a37Vr1+b6Hs6dO6eRI0cqNDRUvr6+uv76\n6zVt2rQ8nzFz5kxFRETIz89PderUUUxMjFJSUlS/fn2FhYXl9yMEgHyh7AGAW2T90snLy8vl+Bdf\nfKH3339fnTp10m233SZvb29t27ZN8+bN0zfffKPNmzcrJCTE5T4PPvigvv76azVo0EAxMTFKS0vT\n/PnztXXr1lyfvXbtWr3++uvq1KmTmjdvrgoVKmjXrl36/PPP9fXXX2vdunVq1qxZjuuSkpLUtm1b\n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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAADVCAYAAABe6Zj7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmczXX///HnOWOYjTGILGPLRXYyxiAmCVmzX0WWUSJF\nV5KERFf1ra4rS3W1yJq6+IWUb4SrfBlCxjqV7TKTJUW2mbKM2T6/P97NHMc5wwwzc2bmPO6329zM\neX+29zncmmfveb/eb5tlWZYAAAAAL2D3dAcAAACA/EL4BQAAgNcg/AIAAMBrEH4BAADgNQi/AAAA\n8BqEXwAAAHgNwi+AImfq1Kmy2+2Kjo72dFcKjbCwMNntdp07d+6G5168eFF2u109evTIh54BQO4i\n/ALIVXa73enLx8dHISEhat26td555x2lpqbmeR9sNptsNlueP8eddu3auXwG1/saNmyYR/p5rZx+\nZp78jAHgVhTzdAcAFD02m01Tp06VZVlKTU3V0aNH9dlnn2nr1q365ptvtGLFCk93Mc9ERUWpXbt2\nTm0bNmzQxo0bFRkZqXvuucfpWJMmTfKxd7kjMDBQ+/fvV1BQkKe7AgA5RvgFkCdeeOEFl9dNmzbV\nypUrtWnTJrVp08ZDPctbgwcPdmmzLEsbNmzQPffcoylTpnigV7mvdu3anu4CANwUpj0AyBe1atVS\nZGSkJCkmJsbl+IIFC9S3b1/dcccdCggIUHBwsO6++24tWrQoy3vu3LlT999/v0qVKqXg4GB16NBB\n27Zty/L8zz//XIMGDVKdOnUUFBSkoKAgNWvWTLNmzVJ6errL+UOHDs2cO7xo0SKFh4crKChId911\n1018Atc3btw42e12ffbZZ1qxYoXuvvtulSpVSlWrVs08Z/bs2erZs6dq1qypgIAAlS5dWpGRkfr0\n00+zvO+ZM2c0YcIE1a9fX4GBgSpdurSaNGmi559/XpcuXbphv3bt2qWKFSsqJCRE69evl5T1nN+r\n38OaNWvUpk0blSxZUqVLl1avXr0UFxfn9hn79u1Tjx49FBISopIlS6pt27b65ptv9M4772TeDwBy\nCyO/APKNZVmSJF9fX5djo0aNUoMGDRQZGamKFSvq7NmzWr16tYYMGaKDBw/q5Zdfdjp/y5Yt6tCh\ng5KTk9WnTx/VqlVLsbGxuueee3Tvvfe6ff7zzz8vHx8fRUREqHLlykpMTNT69ev19NNPKyYmRh9/\n/LHT+RnzWv/xj39o/fr16tGjh+677z4lJyfn0ifi+qz58+dr3bp16t69u9q2bavz589LktLS0jRy\n5Ei1aNFC9957rypUqKDTp0/ryy+/1IMPPqj4+HhNmDDB6Z4HDhxQ+/btdfLkSTVv3lxPPPGE0tLS\ndOjQIc2cOVPDhw9XzZo1s+zTmjVr1L9/f5UuXVr/+c9/1KBBg2y9hyVLlujzzz9X9+7dNWrUKO3d\nu1dffPGFdu7cqX379jlNl9i7d6/atGmjS5cuqUePHqpXr54OHTqkLl26qHPnzswrBpD7LADIRTab\nzbLb7S7t+/btswIDAy273W7t2rXL5Xh8fLxLW0pKitW+fXvL19fXOnHihNOxOnXqWHa73VqxYoVT\n+7vvvpvZh40bN97wGZZlWUOGDLHsdrv13XffObUPHTrUstlsVlBQkBUbG+v+DWfD1KlTLZvNZk2b\nNi3Lc8aNG2fZbDbL19fX2rx5s9tzfvrpJ5e2pKQkq1WrVpa/v7919uxZp2ONGze27Ha7NXPmTJfr\nzp07ZyUlJWW+DgsLs+x2e+Y95s6da/n6+lqNGjVy+ewvXLhg2Ww2q3v37m7fg5+fn7Vt2zanY6NH\nj7bsdrv13nvvObWHh4dbdrvdWrhwoVP78uXLM/8ely9f7vbzAICbwbQHAHli2rRpmjZtml544QUN\nGjRIYWFhunz5sp599lk1bdrU5fwaNWq4tBUrVixztDLjV+6SGfU9dOiQWrdurZ49ezpdM3LkSNWq\nVcttn9w9Q5LGjBkjy7K0bt06l2M2m00jRoxQw4YNr/t+c8uAAQPUunVrt8eqV6/u0laiRAmNHDlS\nV65ccVraLTo6WrGxsYqIiNBTTz3lcl1ISIhKlCjh9jlTp07Vo48+qrZt22rTpk2qVKlSjt7DsGHD\n1KJFC6e2xx57TJZlafv27ZltBw8eVExMjOrXr+8yV7p3794u9wCA3MC0BwB54qWXXnJpe/nll/X8\n88+7Pf/48eN67bXXtH79eh07dkyXL1/OPGaz2XTixInM17t27ZIktW3b1uU+NptNd999t9v5pefO\nndMbb7yhr776SvHx8bp48WKWz7ha8+bNs3iXuctms133WfHx8Xr99de1YcMG/fzzz9f9jDLmPnfq\n1ClHfRg+fLhWrFihgQMHav78+SpWLGc/Jmw2m5o1a+bSHhoaKkmZ0zgkaffu3ZKkVq1aub1XmzZt\nnMIyAOQGwi+APJGWliZJSkpKUkxMjEaMGKHJkyerRo0aevDBB53O/emnn9S8eXMlJiaqTZs26tSp\nk4KDg+Xj46MjR45o4cKFunLlSub5iYmJstlsqlChgttnu2tPTExUWFiYjh49qvDwcA0ZMkRlypRR\nsWLFlJCQoJkzZzo942q33377zX4MOZbVs/bv36+WLVvq0qVLuueee9SlSxeVKlVKPj4+OnTokBYv\nXuzU/4SEBNlsNlWuXDlHz4+OjpbNZlO3bt1yHHwzlC5d2qUt414Z/y4k83ciuf/7ul47ANwKwi+A\nPOXn56c2bdroq6++Uv369TVixAi1a9fOKdi8+eabOn/+vBYsWKBBgwY5Xb9kyRItWLDAqS04OFiW\nZenUqVNun+mu/cMPP9SRI0cyp2Jcbdu2bZo5c2aW7yE/i66yetbrr7+uP/74Q8uWLVOvXr2cjs2Z\nM0f//ve/ndpKly4ty7KyHM3OyurVq9W/f389/PDDunLlitul23JLqVKlJLn/+7peOwDcCub8AsgX\n1apV03PPPac//vjDZa3bjCkKvXv3drluw4YNLoEwY6mxjRs3upxvWZY2b97s0h4XFyebzZblMwq6\nuLg42e12PfDAAy7H3H1GERERksyKDTlxxx13KDo6WjVr1lRUVJRmz559852+gYy531u2bHF7fNOm\nTXn2bADei/ALIN88/fTTKleunBYsWKDDhw9ntmcUcl0bQteuXau5c+e63KdVq1aqU6eOtmzZ4rIG\n7Lvvvut076ufYf252cTVdu/erddeey3PR3dv9f7Vq1dXenq6SyBcsWKFFi9e7HJ+27Zt1bhxY333\n3XduR7XPnz+vpKQkt88KDQ1VdHS06tWrp5EjR+rtt9++pb5n5c4771RYWJh+/PFHl9H9ZcuW6bvv\nvsuT5wLwboRfAPkmKChIEyZMUEpKitPUg1GjRsnX11d9+/bVoEGD9Nxzz6lr167q2rWr+vXrl7k+\n8NXmzp0rf39/9e/fX/3799ekSZPUvXt3jRs3Tp07d3Y5f/DgwSpTpoyeeuop9enTRxMmTFCfPn0U\nERGhLl26uH1GbsrO/a93zujRo+Xj46MuXbpo6NChGj9+vDp16qR+/fqpf//+bq9dsmSJKlasqGee\neUYREREaP368xo0bpwceeEBVqlTRL7/8kuXzKlSooI0bN6pp06Z66qmn9Nprr+Xa+7zaBx98oKCg\nID3yyCPq1auXJk+enDntImMTDbudH1UAcg//RQGQ6643yjlq1ChVqlRJy5Yt0969eyVJDRs21IYN\nG9S6dWutXr1a77//vv744w+tWLFCI0aMyNw84WqtWrXSpk2b1LFjR61du1bvvPOOkpOTtWHDBoWH\nh7s8t2LFitq8ebO6deumb7/9Vv/617907Ngxvf/++/qf//kft8/ITdm5//WOh4eH6+uvv1bz5s21\ncuVKzZ49W8nJyVq9erUefvhht9fWqVNHe/bs0TPPPKOEhAS98847mjdvno4fP66xY8e6FNdde48y\nZcpo/fr1ioiI0KRJkzR16tQbvp/rvQd31zRt2lRbtmxRt27dtGHDBr311ls6deqUVq9enTktImNu\nMADkBpuV18MdAADchAceeEBffvmljh8/nuO1hgEgK4z8AgA8Ji0tTWfOnHFp/9///V99+eWXCg8P\nJ/gCyFUsdQYA8JgLFy6ocuXKat++verUqSObzabY2FitX79eQUFBeVZsB8B7Me0BAOAxKSkpGjt2\nrNavX68TJ07o8uXLKl++vNq1a6fnn39edevW9XQXARQxWYbfjJ13AAAAgMIoODjYpY05vwAAAPAa\nhF8AAAB4jWwVvLkbMgYAAAAKmhtN3WXkFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1\nCL8AAADwGoRfAAAAeA3CLwAAALwG4RcAAABeg/ALAAAAr0H4BQAAgNcg/AIAAMBrEH4BAADgNQi/\nAAAA8BqEXwAAAHgNwi8AAAC8BuEXAAAAXoPwCwAAAK9B+AUAAIDXIPwCAADAaxB+AQAA4DUIvwAA\nAPAahF8AAAB4DcIvAAAAvAbhFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1CL8AAADw\nGoRfAAAAeA3CLwAAXsBulz77zHPP/+ILqXZtqXhxadgwz/UDIPwCAFBE7N4tFSsmtWnjeuzkSal7\n9/zvU4ZHH5X69ZOOHZNmzZIWLpRKlvRcf+C9CL8AABQRc+ZITzwh/fCDdPCg87Hy5SVf36yvTU3N\n+fNSUrJ3XkKCdPas1LGjdPvtJvRalmSz5fyZwK0i/AIAUAQkJUn//rf02GNSnz4mCF/t6mkPR4+a\n10uWSO3bS4GB0uzZ5ti2baYtKEgqXVq67z4zaixJ7dpJo0ZJzz5rwvTdd5v2GTOkxLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x4af7c88>"
|
||||
"<matplotlib.figure.Figure at 0x7ebb748>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -504,16 +473,15 @@
|
||||
"source": [
|
||||
"We assume a Newtonian, kinematic system for the aircraft. We've used this model in previous chapters, so by inspection you may recognize that we want\n",
|
||||
"\n",
|
||||
"$$\\mathbf F = \\begin{bmatrix}1 & \\Delta t & 0\\\\\n",
|
||||
"0 & 1 & 0 \\\\\n",
|
||||
"0 & 0 & 1\\end{bmatrix}$$\n",
|
||||
"$$\\mathbf F = \\left[\\begin{array}{cc|c} 1 & \\Delta t & 0\\\\\n",
|
||||
"0 & 1 & 0 \\\\ \\hline\n",
|
||||
"0 & 0 & 1\\end{array}\\right]$$\n",
|
||||
"\n",
|
||||
"However, let's practice finding these matrix for a nonlinear system. Please review the section *Modeling a Dynamic System that Has Noise* in the **Kalman Filter Math** chapter if you cannot follow this presentation.\n",
|
||||
"I've partioned the matrix into blocks to show the upper left block is a constant velocity model for $x$, and the lower right block is a constant position model for $y$.\n",
|
||||
"\n",
|
||||
"We model nonlinear systems with a set of differential equations. We need an equation in the form \n",
|
||||
"However, let's practice finding these matrix for a nonlinear system. We model nonlinear systems with a set of differential equations. We need an equation in the form \n",
|
||||
"\n",
|
||||
"$$\\dot{\\mathbf x} = \\mathbf{Ax} + \\mathbf{w}$$\n",
|
||||
"\n",
|
||||
"where $\\mathbf{w}$ is the system noise. \n",
|
||||
"\n",
|
||||
"The variables $x$ and $y$ are independent so we can compute them separately. The differential equations for motion in one dimension are:\n",
|
||||
@@ -523,35 +491,31 @@
|
||||
"\n",
|
||||
"Now we put the differential equations into state-space form. If this was a second or greater order differential system we would have to first reduce them to an equivalent set of first degree equations. The equations are first order, so we put them in state space matrix form as\n",
|
||||
"\n",
|
||||
"$$\\begin{bmatrix}\\dot x \\\\ \\ddot{x}\\end{bmatrix} =\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix} \\begin{bmatrix}x \\\\ \\dot x\\end{bmatrix}$$\n",
|
||||
"$$\\begin{aligned}\\begin{bmatrix}\\dot x \\\\ \\ddot{x}\\end{bmatrix} &= \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix} \\begin{bmatrix}x \\\\ \n",
|
||||
"\\dot x\\end{bmatrix} \\\\ \\dot{\\mathbf x} &= \\mathbf{Ax}\\end{aligned}$$\n",
|
||||
"where $\\mathbf A=\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}$. \n",
|
||||
"\n",
|
||||
"Recall that $\\mathbf A$ is the *system dynamics matrix*. It describes a set of linear differential equations. From it we must compute the state transition matrix $\\mathbf F$. $\\mathbf F$ describes a discrete set of linear equations which compute $\\mathbf x$ for a discrete time step $\\Delta t$.\n",
|
||||
"\n",
|
||||
"and solve the following power series expansion of the matrix exponential to linearize the equations at $t$:\n",
|
||||
"\n",
|
||||
"$$\\mathbf F(\\Delta t) = e^{\\mathbf A\\Delta t} = \\mathbf{I} + \\mathbf A\\Delta t + \\frac{(\\mathbf A\\Delta t)^2}{2!} + \\frac{(\\mathbf A \\Delta t)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"We let $\\mathbf F=\\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}$ and solve the following Taylor series expansion to linearize the equations at $t$:\n",
|
||||
"\n",
|
||||
"$$\\Phi(t) = e^{\\mathbf Ft} = \\mathbf{I} + \\mathbf Ft + \\frac{(\\mathbf Ft)^2}{2!} + \\frac{(\\mathbf Ft)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$\\mathbf F^2 = \\begin{bmatrix}0&0\\\\0&0\\end{bmatrix}$, so all higher powers of $\\mathbf F$ are also $\\mathbf{0}$. Thus the Taylor series expansion is:\n",
|
||||
"$\\mathbf A^2 = \\begin{bmatrix}0&0\\\\0&0\\end{bmatrix}$, so all higher powers of $\\mathbf A$ are also $\\mathbf{0}$. Thus the power series expansion is:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"\\Phi(t) &=\\mathbf{I} + \\mathbf Ft + \\mathbf{0} \\\\\n",
|
||||
"&= \\begin{bmatrix}1&0\\\\0&1\\end{bmatrix} + \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}t\\\\\n",
|
||||
"\\mathbf F(\\Delta t) &=\\mathbf{I} + \\mathbf At + \\mathbf{0} \\\\\n",
|
||||
"&= \\begin{bmatrix}1&0\\\\0&1\\end{bmatrix} + \\begin{bmatrix}0&1\\\\0&0\\end{bmatrix}\\Delta t\\\\\n",
|
||||
"&= \\begin{bmatrix}1&t\\\\0&1\\end{bmatrix}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"We are trying to find the state transition function for\n",
|
||||
"\n",
|
||||
"$$\\mathbf x(t_k) = \\Phi(t_k-t_{k-1})\\mathbf x(t_{k-1})$$ \n",
|
||||
"\n",
|
||||
"If we define $\\Delta t = t_k-t_{k-1}$ and substitute it for $t$ in the equation above we get\n",
|
||||
"\n",
|
||||
"This give us\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"x(t_k) &= \\Phi(\\Delta t)x(t_{k-1}) \\\\\n",
|
||||
"\\mathbf{\\overline x} &= \\Phi(\\Delta t)\\mathbf x \\\\\n",
|
||||
"\\mathbf{\\overline x} &=\\begin{bmatrix}1&\\Delta t\\\\0&1\\end{bmatrix}\\mathbf x \\\\\n",
|
||||
"\\overline{\\begin{bmatrix}x \\\\ \\dot x\\end{bmatrix}} &=\\begin{bmatrix}1&\\Delta t\\\\0&1\\end{bmatrix}\\begin{bmatrix}x \\\\ \\dot x\\end{bmatrix}\n",
|
||||
"\\mathbf{\\overline x} &=\\mathbf{Fx} \\\\\n",
|
||||
"\\mathbf{\\overline x} &=\\begin{bmatrix}1&\\Delta t\\\\0&1\\end{bmatrix}\\mathbf x\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"This is the same result used by the kinematic equations! This exercise was unnecessary other than to illustrate linearizing differential equations. Subsequent examples will require you to use these techniques. "
|
||||
@@ -570,15 +534,15 @@
|
||||
"source": [
|
||||
"The measurement function for our filter needs to take the filter state $\\mathbf x$ and turn it into a measurement, which is the slant range distance. We use the Pythagorean theorem to derive\n",
|
||||
"\n",
|
||||
"$$h(\\mathbf x) = \\sqrt{x_{pos}^2 + x_{alt}^2}$$\n",
|
||||
"$$h(\\mathbf x) = \\sqrt{x^2 + y^2}$$\n",
|
||||
"\n",
|
||||
"The relationship between the slant distance and the position on the ground is nonlinear due to the square root term. To use it in the EKF we must linearize it. As we discussed above, the best way to linearize an equation at a point is to find its slope, which we do by taking its derivative.\n",
|
||||
"The relationship between the slant distance and the position on the ground is nonlinear due to the square root term. To use it in the EKF we must linearize it. As we discussed above, the best way to linearize an equation at a point is to find its slope, which we do by evaluatiing its partial derivative at a point:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\mathbf H \\equiv \\frac{\\partial{h}}{\\partial{x}}\\biggr|_x \n",
|
||||
"\\mathbf H = \\frac{\\partial{h(\\mathbf x)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"The derivative of a matrix is called a Jacobian, which in general takes the form \n",
|
||||
"The partial derivative of a matrix is called a Jacobian, and takes the form \n",
|
||||
"\n",
|
||||
"$$\\frac{\\partial \\mathbf H}{\\partial \\mathbf x} = \n",
|
||||
"\\begin{bmatrix}\n",
|
||||
@@ -590,38 +554,40 @@
|
||||
"\n",
|
||||
"In other words, each element in the matrix is the partial derivative of the function $h$ with respect to the variables $x$. For our problem we have\n",
|
||||
"\n",
|
||||
"$$\\mathbf H = \\begin{bmatrix}\\frac{\\partial h}{\\partial x_{pos}} & \\frac{\\partial h}{\\partial x_{vel}} & \\frac{\\partial h}{\\partial x_{alt}}\\end{bmatrix}$$\n",
|
||||
"$$\\mathbf H = \\begin{bmatrix}{\\partial h}/{\\partial x} & {\\partial h}/{\\partial \\dot{x}} & {\\partial h}/{\\partial y}\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"where $h(x) = \\sqrt{x_{pos}^2 + x_{alt}^2}$ as given above.\n",
|
||||
"where $h(x) = \\sqrt{x^2 + y^2}$.\n",
|
||||
"\n",
|
||||
"Solving each in turn:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\frac{\\partial h}{\\partial x_{pos}} &=\\frac{\\partial}{\\partial x_{pos}} \\sqrt{x_{pos}^2 + x_{alt}^2} \\\\ &= \\frac{x_{pos}}{\\sqrt{x^2 + x_{alt}^2}}\n",
|
||||
"\\frac{\\partial h}{\\partial x} &= \\frac{\\partial}{\\partial x} \\sqrt{x^2 + y^2} \\\\\n",
|
||||
"&= \\frac{x}{\\sqrt{x^2 + y^2}}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"and\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\frac{\\partial h}{\\partial x_{vel}} &=\n",
|
||||
"\\frac{\\partial}{\\partial x_{vel}} \\sqrt{x_{pos}^2 + x_{alt}^2} \\\\ \n",
|
||||
"\\frac{\\partial h}{\\partial \\dot{x}} &=\n",
|
||||
"\\frac{\\partial}{\\partial \\dot{x}} \\sqrt{x^2 + y^2} \\\\ \n",
|
||||
"&= 0\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"and\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\frac{\\partial h}{\\partial x_{alt}} &= \\frac{\\partial}{\\partial x_{alt}} \\sqrt{x_{pos}^2 + x_{alt}^2} \\\\ &= \\frac{x_{alt}}{\\sqrt{x_{pos}^2 + x_{alt}^2}}\n",
|
||||
"\\frac{\\partial h}{\\partial y} &= \\frac{\\partial}{\\partial y} \\sqrt{x^2 + y^2} \\\\ \n",
|
||||
"&= \\frac{y}{\\sqrt{x^2 + y^2}}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"giving us \n",
|
||||
"\n",
|
||||
"$$\\mathbf H = \n",
|
||||
"\\begin{bmatrix}\n",
|
||||
"\\frac{x_{pos}}{\\sqrt{x_{pos}^2 + x_{alt}^2}} & \n",
|
||||
"\\frac{x}{\\sqrt{x^2 + y^2}} & \n",
|
||||
"0 &\n",
|
||||
"&\n",
|
||||
"\\frac{x_{alt}}{\\sqrt{x_{pos}^2 + x_{alt}^2}}\n",
|
||||
"\\frac{y}{\\sqrt{x^2 + y^2}}\n",
|
||||
"\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"This may seem daunting, so step back and recognize that all of this math is doing something very simple. We have an equation for the slant range to the airplane which is nonlinear. The Kalman filter only works with linear equations, so we need to find a linear equation that approximates $\\mathbf H$. As we discussed above, finding the slope of a nonlinear equation at a given point is a good approximation. For the Kalman filter, the 'given point' is the state variable $\\mathbf x$ so we need to take the derivative of the slant range with respect to $\\mathbf x$. \n",
|
||||
@@ -631,7 +597,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -639,7 +605,7 @@
|
||||
"source": [
|
||||
"from math import sqrt\n",
|
||||
"def HJacobian_at(x):\n",
|
||||
" \"\"\" compute Jacobian of H matrix for state x \"\"\"\n",
|
||||
" \"\"\" compute Jacobian of H matrix at x \"\"\"\n",
|
||||
"\n",
|
||||
" horiz_dist = x[0]\n",
|
||||
" altitude = x[2]\n",
|
||||
@@ -656,7 +622,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -679,7 +645,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -769,21 +735,21 @@
|
||||
" rk.predict()\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Putting that all together along with some boilerplate code to save the results and plot them, we get"
|
||||
"Adding some boilerplate code to save and plot the results we get:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7697a90>"
|
||||
"<matplotlib.figure.Figure at 0x88c5e10>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -791,9 +757,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x75f4cf8>"
|
||||
"<matplotlib.figure.Figure at 0x995d748>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -801,9 +767,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x87d0438>"
|
||||
"<matplotlib.figure.Figure at 0x99ab940>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -814,6 +780,7 @@
|
||||
"from filterpy.common import Q_discrete_white_noise\n",
|
||||
"from filterpy.kalman import ExtendedKalmanFilter\n",
|
||||
"from numpy import eye, array, asarray\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"dt = 0.05\n",
|
||||
"rk = ExtendedKalmanFilter(dim_x=3, dim_z=1)\n",
|
||||
@@ -822,9 +789,9 @@
|
||||
"# make an imperfect starting guess\n",
|
||||
"rk.x = array([radar.pos-100, radar.vel+100, radar.alt+1000])\n",
|
||||
"\n",
|
||||
"rk.F = array([[1, dt, 0],\n",
|
||||
" [0, 1, 0],\n",
|
||||
" [0, 0, 1]])\n",
|
||||
"rk.F = eye(3) + array([[0, 1, 0],\n",
|
||||
" [0, 0, 0],\n",
|
||||
" [0, 0, 0]]) * dt\n",
|
||||
"\n",
|
||||
"range_std = 5. # meters\n",
|
||||
"rk.R = np.diag([range_std**2])\n",
|
||||
@@ -858,14 +825,14 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Depending on your experience with derivatives you may have found the computation of the Jacobian above either fairly straightforward, or quite difficult. Even if you found it easy, a slightly more difficult problem easily leads to very difficult computations.\n",
|
||||
"Depending on your experience with derivatives you may have found the computation of the Jacobian difficult. Even if you found it easy, a slightly more difficult problem easily leads to very difficult computations.\n",
|
||||
"\n",
|
||||
"As explained in Appendix A, we can use the SymPy package to compute the Jacobian for us. "
|
||||
"As explained in Appendix A, we can use the SymPy package to compute the Jacobian for us."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -873,32 +840,32 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAAmBAMAAAA2HDP0AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIokyq83d\nZlSLRjhlAAAD0ElEQVRYCcWXPWgUQRTH/5v72s19ZIlN0MiFWKa5RkQEOSEiVhrkRIRoqmihcAEr\nFbzCYAoTDkQIKBiLKCLiaSPhUC74UeqCBNIEAiJYWEREtBDjzNzO7Oz59uP8wIHczr73n//88mbC\nvaB/eAf+20gMD9voJ7af3n28ToT/RaiHJEjZ93MT/2I7wpMmsPCU0P5eKKqcNAHwNfZ2W6Z3h2lV\nOW86tCyAwNqw8HZ8DoXxEs6u0Evd6DMMVkMEqpzJOs5TOprgktky8b42iHcYx93t1EIZyw/BbMgX\n8umWswcgfxWaYOvR6TEk6zewhFlcWyKN3WByAYVPYQJeznxlH87BfE4dBE0gHHvY7o+MZbM6ELZB\n3wLSP0IEopwfMIRVoEXpQgguVhzMr1bza2PUQhkrlpD+Il+IpyjnkrWAOzDI0wohYNAxxqUarG9R\numXzBJbXC6XuTiHzIspX5GMRnF55gJlqZrFKWIbUgFAToWIt/BSIJf6QS9C32c3Y0Dz6SijoN7Fr\npz+uQa6MfOhfo0ZLTjsIMrFKodcgNYREg7CO7dRB0DvBzeYvU1eG2IaHXqO/TqRiO3UQXBBe5XRL\nPH0fQVgDlXs+nfsS4mTNHNBWdBDsFamGQZxsOd0SyZgfIU5JnNFM/ASGu0nBfTJhWopJLJn85Uk4\nYcJVZVG0vQV+gsR6O7PNuwdJpdWwVCxwQjihrNQf1QzwEwy2M8ZtT+ERaFheOmhGOHkExhNtmZ9g\nFuBN1ZapmpIIAh7UsVQ2cEI4CQLzyPV72Kodgr8G7PBEU/Vms6WsOYEI6lgqGzShnATBWG/jlbFL\n/7731SDlQDVV0psTiKCOJZOBT8pJENSzDnKb37WFimCSBXM84etR7zcfN5tOR1BbTk1pp95mc6TJ\nOvA+75K3F0uC1Ah7r7Af3lTxIVtbcQ9kUGQiPgKd2jfxFup+A0kwdXJCdFGiqeIS2dpyAhXkiagR\n6MQJMhtXUfM7SAIU2Xccy4mmikt63NaWE4hgzOYdgU6cwFg8XbHzO1fX8f4t0muH+Ubyv7bEV+Rs\nFuBDb23FKfBgvOadCYOc2qfABIVjRqtQSjm9Uw57UwSZz7ybbQ+9tU3IYLzmnamDnFCSVgetRrZu\nOtaeOosoAjy0l6WCbG3jNe/cIsoJQ6aTtQftK0aNqT2CW3OKkWxt4zXvnCDKKfNyHNbsFayt2D6C\n7Ah/F4NsbdUZSVXgM8qJ33hveDUofPaixCxm885XRjjhYln39wigf2Hpku7nXTkxguLo/u43+Vsr\nUqOHbKQnT/0tv+59MpOT+AmTXbj1s0kQCQAAAABJRU5ErkJggg==\n",
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAMsAAAAmBAMAAACYD3JcAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEO+Zu3ZEIokyq83d\nZlSLRjhlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADRElEQVRIDbVWPWgUQRT+1svt3p/JEhEkCoFY\nSZp0KoKmOBFsjBpFBPGqUzTgpba4EwyIfwRBsAsWESWFZxqLIJxNxMrDKp0HtkISFBNEOOdnd2f2\nzezmSMwrMu/73vfmm53s3T0MjhzG7kZmZMTH4O56iN33/Hcb9yFKPj253Wbm+NVZquwV5wb8Z4bW\napP1F0oVQxoRzrGVlENMT2EykoaJ1SaPD2HdthY7zicbH3CvMW9UrTbAhiHUiK/AIw3SdBlHKAW7\nTX4tbygVcRZYNf7JqvzZXVMgyKw29VwrZygV8Qe401GQZrcmm5SyP83Q5Zl7hjIinJ/MZiKCNHFq\nfW3K2W0MVYzwNoG5RozSQaFxW4cyt16aKdMZjz1Nio270tDVMt+GzRaXZnowJrAZ6G4RejN7BVY7\nGrFFa5e9eNt4GpSBb75m00NKbLykk+lbsY/nCR2HeT2h2XyaQiXsSVlLHcf8nDP9q+Qe8jR3k5Wq\n4sxYv7+9ppLQjNicFPUX92u6jkC9pOeZDkf5B2d0ErI5buO0hGTclasAAIEBayyHBNOHqVhl3G0x\nHLeRB0LTWWelKAiMeJLImyhiOPYWyua4jTwQ0N9iWxSibQSMUEIS3ATwgwtIc9zmSbDFQf6/6QsA\nIGCEEpJcWxac93wlzTEbfiA+BjgvQ6WYHyTkVFqwm8hdfP4GQ+LOuI3WHLPJtiHGgH3TDabiSjE/\nSMhQalwDzheay87RA1xGmiObKquV2PvIx4Av3VagFPODhIxJCrfCKi1gtthGqfuXy7iN1hzaZEcZ\nf4kLgjFgYWlxaWkCtvmBq2JxoQlkJxg1UJO80RzaTF+viANBjQH8QLDND3Ir9dfb/1vcBPsZwmxA\nk+bQBsPj2NsAtDFAKG3zgzIIMucXsAJ4a4/BthBBmiObzIaYSbUxQCht80Owk7acquEj4MzfvOIH\nLGmObNhPLzuQHlxpnR90kczrY/wm9CDNkQ3e+uxAenCldX7QRTIvrNPpnDQrm7mnY/F+j0Hr/BCX\ncZTf/E5I0qxsiqPhvZKOXuDiu3SVsulnc9G2Y5XcBN1I2UB85dF6j7hYSxcym+Hy6XTNjqvZ8jkf\nbvXGjjdK38CrVvEPoeYc6sIOZHkAAAAASUVORK5CYII=\n",
|
||||
"text/latex": [
|
||||
"$$\\left[\\begin{matrix}\\frac{x_{pos}}{\\sqrt{x_{alt}^{2} + x_{pos}^{2}}} & 0 & \\frac{x_{alt}}{\\sqrt{x_{alt}^{2} + x_{pos}^{2}}}\\end{matrix}\\right]$$"
|
||||
"$$\\left[\\begin{matrix}\\frac{x}{\\sqrt{x^{2} + y^{2}}} & 0 & \\frac{y}{\\sqrt{x^{2} + y^{2}}}\\end{matrix}\\right]$$"
|
||||
],
|
||||
"text/plain": [
|
||||
"⎡ x_pos x_alt ⎤\n",
|
||||
"⎢──────────────────── 0 ────────────────────⎥\n",
|
||||
"⎢ _________________ _________________⎥\n",
|
||||
"⎢ ╱ 2 2 ╱ 2 2 ⎥\n",
|
||||
"⎣╲╱ x_alt + x_pos ╲╱ x_alt + x_pos ⎦"
|
||||
"⎡ x y ⎤\n",
|
||||
"⎢──────────── 0 ────────────⎥\n",
|
||||
"⎢ _________ _________⎥\n",
|
||||
"⎢ ╱ 2 2 ╱ 2 2 ⎥\n",
|
||||
"⎣╲╱ x + y ╲╱ x + y ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sympy\n",
|
||||
"sympy.init_printing()\n",
|
||||
"sympy.init_printing(use_latex=True)\n",
|
||||
"\n",
|
||||
"x_pos, x_vel, x_alt = sympy.symbols('x_pos, x_vel x_alt')\n",
|
||||
"x, x_vel, y = sympy.symbols('x, x_vel y')\n",
|
||||
"\n",
|
||||
"H = sympy.Matrix([sympy.sqrt(x_pos**2 + x_alt**2)])\n",
|
||||
"H = sympy.Matrix([sympy.sqrt(x**2 + y**2)])\n",
|
||||
"\n",
|
||||
"state = sympy.Matrix([x_pos, x_vel, x_alt])\n",
|
||||
"state = sympy.Matrix([x, x_vel, y])\n",
|
||||
"H.jacobian(state)"
|
||||
]
|
||||
},
|
||||
@@ -939,16 +906,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbcAAADbCAYAAADu1t9+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtUVOX+BvBnD3dGUeLmJVQQLUXRyA4qpjJoEpiXzIxO\nYialdFpZKdiyU5KrrDxpVqe04oSaRYZpIWGp3BIVC0MlJbyj+EPFC8hNGOT9/WHsHIer2sye7fNZ\ni1W887LnS7rm6d37u98tCSEEiIiIVERj7gKIiIhuNYYbERGpDsONiIhUh+FGRESqw3AjIiLVYbgR\nEZHqMNyIiEh1GG5ERKQ6DDciIlIdhhsREakOw42IiFSH4UZERKpjbe4CiIgaxMfHY+fOnejWrRuO\nHDmCqVOnQqfTAQCqqqrg6Oho5grJUkh8KgARmZsQAhEREdDr9fjqq6+g0WhQXl4Ob29v7Nq1C97e\n3oiJicHixYvNXSpZCJ6WJCKTqa2thYeHBw4ePGgwvnTpUmzatAlxcXHQaK5+LLVv3x7+/v5Ys2YN\n+vTpAxcXF3OUTBaK4UZEJmNra4uIiAh8/vnn8lhtbS3eeecdTJ8+He3atTOY7+7ujsLCQpSXlyMg\nIMDU5ZIFY7gRkUnNmDEDq1atgl6vBwD88ccfOHfuHEaPHm0018rKClu2bEHXrl1RVVVl6lLJgjHc\niMik7r77bvj4+CA5ORkAcOXKFQCAp6en0VwrKysMHjwYnp6eqKysNGmdZNkYbkRkck8//TTi4uIA\nAAMGDECvXr2Qn58vvy6EQEJCAo4dOwa9Xg9HR0ccOHDAXOWSBWK3JBGZXFVVFe68807s3bsXnp6e\nOHToEObPnw9fX1/Y2NhAr9dj3Lhx8PT0xKOPPoqLFy8iODgYS5YsMXfpZCEYbkRkFs8++yw6d+6M\nV199tcW5c+fOhYeHB6Kjo01QGakBT0sSkVlERkbif//7H+rr61uc6+joyGtu1CYMNyIyC39/f7i4\nuGDr1q0tztVqteyWpDZhuBGR2URGRsqNJc3RarVcuVGbMNyIyGzCw8OxefNmlJSUNDuPpyWprRhu\nRGQ2HTt2xPjx47F69epm5/G0JLUVw42IzKrhnrfmGrd5WpLaiuFGRGYVGBgIIQR27NjR5ByelqS2\nYrgRkVlJktRiYwlPS1JbMdyIyOwiIiLw3XffoaysrNHXeVqS2orhRkRm5+7ujlGjRiEhIaHR13la\nktqK4UZEitDcqUmelqS2YrgRkSKMGjUKJSUlyM3NNXqNpyWprRhuRKQIVlZWeOqppxpdvTk4OKC6\nurpV+1ASAXwqABEpyMmTJzFw4ECcPHkSjo6OBq85ODjg/PnzRuNEjeHKjYgUw9PTEwEBAfj222+N\nXuOpSWoLhhsRKUpTjSXsmKS2YLgRkaKMHTsWBQUFKCgoAHD1qd0JCQkoLy9Henq6masjS8FrbkSk\nODExMSgsLETPnj1hb2+P8ePH46mnnkL//v2xcuVKc5dHFsDa3AUQETU4cOAA1q9fj7KyMmzevBmn\nTp2SG0i0Wi2Aqys5NpVQS3hakojMLi8vD88//zxycnIwe/ZsfPLJJ/Dz88OPP/4oz9FqtRg0aBC+\n++47M1ZKloLhRkRmd+edd6JLly6IiIhA+/btAVx9FM5nn30mz9FqtfDw8MDevXvNVSZZEIYbEZmd\ns7MzSktLDZ7pNmnSJPzyyy84ceIEgKvdklVVVejUqROKi4vNVSpZCIYbESnC4MGDkZ2dLX/v4OCA\n8PBwxMfHA/jrPrcpU6bgm2++MVeZZCEYbkSkCKGhoUhJSTEYi4yMxOeff44rV67I4dalSxeu3KhF\nDDciUgRbW1sAQE1NjTw2cOBAuLu7Y8uWLfJpSQDw9fVFXl6eWeoky8BwIyLFCAsLa3T1FhcXZ7D9\n1sSJE7FhwwZzlEgWguFGRIoREBCAXbt2GYyFh4dj69atqK+vl8OtXbt2qK6uxpUrV8xRJlkAhhsR\nKYYkSXB2dsaFCxfkMScnJ0ycOBG5ubkGDywNCgridlzUJIYbESnK5MmTkZiYaDD29NNPY/v27aio\nqJDHgoODkZaWZuryyEIw3IhIUby9vXH06FGDsSFDhsDKygpFRUXymJWVFezt7fmkAGoUw42IFKdn\nz544fPiw/L0kSRg7dixOnjxpMG/ChAncjosaxXAjIsWZPHky1q1bZzA2ePBgaLVa1NfXy2N+fn7Y\nt2+fqcsjC8BwIyLFuX47LiEEPvroIxw/flzesaQBt+OixjDciEiRhgwZgp07dwIAEhISkJeXh9ra\nWixfvtxg9TZlyhSsXbvWXGWSQjHciEiRHnzwQaSkpEAIgffffx/V1dUArj4e59rVW5cuXXD69Glz\nlUkKxXAjIkWytbWFJElYvXq1wVZbja3e+vXrx+24yADDjYgUKzQ0FG+88Ya8amtw/eqN23HR9azN\nXQARUVO6dOkCSZIwadIkAMC3334r/3vDc96Aq4/DadiOy8rKyiy1krJI4tqnAxIRKczixYsxY8YM\nuLi4QJIkNPWRtXXrVgghMHr0aBNXSErE05JEpGiNbcfVGO41SdfiaUkiUjQvLy8cO3as2Tnl5eVY\nv349iouLIYSAJEkmqo6UiuFGRIrn4+ODQ4cOGYzV1dUhNTUVGRkZ0Gq1ePjhhzFt2jQzVUhKw2tu\nRKR4Fy9exIoVKzB//nzk5ubi+++/R21tLUaNGoURI0ZAo+EVFjLElRsRKZ6zszNKSkoAAPn5+YiO\njoajo6OZqyIl48qNiCxCfX09rKysmuyWJLoW1/JEZBF46pHagn9biIhIdRhuRESkOgw3IiJSHYYb\nERGpDsONiIhUh+FGRESqw3AjIiLVYbgREZHqMNyIiEh1GG5ERKQ6DDciIlIdhhsREakOw42IiFSH\n4UZERKrDcCMiItVhuBERkeow3IiISHUYbkREpDoMNyIiUh2GGxERqQ7DjYiIVIfhRkREqsNwIyJq\nxJQpUzBs2LBbcqzjx49Do9Hg9ddfvyXHu1ErV66ERqPBzz//3OyYUu3Zs6fVtVqboB4iIouyfft2\nJCYmIj09/ZYeV5KkW3q8283AgQMxceJEzJkzB7/++muzc7lyIyK6zsKFC3HPPfdgxIgR5i6FrvPC\nCy9g9+7dSElJaXYew42I6BqHDx/G1q1bERERYe5SqBH3338/evTogRUrVjQ7j+FGRBapsLAQGo0G\nsbGxBuNjxoyBRqPBsmXLDMYDAgLQt2/fFo+7bt06CCEQGhpqMD59+nQ4ODigpqZGHtu5cyc0Gg1c\nXFwghJDHN23aBI1Gg8TERINjCCGQnJyM++67Dw4ODujSpQtiYmJw5coVozoOHTqEqVOnonPnzrCz\ns4OXlxdiYmJQVVVlNLe4uBhRUVHo1q0b7Ozs0LVrV8ycORMlJSUt/r4N9Ho9YmNj0b17d9jb22PA\ngAFYu3at0bzNmzdjypQp8Pb2hqOjI5ydnTFmzJhGr4Pt378fkydPRteuXWFvb4/OnTtDp9MZrbpq\namqwaNEi+Pr6wsHBAc7Ozhg3bhz27NnTaK1jxozBjz/+iMrKyiZ/H4YbEVmk7t27w9vbG2lpafJY\nbW0tsrKyoNFoDMYvXbqE3377DcHBwS0eNzMzE87OzujVq5fBeHBwMGpqarB9+3Z5LDU1FRqNBqWl\npcjNzZXH09LSoNFoEBQUZHCMlJQUzJgxA2FhYVi2bBkGDBiAd999F4sXLzaYt3v3bgwaNAhZWVmI\niorCxx9/jLFjx+KDDz7A6NGjUVdXJ889ceIEBg0ahPXr1+OJJ57Axx9/jKlTp+Lrr79GYGAgLl26\n1OLvDADz5s3DN998g+eeew4LFy5EbW0twsPDsWrVKoN5q1atQmlpKZ588kn897//xYsvvoj8/HwE\nBwcjKytLnnf+/HnodDpkZWXhmWeewYoVK/DSSy/Bzc0Nv/zyizxPr9cjJCQECxcuRGBgIJYtW4aX\nX34ZBw4cQGBgIHbv3m1U6+DBg1FXV2fwfkYEEZGFuP4jKzIyUtja2orq6mohhBCZmZlCkiQxdepU\n4eTkJK5cuSKEECIpKUlIkiTWr1/f4nt069ZN3HvvvUbjRUVFQpIk8corr8hjQUFBYvz48cLJyUks\nXrxYHvf39xd+fn7y98eOHROSJIl27dqJwsJCg+P269dPdO7c2WDMz89P9OnTR1RUVBiMb9iwQUiS\nJFauXCmPjRs3Tnh4eIhTp04ZzM3JyRHW1tYiNjZWHouPjxeSJInMzEyjsR49eohLly7J42VlZaJ7\n9+7ijjvukP/7CiFEZWWl0X+bM2fOCFdXVxEaGiqPff/990KSJJGYmGg0/1pLly4VkiSJzZs3G4xf\nunRJdOvWTYwcOdLoZ7Zt2yYkSRJLly5t8rhcuRGRxQoODoZer8e2bdsAXF0xeXh4YPbs2SgvL5c7\n6tLT0yFJktFKqjElJSW44447jMa7du2K3r17yyvCy5cvIzs7GyEhIRgxYgRSU1MBAKWlpdi7dy90\nOp3RMSZMmIBu3boZjI0cORKnT5+WTzfm5eUhLy8P4eHhqK6uxrlz5+SvwMBAODo6YvPmzQCAsrIy\nJCcnY9y4cbC1tTWY2717d/Ts2VOe25KoqCi0b99e/t7JyQmzZs3CxYsXkZGRIY87OjrK/15RUYHz\n589Do9HgH//4B3bt2iW/1rFjRwBXV6vl5eVNvu+aNWvQp08f+Pv7G9RfU1ODUaNGISsry+BUMAC4\nuLgAAM6ePdvkcRluRGSxGsKqIXDS0tIQFBQEf39/ODs7G4wPHDhQ/sBtjiRJBtfPrn+/nJwcVFRU\nYMeOHbh8+TJ0Oh2CgoKQlZUFvV6PjIwM1NfXNxpu3t7eRmMNH9Tnz58HAOTn5wMAFLine truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAbsAAADbCAYAAAD06j/wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtUVOX+BvBnb+5XuYmKpqBSpoAZ5v3GqKHg3UwrQ/OS\n2jmnMhO1fuWllVp57ZyjtrQwrJZKWUdBMhVQMckiLc1LISIJioQoyAgM+P7+8DDHcYBBVPae7fNZ\ny1Xzzjt7vkM2D+/e3723JIQQICIi0jBZ6QKIiIjuN4YdERFpHsOOiIg0j2FHRESax7AjIiLNY9gR\nEZHmMeyIiEjzGHZERKR5DDsiItI8hh0REWkew46IiDSPYUdERJpnq3QBRES327hxIw4dOoSHHnoI\nmZmZGD9+PHQ6HQBAr9fD2dlZ4QrJ2ki86wERqcnzzz8Pg8GAL774ArIso7i4GK1bt8bhw4cREBCA\n6OhovP/++0qXSVaGKzsiUsS8efNgMBiwbNky49jy5cvx7bffIisrC7J88yiLm5sbHn/8cXz22Wco\nLS1Fenq6UiWTFeMxOyJSxKRJkxAbG4vy8nIAgMFgwPvvv48XXngBLi4uJnN9fX2RlZWFI0eOoHHj\nxkqUS1aOYUdEiggMDESHDh2wfft2AMCpU6eQn5+PAQMGmM21tbXFnj170KtXL+j1+oYulTSAYUdE\nipkyZQrWr18PAKisrIQkSXjooYfM5tnY2KBr167o0qULSkpKGrpM0gCGHREpZvTo0UhPT0dWVhY6\nduyIwMBAnDp1ymTO5s2bcfbsWVRUVMDZ2RmXLl1SqFqyZuzGJCJFvfzyy/D09MTChQuRkZGBN954\nAx06dICtrS0qKiowdOhQtGzZEk8//TRatmyJAwcO4MyZM0qXTVaGYUdEivr1118RGRmJrKws2NjY\n1Do3IyMD4eHhDDu6Y9yNSUSKCgkJQbNmzbBr1y6Lc52dnXnMjuqFYUdEips6dSo2bNhgcZ6Liwu7\nMaleuBuTiBRXXFyMli1b4uTJk2jatGmN8wwGAxwdHVFRUQFJkhqwQrJ2XNkRkeLc3NwwatQoxMbG\n1jrPzs4ONjY2KCsra6DKSCsYdkSkClOmTMGGDRtgaWcTd2VSfTDsiEgVunXrBnt7e+zfv7/WeS4u\nLmxSoTvGsCMiVZAkybi6qw07Mqk+GHZEpBrjx4/Hjh07UFhYWOMc7sak+mDYEZFq+Pj4YNCgQfj8\n889rnMPdmFQfDDsiUpWpU6di/fr1NTaqcDcm1QfDjohUJSwsDMXFxTXepJW7Mak+GHZEpCqyLGPy\n5Mk1NqpwNybVB8OOiFRn4sSJ2Lp1K65du2b2HHdjUn0w7IhIdZo3b45evXohLi7O7DnuxqT6YNgR\nkSrVdM4dd2NSfTDsiEiVIiIicPbsWZw4ccJknLsxqT4YdkSkSra2tpg4caJxdSeEQHp6Ovbv34+U\nlBRliyOrY6t0AURENZk8eTK6dOkCX19fXLlyBaGhoRg+fDg+/vhjXLlyBR4eHkqXSFaCKzsiUp2i\noiJ88sknWL9+PXx8fODj44OlS5dizJgxaNSoEZo0aVJt8wpRTbiyIyJVWbhwIezs7DBq1ChMmjQJ\nHTt2RExMDKZMmQLgZoOKjY0NMjIyFK6UrAlXdkSkKmVlZZgzZw7atWsHABg5ciSOHDmCs2fPAvhf\nN6a/v79xjMgShh0RqUpYWBiSk5ONjx0dHfHcc8/hk08+AXCzG1Ov1+Ppp5/G1q1blSqTrAzDjohU\nRafTISkpyWRs8uTJiImJQUVFhXFl5+3tjcuXL1u8szkRwLAjIpWxsbGBo6Ojybl0wcHBaNGiBXbt\n2mVyUnnXrl1x+PBhpUolK8KwIyLVGTFiBL7++muTsapb/1TtxgSAyMhIJCQkKFEiWRmGHRGpTkhI\nCI4dO2YyNnbsWOzbtw/FxcXGlZ2DgwNu3LiB8vJyJcokK8KwIyJVatasGS5cuGB87Orqiqeeegpf\nfvklSkpKjMfqBg8ejMTERKXKJCvBsCMiVRo7diy2bNliMjZlyhTExMRAlmXjaq5Hjx74/vvvlSiR\nrAjDjohU6faVHQB06dIFzs7OcHBwMO7KlCQJHh4eKCwsVKJMshIMOyJSreDgYPz666/Gx5IkYcqU\nKbhx44ZJt+aYMWPw5ZdfKlEiWQmGHRGp1siRI826MsePHw+DwYCioiLjWNu2bXHmzJmGLo+sCMOO\niFTLxcUFZWVlqKysNI65urqiWbNmyM3NNZnr7++PzMzMhi6RrATDjohU7fYrqqxYsQK5ubl45513\nTOaNGTOGd0KgGjHsiEjVwsLCjGFXXl6OL774ApWVlfjll1+we/du4zxePoxqw7AjIlWzsbGBk5MT\nrl27hhUrVuDEiRMAbt7z7vbVXbdu3fDDDz8oUSapHMOOiFRv5MiRiIuLM67qqty+uouIiMDOnTuV\nKJFUjmFHRKoXHByMjRs3Gld1VW5f3Tk4OEAIwcuHkRneqZyIrIKrqyvCw8Ph5OSEr776CqNHjwYA\nyLIMg8EAOzs7AP+7fNjw4cOVLJdURhI8mktEVuDChQvYsmULXn31VUiSVGMjihAC8+bNw9KlSxu4\nQlIz7sYkIqtQ3eXDqsPLh1F1GHZEZDVCQkLwyy+/1Pi8EAKHDh3Cn3/+iYyMjAasjNSOx+yIyGqM\nGDECy5YtMxvPzMzE1q1bceXKFXTr1g0rV66Evb29AhWSWjHsiMhquLi4oLS0FABQWFiIuLg4nD17\nFgEBAXjxxRfh5eWlcIWkVmxQISKrkpKSgrCwMCxZsgRjxoxBmzZtlC6JrADDjoisTm3dmETVYYMK\nERFpHsOOiIg0j2FHRESax7AjIiLNY9gREZHmMeyIiEjzGHZERKR5DDsiItI8hh0REWkew46IiDSP\nYUdERJrHsCMiIs1j2BERkeYx7IiISPMYdkREpHkMOyIi0jyGHRERaR7DjoiINI9hR0REmsewIyIi\nzWPYERGR5jHsiIhI8xh2RESkeQw7IiILxo4di969e9+TbZ07dw6yLGPRokX3ZHv19emnn0KWZezf\nv7/WMbX65ZdfYGNjgwMHDtRpvu19roeIyKodPHgQcXFxSElJUbqUe06SpDqNqVHHjh0xYsQIzJo1\nC4cPH7Y4nys7IqJaLFq0CJ06dUKfPn2ULoVu8+qrr+Knn35CYmKixbkMOyKiGpw5cwZ79uzBhAkT\nlC6FqtG7d2/4+/tj3bp1Fucy7IjI6mVnZ0OWZSxcuNBkPDw8HLIsY/Xq1SbjXbt2RYcOHSxuNy4u\nDgAwePBgk/EXXngBTk5OKC8vN46lpaVBlmX4+PiYzE1MTIQsy8Zt3SohIQFdunSBk5MT/Pz8EB0d\njRs3bpjNy8jIwPPPPw8/Pz84ODggICAA0dHR0Ov1ZnMvXryIGTNmoFWrVnBwcEDz5s0xbdo05Ofn\nW/y8VSoqKrBgwQL4+/vD0dERHTt2xJYtW8zm7d69G+PGjUObNm3g7OwMT09PhIeHV3vM78SJExgz\nZgxatGgBR0dHNGvWDDqdzmxVVl5ejsWLFyMoKAhOTk7w9PTEsGHDcPTo0WprDQ8Px7ffflvtz+JW\nDDsisnotW7ZE69atkZSUZBwzGAw4ePAgbGxsTMaLi4vx888/o3///ha3u3//fnh4eCAwMNBkvH//\n/igvL8fBgweNY3v37oUsyygsLMSRI0eM40lJSZBlGWFhYSbbSEhIwOTJkxEREYFVq1bhsccew7Jl\ny/D++++bzEtPT0fnzp2RmpqK6dOnY82aNRg6dCg+/PBDPPnkk6isrDTO/fPPPxEaGopt27bhueee\nw5o1axAVFYXNmzejV69eKC4utviZhRCIjo7G1q1b8be//Q3vvPMODAYDnnnmGcTGxprM3bhxIwoL\nCzFhwgT861//wmuvvYZTp05hwIABJj+by5cvIywsDKmpqZg6dSrWrVuHWbNmwdfXFz/88INxXkVF\nBcLDw/HOO++gR48eWLVqFebNm4eTJ0+iZ8+e+Pnnn83q7d69OyoqKpCammrxgxERWZXqvrqmTp0q\nHBwcxPXr14UQQuzfv19IkiSioqJEo0aNRGVlpRBCiO3btwtJksS2bdssvk+rVq1EaGio2XhOTo6Q\nJEn83//9n3FMp9OJESNGiEaNGokPPvjAOB4aGipCQkKMj7OysoQkScLV1VVkZ2ebbDcoKEj4+fmZ\njIWEhIj27duLkpISk/FvvvlGSJIkPv30U+PYsGHDRJMmTURubq7J3PT0dGFraysWLlxoHNu4caOQ\nZVns27fPZEySJOHv7y+Ki4uN41evXhWtWrUS3t7eorS01Diu1+vNfjaXLl0SPj4+IjIy0jhW9TOP\ni4szm3+rFStWCFmWxe7du03Gi4uLRcuWLUVYWJjZa1JTU4UkSWLFihW1bpsrOyLSBJ1OB4PBYGxF\n37t3L5o0aYJXXnkFRUVF+PHHHwEAycnJ1a60qpOfnw8vLy+zcT8/Pzz88MPGFWNZWRkOHTqE8PBw\n9OnTB3v37gUAXL16FUePHoVOpzPbxsiRI/HQQw+ZjIWFheHixYvGXXLHjx/HsWPH8Mwzz+D69eso\nKCgw/unRowdcXFzw3XffAQCKioqQkJCAYcOGwd7e3mRuy5Yt0bZtW+NcS1566SW4uroaH7u7u2P6\n9OkoLCw06Up1cnIy/ntJSQkuX74MSZLQtWtXkxVbo0aNANzcpVvb6vLzzz9Hu3bt0KlTJ5P6S0tL\nMXDgQKSmpqKsrMzkNd7e3gCAS5cu1fqZGHZEpAk6nQ5CCGMAJScnQ6fToVOnTvD09DQZ79ixIzw8\nPCxuU5IkCCFqfL+ffvoJJSUlOHjwIMrKyqDT6aDT6ZCamoqKigokJydDCFFt2AUEBLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7679e10>"
|
||||
"<matplotlib.figure.Figure at 0x802d2b0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -963,31 +930,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Here we see the front tire is pointing in direction $\\alpha$ relative to the wheelbase. Over a short time period the car moves forward and the rear wheel ends up further ahead and slightly turned inward, as depicted with the blue shaded tire. Over such a short time frame we can approximate this as a turn around a radius $R$. We can compute the turn angle $\\beta$ with\n",
|
||||
"\n",
|
||||
"$$\\beta = \\frac{d}{w} \\tan{(\\alpha)}$$\n",
|
||||
"\n",
|
||||
"and the turning radius R is given by \n",
|
||||
"\n",
|
||||
"$$R = \\frac{d}{\\beta}$$\n",
|
||||
"\n",
|
||||
"where the distance the rear wheel travels given a forward velocity $v$ is $d=v\\Delta t$.\n",
|
||||
"\n",
|
||||
"If we let $\\theta$ be our current orientation then we can compute the position $C$ before the turn starts as\n",
|
||||
"\n",
|
||||
"$$ C_x = x - R\\sin(\\theta) \\\\\n",
|
||||
"C_y = y + R\\cos(\\theta)\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"After the move forward for time $\\Delta t$ the new position and orientation of the robot is\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned} x &= C_x + R\\sin(\\theta + \\beta) \\\\\n",
|
||||
"y &= C_y - R\\cos(\\theta + \\beta) \\\\\n",
|
||||
"\\theta &= \\theta + \\beta\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Once we substitute in for $C$ we get\n",
|
||||
"In the **Unscented Kalman Filter** chapter we derived these equations describing for this model:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned} x &= x - R\\sin(\\theta) + R\\sin(\\theta + \\beta) \\\\\n",
|
||||
"y &= y + R\\cos(\\theta) - R\\cos(\\theta + \\beta) \\\\\n",
|
||||
@@ -995,7 +938,9 @@
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"You do not need to understand this math in detail if you are not interested in steering models. The important thing to recognize is that our motion model is nonlinear, and we will need to deal with that with our Kalman filter."
|
||||
"where $\\theta$ is the robot's heading.\n",
|
||||
"\n",
|
||||
"You do not need to understand this model in detail if you are not interested in steering models. The important thing to recognize is that our motion model is nonlinear, and we will need to deal with that with our Kalman filter."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1008,7 +953,7 @@
|
||||
"\n",
|
||||
"$$\\mathbf x = \\begin{bmatrix}x \\\\ y \\\\ \\theta\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"Our control input $\\mathbf u$ is the velocity and steering angle\n",
|
||||
"Our control input $\\mathbf u$ is the velocity $v$ and steering angle $\\alpha$:\n",
|
||||
"\n",
|
||||
"$$\\mathbf u = \\begin{bmatrix}v \\\\ \\alpha\\end{bmatrix}$$"
|
||||
]
|
||||
@@ -1069,7 +1014,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1095,7 +1040,7 @@
|
||||
"⎣0 0 1 ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1126,7 +1071,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1144,7 +1089,7 @@
|
||||
"⎣0 0 1 ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1179,7 +1124,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1225,7 +1170,7 @@
|
||||
" ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1288,7 +1233,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1296,28 +1241,28 @@
|
||||
{
|
||||
"data": {
|
||||
"text/latex": [
|
||||
"$$\\left[\\begin{matrix}\\frac{- px + x}{\\sqrt{\\left(px - x\\right)^{2} + \\left(py - y\\right)^{2}}} & \\frac{- py + y}{\\sqrt{\\left(px - x\\right)^{2} + \\left(py - y\\right)^{2}}} & 0\\\\- \\frac{- py + y}{\\left(px - x\\right)^{2} + \\left(py - y\\right)^{2}} & - \\frac{px - x}{\\left(px - x\\right)^{2} + \\left(py - y\\right)^{2}} & -1\\end{matrix}\\right]$$"
|
||||
"$$\\left[\\begin{matrix}\\frac{- p_{x} + x}{\\sqrt{\\left(p_{x} - x\\right)^{2} + \\left(p_{y} - y\\right)^{2}}} & \\frac{- p_{y} + y}{\\sqrt{\\left(p_{x} - x\\right)^{2} + \\left(p_{y} - y\\right)^{2}}} & 0\\\\- \\frac{- p_{y} + y}{\\left(p_{x} - x\\right)^{2} + \\left(p_{y} - y\\right)^{2}} & - \\frac{p_{x} - x}{\\left(p_{x} - x\\right)^{2} + \\left(p_{y} - y\\right)^{2}} & -1\\end{matrix}\\right]$$"
|
||||
],
|
||||
"text/plain": [
|
||||
"⎡ -px + x -py + y ⎤\n",
|
||||
"⎢────────────────────────── ────────────────────────── 0 ⎥\n",
|
||||
"⎢ _______________________ _______________________ ⎥\n",
|
||||
"⎢ ╱ 2 2 ╱ 2 2 ⎥\n",
|
||||
"⎢╲╱ (px - x) + (py - y) ╲╱ (px - x) + (py - y) ⎥\n",
|
||||
"⎢ ⎥\n",
|
||||
"⎢ -(-py + y) -(px - x) ⎥\n",
|
||||
"⎢ ───────────────────── ───────────────────── -1⎥\n",
|
||||
"⎢ 2 2 2 2 ⎥\n",
|
||||
"⎣ (px - x) + (py - y) (px - x) + (py - y) ⎦"
|
||||
"⎡ -pₓ + x -p_y + y ⎤\n",
|
||||
"⎢─────────────────────────── ─────────────────────────── 0 ⎥\n",
|
||||
"⎢ ________________________ ________________________ ⎥\n",
|
||||
"⎢ ╱ 2 2 ╱ 2 2 ⎥\n",
|
||||
"⎢╲╱ (pₓ - x) + (p_y - y) ╲╱ (pₓ - x) + (p_y - y) ⎥\n",
|
||||
"⎢ ⎥\n",
|
||||
"⎢ -(-p_y + y) -(pₓ - x) ⎥\n",
|
||||
"⎢ ────────────────────── ────────────────────── -1⎥\n",
|
||||
"⎢ 2 2 2 2 ⎥\n",
|
||||
"⎣ (pₓ - x) + (p_y - y) (pₓ - x) + (p_y - y) ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"px, py = symbols('px, py')\n",
|
||||
"px, py = symbols('p_x, p_y')\n",
|
||||
"z = Matrix([[sympy.sqrt((px-x)**2 + (py-y)**2)],\n",
|
||||
" [sympy.atan2(py-y, px-x) - theta]])\n",
|
||||
"z.jacobian(Matrix([x, y, theta]))"
|
||||
@@ -1334,7 +1279,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1368,7 +1313,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1421,7 +1366,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 36,
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1502,7 +1447,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"execution_count": 17,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1527,7 +1472,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 107,
|
||||
"execution_count": 18,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1536,8 +1481,9 @@
|
||||
"source": [
|
||||
"from filterpy.stats import plot_covariance_ellipse\n",
|
||||
"from math import sqrt, tan, cos, sin, atan2\n",
|
||||
"dt = 1.0\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"dt = 1.0\n",
|
||||
"\n",
|
||||
"def z_landmark(lmark, sim_pos, std_rng, std_brg):\n",
|
||||
" x, y = sim_pos[0, 0], sim_pos[1, 0]\n",
|
||||
@@ -1603,17 +1549,17 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 108,
|
||||
"execution_count": 19,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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\nd5+1u5cvX36oYfd74YUXWLRoEePGjePFF1/EarUetjg+/b8YB2PChAk4HA42btxIR0fHoO37updC\niC8GSaaFEEdMeno6b731FjNnzuS1115j3rx5BIPBox7HLbfcQmZmJo8//jjV1dUAXHPNNVitVv7r\nv/6rf45zn/vvv5/GxkYuuuiiff63/hNPPEFVVdWAtrvuuotQKMQ3v/nN/oT4rLPOYsKECaxZs4b/\n/d//HdD/7bff5u9//ztZWVlcdtll/e19JQRra2uHfd0FBQVceOGF7N27d9D0iM2bN/O73/0Ou93O\nNddc099+8803A/CDH/yA+vr6QcdsaGjo/7ysrIyOjo5B9bL/9Kc/8cYbbwwr9g8++ICrr76a7Oxs\nli5dSnp6+pB9DyUOr9dLW1vbQf+CZzabmT9/PsFgkB/96EcDtjU2NnL//fej6zrXXXfdQR1PCHH8\nkGkeQoghKaW45557hnyJcO7cuUyfPn2/x3C73bz++utcdtllvPnmm1xwwQUsXbr0qK5453K5+OEP\nf8htt93GnXfeyTPPPENxcTG/+c1v+M53vsO0adO48sorycnJYeXKlaxYsYKioiJ+97vf7fN4c+bM\nYcaMGXz9618nJyeHFStWsGrVKsaOHct99903oO+SJUv48pe/zPz583n22WeZPHkyu3bt4m9/+xt2\nu50///nP2O32/v7nnXceuq7z61//mo6Ojv552N/97ncP6Z79/ve/Z8aMGdx55528/fbbTJ8+naam\nJp599llisRh/+MMfBtTSPv/887nzzjv52c9+xsSJE7nssssoLi6mtbWV1atXc8IJJ/D8888DsGjR\nIl5//XVmzpzJlVdeSWpqKuvWreP999/nX/7lX3juuec+d7x9rr32WiKRCOeff/4+Fzf59NLxhxLH\nBRdcwFNPPcWcOXP40pe+hM1m4+STT+6vob0vv/jFL3j33Xf54x//yIYNGzjvvPPw+Xz89a9/xefz\ncdddd3Haaacd8jULIUap/ZX6uO+++9S0adNUamqqysrKUpdcconatGnToH6VlZUqPz9fORwONWvW\nLLV58+YjUHhECHE09ZW/219pvIceeqi//7Jly/ZZm7dPNBpVl156aX8t6r7yYkPVhz7UeIcSDodV\nQUGBMplMA2pEv/3222ru3LkqIyNDWa1WNWbMGPW9731Ptba2DjrGwoULla7ravny5Line truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmYHFW9+P93VVfv3bP07PskmewLCUkAZUmCguTKJVFE\n0MuTAKI83PsVRfzhCkFELyrXBcRH770iiQKCLEq8RmRNYgiQhezrLJk9s0/39N5ddX5/DBkYZhKG\nZLIMfF7PMzKeOnXqVJ1J+jMnpz5HU0ophBBCCCGEEMdNP90dEEIIIYQQYqyToFoIIYQQQogTJEG1\nEEIIIYQQJ0iCaiGEEEIIIU6QBNVCCCGEEEKcIAmqhRBCCCGEOEESVAshxPu0cOFCdF2noaHhdHdl\niLVr16LrOnfffffp7sox6brOxRdfPKjsrrvuQtd11q1bd5p6NVh9fT26rnPDDTec7q4IIcYACaqF\nEEel6/oxv2w226AA6EhA9+5g6Yh//OMf+P1+XC4Xjz322Iivc//99x9Xf202G9nZ2Zx//vn88pe/\nJJ1On9gDeYumaWiaNiptHc111113RgWYp8KpeK7vdCRoPtrP6+nokxBi7DJOdweEEGc2TdO46667\nONo+UZWVlSNq5w9/+ANf+MIX8Hg8PPvssyxatGjE1znvvPOOq7/pdJr6+nqefvppNm7cyIsvvsgz\nzzwz4rZOpw9jMPflL3+Zz33uc5SXl5/urgBQUlLC3r17yczMPN1dEUKMARJUCyHe0x133HFC5993\n33184xvfoLCwkL/97W+cddZZJ+U6R2vnjjvuYM6cOTz77LOsX7+eCy+8cFSuczJ9GDe7DQQCBAKB\nU3a993rGhmEwadKkU9QbIcRYJ8s/hBAn1de+9jVuv/12Jk2axMaNG48aUJ9MVVVVLFiwAIBNmzYN\nW+fpp59m0aJFZGVl4Xa7mTZtGitWrCASiRy1XcuyuO+++5gyZQput5vy8nK+/vWvEw6Hh62/fft2\nPvvZz1JYWIjT6aS8vJwbb7yRQ4cODao3btw4Vq1aBby9fvvIcpYTUVdXx/XXX09ZWRlOp5PCwkKu\nvvpqdu7cedRznnjiCS655BJyc3NxuVxUVlby2c9+lg0bNgzUCYVC/OQnP+FjH/vYQNv5+flcccUV\nbNy4ccT9G25N9aJFi465NGj8+PHH1Y+VK1cyfvx4NE3jlVdeGdTmkfXox1pT3d7ezi233MKECRNw\nuVzk5ubyr//6r6xfv35I3SPLom644Qbq6+u55ppryMvLw+12M3/+fP7v//5vxM9ICHHmkplqIcRJ\nkU6nWb58OY899hjnnnsuf/3rX8nJyTlt/TkyK2m324ccu/POO7nnnnvIycnhc5/7HFlZWTz//PN8\n//vfZ/Xq1axfvx6v1zvkvK985Sts2LCBz372s2RmZrJmzRp++tOfsmHDBtatWzfoWmvWrOHTn/40\nlmXx6U9/mgkTJrBjxw4eeughnnnmGV5++WVmzZoFwK233srvfvc7duzYwXXXXTewxOZEloNs3bqV\nj33sY/T19fHJT36SmTNnUlNTw9NPP83q1at59tln+fjHPz7onOuuu45Vq1aRm5vL0qVLKSgooLm5\nmXXr1vHUU09x/vnnA7B3716++93vsmDBAi6//HKys7NpaGjg2WefZc2aNaxevZrLLrvsPfs43JKX\n66+/fshSIYAtW7awevXqQePyfvoxZ84cvvrVr/Lzn/+cyspKrrvuuoF2Fi5ceMx+NjQ0cP7559PS\n0sKCBQu45ppraG1t5YknnmDNmjU89NBDLFu2bMh5hw4d4pxzzmHChAksW7aM7u5uHn/8cZYuXcoL\nL7ww8IufEGKMUkIIcRSapild19Vdd9111K93euWVV5SmaWr+/Pnq0ksvVZqmqcsvv1xFo9Hjvs6v\nf/3r993fd9uzZ4/yer1K13W1devWQcdee+01pWmaKi8vV4cPHx50bPny5UrXdfXlL395UPnChQuV\npmkqLy9PNTU1DZRblqWWLl2qdF1X995770B5JBJRubm5yjAMtXbt2kFtPfTQQ0rTNDVr1qxB5ddd\nd53SdX1I/fdyZAy+973vDSqfNm2a0nVd/f73vx9U/uKLLypd11VBQYGKxWID5b/5zW+UpmnqnHPO\nUcFgcMh1WlpaBr4PhUKqq6trSJ3m5mZVXFyspk6dOuSYpmlq0aJFg8ruuuuuEd1zbW2tKigoUF6v\nV23atOm4+3Ho0KFh+/Hu49dff/2g8ssuu0zpuq6+//3vDyrftWuX8ng8yu12q+bm5oHyI2My3DnP\nPfec0jRNffKTnzzmPQshznwSVAshjupIIHC0L5vNNqj+O4MHTdPUpEmTVDqdPqHrzJkz533390hA\n/t3vfldde+21yuPxKF3X1Te+8Y0h59x4441K1/Vhg/e2tjbl8XiU3+8fdB8LFy5Uuq6rH/zgB0PO\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xaa0bfd0>"
|
||||
"<matplotlib.figure.Figure at 0xa6d14e0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1623,7 +1569,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.025 0.041 0.002]\n"
|
||||
"Final P: [ 0.024 0.042 0.002]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1651,16 +1597,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 109,
|
||||
"execution_count": 20,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa5c00b8>"
|
||||
"<matplotlib.figure.Figure at 0xa796780>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1670,7 +1616,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.021 0.02 0.002]\n"
|
||||
"Final P: [ 0.019 0.022 0.002]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1693,7 +1639,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 110,
|
||||
"execution_count": 21,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1701,9 +1647,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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\ntjh+/enF+ejatStms5l9+/ZRUFBQq76u11II8fsnibQQosX4+fmxdu1aBg4cyHfffcfIkSOx2WwX\nPY7HHnuMwMBAPvjgA9LS0gC4//77MRgMvP3229Vrms964YUXyMrKYsSIEXV+lP/RRx+RkpJSo2z2\n7NmUl5dz3333VSfD11xzDV27dmX79u385z//qdF+3bp1LF++nKCgIEaPHl1dfnabwPT09CaPOyIi\ngptvvplTp07VWhKxf/9+3nnnHUwmE/fff391+Z///GcAnnzySTIyMmqdMzMzs/r7mJgYCgoKau2H\n/d5777FmzZomxb5t2zbuvfdegoODWb16NX5+fvW2bUwcAQEB5OXlnfebO51Ox7hx47DZbDz11FM1\n6rKysnjhhRfQaDQ88MAD53U+IcTvgyztEELUS1VV5s6dW+8Ng8OHD+fKK69s8BxeXl58//33jB49\nmh9//JGbbrqJ1atXX9Qn2VksFv7+97/zxBNPMGvWLD799FOio6N58803efjhh+nbty9jxowhJCSE\nzZs3k5ycTFRUFO+8806d5xs2bBgDBgzgD3/4AyEhISQnJ7NlyxY6duzI888/X6PtkiVLuPHGGxk3\nbhzLli2jR48eHD16lC+//BKTycSHH36IyWSqbj9kyBA0Gg1vvPEGBQUF1euu//KXvzTqNfvXv/7F\ngAEDmDVrFuvWrePKK68kOzubZcuWUVVVxbvvvltjr+yhQ4cya9Ys/vGPf9CtWzdGjx5NdHQ0p0+f\nZuvWrXTq1ImvvvoKgGnTpvH9998zcOBAxowZg7e3Nzt37mTTpk3cddddfPHFFxcc71kTJ06ksrKS\noUOH1vngkl8/Dr4xcdx000188sknDBs2jGuvvRaj0UivXr2q98iuy4svvshPP/3EokWL2L17N0OG\nDKG4uJjPP/+c4uJiZs+eTb9+/Ro9ZiFEG9TQlh5JSUnqrbfeqkZERKiKoqgffPBBjfrS0lL10Ucf\nVSMjI1Wz2azGxcWpr7/+egttMCKEuJjObnHX0PZ38+fPr26/YcOGOvfePctut6ujRo2q3mv67BZi\n9e3/3Nh461NRUaFGRESoWq22xh7Q69atU4cPH676+/urBoNB7dChg/rXv/5VPX36dK1zTJgwQdVo\nNGpSUpK6ePFi9YorrlDNZrMaEhKiPvjgg3Ueo6qqeuTIEXXChAlqRESEajAY1JCQELine truncated
|
||||
"image/png": "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\nfy6FEJcGCaqFEK3Kz8+P77//vm7FeNy4cac8+7m1PPHEEwQFBfHRRx+RkpJSl3733XejaRqvvPJK\n3QrzSbNmzaKqqorp06c32LqiaRoLFy7k+PHjdWlut5tZs2bVtXvSxIkTCQwM5LPPPmsQ3H300Ufs\n3LmTXr16cfnll9elnzx+MD09vYVPDldddRXdu3fn559/ZtmyZfXyNm7cyBdffEFwcDATJkyoS585\ncyaapvHggw/WbXn4tZMrsnDiVs3Dhw83WL2Ni4sjMTGxRWP/8ssveeKJJ+jWrRtffvklRqOxybJn\nOg5/f38URak3h6cTERHB9ddfT0ZGRoMV8wMHDvDee+9hNpu54447mt2mEOLiINs/hBCn9cILLzSZ\nN2bMmHrBYGO8vLz47rvvmDBhAuvXr2f06NGsXbu20e0WrcXLy4tnnnmGp59+mjlz5rBixQrgxBXo\nf/rTn3jttdfo1asXU6ZMwdfXl/Xr17Nr1y769u3LK6+80qA9RVG46qqr6NevX71zqvft28fll1/O\nk08+WVfWarXy0UcfcdNNN3HdddcxefJkOnbsyN69e/n3v/9NQEBA3WUvJ40aNYo33niDZ555hn37\n9uHv7w/As88+e1bPv2TJEkaNGsW0adNYuXIlvXv3JiUlhVWrVmEymVi6dClms7mu/L333su2bdtY\nunQpnTp1YuLEiYSEhJCdnc3mzZuZMGECb775JnDiF5YHH3yQfv36MXnyZAwGA9u2bSMxMZHx48ez\nZs2asxozwG233YamaQwePJhFixY1yPfz8+Oxxx47q3HYbDauvPJK4uPjGT9+PAMGDMBgMHDNNdec\n8tbN9957j6FDhzJ37lw2btzIFVdcQVZWFv/617+orq7m73//e7P3owshLiLNOSJky5Yt2vjx47WI\niAhNURRtyZIl9fIrKiq0Rx55RIuMjNQsFovWtWtXbcGCBR47okQIcX6c6ji9k18LFy6sK79p0yZN\nVVVt5MiRjbZXU1OjTZgwQVNVVRs0aFDdmcKKojQ4nu9snK4du92uRUREaHq9XtuzZ0+9vM8++0wb\nPny45uvrq5nNZq179+7a3LlztYqKigbtDB8+XNPpdNqxY8e0+fPna926ddPMZrMWFRWlPf30043W\n0TRN2717tzZlyhQtNDRUMxqNWmRkpHbPPfdox44da7T8W2+9pfXq1UuzWCyNHmHYmLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa8d37b8>"
|
||||
"<matplotlib.figure.Figure at 0xa6d1240>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1713,7 +1659,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.018 0.046 0. ]\n"
|
||||
"Final P: [ 0.02 0.046 0. ]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1733,7 +1679,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 111,
|
||||
"execution_count": 22,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": false
|
||||
@@ -1741,9 +1687,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAADnCAYAAADcgNqjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VNX5+PHPnZnMlplMJvsGSYCwg4BQZRFFBEUQsFqX\nuoELrbV1af3ar7+KqPWrta2ttrbaVq24gCKKK6hF9k0WRdkhQPZ9kplMZp/M/f0RE41JJgublOf9\nes2r7Zlzzn3unWl4cnLucxVVVVWEEEIIIYQQ3aY51QEIIYQQQghxupJkWgghhBBCiB6SZFoIIYQQ\nQogekmRaCCGEEEKIHpJkWgghhBBCiB6SZFoIIYQQQogekmRaCCG6aM6cOWg0GtatW3eqQ2mjoKAA\njUbD3LlzT3UoUeXk5JCbm9uq7aWXXkKj0bBw4cJTFFVbGo2GSZMmneowhBCnAUmmhRDt0mg0nb6+\nnVSuWbMmagLyySefYLVaMRgMLF68uMvHefrpp3sUr1arxW63M378eJ555hnC4fCxXZCT5KGHHjqm\nxFJRlOMc0fH33RgVRWl5nSwajaZNUv9dp8O1FEKcerpTHYAQ4vtLURQWLFjQ4fvZ2dntjvmuV199\nlZtvvhmz2cyKFSu48MILu3ycsWPH9ijecDhMQUEBb7/9Nps3b2blypW88847XZ7rVDuTErnLL7+c\nsWPHkpaWdlKPG+0a79+/H7PZfBKjEUKcriSZFkJE9eCDDx7T+D/+8Y/cd999pKWlsXz5ckaMGHFC\njtPRPPPnz2fUqFG89957rFu3jokTJx6X45xoZ9LDaePi4oiLizvVYbTSv3//Ux2CEOI0Ids8hBAn\nhKqq/PKXv+S+++6jf//+bN68ucNE+kTKy8trSaC3b9/e5v01a9Ywffp0EhMTMRqN9O3bl3vuuYea\nmpoO51RVlX//+9+MGDECs9lMWloat912G1VVVe32P3LkCHPnziUrKwuDwUBaWhpXX301u3btatXv\nggsu4JFHHgFg7ty5rbatFBUV9fQSUFlZyZ133kmfPn0wGo0kJSVx2WWXsX79+g7H/Oc//2HmzJmk\npqZiNBrp1asXM2bM4IMPPmjpEwqFeOaZZ7j00kvJzs7GaDSSkJDARRddxIcfftjl+NrbM928Pz3a\nqydxNG9Hgm/2mTe/vr3fvKMtS263mwceeICBAwdiMpmw2+1MnjyZ9957r03f5vknTZqEw+Fg3rx5\npKenYzQaGTp0KC+99FKXr5EQ4vtLVqaFEMddOBzmpptuYvHixfzgBz/gww8/JDEx8ZTF07zKGxMT\n06r9+eefZ968ecTGxvKjH/2I9PR0Nm7cyNNPP82yZcvYuHEjmZmZbeZ78skn+fTTT7nmmmuYPn06\na9eu5YUXXmD16tVs3bqVhISElr6ff/45kydPpr6+nhkzZjBs2DDy8/N5++23ef/993n33XeZMmUK\n0JRAK4rC2rVrmT17dqtfPmw2W4/OvbCwkAkTJlBaWsoFF1zAtddeS1lZGUuWLGHFihW88MIL3HTT\nTa3GLFiwgN/+9rdYLBZmz55N7969KS8vZ8uWLbz44ovMmDEDAIfDwd1338348eO5+OKLSU5Opqys\njPfff5/LLruM5557jnnz5nU51m9vu7j88svp06dPmz6HDx/mlVdeabUFoztx5ObmsmDBAh5++GFs\nNhv33HNPyzzf/WXvu9tAXC4XEyZMYM+ePYwaNYq7776buro63nzzTWbPns3DDz/M/Pnz28TsdDoZ\nP348BoOBq666ikAgwJIlS7j55pvRaDTceOONXb5GQojvIVUIIdqhKIqqKIr60EMPqQsWLGjzeuih\nh1r1X716taooijp69Gh1ypQpqqIo6vTp01Wv19vj4zz33HPdilej0bRp37t3r2o2m1WNRqN+/vnn\nLe1FRUWqXq9XrVarunfv3lZj5s+fryqKos6YMaNV+0033aQqiqIaDAZ1586drd77xS9+oSqKov7k\nJz9paYtEIurgwYNVRVHUl19+uVX/lStXqhqNRk1JSWl1jRYsWKAqiqIuXLiwy+euqqp69OhRVVEU\nde7cua3aL7nkElVRFPWRRx5p1b5r1y7VbDarRqNRLSkpaWn/+OOPVUVR1Nzc3Fbtzb7dFggE1NLS\n0jZ9XC6XOnToUDUhIUH1+Xyt3svOzlZzc3Nbtf373//u0jnX1NSo/fv3V3U6nfree+8dUxzN59gR\nRVHUSZMmtWr76U9/qiqKot5yyy2t2ktKStT09HRVo9Go27Zta2lv/kwURVFvu+02NRKJtLy3d+9e\nVafTqYMHD456zkKI7z9JpoUQ7WpOAjp6fTdxbU6mm1/9+/dXw+HwMR1n5MiR3Y63OSn/zW9+o153\n3XWqyWRSNRqNet9997Xq/+ijj6qKoqi//vWv28zl9/vVjIwMVVEUtaysrKW9OZm+9dZb24ypra1V\nY2NjVYvF0nLeGzZsUBVFUc8555x2Y77iiitURVHUxYsXt7Qdz2S6pKREVRRF7d27txoKhdqM+dWv\nfqUqiqI+/vjjLW0zZsxQFUVRly5d2q3jf9eTTz6pKoqirlu3rlV7T5Npn8+njh8/XlUURX3mmWeO\nOY7uJtPBYFA1m82qxWJRHQ5Hm/5//etf2/wy1fyZWCwW1e12txkzceJEVaPRqB6Pp8vnI4T4/pE9\n00KIDimKQiQSaffV2NjY7pgBAwaQk5PDoUOHuP3227t0I11Hx/n888+7HfPDDz/MI488wmOPPcai\nRYvw+/08+uijPPHEE636Nc/93coiAAaDgQkTJgDwxRdftHn//PPPb9Nmt9sZNmwYHo+HAwcOdHoM\ngIsuuqjDYxwPzccfP348Ol3bXX3tHX/Lli0oisK0adO6dIw9e/YwZ84c+vTpg9lsbtl/fO+99wJQ\nVlZ2rKeBqqrccMMNbNq0iXvvvZc77rjjpMexf/9+fD4fw4YNa7WNp1m0zzIvLw+LxdKmvVevXqiq\nSl1d3THFJoQ4tWTPtBDiuEpPT+eVV15h8uTJPP/883i9XhYuXIhWqz3hx1YUpSXJ9/v9bN26lZ/8\n5Cc88MAD5Obmcs0117T0dblcAB2WY0tPT2/V79tSU1PbHdPc3jyms2M0tzudzugn1kM9Ob7T6SQu\nLq5LZeG2bNnChRdeSCQSYfLkycyePZu4uDg0Gg1ffPEF7777LoFA4JjP49577+Wtt97iqquu4ve/\n//0pieNYPsv4+Ph2xzT/gtPRL6ZCiNODJNNCiOMuMzOTdevWMWXKFBYtWoTP5+P1119vcwPgiWQ0\nGpk4cSIfffQRQ4YMYd68eVxwwQUtSU/zDX3l5eUMHz68zfjy8vJW/b6tsrKy3WM2tzePaf7PioqK\ndvtHO8bx0JPjx8fHU1tbi8fjITY2Nur8jz76KH6/nzVr1rQpOfj444/z7rvvHkv4APz1r3/lz3/+\nMxMmTODll18+ZXGc6s9SCPH9Jds8hBAnREpKCmvWrGH06NEsW7aMWbNm4ff7T3oc2dnZ/PrXv6ah\noaFVDeqzzz4bgNWrV7cZEwgE2LhxI4qiMGrUqDbvr1mzpk1bXV0du3btIjY2lgEDBrQ6xqpVq9qN\n7dNPP23VD2hZwT8eq5XNsW/cuJFQKNSl448dOxZVVVmxYkWn8+fn55OYmNhu7e61a9f2NOwW77zz\nDnfffTcDBgzg3XffRa/XH7c4vv1XjK4YNGgQJpOJXbt24XA42rzf3rUUQpwZJJkWQpwwdrudTz/9\nlAkTJvDRRx8xffp0PB7PSY/jnnvuISkpiZdeeolDhw4BcP3116PX6/n73//esse52eOPP05ZWRmX\nXnppu3/Wf+WVV9i5c2ertgcffBCv18t1113XkhCPGzeOQYMGsXXrVl577bVW/VetWsXbb79NcnIy\ns2bNamlvLiFYWFh4zOedmZnJxRdfTHFxcZvtEXv27OHZZ5/FaDRy/fXXt7T/4he/AOB//ud/KCkp\naTNnaWlpy3/Pzc3F4XC0qZf9wgsv8MknnxxT7J999hk//vGPSUlJYcWKFdjt9g779iSOxMREqqur\nu/wLnk6n48Ybb8Tj8XD//fe3eq+srIzHH38cjUbDzTff3KX5hBD/PWSbhxCiQ6qq8vDDD3d4E+G0\nadM455xzos5htVr5+OOPmTVrFitXrmTq1KmsWLHipD7xzmKx8L//+7/ce++9zJ8/n9dff53evXvz\nl7/8hdtvv53Ro0dz1VVXkZqayqZNm1i3bh29evXi2WefbXe+Sy65hPHjx3P11VeTmprKunXr2Lx5\nM3379uWxxx5r1XfhwoVcdNFF3HjjjSxZsoShQ4dy+PBh3nrrLYxGIy+//DJGo7Gl/+TJk9FoNDz1\n1FM4HI6Wfdh33nlnj67Zc889x/jx45k/fz6rVq3inHPOoby8nCVLlhAMBvnnP//Zqpb2lClTmD9/\nPr/97W8ZPHgws2bNonfv3lRVVbFlyxb69evHsmXLALj77rv5+OOPmTBhAldddRVxcXFs376djRs3\ncuWVV7J06dJux9ts7ty5+P1+pkyZ0u7DTb796PiexDF16lQWLVrEJZdcwnnnnYfBYGDEiBEtNbTb\n87vf/Y7169fz/PPP88UXXzB58mScTidvvvkmTqeTBx98kDFjxvT4nIUQp6lopT4ee+wxdfTo0Wpc\nXJyanJysXnbZZeru3btb9WkuFfXt19ixY09Q8REhxMnSXP4uWmm8p59+uqX/mjVr2q3N2ywQCKgz\nZ85sqUXdXF6so/rQPY23Iz6fT83MzFS1Wm2rGtGrVq1Sp02bpiYkJKh6vV7t06ePetddd6lVVVVt\n5pgzZ46q0WjUtWvXqi+++KJ61llnqSaTSU1NTVVvvfXWdseoqqrm5+erc+bMUTMzMLine truncated
|
||||
"image/png": "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\nLriAefPmHbd5HMt7PGzYMKA5zaSt9KeVK1cCLT9LIcQPgwTVQogTKi4ujlWrVoVXjKdMmRKx9vOJ\nMnv2bBITE5k7dy45OTnh9lmzZqGqKo8//nh4hfmo++67j/r6embMmNEqdUVVVZ599lkKCwvDbaFQ\niPvuuy887lHTpk0jISGB9957r1VwN3fuXLZu3crgwYM599xzw+1Hyw8WFBR0887hvPPOY8CAAXz5\n5Ze89dZbLY599tlnLF68GLvdztSpU8Ptd955J6qqcvvtt4dTHr7r6IosNO+qeejQoVart4888gj7\n9+/v1tw/+OADZs+eTf/+/fnggw/Q6/XtntvVedhsNhRFafEZdiQtLY0f/ehHFBUVtVox37t3Ly+9\n9BJGo5Ebb7yx02MKIf47SPqHEKJDf/rTn9o9dtlll7UIBtsSHR3NJ598wtSpU1mxYgWXXnopy5cv\nbzPd4kSJjo7m97//Pffeey8PPfQQCxYsAJq3QH/ggQf4y1/+wuDBg7nmmmuIjY1lxYoVbNu2jbPO\nOovHH3+81XiKonDeeedx9tlnt6hTvXv3bs4991zuueee8Llms5m5c+dy9dVXc8kll3DVVVfRs2dP\ndu7cybJly4iPjw9v9nLUxIkT+dvf/sbvf/97du/ejc1mA+DBBx88pvufN28eEydO5Oabb2bhwoUM\nGTKEnJwcFi1ahMFgYP78+RiNxvD5t956Kxs2bGD+/Pn07t2badOm4XA4KC0tZe3atUydOpWnn34a\naP6F5fbbb+fss8/mqquuIioqig0bNrB//36uuOIKli5dekxzBvjpT3+Kqqqcc845PPfcc62Ox8XF\ncddddx3TPCwWC2PGjGHTpk1cccUVDB8+nKioKC688MKIu26+9NJLnH/++Tz88MN89tlnjB49mpKS\nEt599138fj+vvPJKp/PRhRD/RToqD/L444+ro0aNUq1Wq2q329XLL79c3bNnT4tzZsyYoSqK0uI1\nZsyY41qmRAhx8kUqp3f09eyzz4bPX7NmjarRaNSLL764zfECgYA6depUVaPRqCNHjgzXFFYUpVV5\nvmPR0TgNDQ1qWlqaqtPp1B07drQ49t5776njxo1TY2NjVaPRqA4YMEB9+OGHVa/X22qccePGqVqt\nVs3NzVWffPJJtX///qrRaFR79Oih3nvvvW32UVVV3b59u3rNNdeoSUlJql6vV9PT0Line truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa6e9c88>"
|
||||
"<matplotlib.figure.Figure at 0xa7fbf28>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1753,7 +1699,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.276 0.809 0.004]\n"
|
||||
"Final P: [ 0.284 0.74 0.003]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1773,7 +1719,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 115,
|
||||
"execution_count": 23,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1781,9 +1727,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtMAAADnCAYAAADcgNqjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VuWd///XOfe+Zbmz7xuBhH0VEUQQURHXXzu203YU\nndZOH05b7TjOON8qah2dzqPrdH3MdBHtaGtbl1YLOi6AggjIIhACCdn3/c6de1+u3x80qSl7SEgC\nn+fjkUfTc677nM913fHOO4frXEdTSimEEEIIIYQQ50wf7wKEEEIIIYSYrCRMCyGEEEIIMUISpoUQ\nQgghhBghCdNCCCGEEEKMkIRpIYQQQgghRkjCtBBCCCGEECMkYVoIIc7SunXr0HWdrVu3jncpJ6ir\nq0PXde66667xLuW0CgsLKSoqGrbt6aefRtd1NmzYME5VnUjXdVauXDneZQghJgEJ00KIk9J1/Yxf\nHw+VmzdvPm0AeeONN3C5XFgsFp5//vmzPs/3v//9EdVrMBhITk5m6dKl/PCHPyQajZ7fgFwgjz76\n6HkFS03TRrmi0ffXNWqaNvR1oei6fkKo/2uTYSyFEOPPON4FCCEmLk3TWL9+/Sn3FxQUnPQ1f+1X\nv/oVd999N3a7nY0bN3L11Vef9XmWLFkyonqj0Sh1dXW8+OKLvP/++7z55pu8/PLLZ32s8XYpBbnb\nbruNJUuWkJmZeUHPe7oxrqysxG63X8BqhBCTlYRpIcRpPfLII+f1+m9961s8+OCDZGZm8qc//Ym5\nc+eOyXlOdZyHH36Y+fPn84c//IGtW7eyfPnyUTnPWLuUHk6bkJBAQkLCeJcxzNSpU8e7BCHEJCHT\nPIQQY0Ipxde+9jUefPBBpk6dyvvvv3/KID2WSktLhwL07t27T9i/efNm1q5dS0pKClarlZKSEu6/\n/366urpOeUylFL/85S+ZO3cudrudzMxMvvCFL9DR0XHS9jU1Ndx1113k5uZisVjIzMzkU5/6FAcO\nHBjWbsWKFTz++OMA3HXXXcOmrTQ0NIx0CGhvb+crX/kKxcXFWK1WUlNTuemmm3j33XdP+Zr/+7//\n4+abbyYjIwOr1UpeXh433ngjr7766lCbSCTCD3/4Q2644QYKCgqwWq243W6uueYaXnvttbOu72Rz\npgfnp5/uayR1DE5Hgr/MMx/8+vh881NNWfJ6vXz961+nrKwMm81GcnIyq1at4g9/+MMJbQePv3Ll\nSrq7u7nnnnvIysrCarUyc+ZMnn766bMeIyHExCVXpoUQoy4ajXLnnXfy/PPPc9lll/Haa6+RkpIy\nbvUMXuU1mUzDtv/sZz/jnnvuweFw8Dd/8zdkZWWxbds2vv/97/PSSy+xbds2cnJyTjjet7/9bd56\n6y0+/elPs3btWrZs2cLPf/5z3nnnHXbu3Inb7R5qu2fPHlatWkV/fz833ngjs2bNorq6mhdffJE/\n/vGPvPLKK6xevRo4HqA1TWPLli3ceuutw/74SExMHFHf6+vrWbZsGc3NzaxYsYK//du/paWlhRde\neIGNGzfy85//nDvvvHPYa9avX883vvENnE4nt956K/n5+bS2trJjxw5+8YtfcOONNwLQ3d3Nfffd\nx9KlS7nuuutIS0ujpaWFP/7xj9x000389Kc/5Z577jnrWj8+7eK2226juLj4hDbHjh3j2WefHTYF\n41zqKCoqYv369Tz22GMkJiZy//33Dx3nr//Y++tpIB6Ph2XLlnHo0CHmz5/PfffdR29vL7/97W+5\n9dZbeeyxx3j44YdPqLmvr4+lS5disVi4/fbbCYVCvPDCC9x9993ous4dd9xx1mMkhJiAlBBCnISm\naUrTNPXoo4+q9evXn/D16KOPDmv/zjvvKE3T1MKFC9Xq1auVpmlq7dq1yu/3j/g8P/3pT8+pXl3X\nT9heUVGh7Ha70nVd7dmzZ2h7Q0ODMpvNyuVyqYqKimGvefjhh5WmaerGG28ctv3OO+9UmqYpi8Wi\n9u3bN2zfl7/8ZaVpmvriF784tC0ej6vp06crTdPUM888M6z9m2++qXRdV+np6cPGaP369UrTNLVh\nw4az7rtSStXW1ipN09Rdd901bPv111+vNE1Tjz/++LDtBw4cUHa7XVmtVtXU1DS0/fXXX1eapqmi\noqJh2wd9fFsoFFLNzc0ntPF4PGrmzJnK7XarQCAwbF9BQYEqKioatu2Xv/zlWfW5q6tLTZ06VRmN\nRvWHP/zhvOoY7OOpaJqmVq5cOWzbP/zDPyhN09Tf//3fD9ve1NSksrKylK7rateuXUPbB98TTdPU\nF77wBRWPx4f2VVRUKKPRqKZPn37aPgshJj4J00KIkxoMAaf6+uvgOhimB7+mTp2qotHoeZ1n3rx5\n51zvYCj/f//v/6nPfvazymazKV3X1YMPPjis/RNPPKE0TVP/8i//csKxgsGgys7OVpqmqZaWlqHt\n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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0XWW9//H33mc+Jycn89DM89CJTrRQoC1QpIJQQSZ/\nLgqoy8W6iqIslKuU4eL006sXvYN3+CFFFEUZpF4r0DK0lKEjpUPazEMznEwnyZmnvX9/1EZi0jZt\nkqZpv6+1sij72cN3Pycr+XT32c+j6LquI4QQQgghhDhj6nQXIIQQQgghxEwnoVoIIYQQQogJklAt\nhBBCCCHEBEmoFkIIIYQQYoIkVAshhBBCCDFBEqqFEEIIIYSYIAnVQghxmlauXImqqrS2tk53KaO8\n/fbbqKrK448/Pt2lnJSqqlx55ZUjtj366KOoqsrWrVunqaqRWlpaUFWVe+65Z7pLEULMABKqhRAn\npKrqSb8MBsOIAHQ80P19WDrutddew+l0YrVaee6558Z9nZ/97GdnVK/BYCA5OZnly5fzr//6r8Ri\nsYl1yF8pioKiKJNyrhO56667zqmAeTacjX79uOOh+UTfr9NRkxBi5jJOdwFCiHOboig8+uijnGid\nqMLCwnGd59lnn+Xzn/88drudV155hVWrVo37OsuWLTujemOxGC0tLbz44ou89957bNmyhZdeemnc\n55pOF2KY+8pXvsIdd9xBfn7+dJcCQE5ODjU1NbhcrukuRQgxA0ioFkKc0sMPPzyh43/84x/zzW9+\nk6ysLP785z8zf/78KbnOic7z8MMPs2DBAl555RW2bdvG5ZdfPinXmUoX4mK3KSkppKSknLXrnaqP\njUYj5eXlZ6kaIcRMJ8M/hBBT6utf/zoPPvgg5eXlvPfeeycM1FOptLSUFStWALBz584x93nxxRdZ\ntWoVSUlJ2Gw2qqureeSRR/D7/Sc8r6Zp/PjHP6ayshKbzUZ+fj4PPPAAPp9vzP337dvHrbfeSlZW\nFhaLhfz8fL7whS/Q3Nw8Yr+ioiKeeeYZ4G/jt48PZ5mIpqYm7r77bvLy8rBYLGRlZXHbbbexf//+\nEx7z/PPPs3r1atLS0rBarRQWFnLrrbeyffv24X2Ghob40Y9+xFVXXTV87oyMDG644Qbee++9cdc3\n1pjqVatWnXRoUHFx8RnVsWHDBoqLi1EUhbfeemvEOY+PRz/ZmOru7m7uu+8+SkpKsFqtpKWl8alP\nfYpt27aN2vf4sKh77rmHlpYWbr/9dtLT07HZbCxZsoT//d//HXcfCSHOXfKkWggxJWKxGOvWreO5\n555j6dKl/OlPfyI1NXXa6jn+VNJkMo1qW79+PU888QSpqanccccdJCUl8frrr/NP//RPbNy4kW3b\ntuFwOEYd99WvfpXt27dz66234nK52LRpEz/5yU/Yvn07W7duHXGtTZs2cdNNN6FpGjfddBMlJSV8\n9NFHPPXUU7z00ku8+eabzJs3D4D777+fX/7yl3z00Ufcddddw0NsJjIcZM+ePVx11VV4vV6uu+46\n5s6dS0NDAy+++CIbN27klVde4eqrrx5xzF133cUzzzxDWloaa9euJTMzk/b2drZu3coLL7zA8uXL\nAaipqeE73/kOK1as4Prrryc5OZnW1lZeeeUVNm3axMaNG7n22mtPWeNYQ17uvvvuUUOFAHbv3s3G\njRtHfC6nU8eCBQv42te+xr/8y79QWFjIXXfdNXyelStXnrTO1tZWli9fTkdHBytWrOD222+ns7OT\n559/nk2bNvHUU09x5513jjquubmZiy++mJKSEu688076+/v53e9+x9q1a9m8efPwX/yEEDOULoQQ\nJ6Aoiq6qqv7oo4+e8Ovj3nrrLV1RFH3JkiX6NddcoyuKol9//fV6IBA44+v84he/OO16/96hQ4d0\nh8Ohq6qq79mzZ0Tb+++/ryuKoufn5+tdXV0j2tatW6erqqp/5StfGbF95cqVuqIoenp6un706NHh\n7Zqm6WvXrtVVVdV/8IMfDG/3+/16WlqabjQa9bfffnvEuZ566ildURR93rx5I7bfdddduqqqo/Y/\nleOfwWOPPTZie3V1ta6qqv6rX/1qxPYtW7boqqrqmZmZejAYHN7+n//5n7qiKPrFF1+sDw4OjrpO\nR0fH8J+Hhob0vr6+Ufu0t7frs2bN0quqqka1KYqir1q1asS2Rx99dFz33NjYqGdmZuoOh0PfuXPn\nGdfR3Nw8Zh1/33733XeP2H7ttdfqqqrq//RP/zRi+4EDB3S73a7bbDa9vb19ePvxz2SsY1599VVd\nURT9uuuuO+k9CyHOfRKqhRAndDwInOjLYDCM2P/j4UFRFL28vFyPxWITus6CBQtOu97jgfw73/mO\n/rnPfU632+26qqr6N7/5zVHHfOELX9BVVR0zvLvdbt1ut+tOp3PEfaxcuVJXVVX/7ne/O+qYI0eO\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa5425c0>"
|
||||
"<matplotlib.figure.Figure at 0xa860ac8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1793,7 +1739,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.008 0.009 0.001]\n"
|
||||
"Final P: [ 0.009 0.008 0.001]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1837,16 +1783,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 117,
|
||||
"execution_count": 24,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuIAAADaCAYAAADjVSfWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlc1NX+x/HXzLCDuICiiJqau2YlaImZmVKY6W3R1H5u\nVEaWZpaWlaWWW9elNMEWr2ll6s2bbWqiWYroDS33rdxNQHFBVJQR5vfHXEdHtkGWYXk/H495MHO+\n53y/nzkCfuZwvucYLBaLBRERERERKVZGZwcgIiIiIlIeKREXEREREXECJeIiIiIiIk6gRFxERERE\nxAmUiIuIiIiIOIEScRERERERJ1AiLiIiIiLiBA4n4lFRUdSrVw9PT0+Cg4OJjY3Ns837779PkyZN\n8PDwoGbNmrz++usFClZEREREpKxwcaTSokWLGDZsGLNnzyY0NJRZs2YRHh7O7t27CQoKyrbN8OHD\nWbZsGVOmTKF58+akpKSQkJBQqMGLiIiIiJRWBkd21rzrrru4/fbbmT17tq2sYcOG9OjRg/Hjx2ep\nv3fvXlq0aMGOHTto2LBh4UYsIiIiIlIG5Dk1xWw2s3nzZjp37mxXHhYWRlxcXLZtvvvuO+rXr8+y\nZcuoX78+devWZcCAAZw8ebJwohYRERERKeXyTMSTk5PJyMggICDArjwgIIDExMRs2xw4cIBDhw6x\naNEi5s+fzxdffMGePXvo1q1b4UQtIiIiIlLKOTRHPL8yMzNJT0/niy++oH79+gB8/vnnNGrUiPj4\neEJCQmx1U1JSiiIEEREREZFiUbFixZtql+eIuL+/PyaTiaSkJLvypKQkqlevnm2bGjVq4OLiYkvC\nARo0aIDJZOLIkSM3FaiIiIiISFmSZyLu6upKq1atiImJsSuPiYkhNDQ02zahoaFcuXKFgwcP2sr2\n799PRkYGderUKWDIIiIiIiKln0OrpixevJh+/foxa9YsQkNDiY6OZu7cuezatYugoCBGjRpFfHw8\nq1atAsBisdC6dWt8fHyYPn06FouFl156CbPZzPr16+3Off3UlJsd1i9vNm3aBEBwcLCTIyk9ykKf\nGcYaALC8neePbIGVhf4qbuqz/FF/5Z/6LH/UX/mnPsufwshhHZoj3rNnT06fPs348eNJSEigefPm\nLF++3LaGeGJiot3ot8Fg4IcffmDo0KHce++9eHp6EhYWxtSpU28qSBERERGRssbhmzUjIyOJjIzM\n9tjcuXOzlAUEBLBo0aKbj0xEREREpAxzeIt7ESl8BoP1ISIiIuWPEnERERERESdQIi4iIiIi4gRF\nsqGPiIiISEFZLBbS09NxYIG3LK4ul3zp0qXCDqvMUp/Zc3Nzw2gs2jFrJeIi1zl89jDHU4/bXruZ\n3GgV2MqJEYmIlE+ZmZlcvnwZNzc3TCZTvtt7eHgUQVRlm/rsGovFwqVLl3B3dy/SZFyJuMh1Zm+a\nzaT1k2yvAysEEjswlnOXz9nKfNx8qF+lfnbNRUSkkKSnp+Ph4YFBd7SLExgMBjw8PLh8+XKRfkBR\nIi6SjQDvAJIuJAEwfOVwlu5ZajvWsW5HVvdbXSjXuYm/toqIlBtKwsWZiuP7TzdrimTj8aaPZymr\n4lnFCZGIiIhIWaVEXMRBvZv3dnYIIiIiUoZoaooIMOf3OZgzzfye+Ltd+YkLJ/jl0C/OCUpERETK\nNCXiIsCwn4ZxPv18lvIrmVc4e+msEyISERGR/Dh8+DB169bls88+o1+/fs4OxyGamiJynYG3D+TZ\nVs8SVj+MjU9ttHvcW+deZ4cnIiJlwLx58zAajRiNRtavX59tnVtvvRWj0UjHjh2LNJYNGzYwduxY\nzp07l3flm2A2m/nwww9p164dlStXxt3dnXr16vHUU0/x+++/532CMk4j4iLX+eDBD6jgXiHbY9eP\nmO86uYtLV65teODv5U/tirXzfb2rN2Rr9RQRkfLH09OTBQsWEBoaalf+3//+lwMHDuDp6VnkMcTF\nxTFu3DgGDhyIr69voZ77zJkzPPjgg2zatIkHH3yQMWPG4Ovry8GDB/n3v//NvHnzOHLkCIGBgYV6\n3dJEibjITXh88ePsTt5te/1c8HNEPRTlxIhERKS06dKlC//+97+ZMWOG3aZFCxYsoEmTJje1kVF+\n3cyupY7q378/mzdvZtGiRTz+uP1qZGPHjmXatGmFch2z2VwsfVUUNDVFJJ/2JO8h4XwCYB0JFxER\nyS+DwUDv3r05ffo0P/30k608MzOTRYsW0adPn2yT5LS0NEaMGEGdOnXw8PCgYcOGTJ48OUtdo9HI\n4MGD+fbbb2nRogUeHh40b97c7lpjx45l5MiRANxyyy0YjUZMJhNr16611Vm5ciUdOnSgQoUKVKhQ\ngfDwcLZu3Zrn+4uPj+eHH37gqaeeypKEX33/L7/8sm00/MiRIzz//PM0bdoUb29vKleuzMMPP8yO\nHTvs2v36668YjUYWLFjAmDFjqFOnDl5eXhw7dizHWLZt20aXLl2oWLEiPj4+3HfffcTGxub5HoqD\nRsRF8ul46nHb8yeaPcGs+FlOjEZEREqroKAg2rVrx4IFC+jSpQsAMTExnDx5kj59+rBw4cIsbbp3\n787q1at56qmnuPPOO1m9ejWjRo3i8OHDREXZ/2U2Li6O77//nueee44KFSowY8YMHn/8cY4cOULl\nypV57LHH2LdvHwsXLuSDDz7Az88PgCZNmgDWkfm+ffsSFhbGpEmTuHz5Mh9//DHt27cnPj6ehg0b\n5vjevvvuOwwGA3379nWoL+Lj44mNjaVHjx7Url2b48eP89FHH9GhQwd27txJQECAXf0JEyZgMpkY\nNmwYFosFHx8fUlNTs5x3z549tGvXjgoVKvDqq6/i7u7OJ598QqdOnVi1ahXt2rVzKL6iokRcxEGN\n/BsR1cX+l9yptFNOikZERMqCPn368PLLL5OWloanpydffvklbdq0oW7dulnqfvfdd6xatYpx48bx\n5ptvAhAZGUlERAQfffQRL7zwAk2bNrXV37NnD7t377adq0OHDrRs2ZKvvvqKwYMH07x5c+68804W\nLlxI9+7dqV372r1OFy9eZMiQIURERPDJJ5/Yyp966ikaNmzIuHHj+OKLL3J8X7t27QLgtttuc6gf\nunbtymOPPWZX1rdvX5o0acKcOXN4/fXX7Y6dP3+ePXv22G0/n10i/vrrr5Oens66deuoV68eAAMG\nDKBx48YMHz6c3377zaH4iooScSm3FmxfQOQPkQDZLl14oyDfIJ4Lec6uLCpe88JFREoCw9ii3Y7c\n8nbRzKXu0aMHQ4YMYenSpTzyyCN8++23TJw4Mdu6y5Ytw2QyMXToULvyl19+mc8++4wff/zRLhHv\n2LGjXULfokULfH19OXDgQJ5xxcTEcPbsWXr37s2pU9cGnSwWC/fccw9r1qzJtf3VVVgqVMh+AYQb\nubu7256npaWRlpaGj48PjRo1YvPmzVnq9+/f3y4Jz05mZiYrV66kW7dutiQcwM/PjwEDBjBt2jRO\nnjxJ1apVHYqxKCgRl3LLnGEmNT3rp+eb8Xfq3xjGGqjmXQ0D1v8M3u34Lk/f+XSu7bRaiohI+Va5\ncmUeeOABvvzyS0wmE2lpaTzxxBPZ1j18+DABAQFZVjdp1KgRRqORQ4cO2ZXXqlUr2+udOXMmz7j2\n7duHxWKhU6dOWY4ZDIY8b468GmNqaqpDq7FcvnyZ0aNH8+WXX5KQkGB3LX//rPdjXZ9Y5+TkyZNc\nvHgx2yk0V6ffHDp0qHQk4lFRUUyZMoWEhASaNWvG+++/n+O8mqsLql/PYDCwfPlywsLCChaxSCHr\n1bwXH3X9CAAfN5+bOsd3e78DrDtxXnXRfLHgwYmIiEOKasS6OPTp04d+/fqRkpJCp06dbHO1Cyqn\nZNmRlVIyMzMxGAzMmzfvppYXbNKkCUuXLmX79u1ZlmfMzgsvvMBnn33G0KFDufvuu6lUqRJGo5EX\nX3yRzMzMLPWLY2nH4uBQIr5o0SKGDRvG7NmzCQ0NZdasWYSHh7N7926CgoKybWMwGPjpp5/s5gZV\nqVKlcKIWKURuJjd83W9u7dTACoG0r9Pe9jrpfBJta7Vl7pa5hRWeiIiUcd27d8fd3Z24uDjmzZuX\nY706deqwatUqUlNT7aZ87N27l8zMTG655ZZ8X9tgyH5KT/369bFYLPj7+9/UpkLdunVjwoQJzJ8/\n36FE/Ouvv6Z///5MnTrVrvzMmTM3PWJdtWpVvLy82Lt3b5Zju3dblyC+mT4rTA4tXzh9+nQiIiKI\niIigUaNGzJgxgxo1ahAdHZ1jG4vFQpUqVahWrZrt4eKimTBStvyj8T/4dcCvtseeF/bc9Ki6iIiU\nT56ensyePZu3336bRx55JMd6Xbt2JSMjgxkzZtiVT5s2DYPBwEMPPZTva3t7ewNkma7ywAMPUKlS\nJSZMmIDZbM7SLjk5Odfztm7dmi5duvCvf/2LJUuWZDlusViYNm0ax49bVyIzmUxZRr6/+uor2/Gb\nYTQaefDBB/n+++85ePCgrfz06dPMnz+fkJAQp05LAQdGxM1mM5s3b2bEiBF25WFhYcTFxeXa9tFH\nHyUtLY0GDRrw0ksvZbkbVkRERKQ8unF6yJNPPplnm65du9K5c2fefvttDh06ZFu+8JtvviEyMtLu\nRk1HBQcHY7FYeO211+jTpw9ubm7cf//9+Pv7M3v2bP7v//6PO+64g969exMQEMCRI0dYsWIFzZs3\n51//+leu5543bx5dunShZ8+ehIeH07lzZ3x9fTl06BBff/01+/bto3fv3oB1BP3zzz+nQoUKNG/e\nnC1btrBo0SLq16+f7/d0vXfffZeYmBhCQ0N5/vnncXd359NPPyUlJSXL6Lsz5JmIJLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa91aa58>"
|
||||
"<matplotlib.figure.Figure at 0xa901cf8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1856,7 +1802,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"actual mean=1.30, std=1.14\n",
|
||||
"actual mean=1.29, std=1.13\n",
|
||||
"EKF mean=1.00, std=0.95\n"
|
||||
]
|
||||
}
|
||||
@@ -1877,16 +1823,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 119,
|
||||
"execution_count": 25,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa919e10>"
|
||||
"<matplotlib.figure.Figure at 0xa883828>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
|
||||
+19
-3
@@ -75,7 +75,7 @@ def plot_radar(xs, track, time):
|
||||
plt.ylim((900, 1600))
|
||||
plt.show()
|
||||
|
||||
|
||||
|
||||
def plot_bicycle():
|
||||
plt.clf()
|
||||
plt.axes()
|
||||
@@ -227,6 +227,22 @@ def show_radar_chart():
|
||||
ax.yaxis.set_ticklabels([])
|
||||
ax.xaxis.set_ticks([])
|
||||
ax.yaxis.set_ticks([])
|
||||
|
||||
|
||||
plt.show()
|
||||
|
||||
|
||||
def show_linearization():
|
||||
xs = np.arange(0, 2, 0.01)
|
||||
ys = [x**2 - 2*x for x in xs]
|
||||
|
||||
def y(x):
|
||||
return x - 2.25
|
||||
|
||||
plt.plot(xs, ys, label='$f(x)=x^2−2x$')
|
||||
plt.plot([1, 2], [y(1), y(2)], color='k', ls='--', label='linearization')
|
||||
plt.axes().axvline(1.5, lw=1, c='k')
|
||||
plt.xlim(0, 2)
|
||||
plt.ylim([-1.5, 0.0])
|
||||
plt.title('Linearization of $f(x)$ at $x=1.5$')
|
||||
plt.xlabel('$x=1.5$')
|
||||
plt.legend(loc=4)
|
||||
plt.show()
|
||||
Reference in new issue
Block a user