I think outputs are now correctly removed before check in.
This commit is contained in:
1 parent
71b1b12212
commit
b31e3a0b12
6 files changed
+1516
-2048
No files matched your search
+9
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:7987517a7cb3fbbd21339999a44f481804ef1719e02dea0e02c2456b42d2d036"
|
||||
"signature": "sha256:22eea384355b20ece229d2669aa6a64132be5fada2c2565b3598ab6846b58610"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -48,7 +48,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
@@ -63,7 +64,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -107,7 +109,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -135,7 +138,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
|
||||
+4
-2
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": ""
|
||||
"name": "",
|
||||
"signature": "sha256:ba2750345b8a777403243fcf1a80cb6a58d7ee1074b9095134150e1679648635"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -66,7 +67,8 @@
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
|
||||
+887
-1106
File diff suppressed because it is too large.
Load diff
@@ -1,481 +1,403 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": ""
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Multidimensional Kalman Filters\n",
|
||||
"\n",
|
||||
"The techniques in the last chapter are very powerful, but they only work in one dimension. The gaussians represent a mean and variance that are scalars - real numbers. They provide no way to represent multidimensional data, such as the position of a dog in a field. You may retort that you could use two Kalman filters for that case, one tracks the x coordinate and the other tracks the y coordinate. That does work in some cases, but put that thought aside, because soon you will see some enormous benefits to implementing the multidimensional case.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Multivariate Normal Distributions\n",
|
||||
"\n",
|
||||
"What might a multivariate (meaning multidimensional) normal distribution look like? Our goal is to be able to represent a normal distribution across multiple dimensions. Consider the 2 dimensional case. Let's say we believe that x = 2 and y = 7. Therefore we can see that for N dimensions, we need N means, like so:\n",
|
||||
"$$ \\mu = \\begin{bmatrix}{\\mu}_1\\\\{\\mu}_2\\\\ \\vdots \\\\{\\mu}_n\\end{bmatrix} \n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Therefore for this example we would have\n",
|
||||
"$$\n",
|
||||
"\\mu = \\begin{bmatrix}2\\\\7\\end{bmatrix} \n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"The next step is representing our variances. At first blush we might think we would also need N variances for N dimensions. We might want to say the variance for x is 10 and the variance for y is 8. While this is possible, it does not consider the more general case. For example, suppose we were tracking house prices vs total $m^2$ of the floor plan. These numbers are *correlated*. It is not an exact correlation, but in general houses in the same neighborhood are more expensive if they have a larger floor plan. We want a way to express not only what we think the variance is in the price and the $m^2$, but also the degree to which they are correlated. It turns out that we use a matrix to denote this:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\Sigma = \\begin{pmatrix}\n",
|
||||
" {\\sigma}_{1,1} & {\\sigma}_{1,2} & \\cdots & {\\sigma}_{1,n} \\\\\n",
|
||||
" {\\sigma}_{2,1} &{\\sigma}_{2,2} & \\cdots & {\\sigma}_{2,n} \\\\\n",
|
||||
" \\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
|
||||
" {\\sigma}_{n,1} & {\\sigma}_{n,2} & \\cdots & {\\sigma}_{n,n}\n",
|
||||
" \\end{pmatrix}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"This is called the covariance matrix, and is probably a bit confusing at the moment. Rather than explain the math in detail at the moment, we will take our usual tactic of building our intuition first with various physical models. \n",
|
||||
"\n",
|
||||
"So here is the full equation for the multivarate normal distribution.\n",
|
||||
"\n",
|
||||
"$$\\mathcal{N}(\\mu,\\,\\Sigma) = (2\\pi)^{-\\frac{n}{2}}|\\Sigma|^{-\\frac{1}{2}}\\, e^{ -\\frac{1}{2}(\\mathbf{x}-\\mu)'\\Sigma^{-1}(\\mathbf{x}-\\mu) }$$\n",
|
||||
"\n",
|
||||
"I urge you to not try to remember this function. We will program it once in a function and then call it when we need to compute a specific value. However, if you look at it briefly you will note that it looks quite similar to the univarate normal distribution except it uses matrices instead of scalar values. If you are reasonably well-versed in linear algebra this equation should look quite managable; if not, don't worry, the python is coming up next!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import numpy as np\n",
|
||||
"import math\n",
|
||||
"def multivariate_gaussian(x, mu, cov):\n",
|
||||
" n = len(x)\n",
|
||||
" det = np.sqrt(np.prod(np.diag(cov)))\n",
|
||||
" frac = (2*math.pi)**(-n/2.) * (1./det)\n",
|
||||
" fprime = (x - mu)**2\n",
|
||||
" return frac * np.exp(-0.5*np.dot(fprime, 1./np.diag(cov)))\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's use it to compute a few values just to make sure we know how to call and use the function, and then move on to more interesting things.\n",
|
||||
"\n",
|
||||
"First, let's find the probability for our dog being at (2.5, 7.3) if we believe he is at (2,7) with a variance of 8 for x and a variance of 10 for y. This function requires us to pass everything in as numpy arrays (we will soon provide a more robust version that works with numpy matrices, numpy arrays, and/or scalars in any combinations. That code contains a lot of boilerplate which obscures the algorithm).\n",
|
||||
"\n",
|
||||
"So we set x to (2.5,7.3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"x = np.array([2.5, 7.3])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Next, we set the mean of our belief:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"mu = np.array([2,7])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, we have to define our covariance matrix. In the problem statement we did not mention any correlation between x and y, and we will assume there is none. This makes sense; a dog can choose to independently wander in either the x direction or y direction without affecting the other. If there is no correlation between the values you just fill in the diagonal of the covariance matrix with the variances:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"cov = np.array([[8.,0],[0,10.]])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Now just call the function"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print multivariate_gaussian(x,mu,cov)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0.0174395374407\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 5
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's check the probability for the dog being at exactly (2,7)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"x = np.array([2,7])\n",
|
||||
"print multivariate_gaussian(x,mu,cov)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"0.0177940635854\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 6
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"These numbers are not easy to interpret. Let's plot this in 3D, with the z coordinate being the probability."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%matplotlib inline\n",
|
||||
"pylab.rcParams['figure.figsize'] = 12,6\n",
|
||||
"\n",
|
||||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||||
"\n",
|
||||
"xs, ys = arange(-8, 13, .75), arange(-8, 20, .75)\n",
|
||||
"xv, yv = meshgrid (xs, ys)\n",
|
||||
"\n",
|
||||
"zs = np.array([multivariate_gaussian(np.array([x,y]),mu,cov) \n",
|
||||
" for x,y in zip(np.ravel(xv), np.ravel(yv))])\n",
|
||||
"zv = zs.reshape(xv.shape)\n",
|
||||
"\n",
|
||||
"ax = plt.figure().add_subplot(111, projection='3d')\n",
|
||||
"ax.plot_wireframe(xv, yv, zv)\n",
|
||||
"show()\n",
|
||||
"pylab.rcParams['figure.figsize'] = 6,4"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x4cc43c8>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 7
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The result is clearly a 3D bell shaped curve. We can see that the gaussian is centered around (2,7), and that the probability quickly drops away in all directions.\n",
|
||||
"\n",
|
||||
"As beautiful as this is, it is perhaps a bit hard to get useful information. For example, it is not easy to tell if x and y both have the same variance or not. So for most of the rest of this book we will display multidimensional gaussian using contour plots. I will use some helper functions in gaussian.py to plot them. If you are interested in linear algebra go ahead and look at the code used to produce these contours, otherwise feel free to ignore it."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import gaussian as g\n",
|
||||
"pylab.rcParams['figure.figsize'] = 12,4\n",
|
||||
"\n",
|
||||
"cov = array([[2,0],[0,2]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"subplot(131)\n",
|
||||
"g.plot_sigma_ellipse(e, '|2 0|\\n|0 2|')\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"cov = array([[2,0],[0,9]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"subplot(132)\n",
|
||||
"g.plot_sigma_ellipse(e, '|2 0|\\n|0 9|')\n",
|
||||
"\n",
|
||||
"subplot(133)\n",
|
||||
"cov = array([[2,3],[1,2]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"g.plot_sigma_ellipse(e,'|2 3|\\n|1 2|')\n",
|
||||
"show()\n",
|
||||
"pylab.rcParams['figure.figsize'] = 6,4"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7e22438>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"From a mathematical perspective these display the values that the multivariate gaussian takes for a specific sigma (in this case $\\sigma^2=1$. Think of it as taking a horizontal slice through the 3D surface plot we did above. However, thinking about the physical interpretation of these plots clarifies their meaning.\n",
|
||||
"\n",
|
||||
"The first plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&2\\end{bmatrix}$. Let this be our current belief about the position of our dog in a field. In other words, we believe that he is positioned at (2,7) with a variance of $\\sigma^2=2$ for both x and y. The contour plot shows where we believe the dog is located with the '+' in the center of the ellipse. The ellipse shows the boundary for the $1\\sigma^2$ probability - points where the dog is quite likely to be based on our current knowledge. Of course, the dog might be very far from this point, as Gaussians allow the mean to be any value. For example, the dog could be at (3234.76,189989.62), but that has vanishing low probability of being true. Generally speaking displaying the $1\\sigma^2$ to $2\\sigma^2$ contour captures the most likely values for the distribution. An equivelent way of thinking about this is the circle/ellipse shows us the amount of error in our belief. A tiny circle would indicate that we have a very small error, and a very large circle indicates a lot of error in our belief. We will use this throughout the rest of the book to display and evaluate the accuracy of our filters at any point in time. \n",
|
||||
"\n",
|
||||
"The second plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&9\\end{bmatrix}$. This time we use a different variance for x (2) vs y (9). The result is an ellipse. When we look at it we can immediately tell that we have a lot more uncertainty in the y value vs the x value. Our belief that the value is (2,7) is the same in both cases, but errors are different. This sort of thing happens naturally as we track objects in the world - one sensor has a better view of the object, or is closer, than another sensor, and so we end up with different error rates in the different axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The third plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&3\\\\1&2\\end{bmatrix}$. This is the first contour that has values in the off-diagonal elements of $cov$, and this is the first contour plot with a slanted ellipse. This is not a coincidence. The two facts are telling use the same thing. A slanted ellipse tells us that the x and y values are somehow **correlated**. We denote that in the covariance matrix with values off the diagonal. What does this mean in physical terms? Think of trying to park your car in a parking spot. You can not pull up beside the spot and then move sideways into the space because most cars cannot go purely sideways. $x$ and $y$ are not independent. This is a consequence of the steering system in a car. When your tires are turned the car rotates around its rear axle while moving forward. Or think of a horse attached to a pivoting exercise bar in a corral. The horse can only walk in circles, he cannot vary $x$ and $y$ independently, which means he cannot walk straight forward to to the side. If $x$ changes, $y$ must also change in a defined way. \n",
|
||||
"\n",
|
||||
"So when we see this ellipse we know that $x$ and $y$ are correlated, and that the correlation is \"strong\". I will not prove it here, but a 45 $^{\\circ}$ angle denotes complete correlation between $x$ and $y$, whereas $0$ and $90$ denote no correlation at all. Those who are familiar with this math will be objecting quite strongly, as this is actually quite sloppy language that does not adress all of the mathematical issues. They are right, but for now this is a good first approximation to understanding these ellipses from a physical interpretation point of view. The size of the ellipse shows how much error we have in each axis, and the slant shows how strongly correlated the values are.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"###Kalman Filter Basics\n",
|
||||
"\n",
|
||||
"Let's say we are tracking an aircraft and we get the following data for the $x$ coordinate at time $t$=1,2, and 3 seconds. What does your intuition tell you the value of $x$ will be at time $t$=4 seconds?\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,4]);ylim([0,4]);show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7b7fef0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"It appears that the aircraft is flying in a straight line because we can draw a line between the three points, and we know that aircraft cannot turn on a dime. The most reasonable guess is that $x$=4 at $t$=4. I will depict that below with a green square to depict the predictions."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,5]);ylim([0,5])\n",
|
||||
"plot([0,5],[0,5],'r')\n",
|
||||
"scatter ([4], [4], c='g', marker='s',s=200)\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x8375f60>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 10
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"If this is data from a Kalman filter, then each point has both a mean and variance. Let's try to show that by showing the approximate error for each point. Don't worry about why I am using a covariance matrix to depict the variance at this point, it will become clear in a few paragraphs. The intent at this point is to show that while we have$x$=1,2,3 that there is a lot of error associated with each measurement."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"cov = array([[0.003,0], [0,12]])\n",
|
||||
"sigma = sigma=[0.5,1.,1.5,2]\n",
|
||||
"e1 = g.sigma_ellipses(cov, x=1, y=1, sigma=sigma)\n",
|
||||
"e2 = g.sigma_ellipses(cov, x=2, y=2, sigma=sigma)\n",
|
||||
"e3 = g.sigma_ellipses(cov, x=3, y=3, sigma=sigma)\n",
|
||||
"g.plot_sigma_ellipses([e1, e2, e3], axis_equal=True,x_lim=[0,4],y_lim=[0,15])\n",
|
||||
"plt.ylim([0,11])\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x80f0b38>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can see that there is a lot of error associated with each value of $x$. We could write a 1D Kalman filter as we did in the last chapter, but suppose this is the output of that filter, and not just raw sensor measurements. Are we out of luck?\n",
|
||||
"\n",
|
||||
"Let us think about how we predicted that $x$=4 at $t$=4. In one sense we just drew a straight line between the points and saw where it lay at $t$=4. My constant refrain: what is the physical interpretation of that? What is the difference in $x$ over time? What is $\\frac{\\partial x}{\\partial t}$? The derivative, or difference in distance over time is *velocity*. \n",
|
||||
"\n",
|
||||
"This is the **key point** in Kalman filters, so read carefully! Our sensor is only detecting the position of the aircraft (how doesn't matter). It does not have any kind of sensor that provides velocity to us. But based on the position estimates we can compute velocity. In Kalman filters we would call the velocity an **unobserved variable**. Unobserved means what it sounds like - there is no sensor that is measuring velocity directly. Since the velocity is based on the position, and the position has error, the velocity will have error as well. What happens if we draw the velocity errors over the positions errors?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from matplotlib.patches import Ellipse\n",
|
||||
"\n",
|
||||
"cov = array([[1,1],[1,1.1]])\n",
|
||||
"ev = g.sigma_ellipses(cov, x=2, y=2, sigma=sigma)\n",
|
||||
"\n",
|
||||
"isct = Ellipse(xy=(2,2), width=.2, height=1.2, edgecolor='r', fc='None', lw=4)\n",
|
||||
"plt.figure().gca().add_artist(isct)\n",
|
||||
"g.plot_sigma_ellipses([e1, e2, e3, ev], axis_equal=True,x_lim=[0,4],y_lim=[0,15])\n",
|
||||
"plt.ylim([0,11])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7e146d8>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 12
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Think about what this plot means. We have a lot of error in our position estimates. We therefore have a lot of error in our velocity estimates. But look at the intersections between the velocity and the positions. Take the intersection at $t$=2. The intersection between the velocity and the position is where our aircraft is most likely to be, which I have roughly depicted with a red ellipse ('roughly' because I set the size via eyeball, not via math). The size of the error is much smaller than the error of the positions, despite the fact that velocity was derived from position. \n",
|
||||
"\n",
|
||||
"What makes this possible? Imagine for a moment that we superimposed the velocity from a *different* airplane over the position graph. Cleary the two are not related, and there is no way that combining the two could possibly yield any additional information. In contrast, the velocity of the this airplane tells us something very important - the direction and speed of travel. So long as the aircraft does not alter its velocity the velocity allows us to predict where the next position is. After a relatively small amount of error in velocity the probability that it is a good match with the position is very small. Think about it - if you suddenly change direction your position is also going to change a lot. If the position measurement is not in the direction of the assumed velocity change it is very unlikely to be true. The two are correlated, so if the velocity changes so must the position, and in a predictable way. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Kalman Filter Algorithm\n",
|
||||
"So in general terms we can show how a multidimensional Kalman filter works. In the example above, we compute velocity from the previous position measurements using something called the **measurement function**. Then we predict the next position by using the current estimate and something called the **state transition function**. In our example above, *new_position = old_position + velocity*time*. Next, we take the measurement from the sensor, and compare it to the prediction we just made. In a world with perfect sensors and perfect airplanes the prediction will always match the measured value. In the real world they will always be at least slightly different. We call the difference between the two the **residual**. Finally, we use something called the **Kalman gain** to update our estimate to be somewhere between the measured position and the predicted position. I will not describe how the gain is set, but suppose we had perfect confidence in our measurement - no error is possible. Then, clearly, we would set the gain so that 100% of the position came from the measurement, and 0% from the prediction. At the other extreme, if he have no confidence at all in the sensor (maybe it reported a hardware fault), we would set the gain so that 100% of the position came from the prediction, and 0% from the measurement. In normal cases, we will take a ratio of the two: maybe 53% of the measurement, and 47% of the prediction. The gain is updated on every cycle based on the variance of the variables (in a way yet to be explained). It should be clear that if the variance of the measurement is low, and the variance of the prediction is high we will favor the measurement, and vice versa. \n",
|
||||
"\n",
|
||||
"The chart shows a prior estimate of $x=1$ and $\\dot{x}=1$ ($\\dot{x}$ is the shorthand for the derivative of x, which is velocity). Therefore we predict $\\hat{x}=2$. However, the new measurement $x^{'}=1.3$, giving a residual $r=0.7$. Finally, Kalman filter gain $k$ gives us a new estimate of $\\hat{x^{'}}=1.8$.\n",
|
||||
"\n",
|
||||
"** CHECK SYMBOLOGY!!!!**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from mkf_internal import *\n",
|
||||
"show_residual_chart()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEKCAYAAADdBdT9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVGX7P/DPsBkICoqCIALuLM4wQAouiLmgFsbjlpgE\n4m6mPtmTS5roo2ilmeaS+i13s5+Uj1gu5AKKhlaiqBSiMQJqiooim2zX748TR4YdBWYOXO/Xa15y\n5mzXmfFcc899rnOPjIgIjDHGJEVH0wEwxhirOU7ejDEmQZy8GWNMgjh5M8aYBHHyZowxCeLkzRhj\nEsTJW4vY2dnhxIkTmg6jQs7Ozjh9+jQAICQkBAEBARqO6MXZ2dnh5MmTAIDQ0FBMmjTphbZT8jXR\nZpGRkbCxsdF0GKwWcfKuZaUT8L59+9CiRQucOXOmynVlMhlkMlldhlct3t7eMDQ0hImJifg4f/48\nrl69Ci8vLwBQi1OlUkFHRwdFRUW1FkPxNov3b29vj08++aTWtl8y/gULFmDr1q1VrhMUFIRFixap\nPVfyNalN5X2Qb9++HX369Kn1fZX2svvJy8vDnDlzYGNjI753//73v8X5JT842YvT03QADU3JBLxj\nxw7MmTMHhw8fhoeHh4Yjqz6ZTIYNGzYgODi4wmXKu7frRe/3KigogJ5e+f8Vnzx5Ah0dHcTExKB/\n//5wcXGBj49PtdeXKm35IH8RK1aswMWLF/Hrr7/C0tISt27dUvt2IpPJXvj/CnuOW951gIiwefNm\nfPDBB4iIiBAT982bN/Haa6/B3NwcrVq1wrhx4/DkyZNytxESEoJRo0YhICAAzZo1g1wuR2JiIlas\nWAELCwvY2tri559/Fpfftm0bHB0d0axZM3To0AFbtmwR50VGRqJt27b4/PPPYWFhASsrK2zfvr3G\nx1W6xVScXIpbnqampmIrHQC++eYbODo6okWLFhg8eDCSk5PFdXV0dLBx40Z06tQJXbp0qXLfHh4e\ncHJywrVr18Tj+fTTT9GmTRtMmDABRISVK1eiY8eOMDc3x1tvvYX09HRx/V27dsHW1hbm5uYIDQ1V\n23bpLqDo6Gj07NkTZmZmaNeuHXbs2IGtW7di7969+PTTT2FiYoI333xTfE2KW8jPnj3D7NmzYW1t\nDWtra/z73/9GXl4egNp7D4oVfzPZunUrrK2tYWVlhdWrV4vzc3JyEBQUhBYtWsDJyQm//vqr2vrF\nr1WzZs3g5OSE//3vfwCAP/74A9OmTcMvv/wCExMTtGjRQjy2Dz74ALa2trC0tMS0adOQm5tbbmy/\n/fYb/Pz8YGlpCQCwtbUVX9+AgAAkJyfD19cXJiYmWLVqFQAgJiZGfM1dXFwQFRUlbs/b2xvz589H\njx490Lx5c/j5+am9t40WsVplZ2dHw4cPJwsLC4qLi1Obd+PGDTp+/Djl5eVRWloaeXl50ezZs9XW\nPXHiBBERLV68mF555RWKiIiggoICeuedd8jW1pZCQ0OpoKCAtm7dSvb29uK6P/30E/31119ERBQV\nFUVGRkZ08eJFIiI6deoU6enp0eLFi6mgoIAOHz5MRkZG9Pjx43KPwdvbm/7v//6v3GMrGd+4ceOI\niEilUpFMJqPCwkJx2f/973/UsWNH+vPPP6mwsJCWLVtGPXv2FOfLZDIaNGgQpaenU25ubpl9JSUl\nkUwmo4KCAioqKqLo6GgyMjKikydPisczb948ysvLo5ycHPriiy/I09OTbt++TXl5eTRlyhTy9/cn\nIqJr166RsbExnTlzhp49e0bvv/8+6enpiccSEhKidiwmJia0b98+KigooIcPH9KlS5eIiCgoKIgW\nLVpU4WuyaNEi8vT0pLS0NEpLS6OePXuKy9f0PSi53WLbtm2j3r17q70+Y8eOpezsbLpy5Qq1atWK\njh8/TkREc+fOJS8vL0pPT6eUlBRycnIiGxsbcVv79++nu3fvEhHRd999R02bNqW///6biIi2b98u\n7qfY7Nmz6c0336T09HR6+vQp+fr60vz588uNfdmyZdSuXTvauHEjxcXFUVFRUaXHlpqaSi1btqQj\nR44QEdHPP/9MLVu2pAcPHhARUd++fcna2pquXbtGWVlZNGLECPH9asw4edcyW1tbatasGfn5+ZX5\nT1vagQMHSKlUitOlk+OgQYPEeeHh4WRsbCxuMyMjg2QyGT158qTcbfv5+dHatWuJSEgchoaGasm1\ndevWdP78+XLX7du3LxkZGZGpqSmZmpqSm5tbufEVn0DFiaTk9gcPHkxff/21OF1YWEhGRkaUnJxM\nRELyPnXqVIWvTfE2TU1NyczMjBwcHOjLL78Uj8fAwICePXsmLu/g4KCWEO7cuUP6+vpUUFBAS5Ys\nERM5EVFWVhYZGBiUeyyhoaE0fPjwcmMKCgqihQsXqj1X8jXp0KGDmICIiI4dO0Z2dnZizDV5D6qb\n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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7e22080>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 13
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 13
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:fff3501726b07546f648c399fe50981edcfb8d3db4ccb230e1d64757436ddf9d"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Multidimensional Kalman Filters\n",
|
||||
"\n",
|
||||
"The techniques in the last chapter are very powerful, but they only work in one dimension. The gaussians represent a mean and variance that are scalars - real numbers. They provide no way to represent multidimensional data, such as the position of a dog in a field. You may retort that you could use two Kalman filters for that case, one tracks the x coordinate and the other tracks the y coordinate. That does work in some cases, but put that thought aside, because soon you will see some enormous benefits to implementing the multidimensional case.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Multivariate Normal Distributions\n",
|
||||
"\n",
|
||||
"What might a multivariate (meaning multidimensional) normal distribution look like? Our goal is to be able to represent a normal distribution across multiple dimensions. Consider the 2 dimensional case. Let's say we believe that x = 2 and y = 7. Therefore we can see that for N dimensions, we need N means, like so:\n",
|
||||
"$$ \\mu = \\begin{bmatrix}{\\mu}_1\\\\{\\mu}_2\\\\ \\vdots \\\\{\\mu}_n\\end{bmatrix} \n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Therefore for this example we would have\n",
|
||||
"$$\n",
|
||||
"\\mu = \\begin{bmatrix}2\\\\7\\end{bmatrix} \n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"The next step is representing our variances. At first blush we might think we would also need N variances for N dimensions. We might want to say the variance for x is 10 and the variance for y is 8. While this is possible, it does not consider the more general case. For example, suppose we were tracking house prices vs total $m^2$ of the floor plan. These numbers are *correlated*. It is not an exact correlation, but in general houses in the same neighborhood are more expensive if they have a larger floor plan. We want a way to express not only what we think the variance is in the price and the $m^2$, but also the degree to which they are correlated. It turns out that we use a matrix to denote this:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\Sigma = \\begin{pmatrix}\n",
|
||||
" {\\sigma}_{1,1} & {\\sigma}_{1,2} & \\cdots & {\\sigma}_{1,n} \\\\\n",
|
||||
" {\\sigma}_{2,1} &{\\sigma}_{2,2} & \\cdots & {\\sigma}_{2,n} \\\\\n",
|
||||
" \\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
|
||||
" {\\sigma}_{n,1} & {\\sigma}_{n,2} & \\cdots & {\\sigma}_{n,n}\n",
|
||||
" \\end{pmatrix}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"This is called the covariance matrix, and is probably a bit confusing at the moment. Rather than explain the math in detail at the moment, we will take our usual tactic of building our intuition first with various physical models. \n",
|
||||
"\n",
|
||||
"So here is the full equation for the multivarate normal distribution.\n",
|
||||
"\n",
|
||||
"$$\\mathcal{N}(\\mu,\\,\\Sigma) = (2\\pi)^{-\\frac{n}{2}}|\\Sigma|^{-\\frac{1}{2}}\\, e^{ -\\frac{1}{2}(\\mathbf{x}-\\mu)'\\Sigma^{-1}(\\mathbf{x}-\\mu) }$$\n",
|
||||
"\n",
|
||||
"I urge you to not try to remember this function. We will program it once in a function and then call it when we need to compute a specific value. However, if you look at it briefly you will note that it looks quite similar to the univarate normal distribution except it uses matrices instead of scalar values. If you are reasonably well-versed in linear algebra this equation should look quite managable; if not, don't worry, the python is coming up next!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import numpy as np\n",
|
||||
"import math\n",
|
||||
"def multivariate_gaussian(x, mu, cov):\n",
|
||||
" n = len(x)\n",
|
||||
" det = np.sqrt(np.prod(np.diag(cov)))\n",
|
||||
" frac = (2*math.pi)**(-n/2.) * (1./det)\n",
|
||||
" fprime = (x - mu)**2\n",
|
||||
" return frac * np.exp(-0.5*np.dot(fprime, 1./np.diag(cov)))\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's use it to compute a few values just to make sure we know how to call and use the function, and then move on to more interesting things.\n",
|
||||
"\n",
|
||||
"First, let's find the probability for our dog being at (2.5, 7.3) if we believe he is at (2,7) with a variance of 8 for x and a variance of 10 for y. This function requires us to pass everything in as numpy arrays (we will soon provide a more robust version that works with numpy matrices, numpy arrays, and/or scalars in any combinations. That code contains a lot of boilerplate which obscures the algorithm).\n",
|
||||
"\n",
|
||||
"So we set x to (2.5,7.3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"x = np.array([2.5, 7.3])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Next, we set the mean of our belief:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"mu = np.array([2,7])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, we have to define our covariance matrix. In the problem statement we did not mention any correlation between x and y, and we will assume there is none. This makes sense; a dog can choose to independently wander in either the x direction or y direction without affecting the other. If there is no correlation between the values you just fill in the diagonal of the covariance matrix with the variances:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"cov = np.array([[8.,0],[0,10.]])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Now just call the function"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print multivariate_gaussian(x,mu,cov)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's check the probability for the dog being at exactly (2,7)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"x = np.array([2,7])\n",
|
||||
"print multivariate_gaussian(x,mu,cov)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"These numbers are not easy to interpret. Let's plot this in 3D, with the z coordinate being the probability."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%matplotlib inline\n",
|
||||
"pylab.rcParams['figure.figsize'] = 12,6\n",
|
||||
"\n",
|
||||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||||
"\n",
|
||||
"xs, ys = arange(-8, 13, .75), arange(-8, 20, .75)\n",
|
||||
"xv, yv = meshgrid (xs, ys)\n",
|
||||
"\n",
|
||||
"zs = np.array([multivariate_gaussian(np.array([x,y]),mu,cov) \n",
|
||||
" for x,y in zip(np.ravel(xv), np.ravel(yv))])\n",
|
||||
"zv = zs.reshape(xv.shape)\n",
|
||||
"\n",
|
||||
"ax = plt.figure().add_subplot(111, projection='3d')\n",
|
||||
"ax.plot_wireframe(xv, yv, zv)\n",
|
||||
"show()\n",
|
||||
"pylab.rcParams['figure.figsize'] = 6,4"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The result is clearly a 3D bell shaped curve. We can see that the gaussian is centered around (2,7), and that the probability quickly drops away in all directions.\n",
|
||||
"\n",
|
||||
"As beautiful as this is, it is perhaps a bit hard to get useful information. For example, it is not easy to tell if x and y both have the same variance or not. So for most of the rest of this book we will display multidimensional gaussian using contour plots. I will use some helper functions in gaussian.py to plot them. If you are interested in linear algebra go ahead and look at the code used to produce these contours, otherwise feel free to ignore it."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import gaussian as g\n",
|
||||
"pylab.rcParams['figure.figsize'] = 12,4\n",
|
||||
"\n",
|
||||
"cov = array([[2,0],[0,2]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"subplot(131)\n",
|
||||
"g.plot_sigma_ellipse(e, '|2 0|\\n|0 2|')\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"cov = array([[2,0],[0,9]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"subplot(132)\n",
|
||||
"g.plot_sigma_ellipse(e, '|2 0|\\n|0 9|')\n",
|
||||
"\n",
|
||||
"subplot(133)\n",
|
||||
"cov = array([[2,3],[1,2]])\n",
|
||||
"e = g.sigma_ellipse (cov, 2, 7)\n",
|
||||
"g.plot_sigma_ellipse(e,'|2 3|\\n|1 2|')\n",
|
||||
"show()\n",
|
||||
"pylab.rcParams['figure.figsize'] = 6,4"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"From a mathematical perspective these display the values that the multivariate gaussian takes for a specific sigma (in this case $\\sigma^2=1$. Think of it as taking a horizontal slice through the 3D surface plot we did above. However, thinking about the physical interpretation of these plots clarifies their meaning.\n",
|
||||
"\n",
|
||||
"The first plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&2\\end{bmatrix}$. Let this be our current belief about the position of our dog in a field. In other words, we believe that he is positioned at (2,7) with a variance of $\\sigma^2=2$ for both x and y. The contour plot shows where we believe the dog is located with the '+' in the center of the ellipse. The ellipse shows the boundary for the $1\\sigma^2$ probability - points where the dog is quite likely to be based on our current knowledge. Of course, the dog might be very far from this point, as Gaussians allow the mean to be any value. For example, the dog could be at (3234.76,189989.62), but that has vanishing low probability of being true. Generally speaking displaying the $1\\sigma^2$ to $2\\sigma^2$ contour captures the most likely values for the distribution. An equivelent way of thinking about this is the circle/ellipse shows us the amount of error in our belief. A tiny circle would indicate that we have a very small error, and a very large circle indicates a lot of error in our belief. We will use this throughout the rest of the book to display and evaluate the accuracy of our filters at any point in time. \n",
|
||||
"\n",
|
||||
"The second plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&0\\\\0&9\\end{bmatrix}$. This time we use a different variance for x (2) vs y (9). The result is an ellipse. When we look at it we can immediately tell that we have a lot more uncertainty in the y value vs the x value. Our belief that the value is (2,7) is the same in both cases, but errors are different. This sort of thing happens naturally as we track objects in the world - one sensor has a better view of the object, or is closer, than another sensor, and so we end up with different error rates in the different axis.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"The third plot uses mean and the covariance matrices $\n",
|
||||
"\\mu =\\begin{bmatrix}2\\\\7\\end{bmatrix}, cov = \\begin{bmatrix}2&3\\\\1&2\\end{bmatrix}$. This is the first contour that has values in the off-diagonal elements of $cov$, and this is the first contour plot with a slanted ellipse. This is not a coincidence. The two facts are telling use the same thing. A slanted ellipse tells us that the x and y values are somehow **correlated**. We denote that in the covariance matrix with values off the diagonal. What does this mean in physical terms? Think of trying to park your car in a parking spot. You can not pull up beside the spot and then move sideways into the space because most cars cannot go purely sideways. $x$ and $y$ are not independent. This is a consequence of the steering system in a car. When your tires are turned the car rotates around its rear axle while moving forward. Or think of a horse attached to a pivoting exercise bar in a corral. The horse can only walk in circles, he cannot vary $x$ and $y$ independently, which means he cannot walk straight forward to to the side. If $x$ changes, $y$ must also change in a defined way. \n",
|
||||
"\n",
|
||||
"So when we see this ellipse we know that $x$ and $y$ are correlated, and that the correlation is \"strong\". I will not prove it here, but a 45 $^{\\circ}$ angle denotes complete correlation between $x$ and $y$, whereas $0$ and $90$ denote no correlation at all. Those who are familiar with this math will be objecting quite strongly, as this is actually quite sloppy language that does not adress all of the mathematical issues. They are right, but for now this is a good first approximation to understanding these ellipses from a physical interpretation point of view. The size of the ellipse shows how much error we have in each axis, and the slant shows how strongly correlated the values are.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"###Kalman Filter Basics\n",
|
||||
"\n",
|
||||
"Let's say we are tracking an aircraft and we get the following data for the $x$ coordinate at time $t$=1,2, and 3 seconds. What does your intuition tell you the value of $x$ will be at time $t$=4 seconds?\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,4]);ylim([0,4]);show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"It appears that the aircraft is flying in a straight line because we can draw a line between the three points, and we know that aircraft cannot turn on a dime. The most reasonable guess is that $x$=4 at $t$=4. I will depict that below with a green square to depict the predictions."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"scatter ([1,2,3],[1,2,3]);xlim([0,5]);ylim([0,5])\n",
|
||||
"plot([0,5],[0,5],'r')\n",
|
||||
"scatter ([4], [4], c='g', marker='s',s=200)\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"If this is data from a Kalman filter, then each point has both a mean and variance. Let's try to show that by showing the approximate error for each point. Don't worry about why I am using a covariance matrix to depict the variance at this point, it will become clear in a few paragraphs. The intent at this point is to show that while we have$x$=1,2,3 that there is a lot of error associated with each measurement."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"cov = array([[0.003,0], [0,12]])\n",
|
||||
"sigma = sigma=[0.5,1.,1.5,2]\n",
|
||||
"e1 = g.sigma_ellipses(cov, x=1, y=1, sigma=sigma)\n",
|
||||
"e2 = g.sigma_ellipses(cov, x=2, y=2, sigma=sigma)\n",
|
||||
"e3 = g.sigma_ellipses(cov, x=3, y=3, sigma=sigma)\n",
|
||||
"g.plot_sigma_ellipses([e1, e2, e3], axis_equal=True,x_lim=[0,4],y_lim=[0,15])\n",
|
||||
"plt.ylim([0,11])\n",
|
||||
"show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can see that there is a lot of error associated with each value of $x$. We could write a 1D Kalman filter as we did in the last chapter, but suppose this is the output of that filter, and not just raw sensor measurements. Are we out of luck?\n",
|
||||
"\n",
|
||||
"Let us think about how we predicted that $x$=4 at $t$=4. In one sense we just drew a straight line between the points and saw where it lay at $t$=4. My constant refrain: what is the physical interpretation of that? What is the difference in $x$ over time? What is $\\frac{\\partial x}{\\partial t}$? The derivative, or difference in distance over time is *velocity*. \n",
|
||||
"\n",
|
||||
"This is the **key point** in Kalman filters, so read carefully! Our sensor is only detecting the position of the aircraft (how doesn't matter). It does not have any kind of sensor that provides velocity to us. But based on the position estimates we can compute velocity. In Kalman filters we would call the velocity an **unobserved variable**. Unobserved means what it sounds like - there is no sensor that is measuring velocity directly. Since the velocity is based on the position, and the position has error, the velocity will have error as well. What happens if we draw the velocity errors over the positions errors?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from matplotlib.patches import Ellipse\n",
|
||||
"\n",
|
||||
"cov = array([[1,1],[1,1.1]])\n",
|
||||
"ev = g.sigma_ellipses(cov, x=2, y=2, sigma=sigma)\n",
|
||||
"\n",
|
||||
"isct = Ellipse(xy=(2,2), width=.2, height=1.2, edgecolor='r', fc='None', lw=4)\n",
|
||||
"plt.figure().gca().add_artist(isct)\n",
|
||||
"g.plot_sigma_ellipses([e1, e2, e3, ev], axis_equal=True,x_lim=[0,4],y_lim=[0,15])\n",
|
||||
"plt.ylim([0,11])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Think about what this plot means. We have a lot of error in our position estimates. We therefore have a lot of error in our velocity estimates. But look at the intersections between the velocity and the positions. Take the intersection at $t$=2. The intersection between the velocity and the position is where our aircraft is most likely to be, which I have roughly depicted with a red ellipse ('roughly' because I set the size via eyeball, not via math). The size of the error is much smaller than the error of the positions, despite the fact that velocity was derived from position. \n",
|
||||
"\n",
|
||||
"What makes this possible? Imagine for a moment that we superimposed the velocity from a *different* airplane over the position graph. Cleary the two are not related, and there is no way that combining the two could possibly yield any additional information. In contrast, the velocity of the this airplane tells us something very important - the direction and speed of travel. So long as the aircraft does not alter its velocity the velocity allows us to predict where the next position is. After a relatively small amount of error in velocity the probability that it is a good match with the position is very small. Think about it - if you suddenly change direction your position is also going to change a lot. If the position measurement is not in the direction of the assumed velocity change it is very unlikely to be true. The two are correlated, so if the velocity changes so must the position, and in a predictable way. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Kalman Filter Algorithm\n",
|
||||
"So in general terms we can show how a multidimensional Kalman filter works. In the example above, we compute velocity from the previous position measurements using something called the **measurement function**. Then we predict the next position by using the current estimate and something called the **state transition function**. In our example above, *new_position = old_position + velocity*time*. Next, we take the measurement from the sensor, and compare it to the prediction we just made. In a world with perfect sensors and perfect airplanes the prediction will always match the measured value. In the real world they will always be at least slightly different. We call the difference between the two the **residual**. Finally, we use something called the **Kalman gain** to update our estimate to be somewhere between the measured position and the predicted position. I will not describe how the gain is set, but suppose we had perfect confidence in our measurement - no error is possible. Then, clearly, we would set the gain so that 100% of the position came from the measurement, and 0% from the prediction. At the other extreme, if he have no confidence at all in the sensor (maybe it reported a hardware fault), we would set the gain so that 100% of the position came from the prediction, and 0% from the measurement. In normal cases, we will take a ratio of the two: maybe 53% of the measurement, and 47% of the prediction. The gain is updated on every cycle based on the variance of the variables (in a way yet to be explained). It should be clear that if the variance of the measurement is low, and the variance of the prediction is high we will favor the measurement, and vice versa. \n",
|
||||
"\n",
|
||||
"The chart shows a prior estimate of $x=1$ and $\\dot{x}=1$ ($\\dot{x}$ is the shorthand for the derivative of x, which is velocity). Therefore we predict $\\hat{x}=2$. However, the new measurement $x^{'}=1.3$, giving a residual $r=0.7$. Finally, Kalman filter gain $k$ gives us a new estimate of $\\hat{x^{'}}=1.8$.\n",
|
||||
"\n",
|
||||
"** CHECK SYMBOLOGY!!!!**"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from mkf_internal import *\n",
|
||||
"show_residual_chart()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
+173
-189
@@ -1,190 +1,174 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:72a139de073c5d503980bcd0a85ebae9c6b611ce8aba196ba5cf862647b7cad0"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def to_array(x):\n",
|
||||
" try:\n",
|
||||
" x.shape\n",
|
||||
" try:\n",
|
||||
" if type(x) != numpy.ndarray:\n",
|
||||
" x=asarray(x)[0]\n",
|
||||
" return x\n",
|
||||
" except:\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
" except:\n",
|
||||
" return array(mat(x)).reshape(1)\n",
|
||||
"\n",
|
||||
"def to_cov(x,n):\n",
|
||||
" try:\n",
|
||||
" x.shape\n",
|
||||
" return x\n",
|
||||
" except:\n",
|
||||
" return eye(n) * x\n",
|
||||
" \n",
|
||||
"def multivariate_gaussian (x, mu, cov):\n",
|
||||
" \"\"\" This is designed to work the same as scipy.stats.multivariate_normal\n",
|
||||
" which is available before version 0.14. You may either pass in a \n",
|
||||
" multivariate set of data:\n",
|
||||
" multivariate_gaussian (array([1,1]), array([3,4]), eye(2)*1.4)\n",
|
||||
" or unidimensional data:\n",
|
||||
" multivariate_gaussian(1, 3, 1.4)\n",
|
||||
" \n",
|
||||
" In the multivariate case if cov is a scalar it is interpreted as eye(n)*cov\n",
|
||||
" \"\"\"\n",
|
||||
" \n",
|
||||
" # force all to numpy.array type\n",
|
||||
" x = to_array(x)\n",
|
||||
" mu = to_array(mu)\n",
|
||||
" n = mu.size\n",
|
||||
" cov = to_cov (cov, n)\n",
|
||||
"\n",
|
||||
" det = numpy.sqrt(numpy.prod(numpy.diag(cov)))\n",
|
||||
" frac = (2*numpy.pi)**(-n/2.0) * (1.0/det)\n",
|
||||
" fprime = x - mu\n",
|
||||
" fprime **= 2\n",
|
||||
" m = frac * numpy.exp(-0.5*numpy.dot(fprime, 1/numpy.diag(cov)))\n",
|
||||
" return m\n",
|
||||
"\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print mvg (array([1,1]), array([1,1]), eye(2))\n",
|
||||
"print mvg (mat([1,1]), mat([1,1]), eye(2))\n",
|
||||
"print mvg (2,3,1)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print numpy.array(3)\n",
|
||||
"print pylab.rcParams['figure.figsize']"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"class KalmanFilter1D(object):\n",
|
||||
"\n",
|
||||
" def __init__ (self, x0, var):\n",
|
||||
" self.mean = x0\n",
|
||||
" self.variance = var\n",
|
||||
"\n",
|
||||
" def estimate(self, z, z_variance):\n",
|
||||
" self.mean = \\\n",
|
||||
" (self.variance*z + z_variance*self.mean) / \\\n",
|
||||
" self.variance + z_variance\n",
|
||||
" self.variance = 1. / (1./self.variance+ 1./z_variance)\n",
|
||||
"\n",
|
||||
"f = KalmanFilter1D(1,2)\n",
|
||||
"f.estimate(z = 2,\n",
|
||||
" z_variance = 3)\n",
|
||||
"\n",
|
||||
"print f.mean, f.variance"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%file test.py\n",
|
||||
"print 'hi'"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%run test.py\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import math\n",
|
||||
"from IPython.html.widgets import interact, interactive, fixed\n",
|
||||
"#from IPython.html import widgets\n",
|
||||
"#from IPython.display import clear_output, display, HTML\n",
|
||||
"\n",
|
||||
"def gaussian (x, mu, sigma):\n",
|
||||
" ''' compute the gaussian with the specified mean(mu) and sigma'''\n",
|
||||
" return math.exp (-0.5 * (x-mu)**2 / sigma) / math.sqrt(2.*math.pi*sigma)\n",
|
||||
"\n",
|
||||
"def plt_g (mu,gamma):\n",
|
||||
" xs = arange(0,10,0.15)\n",
|
||||
" ys = [gaussian (x, mu,gamma) for x in xs]\n",
|
||||
" plot (xs, ys)\n",
|
||||
" show()\n",
|
||||
"\n",
|
||||
" \n",
|
||||
"interact (plt_g, mu=(0,10), gamma=(0.01,6))"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x7cc5978>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 2,
|
||||
"text": [
|
||||
"<function __main__.plt_g>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:590f0bf7162a3bfaae7a3f473dc035e859b9b29d9c8a7e0a72698e7589560fdc"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
"worksheets": [
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"def to_array(x):\n",
|
||||
" try:\n",
|
||||
" x.shape\n",
|
||||
" try:\n",
|
||||
" if type(x) != numpy.ndarray:\n",
|
||||
" x=asarray(x)[0]\n",
|
||||
" return x\n",
|
||||
" except:\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
" except:\n",
|
||||
" return array(mat(x)).reshape(1)\n",
|
||||
"\n",
|
||||
"def to_cov(x,n):\n",
|
||||
" try:\n",
|
||||
" x.shape\n",
|
||||
" return x\n",
|
||||
" except:\n",
|
||||
" return eye(n) * x\n",
|
||||
" \n",
|
||||
"def multivariate_gaussian (x, mu, cov):\n",
|
||||
" \"\"\" This is designed to work the same as scipy.stats.multivariate_normal\n",
|
||||
" which is available before version 0.14. You may either pass in a \n",
|
||||
" multivariate set of data:\n",
|
||||
" multivariate_gaussian (array([1,1]), array([3,4]), eye(2)*1.4)\n",
|
||||
" or unidimensional data:\n",
|
||||
" multivariate_gaussian(1, 3, 1.4)\n",
|
||||
" \n",
|
||||
" In the multivariate case if cov is a scalar it is interpreted as eye(n)*cov\n",
|
||||
" \"\"\"\n",
|
||||
" \n",
|
||||
" # force all to numpy.array type\n",
|
||||
" x = to_array(x)\n",
|
||||
" mu = to_array(mu)\n",
|
||||
" n = mu.size\n",
|
||||
" cov = to_cov (cov, n)\n",
|
||||
"\n",
|
||||
" det = numpy.sqrt(numpy.prod(numpy.diag(cov)))\n",
|
||||
" frac = (2*numpy.pi)**(-n/2.0) * (1.0/det)\n",
|
||||
" fprime = x - mu\n",
|
||||
" fprime **= 2\n",
|
||||
" m = frac * numpy.exp(-0.5*numpy.dot(fprime, 1/numpy.diag(cov)))\n",
|
||||
" return m\n",
|
||||
"\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print mvg (array([1,1]), array([1,1]), eye(2))\n",
|
||||
"print mvg (mat([1,1]), mat([1,1]), eye(2))\n",
|
||||
"print mvg (2,3,1)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"print numpy.array(3)\n",
|
||||
"print pylab.rcParams['figure.figsize']"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"class KalmanFilter1D(object):\n",
|
||||
"\n",
|
||||
" def __init__ (self, x0, var):\n",
|
||||
" self.mean = x0\n",
|
||||
" self.variance = var\n",
|
||||
"\n",
|
||||
" def estimate(self, z, z_variance):\n",
|
||||
" self.mean = \\\n",
|
||||
" (self.variance*z + z_variance*self.mean) / \\\n",
|
||||
" self.variance + z_variance\n",
|
||||
" self.variance = 1. / (1./self.variance+ 1./z_variance)\n",
|
||||
"\n",
|
||||
"f = KalmanFilter1D(1,2)\n",
|
||||
"f.estimate(z = 2,\n",
|
||||
" z_variance = 3)\n",
|
||||
"\n",
|
||||
"print f.mean, f.variance"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%%file test.py\n",
|
||||
"print 'hi'"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"%run test.py\n"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import math\n",
|
||||
"from IPython.html.widgets import interact, interactive, fixed\n",
|
||||
"#from IPython.html import widgets\n",
|
||||
"#from IPython.display import clear_output, display, HTML\n",
|
||||
"\n",
|
||||
"def gaussian (x, mu, sigma):\n",
|
||||
" ''' compute the gaussian with the specified mean(mu) and sigma'''\n",
|
||||
" return math.exp (-0.5 * (x-mu)**2 / sigma) / math.sqrt(2.*math.pi*sigma)\n",
|
||||
"\n",
|
||||
"def plt_g (mu,gamma):\n",
|
||||
" xs = arange(0,10,0.15)\n",
|
||||
" ys = [gaussian (x, mu,gamma) for x in xs]\n",
|
||||
" plot (xs, ys)\n",
|
||||
" show()\n",
|
||||
"\n",
|
||||
" \n",
|
||||
"interact (plt_g, mu=(0,10), gamma=(0.01,6))"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
+41
-266
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:8d7cf224140d3802499c78af56da276f1e1e580fa08934a23e11b1ea2301209a"
|
||||
"signature": "sha256:1a6b28b567f1c5631b9b36052e0f65cf80787c42b18cc448bbc07857f94a982a"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -17,22 +17,6 @@
|
||||
"The Kalman filter belongs to a family of filters called *bayesian filters*. Without going into"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
@@ -59,7 +43,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 1
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -77,7 +61,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 2
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -105,17 +89,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x848df28>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 3
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -135,16 +110,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"pos = [ 0.3 0.3 0. 0. 0. 0. 0. 0. 0.3 0. ]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 4
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -170,16 +137,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[0 1 0 0 0 0 0 0 0 0]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 5
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -226,17 +185,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.12 0.12 0.04 0.04 0.04 0.04 0.04 0.04 0.12 0.04]\n",
|
||||
"sum = 0.64\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 6
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -275,18 +225,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"sum = 1.0\n",
|
||||
"probability of door = 0.1875\n",
|
||||
"probability of wall = 0.0625\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 7
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -332,17 +272,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"pos before update = [ 0.4 0.1 0.2 0.3]\n",
|
||||
"pos after update = [ 0.3 0.4 0.1 0.2]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 8
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -379,16 +310,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0. 0. 0. 0. 0.1 0.8 0.1 0. ]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -407,16 +330,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0. 0. 0. 0.04 0.38 0.52 0.06 0. ]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 10
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -435,17 +350,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x848dac8>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 11
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -466,24 +372,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEACAYAAACnJV25AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAF7RJREFUeJzt239M1Pfhx/HXOVjMYPVXqNQ7GpQ75QA9sLBLmzXDxYzi\nJrGVNtQ6TKUd2bIYG/9Y9lfr/qiyzqQ49gdbOhvTxvrHNmEFyUb6vZXUEmLEbglztd3RHmd13fal\nSlEPzvf3D1u+onCcFT98fPf5SD4Jn/u8P5/366PkdR8+dx+PMcYIAGCNeXMdAAAwuyh2ALAMxQ4A\nlqHYAcAyFDsAWIZiBwDLpFXsXV1dKiwsVCAQUFNT0w3bT506pfvvv1/z58/Xvn37Jl6PxWJat26d\niouLVVJSov37989ecgDAlDwzfY89mUxq1apV6u7ultfrVUVFhQ4dOqRgMDgx5uOPP9YHH3ygI0eO\naNGiRdq1a5ck6ezZszp79qxKS0s1MjKi++67T0eOHJm0LwBgds14xd7X1ye/36/8/HxlZmaqrq5O\nbW1tk8bk5OSovLxcmZmZk17Pzc1VaWmpJCk7O1vBYFBnzpyZxfgAgOvNWOzxeFx5eXkT6z6fT/F4\n/KYnGhwcVH9/v8Lh8E3vCwBI34zF7vF4bnmSkZER1dbWqrm5WdnZ2bd8PADA9DJmGuD1ehWLxSbW\nY7GYfD5f2hOMjY1p8+bN2rp1qzZt2nTD9tLSUr3zzjtpHw8AIIVCIZ08eXLKbTNesZeXl+v06dMa\nHBxUIpHQ4cOHVVNTM+XY6z+HNcaooaFBRUVF2rlz55T7vPPOOzLG3NLy7LPP3vIxZmNxQw43ZHBL\nDjK4K4cbMrglx2xkSHVBPOMVe0ZGhlpaWlRVVaVkMqmGhgYFg0G1trZKkhobG3X27FlVVFTo/Pnz\nmjdvnpqbmzUwMKCTJ0/qlVde0Zo1a1RWViZJ2rNnjx566KGZpgUAfEEzFrskVVdXq7q6etJrjY2N\nEz/n5uZOul3zuW9+85u6cuXKLUYEANwMK548raysnOsIktyRww0ZJHfkIMP/c0MON2SQ3JHjdmeY\n8QGl283j8WiOIwDAHSdVd1pxxQ4A+H8UOwBYhmIHAMtQ7ABgGYodACxDsQOAZSh2ALAMxQ4AlqHY\nAcAyFDsAWIZiBwDLUOwAYBmKHQAsQ7EDgGUodgCwDMUOAJah2AHAMhQ7AFiGYgcAy1DsAGAZih0A\nLEOxA4BlKHYAsAzFDgCWodgBwDIUOwBYZsZi7+rqUmFhoQKBgJqamm7YfurUKd1///2aP3++9u3b\nd1P7AgBmn8cYY6bbmEwmtWrVKnV3d8vr9aqiokKHDh1SMBicGPPxxx/rgw8+0JEjR7Ro0SLt2rUr\n7X0lyePxKEUEAMAUUnVnyiv2vr4++f1+5efnKzMzU3V1dWpra5s0JicnR+Xl5crMzLzpfQEAsy9l\nscfjceXl5U2s+3w+xePxtA58K/sCAL64lMXu8Xi+8IFvZV8AwBeXkWqj1+tVLBabWI/FYvL5fGkd\n+Gb2depN4OtfX6Tz5/875ba77lqsCxf+d05zuCGDW3K4IYNbcrghg5M53JDBLTmuzRCJRBSJRNLb\n0aQwNjZmVqxYYaLRqLl8+bIJhUJmYGBgyrHPPvus+cUvfnHT+0oyknFomf503ZDDDRncksMNGdyS\nww0ZnM3hhgxuyZE6w3RSXrFnZGSopaVFVVVVSiaTamhoUDAYVGtrqySpsbFRZ8+eVUVFhc6fP695\n8+apublZAwMDys7OnnJfAMDtlfLrjo4E8HgkORVh+q8HuSGHGzK4JYcbMrglhxsyOJvDDRnckiN1\nhum28eQpAFiGYgcAy1DsAGAZih0ALEOxA4BlKHYAsAzFDgCWodgBwDIUOwBYhmIHAMtQ7ABgGYod\nACxDsQOAZSh2ALAMxQ4AlqHYAcAyFDsAWIZiBwDLUOwAYBmKHQAsQ7EDgGUodgCwDMUOAJah2AHA\nMhQ7AFiGYgcAy1DsAGAZih0ALEOxA4BlZiz2rq4uFRYWKhAIqKmpacoxO3bsUCAQUCgUUn9//8Tr\ne/bsUXFxsVavXq0tW7bo8uXLs5ccADA1k8L4+LgpKCgw0WjUJBIJEwqFzMDAwKQxHR0dprq62hhj\nTG9vrwmHw8YYY6LRqFm+fLm5dOmSMcaYxx57zLz88ss3zCHJSMahZfrTdUMON2RwSw43ZHBLDjdk\ncDaHGzK4JUfqDNNJecXe19cnv9+v/Px8ZWZmqq6uTm1tbZPGtLe3a9u2bZKkcDis4eFhnTt3Tnfd\ndZcyMzM1Ojqq8fFxjY6Oyuv1zsqbEQBgeimLPR6PKy8vb2Ld5/MpHo+nNWbx4sXatWuX7r33Xi1b\ntkwLFy7U+vXrZzk+AOB6Gak2ejyetA5y9a+Cyd5//329+OKLGhwc1IIFC/Too4/q1Vdf1RNPPDHF\nEZ675ufKzxYAwOcikYgikUhaY1MWu9frVSwWm1iPxWLy+XwpxwwNDcnr9SoSieiBBx7QkiVLJEmP\nPPKIjh07lkaxAwCuV1lZqcrKyon13bt3Tzs25a2Y8vJynT59WoODg0okEjp8+LBqamomjampqdHB\ngwclSb29vVq4cKGWLl2qVatWqbe3VxcvXpQxRt3d3SoqKrqF0wIApCPlFXtGRoZaWlpUVVWlZDKp\nhoYGBYNBtba2SpIaGxu1YcMGdXZ2yu/3KysrSwcOHJAklZaWqr6+XuXl5Zo3b57Wrl2rH/zgB7f/\njADgS85jprpB7mQAj0eSUxE8U34e4JYcbsjglhxuyOCWHG7I4GwON2RwS47UGabbxpOnAGAZih0A\nLEOxA4BlKHYAsAzFDgCWodgBwDIUOwBYhmIHAMtQ7ABgGYodACxDsQOAZSh2ALAMxQ4AlqHYAcAy\nFDsAWIZiBwDLUOwAYBmKHQAsQ7EDgGUodgCwDMUOAJah2AHAMhQ7AFiGYgcAy1DsAGAZih0ALEOx\nA4BlKHYAsMyMxd7V1aXCwkIFAgE1NTVNOWbHjh0KBAIKhULq7++feH14eFi1tbUKBoMqKipSb2/v\n7CUHAEzNpDA+Pm4KCgpMNBo1iUTChEIhMzAwMGlMR0eHqa6uNsYY09vba8Lh8MS2+vp689JLLxlj\njBkbGzPDw8M3zCHJSMahZfrTdUMON2RwSw43ZHBLDjdkcDaHGzK4JUfqDNNJecXe19cnv9+v/Px8\nZWZmqq6uTm1tbZPGtLe3a9u2bZKkcDis4eFhnTt3Tp988ol6enq0fft2SVJGRoYWLFhw6+9EAICU\nUhZ7PB5XXl7exLrP51M8Hp9xzNDQkKLRqHJycvTkk09q7dq1evrppzU6OjrL8QEA18tItdHj8aR1\nkKt/FUzeb3x8XCdOnFBLS4sqKiq0c+dO7d27Vz/72c+mOMJz1/xc+dkCAPhcJBJRJBJJa2zKYvd6\nvYrFYhPrsVhMPp8v5ZihoSF5vV4ZY+Tz+VRRUSFJqq2t1d69e6eZ6bm0wgLAl1VlZaUqKysn1nfv\n3j3t2JS3YsrLy3X69GkNDg4qkUjo8OHDqqmpmTSmpqZGBw8elCT19vZq4cKFWrp0qXJzc5WXl6d3\n331XktTd3a3i4uIvek4AgDSlvGLPyMhQS0uLqqqqlEwm1dDQoGAwqNbWVklSY2OjNmzYoM7OTvn9\nfmVlZenAgQMT+//yl7/UE088oUQioYKCgknbAAC3h8dcf4Pc6QAejySnInhu+DzATTnckMEtOdyQ\nwS053JDB2RxuyOCWHKkzTLeNJ08BwDIUOwBYhmIHAMtQ7ABgGYodACxDsQOAZSh2ALAMxQ4AlqHY\nAcAyFDsAWIZiBwDLUOwAYBmKHQAsQ7EDgGUodgCwDMUOAJah2AHAMhQ7AFiGYgcAy1DsAGAZih0A\nLEOxA4BlKHYAsAzFDgCWodgBwDIUOwBYhmIHAMtQ7ABgmRmLvaurS4WFhQoEAmpqappyzI4dOxQI\nBBQKhdTf3z9pWzKZVFlZmTZu3Dg7iQEAKaUs9mQyqR//+Mfq6urSwMCADh06pL///e+TxnR2duq9\n997T6dOn9etf/1o//OEPJ21vbm5WUVGRPB7P7KcHANwgZbH39fXJ7/crPz9fmZmZqqurU1tb26Qx\n7e3t2rZtmyQpHA5reHhY586dkyQNDQ2ps7NTTz31lIwxt+kUAADXSlns8XhceXl5E+s+n0/xeDzt\nMc8884xeeOEFzZvHrXwAcEpGqo3p3j65/mrcGKPXX39dd999t8rKyhSJRGY4wnPX/Fz52QIA+Fwk\nEkmjS69KWexer1exWGxiPRaLyefzpRwzNDQkr9er3/3ud2pvb1dnZ6cuXbqk8+fPq76+XgcPHpxi\npufSCgsAX1aVlZWqrKycWN+9e/f0g00KY2NjZsWKFSYajZrLly+bUChkBgYGJo3p6Ogw1dXVxhhj\n3n77bRMOh284TiQSMd/73vemnEOSkYxDy/Sn64YcbsjglhxuyOCWHG7I4GwON2RwS47UGaaT8oo9\nIyNDLS0tqqqqUjKZVENDg4LBoFpbWyVJjY2N2rBhgzo7O+X3+5WVlaUDBw5MeSy+FQMAzvB81vxz\nF8DjkeRUBI+mO1035HBDBrfkcEMGt+RwQwZnc7ghg1typM4w3Ta+rgIAlqHYAcAyFDsAWIZiBwDL\nUOwAYBmKHQAsQ7EDgGUodgCwDMUOAJah2AHAMhQ7AFiGYgcAy1DsAGAZih0ALEOxA4BlKHYAsAzF\nDgCWodgBwDIUOwBYhmIHAMtQ7ABgGYodACxDsQOAZSh2ALAMxQ4AlqHYAcAyFDsAWIZiBwDLpFXs\nXV1dKiwsVCAQUFNT05RjduzYoUAgoFAopP7+fklSLBbTunXrVFxcrJKSEu3fv3/2kgMApmLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x8484f28>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 12
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -504,25 +394,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.10407069 0.10329322 0.10125784 0.09874205 0.09670682 0.09592945\n",
|
||||
" 0.09670682 0.09874205 0.10125784 0.10329322]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x8639240>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 13
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -554,27 +427,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.1875 0.1875 0.0625 0.0625 0.0625 0.0625 0.0625 0.0625 0.1875\n",
|
||||
" 0.0625]\n",
|
||||
"[ 0.0875 0.175 0.175 0.075 0.0625 0.0625 0.0625 0.0625 0.075\n",
|
||||
" 0.1625]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEACAYAAACnJV25AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHORJREFUeJzt3X9Mk3fiB/B3OXohJyJKUGafLmy02ha04No1muyuLuaY\n3kk25S5MDWarG9nFeCxedtlfB/tD5YyJTO4Ptuy8M7cgyf0QTmtzx+3bG5kjxICeCfOGHt1KGd7u\n9mXAUAvd5/sHrl8r8LQqPH38+H4lTXh4Pk8/7yK8eXza8jEIIQSIiEgaGekOQERE84vFTkQkGRY7\nEZFkWOxERJJhsRMRSYbFTkQkmaTFHggEYLPZYLVa0dDQMGP/5cuXsX79emRlZeHIkSMJ+w4ePIji\n4mKsWbMGO3bswM2bN+cvORERzUq12GOxGPbu3YtAIIC+vj60tLTgo48+ShiTl5eHY8eO4Wc/+1nC\n50OhEN5++2309PTg0qVLiMViOHny5Pw/AiIiSqBa7N3d3bBYLCgsLITRaERVVRXa2toSxuTn58Pl\ncsFoNCZ8PicnB0ajERMTE5iamsLExARMJtP8PwIiIkqgWuyRSARmszm+rSgKIpFISne8bNky7N+/\nH48++ihWrlyJ3NxcbNq06f7SEhFRUqrFbjAY7vmOr169iqNHjyIUCmFoaAjj4+N499137/n+iIgo\nNZlqO00mE8LhcHw7HA5DUZSU7vj8+fPYsGED8vLyAADbtm3DuXPnsHPnzoRxpaWluHjx4t3mJiJ6\nqDmdTly4cGHWfapn7C6XC/39/QiFQohGo2htbUVFRcWsY+/8W2I2mw1dXV24fv06hBDo6OiAw+GY\ncdzFixchhLiv2y9+8Yv7vo/5uOkhhx4y6CUHM+grhx4y6CXHfGRQOyFWPWPPzMxEU1MTysvLEYvF\n4PP5YLfb0dzcDACoqanB8PAw3G43RkdHkZGRgcbGRvT19cHpdKK6uhoulwsZGRlYt24dXn75ZbXp\niIhoHqgWOwBs3rwZmzdvTvhcTU1N/OOCgoKEyzW3e+211/Daa6/dZ0QiIrobUrzz1Ov1pjsCAH3k\n0EMGQB85mOH/6SGHHjIA+six0BkMQoi0LrRhMBiQ5ghERA8cte6U4ox9PuTkLIPBYNDklpOzTLcZ\niOjBxzP223IAWuWY/THrIQMRPRh4xk5E9BBhsRMRSYbFTkQkGRY7EZFkWOxERJJhsRMRSYbFTkQk\nGRY7EZFkWOxERJJhsRMRSYbFTkQkGRY7EZFkkhZ7IBCAzWaD1WpFQ0PDjP2XL1/G+vXrkZWVhSNH\njiTsGxkZQWVlJex2OxwOB7q6uuYvORERzUp1BaVYLIa9e/eio6MDJpMJbrcbFRUVsNvt8TF5eXk4\nduwYTp06NeP4n/70p9iyZQt+//vfY2pqCl999dX8PwIiIo3l5CzD2Nj/Lvg8ixcvxejoF3d9nOoZ\ne3d3NywWCwoLC2E0GlFVVYW2traEMfn5+XC5XDAajQmf//LLL9HZ2YkXX3wRwPT6qUuWLLnrgERE\nejNd6mLBb/f6y0O12CORCMxmc3xbURREIpGU7nhgYAD5+fl44YUXsG7dOrz00kuYmJi4p5BERJQ6\n1Usx0ws/3JupqSn09PSgqakJbrcbtbW1OHToEN54440ZY+vq6uIfe71eXaxJSESkJ8FgEMFgMKWx\nqsVuMpkQDofj2+FwGIqipHTHiqJAURS43W4AQGVlJQ4dOjTr2NuLnYiIZrrzpLe+vn7OsaqXYlwu\nF/r7+xEKhRCNRtHa2oqKiopZx965RFNBQQHMZjM+/vhjAEBHRweKi4tTfQxERHSPkq55evbsWdTW\n1iIWi8Hn8+H1119Hc3MzAKCmpgbDw8Nwu90YHR1FRkYGFi9ejL6+PmRnZ+PixYvYs2cPotEoioqK\ncPz48RlPoHLNU31lIKLktPtZnfvnVK07uZj1bTnSXap6yEBEyem92PnOUyIiybDYiYgkw2InIpIM\ni52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgk\nw2InIpIMi52ISDJJiz0QCMBms8FqtaKhoWHG/suXL2P9+vXIysrCkSNHZuyPxWIoKyvD1q1b5ycx\nERGpUl3MOhaLYe/evejo6IDJZILb7UZFRQXsdnt8TF5eHo4dO4ZTp07Neh+NjY1wOBwYGxub3+RE\nRDQr1TP27u5uWCwWFBYWwmg0oqqqCm1tbQlj8vPz4XK5YDQaZxw/ODgIv9+PPXv2cBk2IiKNqBZ7\nJBKB2WyObyuKgkgkkvKdv/rqqzh8+DAyMngpn4hIK6qXYqYXbL03p0+fxvLly1FWVoZgMKg6tq6u\nLv6x1+uF1+u953mJiGQUDAaTduk3VIvdZDIhHA7Ht8PhMBRFSemOz507h/b2dvj9fty4cQOjo6Oo\n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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x86506a0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 14
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -593,25 +447,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.15671642 0.31343284 0.10447761 0.04477612 0.03731343 0.03731343\n",
|
||||
" 0.03731343 0.03731343 0.13432836 0.09701493]\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x86394a8>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 15
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -630,17 +467,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x848d898>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 16
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -659,17 +487,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x849f4e0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 17
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -705,25 +524,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x8642588>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"[ 0.2245871 0.06288015 0.06109133 0.0581008 0.09334062 0.2245871\n",
|
||||
" 0.06288015 0.06109133 0.0581008 0.09334062]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 18
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -742,17 +544,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x84960f0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 19
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -774,17 +567,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x865fa58>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 20
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -837,17 +621,8 @@
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "SyntaxError",
|
||||
"evalue": "invalid syntax (<ipython-input-21-5eaa20e350b9>, line 1)",
|
||||
"output_type": "pyerr",
|
||||
"traceback": [
|
||||
"\u001b[1;36m File \u001b[1;32m\"<ipython-input-21-5eaa20e350b9>\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m Author notes:\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 21
|
||||
"outputs": [],
|
||||
"prompt_number": ""
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
|
||||
Reference in new issue
Block a user