Added notebook to allow running via try.jupyter.org

I need a way for people to run the book's animations. From this
notebook they can cut and paste code into try.jupyter.org.
This commit is contained in:
Roger Labbe committed 2015-07-12 15:57:05 -07:00
1 parent 8e0d2f3185
commit 9064053e85
1 file changed
+126
+126
View File
@@ -0,0 +1,126 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Interactions\n",
"\n",
"This is a collection of interactions, mostly from the book. If you have are reading a print version of the book, or are reading it online via Github or nbviewer you will be unable to run the interactions.\n",
"\n",
"So I have created this notebook. Here is how you run an interaction if you do not have IPython installed on your computer.\n",
"\n",
"1. Go to try.juptyer.org in your browser. It will launch a temporary notebook server for you.\n",
"\n",
"2. Click the **New** button and select `Python 3`. This will create a new notebook that will run Python 3 for you in your browser.\n",
"\n",
"3. Copy the entire contents of a cell from this notebook and paste it into a 'code' cell in the notebook on your browser. \n",
"\n",
"4. Press CTRL+ENTER to execute the cell.\n",
"\n",
"5. Have fun! Change code. Play. Experiment. Hack.\n",
"\n",
"Your server and notebook is not permanently saved. Once you close the session your data is lost. Yes, it says it is saving your file if you press save, and you can see it in the directory. But that is just happening in a Docker container that will be deleted as soon as you close the window. Copy and paste any changes you want to keep to an external file.\n",
"\n",
"Of course if you have IPython installed you can download this notebook and run it on your own computer. Type\n",
"\n",
" ipython notebook\n",
" \n",
"in a command prompt from the directory where you downloaded this file. Click on the name of this file to open it."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Experimenting with FPF'\n",
"\n",
"\n",
"The Kaman filter uses the equation $x^- = FPF^\\mathsf{T}$.\n",
"\n",
"**blah**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc9eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from IPython.html.widgets import interact, interactive, fixed\n",
"import IPython.html.widgets as widgets\n",
"import numpy as np\n",
"import numpy.linalg as linalg\n",
"import math\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.patches import Ellipse\n",
"\n",
"def plot_covariance_ellipse(x, P, edgecolor='k', ls='solid'):\n",
" U,s,v = linalg.svd(P)\n",
" angle = math.atan2(U[1,0],U[0,0])\n",
" width = math.sqrt(s[0]) * 2\n",
" height = math.sqrt(s[1]) * 2\n",
"\n",
" ax = plt.gca()\n",
" e = Ellipse(xy=(0, 0), width=width, height=height, angle=angle,\n",
" edgecolor=edgecolor, facecolor='none',\n",
" lw=2, ls=ls)\n",
" ax.add_patch(e)\n",
" \n",
" \n",
"def plot_FPFT(F00, F01, F10, F11, covar):\n",
" \n",
" dt = 1.\n",
" x = np.array((0, 0.))\n",
" P = np.array(((1, covar), (covar, 2)))\n",
" F = np.array(((F00, F01), (F10, F11)))\n",
"\n",
" plot_covariance_ellipse(x, P)\n",
" plot_covariance_ellipse(x, np.dot(F, P).dot(F.T), edgecolor='r')\n",
" plt.axis('equal')\n",
" \n",
"interact(plot_FPFT, \n",
" F00=widgets.IntSliderWidget(value=1, min=0, max=2.), \n",
" F01=widgets.FloatSliderWidget(value=1, min=0., max=2., description='F01(dt)'),\n",
" F10=widgets.FloatSliderWidget(value=0, min=0., max=2.),\n",
" F11=widgets.FloatSliderWidget(value=1, min=0., max=2.),\n",
" covar=widgets.FloatSliderWidget(value=0, min=0, max=1.));"
]
}
],
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}