Removed redundant material.
there was a long explanation of nonlinear filtering which was moved to the nonlinear filtering chapter, but not removed from here.
This commit is contained in:
1 parent
95cbe78f46
commit
cd8c170b7c
1 file changed
+104
-353
+104
-353
@@ -109,7 +109,7 @@
|
||||
" color: #1d3b84;\n",
|
||||
" font-size: 16pt;\n",
|
||||
" margin-bottom: 0em;\n",
|
||||
" margin-top: 1.5em;\n",
|
||||
" margin-top: 0.5em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" }\n",
|
||||
@@ -133,6 +133,11 @@
|
||||
" overflow-y: scroll;\n",
|
||||
" max-height: 50000px;\n",
|
||||
" }\n",
|
||||
" div.output_wrapper{\n",
|
||||
" margin-top:0.2em;\n",
|
||||
" margin-bottom:0.2em;\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
" code{\n",
|
||||
" font-size: 70%;\n",
|
||||
" }\n",
|
||||
@@ -266,182 +271,30 @@
|
||||
"\n",
|
||||
"**The Unscented Kalman filter (UKF) chapter is much further along. The UKF is almost always better performing than the Extended Kalman filter, and is much easier to implement, so if you have an urgent need for nonlinear Kalman filter I'll point you towards that chapter for now.**\n",
|
||||
"\n",
|
||||
"The Kalman filter that we have developed to this point is extremely good, but it is also limited. Its derivation is in the linear space, and hence it only works for linear problems. Let's be a bit more rigorous here. You can, and we have in this book, apply the Kalman filter to nonlinear problems. For example, in the g-h filter chapter we explored using a g-h filter in a problem with constant acceleration. It 'worked', in that it remained numerically stable and the filtered output did track the input, but there was always a lag. It is easy to prove that there will always be a lag when $\\mathbf{\\ddot{x}}>0$. The filter no longer produces an optimal result. If we make our time step arbitrarily small we can still handle many problems, but typically we are using Kalman filters with physical sensors and solving real-time problems. Either fast enough sensors do not exist, are prohibitively expensive, or the computation time required is excessive. It is not a workable solution.\n",
|
||||
"At this point in the book we have developed the theory for the linear Kalman filter. Then, in the last two chapters we broached the topic of using Kalman filters for nonlinear problems. I chose to start off with the Unscented Kalman filter, which probably felt like quite a departure from the linear Kalman filter math. It was also a departure from the historical development of the Kalman filter.\n",
|
||||
"\n",
|
||||
"The early adopters of Kalman filters were the radar people, and this fact was not lost on them. Radar is inherently nonlinear. Radars measure the slant range to an object, and we are typically interested in the aircraft's position over the ground. We invoke Pythagoras and get the nonlinear equation:\n",
|
||||
"$$x=\\sqrt{slant^2 - altitude^2}$$\n",
|
||||
"Shortly after Dr. Kálmán published his paper on the Kalman filter people recognized that his theory was limited to linear problems and immediately began work on extending the theory to work with nonlinear problems. As I have said elsewhere the only equation we really know how to solve is $\\mathbf{Ax} = \\mathbf{b}$. That is a slight exaggeration. Many of us have spent years at school learning sophisticated tricks and techniques to handle equations that are not linear. Yet after all that work the vast majority of equations that arise from simple physical systems remain intractable. Certainly there is no way to find general analytic solutions to the Kalman filter equations for nonlinear systems. \n",
|
||||
"\n",
|
||||
"So shortly after the Kalman filter was enthusiastically taken up by the radar industry people began working on how to extend the Kalman filter into nonlinear problems. It is still an area of ongoing research, and in the Unscented Kalman filter chapter we will implement a powerful, recent result of that research. But in this chapter we will cover the most common form, the Extended Kalman filter, or EKF. Today, most real world \"Kalman filters\" are actually EKFs. The Kalman filter in your car's and phone's GPS is almost certainly an EKF, for example. \n",
|
||||
"In this chapter we will learn the Extended Kalman filter (EKF). The EKF handles nonlinearity by linearizing the system at the point of the current estimate, and then the usual Kalman filter is used to filter this linearized system. It was one of the very first techniques used for nonlinear problems, and it remains the most common technique. Most filters in real world use are EKFs. \n",
|
||||
"\n",
|
||||
"With that said, there are new techniques that have been developed that both perform equal to or better than the EKF, and require much less math. The next chapter "
|
||||
"The EKF provides significant mathematical challenges to the designer of the filter; this is the most challenging chapter of the book. To be honest, I do everything I can to avoid the EKF in favor of other techniques that have been developed to filter nonlinear problems. However, the topic is unavoidable; all classic papers and a majority of current papers in the field use the EKF. Even if you do not use the EKF in your own work you will need to be familiar with the topic to be able to read the literature. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Problem with Nonlinearity"
|
||||
"## Linearizing the System Model"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"You may not realize it, but the only math you really know how to do is linear math. Equations of the form \n",
|
||||
"$$ A\\mathbf{x}=\\mathbf{b}$$.\n",
|
||||
"The extended Kalman filter (EKF) works by linearizing the system model for each update. For example, consider the problem of tracking a cannonball in flight. Obviously it follows a curved flight path. However, if our update rate is small enough, say 1/10 second, then the trajectory over that time is nearly linear. If we linearize that short segment we will get an answer very close to the actual value, and we can use that value to perform the prediction step of the filter. There are many ways to linearize a set of nonlinear differential equations, and the topic is somewhat beyond the scope of this book. In practice, a Taylor series approximation is frequently used with EKFs, and that is what we will use. \n",
|
||||
"\n",
|
||||
"That may strike you as hyperbole. After all, in this book we have integrated a polynomial to get distance from velocity and time:\n",
|
||||
" We know how to integrate a polynomial, for example, and so we are able to find the closed form equation for distance given velocity and time:\n",
|
||||
"$$\\int{(vt+v_0)}\\,dt = \\frac{a}{2}t^2+v_0t+d_0$$\n",
|
||||
"\n",
|
||||
"That's nonlinear. But it is also a very special form. You spent a lot of time, probably at least a year, learning how to integrate various terms, and you still can not integrate some arbitrary equation - no one can. We don't know how. If you took freshman Physics you perhaps remember homework involving sliding frictionless blocks on a plane and other toy problems. At the end of the course you were almost entirely unequipped to solve real world problems because the real world is nonlinear, and you were taught linear, closed forms of equations. It made the math tractable, but mostly useless. \n",
|
||||
"\n",
|
||||
"The mathematics of the Kalman filter is beautiful in part due to the Gaussian equation being so special. It is nonlinear, but when we add and multiply it using linear algebra we get another Gaussian equation as a result. That is very rare. $\\sin{x}*\\sin{y}$ does not yield a $\\sin(\\cdot)$ as an output.\n",
|
||||
"\n",
|
||||
"> If you are not well versed in signals and systems there is a perhaps startling fact that you should be aware of. A linear system is defined as a system whose output is linearly proportional to the sum of all its inputs. A consequence of this is that to be linear if the input is zero than the output must also be zero. Consider an audio amp - if a sing into a microphone, and you start talking, the output should be the sum of our voices (input) scaled by the amplifier gain. But if amplifier outputs a nonzero signal for a zero input the additive relationship no longer holds. This is because you can say $amp(roger) = amp(roger + 0)$ This clearly should give the same output, but if amp(0) is nonzero, then\n",
|
||||
"\n",
|
||||
"> $$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"amp(roger) &= amp(roger + 0) \\\\\n",
|
||||
"&= amp(roger) + amp(0) \\\\\n",
|
||||
"&= amp(roger) + non\\_zero\\_value\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
">which is clearly nonsense. Hence, an apparently linear equation such as\n",
|
||||
"$$L(f(t)) = f(t) + 1$$\n",
|
||||
"\n",
|
||||
">is not linear because $L(0) = 1$! Be careful!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Effect of Nonlinear Transfer Functions on Gaussians"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Unfortunately Gaussians are not closed under an arbitrary nonlinear function. Recall the equations of the Kalman filter - at each step of its evolution we do things like pass the covariances through our process function to get the new covariance at time $k$. Our process function was always linear, so the output was always another Gaussian. Let's look at that on a graph. I will take an arbitrary Gaussian and pass it through the function $f(x) = 2x + 1$ and plot the result. We know how to do this analytically, but lets do this with sampling. I will generate 500,000 points on the Gaussian curve, pass it through the function, and then plot the results. I will do it this way because the next example will be nonlinear, and we will have no way to compute this analytically."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x6a01898>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"from numpy.random import normal\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"\n",
|
||||
"data = normal(loc=0.0, scale=1, size=500000)\n",
|
||||
"ys = 2*data + 1\n",
|
||||
"\n",
|
||||
"plt.hist(ys, 1000)\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is an unsurprising result. The result of passing the Gaussian through $f(x)=2x+1$ is another Gaussian centered around 1. Let's look at the input, transfer function, and output at once."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x6e85208>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from nonlinear_plots import plot_transfer_func\n",
|
||||
"\n",
|
||||
"def g(x):\n",
|
||||
" return 2*x + 1\n",
|
||||
"\n",
|
||||
"with book_format.figsize(y=5):\n",
|
||||
" plot_transfer_func(data, g, lims=(-10, 10), num_bins=300)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The plot labeled 'input' is the histogram of the original data. This is passed through the transfer function $f(x)=2x+1$ which is displayed in the chart to the upper right. The red lines shows how one value, $x=0$ is passed through the function. Each value from input is passed through in the same way to the output function on the left. The output looks like a Gaussian, and is in fact a Gaussian. We can see that it is altered -the variance in the output is larger than the variance in the input, and the mean has been shifted from 0 to 1, which is what we would expect given the transfer function $f(x)=2x+1$ The $2x$ affects the variance, and the $+1$ shifts the mean.\n",
|
||||
"\n",
|
||||
"Now let's look at a nonlinear function and see how it affects the probability distribution."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8642668>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from nonlinear_plots import plot_transfer_func\n",
|
||||
"\n",
|
||||
"def g(x):\n",
|
||||
" return (np.cos(4*(x/2 + 0.7)))*np.sin(0.3*x) - 1.6*x\n",
|
||||
"\n",
|
||||
"plot_transfer_func(data, g, lims=(-4, 4), num_bins=300)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This result may be somewhat surprising to you. The transfer function looks \"fairly\" linear - it is pretty close to a straight line, but the probability distribution of the output is completely different from a Gaussian. Recall the equations for multiplying two univariate Gaussians:\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mu =\\frac{\\sigma_1^2 \\mu_2 + \\sigma_2^2 \\mu_1} {\\sigma_1^2 + \\sigma_2^2}\\mbox{, } \n",
|
||||
"\\sigma = \\frac{1}{\\frac{1}{\\sigma_1^2} + \\frac{1}{\\sigma_2^2}}\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"These equations do not hold for non-Gaussians, and certainly do not hold for the probability distribution shown in the 'output' chart above. \n",
|
||||
"\n",
|
||||
"Think of what this implies for the Kalman filter algorithm of the previous chapter. All of the equations assume that a Gaussian passed through the process function results in another Gaussian. If this is not true then all of the assumptions and guarantees of the Kalman filter do not hold. Let's look at what happens when we pass the output back through the function again, simulating the next step time step of the Kalman filter."
|
||||
"Consider the function $f(x)=x^2−2x$, which we have plotted below."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -450,164 +303,12 @@
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x4d342b0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"y = g(data)\n",
|
||||
"plot_transfer_func(y, g, lims=(-4, 4), num_bins=300)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"As you can see the probability function is further distorted from the original Gaussian. However, the graph is still somewhat symmetric around $0$, let's see what the mean is."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"input mean, variance: 0.0006, 0.9957\n",
|
||||
"output mean, variance: -0.0284, 2.2332\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('input mean, variance: %.4f, %.4f'% (np.average(data), np.std(data)**2))\n",
|
||||
"print('output mean, variance: %.4f, %.4f'% (np.average(y), np.std(y)**2))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's compare that to the linear function that passes through (-2,3) and (2,-3), which is very close to the nonlinear function we have plotted. Using the equation of a line we have\n",
|
||||
"$$m=\\frac{-3-3}{2-(-2)}=-1.5$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAEjCAYAAADnrB18AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcU3e+P/7XSchOEkLYF0EUEVBRFou4ImrrUsV2Onds\nO1rbaW/baa927p3vTDsdl2lv7diZ3nbm171ztcttbW2rtlWrVVCxbgiKCygqiuw7IXtC8vn9gaRi\nQBYDCfB+Ph55kJzzOee8E/F9PnzyWTjGGAMhhBBCCCHEZXjuDoAQQgghhJChhirZhBBCCCGEuBhV\nsgkhhBBCCHExqmQTQgghhBDiYlTJJoQQQgghxMWokk0IIYQQQoiLUSWbEEIIIS7xz3/+E/Hx8ZBK\npeDxeFi/fr1b4jh58iTmzZuHgIAA8Hg8jBw50i1xuAKPx0N6erq7wyB9QJVsMmR4QiLdvHmzW28s\nhJDB4cCBA+DxeFi5cqW7Q3GZLVu2YNWqVbDZbFi1ahXWrVvnlsphS0sLFi5ciJycHCxduhTr1q3D\nc889N+Bx9FRP7l0cxw1QNMSVvNwdACGu5CmJyFPiIIR4tqGUK77//nsAwMcff4zJkye7LY4TJ06g\nrq4OTz75JN5++223xdEbt/s9uHDhAqRS6QBGQ1yFKtmE9ANaSJUQ0hNDKVdUVlYCAAIDAykOFxoz\nZoy7QyB9xQgZQF9//TWbNWsWUygUTCwWs9jYWLZmzRqm0+k6lIuIiGCRkZGdnmPTpk2M4zi2efNm\nxhhj2dnZjOO4Th+PPPKI4ziO41hkZCRrbm5mTz31FAsODmZisZjFx8ezt956y+k67eddt25dp3HM\nnDmTcRzneL1ixYou4zh48GCvPytCyNC0du3aLnPFrXntkUceYRcuXGC/+MUvmJ+fH+PxeKygoIAx\nxlhWVhZ7/PHHWWxsLFMoFEwikbD4+Hi2du1aZjQau7zu5s2bWVZWFps5cyaTy+VMoVCwhQsXsqKi\nIqdjampq2O9//3sWExPDZDIZUygULDo6mj344IOOOG73fm526dIl9thjj7ERI0YwkUjE/P392dKl\nS1l+fv5tY925cyebPn06k8vlTKVSdfm5Xr16tcs4PvroI8aYc96+WVc5v/2Ya9eusXfffZeNGzeO\nicViFhgYyJ544gmm0Wg6PV95eTlbtWoVi46OZhKJhKlUKpaUlMTWrFnDrFZrr+5ds2bNcjp/S0sL\n+9Of/sRiYmKYWCxmPj4+bPbs2WzHjh1dfjazZs1i9fX17PHHH2dBQUFMJBKx+Ph4tmnTpi4/V9J3\n1JJNBsyaNWvw8ssvQ61W48EHH4SPjw/27t2Ll156Cd9++y1ycnLg7e3tKN/d16jt+0eOHIm1a9di\n/fr1UCqVHfreTZw4scMxFosFc+bMgVarxcMPPwyTyYStW7fimWeeQXFxMd54440ur3O7GABg6dKl\n0Gg02LFjB2bNmoVZs2Y59kVERNz2vRBCho/09HSUlpbio48+wsSJE5GZmenYN2nSpA5lL1++jNTU\nVMTFxWHFihVoaWlxdB3YuHEjLl68iLS0NNx7770wmUw4fPgw/vKXvyA7OxtZWVng8/lO1//++++x\nY8cOLFiwAE899RTOnz+PXbt2ITc3F4WFhVCr1QAAg8GAtLQ0lJSUYM6cOVi8eDEA4Pr169i/fz8y\nMjIwYcIEpKeng+M4bN68GaWlpVi9ejV8fHw6XDMrKwtLliyBxWLBokWLEB0djfLycnzzzTfYvXs3\nduzYgXnz5jnFunXrVuzZsweLFi3Cb3/7W9TU1HT5uapUKqxduxanT592ysM33wt6em+51e9//3vs\n3bsXixcvxj333IOsrCx88MEHuHz5Mvbv39+h7MmTJ3HPPfegsbERM2bMwH333QeTyYSioiK8+uqr\n+M///M9e3btujUmj0WDatGk4f/48EhMTsXr1ajQ1NWHr1q3IzMzE+vXr8ec//9npPTQ3N2Pq1KkQ\niUT45S9/CbPZjC+//BKPPvooeDweli9fftvPhvSSu2v5ZHg4evQo4ziOhYeHs6qqqg772luAn3nm\nGce2iIgINnLkyE7P1d6S3d4y0Y7juC6Pad/PcRybPn06s1gsju319fVs5MiRjOM4duTIEcf29laG\n9evXd3q+mTNnMh6P12lsXR1DCCGMMXbgwAHGcRxbuXJlp/tvbuV88cUXOy1TUlLS6fY///nPjOM4\ntmXLlg7b21uHBQIBy8rK6rDv+eefZxzHsY0bNzq2ffvtt4zjOPbcc885XcNut7Pm5uYO29pbfEtL\nSztsb25uZmq1mvn5+Tm1lhcVFTG5XM5CQkKY2Wx2ipXP57M9e/Z0+j67crs83FnebtdVzm9/XxER\nEaysrMyxvbW1lc2YMYNxHMdOnDjh2G42m1lkZCTj8Xjsk08+cbpOTU0Na21tdbzuyb0rPT29w7Yn\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7071e48>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"output mean, variance: -0.0009, 2.2404\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def h(x):\n",
|
||||
" return -1.5 * x\n",
|
||||
"plot_transfer_func(data, h, lims=(-4, 4), num_bins=300)\n",
|
||||
"out = h(data)\n",
|
||||
"print ('output mean, variance: %.4f, %.4f' % (np.average(out), np.std(out)**2))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Although the shapes of the output are very different, the mean and variance of each are almost the same. This may lead us to reasoning that perhaps we can ignore this problem if the nonlinear equation is 'close to' linear. To test that, we can iterate several times and then compare the results."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"linear output mean, variance: -0.0533, 7449.9848\n",
|
||||
"nonlinear output mean, variance: -1.9719, 26065.4836\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"out = h(data)\n",
|
||||
"out2 = g(data)\n",
|
||||
"\n",
|
||||
"for i in range(10):\n",
|
||||
" out = h(out)\n",
|
||||
" out2 = g(out2)\n",
|
||||
"print('linear output mean, variance: %.4f, %.4f' % \n",
|
||||
" (np.average(out), np.std(out)**2))\n",
|
||||
"print('nonlinear output mean, variance: %.4f, %.4f' % \n",
|
||||
" (np.average(out2), np.std(out2)**2))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Unfortunately we can see that the nonlinear version is not stable. We have drifted significantly from the mean of 0, and the variance is half an order of magnitude larger. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Extended Kalman Filter"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The extended Kalman filter (EKF) works by linearizing the system model at each update. For example, consider the problem of tracking a cannonball in flight. Obviously it follows a curved flight path. However, if our update rate is small enough, say 1/10 second, then the trajectory over that time is nearly linear. If we linearize that short segment we will get an answer very close to the actual value, and we can use that value to perform the prediction step of the filter. There are many ways to linearize a set of nonlinear differential equations, and the topic is somewhat beyond the scope of this book. In practice, a Taylor series approximation is frequently used with EKFs, and that is what we will use. \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Consider the function $f(x)=x^2−2x$, which we have plotted below."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAu0AAAEWCAYAAADSA6kgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl01PWh///XZCX7RlYSQoCwQ4AEAmFTCKggQltF0Urd\nrv16vS5w+vMeb+ltrZVbj6c9aG/VbkoLKkLdqKIiS9i3hD0QtpCQhUkg+77MfH5/oLliFgJOZibJ\n83FOTpJ5vz+feVHfDa98eM9nTIZhGAIAAADgtFwcHQAAAABAxyjtAAAAgJOjtAMAAABOjtIOAAAA\nODlKOwAAAODkKO0AAACAk6O0AwAAAE7O5qX99ddfV1xcnLy8vJSUlKRdu3Z1OP/48eOaMWOGvL29\nFR0drRdffNHWkQAAAIBuzaal/f3339ezzz6r5cuX68iRI0pJSdEdd9yhvLy8NudXVlZq9uzZioyM\nVHp6ul599VW98sor+v3vf2/LWAAAAEC3ZrLlO6ImJydr7Nix+tOf/tTy2JAhQ3T33XdrxYoVrea/\n8cYbev7551VUVCRPT09J0ksvvaQ33nhD+fn5tooFAAAAdGs2u9Le2NioQ4cOac6cOdc8PmfOHO3Z\ns6fNY/bu3atp06a1FPZv5hcWFio3N9dW0QAAAIBuzWal/cqVK7JYLAoPD7/m8bCwMJnN5jaPMZvN\nreZ/8317xwAAAAC9jZsjn9xkMnV6bkVFRRcmAQAAALpWQEDATR9rsyvtffv2laurq4qKiq55vKio\nSJGRkW0eExER0eqK+jfHR0RE2CoaAAAA0K3ZrLR7eHgoMTFRmzZtuubxr776SikpKW0eM3nyZO3c\nuVMNDQ3XzO/Xr59iY2NtFQ0AAADo1mx695h169bpwQcf1Ouvv66UlBS9+eabevvtt5WZmamYmBg9\n//zzOnjwoDZv3izp6i0fhw4dqltuuUXLly/X6dOn9fDDD+tXv/qVli5des25v7095vv80wJ6tvT0\ndElSUlKSg5PAWbFG0BmsE3QG6wSSZLE0y9W1/R3ntuqwNt3TvmjRIpWUlOg3v/mNLl26pNGjR2vj\nxo2KiYmRdPXFpdnZ2S3z/f399dVXX+nJJ59UUlKSgoOD9bOf/axVYQcAAACczcWic1q9aaXmTrpf\n4+Lb3lliKzZ/IeoTTzyhJ554os2xt99+u9Vjo0aN0vbt220dAwAAAOgSFkuzvjywXpsOrpfVsGrd\n1jc0KGqE/H0Cu+w5bfqOqAAAAEBPdqnkon637jl9ceB9WQ2rJKmmvkprt74uG+46b8Wht3wEAAAA\nugOr1aJth/+lz/a+o2ZLU6txXy9/WazNcnN175Lnp7QDAAAAHbhcfknvfPWasgtPtRrz9w7SfbP+\nXaMGTujSDJR2AAAAoA1Ww6rdx77QJ7v+rsbmhlbj4+KnaNGtP5WPl3+XZ6G0AwAAAN9RWnlZ727+\ng87kHWs15u3pq3tu/akSh06zWx5KOwAAAPA1wzC07+QWfbjjb2porGs1PiJ2vBan/ocCfIPtmovS\nDgAAAEiqqC7Ve1v+qJM5Ga3GPD289MNpj2jSyFSZTCa7Z6O0AwAAoFczDEPpp7frg7S/qrahutX4\nkOjRun/2Uwr2D3NAuqso7QAAAOi1KmvK9P7WN3Q8+0CrMQ83T9019SeaOuZ2uZgc+/ZGlHYAAAD0\nOoZhKOP0Dv1z+19VW1/Vanxg1HA9MPtphQZGOiBda5R2AAAA9CqVNeVat+1NHTu/r9WYu6uH5qXc\nr1vGzpeLi6sD0rWN0g4AAIBewTAMHT67W+u3/Uk1bVxdHxAxVA/MeVrhQf0ckK5jlHYAAAD0eJU1\n5Vq/7U0dbePqupuru+ZNvl+3jrvLqa6ufxulHQAAAD2WYRg6dGan1qf9pc2967Hh8XpgztOKCI5x\nQLrOo7QDAACgR6qoKdW6rW+2eWcYV1c3zZ10v2aOXyBXJ726/m2UdgAAAPQohmHoYFaaPtz+tzbv\nux4bHq/7Zz+lyJD+Dkh3cyjtAAAA6DHKq0v0/tY3lHkhvdWYm6u75k5arFu7ydX1b6O0AwAAoNsz\nDEP7Mjfr451vq66xttX4gIihemD2UwoPjnZAuu+P0g4AAIBuraSySGs3v67TeUdbjTnrfddvFKUd\nAAAA3ZLVsGrXsc+1YfdqNTbVtxqPixymB2Y/pTAnvO/6jaK0AwAAoNspLivUe5v/V+cLT7Ya83Dz\n1PwpD2ramDu69dX1b6O0AwAAoNuwWC3adugTfb5vrZosja3Gh0SP1n2pT6pvQIQD0nUdSjsAAAC6\nhYLLF/TO5j8ovzi71Zinh5d+MO1hTR45WyaTyQHpuhalHQAAAE6tqblJmw6u01fpH8pqtbQaHzEg\nUffOfEJBfn0dkM4+KO0AAABwWtmFWXpv8/+qqCy/1Zh3Hz/9cPojmjDslh55df3bKO0AAABwOvWN\ndfp0zxrtPLpRhoxW4+OHTNWPZjwmP+9AB6SzP0o7AAAAnMrJnAy9v/VNlVVdbjXm7xOkRbf+P40Z\nlOyAZI5DaQcAAIBTqKqt0Ic7/qaM0zvaHE8ZNVt3Tf2JvD197ZzM8SjtAAAAcCjDMHQwK00f7XhL\nNfVVrcZDAsK1eNaTGhIzxgHpnAOlHQAAAA5TUlmk97e+qazcw63GTCYX3TruLs2dtFge7p4OSOc8\nKO0AAACwO4vVou1HPtXGve+qsbmh1Xi/vgO0OPU/1D98sAPSOR9KOwAAAOwqrzhba7f8UXnF51uN\nubm6647k+zRz/AK5ulJVv8H/EgAAALCLxqYGfb7/PW07tEFWw9pqfHC/kbpv1r8rLKifA9I5N0o7\nAAAAulxW7hG9v/UNlVQWtRrz8vTRgqk/0aSRqXIxuTggnfOjtAMAAKDLVNVW6KOdbyk9a3ub4+Pi\np+hHMx6Tv0+QnZN1L5R2AAAA2JxhGNp/cqs+3rVKtW3cxjHQN0T33PpTjR440QHpuh9KOwAAAGyq\nqKxA7295XecKMluNmWTS9LHzNG/yA+rj4eWAdN2TTTcNNTQ06KmnnlJoaKh8fX21YMECFRQUdHjM\nX/7yF02bNk3BwcEKCgrSzJkztXv3blvGAgAAgB00NTdp47739Nt3nmmzsEeFxGrpvS/rRzMeo7Df\nIJuW9meffVYffvih1q5dq507d6qyslJ33nmnrNbWrw7+xvbt27V48WJt27ZN+/fv19ChQ3Xbbbfp\n3LlztowGAACALnQ2/4RefvdZfbH/fVkszdeMubt56K4pS/T/Lf6dBkQMcVDC7s1m22MqKir01ltv\nadWqVZo1a5YkafXq1YqNjdXmzZs1Z86cNo9bs2bNNd+/8cYb+vjjj/Xll19q8GBupg8AAODMqusq\n9fHOt3Xg1LY2x4fFjtOiW3+qvgERdk7Ws9istGdkZKipqemach4dHa3hw4drz5497Zb272poaFB9\nfb2CgngFMQAAgLMyDEP7Tm7RJ7v+3uYLTf28AvTDGY9p/JCpMplMDkjYs9istJvNZrm6uiokJOSa\nx8PDw1VU1Pp+nO1Zvny5/Pz8dNddd9kqGgAAAGzoUkme1m19Q+cLT7Y5njJqtu6a8hN59/G1c7Ke\n67qlffny5VqxYkWHc9LS0mwS5tVXX9Wf//xnbdmyRb6+7f9HTk9Pt8nzoedijeB6WCPoDNYJOqM3\nrZNmS5OO5+9SZsHeNt/RNNA7VJMGzVWYf4xOnshyQELnEx8fb5PzXLe0L126VEuWLOlwTkxMjJqb\nm2WxWFRSUnLN1Xaz2azp06dfN8jKlSv13//93/riiy+UlJTUiegAAACwl/zSczqQ/YWqG8pbjbm6\nuCkhZrpGRCXLxcXVAel6vuuW9pCQkFZbXtqSmJgod3d3bdq0SYsXL5Yk5efnKysrSykpKR0e+/vf\n/16/+tWvtHHjxuvOlUSpR7u+udrBGkF7WCPoDNYJOqO3rJOyqiv6cPtfdfT8vjbHRwxI1D23PK6Q\ngHA7J+seKioqbHIem+1pDwgI0KOPPqrnnntOYWFhCg4O1rJly5SQkKDU1NSWebNmzVJycnLLlptX\nXnlFy5cv15o1azR48GCZzWZJkre3t/z9/W0VDwAAADfAYrVo+5FPtXHfe2psqm81HuATrB/OeExj\nB0/mhaZ2YNN3RF25cqXc3Nx07733qq6uTqmpqVqzZs01/yGzs7MVGxvb8v3rr7+u5uZm3Xvvvdec\n66GHHtJbb71ly3gAAADohAuXsvT+1jdVeCWn1ZjJ5KLpCXM1d9L98vL0tn+4Xsqmpd3Dw0Ovvfaa\nXnvttXbnXLhwocPvAQAA4BjVdZXasPsf2pe5uc3x2PB4LZr5/xQTNsjOyWDT0g4AAIDux2pYtS9z\nizbs/keb91z38vDW/ClLlDJqNi80dRBKOwAAQC+WV5yt9dv+pBzz6TbHk4bN0MKpD8vfJ9DOyfBt\nlHYAAIBeqK6hRp/tfVc7j30uo417rocHReueWx/XkJgxDkiH76K0AwAA9CKGYSj99HZ9vHOVqmpb\n33Pdw81TtyXfq1vHzZebq7sDEqItlHYAAIBeouByjv6Z9medLzzZ5viYQZP0w+mPKtg/1M7JcD2U\ndgAAgB6urqFGG/e9p51HN8raxlaYkIBw3T3j3zQyrme/UVR3RmkHAADooa63FcbN1V2piT9U6oQf\nysPN0wEJ0VmUdgAAgB7oelthRgxI1I9mPKbQwEg7J8PNoLQDAAD0ILX11dq4713tPPZFm3eFCfYP\n049mPKZRcROuedd6ODdKOwAAQA/wzRsk/WvPatXUVbYaZytM90ZpBwAA6OZyzWe0Pu0vulh0ts1x\ntsJ0f5R2AACAbqqqtlz/2rNG+zI3tzkeEhCuH01/TKMGTrBzMtgapR0AAKCbsViatLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7095828>"
|
||||
"<matplotlib.figure.Figure at 0x7816d68>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -615,6 +316,9 @@
|
||||
}
|
||||
],
|
||||
"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",
|
||||
"plt.plot (xs, ys)\n",
|
||||
@@ -633,7 +337,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -642,7 +346,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x711c6a0>"
|
||||
"<matplotlib.figure.Figure at 0x7f9b0b8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -675,7 +379,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -684,7 +388,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7133dd8>"
|
||||
"<matplotlib.figure.Figure at 0x8008748>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -706,9 +410,16 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Here we can see that this linearization is much better. It is still exactly correct at $x=1.5$, but the errors are very small as x varies. Compare the tiny error at $x=1.4$ vs the very large error at $x=1.4$ in the previous plot. This does not constitute a formal proof of correctness, but this sort of geometric depiction should be fairly convincing. Certainly it is easy to see that in this case if the line had any other slope the errors would accumulate more quickly. \n",
|
||||
"Here we can see that this linearization is much better. It is still exactly correct at $x=1.5$, but the errors are very small as x varies. Compare the tiny error at $x=1.4$ vs the very large error at $x=1.4$ in the previous plot. This does not constitute a formal proof of correctness, but this sort of geometric depiction should be fairly convincing. Certainly it is easy to see that in this case if the line had any other slope the errors would accumulate more quickly. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Linearizing the Kalman Filter\n",
|
||||
"\n",
|
||||
"To implement the extended Kalman filter we will leave the linear equations as they are, and use partial derivatives to evaluate the system matrix $\\mathbf{F}$ and the measurement matrix $\\mathbf{H}$ at the state at time t ($\\mathbf{x}_t$). Since $\\mathbf{F}$ also depends on the control input vector $\\mathbf{u}$ we will need to include that term:\n",
|
||||
"To implement the extended Kalman filter we will leave the linear equations as they are, and use partial derivatives to evaluate the system matrix $\\mathbf{F}$ and the measurement matrix $\\mathbf{H}$ at the state at time t ($\\mathbf{x}_t$). 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",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
@@ -718,19 +429,10 @@
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"All this means is that at each update step we compute $\\mathbf{F}$ as the partial derivative of our function $f()$ evaluated at x. \n",
|
||||
"All this means is that at each update step we compute $\\mathbf{F}$ as the partial derivative of our function $f()$ evaluated at x. We then use a computational technique, such as Taylor expansion, to turn this into a set of linear equations.\n",
|
||||
"\n",
|
||||
"We approximate the state transition function $\\mathbf{F}$ by using the Taylor-series expansion \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"** orphan text\n",
|
||||
"This approach has many issues. First, of course, is the fact that the linearization does not produce an exact answer. More importantly, we are not linearizing the actual path, but our filter's estimation of the path. We linearize the estimation because it is statistically likely to be correct; but of course it is not required to be. So if the filter's output is bad that will cause us to linearize an incorrect estimate, which will almost certainly lead to an even worse estimate. In these cases the filter will quickly diverge. This is where the 'black art' of Kalman filter comes in. We are trying to linearize an estimate, and there is no guarantee that the filter will be stable. A vast amount of the literature on Kalman filters is devoted to this problem. Another issue is that we need to linearize the system using analytic methods. It may be difficult or impossible to find an analytic solution to some problems. In other cases we may be able to find the linearization, but the computation is very expensive. **\n",
|
||||
"For nonlinear problems our function $f()$ is a set of differential equations. Modeling physical systems with differential equations is well outside the scope of this book. You will need to be reasonably well versed in this branch of applied mathematics to successfully implement the EKF for your problem. If you have not read it yet, please read the section **Modeling Dynamic Systems** in the **Kalman Filter Math** chapter as it contains the math that you will need to complete this chapter.\n",
|
||||
"\n",
|
||||
"In the next chapter we will spend a lot of time on a new development, the unscented Kalman filter(UKF) which avoids many of these problems. I think that as it becomes better known it will supplant the EKF in most applications, though that is still an open question. Certainly research has shown that the UKF performs at least as well as, and often much better than the EKF. \n",
|
||||
"\n",
|
||||
"I think the easiest way to understand the EKF is to just start off with an example. Perhaps the reason for some of my mathematical choices will not be clear, but trust that the end result will be an EKF."
|
||||
]
|
||||
@@ -753,7 +455,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -762,7 +464,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAERCAYAAABy58/tAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8jWf+//H3ObJbYo19SWppQ9TEWi0qRRequ5a2iFo6\nSlE1Rauodvqt0l9pO6PaSrXTzuj67fYtQZFB01BKjb1qT6ggBFnP/fvjGokjCQknOUnu1/Px8JDc\n514+55iptyvX57oclmVZAgAAAGzA6e0CAAAAgJJC+AUAAIBtEH4BAABgG4RfAAAA2AbhFwAAALZB\n+AUAAIBtEH4BlGtOp1Pdu3f3dhml2sqVK+V0OhUdHV2o86dNmyan06lVq1YVc2UA4HmEXwDFxul0\nuv2qUKGCqlWrphtvvFFvvvmmsrKySqQOh8NRIs+50PlAWZRf+/fvL/E6L1TYz8nhcOT8AoCyxsfb\nBQAo3xwOh6ZOnSpJysrK0t69e/XFF1/oxx9/1NKlS/XVV195ucLiERoaqmnTprkdsyxL06dPd/tM\nLlS1atUSqu7qjBo1Sv3791fDhg29XQoAFJmDHd4AFBen0ymHw6Hs7Gy347t27VJkZKTOnDmjFStW\nqFu3bsVaw80336wffvih2J5RFAV9Jt60cuVKRUVFafDgwVqwYIG3ywGAYsW0BwAlrlmzZuratask\naf369W6v7dy5UxMnTlS7du1Uq1YtBQQEqEmTJho2bJgOHDiQ7/0yMjI0Y8YMXXPNNQoICFBYWJim\nTJmi9PT0fM8/fPiwXnjhBd14442qU6eO/P39Vb9+fQ0YMEBbt27Nc/7evXtz5g4fPnxYQ4YMUd26\ndeXj4+OxkWun06nQ0FCdOnVKY8eOVePGjeXr66s5c+Zc8eciSUuXLlXfvn1Vu3ZtBQQEqGHDhurT\np4++/fbby9ZkWZYmTJggp9OpPn366MyZM5Jy5/zGxcXl+x7Onj2rCRMmqFGjRgoICFCzZs00c+bM\nAp8xZ84chYeHKzAwUA0aNNDo0aOVkpKiJk2aKDQ0tLAfIQAUCtMeAHjF+R86+fv7ux3/4osv9Pbb\nbysqKko33XST/Pz8tGXLFi1YsEDffPONfv75Z9WvX9/tPv369dPXX3+ta665RqNHj1ZGRoZiYmK0\nefPmfJ8dFxenV155RVFRUYqMjFSlSpW0c+dOff755/r666+1evVqtWnTJs91ycnJ6ty5s6pWraoH\nH3xQLpdLNWrU8Nhnkp6eru7du+vUqVPq3bu3goKCcqYWFPVzkaSpU6dqxowZqlSpku6++241atRI\niYmJio+P14IFC9SnT59L1jJo0CB98sknGjp0qObNmyen8/LjJZmZmerVq5cSExPVu3dv+fj46Msv\nv9TEiROVlpam559/3u38J554QvPmzVO9evU0fPhw+fn56ZtvvlFCQoKysrLk5+d3BZ8kAFyCBQDF\nxOFwWE6nM8/xrVu3WkFBQZbT6bQ2b97s9tqhQ4esjIyMPNfExsZaFSpUsB5//HG34x999JHlcDis\njh07WmlpaTnHT5w4YTVv3txyOBxW9+7d3a45evSolZqamucZmzZtsipVqmTddtttbsd///13y+Fw\nWA6Hwxo0aJCVnZ19+TdfgII+k/P379Wrl3Xu3Lk8rxf1c1myZInlcDis0NBQ6+DBg3muu/DYihUr\nLIfDYUVHR1uWZVnHjx+3unbtajkcDuuFF17Ic+3UqVMth8NhrVq1Kt/30Lt3b7c/i6NHj1pVq1a1\nqlatamVmZuYcj4uLsxwOh9W8eXPr5MmTOcczMjJynh8aGprn+QBwNRj5BVCsrP82eVmW5dbwlpGR\noenTpysiIsLt/Hr16uV7n549eyo8PFyxsbFux2NiYiRJL730ktsoctWqVfXcc89p0KBBee5Vq1at\nfJ/RunVrde/eXUuXLlV2drYqVKjg9rq/v79mzZpVqBHQK+FwODRr1iwFBATkea2on8sbb7whSXr1\n1VfzjAhLyveYJO3bt0933HGHdu/erZiYmHw/v8u9h7lz57r9WdSqVUt9+/bVhx9+qJ07dyo8PFyS\ntHDhQknSpEmTFBwcnHO+r6+vXn75Zd10001FejYAFAbhF0Cxmz59ep5js2bN0lNPPZXv+f/4xz/0\n/vvva9OmTTp58qRbc9jF0yQ2bNggp9OZM4f4QpdqpPvuu+80b948rV+/XsnJyW7LrjkcDh07dky1\na9d2u6ZJkyaqWbNmgfe8WgEBAXn+MXChonwu8fHxcjgcuv322wv9/O3bt+uGG27Q2bNn9d1336lH\njx5Ffg/BwcEKCwvLc/z89I0TJ07kHNu4caMk5RtyO3bsmOcfHwDgCYRfAMXqwpUN0tLSlJCQoBEj\nRmjChAmqXbu2Hn74Ybfzx40bpzlz5qhevXq6/fbbVb9+fQUGBkoyo7wXr4WbkpKi4OBg+fr65nl2\nSEhIvjXNmTNH48aNU/Xq1dWzZ081atRIQUFBcjgc+vLLL7Vp06Z8m+Xq1KlzRZ9BYRVUr1T0z+Xk\nyZOqUqWKgoKCCv38nTt36vjx42rdurXatm17Re+hoOXafHzMXzcXBvaUlBQ5HI48/8iQpAoVKnh0\nPjUAnEf4BVBiAgIC1LVrVy1evFgtW7bUn//8Z91yyy05ofLo0aOaO3euIiIitHbtWlWsWNHt+o8+\n+ijPPYODg5WSkqLMzMw8AfjIkSN5zs/KytK0adNUt25dbdiwIU/wWrNmTYH1F/emDgXd/0o+l6pV\nq+r48eM6c+ZMnvML0rdvX7Vo0UKTJk3Kmf5R0BQRT6hSpYokKSkpSZUrV3Z7LTs7W8nJyUUK7wBQ\nGCx1BqDENW7cWM8884xSU1Pduv/37Nkjy7LUq1evPIHt4MGD2rNnT557tW3bVi6XK9+tdvM7duzY\nMaWkpKhz5855gm9qaqo2bNhQ6nYuu5LP5YYbbpBlWfr++++L9KxnnnlGc+bM0a+//qpu3bopMTHx\nqmq/lMjISFmWpdWrV+d5LT4+vlSthQyg/CD8AvCKcePGqWbNmnr//fe1a9cuSWZOrST9+9//lsvl\nyjk3NTVVw4YNyzcMRUdHS5KeffZZpaWl5Rw/ceKEXnzxxTznh4SEKCgoSOvXr89Zt1YyS3SNGTNG\nycnJHnl/nnR+rduifC6jR4+WJE2YMEEHDx7M8/qhQ4cKfN7o0aP19ttva+fOneratesl1xG+GgMH\nDpQkvfzyyzp58mTO8YyMDE2ePLlYngkAhF8AXlGpUiVNnDhRWVlZmjJliiQzp/ahhx5SQkKC2rRp\no/Hjx2vo0KFq2bKl9u7dqzZt2uSsD3xe//791bdvX61bt06tWrXS+PHj9eSTTyoiIkItW7bM81yn\n06knn3xS+/btU0REhMaOHauRI0eqdevW+r//+z917949zzO8rXbt2kX+XHr27KkpU6Zo3759Cg8P\n16OPPqpnn31Ww4YNU0REhEaNGnXJZw4dOlQffPCB9u7dqy5duuQ7uny1unbtquHDh2v37t1q1aqV\nnnzySU2YMEERERFKT09XvXr1im1lDQD2xX9VAHjNyJEjVa9ePX322WfatGmTJOm9997T5MmTde7c\nOf3tb3/L2aFszZo1Cg4OzndKwqeffpqznNpbb72lb7/9VtHR0Vq0aFG+z50xY4Zmz56twMBAzZ8/\nX//7v/+rDh06KCEhQY0aNSp10x6kK/tcpk+fru+//15dunTR999/r1mzZmnJkiUKDQ3V8OHDL/vM\nAQMGaNGiRUpMTFS3bt20Y8cOSWZuclE/o4Ku+fvf/67XXntNlStX1vz58/XPf/5TvXr1UmxsrFJS\nUnLmBQOApzis0jbEAQCwvV27dqlFixbq379/vg19AHClGPkFAHjN0aNH3eYxS9LZs2c1duxYSdI9\n99zjjbIAlGMsdQYA8Jq5c+fqww8/VPfu3VWnTh0lJSVp+fLlOnTokO644w7df//93i4RQDlD+AUA\neE2PHj20ceNGxcbG6vjx4/L19VXz5s01duzYnNFfAPCkAuf8pqSklHQtAAAAgMcEBwfnOcacXwAA\nANgG4RcAAAC2Uag5v/kNGQMAAAClzeWm7jLyCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAA\nANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg\n/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIA\nAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2\nCL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8A\nAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AAACwDcIvAAAAbIPwCwAAANsg/AIAAMA2CL8AANiA\n0yl98YX3nj9tmlS7tqnjgw+8VwdA+AUAoJzYsMGEy5tuyvtaUpLUp0/J1yRJW7ZIL7wgzZ9v6ujX\nT2rSRJo92zv1wN4IvwAAlBPvviu1by/Fx0vbt7u/FhIi+fkVfG1WVtGfl5lZuPN27za/33WXqSMg\nQHI4iv48wBMIvwAAlAPnzkn//Kc0fboUFSW995776xdOe9i713z/r3+Zc4OCzKisJC1cKEVEmIBa\np440eLD7Pf72N+nee6VKlaRnn5VcLumxx6SwMHOf5s2lV1+VLMtcM22aOf/89U6n1L27tG+fNGGC\n+b5ChWL8YICL+Hi7AAAAcPU++0wKDpZuu01KTZWeeEJ6+WXJ5xJ/00+aZKYexMSY8Line truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x71b3470>"
|
||||
"<matplotlib.figure.Figure at 0x7821390>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -870,7 +572,7 @@
|
||||
"\n",
|
||||
"$$ \\mathbf{x}=\\mathbf{Fx}$$\n",
|
||||
"\n",
|
||||
"Solving an arbitrary set of differential equations is beyond the scope of this book, however most Kalman filters are amenable to Taylor-series expansion which I will briefly explain here without proof. \n",
|
||||
"Solving an arbitrary set of differential equations is beyond the scope of this book, however most Kalman filters are amenable to Taylor-series expansion which I will briefly explain here without proof. The section **Modeling Dynamic Systems** in the **Kalman Filter Math** chapter contains much more information on this technique.\n",
|
||||
"\n",
|
||||
"Given the partial differential equation \n",
|
||||
"\n",
|
||||
@@ -889,7 +591,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$\\Phi$ is our system matrix. We cannot use Greek symbols in Python, so the code uses the symbol `F` for $\\Phi$. This is admittedly confusing. In the math above $\\mathbf{F}$ represents the system of partial differential equations, and $\\Phi$ is the system matrix. In the Python the partial differential equations are not represented in the code, and the system matrix is `F`."
|
||||
"We can then compute the system matrix by substituting $\\Phi$ in $x(t_k) = \\Phi(\\Delta t)x(t_{k-1})$. Thus, $\\Phi$ is our system matrix.\n",
|
||||
"\n",
|
||||
"We cannot use Greek symbols in Python, so the code uses the symbol `F` for $\\Phi$. This is admittedly confusing. In the math above $\\mathbf{F}$ represents the system of partial differential equations, and $\\Phi$ is the system matrix. In the Python the partial differential equations are not represented in the code, and the system matrix is `F`."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -967,7 +671,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -992,7 +696,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1015,7 +719,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1090,16 +794,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwYAAAEtCAYAAACyMncIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt0lPWB//H3zCSTeya3uSQzuV9ICOEWBBIuttyrqLV1\nZWUL2uoBV7Sy1OMeznHVn7p2e9btsl2rq571Uq11q21Rl1UposUkA0Ig3MP9loSEJEwChNwzvz+o\noyO3CSSQwOd1DuckM9/n+3yf9nHyfOZ7M3i9Xi8iIiIiInJdM17tBoiIiIiIyNWnYCAiIiIiIgoG\nIiIiIiKiYCAiIiIiIigYiIiIiIgICgYiIiIiIoKCgYiIiIiIMECCwc9//nNuuOEGLBYLNpuNW2+9\nle3bt/uVueeeezAajX7/iouL/cq0t7fz0EMPYbVaiYyM5LbbbqO6utqvjMfjYd68ecTExBATE8P8\n+fNpbm7u92sUERERERnIBkQw+Mtf/sKDDz6I2+1m9erVBAUFMW3aNDwej6+MwWBg+vTp1NbW+v79\n3//9n189ixcv5o9//CPvvPMOX3zxBSdOnGD27Nn09PT4ysydO5eKigo++eQTPv74YzZu3Mi8efOu\n2LWKiIiIiAxEhoG483FLSwsWi4X333+fm2++GTjTY9DY2MiHH354zmOam5ux2Wy8/vrr3HXXXQBU\nVVWRmprKRx99xIwZM9i5cyf5+fmUlpZSVFQEQGlpKZMmTaKyspKcnJwrc4EiIiIiIgPMgOgx+LYT\nJ07Q09NDbGys7zWDwUBJSQl2u50hQ4awYMEC6uvrfe+Xl5fT2dnJjBkzfK+5XC7y8vJwu90AuN1u\nIiMjfaEAoLi4mIiICF8ZEREREZHrUdDVbsC5PPzww4waNcrvAX7WrFn88Ic/JD09nQMHDvDYY48x\nZcoUysvLMZvN1NbWYjKZiI+P96vLbrdTW1sLQG1tLVar1e99g8GAzWbzlRERERERuR4NuGCwZMkS\nysrKKCkpwWAw+F6fM2eO7+f8/HwKCwtJTU1lxYoV3H777eet71JGSmkysoiIiIgMZhaLpdfHDKih\nRP/wD//A//zP/7B69WrS0tIuWDYxMRGXy8XevXsBcDgcdHd309jY6Feurq4Oh8PhK/PN4UdwJjgc\nO3bMV0ZERERE5Ho0YILBww8/7AsFgUwCrq+vp7q6msTERAAKCwsJDg5m5cqVvjJVVVVUVlb6ljUt\nKiri1KlTfvMJ3G43LS0tZy19KiIiIiJyPRkQqxItWrSIt956i+XLl5OXl+d7PSoqioiICFpaWnji\niSe44447cDgcHDx4kKVLl1JdXc3OnTuJiIgA4IEHHuDDDz/k9ddfJy4ujiVLltDc3Ex5eblvWNJN\nN91EVVUVL7/8Ml6vlwULFpCRkcH777/vO+83hxJdSjeMyJW0YcMGAMaMGXOVWyISGN2zMpjofpXB\n5HKfYQfEHIMXX3wRg8HA1KlT/V5/8sknefzxxzGZTGzbto0333yTpqYmEhMTmTJlCu+9954vFAAs\nW7aMoKAg5syZQ2trK9OmTeOtt97ym6vw9ttv89BDDzFz5kwAbrvtNp5//vkrc6EiIiIiIgPUgOgx\nGGjUYyCDib7NksFG96wMJrpfZTC53GfYATPHQERERERErh4FAxERERERUTAQEREREREFAxERERER\nQcFARERERERQMBARERERERQMREREREQEBQMREREREUHBQEREREREUDAQEREREREUDEREREREBAUD\nERERERFBwUBERERERFAwEBERERERFAxERERERAQFAxERERERQcFARERERERQMBARERERERQMRERE\nREQEBQMREREREUHBQEREREREUDAQEREREREUDEREREREBAUDERERERFBwUBERERERFAwEBERERER\nFAxERERERAQFAxERERERQcFAREREREQYIMHg5z//OTfccAMWiwWbzcatt97K9u3bzyr35JNP4nQ6\nCQ8P57vf/S47duzwe7+9vZ2HHnoIq9VKZGQkt912G9XV1X5lPB4P8+bNIyYmhpiYGObPn09zc3O/\nXp+IiIiIyEA3IILBX/7yFx588EHcbjerV68mKCiIadOm4fF4fGV+8Ytf8Mtf/pLnn3+e9evXY7PZ\nmD59OqdOnfKVWbx4MX/84x955513+OKLLzhx4gSzZ8+mp6fHV2bu3LlUVFTwySef8PHHH7Nx40bm\nzZt3Ra9XRERERORydXd3UV1/kHU7VtPR1X7Z9QX1QZsu28cff+z3+5tvvonFYqGsrIybb74Zr9fL\nsmXLWLp0KbfffjsAb7zxBjabjbfffpsFCxbQ3NzMq6++yuuvv87UqVN99aSmprJq1SpmzJjBzp07\n+eSTTygtLWXcuHEAvPTSS0yaNIndu3eTk5NzZS9cRERERCRAnV0dbNm3jr1V2zhSv5+ahoN0dXcC\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7750ac8>"
|
||||
"<matplotlib.figure.Figure at 0x805f9b0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1107,9 +811,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x77d5860>"
|
||||
"<matplotlib.figure.Figure at 0x7feee10>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1117,9 +821,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwMAAAEtCAYAAABUG7xMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtcFNfdP/DP7A0WVkCRZVUUL0FDbSSC0YAx3ghiHpT4\nxMSgQk1sQpvUhtrWNs8rCUnatE2bX4rmqn2VSkl4TJqQ5tJEiMZE1M0T0FBjlHrHgHJRYQkLe5/f\nH8C4C4uuAu7Cft4v98XOnDOz34Gz637nnDMjiKIogoiIiIiI/I7M2wEQEREREZF3MBkgIiIiIvJT\nTAaIiIiIiPwUkwEiIiIiIj/FZICIiIiIyE8xGSAiIiIi8lNMBoiIiIiI/JTXkoHdu3dj6dKliIqK\ngkwmQ0FBQY86R48exX//939j+PDhCA4ORkJCAqqqqqRys9mMdevWISIiAhqNBunp6aitrXXZR1NT\nEzIzMxEWFoawsDBkZWXBYDAM+PEREREREfk6ryUDRqMR06ZNw8aNG6FWqyEIgkv5qVOnMHv2bEya\nNAm7du3CN998g2effRYajUaqk5OTg+LiYmzbtg1lZWVoaWlBWloaHA6HVGflypWorKxESUkJtm/f\njgMHDiAzM/O6HScRERERka8SfOEOxMOGDcPLL7+MrKwsad3KlSshl8tRWFjodhuDwQCtVoutW7ci\nIyMDAFBTU4Po6Gh8/PHHSElJwZEjRzB16lTs3bsXiYmJAIC9e/dizpw5qKqqwuTJkwf+4IiIiIiI\nfJRPzhlwOBz48MMPERsbi9TUVGi1WsycORNvvfWWVGf//v2wWq1ISUmR1kVFRSE2NhZ6vR4AoNfr\nodFopEQAAJKSkhAcHCzVISIiIiLyVz6ZDDQ0NKC1tRW/+93vkJqaih07diAjIwOrVq3CRx99BACo\nq6uDXC5HeHi4y7aRkZGoq6uT6kRERLiUC4IArVYr1SEiIiIi8lcKbwfgTteY/7vuugs5OTkAgGnT\npqGiogIvvfQS7rzzzl63vdZRT5xUTERERESDWWho6FVv45M9AyNHjoRCocD3vvc9l/U33ngjzpw5\nAwDQ6XSw2+24cOGCS536+nrodDqpTmNjo0u5KIpoaGiQ6hARERER+SufTAZUKhVuueUWl8uIAh2X\nGh0/fjwAICEhAUqlEqWlpVJ5TU0NqqqqkJSUBABITExEa2ury/wAvV4Po9Eo1SEiIiIi8ldeGyZk\nNBpx7NgxAB3Dgqqrq1FZWYnw8HCMHTsWGzZswL333os5c+Zg/vz52LVrF95880289957ADq6Qdau\nXYsNGzZAq9VixIgRWL9+PeLi4pCcnAwA0gTk7OxsbNmyBaIoIjs7G0uWLEFMTEyvsV1LFwvR9VRR\nUQEAmDFjhpcjIfIM2ywNJmyvNJj0dai713oGysvLER8fj/j4eJhMJuTm5iI+Ph65ubkAgPT0dGzZ\nsgXPP/88pk2bhpdffhmFhYVYvHixtI+8vDwsW7YMK1aswG233YaQkBB88MEHLvcsKCoqQlxcHBYt\nWoTU1FRMnz6918uVEhERERH5E5+4z4AvcM6q2DNAvo5nrWiwYZulwYTtlQaTvn6H9ck5A0RERERE\nNPCYDBARERER+SkmA0REREREforJABERERGRn2IyQERERETkp5gMEBERERH5KSYDRERERER+iskA\nEREREZGfYjJAREREROSnmAwQEREREfkpJgNERERERH6KyQARERERkZ9iMkBERERE5KeYDBARERER\n+SkmA0REREREforJABERERGRn2IyQERERETkp5gMEBERERH5KSYDRERERER+iskAEREREZGfYjJA\nREREROSnmAwQEREREfkpJgNERERERH7Ka8nA7t27sXTpUkRFRUEmk6GgoMClfM2aNZDJZC6PpKQk\nlzpmsxnr1q1DREQENBoN0tPTUVtb61KnqakJmZmZCAsLQ1hYGLKysmAwGAb8+IiIiIiIfJ3XkgGj\n0Yhp06Zh48aNUKvVEATBpVwQBNxxxx2oq6uTHh999JFLnZycHBQXF2Pbtm0oKytDS0sL0tLS4HA4\npDorV65EZWUlSkpKsH37dhw4cACZmZnX5RiJiIiIiHyZwlsvvHjxYixevBhARy9Ad6IoQqVSQavV\nut3eYDAgPz8fW7duxcKFCwEAhYWFiI6Oxo4dO5CSkoIjR46gpKQEe/fuxaxZswAAmzdvxpw5c3D0\n6FFMnjx5YA6OiIiIiGgQ8Nk5A4IgYM+ePYiMjMSUKVPw0EMPobGxUSrfv38/rFYrUlJSpHVRUVGI\njY2FXq8HAOj1emg0GiQmJkp1kpKSEBwcLNUhIiIiIvJXXusZuJLU1FTcfffdmDBhAk6dOoXHH38c\nCxYswP79+6FSqVBXVwe5XI7w8HCX7SIjI1FXVwcAqKurQ0REhEu5IAjQarVSHSIiIiIif+WzycCK\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x781e780>"
|
||||
"<matplotlib.figure.Figure at 0x7fa6240>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1214,7 +918,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1232,7 +936,7 @@
|
||||
"⎣╲╱ x_alt + x_pos ╲╱ x_alt + x_pos ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1297,7 +1001,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1324,7 +1028,7 @@
|
||||
"⎣ 2 ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 18,
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1357,16 +1061,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"execution_count": 15,
|
||||
"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 0x77a7828>"
|
||||
"<matplotlib.figure.Figure at 0x8056e80>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1390,12 +1094,59 @@
|
||||
"a_y = (0.0039 + \\frac{0.0058}{1+\\exp{[(v-35)/5]}})*v*v_y- g\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"These equations will be very unpleasant to work with while we develop this subject, so for now I will retreat to a simpler one dimensional problem using this simplified equation for acceleration that does not take the nonlinearity of the drag coefficient into account:\n",
|
||||
"These equations will be *very* unpleasant to work with while we develop this subject, so for now I will retreat to a simpler one dimensional problem using this simplified equation for acceleration that does not take the nonlinearity of the drag coefficient into account:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$$\\ddot{x} = \\frac{0.0034ge^{-x/20000}\\dot{x}^2}{2\\beta} - g$$\n",
|
||||
"\n",
|
||||
"Here $\\beta$ is the ballistic coefficient, where a high number indicates a low drag."
|
||||
"Here $\\beta$ is the ballistic coefficient, where a high number indicates a low drag.\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This is still nonlinear, so we need to linearize this equation at the current state point. If our state is position and velocity, we need an equation for some arbitrarily small change in $\\mathbf{x}$: $\\begin{bmatrix}\\Delta x \\\\ \\Delta \\dot{x}\\end{bmatrix}$, like so:\n",
|
||||
"\n",
|
||||
"$$ \\begin{bmatrix}\\Delta \\dot{x} \\\\ \\Delta \\ddot{x}\\end{bmatrix} = \n",
|
||||
"\\begin{bmatrix}\n",
|
||||
"\\frac{\\partial \\dot{x}}{\\partial x} & \\frac{\\partial \\dot{x}}{\\partial \\dot{x}} \\\\ \n",
|
||||
"\\frac{\\partial \\ddot{x}}{\\partial x} & \\frac{\\partial \\ddot{x}}{\\partial \\dot{x}}\n",
|
||||
"\\end{bmatrix}\n",
|
||||
"\\begin{bmatrix}\\Delta x \\\\ \\Delta \\dot{x}\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from sympy.abc import *\n",
|
||||
"from sympy import *\n",
|
||||
"\n",
|
||||
"init_printing(pretty_print=True, use_latex='mathjax')\n",
|
||||
"\n",
|
||||
"x1 = (0.0034*g*exp(-x/22000)*((x)**2))/(2*b) - g\n",
|
||||
"\n",
|
||||
"x2 = (a*g*exp(-x/c)*(Derivative(x)**2))/(2*b) - g\n",
|
||||
"\n",
|
||||
"pprint(x1)5\n",
|
||||
"pprint(Derivative(x)*Derivative(x,n=2))\n",
|
||||
"#pprint(diff(x2, x))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"** orphan text\n",
|
||||
"This approach has many issues. First, of course, is the fact that the linearization does not produce an exact answer. More importantly, we are not linearizing the actual path, but our filter's estimation of the path. We linearize the estimation because it is statistically likely to be correct; but of course it is not required to be. So if the filter's output is bad that will cause us to linearize an incorrect estimate, which will almost certainly lead to an even worse estimate. In these cases the filter will quickly diverge. This is where the 'black art' of Kalman filter comes in. We are trying to linearize an estimate, and there is no guarantee that the filter will be stable. A vast amount of the literature on Kalman filters is devoted to this problem. Another issue is that we need to linearize the system using analytic methods. It may be difficult or impossible to find an analytic solution to some problems. In other cases we may be able to find the linearization, but the computation is very expensive. **\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user