Moved Taylor Series to supporting notebooks.

This commit is contained in:
Roger Labbe committed 2016-01-01 15:28:55 -08:00
1 parent b2a3ce2a28
commit 47cce41efb
2 files changed
+281 -88

No files matched your search

+189 -88
View File
@@ -489,7 +489,7 @@
"\n",
"$\\mathbf x_k$ does not mean the k$^{th}$ value of $\\mathbf x$, but the value of $\\mathbf x$ at the k$^{th}$ value of $t$.\n",
"\n",
"Broadly speaking there are three common ways to find this matrix for Kalman filters. The technique most often used with Kalman filters is to use a Taylor-series expansion. Linear Time Invariant Theory, also known as LTI System Theory, is a second technique. Finally, there are numerical techniques. You may know of others, but these three are what you will most likely encounter in the Kalman filter literature and praxis."
"Broadly speaking there are three common ways to find this matrix for Kalman filters. The technique most often used with Kalman filters is to use a matrix exponential. Linear Time Invariant Theory, also known as LTI System Theory, is a second technique. Finally, there are numerical techniques. You may know of others, but these three are what you will most likely encounter in the Kalman filter literature and praxis."
]
},
{
@@ -1231,12 +1231,23 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 12,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1ecb9df2278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"t = np.linspace(-1, 1, 10)\n",
@@ -1255,11 +1266,22 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1ecb9ffa7b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import book_plots\n",
"t = np.linspace(-1, 2, 20)\n",
@@ -1278,7 +1300,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 14,
"metadata": {
"collapsed": true
},
@@ -1295,11 +1317,20 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2.0\n",
"4.0\n"
]
}
],
"source": [
"def dx(t, y): return y\n",
"\n",
@@ -1316,11 +1347,22 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1ecba098470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ys = euler(0, 4, 1, dx, step=0.00001)\n",
"plt.subplot(1,2,1)\n",
@@ -1334,11 +1376,22 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"exact answer= 54.5981500331\n",
"euler answer= 54.59705808834125\n",
"difference = 0.00109194480299\n",
"iterations = 400000\n"
]
}
],
"source": [
"print('exact answer=', np.exp(4))\n",
"print('euler answer=', ys[-1])\n",
@@ -1406,7 +1459,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 18,
"metadata": {
"collapsed": false
},
@@ -1444,11 +1497,29 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"max error 5.206970035942504e-05\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1ecbc11be80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import math\n",
"import numpy as np\n",
@@ -1475,71 +1546,6 @@
"print(\"max error {}\".format(max(error)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Linearizing with the Taylor Series\n",
"\n",
"Taylor series represents a function as an infinite sum of terms. The terms are linear, even for a nonlinear function, so we can express any arbitrary nonlinear function using linear algebra. The cost of this choice is that unless we use an infinite number of terms the value we compute will be approximate rather than exact.\n",
"\n",
"Before applying it to a matrix lets do the Taylor expansion of a real function since this is much easier to visualize. I choose sin(x). The Taylor series for a real or complex function f(x) at x=a is the infinite series\n",
"\n",
"$$f(x) = f(a) + f'(a)(x-a) + \\frac{f''(a)}{2!}(x-a)^2 + \\, ...\\, + \\frac{f^{(n)}(a)}{n!}(x-a)^n + \\, ...$$\n",
"\n",
"where $f^{n}$ is the nth derivative of f. To compute the Taylor series for $f(x)=sin(x)$ at $x=0$ Let's first work out the terms for f.\n",
"\n",
"$$\\begin{aligned}\n",
"f^{0}(x) &= sin(x) ,\\ \\ &f^{0}(0) &= 0 \\\\\n",
"f^{1}(x) &= cos(x),\\ \\ &f^{1}(0) &= 1 \\\\\n",
"f^{2}(x) &= -sin(x),\\ \\ &f^{2}(0) &= 0 \\\\\n",
"f^{3}(x) &= -cos(x),\\ \\ &f^{3}(0) &= -1 \\\\\n",
"f^{4}(x) &= sin(x),\\ \\ &f^{4}(0) &= 0 \\\\\n",
"f^{5}(x) &= cos(x),\\ \\ &f^{5}(0) &= 1\n",
"\\end{aligned}\n",
"$$\n",
"\n",
"Now we can substitute these values into the equation.\n",
"\n",
"$$\\sin(x) = \\frac{0}{0!}(x)^0 + \\frac{1}{1!}(x)^1 + \\frac{0}{2!}(x)^2 + \\frac{-1}{3!}(x)^3 + \\frac{0}{4!}(x)^4 + \\frac{-1}{5!}(x)^5 + ... $$\n",
"\n",
"And let's test this with some code:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"estimate of sin(.3) is 0.30452025\n",
"exact value of sin(.3) is 0.295520206661\n"
]
}
],
"source": [
"x = .3\n",
"estimate = x + x**3/6 + x**5/120\n",
"exact = np.sin(.3)\n",
"\n",
"print('estimate of sin(.3) is', estimate)\n",
"print('exact value of sin(.3) is', exact)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is not bad for only three terms. If you are curious, go ahead and implement this as a Python function to compute the series for an arbitrary number of terms.\n",
"\n",
"Now we can consider how to linearize a nonlinear "
]
},
{
"cell_type": "markdown",
"metadata": {},
@@ -1796,11 +1802,22 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x1ecbc04b2e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from book_format import set_figsize, figsize\n",
"\n",
@@ -2010,11 +2027,39 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"iteration: 1\n",
"innovation [-148.512 28.6789 -148.5361]\n",
"pos [ 805.4175 205.2868]\n",
"\n",
"\n",
"iteration: 2\n",
"innovation [-0.1177 -7.4049 -0.1599]\n",
"pos [ 800.04 199.9746]\n",
"\n",
"\n",
"iteration: 3\n",
"innovation [-0.0463 -0.001 -0.0463]\n",
"pos [ 800. 200.]\n",
"\n",
"\n",
"iteration: 4\n",
"innovation [-0. -0. -0.]\n",
"pos [ 800. 200.]\n",
"\n",
"\n",
"Iterated solution: [ 800. 200.]\n"
]
}
],
"source": [
"import numpy as np\n",
"from numpy.linalg import norm, inv\n",
@@ -2115,12 +2160,35 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 22,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"iteration: 1\n",
"innovation [-0.0009 -1.3868 -0.0024]\n",
"pos [ 800.0014 199.9991]\n",
"\n",
"\n",
"iteration: 2\n",
"innovation [-0.0016 -0. -0.0016]\n",
"pos [ 800. 200.]\n",
"\n",
"\n",
"iteration: 3\n",
"innovation [-0. -0. -0.]\n",
"pos [ 800. 200.]\n",
"\n",
"\n",
"Iterated solution: [ 800. 200.]\n"
]
}
],
"source": [
"pos, converted = lop_ils(rz, sat_pos, (801, 201), hx=hx_ils)\n",
"print('Iterated solution: ', pos)"
@@ -2137,11 +2205,44 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"iteration: 1\n",
"innovation [ 129.8823 100.461 107.5398]\n",
"pos [ 831.4474 186.1222]\n",
"\n",
"\n",
"iteration: 2\n",
"innovation [-31.6446 -7.4837 -30.7861]\n",
"pos [ 800.3284 198.8076]\n",
"\n",
"\n",
"iteration: 3\n",
"innovation [-0.6041 -0.3813 0.3569]\n",
"pos [ 799.948 198.6026]\n",
"\n",
"\n",
"iteration: 4\n",
"innovation [-0.4803 0.0004 0.4802]\n",
"pos [ 799.9476 198.6025]\n",
"\n",
"\n",
"iteration: 5\n",
"innovation [-0.4802 0.0007 0.4803]\n",
"pos [ 799.9476 198.6025]\n",
"\n",
"\n",
"Iterated solution: [ 799.948 198.602]\n"
]
}
],
"source": [
"# add some noise\n",
"nrz = []\n",
@@ -0,0 +1,92 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Linearizing with Taylor Series\n",
"\n",
"Taylor series represents a function as an infinite sum of terms. The terms are linear, even for a nonlinear function, so we can express any arbitrary nonlinear function using linear algebra. The cost of this choice is that unless we use an infinite number of terms the value we compute will be approximate rather than exact.\n",
"\n",
"Before applying it to a matrix lets do the Taylor expansion of a real function since this is much easier to visualize. I choose sin(x). The Taylor series for a real or complex function f(x) at x=a is the infinite series\n",
"\n",
"$$f(x) = f(a) + f'(a)(x-a) + \\frac{f''(a)}{2!}(x-a)^2 + \\, ...\\, + \\frac{f^{(n)}(a)}{n!}(x-a)^n + \\, ...$$\n",
"\n",
"where $f^{n}$ is the nth derivative of f. To compute the Taylor series for $f(x)=sin(x)$ at $x=0$ Let's first work out the terms for f.\n",
"\n",
"$$\\begin{aligned}\n",
"f^{0}(x) &= sin(x) ,\\ \\ &f^{0}(0) &= 0 \\\\\n",
"f^{1}(x) &= cos(x),\\ \\ &f^{1}(0) &= 1 \\\\\n",
"f^{2}(x) &= -sin(x),\\ \\ &f^{2}(0) &= 0 \\\\\n",
"f^{3}(x) &= -cos(x),\\ \\ &f^{3}(0) &= -1 \\\\\n",
"f^{4}(x) &= sin(x),\\ \\ &f^{4}(0) &= 0 \\\\\n",
"f^{5}(x) &= cos(x),\\ \\ &f^{5}(0) &= 1\n",
"\\end{aligned}\n",
"$$\n",
"\n",
"Now we can substitute these values into the equation.\n",
"\n",
"$$\\sin(x) = \\frac{0}{0!}(x)^0 + \\frac{1}{1!}(x)^1 + \\frac{0}{2!}(x)^2 + \\frac{-1}{3!}(x)^3 + \\frac{0}{4!}(x)^4 + \\frac{-1}{5!}(x)^5 + ... $$\n",
"\n",
"And let's test this with some code:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"estimate of sin(.3) is 0.30452025\n",
"exact value of sin(.3) is 0.295520206661\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"x = .3\n",
"estimate = x + x**3/6 + x**5/120\n",
"exact = np.sin(.3)\n",
"\n",
"print('estimate of sin(.3) is', estimate)\n",
"print('exact value of sin(.3) is', exact)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is not bad for only three terms. If you are curious, go ahead and implement this as a Python function to compute the series for an arbitrary number of terms.\n",
"\n",
"Now we can consider how to linearize a nonlinear "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.0"
}
},
"nbformat": 4,
"nbformat_minor": 0
}