diff --git a/code/chap01mine.ipynb b/code/chap01mine.ipynb new file mode 100644 index 00000000..a651979a --- /dev/null +++ b/code/chap01mine.ipynb @@ -0,0 +1,2520 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 1: Modeling\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Jupyter\n", + "\n", + "Welcome to Modeling and Simulation, welcome to Python, and welcome to Jupyter.\n", + "\n", + "This is a Jupyter notebook, which is a development environment where you can write and run Python code. Each notebook is divided into cells. Each cell contains either text (like this cell) or Python code (like the cell below this one).\n", + "\n", + "### Selecting and running cells\n", + "\n", + "To select a cell, click in the left margin next to the cell. You should see a blue frame surrounding the selected cell.\n", + "\n", + "To edit a code cell, click inside the cell. You should see a green frame around the selected cell, and you should see a cursor inside the cell.\n", + "\n", + "To edit a text cell, double-click inside the cell. Again, you should see a green frame around the selected cell, and you should see a cursor inside the cell.\n", + "\n", + "To run a cell, hold down SHIFT and press ENTER. If you run a text cell, it will typeset the text and display the result.\n", + "\n", + "If you run a code cell, it runs the Python code in the cell and displays the result, if any.\n", + "\n", + "To try it out, edit this cell, change some of the text, and then press SHIFT-ENTER to run it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Adding and removing cells\n", + "\n", + "You can add and remove cells from a notebook using the buttons in the toolbar and the items in the menu, both of which you should see at the top of this notebook.\n", + "\n", + "You might want to try the following exercises:\n", + "\n", + "1. From the Insert menu select \"Insert cell below\" to add a cell below this one. By default, you get a code cell, and you can see in the pulldown menu that says \"Code\".\n", + "\n", + "2. In the new cell, add a print statement like `print('Hello')`, and run it.\n", + "\n", + "3. Add another cell, select the new cell, and then click on the pulldown menu that says \"Code\" and select \"Markdown\". This makes the new cell a text cell.\n", + "\n", + "4. In the new cell, type some text, and then run it.\n", + "\n", + "5. Use the arrow buttons in the toolbar to move cells up and down.\n", + "\n", + "6. Use the cut, copy, and paste buttons to delete, add, and move cells.\n", + "\n", + "7. As you make changes, Jupyter saves your notebook automatically, but if you want to make sure, you can press the save button, which looks like a floppy disk from the 1990s.\n", + "\n", + "8. Finally, when you are done with a notebook, selection \"Close and Halt\" from the File menu." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hello\n" + ] + } + ], + "source": [ + "print('hello')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "text" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from modsim import *" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "heads\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "tails\n", + "heads\n", + "tails\n", + "tails\n", + "flipped\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
heads52
tails48
\n", + "
" + ], + "text/plain": [ + "heads 52\n", + "tails 48\n", + "dtype: int64" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "penny = System(heads=0, tails=0)\n", + "def flip_count(n, p):\n", + " for i in range(n):\n", + " if flip(p):\n", + " penny.heads +=1\n", + " print('heads')\n", + " else:\n", + " penny.tails +=1\n", + " print('tails')\n", + " print('flipped')\n", + "flip_count(100, 0.5)\n", + "penny" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using the notebooks\n", + "\n", + "The notebooks for each chapter contain the code from the chapter along with addition examples, explanatory text, and exercises. I recommend you read the chapter first to understand the concepts and vocabulary, then run the notebook to review what you learned and see it in action, and then attempt the exercises.\n", + "\n", + "The notebooks contain some explanatory text, but it is probably not enough to make sense if you have not read the book. If you are working through a notebook and you get stuck, you might want to re-read (or read!) the corresponding section of the book.\n", + "\n", + "If you try to work through the notebooks without reading the book, you're gonna have a bad time. If you have previous programming experience, you might get through the first few notebooks, but sooner or later, you will get to the end of your leash, and you won't like it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Importing modsim\n", + "\n", + "The following cell imports `modsim`, which is a collection of functions we will use throughout the book. Whenever you start the notebook, you will have to run the following cell. It does two things:\n", + "\n", + "1. It uses a Jupyter \"magic command\" to specify whether figures should appear in the notebook, or pop up in a new window.\n", + "\n", + "2. It imports everything defined in `modsim`.\n", + "\n", + "Select the following cell and press SHIFT-ENTER to run it." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "If this cell runs successfully, it produces no output other than this message.\n" + ] + } + ], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# To switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib qt5\n", + "\n", + "from modsim import *\n", + "\n", + "print('If this cell runs successfully, it produces no output other than this message.')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The penny myth\n", + "\n", + "The following cells contain code from the beginning of Chapter 1.\n", + "\n", + "`modsim` defines `UNITS`, which contains variables representing pretty much every unit you've ever heard of. The following to lines create new variables named `meter` and `second`." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "meter = UNITS.meter\n", + "second = UNITS.second" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To find out what units are defined, type `UNITS.` in the next cell and then press TAB. You should see a pop-up menu with a list of units." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "acre_foot" + ], + "text/latex": [ + "$acre_foot$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " UNITS.acre_feet" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a variable named `a` and display its value:" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = 9.8 * meter / second**2\n", + "a = 9.8 * meter / second**2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Create `t` and display its value:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "t = 4 * second\n", + "t = 4 * second" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "If you create a variable and don't display the value, you don't get any output:" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "762.0000000000002 meter" + ], + "text/latex": [ + "$762.0000000000002 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h = a * t**2\n", + "h" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Add a second line to the previous cell to display the value of `h`.\n", + "\n", + "Now let's solve the falling penny problem. The following lines set `h` to the height of the Empire State Building and compute the time it would take a penny to fall, assuming constant acceleration." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h = 381 * meter\n", + "t = sqrt(2 * h / a)\n", + "t" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Given `t`, we can compute the velocity of the penny when it lands." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "86.41527642726142 meter/second" + ], + "text/latex": [ + "$86.41527642726142 \\frac{meter}{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v = a * t\n", + "v" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can convert from one set of units to another like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mile = UNITS.mile\n", + "hour= UNITS.hour" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "193.30546802805438 mile/hour" + ], + "text/latex": [ + "$193.30546802805438 \\frac{mile}{hour}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v.to(mile/hour)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** In reality, air resistance prevents the penny from reaching this velocity. At about 20 meters per second, the force of air resistance equals the force of gravity and the penny stops accelerating.\n", + "\n", + "As a simplification, let's assume that the acceleration of the penny is `a` until the penny reaches 20 meters per second, and then 0 afterwards. What is the total time for the penny to fall 381 meters?" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "2.0408163265306123 second" + ], + "text/latex": [ + "$2.0408163265306123 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T = (20 * meter / second) / a\n", + "T" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "20.408163265306126 meter" + ], + "text/latex": [ + "$20.408163265306126 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "H = 0.5 * a * T**2\n", + "H" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "360.59183673469386 meter" + ], + "text/latex": [ + "$360.59183673469386 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h = 381 * meter - H\n", + "h" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "18.029591836734692 second" + ], + "text/latex": [ + "$18.029591836734692 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = h / v\n", + "t" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "answer is about 20.07 seconds\n" + ] + } + ], + "source": [ + "Q = t + T\n", + "Q\n", + "print('answer is about 20.07 seconds')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Modeling a bikeshare system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with a `System` object that represents the number of bikes at each station." + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2, babson=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you display the value of a `System` object, it lists the system variables and their values (not necessarily in the order you defined them):" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
babson0
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "babson 0\n", + "dtype: int64" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can access the system variables using dot notation." + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.olin" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.wellesley" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** What happens if you spell the name of a system variable wrong? Edit the previous cell, change the spelling of `wellesley`, and run the cell again.\n", + "\n", + "The error message uses the word \"attribute\", which is another name for what we are calling a system variable. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add a third attribute called `babson` with initial value 0, and print the state of `bikeshare` again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotting\n", + "\n", + "`newfig` creates a new figure, which should appear either in the notebook or in a new window, depending on which magic command you ran in the first code cell.\n", + "\n", + "`plot` adds a data point to the figure; in this example, you should see a red square and a blue circle representing the number of bikes at each station." + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()\n", + "plot(bikeshare.olin, 'rs-')\n", + "plot(bikeshare.wellesley, 'bo-')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the operators `+=` and `-=` to increase and decrease the system variables. The following lines move a bike from Olin to Wellesley." + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin9
wellesley3
babson0
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "babson 0\n", + "dtype: int64" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.olin -= 1\n", + "bikeshare.wellesley += 1\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the following lines plot the updated state of the system. You should see two new data points with lines connecting them to the old data points." + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot(bikeshare.olin, 'rs-')\n", + "plot(bikeshare.wellesley, 'bo-')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** In the cell below, write a few lines of code to move a bike from Wellesley to Olin and plot the updated state." + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare.olin += 1\n", + "bikeshare.wellesley -= 1\n", + "plot(bikeshare.olin, 'rs-')\n", + "plot(bikeshare.wellesley, 'bo-')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Functions\n", + "\n", + "Now we can take the code we've written so far and encapsulate it in functions." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bike_to_wellesley():\n", + " bikeshare.olin -= 1\n", + " bikeshare.wellesley += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When you define a function, it doesn't run the statements inside the function, yet." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_state():\n", + " plot(bikeshare.olin, 'rs-', label='Olin')\n", + " plot(bikeshare.wellesley, 'bo-', label='Wellesley')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now when we run the functions, it runs the statements inside." + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin8
wellesley4
babson0
\n", + "
" + ], + "text/plain": [ + "olin 8\n", + "wellesley 4\n", + "babson 0\n", + "dtype: int64" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bike_to_wellesley()\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should see two more data points that represent the current state of the system. If the figure is embedded in the notebook, you might have to scroll up to see the change.\n", + "\n", + "One common error is to omit the parentheses, which has the effect of looking up the function, but not running it." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bike_to_wellesley" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output indicates that `bike_to_wellesley` is a function defined in a \"namespace\" called `__main__`, but you don't have to understand what that means." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Define a function called `bike_to_olin` that moves a bike from Wellesley to Olin. Run the new function and print or plot the results to confirm that it works." + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bike_to_olin():\n", + " bikeshare.olin += 1\n", + " bikeshare.wellesley -= 1" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin9
wellesley3
babson0
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "babson 0\n", + "dtype: int64" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bike_to_olin()\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we go on, let's start with a new state object and a new plot." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we have two similar functions, we can create a new function, `move_bike` that takes a parameter `n`, which indicates how many bikes are moving, and in which direction." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike(n):\n", + " bikeshare.olin -= n\n", + " bikeshare.wellesley += n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `move_bike` to write simpler versions of the other functions." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def bike_to_wellesley():\n", + " move_bike(1)\n", + " \n", + "def bike_to_olin():\n", + " move_bike(-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we define these functions, we replace the old definitions with the new ones.\n", + "\n", + "Now we can test them and update the figure." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin8
wellesley4
\n", + "
" + ], + "text/plain": [ + "olin 8\n", + "wellesley 4\n", + "dtype: int64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bike_to_wellesley()\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, each time you run `plot_state` you should see changes in the figure." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin9
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bike_to_olin()\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At this point, `move_bike` is complicated enough that we should add some documentation. The text in triple-quotation marks is in English, not Python. It doesn't do anything when the program runs, but it helps people understand what this function does and how to use it." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike(n):\n", + " \"\"\"Move bikes.\n", + " \n", + " n: number of bikes: positive moves from Olin to Wellesley;\n", + " negative moves from Wellesley to Olin\n", + " \"\"\"\n", + " bikeshare.olin -= n\n", + " bikeshare.wellesley += n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "move_bike(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "bikeshare\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whenever you make a figure, you should put labels on the axes to explain what they mean and what units they are measured in. Here's how:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "label_axes(title='Olin-Wellesley Bikeshare',\n", + " xlabel='Time step (min)', \n", + " ylabel='Number of bikes')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, you might have to scroll up to see the effect.\n", + "\n", + "And you can save figures as files; the suffix of the filename indicates the format you want. This example saves the current figure in a PDF file." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap01_fig01.pdf\n" + ] + } + ], + "source": [ + "savefig('chap01_fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The following function definitions start with print statements so they display messages when they run. Run each of these functions (with appropriate arguments) and confirm that they do what you expect.\n", + "\n", + "Adding print statements like this to functions is a useful debugging technique. Keep it in mind!" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike_debug(n):\n", + " print('Running move_bike_debug with argument', n)\n", + " bikeshare.olin -= n\n", + " bikeshare.wellesley += n\n", + " \n", + "def bike_to_wellesley_debug():\n", + " print('Running bike_to_wellesley_debug')\n", + " move_bike_debug(1)\n", + " \n", + "def bike_to_olin_debug():\n", + " print('Running bike_to_olin_debug')\n", + " move_bike_debug(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot_state()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running move_bike_debug with argument 1\n" + ] + } + ], + "source": [ + "move_bike_debug(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running bike_to_wellesley_debug\n", + "Running move_bike_debug with argument 1\n" + ] + } + ], + "source": [ + "bike_to_wellesley_debug()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running bike_to_olin_debug\n", + "Running move_bike_debug with argument -1\n" + ] + } + ], + "source": [ + "bike_to_olin_debug()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conditionals" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The function `flip` takes a probability and returns either `True` or `False`, which are special values defined by Python.\n", + "\n", + "In the following example, the probability is 0.7 or 70%. If you run this cell several times, you should get `True` about 70% of the time and `False` about 30%." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "flip(0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modify the argument in the previous cell and see what effect it has.\n", + "\n", + "In the following example, we use `flip` as part of an if statement. If the result from `flip` is `True`, we print `heads`; otherwise we do nothing." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "heads\n" + ] + } + ], + "source": [ + "if flip(0.7):\n", + " print('heads')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With an else clause, we can print heads or tails depending on whether `flip` returns `True` or `False`." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tails\n" + ] + } + ], + "source": [ + "if flip(0.7):\n", + " print('heads')\n", + "else:\n", + " print('tails')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's get back to the bikeshare system. Again let's start with a new `System` object and a new plot." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose that in any given minute, there is a 70% chance that a student picks up a bike at Olin and rides to Wellesley. We can simulate that like this." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if flip(0.7):\n", + " bike_to_wellesley()\n", + " print('Moving a bike to Wellesley')\n", + "\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And maybe at the same time, there is also a 60% chance that a student at Wellesley rides to Olin." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Moving a bike to Olin\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin11
wellesley1
\n", + "
" + ], + "text/plain": [ + "olin 11\n", + "wellesley 1\n", + "dtype: int64" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "if flip(0.6):\n", + " bike_to_olin()\n", + " print('Moving a bike to Olin')\n", + "\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can wrap that code in a function called `step` that simulates one time step. In any given minute, a student might ride from Olin to Wellesley, from Wellesley to Olin, or both, or neither, depending on the results of `flip`." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step():\n", + " if flip(0.7):\n", + " bike_to_wellesley()\n", + " print('Moving a bike to Wellesley')\n", + " \n", + " if flip(0.6):\n", + " bike_to_olin()\n", + " print('Moving a bike to Olin')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you run `step` a few times, it should update the current figure. In each time step, the number of bikes at each location might go up, down, or stay the same." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin11
wellesley1
\n", + "
" + ], + "text/plain": [ + "olin 11\n", + "wellesley 1\n", + "dtype: int64" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step()\n", + "plot_state()\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function labels the axes and adds a legend to the figure." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "def decorate(): \n", + " legend(loc='random string')\n", + " label_axes(title='Olin-Wellesley Bikeshare',\n", + " xlabel='Time step (min)', \n", + " ylabel='Number of bikes')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, when you define a function, it has no effect until you run it." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\matplotlib\\legend.py:326: UserWarning: Unrecognized location \"random string\". Falling back on \"best\"; valid locations are\n", + "\tbest\n", + "\tupper right\n", + "\tupper left\n", + "\tlower left\n", + "\tlower right\n", + "\tright\n", + "\tcenter left\n", + "\tcenter right\n", + "\tlower center\n", + "\tupper center\n", + "\tcenter\n", + "\n", + " six.iterkeys(self.codes))))\n" + ] + } + ], + "source": [ + "decorate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Change the argument of `legend` to `'random string'` and run `decorate` again. You should get an error message that lists the valid location where you can put the legend." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Optional parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again let's start with a new `System` object and a new plot." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can make `step` more general by adding parameters. Because these parameters have default values, they are optional." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(p1=0.5, p2=0.5):\n", + " print('p1 ->', p1)\n", + " print('p2 ->', p2)\n", + " if flip(p1):\n", + " bike_to_wellesley()\n", + " \n", + " if flip(p2):\n", + " bike_to_olin()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I added print statements, so each time we run `step` we can see the arguments.\n", + "\n", + "If you provide no arguments, you get the default values:" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.5\n", + "p2 -> 0.5\n" + ] + } + ], + "source": [ + "step()\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you provide one argument, it overrides the first parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.4\n", + "p2 -> 0.5\n" + ] + } + ], + "source": [ + "step(0.4)\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you provide two arguments, they override both." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.4\n", + "p2 -> 0.2\n" + ] + } + ], + "source": [ + "step(0.4, 0.2)\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can specify the names of the parameters you want to override." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.4\n", + "p2 -> 0.2\n" + ] + } + ], + "source": [ + "step(p1=0.4, p2=0.2)\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which means you can override the second parameter and use the default for the first." + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.5\n", + "p2 -> 0.2\n" + ] + } + ], + "source": [ + "step(p2=0.2)\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can combine both forms, but it is not very common:" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1 -> 0.4\n", + "p2 -> 0.2\n" + ] + } + ], + "source": [ + "step(0.4, p2=0.2)\n", + "plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One reason it's not common is that it's error prone. The following example causes an error." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "positional argument follows keyword argument (, line 4)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m4\u001b[0m\n\u001b[1;33m step(p1=0.4, 0.2)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m positional argument follows keyword argument\n" + ] + } + ], + "source": [ + "# If you remove the # at the beginning of the next line and run it, you get\n", + "# SyntaxError: positional argument follows keyword argument\n", + "\n", + "step(p1=0.4, 0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From the error message, you might infer that arguments like `step(0.4, 0.2)` are called \"positional\" and arguments like `step(p1=0.4, p2=0.2)` are called \"keyword arguments\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a version of `decorate` that takes an optional parameter named `loc` with default value `'best'`. It should pass the value of `loc` along as an argument to `legend.` Test your function with different values of `loc`. [You can see the list of legal values here](https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.legend)." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "def decorate(n='best'):\n", + " legend(loc=n)" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [], + "source": [ + "decorate('center')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## For loop" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we go on, I'll redefine `step` without the print statements." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(p1=0.5, p2=0.5):\n", + " if flip(p1):\n", + " bike_to_wellesley()\n", + " \n", + " if flip(p2):\n", + " bike_to_olin()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And let's start again with a new `System` object and a new figure." + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_state()\n", + "decorate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use a for loop to move 4 bikes from Olin to Wellesley." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for i in range(4):\n", + " bike_to_wellesley()\n", + " plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or we can simulate 4 random time steps." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'bike_to_wellesley' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m4\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mplot_state\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36mstep\u001b[1;34m(p1, p2)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mstep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp1\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.5\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mp2\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mflip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mbike_to_wellesley\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mflip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mp2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mNameError\u001b[0m: name 'bike_to_wellesley' is not defined" + ] + } + ], + "source": [ + "for i in range(4):\n", + " step()\n", + " plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If each step corresponds to a minute, we can simulate the rest of the hour like this." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for i in range(52):\n", + " step(p1=0.4, p2=0.2)\n", + " plot_state()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Combine the examples from the previous two sections to write a function named `run_steps` that takes three parameters, named `num_steps`, `p1`, and `p2`. It should use a for loop to run `step` the number of times specified by `num_steps`, passing along the specified values of `p1` and `p2`. After each step, it should plot the updated state.\n", + "\n", + "Test your function by creating a new `System` object, creating a new figure, and running `run_steps`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_steps(num_steps=1, p1=0.5, p2=0.5):\n", + " for i in range(num_steps):\n", + " if flip(p1):\n", + " bikeshare.olin += 1\n", + " bikeshare.wellesley -= 1\n", + " if flip(p2):\n", + " bikeshare.wellesley +=1\n", + " bikeshare.olin -= 1\n", + " plot_state()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_state()\n", + "decorate()\n", + "label_axes(title='Olin-Wellesley Bikeshare', xlabel='Time Passed (min)', ylabel='Number of Bikes')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "run_steps(num_steps=100)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap02mine.ipynb b/code/chap02mine.ipynb new file mode 100644 index 00000000..59306a90 --- /dev/null +++ b/code/chap02mine.ipynb @@ -0,0 +1,2186 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 2: Simulation\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll start with the same code we saw last time: the magic command that tells Jupyter where to put the figures, and the import statement that gets the functions defined in the `modsim` module." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "%matplotlib qt5\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More than one System object\n", + "\n", + "Here's the code from the previous chapter, with two changes:\n", + "\n", + "1. I've added DocStrings that explain what each function does, and what parameters it takes.\n", + "\n", + "2. I've added a parameter named `system` to the functions so they work with whatever `System` object we give them, instead of always using `bikeshare`. That will be useful soon when we have more than one `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_steps(system, num_steps=1, p1=0.5, p2=0.5):\n", + " \"\"\"Simulate the given number of time steps.\n", + " \n", + " system: bikeshare System object\n", + " num_steps: number of time steps\n", + " p1: probability of an Olin->Wellesley customer arrival\n", + " p2: probability of a Wellesley->Olin customer arrival\n", + " \"\"\"\n", + " for i in range(num_steps):\n", + " step(system, p1, p2)\n", + " plot_system(system)\n", + " \n", + "def step(system, p1=0.5, p2=0.5):\n", + " \"\"\"Simulate one minute of time.\n", + " \n", + " system: bikeshare System object\n", + " p1: probability of an Olin->Wellesley customer arrival\n", + " p2: probability of a Wellesley->Olin customer arrival\n", + " \"\"\"\n", + " if flip(p1):\n", + " bike_to_wellesley(system)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(system)\n", + " \n", + "def bike_to_wellesley(system):\n", + " \"\"\"Move one bike from Olin to Wellesley.\n", + " \n", + " system: bikeshare System object\n", + " \"\"\"\n", + " move_bike(system, 1)\n", + " \n", + "def bike_to_olin(system):\n", + " \"\"\"Move one bike from Wellesley to Olin.\n", + " \n", + " system: bikeshare System object\n", + " \"\"\"\n", + " move_bike(system, -1)\n", + " \n", + "def move_bike(system, n):\n", + " \"\"\"Move a bike.\n", + " \n", + " system: bikeshare System object\n", + " n: +1 to move from Olin to Wellesley or\n", + " -1 to move from Wellesley to Olin\n", + " \"\"\"\n", + " system.olin -= n\n", + " system.wellesley += n\n", + " \n", + "def plot_system(system):\n", + " \"\"\"Plot the current system of the bikeshare system.\n", + " \n", + " system: bikeshare System object\n", + " \"\"\"\n", + " plot(system.olin, 'rs-', label='Olin')\n", + " plot(system.wellesley, 'bo-', label='Wellesley')\n", + " \n", + "def decorate_bikeshare():\n", + " \"\"\"Add a title and label the axes.\"\"\"\n", + " decorate(title='Olin-Wellesley Bikeshare',\n", + " xlabel='Time step (min)', \n", + " ylabel='Number of bikes')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can create more than one `System` object:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare1 = System(olin=10, wellesley=2)\n", + "bikeshare1" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare2 = System(olin=10, wellesley=2)\n", + "bikeshare2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And whenever we call a function, we indicate which `System` object to work with:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bike_to_olin(bikeshare1)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bike_to_wellesley(bikeshare2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And you can confirm that the different systems are getting updated independently:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin11
wellesley1
\n", + "
" + ], + "text/plain": [ + "olin 11\n", + "wellesley 1\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin9
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Negative bikes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the code we have so far, the number of bikes at one of the locations can go negative, and the number of bikes at the other location can exceed the actual number of bikes in the system.\n", + "\n", + "If you run this simulation a few times, it happens quite often." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_system(bikeshare)\n", + "decorate_bikeshare()\n", + "run_steps(bikeshare, 60, 0.4, 0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But this is relatively easy to fix, using the `return` statement to exit the function early if the update would cause negative bikes.\n", + "\n", + "If the second `if` statement seems confusing, remember that `n` can be negative." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike(system, n):\n", + " # make sure the number of bikes won't go negative\n", + " olin_temp = system.olin - n\n", + " if olin_temp < 0:\n", + " return\n", + " \n", + " wellesley_temp = system.wellesley + n\n", + " if wellesley_temp < 0:\n", + " return\n", + " \n", + " # update the system\n", + " system.olin = olin_temp\n", + " system.wellesley = wellesley_temp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now if you run the simulation again, it should behave." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no bikes at olin\n", + "no bikes at olin\n", + "no bikes at olin\n" + ] + } + ], + "source": [ + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "plot_system(bikeshare)\n", + "decorate_bikeshare()\n", + "run_steps(bikeshare, 60, 0.4, 0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The variables `olin` and `wellesley` are created inside `move_bike`, so they are local. When the function ends, they go away.\n", + "\n", + "If you try to access a local variable from outside its function, you get an error:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'olin' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;31m# NameError: name 'olin' is not defined\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0molin\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'olin' is not defined" + ] + } + ], + "source": [ + "# If you remove the # from the last line in this cell and run it, you'll get\n", + "# NameError: name 'olin' is not defined\n", + "\n", + "olin" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add print statements in `move_bike` so it prints a message each time a customer arrives and doesn't find a bike. Run the simulation again to confirm that it works as you expect. Then you might want to remove the print statements before you go on." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparison operators" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `if` statements in the previous section used the comparison operator `<`. The other comparison operators are listed in the book.\n", + "\n", + "It is easy to confuse the comparison operator `==` with the assignment operator `=`.\n", + "\n", + "Remember that `=` creates a variable or gives an existing variable a new value." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "x = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Whereas `==` compared two values and returns `True` if they are equal." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x == 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can use `==` in an `if` statement." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes, x is 5\n" + ] + } + ], + "source": [ + "if x == 5:\n", + " print('yes, x is 5')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you use `=` in an `if` statement, you get an error." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no that is wrong\n" + ] + } + ], + "source": [ + "# If you remove the # from the if statement and run it, you'll get\n", + "# SyntaxError: invalid syntax\n", + "\n", + "if x < 4:\n", + " print('yes, x is 5')\n", + "else:\n", + " print('no that is wrong')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add an `else` clause to the `if` statement above, and print an appropriate message.\n", + "\n", + "Replace the `==` operator with one or two of the other comparison operators, and confirm they do what you expect." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have a working simulation, we'll use it to evaluate alternative designs and see how good or bad they are. The metric we'll use is the number of customers who arrive and find no bikes available, which might indicate a design problem." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First we'll make a new `System` object that creates and initializes the system variables that will keep track of the metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we need a version of `move_bike` that updates the metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike(system, n):\n", + " olin_temp = system.olin - n\n", + " if olin_temp < 0:\n", + " system.olin_empty += 1\n", + " return\n", + " \n", + " wellesley_temp = system.wellesley + n\n", + " if wellesley_temp < 0:\n", + " system.wellesley_empty += 1\n", + " return\n", + " \n", + " system.olin = olin_temp\n", + " system.wellesley = wellesley_temp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now when we run a simulation, it keeps track of unhappy customers." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()\n", + "plot_system(bikeshare)\n", + "decorate_bikeshare()\n", + "run_steps(bikeshare, 60, 0.4, 0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the simulation, we can print the number of unhappy customers at each location." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.olin_empty" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.wellesley_empty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Let's add a \"clock\" to keep track of how many time steps have elapsed:\n", + "\n", + "1. Add a new system variable named `clock` to `bikeshare`, initialized to 0, and \n", + "\n", + "2. Modify `step` so it increments (adds one to) `clock` each time it is invoked.\n", + "\n", + "Test your code by adding a print statement that prints the value of `clock` at the beginning of each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Here's a copy of step to get you started\n", + "\n", + "def step(system, p1=0.5, p2=0.5):\n", + " \"\"\"Simulate one minute of time.\n", + " \n", + " system: bikeshare System object\n", + " p1: probability of an Olin->Wellesley customer arrival\n", + " p2: probability of a Wellesley->Olin customer arrival\n", + " \"\"\"\n", + " system.clock += 1\n", + " if flip(p1):\n", + " bike_to_wellesley(system)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(system)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0, clock=0, t_first_empty=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "step(bikeshare)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + } + ], + "source": [ + "step(bikeshare)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the simulation, check the final value of `clock`." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "print(bikeshare.clock)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Now suppose we'd like to know how long it takes to run out of bikes at either location. Modify `move_bike` so the first time a student arrives at Olin and doesn't find a bike, it records the value of `clock` in a system variable.\n", + "\n", + "Hint: create a system variable named `t_first_empty` and initialize it to `-1` to indicate that it has not been set yet.\n", + "\n", + "Test your code by running a simulation for 60 minutes and checking the metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_bike(system, n):\n", + " olin_temp = system.olin - n\n", + " if olin_temp < 0:\n", + " print('no bike at olin')\n", + " if system.t_first_empty < 0:\n", + " system.t_first_empty = system.clock\n", + " system.olin_empty += 1\n", + " return\n", + " \n", + " wellesley_temp = system.wellesley + n\n", + " if wellesley_temp < 0:\n", + " system.wellesley_empty += 1\n", + " return\n", + " \n", + " system.olin = olin_temp\n", + " system.wellesley = wellesley_temp" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, p1=0.5, p2=0.5, num_steps=60):\n", + " for i in range(num_steps):\n", + " step(system, p1, p2)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n", + "no bike at olin\n" + ] + } + ], + "source": [ + "run_simulation(bikeshare, p1=0.6, p2=0.2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the simulation, check the final value of `t_first_empty`." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "37\n" + ] + } + ], + "source": [ + "print(bikeshare.t_first_empty)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we go on, let's put `step` and `move_bike` back the way we found them, so they don't break the examples below." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def step(system, p1=0.5, p2=0.5):\n", + " if flip(p1):\n", + " bike_to_wellesley(system)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(system)\n", + "\n", + "def move_bike(system, n):\n", + " olin_temp = system.olin - n\n", + " if olin_temp < 0:\n", + " system.olin_empty += 1\n", + " return\n", + " \n", + " wellesley_temp = system.wellesley + n\n", + " if wellesley_temp < 0:\n", + " system.wellesley_empty += 1\n", + " return\n", + " \n", + " system.olin = olin_temp\n", + " system.wellesley = wellesley_temp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Returning values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a simple function that returns a value:" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def add_five(x):\n", + " return x + 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = add_five(3)\n", + "y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you run a function on the last line of a cell, Jupyter displays the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "add_five(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "But that can be a bad habit, because usually if you call a function and don't assign the result in a variable, the result gets discarded.\n", + "\n", + "In the following example, Jupyter shows the second result, but the first result just disappears." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "add_five(3)\n", + "add_five(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "When you call a function that returns a variable, it is generally a good idea to assign the result to a variable." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8 10\n" + ] + } + ], + "source": [ + "y1 = add_five(3)\n", + "y2 = add_five(5)\n", + "\n", + "print(y1, y2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a function called `make_system` that creates a `System` object with the system variables `olin=10` and `wellesley=2`, and then returns the new `System` object.\n", + "\n", + "Write a line of code that calls `make_system` and assigns the result to a variable." + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system():\n", + " s = System(olin=10, wellesley=2)\n", + " return s" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = make_system()\n", + "y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Running simulations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before we go on, I want to update `run_steps` so it doesn't always plot the results. The new version takes an additional parameter, `plot_flag`, to indicate whether we want to plot.\n", + "\n", + "\"flag\" is a conventional name for a boolean variable that indicates whether or not a condition is true.\n", + "\n", + "This version of `run_steps` works even if `num_steps` is not an integer. It uses the `int` function to round down. See https://docs.python.org/3/library/functions.html#int" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_steps(system, num_steps=1, p1=0.5, p2=0.5, plot_flag=True):\n", + " \"\"\"Simulate the given number of time steps.\n", + " \n", + " `num_steps` should be an integer; if not, it gets rounded down.\n", + " \n", + " system: bikeshare System object\n", + " num_steps: number of time steps\n", + " p1: probability of an Olin->Wellesley customer arrival\n", + " p2: probability of a Wellesley->Olin customer arrival\n", + " plot_flag: boolean, whether to plot\n", + " \"\"\"\n", + " for i in range(int(num_steps)):\n", + " step(system, p1, p2)\n", + " if plot_flag:\n", + " plot_system(system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now when we run a simulation, we can choose not to plot the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + "run_steps(bikeshare, 60, 0.4, 0.2, plot_flag=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But after the simulation, we can still read the metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.olin_empty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's wrap all that in a function." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation():\n", + " system = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + " run_steps(system, 60, 0.4, 0.2, plot_flag=False)\n", + " return system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And test it." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = run_simulation()" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 0\n" + ] + } + ], + "source": [ + "print(system.olin_empty, system.wellesley_empty)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we generalize `run_simulation` to take `p1` and `p2`, we can use it to run simulations with a range of values for the parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(p1=0.4, p2=0.2):\n", + " bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + " run_steps(bikeshare, 60, p1, p2, plot_flag=False)\n", + " return bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When `p1` is small, we probably don't run out of bikes at Olin." + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = run_simulation(p1=0.2)\n", + "system.olin_empty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When `p1` is large, we probably do." + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = run_simulation(p1=0.6)\n", + "system.olin_empty" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Write a version of `run_simulation` that takes all five model parameters as function parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, num_steps, p1=0.5, p2=0.5, plot_flag=False):\n", + " system = System(olin=10, wellesley=2, olin_empty=0, wellesley_empty=0)\n", + " run_steps(system, num_steps, p1, p2, plot_flag)\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin12
wellesley0
olin_empty0
wellesley_empty8
\n", + "
" + ], + "text/plain": [ + "olin 12\n", + "wellesley 0\n", + "olin_empty 0\n", + "wellesley_empty 8\n", + "dtype: int64" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(bikeshare, 60, 0.4, 0.6, False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## More for loops" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`linspace` creates a NumPy array of equally spaced numbers." + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.25, 0.5 , 0.75, 1. ])" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1_array = linspace(start=0, stop=1, num=5)\n", + "p1_array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use an array in a `for` loop, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n", + "0.25\n", + "0.5\n", + "0.75\n", + "1.0\n" + ] + } + ], + "source": [ + "for p1 in p1_array:\n", + " print(p1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This will come in handy in the next section." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The function `linspace` is part of NumPy. [You can read the documentation here](https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html).\n", + "\n", + "Use `linspace` to make an array of 10 equally spaced numbers from 1 to 10 (including both)." + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_array = linspace(1, 10, 10)\n", + "x_array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The `modsim` library provides a related function called `linrange`. You can view the documentation by running the following cell:" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function linrange in module modsim:\n", + "\n", + "linrange(start=0, stop=None, step=1, **kwargs)\n", + " Returns an array of evenly-spaced values in the interval [start, stop].\n", + " \n", + " This function works best if the space between start and stop\n", + " is divisible by step; otherwise the results might be surprising.\n", + " \n", + " By default, the last value in the array is `stop` (at least approximately).\n", + " If you provide the keyword argument `endpoint=False`, the last value\n", + " in the array is `stop-step`. \n", + " \n", + " start: first value\n", + " stop: last value\n", + " step: space between values\n", + " \n", + " Also accepts the same keyword arguments as np.linspace. See\n", + " https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html\n", + " \n", + " returns: array or Quantity\n", + "\n" + ] + } + ], + "source": [ + "help(linrange)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use `linrange` to make an array of numbers from 1 to 11 with a step size of 2." + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 3., 5., 7., 9., 11.])" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_array = linrange(1, 11, 2)\n", + "y_array" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Sweeping parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following example runs simulations with a range of values for `p1`; after each simulation, it prints the number of unhappy customers at the Olin station:" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" + ] + }, + "execution_count": 115, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1_array = linspace(0, 1, 11)\n", + "p1_array" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0\n", + "0.1 0\n", + "0.2 0\n", + "0.3 0\n", + "0.4 3\n", + "0.5 13\n", + "0.6 14\n", + "0.7 23\n", + "0.8 30\n", + "0.9 32\n", + "1.0 36\n" + ] + } + ], + "source": [ + "for p1 in p1_array:\n", + " system = run_simulation(p1=p1)\n", + " print(p1, system.olin_empty)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can do the same thing, but plotting the results instead of printing them.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()\n", + "for p1 in p1_array:\n", + " system = run_simulation(p1=p1)\n", + " plot(p1, system.olin_empty, 'rs', label='olin')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, we should decorate the figure. This version of `decorate_bikeshare` takes `xlabel` as a parameter, for reasons you will see soon." + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def decorate_bikeshare(xlabel):\n", + " decorate(title='Olin-Wellesley Bikeshare',\n", + " xlabel=xlabel, \n", + " ylabel='Number of unhappy customers')" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "decorate_bikeshare(xlabel='Arrival rate at Olin (p1 in customers/min)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Wrap this code in a function named `parameter_sweep` that takes an array called `p1_array` as a parameter. It should create a new figure, run a simulation for each value of `p1` in `p1_array`, and plot the results.\n", + "\n", + "Once you have the function working, modify it so it also plots the number of unhappy customers at Wellesley. Looking at the plot, can you estimate a range of values for `p1` that minimizes the total number of unhappy customers?" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def parameter_sweep(p1_array):\n", + " newfig()\n", + " for p1 in p1_array:\n", + " system = run_simulation(p1=p1)\n", + " plot(p1, system.wellesley_empty, 'bo', label='wellesley')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "parameter_sweep(p1_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Write a function called `parameter_sweep2` that runs simulations with `p1=0.2` and a range of values for `p2`.\n", + "\n", + "Note: If you run `parameter_sweep2` a few times without calling `newfig`, you can plot multiple runs on the same axes, which will give you a sense of how much random variation there is from one run to the next. " + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def parameter_sweep2(p1=0.2, p2=p2_array):\n", + " for p2 in p2_array:\n", + " system = run_simulation(p1, p2=p2)\n", + " plot(p2, system.olin_empty, 'rs', label='olin')\n", + " plot(p2, system.wellesley_empty, 'bo', label='wellesley')" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" + ] + }, + "execution_count": 129, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p2_array = linspace(0, 1, 11)\n", + "p2_array" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "parameter_sweep2()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Hold `p1=0.4` and `p2=0.2`, and sweep a range of values for `num_steps`.\n", + "\n", + "Hint: You will need a version of `run_simulation` that takes `num_steps` as a parameter.\n", + "\n", + "Hint: Because `num_steps` is supposed to be an integer use `range` rather than `linrange`." + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(num_steps, p1, p2):\n", + " system = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + " run_steps(system, num_steps, p1, p2, plot_flag=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_simulation(30, 0.4, 0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def parameter_sweep3(p1=0.4, p2=0.2):\n", + " for num_steps in range(1, 30):\n", + " system = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + " run_steps(system, num_steps=num_steps, p1=p1, p2=p2, plot_flag=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "parameter_sweep3()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** The code below runs a simulation with the same parameters 10 times and computes the average number of unhappy customers.\n", + "\n", + "1. Wrap this code in a function called `run_simulations` that takes `num_runs` as a parameter.\n", + "\n", + "2. Test `run_simulations`, and increase `num_runs` until the results are reasonably consistent from one run to the next.\n", + "\n", + "3. Generalize `run_simulations` so it also takes the initial value of `olin` as a parameter.\n", + "\n", + "4. Run the generalized version with `olin=12`. How much do the two extra bikes decrease the average number of unhappy customers.\n", + "\n", + "5. Make a plot that shows the average number of unhappy customers as a function of the initial number of bikes at Olin." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.5" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_runs = 10\n", + "total = 0\n", + "for i in range(num_runs):\n", + " system = run_simulation(p1=0.4, p2=0.2, olin=10, wellesley=2, num_steps=60)\n", + " total += system.olin_empty + system.wellesley_empty\n", + "total / num_runs" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def num_simulations(num_runs):\n", + " total = 0\n", + " for i in range(num_runs):\n", + " system = run_simulation(p1=0.4, p2=0.2, olin=10, wellesley=2, num_steps=60)\n", + " total += system.olin_empty + system.wellesley_empty\n", + " return total / num_runs" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.3499999999999996" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_simulations(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def num_simulations(num_runs, olin_start):\n", + " total = 0\n", + " for i in range(num_runs):\n", + " system = run_simulation(p1=0.4, p2=0.2, olin=olin_start, wellesley=2, num_steps=60)\n", + " total += system.olin_empty + system.wellesley_empty\n", + " return total / num_runs" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3.4500000000000002" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_simulations(20, 12) #decreases average amount of unhappy customers" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()\n", + "for olin_start in range(50):\n", + " test = num_simulations(num_runs=1000, olin_start=olin_start)\n", + " plot(olin_start, test, 'bo', label='average')" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap03mine.ipynb b/code/chap03mine.ipynb new file mode 100644 index 00000000..f594c575 --- /dev/null +++ b/code/chap03mine.ipynb @@ -0,0 +1,4293 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 3: Explain\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# To switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pandas is a module that provides tools for reading and processing data. The `read_html` reads a web page from a file or the Internet and creates one DataFrame for each table on the page." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from pandas import read_html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data directory contains a downloaded copy of https://en.wikipedia.org/wiki/World_population_estimates" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "filename = 'data/World_population_estimates.html'\n", + "tables = read_html(filename, header=0, index_col=0, decimal='M')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`tables` is a sequence of DataFrame objects. We can select the DataFrame we want using the bracket operator. The tables are numbered from 0, so `table2` is actually the third table on the page.\n", + "\n", + "`head` selects the header and the first five rows." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
United States Census Bureau (2015)[18]Population Reference Bureau (1973–2015)[6]United Nations Department of Economic and Social Affairs (2015)[7]Maddison (2008)[8]HYDE (2007)[15]Tanton (1994)[9]Biraben (1980)[10]McEvedy & Jones (1978)[11]Thomlinson (1975)[12]Durand (1974)[13]Clark (1967)[14]
Year
195025576286542.516000e+0925251490002.544000e+092.527960e+092.400000e+092.527000e+092.500000e+092.400000e+09NaN2.486000e+09
19512594939877NaN25728509172.571663e+09NaNNaNNaNNaNNaNNaNNaN
19522636772306NaN26192920682.617949e+09NaNNaNNaNNaNNaNNaNNaN
19532682053389NaN26658653922.665959e+09NaNNaNNaNNaNNaNNaNNaN
19542730228104NaN27131720272.716927e+09NaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " United States Census Bureau (2015)[18] \\\n", + "Year \n", + "1950 2557628654 \n", + "1951 2594939877 \n", + "1952 2636772306 \n", + "1953 2682053389 \n", + "1954 2730228104 \n", + "\n", + " Population Reference Bureau (1973–2015)[6] \\\n", + "Year \n", + "1950 2.516000e+09 \n", + "1951 NaN \n", + "1952 NaN \n", + "1953 NaN \n", + "1954 NaN \n", + "\n", + " United Nations Department of Economic and Social Affairs (2015)[7] \\\n", + "Year \n", + "1950 2525149000 \n", + "1951 2572850917 \n", + "1952 2619292068 \n", + "1953 2665865392 \n", + "1954 2713172027 \n", + "\n", + " Maddison (2008)[8] HYDE (2007)[15] Tanton (1994)[9] \\\n", + "Year \n", + "1950 2.544000e+09 2.527960e+09 2.400000e+09 \n", + "1951 2.571663e+09 NaN NaN \n", + "1952 2.617949e+09 NaN NaN \n", + "1953 2.665959e+09 NaN NaN \n", + "1954 2.716927e+09 NaN NaN \n", + "\n", + " Biraben (1980)[10] McEvedy & Jones (1978)[11] Thomlinson (1975)[12] \\\n", + "Year \n", + "1950 2.527000e+09 2.500000e+09 2.400000e+09 \n", + "1951 NaN NaN NaN \n", + "1952 NaN NaN NaN \n", + "1953 NaN NaN NaN \n", + "1954 NaN NaN NaN \n", + "\n", + " Durand (1974)[13] Clark (1967)[14] \n", + "Year \n", + "1950 NaN 2.486000e+09 \n", + "1951 NaN NaN \n", + "1952 NaN NaN \n", + "1953 NaN NaN \n", + "1954 NaN NaN " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table2 = tables[2]\n", + "table2.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`tail` selects the last five rows." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
United States Census Bureau (2015)[18]Population Reference Bureau (1973–2015)[6]United Nations Department of Economic and Social Affairs (2015)[7]Maddison (2008)[8]HYDE (2007)[15]Tanton (1994)[9]Biraben (1980)[10]McEvedy & Jones (1978)[11]Thomlinson (1975)[12]Durand (1974)[13]Clark (1967)[14]
Year
201169440555836.986951e+096997998760NaNNaNNaNNaNNaNNaNNaNNaN
201270223492837.057075e+097080072417NaNNaNNaNNaNNaNNaNNaNNaN
201371010278957.136796e+097162119434NaNNaNNaNNaNNaNNaNNaNNaN
201471787228937.238184e+097243784000NaNNaNNaNNaNNaNNaNNaNNaN
201572564900117.336435e+097349472000NaNNaNNaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " United States Census Bureau (2015)[18] \\\n", + "Year \n", + "2011 6944055583 \n", + "2012 7022349283 \n", + "2013 7101027895 \n", + "2014 7178722893 \n", + "2015 7256490011 \n", + "\n", + " Population Reference Bureau (1973–2015)[6] \\\n", + "Year \n", + "2011 6.986951e+09 \n", + "2012 7.057075e+09 \n", + "2013 7.136796e+09 \n", + "2014 7.238184e+09 \n", + "2015 7.336435e+09 \n", + "\n", + " United Nations Department of Economic and Social Affairs (2015)[7] \\\n", + "Year \n", + "2011 6997998760 \n", + "2012 7080072417 \n", + "2013 7162119434 \n", + "2014 7243784000 \n", + "2015 7349472000 \n", + "\n", + " Maddison (2008)[8] HYDE (2007)[15] Tanton (1994)[9] \\\n", + "Year \n", + "2011 NaN NaN NaN \n", + "2012 NaN NaN NaN \n", + "2013 NaN NaN NaN \n", + "2014 NaN NaN NaN \n", + "2015 NaN NaN NaN \n", + "\n", + " Biraben (1980)[10] McEvedy & Jones (1978)[11] Thomlinson (1975)[12] \\\n", + "Year \n", + "2011 NaN NaN NaN \n", + "2012 NaN NaN NaN \n", + "2013 NaN NaN NaN \n", + "2014 NaN NaN NaN \n", + "2015 NaN NaN NaN \n", + "\n", + " Durand (1974)[13] Clark (1967)[14] \n", + "Year \n", + "2011 NaN NaN \n", + "2012 NaN NaN \n", + "2013 NaN NaN \n", + "2014 NaN NaN \n", + "2015 NaN NaN " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table2.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Long column names are awkard to work with, but we can replace them with abbreviated names." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "table2.columns = ['census', 'prb', 'un', 'maddison', \n", + " 'hyde', 'tanton', 'biraben', 'mj', \n", + " 'thomlinson', 'durand', 'clark']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the DataFrame looks like now. \n", + "\n", + "Some of the values use scientific notation; for example, `2.544000e+09` is shorthand for $2.544 \\cdot 10^9$ or 2.544 billion.\n", + "\n", + "`NaN` is a special value that indicates missing data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
censusprbunmaddisonhydetantonbirabenmjthomlinsondurandclark
Year
195025576286542.516000e+0925251490002.544000e+092.527960e+092.400000e+092.527000e+092.500000e+092.400000e+09NaN2.486000e+09
19512594939877NaN25728509172.571663e+09NaNNaNNaNNaNNaNNaNNaN
19522636772306NaN26192920682.617949e+09NaNNaNNaNNaNNaNNaNNaN
19532682053389NaN26658653922.665959e+09NaNNaNNaNNaNNaNNaNNaN
19542730228104NaN27131720272.716927e+09NaNNaNNaNNaNNaNNaNNaN
19552782098943NaN27616509812.769074e+09NaNNaNNaNNaNNaNNaNNaN
19562835299673NaN28115720312.822502e+09NaNNaNNaNNaNNaNNaNNaN
19572891349717NaN28630427952.879934e+09NaNNaNNaNNaNNaNNaNNaN
19582948137248NaN29160301672.939254e+09NaNNaNNaNNaNNaNNaNNaN
19593000716593NaN29703958142.995909e+09NaNNaNNaNNaNNaNNaNNaN
19603043001508NaN30260029423.041507e+093.042000e+09NaNNaNNaNNaNNaNNaN
19613083966929NaN30828302663.082161e+09NaNNaNNaNNaNNaNNaNNaN
19623140093217NaN31410715313.135787e+09NaNNaNNaNNaNNaNNaN3.036000e+09
19633209827882NaN32011782773.201354e+09NaNNaNNaNNaNNaNNaNNaN
19643281201306NaN32637388323.266477e+09NaNNaNNaNNaNNaNNaNNaN
19653350425793NaN33291224793.333138e+09NaNNaNNaNNaNNaNNaNNaN
19663420677923NaN33974752473.402224e+09NaNNaNNaNNaNNaNNaN3.288000e+09
19673490333715NaN34685217243.471464e+09NaNNaNNaNNaNNaNNaNNaN
19683562313822NaN35416748913.543086e+09NaNNaNNaNNaNNaNNaNNaN
19693637159050NaN36161087493.615743e+09NaNNaNNaNNaNNaNNaNNaN
19703712697742NaN36911726163.691157e+093.710000e+09NaN3.637000e+09NaN3.600000e+093,600,000,000– 3,700,000,0003.632000e+09
19713790326948NaN37667543453.769818e+09NaNNaNNaNNaNNaNNaNNaN
19723866568653NaN38428736113.846499e+09NaNNaNNaNNaNNaNNaNNaN
19733942096442NaN39191823323.922793e+093.923000e+09NaNNaNNaNNaNNaN3.860000e+09
19744016608813NaN39953049223.997677e+09NaNNaNNaNNaNNaNNaNNaN
19754089083233NaN40710204344.070671e+09NaNNaNNaN3.900000e+094.000000e+09NaNNaN
19764160185010NaN41461358504.141445e+09NaNNaNNaNNaNNaNNaNNaN
19774232084578NaN42208167374.213539e+09NaNNaNNaNNaNNaNNaNNaN
19784304105753NaN42956648254.286317e+09NaNNaNNaNNaNNaNNaNNaN
19794379013942NaN43715278714.363144e+09NaNNaNNaNNaNNaNNaNNaN
....................................
19864940571232NaN49533767104.920968e+09NaNNaNNaNNaNNaNNaNNaN
19875027200492NaN50453158715.006672e+09NaNNaNNaNNaNNaNNaNNaN
19885114557167NaN51382146885.093306e+09NaNNaNNaNNaNNaNNaNNaN
19895201440110NaN52300000005.180540e+09NaNNaNNaNNaNNaNNaNNaN
19905288955934NaN53208166675.269029e+095.308000e+09NaNNaNNaNNaNNaNNaN
19915371585922NaN54089087245.351922e+09NaNNaNNaNNaNNaNNaNNaN
19925456136278NaN54948995705.435722e+09NaNNaNNaNNaNNaNNaNNaN
19935538268316NaN55788651095.518127e+09NaNNaNNaNNaNNaNNaNNaN
19945618682132NaN56610863465.599396e+09NaNNaNNaNNaNNaNNaNNaN
199556992029855.760000e+0957418224125.681575e+09NaNNaNNaNNaNNaNNaNNaN
19965779440593NaN58210167505.762212e+09NaNNaNNaNNaNNaNNaNNaN
199758579725435.840000e+0958986883375.842122e+09NaNNaNNaNNaNNaNNaNNaN
19985935213248NaN59753036575.921366e+09NaNNaNNaNNaNNaNNaNNaN
19996012074922NaN60514780105.999622e+09NaNNaNNaNNaNNaNNaNNaN
200060885713836.067000e+0961277004286.076558e+096.145000e+09NaNNaN5.750000e+09NaNNaNNaN
200161652192476.137000e+0962041470266.154791e+09NaNNaNNaNNaNNaNNaNNaN
200262420163486.215000e+0962808538176.231704e+09NaNNaNNaNNaNNaNNaNNaN
200363185909566.314000e+0963579917496.308364e+09NaNNaNNaNNaNNaNNaNNaN
200463956995096.396000e+0964357055956.374056e+09NaNNaNNaNNaNNaNNaNNaN
200564730447326.477000e+0965140946056.462987e+09NaNNaNNaNNaNNaNNaNNaN
200665512635346.555000e+0965932279776.540214e+09NaNNaNNaNNaNNaNNaNNaN
200766299137596.625000e+0966731059376.616689e+09NaNNaNNaNNaNNaNNaNNaN
200867090497806.705000e+0967536492286.694832e+09NaNNaNNaNNaNNaNNaNNaN
200967882143946.809972e+0968347219336.764086e+09NaNNaNNaNNaNNaNNaNNaN
201068663323586.892319e+096916183482NaNNaNNaNNaNNaNNaNNaNNaN
201169440555836.986951e+096997998760NaNNaNNaNNaNNaNNaNNaNNaN
201270223492837.057075e+097080072417NaNNaNNaNNaNNaNNaNNaNNaN
201371010278957.136796e+097162119434NaNNaNNaNNaNNaNNaNNaNNaN
201471787228937.238184e+097243784000NaNNaNNaNNaNNaNNaNNaNNaN
201572564900117.336435e+097349472000NaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

66 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " census prb un maddison hyde \\\n", + "Year \n", + "1950 2557628654 2.516000e+09 2525149000 2.544000e+09 2.527960e+09 \n", + "1951 2594939877 NaN 2572850917 2.571663e+09 NaN \n", + "1952 2636772306 NaN 2619292068 2.617949e+09 NaN \n", + "1953 2682053389 NaN 2665865392 2.665959e+09 NaN \n", + "1954 2730228104 NaN 2713172027 2.716927e+09 NaN \n", + "1955 2782098943 NaN 2761650981 2.769074e+09 NaN \n", + "1956 2835299673 NaN 2811572031 2.822502e+09 NaN \n", + "1957 2891349717 NaN 2863042795 2.879934e+09 NaN \n", + "1958 2948137248 NaN 2916030167 2.939254e+09 NaN \n", + "1959 3000716593 NaN 2970395814 2.995909e+09 NaN \n", + "1960 3043001508 NaN 3026002942 3.041507e+09 3.042000e+09 \n", + "1961 3083966929 NaN 3082830266 3.082161e+09 NaN \n", + "1962 3140093217 NaN 3141071531 3.135787e+09 NaN \n", + "1963 3209827882 NaN 3201178277 3.201354e+09 NaN \n", + "1964 3281201306 NaN 3263738832 3.266477e+09 NaN \n", + "1965 3350425793 NaN 3329122479 3.333138e+09 NaN \n", + "1966 3420677923 NaN 3397475247 3.402224e+09 NaN \n", + "1967 3490333715 NaN 3468521724 3.471464e+09 NaN \n", + "1968 3562313822 NaN 3541674891 3.543086e+09 NaN \n", + "1969 3637159050 NaN 3616108749 3.615743e+09 NaN \n", + "1970 3712697742 NaN 3691172616 3.691157e+09 3.710000e+09 \n", + "1971 3790326948 NaN 3766754345 3.769818e+09 NaN \n", + "1972 3866568653 NaN 3842873611 3.846499e+09 NaN \n", + "1973 3942096442 NaN 3919182332 3.922793e+09 3.923000e+09 \n", + "1974 4016608813 NaN 3995304922 3.997677e+09 NaN \n", + "1975 4089083233 NaN 4071020434 4.070671e+09 NaN \n", + "1976 4160185010 NaN 4146135850 4.141445e+09 NaN \n", + "1977 4232084578 NaN 4220816737 4.213539e+09 NaN \n", + "1978 4304105753 NaN 4295664825 4.286317e+09 NaN \n", + "1979 4379013942 NaN 4371527871 4.363144e+09 NaN \n", + "... ... ... ... ... ... \n", + "1986 4940571232 NaN 4953376710 4.920968e+09 NaN \n", + "1987 5027200492 NaN 5045315871 5.006672e+09 NaN \n", + "1988 5114557167 NaN 5138214688 5.093306e+09 NaN \n", + "1989 5201440110 NaN 5230000000 5.180540e+09 NaN \n", + "1990 5288955934 NaN 5320816667 5.269029e+09 5.308000e+09 \n", + "1991 5371585922 NaN 5408908724 5.351922e+09 NaN \n", + "1992 5456136278 NaN 5494899570 5.435722e+09 NaN \n", + "1993 5538268316 NaN 5578865109 5.518127e+09 NaN \n", + "1994 5618682132 NaN 5661086346 5.599396e+09 NaN \n", + "1995 5699202985 5.760000e+09 5741822412 5.681575e+09 NaN \n", + "1996 5779440593 NaN 5821016750 5.762212e+09 NaN \n", + "1997 5857972543 5.840000e+09 5898688337 5.842122e+09 NaN \n", + "1998 5935213248 NaN 5975303657 5.921366e+09 NaN \n", + "1999 6012074922 NaN 6051478010 5.999622e+09 NaN \n", + "2000 6088571383 6.067000e+09 6127700428 6.076558e+09 6.145000e+09 \n", + "2001 6165219247 6.137000e+09 6204147026 6.154791e+09 NaN \n", + "2002 6242016348 6.215000e+09 6280853817 6.231704e+09 NaN \n", + "2003 6318590956 6.314000e+09 6357991749 6.308364e+09 NaN \n", + "2004 6395699509 6.396000e+09 6435705595 6.374056e+09 NaN \n", + "2005 6473044732 6.477000e+09 6514094605 6.462987e+09 NaN \n", + "2006 6551263534 6.555000e+09 6593227977 6.540214e+09 NaN \n", + "2007 6629913759 6.625000e+09 6673105937 6.616689e+09 NaN \n", + "2008 6709049780 6.705000e+09 6753649228 6.694832e+09 NaN \n", + "2009 6788214394 6.809972e+09 6834721933 6.764086e+09 NaN \n", + "2010 6866332358 6.892319e+09 6916183482 NaN NaN \n", + "2011 6944055583 6.986951e+09 6997998760 NaN NaN \n", + "2012 7022349283 7.057075e+09 7080072417 NaN NaN \n", + "2013 7101027895 7.136796e+09 7162119434 NaN NaN \n", + "2014 7178722893 7.238184e+09 7243784000 NaN NaN \n", + "2015 7256490011 7.336435e+09 7349472000 NaN NaN \n", + "\n", + " tanton biraben mj thomlinson \\\n", + "Year \n", + "1950 2.400000e+09 2.527000e+09 2.500000e+09 2.400000e+09 \n", + "1951 NaN NaN NaN NaN \n", + "1952 NaN NaN NaN NaN \n", + "1953 NaN NaN NaN NaN \n", + "1954 NaN NaN NaN NaN \n", + "1955 NaN NaN NaN NaN \n", + "1956 NaN NaN NaN NaN \n", + "1957 NaN NaN NaN NaN \n", + "1958 NaN NaN NaN NaN \n", + "1959 NaN NaN NaN NaN \n", + "1960 NaN NaN NaN NaN \n", + "1961 NaN NaN NaN NaN \n", + "1962 NaN NaN NaN NaN \n", + "1963 NaN NaN NaN NaN \n", + "1964 NaN NaN NaN NaN \n", + "1965 NaN NaN NaN NaN \n", + "1966 NaN NaN NaN NaN \n", + "1967 NaN NaN NaN NaN \n", + "1968 NaN NaN NaN NaN \n", + "1969 NaN NaN NaN NaN \n", + "1970 NaN 3.637000e+09 NaN 3.600000e+09 \n", + "1971 NaN NaN NaN NaN \n", + "1972 NaN NaN NaN NaN \n", + "1973 NaN NaN NaN NaN \n", + "1974 NaN NaN NaN NaN \n", + "1975 NaN NaN 3.900000e+09 4.000000e+09 \n", + "1976 NaN NaN NaN NaN \n", + "1977 NaN NaN NaN NaN \n", + "1978 NaN NaN NaN NaN \n", + "1979 NaN NaN NaN NaN \n", + "... ... ... ... ... \n", + "1986 NaN NaN NaN NaN \n", + "1987 NaN NaN NaN NaN \n", + "1988 NaN NaN NaN NaN \n", + "1989 NaN NaN NaN NaN \n", + "1990 NaN NaN NaN NaN \n", + "1991 NaN NaN NaN NaN \n", + "1992 NaN NaN NaN NaN \n", + "1993 NaN NaN NaN NaN \n", + "1994 NaN NaN NaN NaN \n", + "1995 NaN NaN NaN NaN \n", + "1996 NaN NaN NaN NaN \n", + "1997 NaN NaN NaN NaN \n", + "1998 NaN NaN NaN NaN \n", + "1999 NaN NaN NaN NaN \n", + "2000 NaN NaN 5.750000e+09 NaN \n", + "2001 NaN NaN NaN NaN \n", + "2002 NaN NaN NaN NaN \n", + "2003 NaN NaN NaN NaN \n", + "2004 NaN NaN NaN NaN \n", + "2005 NaN NaN NaN NaN \n", + "2006 NaN NaN NaN NaN \n", + "2007 NaN NaN NaN NaN \n", + "2008 NaN NaN NaN NaN \n", + "2009 NaN NaN NaN NaN \n", + "2010 NaN NaN NaN NaN \n", + "2011 NaN NaN NaN NaN \n", + "2012 NaN NaN NaN NaN \n", + "2013 NaN NaN NaN NaN \n", + "2014 NaN NaN NaN NaN \n", + "2015 NaN NaN NaN NaN \n", + "\n", + " durand clark \n", + "Year \n", + "1950 NaN 2.486000e+09 \n", + "1951 NaN NaN \n", + "1952 NaN NaN \n", + "1953 NaN NaN \n", + "1954 NaN NaN \n", + "1955 NaN NaN \n", + "1956 NaN NaN \n", + "1957 NaN NaN \n", + "1958 NaN NaN \n", + "1959 NaN NaN \n", + "1960 NaN NaN \n", + "1961 NaN NaN \n", + "1962 NaN 3.036000e+09 \n", + "1963 NaN NaN \n", + "1964 NaN NaN \n", + "1965 NaN NaN \n", + "1966 NaN 3.288000e+09 \n", + "1967 NaN NaN \n", + "1968 NaN NaN \n", + "1969 NaN NaN \n", + "1970 3,600,000,000– 3,700,000,000 3.632000e+09 \n", + "1971 NaN NaN \n", + "1972 NaN NaN \n", + "1973 NaN 3.860000e+09 \n", + "1974 NaN NaN \n", + "1975 NaN NaN \n", + "1976 NaN NaN \n", + "1977 NaN NaN \n", + "1978 NaN NaN \n", + "1979 NaN NaN \n", + "... ... ... \n", + "1986 NaN NaN \n", + "1987 NaN NaN \n", + "1988 NaN NaN \n", + "1989 NaN NaN \n", + "1990 NaN NaN \n", + "1991 NaN NaN \n", + "1992 NaN NaN \n", + "1993 NaN NaN \n", + "1994 NaN NaN \n", + "1995 NaN NaN \n", + "1996 NaN NaN \n", + "1997 NaN NaN \n", + "1998 NaN NaN \n", + "1999 NaN NaN \n", + "2000 NaN NaN \n", + "2001 NaN NaN \n", + "2002 NaN NaN \n", + "2003 NaN NaN \n", + "2004 NaN NaN \n", + "2005 NaN NaN \n", + "2006 NaN NaN \n", + "2007 NaN NaN \n", + "2008 NaN NaN \n", + "2009 NaN NaN \n", + "2010 NaN NaN \n", + "2011 NaN NaN \n", + "2012 NaN NaN \n", + "2013 NaN NaN \n", + "2014 NaN NaN \n", + "2015 NaN NaN \n", + "\n", + "[66 rows x 11 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use dot notatio to select a column from a DataFrame. The result is a Series." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Year\n", + "1950 2557628654\n", + "1951 2594939877\n", + "1952 2636772306\n", + "1953 2682053389\n", + "1954 2730228104\n", + "1955 2782098943\n", + "1956 2835299673\n", + "1957 2891349717\n", + "1958 2948137248\n", + "1959 3000716593\n", + "1960 3043001508\n", + "1961 3083966929\n", + "1962 3140093217\n", + "1963 3209827882\n", + "1964 3281201306\n", + "1965 3350425793\n", + "1966 3420677923\n", + "1967 3490333715\n", + "1968 3562313822\n", + "1969 3637159050\n", + "1970 3712697742\n", + "1971 3790326948\n", + "1972 3866568653\n", + "1973 3942096442\n", + "1974 4016608813\n", + "1975 4089083233\n", + "1976 4160185010\n", + "1977 4232084578\n", + "1978 4304105753\n", + "1979 4379013942\n", + " ... \n", + "1986 4940571232\n", + "1987 5027200492\n", + "1988 5114557167\n", + "1989 5201440110\n", + "1990 5288955934\n", + "1991 5371585922\n", + "1992 5456136278\n", + "1993 5538268316\n", + "1994 5618682132\n", + "1995 5699202985\n", + "1996 5779440593\n", + "1997 5857972543\n", + "1998 5935213248\n", + "1999 6012074922\n", + "2000 6088571383\n", + "2001 6165219247\n", + "2002 6242016348\n", + "2003 6318590956\n", + "2004 6395699509\n", + "2005 6473044732\n", + "2006 6551263534\n", + "2007 6629913759\n", + "2008 6709049780\n", + "2009 6788214394\n", + "2010 6866332358\n", + "2011 6944055583\n", + "2012 7022349283\n", + "2013 7101027895\n", + "2014 7178722893\n", + "2015 7256490011\n", + "Name: census, Length: 66, dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census = table2.census\n", + "census" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Series object has two parts, `values` and `index`.\n", + "\n", + "The `values` part is an array." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([2557628654, 2594939877, 2636772306, 2682053389, 2730228104,\n", + " 2782098943, 2835299673, 2891349717, 2948137248, 3000716593,\n", + " 3043001508, 3083966929, 3140093217, 3209827882, 3281201306,\n", + " 3350425793, 3420677923, 3490333715, 3562313822, 3637159050,\n", + " 3712697742, 3790326948, 3866568653, 3942096442, 4016608813,\n", + " 4089083233, 4160185010, 4232084578, 4304105753, 4379013942,\n", + " 4451362735, 4534410125, 4614566561, 4695736743, 4774569391,\n", + " 4856462699, 4940571232, 5027200492, 5114557167, 5201440110,\n", + " 5288955934, 5371585922, 5456136278, 5538268316, 5618682132,\n", + " 5699202985, 5779440593, 5857972543, 5935213248, 6012074922,\n", + " 6088571383, 6165219247, 6242016348, 6318590956, 6395699509,\n", + " 6473044732, 6551263534, 6629913759, 6709049780, 6788214394,\n", + " 6866332358, 6944055583, 7022349283, 7101027895, 7178722893,\n", + " 7256490011], dtype=int64)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census.values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `index` part is yet another kind of object, an `Int64Index`." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Int64Index([1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960,\n", + " 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,\n", + " 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982,\n", + " 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,\n", + " 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n", + " 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015],\n", + " dtype='int64', name='Year')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census.index" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you ever wonder what kind of object a variable refers to, you can use the `type` function.\n", + "\n", + "The result indicates what type the object is, and the module where that type is defined.\n", + "\n", + "DataFrame, Series, and Int64Index are defined by Pandas.\n", + "\n", + "array is defined by NumPy." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.frame.DataFrame" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(table2)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.series.Series" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(census)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pandas.core.indexes.numeric.Int64Index" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(census.index)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "numpy.ndarray" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(census.values)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function plots the estimates generated by the US Censis and UN DESA, and labels the axes.\n", + "\n", + "`1e9` is scientific notation for $1 \\cdot 10^9$ or 1 billion." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_estimates(table):\n", + " \"\"\"Plot world population estimates.\n", + " \n", + " table: DataFrame with columns 'un' and 'census'\n", + " \"\"\"\n", + " un = table.un / 1e9\n", + " census = table.census / 1e9\n", + " \n", + " plot(census, ':', color='darkblue', label='US Census')\n", + " plot(un, '--', color='green', label='UN DESA')\n", + " \n", + " decorate(xlabel='Year',\n", + " ylabel='World population (billion)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot the estimates." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEPCAYAAACqZsSmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFdf6//H3oXepggg2BHuhqGAh9hqJJZoI9l7Sbkyu\nJvFrmteSxNi9aqyJMYmaYIlRkxi714YYxVCsKCpVeoczvz/8ebxcJB4UOJTntRZrwZ4zM88ofM6c\nmT17qxRFURBCCFGj6Om6ACGEEBVPwl8IIWogCX8hhKiBJPyFEKIGMtB1AdrIyckhLCwMBwcH9PX1\ndV2OEEJUeoWFhSQkJNCyZUtMTEyKLa8S4R8WFkZQUJCuyxBCiCrn22+/xcfHp1h7lQh/BwcH4OFB\nODk56bgaIYSo/GJjYwkKCtLk5/+qEuH/6FKPk5MTLi4uOq5GCCGqjpIulcsNXyGEqKLupd8jPjP+\nmdaV8BdCiCroRvINPj/5OUtPLyUlJ6XU60v4CyFEFROVFMWS/ywhKz+LpKwk1oWso7Qj9Uj4CyFE\nFeNg5oClsSUAlsaWjGg5ApVKVaptSPgLIUQVY2Nqw1u+b1HHzJVBtSfgWsu11NuQ8BdCiEouvzC/\n2GWd2ua1mdvtfaKvKGRm5pV6mxL+QghRiUWnRPPJ0U84dedUsWV6enoMHOjGwYO3Sr3dKtHPXwgh\nahq1oubX67+yO2I3akXNd5e/I/22JX06tSpyfd/KyphBg9xLvX0JfyGEqGSSs5PZdHETkYmRAGRm\n5XMjKpnY2FNYG9jj6+tc5PV6eqW72QsS/kIIUamE3g/l6z+/Jis/S9NWmGhD43t9MVVb8/33ETRt\naou1dfHB2kpDwl8IISqB3IJcdvy1g+PRxzVtKpWKfo370atnX+b/6xzJyTn0798IKyvj596fhL8Q\nQujYndQ7rL+wntiMWBQe9uqxNbVlgucE3O0eXs+fOLEVRkb6ODtblMk+K7S3z5kzZ2jSpMkTv0aP\nHl2RpVQ63bt3Z/Xq1Voty83NZfny5fTp04eWLVvSoUMHpk2bRlhY2FP3k5GRwdKlS+nXrx9t2rTB\n39+fmTNncvPmzTI7FiGE9tSKmjXn1xCbEUtuXiFXwpIwS27I3BfmaoIfoEGDWmUW/FDB4e/p6cmJ\nEyeKfC1atAg9PT0mTZpUkaVUae+//z4HDhzggw8+4MCBA2zYsAFTU1NGjhzJ9evXS1wvMTGRIUOG\ncOTIEWbOnMnPP//MsmXLSE9P59VXX+Xq1asVeBRCCAA9lR6j2owiK6uAP0MeYH+3M7mnvXkQV1i+\n+y3Xrf8PIyMjHBwcNF8mJiZ88cUXTJgwgS5dulRkKVVWRkYG+/bt45133sHf3x8XFxdatmzJ559/\njp2dHdu3by9x3Y8++ghFUdi6dSs9e/bE1dUVT09PVq1ahaOjI4sWLarAIxFCPNLUvinj24+iv8Uk\nnPJboKhVREY+KNd96vQhr9WrV2NkZMSMGTN0WUaVo6enx4kTJygsfHxmoK+vz5YtW5g8efIT10lI\nSODQoUOMGTMGC4uiHx0NDQ1ZvHgxc+bM0bRFRUUxYcIEzaWhuXPnkpaWplnevXt3Nm7cyNSpU2nT\npg2dOnVi5cqVmuWJiYm89tprtG/fnrZt2zJ27FjCw8M1y5s0acLu3buL1PHfbTdu3GD8+PF4eXnh\n7e3N9OnTiYmJeYZ/LSEqj/zCfL4P+56w+OKXaLs17MobE/ypU8ect9/2pkeP+uVai87CPykpia1b\ntzJjxgxMTU3LZR97915nypRfmTLlV/buLX45ZMeOSM3y3367VWz51q1/aZYfP148eNavv6RZfvbs\n/fI4hGIsLCwIDAzk22+/xd/fn3/+85/s2LGDe/fu4eLigp2d3RPXCw8PR61W06ZNmycud3d3p0GD\nBgDExcUxatQoPDw8CA4OZvny5Vy7do3XXnutyDrLli2jW7du/Pzzz4wdO5YVK1Zw/vx5AD7++GMK\nCgr47rvv+OmnnzA3N+f111/X+jjfeecdnJ2dCQ4O5ttvvyU5OZn3339f6/WFqGzupd9j/vH5HL55\nmPXnN3LkP8Uvszo6mvPhhx3x8LAt93pK1dsnJyeHuLg40tPTsbGxwcHBASMjo2fa8XfffYednR0B\nAQHPtH5NNmfOHFq3bs3OnTv55Zdf2L17NyqVit69e/Ovf/0LS0vLYus8Omu3srJ66va3bduGi4sL\ns2bN0rQtWbIEf39/QkND8fT0BKBbt2688sorAEyaNIl169Zx8eJFfHx8iI6OpkmTJri4uGBsbMwn\nn3zCtWvXUKvV6Ok9/ZwjOjqaTp06UbduXQwMDPj8889JTEzU6t9HiMpEURSO3DrCzr92UqAuIDUt\nl7OR94lM2Y6TzVSaNi16wlba0Tmf1VPDPy8vj507d/Lzzz9z6dKlYpca2rdvT58+fRg8eHCp3gj2\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_estimates(table2)\n", + "savefig('chap03-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "From here on, we will work in units of billions." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "un = table2.un / 1e9" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "census = table2.census / 1e9" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This expression computes the elementwise differences between the series, then divides through by the UN value to produce relative errors, then finds the largest element.\n", + "\n", + "So the largest relative error between the estimates is about 1.3%." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2862470293832287" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(abs(census - un) / un) * 100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Break down that expression into smaller steps and display the intermediate results, to make sure you understand how it works.\n", + "\n", + "Where in the series is the largest relative error between the two estimates, near the beginning or the end?\n", + "\n", + "When I computed relative errors, I used `un` as the denominator. But that was an arbitraty choice. What happens if we use `census` instead? How much difference does it make." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Year\n", + "1950 0.032480\n", + "1951 0.022089\n", + "1952 0.017480\n", + "1953 0.016188\n", + "1954 0.017056\n", + "1955 0.020448\n", + "1956 0.023728\n", + "1957 0.028307\n", + "1958 0.032107\n", + "1959 0.030321\n", + "1960 0.016999\n", + "1961 0.001137\n", + "1962 0.000978\n", + "1963 0.008650\n", + "1964 0.017462\n", + "1965 0.021303\n", + "1966 0.023203\n", + "1967 0.021812\n", + "1968 0.020639\n", + "1969 0.021050\n", + "1970 0.021525\n", + "1971 0.023573\n", + "1972 0.023695\n", + "1973 0.022914\n", + "1974 0.021304\n", + "1975 0.018063\n", + "1976 0.014049\n", + "1977 0.011268\n", + "1978 0.008441\n", + "1979 0.007486\n", + " ... \n", + "1986 0.012805\n", + "1987 0.018115\n", + "1988 0.023658\n", + "1989 0.028560\n", + "1990 0.031861\n", + "1991 0.037323\n", + "1992 0.038763\n", + "1993 0.040597\n", + "1994 0.042404\n", + "1995 0.042619\n", + "1996 0.041576\n", + "1997 0.040716\n", + "1998 0.040090\n", + "1999 0.039403\n", + "2000 0.039129\n", + "2001 0.038928\n", + "2002 0.038837\n", + "2003 0.039401\n", + "2004 0.040006\n", + "2005 0.041050\n", + "2006 0.041964\n", + "2007 0.043192\n", + "2008 0.044599\n", + "2009 0.046508\n", + "2010 0.049851\n", + "2011 0.053943\n", + "2012 0.057723\n", + "2013 0.061092\n", + "2014 0.065061\n", + "2015 0.092982\n", + "Length: 66, dtype: float64" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = abs(census - un)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Year\n", + "1950 0.012862\n", + "1951 0.008585\n", + "1952 0.006674\n", + "1953 0.006072\n", + "1954 0.006286\n", + "1955 0.007404\n", + "1956 0.008439\n", + "1957 0.009887\n", + "1958 0.011011\n", + "1959 0.010208\n", + "1960 0.005617\n", + "1961 0.000369\n", + "1962 0.000311\n", + "1963 0.002702\n", + "1964 0.005350\n", + "1965 0.006399\n", + "1966 0.006829\n", + "1967 0.006289\n", + "1968 0.005827\n", + "1969 0.005821\n", + "1970 0.005832\n", + "1971 0.006258\n", + "1972 0.006166\n", + "1973 0.005847\n", + "1974 0.005332\n", + "1975 0.004437\n", + "1976 0.003388\n", + "1977 0.002670\n", + "1978 0.001965\n", + "1979 0.001712\n", + " ... \n", + "1986 0.002585\n", + "1987 0.003591\n", + "1988 0.004604\n", + "1989 0.005461\n", + "1990 0.005988\n", + "1991 0.006900\n", + "1992 0.007054\n", + "1993 0.007277\n", + "1994 0.007490\n", + "1995 0.007423\n", + "1996 0.007142\n", + "1997 0.006903\n", + "1998 0.006709\n", + "1999 0.006511\n", + "2000 0.006386\n", + "2001 0.006274\n", + "2002 0.006183\n", + "2003 0.006197\n", + "2004 0.006216\n", + "2005 0.006302\n", + "2006 0.006365\n", + "2007 0.006473\n", + "2008 0.006604\n", + "2009 0.006805\n", + "2010 0.007208\n", + "2011 0.007708\n", + "2012 0.008153\n", + "2013 0.008530\n", + "2014 0.008982\n", + "2015 0.012652\n", + "Length: 66, dtype: float64" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = a / un\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2862470293832287" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = max(b)\n", + "c\n", + "c * 100" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2813631502151765" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(abs(census - un) / census) * 100" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Constant growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can select an element from a series using bracket notation and one of the elements from the index. Here's the first element:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.5576286540000002" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census[1950]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the last element." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.2564900110000004" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census[2015]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But we can get the first and last years from the index itself:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1950, 2015)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first_year = census.index[0]\n", + "last_year = census.index[-1]\n", + "first_year, last_year" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And use them to look up the first and last elements.\n", + "\n", + "Then we can compute the average annual growth in billions of people per year." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.07229017472307693" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_growth = census[last_year] - census[first_year]\n", + "elapsed_time = last_year - first_year\n", + "annual_growth = total_growth / elapsed_time\n", + "annual_growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's create a `TimeSeries` to contain values generated by a linear growth model." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "results = TimeSeries()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Initially the Series is empty, but we can initialize it so the starting value, in 1950, is the 1950 population estimated by the US Census." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
19502.557629
\n", + "
" + ], + "text/plain": [ + "1950 2.557629\n", + "dtype: float64" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[1950] = census[1950]\n", + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After that, the population in the model grows by a constant amount each year." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for t in linrange(1950, 2015):\n", + " results[t+1] = results[t] + annual_growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results looks like, compared to the actual data." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_estimates(table2)\n", + "plot(results, '--', color='gray', label='model')\n", + "decorate(xlabel='Year', ylabel='World population (billion)')\n", + "savefig('chap03-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model fits the data pretty well after 1990, but not so well before." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Try fitting the model using data from 1965 to the present, and see if that does a better job.\n", + "\n", + "Hint: Copy the code from above and make a few changes.\n", + "\n", + "Make sure your model starts in 1950, even though the estimated annual growth is based on later data. You might have to shift the first value in the series up or down to match the data." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nxMWfMcac0P8Bu1c/cM6INSAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results2 = TimeSeries()\n", + "results[1965] = census[1965]\n", + "for t in range(1965, 2015):\n", + " results[t+1] = results[t] + annual_growth\n", + "newfig()\n", + "plot_estimates(table2)\n", + "plot(results2, '--', color='gray', label='model')\n", + "decorate(xlabel='Year', ylabel='World population (billion)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now with system objects" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can rewrite the code from the previous section using system objects." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "t0 = census.index[0]\n", + "t_end = census.index[-1]\n", + "total_growth = census[t_end] - census[t0]\n", + "elapsed_time = t_end - t0\n", + "annual_growth = total_growth / elapsed_time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the system object." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "variables = System(t0=t0, \n", + " t_end=t_end,\n", + " p0=census[t0],\n", + " annual_growth=annual_growth)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can encapsulate the code tha runs the model in a function that stores the resulting Series as a new system variable." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation1(system):\n", + " \"\"\"Runs the constant growth model.\n", + " \n", + " Adds TimeSeries to `system` as `results`.\n", + " \n", + " system: system object\n", + " \"\"\"\n", + " results = TimeSeries()\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1] = results[t] + system.annual_growth\n", + " system.results = results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also encapsulate the code that plots the results." + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_results(system, title=None):\n", + " \"\"\"Plot the estimates and the model.\n", + " \n", + " system: System object with `results`\n", + " \"\"\"\n", + " newfig()\n", + " plot_estimates(table2)\n", + " plot(system.results, '--', color='gray', label='model')\n", + " decorate(xlabel='Year', \n", + " ylabel='World population (billion)',\n", + " title=title)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation1(variables)\n", + "plot_results(variables, title='Constant growth model')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`plot_results` uses `decorate`, which takes parameters that specify the title of the figure, labels for the $x$ and $y$ axis, and limits for the axes. To read the documentation of `decorate`, run the cells below." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function decorate in module modsim:\n", + "\n", + "decorate(**kwargs)\n", + " Decorate the current axes.\n", + " \n", + " Call decorate with keyword arguments like\n", + " \n", + " decorate(title='Title',\n", + " xlabel='x',\n", + " ylabel='y')\n", + " \n", + " The keyword arguments can be any of the axis properties\n", + " defined by Matplotlib. To see the list, run plt.getp(plt.gca())\n", + " \n", + " In addition, you can use `legend=False` to suppress the legend.\n", + " \n", + " And you can use `loc` to indicate the location of the legend\n", + " (the default value is 'best')\n", + "\n" + ] + } + ], + "source": [ + "help(decorate)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " adjustable = box\n", + " agg_filter = None\n", + " alpha = None\n", + " anchor = C\n", + " animated = False\n", + " aspect = auto\n", + " autoscale_on = True\n", + " autoscalex_on = True\n", + " autoscaley_on = True\n", + " axes = Axes(0.125,0.125;0.775x0.755)\n", + " axes_locator = None\n", + " axis_bgcolor = (1.0, 1.0, 1.0, 1.0)\n", + " axisbelow = True\n", + " children = [\n", + " label = \n", + " legend = None\n", + " legend_handles_labels = ([], [])\n", + " lines = \n", + " navigate = True\n", + " navigate_mode = None\n", + " path_effects = []\n", + " picker = None\n", + " position = Bbox(x0=0.125, y0=0.125, x1=0.9, y1=0.88)\n", + " rasterization_zorder = None\n", + " rasterized = None\n", + " renderer_cache = None\n", + " shared_x_axes = \n", + " xlabel = \n", + " xlim = (0.0, 1.0)\n", + " xmajorticklabels = \n", + " xminorticklabels = \n", + " xscale = linear\n", + " xticklabels = \n", + " xticklines = \n", + " xticks = [ 0. 0.2 0.4 0.6 0.8 1. ]\n", + " yaxis = YAxis(54.000000,36.000000)\n", + " yaxis_transform = BlendedGenericTransform(BboxTransformTo(Transforme...\n", + " ybound = (0.0, 1.0)\n", + " ygridlines = \n", + " ylabel = \n", + " ylim = (0.0, 1.0)\n", + " ymajorticklabels = \n", + " yminorticklabels = \n", + " yscale = linear\n", + " yticklabels = \n", + " yticklines = \n", + " yticks = [ 0. 0.2 0.4 0.6 0.8 1. ]\n", + " zorder = 0\n" + ] + }, + { + "data": { + "image/png": "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\nDANJWrRokTwej5YuXSqPx6NJkyZp1apVkqTGxkbl5uaqurpaY8aM0SeffKKuri7Nnj3b6zXMZrNO\nnDgR+DMAAPRZr8IgLCxMy5cv1/Lly3s8N378eDU1NXU/PnnyZOC6AwCEBDeqAwAQBgAAwgAAIMIA\nACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAAAgwgAA\nIMIAACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAAAgwgAAIMIAACDCAACg\nXoZBZ2en1q5dq/T0dFmtVhUWFurixYv3rP/ss880Z84cjRkzRpmZmdqxY0fAGgYABF6vwqCyslL1\n9fUqLS1VTU2NHA6HCgoK7lrb1tamvLw8jR49Wtu3b1dOTo6Ki4t14MCBgDYOAAicMF8Fbrdb1dXV\neuONNzRx4kRJUkVFhTIyMmS325WamupV/8EHH2jAgAEqLi6WyWTS8OHDdeLECW3atEnp6enBOQsA\nQJ/4fGdw6tQptbe3y2azdY8lJCQoPj5eDQ0NPeobGhqUlpYmk+mbl7bZbLLb7TIMI0BtAwACyec7\nA4fDIUmKiYnxGo+Oju5+7n/rR40a1aO2o6NDly9f1qBBg+76czo7O71+HgDAt9tr5u019H75DIOO\njg6ZTCaFh4d7jVssFrlcrh71N27ckMVi6VEr3dpyuhen0ylJmjt3ru+uAQBenE6nnn766fs+3mcY\nREREqKurSx6PR2Fh35S73W5FRkbetf5/F/3bj+9Wf1tSUpK2bt2qIUOGyGw29/oEAOD/WWdnp5xO\np5KSkvr0Oj7DIC4uTtKt1Ln9vSS1trb22DqSpNjY2O6/8u+s7devnx5//PF7/pyIiAiNGzeu140D\nAG7pyzuC23xeQE5MTFT//v115MiR7rHm5ma1tLQoLS2tR/3YsWPV0NDgdbH48OHDSk1N9bqoDAB4\nePhcnS0Wi7Kzs1VWVqZ9+/bp+PHjKioqks1mU0pKitxut5xOZ/dW0KxZs9TW1qY333xTZ8+e1ZYt\nW7Rr1y7l5eUF/WQAAPfnMaMX/+/p8XhUXl6u+vp6eTweTZo0SatWrdKgQYN0+PBh5ebmqrq6WuPH\nj5ck/etf/9JvfvMbNTU1aejQoSosLNRPfvKToJ8MAOD+9CoMAADfbSHbxOf+Rt/wdy52796trKws\npaSkaNq0aXr//ff7/D/FDwt/5+JOCxYsUE5OTpA7DB1/58LhcKiwsFBWq1UTJkxQSUmJOjo6Qthx\n8Pg7F4cOHdKsWbOUkpKiqVOnauPGjd/JD7muWrVKxcXF31pz32unESLr1q0zJk6caBw4cMA4duyY\nMXv2bGPOnDl3rb106ZJhs9mMX//618bnn39uVFdXG6NGjTL2798fqnaDyp+52Lt3r/HMM88YW7Zs\nMc6fP2989NFHxrhx44yqqqoQdx0c/szFnWpra42RI0ca8+bNC0GXoeHPXLhcLmP69OlGTk6OcfLk\nSePQoUPG5MmTjdWrV4e46+DwZy7OnTtnJCcnG5WVlcYXX3xhfPTRR8aYMWOMmpqaEHcdPF1dXcb6\n9euNkSNHGitXrrxnXV/WzpCEgcvlMqxWq/HXv/61e+zChQvGyJEjjX/+85896t99911jypQpRmdn\nZ/fY8uXLjfnz54ei3aDydy5eeeUVY+HChV5jVVVVxpQpU4Lea7D5Oxe3nTt3zrDZbMaLL774nQkD\nf+eirq7OGDt2rHHlyhWvsZkzZ4ak32Dydy62bNli2Gw2r7HCwkJjwYIFQe81FL744gtj3rx5xvjx\n443nn3/+W8OgL2tnSLaJuL/RN/ydi1dffVWvvfaa15jJZNK1a9eC3muw+TsX0q3tg2XLlikvL0/D\nhw8PVatB5+9cHDhwQM8995yioqK6x2bOnKm6urqQ9BtM/s7FoEGDdOXKFe3atUtdXV06ffq0Ghoa\n+vwhrIeF3W5XXFycdu7cqYSEhG+t7cvaGZIwuJ/7G92t9vb9jR5l/s5FcnKyRowY0f34+vXrqq2t\n1aRJk4LbaAj4OxeS9N5770mSXn755eA2F2L+zsW5c+cUHx+v9evXa8qUKcrIyFBpaeldbxHzqPF3\nLjIzMzVr1iwtWbJESUlJmjFjhtLS0pSfnx+SfoMtKytLZWVlGjJkiM/avqydIQmDUN3f6FHg71z8\n77H5+flyuVxavHhxMNsMCX/n4tixY9q8ebNKS0u/cx9g9Hcurl+/rrq6Ol24cEEbNmzQihUrtHv3\nbv3qV78KVctB4+9cXLt2TS0tLcrLy1NdXZ1KS0t18OBBVVVVharlh0Zf1k6ft6MIhFDd3+hR4O9c\n3NbW1qb8/Hx9/vnn2rRpk+Lj40PRblD5Mxcul0uvv/66Fi1aFJCP3j9s/P29CAsLU1RUlMrKymQ2\nm/Xss8/K4/Fo4cKFWrFihQYOHBjK9gPK37koLy+X2WzWkiVLJEmjRo2Sx+NRSUmJcnJyHum58Fdf\n1s6Q/Hl15/2N7hTo+xs9CvydC+nW7T9eeuklNTc3q6amRsnJyUHvMxT8mYujR4/q7NmzKi8vl9Vq\nldVq1Y4dO9TQ0CCr1aovv/wyZH0Hg7+/FzExMRo+fLjXTR1vbye2tLQEsdPg83cujh492uP6wJgx\nY3Tz5k199dVXwWv0IdSXtTMkYcD9jb7h71xcunRJubm56urqUm1trRITE0PZblD5MxfJycn6+OOP\ntWPHju6vqVOnKikpSTt27FB0dHSo2w8of38vxo0bp5MnT+rmzZvdY6dPn5bZbH7k3zX6OxexsbFq\namryGjtz5oxMJpOGDRsW9H4fJn1ZO80lJSUlQe5PZrNZ//nPf/THP/5RP/zhD3X9+nWtXLlSTz/9\ntPLz8+V2u9XW1qbw8HCZzWZ9//vf18aNG9XS0qJhw4bpww8/1ObNm1VSUqKnnnoq2O0Glb9zsXz5\ncjU1Nen3v/+9Bg4cqK+//lpff/21Ojo61K9fvwd9On3iz1x873vf0xNPPOH1deDAAbW3t2v+/PmP\n/B8J/v5e/OAHP1B1dbWampo0YsQInTp1SmvWrNHUqVP105/+9EGfTp/4OxdPPPGEqqqqZDKZFBsb\nK7vdrjVr1uiFF17QtGnTHvTpBFR9fb2ioqKUkZEhSYFdO/v8T7C9dPPmTeOtt94ybDabkZqaaixc\nuNC4dOmSYRiG8emnnxojR440Pv300+76xsZGY+bMmUZSUpKRmZlp7Nq1K1StBl1v56Kjo8NITEw0\nRo4c2ePrmWeeecBnERj+/l7caeXKld+ZzxkYhv9zcebMGeOXv/ylkZycbPzoRz8yfvvb3xoul+tB\ntR9Q/s7FJ598YvzsZz8zUlJSjKlTpxqVlZWG2+1+UO0Hzbx587w+ZxDItZN7EwEAQndvIgDAw4sw\nAAAQBgAAwgAAIMIAACDCAAAgwgAAIMIAACDCAAAg6b+F0wB1x3wNSAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.getp(plt.gca())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The constant growth model doesn't make a lot of sense, because it seems like the number of deaths and births should depend on the size of the population. As a small improvement, let's write a version of `run_simulation1` where the number of deaths is proportional to the size of the population, but the number of births is constant. This model doesn't make a lot of sense, either, but it's a good exercise.\n", + "\n", + "Write a function called `run_simulation1b` that implements a model where the number of births is constant, but the number of deaths is proportional to the current size of the population. Set the death rate to `0.01`, which means that 1% of the population dies each year; then choose the number of annual births to make the model fit the data as well as you can.\n", + "\n", + "Hint: It probably won't fit very well." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation1b(system):\n", + " results = TimeSeries()\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1] = 0.0275 * results[t] - 0.01 *results[t] + results[t]\n", + " system.results = results" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEjCAYAAADaCAHrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdUFNfbwPHvUgUEqYKICqIUqSIqNlTEEmvUYCxYElss\niTEmQRNjN5afJlHU2DWxVzSaGGOMJcbYsFAUQSwUFRAE6XXeP3jZuAK6KEX0fs7hHHbmzp1nduHZ\nmTt37pVJkiQhCIIgvFVUqjoAQRAEofKJ5C8IgvAWEslfEAThLSSSvyAIwltIJH9BEIS3kEj+giAI\nbyGR/CvI1KlTsbW1VfhxdHTEy8uLuXPnkpKSUq77Gzp0KF5eXs8t4+/vXywmBwcH2rVrh5+fHw8f\nPiyxfExMzAv3X1BQoFBu//792Nracv78+Zc7oEqgTIwxMTHF3jN7e3uaNWvGe++9x5YtW8jPz6+U\neKOjo+W/nz9/HltbW/bv31/p+35VXl5e2Nra0qtXr1LLJCUl0aRJk3I9xqLP0t/fv1K2e92pVXUA\nb7pp06ZhYGAAQHZ2Nrdu3WLXrl0EBwezY8cOVFVVKz2mjz76iIYNGwKQk5NDTEwMO3fuJDAwkAMH\nDlCzZk0AOnfuTP369TE0NHxufWlpaYwYMYL27dvz8ccfV3j8VcHd3Z0BAwYAhV90ycnJ/P3338yb\nN48zZ86watWqCv0sR44ciYmJCQsXLqywfZRmxowZ3Llzhy1btpRrveHh4URHR1OvXr1i606cOFFp\nX6pvK5H8K5i3tzcWFhYKyywtLZk9ezanT5+mY8eOlR5T69atadmypcIyNzc3xowZw4EDB/D19QXA\nzs4OOzu7F9aXnJxMcHAw7du3r5B4Xwf16tWjT58+Css++OADvvvuO9asWcPGjRsZPXp0he3/zJkz\n9O3bt8Lqf9G+69atW651WlhYEBMTw/HjxxkxYkSx9ceOHcPQ0JCkpKRy3a/wH9HsUwWKEm9EREQV\nR/IfDw8P4PWKqTr45JNPsLKyYtOmTeTl5VV1ONWGubk59vb2HD9+vNi6jIwMzp49+8JmTOHViORf\nBYra1uvXr6+w/MiRI/j6+tKsWTP5/YHFixeTk5OjUO7s2bMMHDgQV1dXvL292bNnzyvH9ODBg2Ix\nPdvm7+/vj5OTE8eOHaNNmzY0bdqUPXv20KlTJwBWrFhR7B5BYmIin3/+Oe7u7ri5uTFhwgTu37//\nwnju3buHn58fnp6eODo60qJFCz766COFL6eiNvuwsDCmTJlC8+bNadq0KePHjy92nyIxMZFp06bh\n4eFBs2bNmDZtGqmpqS//hv0/NTU1unfvTmJiItevX5cvz87O5vvvv8fLywtHR0c6derEsmXLin2W\nLzrOovZmgICAgGL3KDIyMpg9ezatWrXC1dWV4cOHc/PmTfn6onsDAQEB9OrVCycnJ6ZNmwZAQkIC\ns2fPplOnTjg6OtKsWTOGDRtGYGCgfHtbW1tiY2O5cOFCsfb3/fv38+677+Lk5ISHhwdTp04lPj5e\n6ffO29uby5cvF7v/dfr0aQoKCkq9Kt6zZw99+vSR73fKlCnFPu+8vDxWrFiBl5cXLi4uDBs2jMjI\nyBLre9XjqK5Es08Fe/LkifzSNTc3l8jISObNm4eDg4PCmc2ePXuYPn06Xl5efP755+Tm5nLs2DE2\nbNgAwJdffgkUJv7Ro0djaWnJp59+SlJSEvPnz0cmk8nvLbxIamqqPKb8/Hyio6NZvHgx5ubm9O/f\n/7nb5uXlMWPGDD744ANycnKwsbFh2rRpLFiwgM6dO9O5c2eFewRfffUV7u7ufP7559y6dYvt27cT\nExPDwYMHS93Ho0ePGDBgADVr1sTX1xcDAwNu3LjB7t27CQ0N5a+//kJdXV1efty4cVhbWzN58mSi\no6P56aefiI+PZ+/evUBhIvb19SUmJoZhw4ZhYmJCQEAAv//+u1Lv14s0btwYgLCwMJydncnPz2fs\n2LFcvnyZAQMGYG1tTUhICKtXr+bGjRv8+OOPyGQypY7T0NCQxYsX8+WXX8rvO1hbW8sT2ZIlS7C1\nteXjjz8mLi6OTZs2MXLkSP78809q1Kghj3HOnDn069cPHx8fzM3NycrKYsiQIaSmpjJkyBBMTU25\ne/cuO3bsYNSoUfz5558YGRmxePFiFixYgIGBAR999BFubm5A4Re9v78/Xbt2ZcCAAcTFxbF161Yu\nXLjA3r17X3ifCAqTv7+/PydPnlRoUjt27BgtW7ZEV1e32DaLFi1i48aNtGrVii+//JL4+Hi2bt3K\n2bNn2bNnj7yJdfr06QQEBNCzZ0/c3Nz4+++/+fTTT4vVVx7HUW1JQoXw8/OTbGxsSvxxdnaWrl69\nqlC+W7du0vvvvy8VFBTIl+Xm5kqenp5Sz5495cv69u0rtW/fXkpNTZUv+/fffyUbGxupY8eOz41p\n+fLlpcZkZ2cnHTt2rMTy0dHRCq/XrFmjUC46OlqysbGRli9fLl+2b98+ycbGRho3bpxC2alTp0o2\nNjZSVFRUqXGuWbNGsrW1lW7duqWwfMmSJZKNjY0UEhKisI+JEycqlJsxY4ZkY2Mj3blzR5IkSdqy\nZYtkY2OjcHzp6elS9+7dJRsbG+ncuXOlxlJ0bH5+fqWW+eeffxTel6K4Tp8+rVBu586dCnEoe5yS\nJBWL4dy5c5KNjY3Ut29fKTc3V77c399fsrGxkc6ePatQbuTIkQr7+PXXX0uMcceOHZKNjY109OhR\n+bKOHTtKvr6+8tdRUVGSnZ2dtGTJEoVtb968KTk4OEjz588v9b16tj4vLy/p448/lq/LycmRmjVr\nJu3YsUMe+759+yRJkqSIiAjJ1tZWmjBhgsL/ydWrVyVbW1vpk08+kSRJksLCwiQbGxtp3rx5Cvst\n+p8s+jtV9jhK+vt+E4hmnwr2v//9j02bNrFp0ybWrl3LzJkzsbCwYMiQIZw9e1Ze7pdffmHt2rXI\nZDL5ssTERPT09MjIyJC/Dg0NpUePHvIeOVDYXl/UNKAMPz8/eUzr1q1j3rx5uLi4MHHiRAICAl64\nffPmzZXeV48ePRReOzk5AYVNDqUZM2YM//zzD9bW1vJlWVlZqKgU/rkWvR9F3nnnHYXX9vb2QOEV\nBBQ2IxgbG+Pt7S0vo62tjY+Pj9LH8Ty5ubkKr//44w8MDQ1xcHAgKSlJ/tO+fXtUVVU5efLkSx1n\nSbp164aa2n8X8EXvb9GxF3n2M+vevTv//vsvbdu2lS97uknqefs+duwYBQUFeHl5KRyfsbEx9vb2\n8uNTRqdOnThz5ox83+fOnSM9PV3elPi0EydOIEkSY8aMUfg/cXFxoU2bNpw6dYq8vDz+/vtvAAYO\nHKiw/bBhwyrsOKoj0exTwdzc3Ir19nnnnXfo0qULc+fO5ciRIwCoq6tz8eJFDh8+zO3bt4mKiiIx\nMRFA3tMiNjYWKH6vAKBhw4YEBQUpFZODg0Ox3j69e/emV69eLFy4kHfeeUehyeBZRkZGSu0HKHbZ\nXFTvswnzWbm5uXz//feEhoYSFRVFTEyMvOtfQUGBQtlnm7s0NDQA5OVjY2NL7E5oZWWl9HE8T3Jy\nMvDfsUZFRZGUlESrVq1KLF90fwXKdpwlUfb9Lan5QiaTsXbtWq5cuUJUVBRRUVHy7Z6376ioKKB4\nci3ydJPci3Tq1ImffvqJc+fO4enpybFjx3B1dcXExITbt28rlC1q1y/pc7O2tubMmTM8fvxY/n/y\n7Gde1L25Io6jOhLJvwoYGBjQsmVLjh07RkpKCrVq1WLu3Lls3bqVJk2a4OrqSp8+fWjatClz586V\nJ4uis52srKxidSqTKJ5HU1OTjh07snnzZm7fvk2TJk1KLVt0ZqqMspQtcunSJUaOHIm2tjatW7em\nf//+NGnShKioKObMmVPmfchkshLfM6mcprK4ceMGgLxbbH5+PpaWlsycObPE8np6ekDZj7Mkyr6/\nzz6DcPv2bQYNGkRubi5t27ale/fu2NvbI0kSEyZMeG5dRX9rP/7443NPEpTh7u6Ovr4+x48fp127\ndvz111+MHDmyxLLP+7yKYlJXV5f/n2RnZ8tPBJ4uUxHHUR2J5F9Fiv7wVFRUiI2NZevWrfTp04fF\nixcrlHv68r1u3brIZDLu3btXrD5lnsItS0xVafny5dSoUYNff/1V4Yx19erVL1WfhYUFly5dIi8v\nT6GJpDyeWi0oKOCPP/7AzMwMBwcH+f5CQkLw8PBQeC+LbuKbmZkB5X+cZbFu3TqePHnCkSNHsLS0\nlC8/dOjQC7ctuhKtU6eOvImtyKlTpxSaJF9EVVWVjh07cuLECfr06UNCQoJC89zTiq6gb9++jYuL\ni8K6O3fuoK2tTa1ateRn/Hfv3pU3g0Hxz7s8j6M6Em3+VeDRo0ecO3cOe3t7dHV15V3dGjVqpFDu\n1KlT3L17V95/3NDQkObNm/PLL78ofClcuXKF0NDQV4opKyuL48ePY2hoWCyOFyk6q3zVq48iycnJ\nGBoaKiTE1NRU+f2Isj752aVLF1JTUxW6xObm5rJ79+5XjnXVqlXExsYycuRI+Rmnl5cXycnJ7Nix\nQ6Hszp07mTx5Mv/++y9QtuNUUVEpt/e3aN9aWlqYm5vLl+Xk5LBz584X7ruoC+aaNWsUzsZv3LjB\nuHHj+Omnn8oUi7e3N3FxcaxcuRJ7e/sSm+ie3u+6desU9hsaGsrZs2dp3749MpmMTp06oaqqyqZN\nmxS237ZtW4n1lddxVDfizL+C/fnnn/I2aUmSePjwIbt37yYzM5PJkycDhUnf3Nyc1atXk52djZmZ\nGUFBQQQEBKCpqUl6erq8Pj8/P4YMGcKAAQMYMmQImZmZbN68WelunlDYXfTpcXySkpLYt28fsbGx\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation1b(variables)\n", + "plot_results(variables, title='Bad Birth and Deathrate Model')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Proportional death, proportional birth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's get to a more realistic model where the number of births and deaths is proportional to the current population." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation2(system):\n", + " \"\"\"Runs the constant growth model.\n", + " \n", + " Adds TimeSeries to `system` as `results`.\n", + " \n", + " system: system object\n", + " \"\"\"\n", + " results = TimeSeries()\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " births = system.birth_rate * results[t]\n", + " deaths = system.death_rate * results[t]\n", + " results[t+1] = results[t] + births - deaths\n", + " system.results = results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I kept the death rate at 1% and chose the birth rate to fit the data." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "variables.death_rate = 0.01\n", + "variables.birth_rate = 0.027\n", + "variables.death_rate2 = 0.01\n", + "variables.birth_rate2 = 0.04" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEjCAYAAADaCAHrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVPX++PHXsO/7poIKCKggyKa470ualBmWisstl1zK\nSkvzmmlfzfRmuXbdK3fTJLcWu2aamikoIsjqgqCyI/s2zPn9wY/RicVBBUE/z8fDx2Pmc875nPeM\nzHvOfM5nkUmSJCEIgiA8VzSedgCCIAhCwxPJXxAE4Tkkkr8gCMJzSCR/QRCE55BI/oIgCM8hkfwF\nQRCeQyL5C9WaO3cubm5uKv/atWuHj48PQUFBhISEPO0QH1lmZiaFhYXK55Wv9WlrLHHUZOzYsfTt\n27fBjhPql9bTDkBo3D766CPMzc0BkCSJ/Px8Dh06xNy5c8nOzuaNN954yhHWzcmTJ5k9ezYhISEY\nGBgA8Nprr9GlS5enHJkgNCyR/IVa9e/fH3t7e5WyV199lSFDhrBu3TqCg4PR0dF5StHVXUREBLm5\nuSpl3t7eeHt7P6WIBOHpEM0+Qp3p6enRt29f8vPziY+Pf9rhCILwCMSVv/BIZDIZAOXl5QD07duX\nrl27olAoOHLkCGZmZvz4449YWFgQGhrK2rVruXz5MgAdOnTg7bffxt/fX1lf37596dKlCx07dmT9\n+vVkZmbStm1b3n33XQICAlTOrW59/4ynXbt2/PHHHwD069ePTp06sX37dubOnUtISAixsbHK42/f\nvs3KlSv5888/KSgowNHRkeDgYEaOHKncZ+7cuYSHh7N8+XKWL1/OlStXMDQ0ZMiQIcyePRs9PT3l\nvn/99RdbtmzhypUr5OfnY2FhQZ8+fZg9ezYmJiZqv+9z584lMjKSRYsWsXz5cqKjo7G2tmbGjBm8\n+OKLrF69mh9++IGysjK6devGJ598omy2A4iNjWXVqlWcP3+e0tJS2rZty+TJk+nfv7/Kec6ePcvq\n1auJiYnBysqKKVOmVBtPQkICX331FX///TdlZWW0a9eO6dOn06NHD7Vfk/B0iOQv1JlCoeD8+fPo\n6Ojg7OysLD969ChOTk7MmzePjIwMLCwsOH78ODNmzKBly5ZMnToVgH379jFhwgRWr15Nv379lMef\nPXuWQ4cOMXbsWKytrdm9ezcTJ05k69atdOrUCaBO9f0znm7duqGtrc1vv/3GRx99hIuLS7WvLykp\niZEjR1JSUkJwcDDW1tYcO3aMjz/+mJs3b/Lhhx8q983KyuLNN9/khRdeIDAwkFOnTrF9+3Z0dHSU\n+50+fZpJkybh4+PDO++8g0wm48yZM+zdu5ecnBxWrVpVp/c/PT2dt956i6CgIAIDA9m2bRvz5s3j\n8OHD5OXlMX36dK5du8bOnTvR19dn6dKlQEWT17hx4zAyMuJf//oXhoaGHDx4kOnTp7NgwQLGjBmj\n/H+YNGkSrVu35t133yUrK4slS5Ygk8mqfJGMHj1a+eWgra3NkSNHmDx5MitWrGDIkCF1el1CA5ME\noRpz5syRXF1dpaioKCkzM1PKzMyU0tLSpEuXLkkzZ86UXF1dpc8++0y5f58+faS2bdtKKSkpyrKy\nsjKpZ8+eUq9evaS8vDxleU5OjtSjRw+pR48eUmlpqfJ4V1dX6bffflPul5mZKfn5+UkjR458pPr+\nGY8kSdLq1aslV1dXKSkpqcprrfTuu+9Kbdu2lSIjI5Vl5eXl0pQpUyQ3NzcpLi5O5bht27apnOOF\nF16Qunfvrnz+5ptvSn369JFKSkpU9hs5cqTk7e1dYxzVqdxn+/btyrI//vhDcnV1rXKO119/XSWO\noKAgqWPHjtLdu3eVZcXFxdLw4cMlT09PKTMzU5IkSRo+fHiV9/ivv/5SnqNScHCw1L9/f6mgoEBZ\nVlZWJo0ePVrq2rWrMpbg4GCV44TGQbT5C7UaPnw4Xbp0oUuXLnTv3p3XXnuN48ePM3bsWGbNmqWy\nb8uWLbG1tVU+v3r1KikpKYwZMwYjIyNluYmJCcHBwaSmphIZGaksd3JyUml+sLCw4KWXXuLy5ctk\nZmbWub5/xqOO8vJy/vjjD7p37467u7uyXENDg7feegtJkvj9999VjnnhhRdUnrdt25aMjAzl8w0b\nNvDDDz+o3BjPzs7GyMhIpctpXQwYMED5uHXr1gD06NFD5Rz29vakp6cDkJGRweXLl3nppZews7NT\n7qOrq8ubb75JcXExZ8+eJTMzk6ioKIYOHaryHgcEBKh0Q83Ozub8+fP06tWL4uJisrKyyMrKIjc3\nlwEDBpCRkcGVK1ce6bUJDUM0+wi1+s9//oOVlRVQkQBNTExwdnZGV1e3yr6WlpYqz5OTkwFwdHSs\nsq+TkxMAd+7cUfa0adOmTZX9WrVqhSRJ3L59u871/TMedWRnZ1NYWFjtOSqbuG7fvq1SbmFhofJc\nR0cHhUKhfK6pqUlSUhKrVq0iISGBW7dukZqaWufYHvTga9PU1KxSVlku/f8Z2ytjru113blzR7lf\ny5Ytq+zn5OREREQEUNE0BrB9+3a2b99ebYx3795V/wUJDU4kf6FWPj4+Vbp61qQyCVWSalkqonKb\ntra2suzBx5Uqbyg/mMjUre+f8aijtnNUJvR/dm3V0Kj9B/SWLVtYvnw5jo6O+Pn5MXDgQLy8vNi+\nfTuHDx+uc4wAWlpVP7qVN+Gro87r0tbWVtZRXFxc435w//9lzJgxVW4WV6ruy1xoPETyF+pNixYt\nALh+/XqVbTdu3ABQaYK4detWlf0SExPR1NTE3t6esrKyOtX3KCwsLDAwMHhi5ygpKWHNmjV07tyZ\nrVu3qiTtut7ofRzq/l+0aNECmUxGYmJilf0qf3k9WJ+mpiZdu3ZV2S8hIYHk5GT09fWfWPzCkyfa\n/IV64+7uruy1k5+fryzPz89n165dWFtb4+HhoSy/cuUK4eHhyucZGRkcOnSIgIAATE1N61xfdSqv\n0mu6EtbU1KRHjx6cOXOGqKgoZbkkSWzatAmZTEbv3r3Vfg+Ki4spKiqidevWKok/Ojqa8+fPAyCX\ny9Wu71FVvjeHDh0iJSVFWV5aWso333yDjo4O3bp1w8LCAn9/fw4dOqRy3+LSpUsq74eNjQ0eHh6E\nhISoNGGVlZUxb9483nnnnQZ5XcKjE1f+Qr3R1tZm/vz5vPfee4wYMYJXX30VgP3795OWlsbq1atV\nmkx0dHSYNGkS48ePR09Pj127dqFQKJRdJutaX3Uq2+c3b95Mz549VbqGVpo9ezZ///03Y8eOVXY7\n/e233zh37hz/+te/6tScYWpqipeXFwcOHMDIyAhHR0fi4+PZt2+fMtaCggJMTU3VrvNRzZ8/n/Hj\nx/Pqq68yatQoDA0NOXToEFFRUcyfP1853mDOnDmMGTOGkSNHMmbMGIqKivj2229Vunk+WN+IESMY\nNWoUZmZmHD16lMuXLzNr1qwq+wuNi0j+Qr0aPHgwpqamfP3116xbtw4tLS28vLxYsmQJfn5+Kvt2\n7NiRoUOH8vXXX5OXl4efnx+zZs2ibdu2j1RfdYYOHcqxY8c4cOAA58+frzb5t2zZku+//56VK1ey\nZ88eiouLcXZ2ZsmSJcovnLpYtWoVS5cu5YcffqC0tJQWLVowefJknJ2defvttzl37hyDBg2qc711\n5e3tze7du1m9ejVbt25FoVDQtm1b1q1bp9Ju7+Hhwfbt21mxYgVr167FxMSEGTNmEBkZycWLF6vU\nt2bNGr755hvkcjmOjo58/vnnDB8+vN5fj/B4ZFJtd4IEoYH07duXFi1a1NhzRBCEJ0u0+QuCIDyH\nRPIXBEF4DonkLwiC8BxqEm3+xcXFREZGYm1t/UgDdwRBEJ435eXlpKen4+HhoTLDbKUm0dsnMjJS\nOeOgIAiCoL6dO3dW2xOuSSR/a2troOJFPO4ITkEQhOdB5SSIlfnzn5pE8q9s6rGzs1N7nhlBEASh\n5jmuxA1fQRCEJio/P5+SkpJHOlYkf0EQhCaosLCQv/76izNnzjzSuhAi+QuCIDQxxcXFnDt3juLi\nYgoKCjh//nyt03ZXRyR/QRCEJqS0tJRz585RUFAAVMxU6+HhUet6DtURyV8QBKEJiYuLIy8vD6hY\nwMfX11e52l5diOQvCILQhLRr1w4bGxtkMhne3t6P3P29SXT1FARBECpoamri7+9PZmZmjX341SGu\n/AVBEBqx6m7kamhoPFbiB5H8BUEQGi1Jkrh06RLXrl174nWLZh9BEIRGSJIkIiIiuH37Nrdv36a8\nvBwXF5c69+qpibjyFwRBaGQkSSIqKopbt24pyx51JG9NRPIXBEFoRCRJIjo6mhs3bijLHBwcHqkv\nf21E8m8k+vbty9dff63WtpKSElavXs2gQYPw8PCgc+fOTJ06lcjIyIeeJz8/n5UrV/LCCy/g5eVF\nz549mTVrlsofmiAIT4ckScTGxqq08Tdv3hwvL68nmvhBJP8mad68efzyyy/8+9//5pdffmHLli3o\n6+sTHBxc642hjIwMXnnlFf744w9mzZrFkSNHWLVqFXl5ebz++uvEx8c34KsQBOGf4uPjVT6HdnZ2\neHt7P/HEDyL5Nzn5+fkcPXqU2bNn07NnT+zt7fHw8OA///kPlpaWfP/99zUeu3DhQiRJYseOHfTv\n3x8HBwe8vb1Zt24dtra2LFu2rAFfiSAID0pISCA2Nlb53NbWFl9fXzQ06idNi+TfBGloaHD69GnK\ny8uVZZqamnz33XdMnjy52mPS09M5fvw448ePx8jISGWbtrY2K1asYP78+cqyuLg43nzzTWXT0IIF\nC8jNzVVu79u3L1u3buWtt97Cy8uLbt26sXbtWuX2jIwMZsyYQadOnejYsSMTJkwgOjpaud3NzY2D\nBw+qxPFg2fXr13njjTfw8fHB19eXadOmkZyc/AjvliA0ftevX1f5fFhbW9dr4odnPPkfPnyNKVOO\nMWXKMQ4frtocsm9frHL7b7/drLJ9x46ryu1//lk18WzeHKHcfv783fp4CVUYGRkxevRodu7cSc+e\nPfnwww/Zt28fd+7cwd7eHktLy2qPi46ORqFQ4OXlVe12FxcXWrduDUBqaipjx47F1dWVkJAQVq9e\nTUJCAjNmzFA5ZtWqVfTp04cjR44wYcIE1qxZQ2hoKACLFi1CLpeze/duDhw4gKGhIW+//bbar3P2\n7Nk0b96ckJAQdu7cSXZ2NvPmzVP7eEFoSoyNjZWLrlhZWeHv71/v65XXqZ9/cXExqamp5OXlYW5u\njrW1NTo6OvUVm1CD+fPn4+npyf79+/npp584ePAgMpmMgQMHsmTJEoyNjascU3nVbmJi8tD6d+3a\nhb29PXPmzFGWffXVV/Ts2ZNLly7h7e0NQJ8+fXjttdcAmDRpEhs3biQ8PBw/Pz8SExNxc3PD3t4e\nXV1dPv30UxISElAoFGpdzSQmJtKtWzdatGiBlpYW//nPf8jIyFDr/RGEpsba2hp/f3+uXbuGn59f\ntYm/WF5MbkkuNoY2T+ScD03+paWl7N+/nyNHjhAREVGlqaFTp04MGjSI4cOHiy+Cx6ClpYVCoah2\nm0KhQEtL9b8qMDCQwMBACgsLCQsL4+effyYkJAQNDQ1WrlxZpQ5zc3MAcnJyHhpLdHQ00dHRyiT/\noGvXrinLK38pVDI2NqasrAyAadOmMWfOHI4dO4a/vz89e/Zk2LBhav+MnTlzJsuWLWPXrl0EBATQ\nu3dvhg4dqtaxgtAUWVtbY2VlVe3N3eyibNacX0OxvJi53ediovvwi7iHqTX5HzhwgBUrVlBaWkqf\nPn0YPHgwLVq0wMDAgJycHFJSUrh48SJffvkla9eu5Z133iEoKOixg3pShg1zZtgw5xq3BwW5ERTk\nVuP24OD2BAe3r3H7xImeTJzo+VgxVjIxMSE/P7/abTk5OZiZmQHw999/88cffyivyg0MDOjRowc9\nevTAysqK7du3V1uHh4cHWlpahIeH4+lZNebDhw9z/Phxli1bhra2Nt26dVO5B1DJwsJC+bi6L/vK\neUgGDx5M165dOXnyJGfPnuXrr79mw4YNHDx4sNrpZ+VyucrzcePGMWTIEE6cOMHZs2dZunQpW7du\n5eDBg+IiQ2jykpOTsbS0RF9fX6W8usSfeC+RdRfWkVNcceG27vw65nSfg4bs8Vrta0z+U6ZMISsr\ni0WLFtGzZ88aP3ATJkygtLSUX375hW+++YZjx46xadOmxwrqeeTu7s6lS5eqlMfExFBYWEiHDh2A\nit4+W7du5cUXX8Td3V1lX2Nj4xrb/E1NTRkwYADfffcdI0aMwNDQULmtpKSETZs2YWFhga6uLm3a\ntOHw4cM0b94cbW1tAJKSkli8eDGzZs2qtlnpQXK5nBUrVhAYGMiwYcMYNmwYmZmZdO3alfPnzzNk\nyBC0tbVVvuwSExOVj7Ozs1m7di2TJk0iKCiIoKAgIiIiCAoKIiYmptovL0FoKhITE4mIiMDAwIAu\nXbpgYGBQ474RqRFsCttEaXkpAJoamvRx7PPYiR9queH7wgsvsG/fPvr37//QKy0dHR0CAwM5cOAA\nQ4YMeeygnkdjx47l6tWrLFiwgJiYGG7dusX//vc/3nvvPfr06UO7du2AinZ2f39/pkyZwr59+0hM\nTCQ2NpY9e/awYcMGpk+fXuM55s6diyRJjBkzht9//52kpCTOnTvHxIkTSU1NZcGCBQAEBweTm5vL\n3LlziY2N5cqVK7z//vvcvHmzSlNPdbS0tIiKimLBggVcvnyZpKQk9u7di7a2tvILq2PHjnz//ffE\nxMQQFRXFJ598ovw7MzU15dSpU8r3IjExkQMHDmBiYoKjo+NjvtOC8PTcvHmTiIgIoGIN3gd7+PxT\nUk4SX1/4mtLyUiQkcrMk3mg/lQD7gCcSS43J/+WXX65zZTKZjOHDhz9WQM+rNm3asHPnTlJSUhg/\nfjxDhw5l2bJlDBw4kNWrVyv309DQYOPGjYwcOZJvv/2WwMBAXnvtNX788Uc+++yzWt9/Ozs79u7d\ni5+fH5999hlDhw5l7ty5NGvWjH379uHk5ARUtD1+8803ZGRkMHLkSCZOnEizZs345ptv1G5yWbFi\nBfb29kyZMoUhQ4bwv//9j3Xr1tGqVSugYsyBsbExQUFBvPPOO4wcOVK5KIWGhgYbNmwAKr4UAwMD\nSUhIYMuWLQ/91SEIjdXNmze5cuWK8rmZmVmtv2LtTezp2aonxSVyEq+Wo3WuD6G/lte4f13JpDqs\n+hsbG0tRUVG1NyZ9fHyeWFD/lJycTL9+/Th+/Dj29vb1dh5BEIT6cOPGDZXpV8zMzAgICFA2q9ZE\nISn4+vfthO0zRUeqaB6aPt0bT8+Hz+X/sLypVlfPyMhIZs6cyZ07d6pskyQJmUxW688XQRCE59X1\n69eJiopSPjc3N6dz584qiT+zMJP9V/czqsMolZ48GjINZvQbz7bbUZw9e4fevR1wdTV/InGplfyX\nLFmChoYGS5cuxc7Orl5HnQmCIDwrqkv8AQEByq7bkiTx560/2X91PyXyEkrlcka1+RdWVqo3gUeM\ncKF79xY4OZk9sdjUSv5RUVF8+eWX9O/f/4mdWBAE4VmWkJCg0iJiYWFB586dlYk/qyiLbZe3EZ1e\nsU/2vWK+uXCMZD0Hls4dhobG/W6fhoY6ODk92S7OaiV/CwuLeh9qLAiC8KyQJIl79+4pnz+Y+CVJ\n4vSt0+y/up9ieTEApWXl3LhSjlv+K9wr1+PEiVv069eqXmNUK/mPGjWKjRs3EhAQUGVQQl38/fff\njBs3rtptnTt3Ztu2bY9ctyAIQmMhk8nw8fEhNDSU8vJy/P390dLSIrsom+0R24lKi1LZ98W2L/Cy\ntjs/HbmFgYE2Rkb1P5BRreR/+/ZtEhIS6N69O66urtWOStuyZctD6/H29ub06dMqZWfOnOGjjz5i\n0qRJdQhbEAShcdPQ0MDX11f5+MytM3wf9T3F8mIkJGTIsDWyZbzXeJwtnJG7KpCXajBwYGuMjRtJ\n8r9x4wZt27ZVPq+cv6WudHR0sLa+30UpLy+PL774gjfffJMePXo8Up2CIAhPmyRJpKamYmtrqzJF\nQ2VzeVxmHNsub0NC4s6dAlJSCnj/5dcJ8hiBtmZFrx8tLQ1GjHBtsJjVSv41zRfzuL7++mt0dHRq\nHZUqCILQmEmSREREBLdu3cLV1RU3t6rzhblauuLX3I/vfvuFwgw9XAtfQiu2I9petffzr091mtI5\nISGB8+fPk5+fj7m5Ob6+vspRoXWVmZnJjh07WLhw4WPdRxAEQXhaFAoF4eHh3L59G6hYBMnU1LTK\nLwCAUR1GkZWsSfxPtmiiTUxMFnK5Ai2tp9N1Xq2zKhQK5s+fz7Bhw/j000/58ssv+fjjj5XTA9Rh\nkLDS7t27sbS0JDAwsM7HPovUXcA9OTkZNzc33nvvvWr3rW6FrEqVxz74z8vLi5deeomdO3eq/D8e\nOHCgyr4P/vvll1+U+167do2ZM2cSEBCAh4cHAwYMYPny5TXOUjplyhTc3Ny4fPmyWu+NIDRGCoWC\nixcvKhM/gL29PddLr/PZn59RIi9R2d9Ix4gPA/+Ft2dzhg1zZt68gKeW+EHNK/+NGzfy448/MmvW\nLIYNG4aVlRXp6ekcPnyY1atX4+zsXOcbtocOHeKVV1556PBmoXo//fQTQ4cOfaSxF19//TWenp5I\nkkReXh4nTpzg888/Jzk5WWUBF01NTU6ePFltHaampkDF8pCjR4+mf//+fPPNNxgbGxMbG8vSpUuJ\njIys0oMrPT2d06dP07p1a/bu3VvjymKC0JiVl5cTGhpKWlqassy6uTWnS08TeTkSuVzB7C1r+b/X\npmNmpqfcRyaTMW1ax3pZkL2u1Er++/fv56233mLixInKMjs7OyZNmkRJSQn79++vU/KPj48nMTFR\nLM7xGBwcHFi4cCH+/v7KRKwuU1NT5Y13GxsbnJ2d0dLSYtmyZYwYMYI2bdoo933wBn11Kn8BLFmy\nRFlmb2+PoaEh48ePJyYmRqWzwKFDh7CxsWHMmDF89dVXzJs3r8qawoLQmMnlcs6fP09mZub9MlM5\ne9L2UCQvIiu7iLi4bDSLC9m+O4K3p3ZSOb4xJH5Qs9knPT1d2WXpn3x8fLh7t27r14aGhmJtbY2z\nc80LrQi1++CDDygrK2Pp0qVPpL6goCB0dHT4+eef63SchoYGeXl5hIWFqZT7+/tz5MiRKlMw//jj\njwQEBDBgwACKioo4dOjQY8cuCA2ltLSUv/76S5n4S8tLiSOOX+79QpG8CABNDQ2s8jrgkzeKyPB7\nXLt2r7Yqnxq1rvwdHBy4dOkSXbp0qbLt0qVLD706/Kfo6GhcXeu/S9Ph2MMciTui1r49WvUg2DNY\npWxHxA7+TPxTreNfdH2RYW7D6hzjo7K0tOSjjz5izpw5DBkyhJ49ez5WfYaGhtjb2xMXF1en44YO\nHcqWLVsYPXo07u7udO7cmc6dOxMQEICLi4vKvleuXCEuLo5Zs2bRrFkzOnbsyL59+xg9evRjxS4I\nDaG4uJhz586Rl5cHQGp+KjHEkGeUB///Yt7KwIpZXcdzTlFGVFQGr7/eFmfnJzcfz5OkVvJ/9dVX\n+fLLLzEwMGDIkCFYWVmRkZHB0aNH2bBhA1OmTKnTSdPS0urcVCFU9fLLL/Pzzz+zYMECjhw58tjN\nJ/9cSrK8vLzadXzNzc35/fffgYqpaX/44Qe2bt3KsWPH2Lp1K1u3bsXIyIjZs2czatQo5XEhISGY\nmJjQtWtXoOKLY/HixURERIjVuYRGr7i4mKKiIkrKS4jPiueO3h2yNQuQFVbMvdPXsS8vub2ErpYu\nDkFlBAW5oq/feO9pqpX8x44dS3R0NJ9//jnLli1TlkuSRGBgIFOnTq3TSdevX1+3KJ8DdV3AvdKi\nRYsYOnQoy5cv59NPP32sGPLz81V+xWlqavLjjz9W2e+fs7qam5sza9YsZs2axZ07dzh79iy7du1i\n4cKFNG/enF69elFaWsrRo0fp16+fckGYwYMH89lnn7F3716R/IVGz8zMjE6dOnHgfwdI1ksmITOT\npOQ87Ixs+e9b7+Nmfb81ozEn/UpqJX9NTU2WLVvGxIkTuXDhArm5uZiYmODv71/lp31jMsxt2GM1\nxQR7BldpCqov6i7g/k92dnbMmTOHBQsWPNYSmkVFRdy4caPKTfjKlbdqsnHjRlq1asWgQYMAaN68\nOa+++iqBgYEMHjyYkydP0qtXL37//Xfu3bvHwYMHVdr5FQoFP/30Ex999JG48Ss0epaWlox7eRxJ\nf6TxR0QizYs70vpeV5IjdHHr97Sjq5s6DfJycXFp1Mm+KVN3AffqjBw5kp9++on58+c/8vn37duH\nQqGo8xdIREQEP//8M/3791eZ+VVHRwd9fX3lgvIhISHY2tqyefNmlePDwsJYuHAhhw8fVmkiEoSn\nLTMzE21tbWS6Mox17y8fqqury4zuk2hV0JXzv5bRpo0Z7dtbPsVIH02NyX/QoEGsWrWKtm3bMnDg\nwId2T/r111+feHDPk7FjxzJ8+HAWLFjA6NGjMTAwIC4ujhUrVqgs4F6TxYsXM2yYer9ycnJySE9P\nR5IkcnNzOXXqFCtXrmTy5Mm0bNlSZd/09PRq69DX18fIyIjp06czevRoJk+ezMSJE2nZsiV3794l\nJCSEnJwcXnvtNWXf/unTp1e50e/s7MymTZvYt2+fSP5Co5GSksLpv08Tdy8OHODtTu9jbHS/v76N\noQ0TXrKig30q/v52jab7Zl3UmPx9fHwwNDRUPm6KL64pqVzAfe3atYwfP57CwkLs7OwYMmSIWnMf\n2dvbM2vWLP7v//7voftOmzZN+djMzAxnZ2f+7//+j5deekllv/Lycrp3715tHWPGjGHBggW0a9eO\nvXv38t///pcPPviAe/fuYWJiQrdu3dizZw9WVlZs2bIFmUzGyJEjq9SjqanJuHHjWLp0KVeuXKn1\nF44gNIRbt27x85mfuZF9A3l5OSnn8ph0fB3fLZiJru79lKmpqUGnTs2eYqSPp04LuD8tYgF3QRAa\nwoXIC/yAbW7GAAAgAElEQVT616/kluYCcDs9l6jCFJoV+zKhWxCvvdb2ITU0Ho+8gHtqamqdTmRr\na1v36ARBEBoBebmcPX/sITImEgUVve7KtcsxcjbG/Wx3jBQ2FBXJkSTpmWkFqTH59+rVq04v8sG1\nKgVBEJqKm9k32XZsG/kZ93vbKfQU9OrSixfcXmAPcfj42OLubvUUo3zyakz+n3322TPzDScIglCd\nkKgQTv99GilPRm5uKaamuphbmzLhhQnYm1U0lYwd6/6Uo6wfNSb/V155pSHjEARBaFByuZy0uDRK\nMhXk5pQCMmTFzZg78h20NOvUC75JqvEV1mUUrkwmq/MUD4IgCE+TpqYm/q39uZ50i2KFNtqFrhRm\ntSQjvQQ7u+c4+a9cuVLtSkTyFwShsYtIjcDBxAFzfXOgIm919OpIXlEeMVfKuXfPkLFj3bGzM3zK\nkTaMGpN/TExMQ8YhCIJQL3JLctkTuYewO2FYyB2Z5jcNBwcToGKeqp5detLFr2I5RQ2N5+c+57P/\n20YQhOeSJEmcTTrL/qv7uVeYR1pcMYk5V/k86gfWzJugTPQymQwdHc2H1PbsEdM7CILwzEkrSGNH\nxA5iM2IB0MnRwbJAF32ZOaRrcvJkEn36tHxILc82Mb2DIAjPjHJFOceuHeNo/FHKystAAr17epiW\nmmJk3YyMZGjuqIuPz7PVZ/9R1Jj8H1we8PPPP2+QYIT6FRoaypgxY9SeJuPAgQPMnz+fq1evNkB0\ngvB4bmTfYHvEdpLuJVNULMdQXxuDTAMctRxp1awVMjSQWunxwgu9lGtKPM/UbvNXKBScOHGCsLAw\n8vPzsbS0pFOnTtUu7SgIgtCQUvJTWHZmGdnZRcQn3EOmkBHo4oOriQtGOhXrRDRr1gxvb2+Vqcef\nZ2ol/4yMDCZOnEhMTAw6OjpYWFiQmZnJ+vXr6dKlC2vXrsXAwKC+YxUEQaiWnZEdHW18+O9fh9Es\n1cZXwwfT7FYYmVckfkdHR9zd3UXz9QM0Hr5LRbNPeno6mzZtIiIigj/++IMrV66wZs0aoqKiVJZ2\nFB6Nm5sb+/bt4/XXX6dDhw4MGTKE8PBwdu3aRa9evfDx8eH999+ntLRUeUxoaCjBwcF4e3vTtWtX\nFi9eTFFRkXJ7TEwMwcHBeHl58eKLLxIVFaVyToVCwfr16+nTpw8dO3ZkxIgRnDx5ssFesyA8KoVU\ndcnTMV6jGOreg170xUrTGkODiqUU3d3dReKvhlpX/idOnODjjz+mR48eKuX9+/cnKyuLL774gkWL\nFtVLgI8jNjaWuLg4tfZt1apVlXVkIyIiSExMVOt4V1dX3Nzc6hzjg7788kuWLFlC69atmTt3LpMn\nT6ZDhw5s2rSJGzduMGvWLPz8/Bg9ejSXL19mwoQJjB07lkWLFpGcnMzChQtJTk5m/fr15OTkMGHC\nBAICAvjhhx+4efMmH3/8scr5VqxYwW+//cann35Ky5Yt+fPPP5kxYwabN2+mc+fOj/VaBKE+KCQF\nJ2+e5GTiSd7zn42p4f2lP410jBjQzJ/oe3extTVET08Lb29vmjdv/hQjbrzUSv46OjoYGxtXu028\nsU/OyJEj6du3LwAvvfQSn376KQsXLsTBwQFXV1c2b95MfHw8AFu3bsXDw4M5c+YAFStiLVy4kMmT\nJxMfH8+FCxcoKytjyZIlGBoa0qZNG1JTU5WLvBcUFLBt2zbWrFmj/FJv1aoVMTExbNy4USR/odFJ\nykliR8QOrmfdICk5j9E/L2PH3H9jbl6xwpZMJsPPz4/i4tNoaGjg7++PhYXFU4668VIr+Y8aNYpV\nq1bh5eWFldX9LlKFhYVs3LiRoKCgegvwefLgEor6+vpoaGio9MrR09NTNvvEx8fTq1cvleP9/PyU\n2+Lj43F0dFR21wXo2LGj8vG1a9coLS1l5syZaGjcb/0rKytT+T8WhKetRF7C4bjDHL9+HIWkIDom\nk8zMYgwUN9m15wrTp/or9zU2NqZTp07o6emp/O0LVdWY/N944w3lY0mSuHbtGv3798fHxwdLS0ty\nc3O5ePEicrkcGxubBgm2rtzc3B6rKcbT07NKU1B90tJS/e+QyWQ1tlPq6elVKatclE1LSwuZTMY/\nF2nT1tZWPq7s6rZmzRpatWqlst+DXwaC8DRdSb3Criu7yCrKUpa1cjDH6HZLHEp8yb2XT3GxHD29\n+58dS8umt5j601Bj8i8rK1N57uPjoyxPSUkBoG3biiXN0tLS6is+oQbOzs5cunRJpSwsLEy5LScn\nR7mIuqmpKQCRkZHKfVu1aoW2tjapqan07NlTWb527VrKy8uZOXNmA7wKQajeveJ77I3cy8W7F1XK\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation2(variables)\n", + "plot_results(variables, title='Proportional model')\n", + "savefig('chap03-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model fits the data pretty well for the first 20 years, but not so well after that." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** In this implementation, we compute the number of deaths and births separately, but since they are both proportional to the current population, we can combine them.\n", + "\n", + "Write a function called `run_simulation2b` that implements a model with a single parameter, `alpha`, that represents the net growth rate, which is the difference between the birth and death rates. For example, if `alpha=0.01`, the population should grow by 1% per year.\n", + "\n", + "Choose the value of `alpha` that fits the data best." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation2b(system, alpha):\n", + " results = TimeSeries()\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1] = (alpha + 1) * results[t]\n", + " system.results = results" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation2b(variables, 0.0175)\n", + "plot_results(variables, title='Alpha Population Graph')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Factoring out the update function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The functions that run the model all look the same except the body of the loop. So we can factor that part out into a function." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func1(pop, t, system):\n", + " \"\"\"Compute the population next year.\n", + " \n", + " pop: current population\n", + " t: current year\n", + " system: system object containing parameters of the model\n", + " \n", + " returns: population next year\n", + " \"\"\"\n", + " print('For', t, 'Population =', pop)\n", + " births = system.birth_rate * pop\n", + " deaths = system.death_rate * pop\n", + " return pop + births - deaths" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the name `update_func1` refers to a function object." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which we can confirm by checking its type." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "function" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(update_func1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`run_simulation` takes the update function as a parameter and calls it just like any other function." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Simulate the system using any update function.\n", + " \n", + " Adds TimeSeries to `system` as `results`.\n", + "\n", + " system: System object\n", + " update_func: function that computes the population next year\n", + " \"\"\"\n", + " results = TimeSeries()\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1] = update_func(results[t], t, system)\n", + " system.results = results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we use it." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "For 1950.0 Population = 2.557628654\n", + "For 1951.0 Population = 2.60110834112\n", + "For 1952.0 Population = 2.64532718292\n", + "For 1953.0 Population = 2.69029774503\n", + "For 1954.0 Population = 2.73603280669\n", + "For 1955.0 Population = 2.78254536441\n", + "For 1956.0 Population = 2.8298486356\n", + "For 1957.0 Population = 2.87795606241\n", + "For 1958.0 Population = 2.92688131547\n", + "For 1959.0 Population = 2.97663829783\n", + "For 1960.0 Population = 3.02724114889\n", + "For 1961.0 Population = 3.07870424842\n", + "For 1962.0 Population = 3.13104222065\n", + "For 1963.0 Population = 3.1842699384\n", + "For 1964.0 Population = 3.23840252735\n", + "For 1965.0 Population = 3.29345537032\n", + "For 1966.0 Population = 3.34944411161\n", + "For 1967.0 Population = 3.40638466151\n", + "For 1968.0 Population = 3.46429320075\n", + "For 1969.0 Population = 3.52318618517\n", + "For 1970.0 Population = 3.58308035032\n", + "For 1971.0 Population = 3.64399271627\n", + "For 1972.0 Population = 3.70594059245\n", + "For 1973.0 Population = 3.76894158252\n", + "For 1974.0 Population = 3.83301358942\n", + "For 1975.0 Population = 3.89817482044\n", + "For 1976.0 Population = 3.96444379239\n", + "For 1977.0 Population = 4.03183933686\n", + "For 1978.0 Population = 4.10038060559\n", + "For 1979.0 Population = 4.17008707588\n", + "For 1980.0 Population = 4.24097855617\n", + "For 1981.0 Population = 4.31307519163\n", + "For 1982.0 Population = 4.38639746988\n", + "For 1983.0 Population = 4.46096622687\n", + "For 1984.0 Population = 4.53680265273\n", + "For 1985.0 Population = 4.61392829783\n", + "For 1986.0 Population = 4.69236507889\n", + "For 1987.0 Population = 4.77213528523\n", + "For 1988.0 Population = 4.85326158508\n", + "For 1989.0 Population = 4.93576703202\n", + "For 1990.0 Population = 5.01967507157\n", + "For 1991.0 Population = 5.10500954779\n", + "For 1992.0 Population = 5.1917947101\n", + "For 1993.0 Population = 5.28005522017\n", + "For 1994.0 Population = 5.36981615891\n", + "For 1995.0 Population = 5.46110303361\n", + "For 1996.0 Population = 5.55394178519\n", + "For 1997.0 Population = 5.64835879553\n", + "For 1998.0 Population = 5.74438089506\n", + "For 1999.0 Population = 5.84203537027\n", + "For 2000.0 Population = 5.94134997157\n", + "For 2001.0 Population = 6.04235292108\n", + "For 2002.0 Population = 6.14507292074\n", + "For 2003.0 Population = 6.2495391604\n", + "For 2004.0 Population = 6.35578132612\n", + "For 2005.0 Population = 6.46382960867\n", + "For 2006.0 Population = 6.57371471201\n", + "For 2007.0 Population = 6.68546786212\n", + "For 2008.0 Population = 6.79912081577\n", + "For 2009.0 Population = 6.91470586964\n", + "For 2010.0 Population = 7.03225586943\n", + "For 2011.0 Population = 7.15180421921\n", + "For 2012.0 Population = 7.27338489093\n", + "For 2013.0 Population = 7.39703243408\n", + "For 2014.0 Population = 7.52278198546\n", + "For 2015.0 Population = 7.65066927921\n" + ] + } + ], + "source": [ + "run_simulation(variables, update_func1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember not to put parentheses after `update_func1`. What happens if you try?" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nKv6EENID/S9s8sixJDKW5AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(variables, title='Proportional model, factored')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you run `run_simulation`, it runs `update_func1` once for each year between `t0` and `t_end`. To see that for yourself, add a print statement at the beginning of `update_func1` that prints the values of `t` and `pop`, then run `run_simulation` again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Combining birth and death" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since births and deaths get added up, we don't have to compute them separately. We can combine the birth and death rates into a single net growth rate." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func1b(pop, t, system):\n", + " \"\"\"Compute the population next year.\n", + " \n", + " pop: current population\n", + " t: current year\n", + " system: system object containing parameters of the model\n", + " \n", + " returns: population next year\n", + " \"\"\"\n", + " net_growth = system.alpha * pop\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how it works:" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nzqtQKBgxYgQeHh5MmzaNy5cvs2vXLnJycpTnUmJiIkOGDCE/P5+RI0dSt25dtmzZUiK5lEbdZbOy\nsggICODevXsMGzYMa2trTp06xZdffsmtW7f49NNP1d43Ozs7ZsyYwfz58+nRowc9evTAzMxMua2Z\nM2fi4eHB1KlTiY6OZsuWLcTGxrJ3797yd0aqZtOmTZPkcrkUHh4uJSUlSUlJSdKDBw+kCxcuSJMn\nT5bkcrn05ZdfKufv0qWL1LJlS+n+/fvKsvz8fMnHx0fq3LmzlJGRoSxPS0uTvL29JW9vbykvL0+5\nvFwul/7880/lfElJSZKHh4c0aNCgp1rfk/FIkiQtWbJEksvl0p07d0rsa7EpU6ZILVu2lMLCwpRl\nhYWFUlBQkGRvby9FRkaqLLdhwwaVbfTp00fq1KmT8vXo0aOlLl26SLm5uSrzDRo0SHJ1dS0zjtIU\nz7Nx40Zl2d9//y3J5fIS2xgyZIhKHP7+/lKbNm2ke/fuKctycnKk/v37S87OzlJSUpIkSZLUv3//\nEsf433//VW6jWEBAgNS9e3fp4cOHyrL8/Hxp2LBhUocOHZSxBAQEqCynrsmTJ0vOzs7SrVu3lGXJ\nycmSu7u79P7771dqnwICAiS5XC4dPnxYOd+mTZskuVyu/HxJkiQpFArJx8dHGjx4sLKs+LP5999/\nK8tSUlKktm3bSv3791c5Hk8eH7lcLh06dEglNk9PT5X1q3sc1X1fSlMcy6ZNm5Rlubm5Uu/evaUO\nHTpI+fn5kiSV/AwWv/7ll19U1nfq1ClJLpdLu3fvVpYVn1tffPGFyryBgYGSg4NDic//42bPni25\nuLhIKSkpKuUffPCBJJfLleXF25g/f77KfKNHj5Zat24tZWVlSZIkSV999ZVkb2+vcg4nJiZKXl5e\nJc7/J6m77JIlSyQHBwcpIiJCZfmFCxdKcrlcunr1aqX27c6dO5JcLpeWLFminGf37t2SXC6X3n33\nXZVlp0+fLsnlcun27dtl7ockSVKNVVX179+f9u3b0759ezp16sTgwYM5dOgQgYGBBAcHq8zbuHFj\nrKyslK+vXLnC/fv3GT58OAYGBspyIyMjAgICiI+PJywsTFnerFkzunfvrnxtZmbGG2+8waVLl0hK\nSqr0+p6MRx2FhYX8/fffdOrUCQcHB2W5hoYG48ePR5IkDh8+rLJMnz59VF63bNmSxMRE5etVq1ax\ne/dulUYEKSkpGBgYqDQLrowePXoo/2/SpAkA3t7eKtuwsbEhISEBKPoVdenSJd544w2sra2V89Sp\nU4fRo0eTk5PDyZMnSUpKIjw8HF9fX5Vj7OXlpVIlkZKSwpkzZ+jcuTM5OTkkJyeTnJxMeno6PXr0\nIDExkcuXLz/VvkHRr8qjR4/SuXNnbG1tleWmpqZs2bKFWbNmqb1Pj5d7e3srXzdt2hRA5SpVJpPR\nsGFD5XErJpfLVW5ampiY0K9fP8LDw0vM+zhdXV1ee+01lRiaNm2q/HyoexzVfV/KY2RkxODBg5Wv\ndXR0GDx4MImJiSrnTWk8PDzU2gbA66+/rvLaycmJ/Pz8cn/tz5kzh8OHD2NiYqIsy8zMpE6dOgAl\nzpMnz7lWrVpRUFCgrBI7duwYTk5OKuewubk5vr6+Fcav7rIHDx5ELpdjaWmpfN+Sk5OV32FHjhx5\nqn0rzZPbdnJyAij3swc1WFX1zTffYGFhARR9eRoZGWFnZ6fc6ceZm5urvC6uoys+QR/XrFkzAO7e\nvatsxdG8efMS89na2iJJEnFxcZVe35PxqCMlJYWsrKxSt1FcLRcXF6dS/vglJRSdkI/XYWtqanLn\nzh0WL15MdHQ0t2/fVmn//jQe3zdNTc0SZcXl0v+vay2Oubz9unv3rnK+xo0bl5ivWbNmhIaGAkXV\neQAbN25k48aNpcZ479499XfoCampqWRlZakkjWJyuRyAS5cuARXvUzETExO0tB6dSuoct2KlbaP4\nGMXFxWFpaVnqfpiYmKChofq77/HPh7rHUVtbW2Wbj3v8fSlPo0aNVPa/uKx4H9q0aVPmspU5l56c\nt27dugDl3l+QyWSkpKSwatUqrl27xu3bt7l7967yfXjynlBp5xw8uucaFxen8oOgWPH3RHnUXfb2\n7dvk5OSU2Xy5+PNf2X0rzZP7q84xhRpMHG5ubiWa45al+EQs9uTJV9q04hPiyf+LFX8QSjuZK1rf\nk/Goo7xtFL/BTzY/fvKL4Unr1q3j66+/pmnTpnh4eNCzZ09cXFzYuHEj+/fvr3SMQIkvAHjUYKE0\n6uyXtra2ch2l3Rx+/ANe/L4MHz5c5SrxcaX9EFBX8fqfxz4VK+2YVbSN8hRvv7z3v6LPhrrHsfiH\nRkXvS3lK20919gEqdy49zfH89ddfmTp1KvXq1cPLywsfHx8cHR05fvw4q1atqvQ2ZDJZqceqvM9M\nZZctLCzE3d1d5V7Y4+rVqwdUft9KU9H7U5ZadXNcXQ0bNgTgxo0bJabdvHkTQKWK4fbt2yXmi4mJ\nQVNTExsbG2V2VXd9T8PMzAw9Pb3nto3c3FyWLl1Ku3btWL9+vcqXV2Vvij8Ldd+Lhg0bIpPJiImJ\nKTHf4608itenqalZ4uZwdHQ0sbGx6OrqPnW8pqam1K1bt9TPxLp160hISGD06NFq7dPz8ORVJqB8\njqH4V/vTUPc4qvu+lOfevXtIkqTypVu8D6VdyVSnhQsXYmtry+7du5UP5gJP/cPKxsam1GNVfIX3\nPJZt2LAhDx8+LPG+paWl8e+//yqvlp/3vlVGrWuOqw4HBwdl66jMzExleWZmJlu2bMHS0hJHR0dl\n+eXLl7l48aLydWJiIvv27cPLywtjY+NKr680xZm7rF8empqaeHt7c+LECcLDw5XlkiSxZs0aZDKZ\nSp11RXJycsjOzqZJkyYqSePq1aucOXMGgIKCArXX97SKj82+fftUmjfm5eXxww8/oKOjQ8eOHTEz\nM8PT05N9+/ap3Ke5cOGCyvGoV68ejo6OhISEqFS75efnM3PmTN5///1n2i8tLS06duzI0aNHVaq8\n0tLSWLduHXfu3FF7n56H8PBwrly5onxd/Nn08PBQq0VTWdQ9juq+L+VJSkri0KFDytdZWVls3bqV\nhg0b0qpVq0rFXXwFou7VTkVSU1Np0KCByhfrvXv3OHjwIPDoykxdPXv2JCoqimPHjinLMjIyKm6F\nVIllu3btSkREBEePHlUp//7775k8ebLyGTd19+15H1N4Qa84tLW1mTVrFh988AEDBw7krbfeAmDX\nrl08ePCAJUuWqFyC6ejoMHbsWJUmcAqFQtmstbLrK01xXeHatWvx8fEptS5z6tSpnD59msDAQGXT\n4D///JNTp07x9ttvV6oKxtjYGBcXF/bs2YOBgQFNmzYlKiqKnTt3KmN9+PAhxsbGaq/zac2aNYuR\nI0fy1ltvMXToUPT19dm3bx/h4eHMmjULIyMjAKZNm8bw4cMZNGgQw4cPJzs7mx9//LHEF2Tx+gYO\nHMjQoUMxMTHhl19+4dKlSwQHB5f5hZqYmMiJEyewt7enZcuWZcYbHByMv78//v7+ygYRO3bsICsr\niylTplRqn56VsbExo0eP5u2330ZTU5PNmzdTUFDAjBkznnnd6h5Hdd+X8vbh448/ZuTIkZiYmLB7\n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\npFf+H1sFbMS2u8i2AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "variables.alpha = variables.birth_rate - variables.death_rate\n", + "\n", + "run_simulation(variables, update_func1b)\n", + "plot_results(variables, title='Proportional model, combined birth and death')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Maybe the reason the proportional model doesn't work very well is that the growth rate, `alpha`, might be changing over time. So let's try a model with different growth rates before and after 1980 (as an arbitrary choice).\n", + "\n", + "Write a function called `update_func1c` that takes `pop`, `t`, and `system` as parameters. The system object, `system`, should contains two parameters: the growth rate before 1980, `alpha1`, and the growth rate after 1980, `alpha2`. It should compute and return the simulated population one year later.\n", + "\n", + "Note: Don't forget the `return` statement." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true, + "scrolled": false + }, + "outputs": [], + "source": [ + "def update_func1c(pop, t, system):\n", + " if t < 1980:\n", + " net_growth = system.alpha * pop\n", + " else:\n", + " net_growth = system.alpha2 * pop\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "variables.alpha2 = variables.birth_rate2 - variables.death_rate2\n", + "run_simulation(variables, update_func1c)\n", + "plot_results(variables, title='variable alpha value')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Quadratic growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the implementation of the quadratic growth model." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func2(pop, t, system):\n", + " \"\"\"Compute the population next year.\n", + " \n", + " pop: current population\n", + " t: current year\n", + " system: system object containing parameters of the model\n", + " \n", + " returns: population next year\n", + " \"\"\"\n", + " net_growth = system.alpha * pop + system.beta * pop**2\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results. Can you find values for the parameters that make the model fit better?" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nCCHkwVHxJ4SQcYiKPyGEjENU/AkhZByi4k8IIePQqCv+CQkJePXVV5Xazp49i8WLF8Pb2xvPPfcc\nLly4oNR/4sQJuLm5KT2mTZumtM3Ro0cxa9YseHl5Yd26daioqBhVOfT29iIxMRGhoaHw8fHBxo0b\nUV1dPWZyOHDgwKD3YODx/vvvqz2Hh3kPqqursXnzZvj5+SEsLAzx8fFoa2tT2mY0vwcAUFFRgQ0b\nNsDPzw/h4eHYv38/+vv71ZqDVCrFK6+8grCwMPj5+WH9+vUoKSnh+jMyMrB06VLMmDEDTz/9NNLT\n05We39jYiK1bt8LPzw/BwcF499131ZrDcOMf0NvbiyVLluCrr74a1KfO42hIbJRQKBRs3759TCQS\nsd27d3PtqampzM3NjX300UesvLycHT9+nHl6erJLly5x2yQkJLDNmzcziUTCPRoaGrj+L774gvn4\n+LDvvvuOFRUVsU2bNrE5c+YwmUw2anLYuXMnCw8PZ7/99hsrLi5mq1evZosXL2YKhWJM5NDR0aH0\n+5dIJCwhIYEFBwczsVisthweNv6+vj42f/58Fhsby8rKylhOTg6bP38++8tf/sLtY7S/By0tLSwk\nJIStXr2aFRQUsKysLDZ//ny2a9cuteUgl8vZ888/z5YvX87y8/NZaWkp27JlCwsODmZNTU2stLSU\neXh4sIMHD7KysjKWlJTEpk+fzkpKSrh9rFixgq1cuZIVFhayX375hQUFBbH33ntPLTk8ivgZY6y9\nvZ39+c9/ZiKRiJ09e1apT13H0f2MiuJfVVXFYmJiWGBgIIuIiFA64JcsWcJ27NihtP2rr77KYmJi\nuJ9XrFjBkpOTh9z/3Llz2f79+7mfOzo6mLe3N/v6669HRQ5VVVVMJBKx3377jeu/ceMGi4iIYBUV\nFWMih9/Lzc1l7u7uLD09nWsb6RyGE39xcTETiUSsqKiI6z9+/Djz8fFRW/zDzeHIkSPMx8eHNTc3\nc/3Z2dlMJBKx6upqteRQUFDARCIRKysr49pkMhnz8vJiZ86cYa+99tqgYyYmJobFx8czxm4fNyKR\niFVVVXH9p0+fZj4+PlxxHMkchhs/Y4xduHCBzZkzh0VHR9+z+KvjOFLFqLjsk5ubC1tbW6SmpmLS\npElKfZWVlfDz81Nqmzp1KvLy8riPgmVlZXB2dr7nvhsbG1FRUYGAgDsreRkaGsLDwwPZ2dmjIoeM\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "variables.alpha = 0.025\n", + "variables.beta = -0.0018\n", + "\n", + "run_simulation(variables, update_func2)\n", + "plot_results(variables, title='Quadratic model')\n", + "savefig('chap03-fig04.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To understand the quadratic model better, let's plot net growth as a function of population." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pop_array = linspace(0.001, 15, 100)\n", + "net_growth_array = variables.alpha * pop_array + variables.beta * pop_array**2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like. Remember that the x axis is population now, not time.\n", + "\n", + "The function `sns.set` sets the style for the plots. I added a grid to this one to make it easier to read." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig05.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "sns.set(style='whitegrid', font_scale=1.5)\n", + "plot(pop_array, net_growth_array, '-')\n", + "decorate(xlabel='Population (billions)',\n", + " ylabel='Net growth (billions)',\n", + " legend=False)\n", + "savefig('chap03-fig05.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using `sns.set` to reset the plot style." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sns.set(style='white', font_scale=1.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the book we found that the net growth is 0 when the population is $-\\alpha/\\beta$:" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.88888888888889" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-variables.alpha / variables.beta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the equilibrium the population tends toward." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** In the book, I presented a different way to parameterize the quadratic model:\n", + "\n", + "$ \\Delta p = r p (1 - p / K) $\n", + "\n", + "where $r=\\alpha$ and $K=-\\alpha/\\beta$. Write a version of `update_func2` that implements this version of the model. Test it by computing system variables `r` and `K` equivalent to `alpha` and `beta`, and confirm that you get the same results. " + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.025\n" + ] + }, + { + "data": { + "text/plain": [ + "13.88888888888889" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables.rest = variables.alpha\n", + "variables.kappa = -variables.alpha / variables.beta\n", + "print(variables.rest)\n", + "variables.kappa" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func2b(system, t, pop):\n", + " net_growth = variables.rest * pop * (1 - pop / variables.kappa)\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_simulation(variables, update_func2b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** On the Wikipedia page about world population estimates, the first table contains estimates for prehistoric populations. The following cells process this table and plot some of the results." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Select `table1`, which is the second table on the page." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Population Reference Bureau (1973–2015)[6]United Nations Department of Economic and Social Affairs (2015)[7]Maddison (2008)[8]HYDE (2010)[citation needed]Tanton (1994)[9]Biraben (1980)[10]McEvedy & Jones (1978)[11]Thomlinson (1975)[12]Durand (1974)[13]Clark (1967)[14]
Year
-10000NaNNaNNaN2M[15]NaNNaN4.01–10MNaNNaN
-9000NaNNaNNaN4.NaNNaNNaNNaNNaNNaN
-80005.0NaNNaN5.NaNNaNNaNNaN5–10MNaN
-7000NaNNaNNaN8.NaNNaNNaNNaNNaNNaN
-6000NaNNaNNaN11.NaNNaNNaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " Population Reference Bureau (1973–2015)[6] \\\n", + "Year \n", + "-10000 NaN \n", + "-9000 NaN \n", + "-8000 5.0 \n", + "-7000 NaN \n", + "-6000 NaN \n", + "\n", + " United Nations Department of Economic and Social Affairs (2015)[7] \\\n", + "Year \n", + "-10000 NaN \n", + "-9000 NaN \n", + "-8000 NaN \n", + "-7000 NaN \n", + "-6000 NaN \n", + "\n", + " Maddison (2008)[8] HYDE (2010)[citation needed] Tanton (1994)[9] \\\n", + "Year \n", + "-10000 NaN 2M[15] NaN \n", + "-9000 NaN 4. NaN \n", + "-8000 NaN 5. NaN \n", + "-7000 NaN 8. NaN \n", + "-6000 NaN 11. NaN \n", + "\n", + " Biraben (1980)[10] McEvedy & Jones (1978)[11] Thomlinson (1975)[12] \\\n", + "Year \n", + "-10000 NaN 4.0 1–10M \n", + "-9000 NaN NaN NaN \n", + "-8000 NaN NaN NaN \n", + "-7000 NaN NaN NaN \n", + "-6000 NaN NaN NaN \n", + "\n", + " Durand (1974)[13] Clark (1967)[14] \n", + "Year \n", + "-10000 NaN NaN \n", + "-9000 NaN NaN \n", + "-8000 5–10M NaN \n", + "-7000 NaN NaN \n", + "-6000 NaN NaN " + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table1 = tables[1]\n", + "table1.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not all agencies and researchers provided estimates for the same dates. Again `NaN` is the special value that indicates missing data." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Population Reference Bureau (1973–2015)[6]United Nations Department of Economic and Social Affairs (2015)[7]Maddison (2008)[8]HYDE (2010)[citation needed]Tanton (1994)[9]Biraben (1980)[10]McEvedy & Jones (1978)[11]Thomlinson (1975)[12]Durand (1974)[13]Clark (1967)[14]
Year
1913NaNNaN1793.NaNNaNNaNNaNNaNNaNNaN
1920NaN1860.01863.1912.NaNNaNNaNNaNNaN1968.
1925NaNNaNNaNNaNNaNNaN2000.0NaNNaNNaN
1930NaN2070.0NaN2092.NaNNaNNaNNaNNaN2145.
1940NaN2300.02299.2307.NaNNaNNaNNaNNaN2340.
\n", + "
" + ], + "text/plain": [ + " Population Reference Bureau (1973–2015)[6] \\\n", + "Year \n", + "1913 NaN \n", + "1920 NaN \n", + "1925 NaN \n", + "1930 NaN \n", + "1940 NaN \n", + "\n", + " United Nations Department of Economic and Social Affairs (2015)[7] \\\n", + "Year \n", + "1913 NaN \n", + "1920 1860.0 \n", + "1925 NaN \n", + "1930 2070.0 \n", + "1940 2300.0 \n", + "\n", + " Maddison (2008)[8] HYDE (2010)[citation needed] Tanton (1994)[9] \\\n", + "Year \n", + "1913 1793. NaN NaN \n", + "1920 1863. 1912. NaN \n", + "1925 NaN NaN NaN \n", + "1930 NaN 2092. NaN \n", + "1940 2299. 2307. NaN \n", + "\n", + " Biraben (1980)[10] McEvedy & Jones (1978)[11] Thomlinson (1975)[12] \\\n", + "Year \n", + "1913 NaN NaN NaN \n", + "1920 NaN NaN NaN \n", + "1925 NaN 2000.0 NaN \n", + "1930 NaN NaN NaN \n", + "1940 NaN NaN NaN \n", + "\n", + " Durand (1974)[13] Clark (1967)[14] \n", + "Year \n", + "1913 NaN NaN \n", + "1920 NaN 1968. \n", + "1925 NaN NaN \n", + "1930 NaN 2145. \n", + "1940 NaN 2340. " + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table1.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some of the estimates are in a form we can't read as numbers. We could clean them up by hand, but for simplicity I'll replace any value that has an `M` in it with `NaN`." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "table1.replace('M', np.nan, regex=True, inplace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we'll replace the long column names with more convenient abbreviations." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "table1.columns = ['prb', 'un', 'maddison', 'hyde', 'tanton', \n", + " 'biraben', 'mj', 'thomlinson', 'durand', 'clark']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function plots selected estimates." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_prehistory(table):\n", + " \"\"\"Plots population estimates.\n", + " \n", + " table: DataFrame\n", + " \"\"\"\n", + " plot(table.prb, 'ro', label='PRB')\n", + " plot(table.un, 'co', label='UN')\n", + " plot(table.hyde, 'yo', label='HYDE')\n", + " plot(table.tanton, 'go', label='Tanton')\n", + " plot(table.biraben, 'bo', label='Biraben')\n", + " plot(table.mj, 'mo', label='McEvedy & Jones')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results. Notice that we are working in millions now, not billions." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_prehistory(table1)\n", + "decorate(xlabel='Year', \n", + " ylabel='World population (millions)',\n", + " title='Prehistorical population estimates')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `xlim` to zoom in on everything after Year 0." + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n0KGD0vMtLS2lyMhIuSw6OlqytLSUxo0bJ5e5ublJzZs3lx/XrVtXmj59ulLsixYtklxcXKTExERJ\nkiTp/PnzkoWFhbRz5065zrx58yQLCwvp6NGjSs+dNm2aZGFhIZ08eVKSJEny9/eXLCwspKCgIKV6\nO3fulCwsLKTz589LkiRJJ0+elCwsLKTly5cr1fP29pa+/vprKT4+XgoKCpIsLS2l27dvK9WZP3++\nZGFhIR/7223nJrtO586dpZSUFLl84cKFkoWFhXT69GlJkiTpl19+kSwsLKS1a9cqPX/VqlWShYWF\ntGnTpgK1l1dsb5e//VjVY5ckSbKwsJDGjx8vP75//75kYWEh+fv7S5IkSVFRUZKlpaU0bNgwKTMz\nU6539epVydLSUho5cqTS85o2bSolJSXJ9fbv3y9ZWFhIW7duzfP1vXfvnmRlZSXNnz9fqfyvv/6S\nvv76a2nWrFlKbV27dk2uk5KSInXq1Enpudmfpze9/V52c3OTLCwspOPHj8tlmzZtkiwsLKRu3brJ\nZZmZmVKTJk2k7t27S5IkSampqZKtra3k5eWl1P7Lly+l2rVrS56ennJZ9vv5/v37Svtt0aKF0muU\nlpYm9erVS2rcuLH8flDls/a5EJfUiqlOnTrRqFEjGjVqhL29Pd27dycsLAx3d3e8vb2V6lapUoVy\n5crJj//44w/u379PixYtiI+PJy4ujri4OF6/fk3z5s25efOm0lBlMzMzvv76a/lxxYoVMTQ05Nmz\nZ3nGV758eQ4cOEBISIjcGTp69Gh27tyJjo5Ons87fvw45ubmOc6chg4dCkBYWJhSuZ2dXZ5tAZw8\neRI1NTXc3NyUysePH8/u3bvR0dFh0KBBnD17Vums8PXr16ipZb3932eoar9+/ZQGbXh4eABZx5f9\nX11dXVxdXZWe17t3b3R1deV6qrb3vj7msZ84cQJJkhg0aJB8aRegXr16fPfdd5w6dYr09HS5vGnT\npkojsqysrAB4+vRpnvs4evQomZmZODg4yO/buLg4jIyMqFWrFidPngSy3n8ACxYs4OLFi2RkZKCh\noUFISEiOz4cqNDU1+f777+XH1apVA7IugWVTKBRUrFhRjl9dXZ1z584xY8YMpbaeP3+Orq5uvq/t\n8+fPuXDhAk2bNuX169fycSYkJODk5MSzZ8+4fv26fKzv81krjsQltWJq3rx5GBkZAaCmpoaenh7m\n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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_prehistory(table1)\n", + "decorate(xlim=[-10000, 0], xlabel='Year', \n", + " ylabel='World population (millions)',\n", + " title='Prehistorical population estimates')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See if you can find a model that fits these data well from Year -1000 to 1940, or from Year 0 to 1940.\n", + "\n", + "How well does your best model predict actual population growth from 1950 to the present?" + ] + }, + { + "cell_type": "code", + "execution_count": 229, + "metadata": {}, + "outputs": [], + "source": [ + "un = table1.un\n", + "mj = table1.mj\n", + "t0 = un.index[0]\n", + "t_end = un.index[-1]\n", + "variables2 = System(t0=t0, t_end=t_end, p0=mj[t0])\n", + "variables2.birthratepre = 0.0002\n", + "variables2.birthratemid = 0.0009\n", + "variables2.birthratepost = 0.005" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulationex(system, update_func):\n", + " results = TimeState\n", + " results[t0] = system.p0\n", + " for t in linrange(system.t0, t_end):\n", + " results[t+1] = update_func(results[t], t, system)\n", + " system.results = results" + ] + }, + { + "cell_type": "code", + "execution_count": 231, + "metadata": {}, + "outputs": [], + "source": [ + "def update_funcex(pop, t, system):\n", + " if t < -2000:\n", + " net_growth = system.birthratepre * pop\n", + " else:\n", + " if t < 1650:\n", + " net_growth = system.birthratemid * pop\n", + " else:\n", + " net_growth = system.birthratepost * pop\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 232, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_resultsex(system, table, title=None):\n", + " newfig()\n", + " plot_prehistory(table)\n", + " plot(system.results, '--', color='gray', label='model')\n", + " decorate(xlabel='Year', ylabel='World population (Million)', title=title)" + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nSU9PByA1NRUzMzOd46ampigUCtLT00lNTQXIVefxaxQHCaEJxO6PRRWpQumsxM7X8PuM5GjQoAG/\n/fYbsbGx2Nk92mzrp59+olatWs99J2lpaYmDg0NBh2lQERERJCYm0qpVK9zd3WnUqBFHjx4t6rCE\nKHL7q1Qh5Z9U0mPNyVSZcDXGHSfPaEKqmBRKQtLrkd3T/Pzzz1hZWRVELJiZmemsowTZK41bWFgA\n2ZvFPb7NAaDdwdbS0lK7mdyTdR6/RlFLCE0gclMk6XfS0WRpSL+TTuSmSBJCEwql/dq1a1O6dGmd\n1bkB9u/fn+deREePHqVnz57UqlWLFi1asCmv3QWfon///kyZMiVXW7Vq1SIpKQmAb775hjZt2lCz\nZk06duzInj17dOqfOHGCbt26UbNmTd59912dx2RbtmyhXr16Ov+fJycn4+Xlles95qhcuTKOjo4s\nW7aMv//+m717975w/2JmZiYbN26kdevW1KhRg44dOxIcHKw9HhgYyODBg1m9ejWNGzemZs2aDBs2\nTOdRYWRkJGPHjsXb25tGjRrh7++vc/zcuXP07t0bLy8v6tevz6RJk7R7SwlREP7I8CLuTikyVCZo\ngMSH1lw+7sG5DK9CaV+vhPTee+/l+hkwYABt2rRhy5YtdOvWrUCCcXZ2Jjo6WqcsOjpa+wiuTJky\n2r18Hj8O2Y/pcjaEy6vOk4/xikrs/ti8y0PyLi9oCoWC1q1b60xkjo2NJTQ0lDZt2ujUPXv2LO+/\n/z5vvfUWe/fuZerUqaxevTrP3V7z06VLF3766SedO9SgoCDeeecdrK2t+fLLL1m2bBn+/v7s27eP\nIUOGMG/ePG1SunnzJsOGDcPb25u9e/fSu3dvnTvyjh07kpycrHOH8+OPP2JhYaEzXeBxSqWS6dOn\nc+TIEbp3706/fv0YNmyY3u8pLwsXLmTz5s2MHz+e77//nvbt2zN+/HidP+eTJ0/y999/89lnn/Hp\np5/y119/aR8TpqSk0L9/f8zMzPj666/ZvHkzGRkZDBgwAJVKhVqtZsSIETRs2JB9+/axYcMGzp8/\nz6JFi14obiEe9/BSRYwtTODfXZ/VRuZQqhRxlwpn6LdeCSkjIyPXj0ajwd3dndmzZzNu3LgCCcbH\nx4fQ0FCdspMnT2o3//Px8eH27dtERkbqHLeyssLT0xN7e3tcXV05deqU9nhycjIXLlygblFuyfoY\n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\n5+OiC0g6nY5bbrmFF154gfDwcCIiInj66acZOnQoKSktN92UlZUBcOutt7a887VtndvT8dXBioHX\nTzykc+bT/w1J6njKysq8hl86W4pobX/iTsRms7FkyRLWrFmDzWZzj9RgMLTcpNLY2Ehubi5RUVFy\nfCpJkqRWstvtlJWVkZycfNaXM051UQYkSZIkqfPxvklEkiRJki4AGZAkSZKkDkEGJEmSJKlDkAFJ\nkiRJ6hBkQJIkSZI6hEsuIFksFqZOnco///lPr7R3332XK6+8ksGDB3PnnXeSn5/vkb57925uuukm\nBg8ezPjx41m71vPmk4aGBhYuXMiwYcNIT09nwYIFmEyeo09//vnn/OpXv2LQoEHccMMN/Pzzz21a\nvoKCAn73u9+Rnp7OqFGjWLBgAUaj542NvihnW7NYLDz33HOMHDmS1NRU7r33XgoKCjp9uZpasWIF\n/fr181reGcu1Z88eZs6c6f4/fOKJJ9zTeHTmcp2J3W5n6dKljBo1itTUVGbPnk15efkFzdOpysvL\nmTdvHqNGjSI9PZ27776b/ftPDrq8ZcsWfv3rXzNo0CCmTJnC5s2bPbavqKhgzpw5pKenk5mZyeLF\ni70Gjz7TZ9sicQmpra0Vv/3tb0ViYqJYu3atR9qnn34qUlNTxfr160VeXp647777xLhx44TZbBZC\nCFFRUSGGDh0qFi1aJA4ePChWrlwpLrvsMvHtt9+69/HHP/5RTJw4UezcuVNkZ2eLq6++Wjz88MPu\n9K1bt4oBAwaIjz/+WBw8eFA88cQTIj09XVRUVLRJ+axWq5gwYYKYNWuWOHjwoMjJyRETJkwQDz74\noE/L2R7mz58vRo8eLb777juxb98+cfvtt4vJkycLh8PRqcvlsnfvXpGcnCwSExM9lnfGchUXF4uM\njAzxxBNPiIMHD4rt27eLyZMnizvuuKNTl6s1XnrpJTFy5EixZcsWkZubK6ZPny5uuummC5qnpux2\nu7jxxhvFDTfcIHbt2iUOHDggZs+eLTIzM0VlZaU4cOCASE5OFq+//ro4ePCgeOmll8SAAQPE/v37\n3fu4+eabxS233CL27t0rvv76azF8+HDx4osvutPP9NmeziUTkLZu3SrGjRsnrr322mYD0vjx48Ur\nr7zifl1XVydSUlLE559/LoQQYvny5WLs2LHCbre715k/f7648847hRBCFBUViaSkJPHDDz+407dt\n2yb69esniouLhRBC3HXXXWLevHnudLvdLsaNGyfeeOONNinjvn37RGJiosjLy3MvW7VqlUhNTfVp\nOdva0aNHRWJiovjuu+/cyw4dOiTGjBkj8vPzO225XMxms5gyZYq47bbbvAJSZyzXO++8I0aOHCls\nNpt7WXZ2tkhMTBSFhYWdtlxnYjabRWpqqvif//kf97KCggKRmJgocnJyLkieTrVnzx6RmJgoDh48\n6F5mNpvF4MGDxZo1a8TChQvFbbfd5rHNbbfdJhYsWCCEEGLHjh0iMTFRHD161J2+evVqkZqa6g44\nZ/psT+eSabL76quvmDZtGh9//LFXWkVFBfn5+R6T+gUGBpKcnMz27dsB2L59OxkZGahUJ9+yoUOH\nsmPHDoQQ7NixA5VK5TEBYFpaGmq1mpycHBwOBzt27PA4hkqlIiMjw32M8xUaGopKpeLTTz/FbDZT\nWVnJhg0bSE5O9lk528OWLVswGAxkZma6l/Xq1YtNmzaRkJDQacvlkpWVRUxMDL/5zW88lnfWco0d\nO5asrCyPEU9cI9wbjcZOW64zOdPkoB1BXFwcb775Jj17nhw93vXZ1NTUsH37do/8AwwbNszjc+na\ntSvdu3d3pw8dOhSTycTevXtb9dmeziUTkBYsWMDvf/97dDqdV1prJvUrLi5uNr2hoYGqqipKSkow\nGAwecwJpNBoMBgNFRUUYjUbq6+vPe+LA04mJiWHBggWsXr2alJQUMjMzqaioICsry2flbA/5+fl0\n796ddevWMXXqVEaNGsXs2bM98twZywWQnZ3N6tWrefbZZ73SOmu54uPjSU9P91j29ttvExMTQ9++\nfTttuc6krSYHbU/h4eGMGTPGI9C///77NDY2MmrUqBbfd1f+S0pKvKaDcb0uKio67/fgohhc9dix\nYy3O2aPT6di9e/dpt29oaADwmga56aR+jY2NXsHM9dpisdDQ0NDsNMqufbimkT51Ha1W2+qJA89U\nzl27dvHLL7+QmZnJvffeS11dHc8//zxz587lnXfe8Uk5z8WZyjV16lQOHz7MO++8w2OPPYZOp+PF\nF1/kjjvu4PPPP++05fr++++ZN28eCxYsaHbOp85arlO/b0uWLOHrr79m2bJlqNXqDluu89VWk4P6\n0saNG3nxxRe588476d27d4vvuyv/zb3vrgkszWZzqz7b07koAlJMTAz/+te/mk1r+kugJa4BAS0W\n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\nSUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation(variables2, update_funcex)\n", + "plot_resultsex(variables2, table1, title='Test Plot')" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nbDk9NTVV6tixo9SjRw+V5zs7O0thYWFyWlRUlOTs7Cx9+umnctqgQYOk9u3by48bNWokzZkzR6Xu\nX3/9tdSrVy8pJSVFkiRJOn36tOTk5CTt2rVLzrNkyRLJyclJOnTokMpzZ8+eLTk5OUlHjx6VJEmS\nVq1aJTk5OUnr169Xybdr1y7JyclJOn36tCRJknT06FHJyclJWrt2rUq+yZMnS2+88YaUmJgorV+/\nXnJ2dpYiIiJU8ixdulRycnKSr/3psguTn6d3795SZmamnL58+XLJyclJOn78uCRJkvTf//5XcnJy\nkr7//nuV52/YsEFycnKStm3bVqLyiqrb0+lPP9b02iVJkpycnKSpU6fKjyMjIyUnJydp1apVkiRJ\nUnh4uOTs7CyNGzdOys3NlfNdvHhRcnZ2lj7++GOV57Vt21ZKTU2V8+3bt09ycnKStm/fXuTre+/e\nPcnFxUVaunSpSvqNGzekN954Q5o/f75KWZcvX5bzZGZmSj179lR5bv7nqaCn38uDBg2SnJycpMOH\nD8tp27Ztk5ycnKS+ffvKabm5uVKbNm2kfv36SZIkSUqlUvLw8JAmTZqkUn5ycrLk6uoqjR49Wk7L\nfz9HRkaqnLdDhw4qr1FWVpY0cOBAqVWrVvL7QZPPWmUlmsgqqZ49e9KyZUtatmyJl5cX/fr1Izg4\nmMGDBzN58mSVvHXr1qVWrVry47///pvIyEg6dOhAYmIi8fHxxMfHk5GRQfv27bl27ZrK0GFbW1ve\neOMN+bG1tTWmpqbExsYWWb/atWuzf/9+AgIC5M7LiRMnsmvXLgwNDYt83uHDh7G3t1e7Mxo7diwA\nwcHBKumenp5FlgVw9OhRtLS0GDRokEr61KlT+e233zA0NGTUqFGcPHlS5a4vIyMDLa28t//zDB0d\nPny4yiCLYcOGAXnXl/+3kZERvr6+Ks97//33MTIykvNpWt7zKs1rP3LkCJIkMWrUKLmpFqBx48a8\n9dZbHDt2jOzsbDm9bdu2KiOmXFxcAHj8+HGR5zh06BC5ubl4e3vL79v4+Hhq1qxJgwYNOHr0KJD3\n/gNYtmwZoaGh5OTkoKurS0BAgNrnQxN6enq0bt1afmxnZwfkNWnlUygUWFtby/XX0dHh1KlTzJ07\nV6WsJ0+eYGRkVOxr++TJE86ePUvbtm3JyMiQrzMpKYmOHTsSGxvLlStX5Gt9ns9aZSCayCqpJUuW\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_prehistory(table1)\n", + "plot(variables2.results, '--', color='gray', label='model')\n", + "decorate(xlim=[1600, 1940], xlabel='Year', \n", + " ylabel='World population (millions)',\n", + " title='Prehistorical population estimates')" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(variables2.results, '--', color='gray', label='model')\n", + "decorate(xlabel='Year', ylabel='World population (Million)', title=title)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap04mine.ipynb b/code/chap04mine.ipynb new file mode 100644 index 00000000..26d6d67f --- /dev/null +++ b/code/chap04mine.ipynb @@ -0,0 +1,933 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 4: Predict\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# To switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib qt5\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions from the previous chapter" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_estimates(table):\n", + " \"\"\"Plot world population estimates.\n", + " \n", + " table: DataFrame with columns `un` and `census`\n", + " \"\"\"\n", + " un = table.un / 1e9\n", + " census = table.census / 1e9\n", + " \n", + " plot(census, ':', color='darkblue', label='US Census')\n", + " plot(un, '--', color='green', label='UN DESA')\n", + " \n", + " decorate(xlabel='Year',\n", + " ylabel='World population (billion)')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_results(system):\n", + " \"\"\"Plot the estimates and the model.\n", + " \n", + " system: System object with `results`\n", + " \"\"\"\n", + " newfig()\n", + " plot_estimates(table2)\n", + " plot(system.results, '--', color='gray', label='model')\n", + " decorate(xlabel='Year', \n", + " ylabel='World population (billion)')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Run a model.\n", + " \n", + " Adds TimeSeries to `system` as `results`.\n", + "\n", + " system: System object\n", + " update_func: function that computes the population next year\n", + " \"\"\"\n", + " results = Series([])\n", + " results[system.t0] = system.p0\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1] = update_func(results[t], t, system)\n", + " system.results = results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Reading the data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# The data directory contains a downloaded copy of\n", + "# https://en.wikipedia.org/wiki/World_population_estimates\n", + "\n", + "from pandas import read_html\n", + "filename = 'data/World_population_estimates.html'\n", + "tables = read_html(filename, header=0, index_col=0, decimal='M')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "table2 = tables[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "table2.columns = ['census', 'prb', 'un', 'maddison', \n", + " 'hyde', 'tanton', 'biraben', 'mj', \n", + " 'thomlinson', 'durand', 'clark']" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "newfig()\n", + "plot_estimates(table2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Running the quadratic model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the update function for the quadratic growth model with parameters `alpha` and `beta`." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func2(pop, t, system):\n", + " \"\"\"Update population based on a quadratic model.\n", + " \n", + " pop: current population in billions\n", + " t: what year it is\n", + " system: system object with model parameters\n", + " \"\"\"\n", + " net_growth = system.alpha * pop + system.beta * pop**2\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Select the estimates generated by the U.S. Census, and convert to billions." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "census = table2.census / 1e9" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Extract the starting time and population." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "t0 = census.index[0]\n", + "p0 = census[t0]\n", + "t_end = census.index[-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Initialize the system object." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
t01950.000000
t_end2015.000000
p02.557629
alpha0.025000
beta-0.001800
\n", + "
" + ], + "text/plain": [ + "t0 1950.000000\n", + "t_end 2015.000000\n", + "p0 2.557629\n", + "alpha 0.025000\n", + "beta -0.001800\n", + "dtype: float64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables = System(t0=t0, \n", + " t_end=t_end,\n", + " p0=p0,\n", + " alpha=0.025,\n", + " beta=-0.0018)\n", + "\n", + "variables" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the model and plot results." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_simulation(variables, update_func2)\n", + "plot_results(variables)\n", + "decorate(title='Quadratic model')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generating projections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To generate projections, all we have to do is change `t_end`" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap04-fig01.pdf\n" + ] + } + ], + "source": [ + "variables.t_end = 2250\n", + "run_simulation(variables, update_func2)\n", + "plot_results(variables)\n", + "decorate(title='World population projection')\n", + "savefig('chap04-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The population in the model converges on the equilibrium population, `-alpha/beta`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.856665141368708" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables.results[variables.t_end]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.888888888888889" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-variables.alpha / variables.beta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** What happens if we start with an initial population above the carrying capacity, like 20 billion? The the model with initial populations between 1 and 20 billion, and plot the results on the same axes." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "variables.p0 = 20\n", + "run_simulation(variables, update_func2)\n", + "plot_results(variables)\n", + "variables.p0 = p0\n", + "run_simulation(variables, update_func2)\n", + "plot(variables.results)\n", + "decorate(title='World Population Overload')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparing projections" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compare the projection from our model with projections produced by people who know what they are doing." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
censusprbun
Year
20167.334772e+09NaN7.432663e+09
20177.412779e+09NaNNaN
20187.490428e+09NaNNaN
20197.567403e+09NaNNaN
20207.643402e+09NaN7.758157e+09
\n", + "
" + ], + "text/plain": [ + " census prb un\n", + "Year \n", + "2016 7.334772e+09 NaN 7.432663e+09\n", + "2017 7.412779e+09 NaN NaN\n", + "2018 7.490428e+09 NaN NaN\n", + "2019 7.567403e+09 NaN NaN\n", + "2020 7.643402e+09 NaN 7.758157e+09" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "table3 = tables[3]\n", + "table3.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`NaN` is a special value that represents missing data, in this case because some agencies did not publish projections for some years." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "table3.columns = ['census', 'prb', 'un']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function plots projections from the UN DESA and U.S. Census. It uses `dropna` to remove the `NaN` values from each series before plotting it." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_projections(table):\n", + " \"\"\"Plot world population projections.\n", + " \n", + " table: DataFrame with columns 'un' and 'census'\n", + " \"\"\"\n", + " census = table.census / 1e9\n", + " un = table.un / 1e9\n", + " \n", + " plot(census.dropna(), ':', color='darkblue', label='US Census')\n", + " plot(un.dropna(), '--', color='green', label='UN DESA')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the model until 2100, which is as far as the other projections go." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "variables.p0 = census[t0]\n", + "variables.t_end = 2100\n", + "run_simulation(variables, update_func2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap04-fig02.pdf\n" + ] + } + ], + "source": [ + "plot_results(variables)\n", + "plot_projections(table3)\n", + "decorate(title='World population projections')\n", + "savefig('chap04-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "People who know what they are doing expect the growth rate to decline more sharply than our model projects." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose there are two banks across the street from each other, The First Geometric Bank (FGB) and Exponential Savings and Loan (ESL). They offer the same interest rate on checking accounts, 3%, but at FGB, they compute and pay interest at the end of each year, and at ESL they compound interest continuously.\n", + "\n", + "If you deposit $p_0$ dollars at FGB at the beginning of Year 0, the balanace of your account at the end of Year $n$ is\n", + "\n", + "$ x_n = p_0 (1 + \\alpha)^n $\n", + "\n", + "where $\\alpha = 0.03$. At ESL, your balance at any time $t$ would be\n", + "\n", + "$ x(t) = p_0 \\exp(\\alpha t) $\n", + "\n", + "If you deposit \\$1000 at each back at the beginning of Year 0, how much would you have in each account after 10 years?\n", + "\n", + "Is there an interest rate FGB could pay so that your balance at the end of each year would be the same at both banks? What is it?\n", + "\n", + "Hint: `modsim` provides a function called `exp`, which is a wrapper for the NumPy function `exp`." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "def input_money_FGB(t):\n", + " return 1000 * (1 + 0.03)**t" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1343.9163793441223" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_money_FGB()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def input_money_ESL(t):\n", + " return 1000 * exp(0.03 * t)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1349.8588075760031" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_money_ESL()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "10.1492610407 years\n" + ] + } + ], + "source": [ + "e = input_money_ESL()\n", + "x = log(e / 1000) / log(0.03 + 1)\n", + "print(x, 'years')" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1349.8588075760031" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_money_FGB(t=x)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1349.8588075760031" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_money_ESL()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose a new bank opens called the Polynomial Credit Union (PCU). In order to compete with First Geometric Bank and Exponential Savings and Loan, PCU offers a parabolic savings account where the balance is a polynomial function of time:\n", + "\n", + "$ x(t) = p_0 + \\beta_1 t + \\beta_2 t^2 $\n", + "\n", + "As a special deal, they offer an account with $\\beta_1 = 30$ and $\\beta_2 = 0.5$, with those parameters guaranteed for life.\n", + "\n", + "Suppose you deposit \\$1000 at all three banks at the beginning of Year 0. How much would you have in each account at the end of Year 10? How about Year 20? And Year 100?" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def input_money_PCU(t):\n", + " return 1000 + 30 * t + 0.5 *t**2" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(t):\n", + " x = input_money_FGB(t)\n", + " y = input_money_ESL(t)\n", + " z = input_money_PCU(t)\n", + " print('FGB=', x)\n", + " print('ESL=', y)\n", + " print('PCU=', z)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FGB= 1343.9163793441223\n", + "ESL= 1349.85880758\n", + "PCU= 1350.0\n" + ] + } + ], + "source": [ + "run_simulation(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FGB= 1806.111234669415\n", + "ESL= 1822.11880039\n", + "PCU= 1800.0\n" + ] + } + ], + "source": [ + "run_simulation(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FGB= 19218.6319808563\n", + "ESL= 20085.5369232\n", + "PCU= 9000.0\n" + ] + } + ], + "source": [ + "run_simulation(100)" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap05mine.ipynb b/code/chap05mine.ipynb new file mode 100644 index 00000000..78d13986 --- /dev/null +++ b/code/chap05mine.ipynb @@ -0,0 +1,2040 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 5: Design\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# To switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib qt5\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### SIR implementation\n", + "\n", + "We'll use a `State` object to represent the number or fraction of people in each compartment." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S89
I1
R0
\n", + "
" + ], + "text/plain": [ + "S 89\n", + "I 1\n", + "R 0\n", + "dtype: int64" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(S=89, I=1, R=0)\n", + "init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To convert from number of people to fractions, we divide through by the total." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S0.988889
I0.011111
R0.000000
\n", + "
" + ], + "text/plain": [ + "S 0.988889\n", + "I 0.011111\n", + "R 0.000000\n", + "dtype: float64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init /= sum(init)\n", + "init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system` creates a `System` object with the given parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(beta, gamma):\n", + " \"\"\"Make a system object for the SIR model.\n", + " \n", + " beta: contact rate in days\n", + " gamma: recovery rate in days\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(S=89, I=1, R=0)\n", + " init /= sum(init)\n", + "\n", + " t0 = 0\n", + " t_end = 7 * 14\n", + "\n", + " return System(init=init, t0=t0, t_end=t_end,\n", + " beta=beta, gamma=gamma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an example with hypothetical values for `beta` and `gamma`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "tc = 3 # time between contacts in days \n", + "tr = 4 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "variables = make_system(beta, gamma)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The update function takes the state during the current time step and returns the state during the next time step." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update1(state, system):\n", + " \"\"\"Update the SIR model.\n", + " \n", + " state: State with variables S, I, R\n", + " system: System with beta and gamma\n", + " \n", + " returns: State object\n", + " \"\"\"\n", + " s, i, r = state\n", + "\n", + " infected = system.beta * i * s \n", + " recovered = system.gamma * i\n", + " \n", + " s -= infected\n", + " i += infected - recovered\n", + " r += recovered\n", + " \n", + " return State(S=s, I=i, R=r)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run a single time step, we call it like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S0.985226
I0.011996
R0.002778
\n", + "
" + ], + "text/plain": [ + "S 0.985226\n", + "I 0.011996\n", + "R 0.002778\n", + "dtype: float64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "single_state = update1(init, variables)\n", + "single_state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run a simulation by calling the update function for each time step." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \n", + " returns: State object for final state\n", + " \"\"\"\n", + " state = system.init\n", + " for t in linrange(system.t0, system.t_end):\n", + " state = update_func(state, system)\n", + " return state" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is the state of the system at `t_end`" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S0.520453
I0.000615
R0.478933
\n", + "
" + ], + "text/plain": [ + "S 0.520453\n", + "I 0.000615\n", + "R 0.478933\n", + "dtype: float64" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(variables, update1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise** Suppose the time between contacts is 4 days and the recovery time is 5 days. After 14 weeks, how many students, total, have been infected?\n", + "\n", + "Hint: what is the change in `S` between the beginning and the end of the simulation?" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \n", + " returns: State object for final state\n", + " \"\"\"\n", + " state = system.init\n", + " for t in linrange(system.t0, system.t_end):\n", + " state = update_func(state, system)\n", + " return state.S" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.379430429899 of the population\n" + ] + } + ], + "source": [ + "beta = 1 / 4\n", + "gamma = 1 / 5\n", + "variables = make_system(beta, gamma)\n", + "beginning = variables.init.S\n", + "end = run_simulation(variables, update1)\n", + "print(beginning - end, 'of the population')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using Series objects" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we want to store the state of the system at each time step, we can use one `TimeSeries` object for each state variable." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Add three Series objects to the System: S, I, R\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " S = TimeSeries()\n", + " I = TimeSeries()\n", + " R = TimeSeries()\n", + "\n", + " state = system.init\n", + " t0 = system.t0\n", + " S[t0], I[t0], R[t0] = state\n", + " \n", + " for t in linrange(system.t0, system.t_end):\n", + " state = update_func(state, system)\n", + " S[t+1], I[t+1], R[t+1] = state\n", + " \n", + " system.S = S\n", + " system.I = I\n", + " system.R = R" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "tc = 3 # time between contacts in days \n", + "tr = 4 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "variables = make_system(beta, gamma)\n", + "run_simulation(variables, update1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And then we can plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_results(S, I, R):\n", + " \"\"\"Plot the results of a SIR model.\n", + " \n", + " S: TimeSeries\n", + " I: TimeSeries\n", + " R: TimeSeries\n", + " \"\"\"\n", + " plot(S, '--', color='blue', label='Susceptible')\n", + " plot(I, '-', color='red', label='Infected')\n", + " plot(R, ':', color='green', label='Recovered')\n", + " decorate(xlabel='Time (days)',\n", + " ylabel='Fraction of population')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what they look like." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig01.pdf\n" + ] + } + ], + "source": [ + "plot_results(variables.S, variables.I, variables.R)\n", + "savefig('chap05-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using a DataFrame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instead of making three `TimeSeries` objects, we can use one `DataFrame`.\n", + "\n", + "We have to use `loc` to indicate which row we want to assign the results to. But then Pandas does the right thing, matching up the state variables with the columns of the `DataFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Add a DataFrame to the System: results\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " frame = DataFrame(columns=system.init.index)\n", + " frame.loc[system.t0] = system.init\n", + " \n", + " for t in linrange(system.t0, system.t_end):\n", + " frame.loc[t+1] = update_func(frame.loc[t], system)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it, and what the result looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SIR
00.9888890.0111110.000000
10.9852260.0119960.002778
20.9812870.0129360.005777
30.9770550.0139340.009011
40.9725170.0149880.012494
\n", + "
" + ], + "text/plain": [ + " S I R\n", + "0 0.988889 0.011111 0.000000\n", + "1 0.985226 0.011996 0.002778\n", + "2 0.981287 0.012936 0.005777\n", + "3 0.977055 0.013934 0.009011\n", + "4 0.972517 0.014988 0.012494" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tc = 3 # time between contacts in days \n", + "tr = 4 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "sir = make_system(beta, gamma)\n", + "run_simulation(sir, update1)\n", + "sir.results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can extract the results and plot them." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "frame = sir.results\n", + "plot_results(frame.S, frame.I, frame.R)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise** Suppose the time between contacts is 4 days and the recovery time is 5 days. Simulate this scenario for 14 days and plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(beta, gamma):\n", + " \"\"\"Make a system object for the SIR model.\n", + " \n", + " beta: contact rate in days\n", + " gamma: recovery rate in days\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(S=89, I=1, R=0)\n", + " init /= sum(init)\n", + "\n", + " t0 = 0\n", + " t_end = 14\n", + "\n", + " return System(init=init, t0=t0, t_end=t_end,\n", + " beta=beta, gamma=gamma)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SIR
00.9888890.0111110.000000
10.9861420.0116360.002222
20.9832730.0121770.004549
30.9802800.0127350.006985
40.9771590.0133090.009532
\n", + "
" + ], + "text/plain": [ + " S I R\n", + "0 0.988889 0.011111 0.000000\n", + "1 0.986142 0.011636 0.002222\n", + "2 0.983273 0.012177 0.004549\n", + "3 0.980280 0.012735 0.006985\n", + "4 0.977159 0.013309 0.009532" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tc = 4 # time between contacts in days \n", + "tr = 5 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "sir = make_system(beta, gamma)\n", + "run_simulation(sir, update1)\n", + "sir.results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot_results(sir.results.S, sir.results.I, sir.results.R)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Metrics" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Given the results, we can compute metrics that quantify whatever we are interested in, like the total number of sick students, for example." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_total_infected(system):\n", + " \"\"\"Fraction of population infected during the simulation.\n", + " \n", + " system: System object with results.\n", + " \n", + " returns: fraction of population\n", + " \"\"\"\n", + " frame = system.results\n", + " return frame.S[system.t0] - frame.S[system.t_end]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an example.|" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.333 0.25 0.467162931836\n" + ] + } + ], + "source": [ + "variables.beta = 0.333\n", + "variables.gamma = 0.25\n", + "run_simulation(variables, update1)\n", + "print(variables.beta, variables.gamma, calc_total_infected(variables))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write functions that take a `System` object as a parameter, extract the `results` object from it, and compute the other metrics mentioned in the book:\n", + "\n", + "1. The fraction of students who are sick at the peak of the outbreak.\n", + "\n", + "2. The day the outbreak peaks.\n", + "\n", + "3. The fraction of students who are sick at the end of the semester.\n", + "\n", + "Hint: If you have a `TimeSeries` called `I`, you can compute the largest value of the series like this:\n", + "\n", + " I.max()\n", + "\n", + "And the index of the largest value like this:\n", + "\n", + " I.idxmax()\n", + "\n", + "You can read about these functions in the `Series` [documentation](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_max_sick(system):\n", + " frame = system.results\n", + " return frame.I.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.043536202687592354" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables = make_system(0.333, 0.25)\n", + "run_simulation(variables, update1)\n", + "calc_max_sick(variables)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_dayof_maxsick(system):\n", + " frame = system.results\n", + " return frame.I.idxmax()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "30" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables = make_system(0.333, 0.25)\n", + "run_simulation(variables, update1)\n", + "calc_dayof_maxsick(variables)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_fraction(system):\n", + " frame = system.results\n", + " return frame.loc[99].I" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.00062277671332700024" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables = make_system(0.333, 0.25)\n", + "run_simulation(variables, update1)\n", + "calc_fraction(variables)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What if?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use this model to evaluate \"what if\" scenarios. For example, this function models the effect of immunization by moving some fraction of the population from S to R before the simulation starts." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def add_immunization(system, fraction):\n", + " \"\"\"Immunize a fraction of the population.\n", + " \n", + " Moves the given fraction from S to R.\n", + " \n", + " system: System object\n", + " fraction: number from 0 to 1\n", + " \"\"\"\n", + " system.init.S -= fraction\n", + " system.init.R += fraction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start again with the system we used in the previous sections." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.3333333333333333, 0.25)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tc = 3 # time between contacts in days \n", + "tr = 4 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "variables = make_system(beta, gamma)\n", + "variables.beta, variables.gamma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And run the model without immunization." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.46832081102878098" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(variables, update1)\n", + "calc_total_infected(variables)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now with 10% immunization." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.30650802853979753" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "variables2 = make_system(beta, gamma)\n", + "add_immunization(variables2, 0.1)\n", + "run_simulation(variables2, update1)\n", + "calc_total_infected(variables2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "10% immunization leads to a drop in infections of 16 percentage points.\n", + "\n", + "Here's what the time series looks like for S, with and without immunization." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig02.pdf\n" + ] + } + ], + "source": [ + "plot(variables.results.S, '-', label='No immunization')\n", + "plot(variables2.results.S, 'g--', label='10% immunization')\n", + "\n", + "decorate(xlabel='Time (days)',\n", + " ylabel='Fraction susceptible')\n", + "\n", + "savefig('chap05-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can sweep through a range of values for the fraction of the population who are immunized." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0.468320811029\n", + "0.1 0.30650802854\n", + "0.2 0.161365457006\n", + "0.3 0.0728155898425\n", + "0.4 0.035520216753\n", + "0.5 0.0196887157825\n", + "0.6 0.0116220579983\n", + "0.7 0.00683873780062\n", + "0.8 0.00369649625371\n", + "0.9 0.00148153267227\n", + "1.0 -0.000161212109412\n" + ] + } + ], + "source": [ + "immunize_array = linspace(0, 1, 11)\n", + "for fraction in immunize_array:\n", + " variables = make_system(beta, gamma)\n", + " add_immunization(variables, fraction)\n", + " run_simulation(variables, update1)\n", + " print(fraction, calc_total_infected(variables))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function does the same thing and stores the results in a `Sweep` object." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_immunity(immunize_array):\n", + " \"\"\"Sweeps a range of values for immunity.\n", + " \n", + " immunize_array: array of fraction immunized\n", + " \n", + " returns: Sweep object\n", + " \"\"\"\n", + " sweep = SweepSeries()\n", + " for fraction in immunize_array:\n", + " system = make_system(beta, gamma)\n", + " add_immunization(system, fraction)\n", + " run_simulation(system, update1)\n", + " sweep[fraction] = calc_total_infected(system)\n", + " return sweep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "immunize_array = linspace(0, 1, 21)\n", + "infected_sweep = sweep_immunity(immunize_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig03.pdf\n" + ] + } + ], + "source": [ + "plot(infected_sweep)\n", + "\n", + "decorate(xlabel='Fraction immunized',\n", + " ylabel='Total fraction infected',\n", + " title='Fraction infected vs. immunization rate',\n", + " legend=False)\n", + "\n", + "savefig('chap05-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If 40% of the population is immunized, less than 4% of the population gets sick." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Logistic function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To model the effect of a hand-washing campaign, I'll use a [generalized logistic function](https://en.wikipedia.org/wiki/Generalised_logistic_function), which is a convenient function for modeling curves that have a generally sigmoid shape. The parameters of the GLF correspond to various features of the curve in a way that makes it easy to find a function that has the shape you want, based on data or background information about the scenario." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def logistic(x, A=0, B=1, C=1, M=0, K=1, Q=1, nu=1):\n", + " \"\"\"Computes the generalize logistic function.\n", + " \n", + " A: controls the lower bound\n", + " B: controls the steepness of the transition \n", + " C: not all that useful, AFAIK\n", + " M: controls the location of the transition\n", + " K: controls the upper bound\n", + " Q: shift the transition left or right\n", + " nu: affects the symmetry of the transition\n", + " \n", + " returns: float or array\n", + " \"\"\"\n", + " exponent = -B * (x - M)\n", + " denom = C + Q * exp(exponent)\n", + " return A + (K-A) / denom ** (1/nu)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following array represents the range of possible spending." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0., 60., 120., 180., 240., 300., 360., 420.,\n", + " 480., 540., 600., 660., 720., 780., 840., 900.,\n", + " 960., 1020., 1080., 1140., 1200.])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spending = linspace(0, 1200, 21)\n", + "spending" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`compute_factor` computes the reduction in `beta` for a given level of campaign spending.\n", + "\n", + "`M` is chosen so the transition happens around \\$500.\n", + "\n", + "`K` is the maximum reduction in `beta`, 20%.\n", + "\n", + "`B` is chosen by trial and error to yield a curve that seems feasible." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def compute_factor(spending):\n", + " \"\"\"Reduction factor as a function of spending.\n", + " \n", + " spending: dollars from 0 to 1200\n", + " \n", + " returns: fractional reduction in beta\n", + " \"\"\"\n", + " return logistic(spending, M=500, K=0.2, B=0.005)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig04.pdf\n" + ] + } + ], + "source": [ + "percent_reduction = compute_factor(spending) * 100\n", + "\n", + "plot(spending, percent_reduction)\n", + "\n", + "decorate(xlabel='Hand-washing campaign spending (USD)',\n", + " ylabel='Percent reduction in infection rate',\n", + " title='Effect of hand washing on infection rate',\n", + " legend=False)\n", + "\n", + "savefig('chap05-fig04.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Modify the parameters `M`, `K`, and `B`, and see what effect they have on the shape of the curve. Read about the [generalized logistic function on Wikipedia](https://en.wikipedia.org/wiki/Generalised_logistic_function). Modify the other parameters and see what effect they have." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Hand washing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can model the effect of a hand-washing campaign by modifying `beta`" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def add_hand_washing(system, spending):\n", + " \"\"\"Modifies system to model the effect of hand washing.\n", + " \n", + " system: System object\n", + " spending: campaign spending in USD\n", + " \"\"\"\n", + " factor = compute_factor(spending)\n", + " system.beta *= (1 - factor)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's start with the same values of `beta` and `gamma` we've been using." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.3333333333333333, 0.25)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tc = 3 # time between contacts in days \n", + "tr = 4 # recovery time in days\n", + "\n", + "beta = 1 / tc # contact rate in per day\n", + "gamma = 1 / tr # recovery rate in per day\n", + "\n", + "beta, gamma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can sweep different levels of campaign spending." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "spending_array = linspace(0, 1200, 13)\n", + "\n", + "for spending in spending_array:\n", + " system = make_system(beta, gamma)\n", + " add_hand_washing(system, spending)\n", + " run_simulation(system, update1)\n", + " print(spending, system.beta, calc_total_infected(system))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a function that sweeps a range of spending and stores the results in a `Sweep` object." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_hand_washing(spending_array):\n", + " \"\"\"Run simulations with a range of spending.\n", + " \n", + " spending_array: array of dollars from 0 to 1200\n", + " \n", + " returns: Sweep object\n", + " \"\"\"\n", + " sweep = SweepSeries()\n", + " for spending in spending_array:\n", + " system = make_system(beta, gamma)\n", + " add_hand_washing(system, spending)\n", + " run_simulation(system, update1)\n", + " sweep[spending] = calc_total_infected(system)\n", + " return sweep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "spending_array = linspace(0, 1200, 20)\n", + "infected_sweep = sweep_hand_washing(spending_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig05.pdf\n" + ] + } + ], + "source": [ + "plot(infected_sweep)\n", + "\n", + "decorate(xlabel='Hand-washing campaign spending (USD)',\n", + " ylabel='Total fraction infected',\n", + " title='Effect of hand washing on total infections',\n", + " legend=False)\n", + "\n", + "savefig('chap05-fig05.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's put it all together to make some public health spending decisions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we have \\$1200 to spend on any combination of vaccines and a hand-washing campaign." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "24" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_students = 90\n", + "budget = 1200\n", + "price_per_dose = 50\n", + "max_doses = int(budget / price_per_dose)\n", + "dose_array = linrange(max_doses)\n", + "max_doses" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can sweep through a range of doses from, 0 to `max_doses`, model the effects of immunization and the hand-washing campaign, and run simulations.\n", + "\n", + "For each scenario, we compute the fraction of students who get sick." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0.988888888889 0.268620815383 0.195604947216\n", + "1.0 0.977777777778 0.269828391545 0.186644581729\n", + "2.0 0.966666666667 0.271723878668 0.180604463596\n", + "3.0 0.955555555556 0.274613528135 0.178367464147\n", + "4.0 0.944444444444 0.278828368254 0.180884447758\n", + "5.0 0.933333333333 0.284596094758 0.188797102015\n", + "6.0 0.922222222222 0.291836044587 0.201689099624\n", + "7.0 0.911111111111 0.3 0.217343161684\n", + "8.0 0.9 0.308163955413 0.232044176676\n", + "9.0 0.888888888889 0.315403905242 0.242272009547\n", + "10.0 0.877777777778 0.321171631746 0.246284295914\n", + "11.0 0.866666666667 0.325386471865 0.244250344646\n", + "12.0 0.855555555556 0.328276121332 0.237404040858\n" + ] + } + ], + "source": [ + "for doses in dose_array:\n", + " fraction = doses / num_students\n", + " spending = budget - doses * price_per_dose\n", + " \n", + " system = make_system(beta, gamma)\n", + " add_immunization(system, fraction)\n", + " add_hand_washing(system, spending)\n", + " \n", + " run_simulation(system, update1)\n", + " print(doses, system.init.S, system.beta, calc_total_infected(system))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function wraps that loop and stores the results in a `Sweep` object." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_doses(dose_array):\n", + " \"\"\"Runs simulations with different doses and campaign spending.\n", + " \n", + " dose_array: range of values for number of vaccinations\n", + " \n", + " return: Sweep object with total number of infections \n", + " \"\"\"\n", + " sweep = SweepSeries()\n", + " for doses in dose_array:\n", + " fraction = doses / num_students\n", + " spending = budget - doses * price_per_dose\n", + " \n", + " system = make_system(beta, gamma)\n", + " add_immunization(system, fraction)\n", + " add_hand_washing(system, spending)\n", + " \n", + " run_simulation(system, update1)\n", + " sweep[doses] = calc_total_infected(system)\n", + "\n", + " return sweep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can compute the number of infected students for each possible allocation of the budget." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "infected_sweep = sweep_doses(dose_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig06.pdf\n" + ] + } + ], + "source": [ + "plot(infected_sweep)\n", + "\n", + "decorate(xlabel='Doses of vaccine',\n", + " ylabel='Total fraction infected',\n", + " title='Total infections vs. doses',\n", + " legend=False)\n", + "\n", + "savefig('chap05-fig06.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose the price of the vaccine drops to $50 per dose. How does that affect the optimal allocation of the spending?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose we have the option to quarantine infected students. For example, a student who feels ill might be moved to an infirmary, or a private dorm room, until they are no longer infectious.\n", + "\n", + "How might you incorporate the effect of quarantine in the SIR model?" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def move_to_Q(system, chance):\n", + " return chance * system.i" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update1(state, system, chance):\n", + " \"\"\"Update the SIR model.\n", + " \n", + " state: State with variables S, I, R\n", + " system: System with beta and gamma\n", + " \n", + " returns: State object\n", + " \"\"\"\n", + " s, i, r = state\n", + " \n", + " moved = chance * i\n", + "\n", + " infected = system.beta * i * s \n", + " recovered = system.gamma * i\n", + " \n", + " s -= infected\n", + " i += infected - recovered - moved\n", + " r += recovered + moved\n", + " \n", + " return State(S=s, I=i, R=r)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func, chance):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Add a DataFrame to the System: results\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " frame = DataFrame(columns=system.init.index)\n", + " frame.loc[system.t0] = system.init\n", + " \n", + " for t in linrange(system.t0, system.t_end):\n", + " frame.loc[t+1] = update_func(frame.loc[t], system, chance)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_chances(chance_array):\n", + " sweep = SweepSeries()\n", + " for chance in chance_array:\n", + " system = make_system(beta, gamma)\n", + " run_simulation(system, update1, chance)\n", + " sweep[chance] = calc_total_infected(system)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\ipykernel_launcher.py:13: RuntimeWarning: overflow encountered in double_scalars\n", + " del sys.path[0]\n", + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\ipykernel_launcher.py:17: RuntimeWarning: invalid value encountered in double_scalars\n" + ] + } + ], + "source": [ + "chance_array = linrange(0, 100, 101)\n", + "infected_sweep = sweep_chances(chance_array)\n", + "plot(infected_sweep)\n", + "decorate(xlabel='Chance of Quarantine',\n", + " ylabel='Total fraction infected',\n", + " title='Total infections vs. quarantines',\n", + " legend=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap06mine.ipynb b/code/chap06mine.ipynb new file mode 100644 index 00000000..cdc97f3e --- /dev/null +++ b/code/chap06mine.ipynb @@ -0,0 +1,1234 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 6: Analysis\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# To switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Code from the previous chapter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system`, `plot_results`, and `calc_total_infected` are unchanged." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(beta, gamma):\n", + " \"\"\"Make a system object for the SIR model.\n", + " \n", + " beta: contact rate in days\n", + " gamma: recovery rate in days\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(S=89, I=1, R=0)\n", + " init /= np.sum(init)\n", + "\n", + " t0 = 0\n", + " t_end = 7 * 14\n", + "\n", + " return System(init=init, t0=t0, t_end=t_end,\n", + " beta=beta, gamma=gamma)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_results(S, I, R):\n", + " \"\"\"Plot the results of a SIR model.\n", + " \n", + " S: TimeSeries\n", + " I: TimeSeries\n", + " R: TimeSeries\n", + " \"\"\"\n", + " plot(S, '--', color='blue', label='Susceptible')\n", + " plot(I, '-', color='red', label='Infected')\n", + " plot(R, ':', color='green', label='Resistant')\n", + " decorate(xlabel='Time (days)',\n", + " ylabel='Fraction of population')" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_total_infected(system):\n", + " \"\"\"Fraction of population infected during the simulation.\n", + " \n", + " system: System object with results.\n", + " \n", + " returns: fraction of population\n", + " \"\"\"\n", + " frame = system.results\n", + " return frame.S[system.t0] - frame.S[system.t_end]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an updated version of `run_simulation` that uses `unpack`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Add a TimeFrame to the System: results\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " frame = TimeFrame(columns=init.index)\n", + " frame.loc[t0] = init\n", + " \n", + " for i in linrange(t0, t_end):\n", + " frame.loc[i+1] = update_func(frame.loc[i], system)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a version of `update1` that uses `unpack`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Original\n", + "\n", + "def update1(state, system):\n", + " \"\"\"Update the SIR model.\n", + " \n", + " state: State (s, i, r)\n", + " system: System object\n", + " \n", + " returns: State (sir)\n", + " \"\"\"\n", + " s, i, r = state\n", + "\n", + " infected = system.beta * i * s \n", + " recovered = system.gamma * i\n", + " \n", + " s -= infected\n", + " i += infected - recovered\n", + " r += recovered\n", + " \n", + " return State(S=s, I=i, R=r)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update1(state, system):\n", + " s, i, r = state\n", + " unpack(system)\n", + " infected = beta * i * s\n", + " recovered = gamma * i\n", + " s -= infected\n", + " i += infected - recovered\n", + " r += recovered\n", + " return State(S=s, I=i, R=r)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test the updated code with this example." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SIR
00.9888890.0111110.000000
10.9852300.0119920.002778
20.9812960.0129290.005776
30.9770710.0139210.009008
40.9725410.0149700.012488
\n", + "
" + ], + "text/plain": [ + " S I R\n", + "0 0.988889 0.011111 0.000000\n", + "1 0.985230 0.011992 0.002778\n", + "2 0.981296 0.012929 0.005776\n", + "3 0.977071 0.013921 0.009008\n", + "4 0.972541 0.014970 0.012488" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(0.333, 0.25)\n", + "run_simulation(system, update1)\n", + "system.results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nSiUIgiCoG/8BBBozF/ND35wAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "frame = system.results\n", + "plot_results(frame.S, frame.I, frame.R)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sweeping beta" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Make a range of values for `beta`, with constant `gamma`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "beta_array = linspace(0.1, 0.9, 11)\n", + "gamma = 0.25" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the simulation once for each value of `beta` and print total infections." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.1 0.00723090166498\n", + "0.18 0.0262722567457\n", + "0.26 0.160575485321\n", + "0.34 0.490862856866\n", + "0.42 0.689867847411\n", + "0.5 0.804506112463\n", + "0.58 0.873610307851\n", + "0.66 0.916554007142\n", + "0.74 0.943729262152\n", + "0.82 0.961060480958\n", + "0.9 0.972099315633\n" + ] + } + ], + "source": [ + "for beta in beta_array:\n", + " system = make_system(beta, gamma)\n", + " run_simulation(system, update1)\n", + " print(system.beta, calc_total_infected(system))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wrap that loop in a function and return a `SweepSeries` object." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_beta(beta_array, gamma):\n", + " \"\"\"SweepSeriess a range of values for beta.\n", + " \n", + " beta_array: array of beta values\n", + " gamma: recovery rate\n", + " \n", + " returns: SweepSeries that maps from beta to total infected\n", + " \"\"\"\n", + " sweep = SweepSeries()\n", + " for beta in beta_array:\n", + " system = make_system(beta, gamma)\n", + " run_simulation(system, update1)\n", + " sweep[system.beta] = calc_total_infected(system)\n", + " return sweep" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "SweepSeries `beta` and plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "infected_sweep = sweep_beta(beta_array, gamma)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "label = 'gamma = ' + str(gamma)\n", + "plot(infected_sweep, label=label)\n", + "decorate(xlabel='Contacts per day (beta)',\n", + " ylabel='Fraction infected')\n", + "\n", + "savefig('chap06-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sweeping gamma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the same array of values for `beta`" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.1 , 0.18, 0.26, 0.34, 0.42, 0.5 , 0.58, 0.66, 0.74,\n", + " 0.82, 0.9 ])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta_array = linspace(0.1, 0.9, 11)\n", + "beta_array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now an array of values for `gamma`" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.1, 0.3, 0.5, 0.7])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gamma_array = linspace(0.1, 0.7, 4)\n", + "gamma_array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For each value of `gamma`, SweepSeries `beta` and plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for gamma in gamma_array:\n", + " infected_sweep = sweep_beta(beta_array, gamma)\n", + " label = 'gamma = ' + str(gamma)\n", + " plot(infected_sweep, label=label)\n", + " \n", + "decorate(xlabel='Contacts per day (beta)',\n", + " ylabel='Fraction infected',\n", + " loc='upper left')\n", + "\n", + "savefig('chap06-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now wrap that loop in a function and store the results in a `SweepSeriesFrame`" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sweep_parameters(beta_array, gamma_array):\n", + " \"\"\"SweepSeriess a range of values for beta and gamma.\n", + " \n", + " beta_array: array of infection rates\n", + " gamma_array: array of recovery rates\n", + " \n", + " returns: SweepSeriesFrame with one row for each beta\n", + " and one column for each gamma\n", + " \"\"\"\n", + " frame = SweepFrame(columns=gamma_array)\n", + " for gamma in gamma_array:\n", + " frame[gamma] = sweep_beta(beta_array, gamma)\n", + " return frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0.10.30.50.7
0.100.0846930.0054440.0027360.001827
0.180.7086230.0159140.0061180.003783
0.260.9007800.0553800.0116390.006427
0.340.9568880.2678640.0221150.010191
0.420.9770450.5245630.0478160.015946
\n", + "
" + ], + "text/plain": [ + " 0.1 0.3 0.5 0.7\n", + "0.10 0.084693 0.005444 0.002736 0.001827\n", + "0.18 0.708623 0.015914 0.006118 0.003783\n", + "0.26 0.900780 0.055380 0.011639 0.006427\n", + "0.34 0.956888 0.267864 0.022115 0.010191\n", + "0.42 0.977045 0.524563 0.047816 0.015946" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame = sweep_parameters(beta_array, gamma_array)\n", + "frame.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how we can plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAETCAYAAAAlCTHcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl4VFWe//+qqlSWSmVfSFiSsOXGiITdRAERB5RFhB4a\nuweVgGM7xrYj7QwqAi3M2A7iYPyhjg0YjNP4Q6XtbnuxXaKA7KuyBG4MSxKy7/tS2/ePW6lslVCB\nJJXlvJ4nT+qee+69J5Wq+77nfDaVxWJBIBAIBIIboXb2AAQCgUDQPxCCIRAIBAKHEIIhEAgEAocQ\ngiEQCAQChxCCIRAIBAKHEIIhEAgEAodwcebFJUl6F3CRZflfO+kzBXgTmAjkAP8py/IHvTREgUAg\nEFhxygxDkiSVJEmbgCdv0C8I+AI4DUwC/j/gPUmS5vb8KAUCgUDQkl6fYUiSNAp4DxgHZN2g+78C\nFUCiLMtm4JIkSZOAfwe+7OQabsBUIA8wdce4BQKBYBCgAUKBE7IsN7Td6YwlqbuAbODnwJ4b9J0B\nHLCKRRP7gHckSVLJstxRmPpU4LtbHahAIBAMUmYAB9s29rpgyLL8e+D3AJIk3aj7cOBMm7ZcQAcE\nAMUdHJcHsHv3bkJCQm56rAKBQDCYyM/PZ/ny5WC9h7bFqUZvB9AB9W3amqZJ7p0cZwIICQlh+PDh\nPTEugUDQj2ibM8/RFHoddnPwBH01U59KpUKjVnXWxe5Sfl8XjDrArU1b03ZNL49FILhpLBYLJrOF\nRoMJg9GM2WLBbLZgNtP8uu3vVq+t/azbFkvrY03mtvssLfbRbp8F5Z7XdCNt9Zr27U03Pou5+bXZ\nYgGL/f6212330XxMy/em9ZvV/kbbso+l3Yv2myKpaudoXdTE3RHK+DFBXTqurwtGNooBpiVDgWoU\nY7hA0CNYLBaMJjMGo5lGg/LbYFRu9o1Gk7WtaduMwdDidcu+1vYmkRAI+gIGo5nzl0sGnGAcBFa2\nMXDfCxxqYwgXCDrEYDRRWdNIZU0jFdUN1NQbMRhMzTd6kyIKjUYTxhY3ffGUOjBRqTpeiul0kcaB\nzl05vrNx9DRuWg2TooK7fFyfEgxJklwBf6BUluVGFPfbNcC7kiQlAf8E/AvwgPNGKehrmM0WausN\nVNQ0UlndSEVNQyuBqGswOnuIAGjUKrQuGly1atQqFWq19afptYpW2ypV836NurN9Lc9Du32qNudt\net2EWq2y3ehUKqW/7TWAClQo7Z3ta3m8sk/pY/cYa2PbW2bre6jKTlubYxw4jzNvzAONPiUYKC63\n36LMIvbJslwgSdIDKAF7Z4BM4DFZlr9x4hgFTqDRYLIJgE0MrMJQVdOIydz9swEXjRqti/LjqtWg\n1ajRatW4umiUNhcNWq269WuNta9L07EaXK2vNRqRiUfQv3GqYMiyPKvN9j7aPCzIsnwUmNZ7oxI4\nA7PZQnWdoZUgVFoFoaK6kfrGm58lqNUqvHWueOtd8fZ0w0unxVXbdCPXNAuCixpXFzUuVgFQd+5F\nIhAMOvraDEMwwKmobqCovI7KakUQKqziUFXTeEtGYQ83F3z0bnh7uuLt6YqPpxveeld8PF3RuWvF\nzV8g6AaEYAh6nPpGIxnZ5VzKLCO/5Oa8oTVqFd6eiiD46K2i0EIgtC6abh61QCBoixAMQY9gMlvI\nyq/kUmYZ13IrHLIxeLprWwiCMkNQlpLc8HR3EcZLgaCLmC1mahprqWyoprKhiqqGGiobqjFbzNwx\nJIpQr655SgnBEHQbFouF4vJ6LmWWkp5VZtc7Sa1SMTxYj5+3e/Pykd4NL50rWhdhFBYIukqjydBC\nDKqorK+mqrGayoZqqhqqO3QPr2yoZunt87t0LSEYglumps6AnFWGfK2Uksq2mVwUgv10REX4MXaE\nHx5u4mMnEDiKxWKhxmCdJTSJQX2VTRDqje2SyjpEqFfXgvZACIbgJjGazFzJqeBSZinZBfafYvQe\nWiLD/IiK8Mffu7PUX93DZ599xttvv01eXh5RUVGsW7eO8ePH3/C4xsZGli5dyuOPP85DDz3U4+MU\nCNpiMBlsy0WVDc1iUNmgCITZfPNxyh5ad7zdvPB20+PlpsfbTY+fhw+BOv8un0sIhsBhLBYLecU1\nXMosI+N6OY2G9vnJXDRqRg/zISrCn2FB+l7zTjp8+DBr165l/fr1TJkyhV27dvH444/zxRdf4O/f\n8Rejurqa1atXI8tyr4xTMHixWCxUNlRRXFtGWV1FC7tCNXUG+zNzR1Cr1YoYuOrxdtfj7eZle+3l\n6olWo+22v0EIhuCGVFQ3IGeWcSmzlMqaRrt9hgXpiQr3Z/RwH1y1ve+x9N5777Fw4UIefvhhADZt\n2sTRo0f5+OOP+bd/+ze7xxw+fJgNGzbg7e3dm0MVDAIsFgsVDVUU15RSVFtCcU0ZJbWlNJoMN3U+\nd6073tbZQdMswdvNCy83Tzy1ul5zCBGC0Y8pLi5m48aNHDp0CJ1OR3x8PB999BFPPfUUP/nJT2ho\naGDr1q18+eWXFBUVodfruffee9mwYQMeHh58+umnbN++nUcffZQdO3ZQVlbGrFmzWLt2La/+92a+\nSU3FXadn6r3LuG3SPQB8unMjQ0aMpbqimKuXTuLpqSfh6V8yQh/J84m/JjMzk+joaDZv3kxYWBgA\nx44dY9u2bVy4cAGDwcDo0aN57rnnmDlzpt2/a/bs2eTk5Njd98EHH3DnnXe2ajObzZw+fZr169fb\n2tRqNVOnTuXkyZMdvn/ffPMNixcv5he/+AV33HFHl957gaAJs8VMeX0lxTWlFNeWUVxbSnFtKUaT\n48GmKpWqhRA0iUGzQLh24yzhVhCC0U8xm808+eSTaDQaUlJSMBqNvPzyy2RnZ9v6bN68mYMHD7Jl\nyxZCQkI4e/YsL7zwApIkER8fD8D169dJTU1l+/bt5ObmkZDwFAe+O8TUe/+Zn/7bq5w++Be+/WwH\nI2+bjLuHHpUafjj8N5586hmW/M/LvPfee2zZ/FtGjhzJ+vXr8fDwIDExka1bt5KUlEReXh5PPPEE\nK1eu5NVXX6WmpoakpCSef/559u/fj6ura7u/be/evZhM9ivr+vj4tGurrKyktraWIUOGtGoPDg7m\n3LlzHb6H69atc+StFghsmM1myuorbKJQVFNKaW05RrNj4uDm4kaQpz8BOj98WoiCp6sOtarvewkK\nwWjBGbmQ42n5GIy9nwhX66JmWnQIEyXH/KKPHz/O+fPn+frrrxkxYgQAW7Zs4cEHH7T1iYmJYcGC\nBUyePBmA4cOH8+GHH5Kenm7rYzAY+NXqNRTV6blSFUhASDguWjfGx84DYOLdC0g79Q2eqirmxI7j\n6J89CfK5g8RnlGWeRx55hD179hAfH8+0aUoGl3nz5rFv3z7b+RMTE1m1apVt2hwfH8+KFSsoKSkh\nNLRt9no6tTnYo75eWf91c2tdOkWr1dLQcHMeJAKByWyirK7CJgzFtaWU1pVjMtt/mGmLh9adQJ0/\ngZ7+BOn8CdT54+nae8tHPYEQjBZ8n17kFLEAJT/99+lFDgtGWloaAQEBNrEAiIyMxMvLy7b90EMP\ncfDgQV577TWuXbtGRkYGWVlZDB8+nNp6A9n5VQB8l1aLSq3cdLVad7z9lTEE+XoghYSxG5h6WxBj\nRviiUqkIDw+3XcPDwwPAtvwE4O7uTmNjo6198eLFpKSkIMsymZmZXLx4EaDDWcSCBQvIzc21u2/H\njh1MmTKlVVuTUDRdswmDwWAbn0DQGUazidK6cuuyUrM4OOqdpHPVEajzI8gzgECdH4E6f3Raj34t\nDvYQgtGCCZFBTp1hTIh03C9ao9Hc8MP80ksvkZqaypIlS5g7dy7PPvssL61/mesFVbz/1zTSs8tQ\nqdWo1M1TYbVaRaCvjp/NkQj09eD69evtzuvi0v5j09EXIz09neXLlxMTE0NcXBzz58/HaDR2aIgG\n2L59O0aj/Sl+22UnAF9fX3Q6HYWFha3aCwsL7fYXDG6MZhMltVZ7Q00pRbWllNWVO1z/RO/maRUF\nqzh4KuIwGBCC0YKJUrDDT/jORpIkysrKyMrKsj3dX7lyhaoqZdZQVlbG3r172bZtG3PnzgXg8A/Z\nXLl6jeEjPVsl+nPRqBk51IeocD+O/lnHEH8dgb7d8wX46KOPCA0NZefOnba2PXv2AB2X0Rw2bFiX\nrqFSqZg4cSInTpxg8eLFgLLWfOLECZYtW3aTIxcMJCobqskqzyG7IpfcqgKHl5W83PTWZSU/gnQB\nBOj88ND2fExRX0UIRj8lNjaWcePGsWbNGtatW4fZbGbTpk2AcgPV6/Xo9XpSU1OJiori0uU83nzr\nHaorSjBZXft89W6oUBG/MBp3Vxfbsd1JSEgIOTk5HDp0iIiICE6ePMkbb7wBtF9CuhXi4+N56qmn\niI6OJjY2ll27dlFVVcXSpUttfYqKitDpdHh6enbbdQV9E7PZTH5NEVnlOWRV5FJed+OKzt7uXgTq\n/AnyVOwNgTp/3FzaO2UMZoRg9GPeeustNm7cyPLly/Hy8uIXv/gF58+fR6vVotVqSUpKYvPmzSxc\nuBBXdz3hkROZePdCstJP8ei820jVXOGPKmxi0RM89thjXL58mdWrV2MymRg9ejQbN27kxRdf5Ny5\nc4wePbpbrjNz5kw2bdrEO++8w+bNm4mOjiY5ObmVAX369On88pe/5JlnnumWawr6FrWGOrIrcskq\nz+V6ZR6GTmIevN29CPYMsBmlAz38cBXicENUA7FusSRJEcDV1NRUhg8f7uzh9AilpaWcPXuWGTNm\noNEogXJFRUVMnz6d3bt32wzDjQYTH6emU16leAt5e7qy7L5I3EU+J0E/x2KxUFRbaltqKqop6bCv\nRq1hqNcQwnyHEeYzFC83fS+OtP9w/fp17rvvPoCRsixfa7tf3DX6KRqNhsTEROLj41m6dCk1NTW8\n+eabhIeHExMTAyhfqK9PZNnEwkWjZv5dI4VYCPotjcZGrlfmk1WhiERnKTX0bp6E+QwlzGcYQ72G\n4KIRn/tbRbyD/RQfHx/effddkpKSSElJQavVEhsbS3JyMlqtEhV66lIhV3Ka125nTxnRbcZsgaA3\nsFgslNdXklWRQ1Z5LvnVhR06S6hUKobogwjzGUaY71D83H0GnFursxGC0Y+Ji4sjLi7O7r7M/EqO\nXci3bceMDSIyzK+3hiYQ3DRGs4ncynyyKnLJrsilqqG6w77uWndGeIcS5juM4d6hwkjdwwjBGIBU\nVDfw5bFM25PYsCA9d40f6uRRCQQdU91QQ1ZFLlkVOeRU5nfq9hro6W9bagryDBCziF5ECMYAw2A0\n8/mRazQ0Kl84vYeW+2PD0fRSmnGBwBHMFjMF1cXWpaYcyjpxe9VqtAzzDlGWmnyGonMVy6rOQgjG\nAMJisbDvVDbF5XUAaNQqHoiLQOfeNzJdCgY3FouF/OoiLhb9SFZFLo3GjuNwfNy9CfNVZhEh+iA0\n6t5PmS9ojxCMAcTZjGLkrDLb9syJwwkJEEFqAudiMpu4UpbFuYJLFNeU2u2jVqsVt1frUpO3u5fd\nfgLnIgRjgJBbVM2hH5oT9kWPDOD2UQFOHJFgsFNvqCetKIO0onRqG+va7fd01THCKhDDvId0a2U4\nQc8gBGMAUF1n4PMj12z5oYb467hnYtfyMQkE3UVpXTnnC2R+LLnaznitUWsYGzCS6KCxBOj8hMG6\nnyEEo59jMpn5/PBV6hqU7K4ebi7Mi4tAo+n7xVgEAweLxUJ2RS7nCi6RU5nfbr/O1YPbgyO5LXAM\n7oM4eV9/RwhGP+e773MoKK0FQK1SjNx63eD0Rf/ss894++23ycvLIyoqinXr1jF+/PgO+586dYrX\nX3+dixcv4uXlxaJFi0hMTLRbBVBgH4PJwI8lVzlXIFNRX9luf6CnP3cMiWKUX5gwXA8AhGD0Y9Ku\nlnD+SnP+nLvGhzIsaHDmyDl8+DBr165l/fr1TJkyhV27dvH444/zxRdf2K3gl5OTw7/+67+ybNky\nNm/ezPXr11mzZg1Go5EXX3zRCX9B/6K6sYYLhelcLMpo7+2kUjHSdwR3DJEYog8Sy04DCCEY/ZSC\n0lr2n24ubjR2hB8xYx0vwDTQeO+991i4cCEPP/wwAJs2beLo0aN8/PHHdos15eTkMHfuXJs4hIWF\nMX/+fI4cOdKr4+5vFFQXca5A5mpZVrsUHVqNlqig0dweLOEtkvsNSIRg9ENq6w18fvgqVZVl7Pvs\nPa5fOYeX3pPslSv56KOPeOqpp/jJT35CQ0MDW7du5csvv6SoqAi9Xs+9997Lhg0b8PDw4NNPP2X7\n9u08+uij7Nixg7KyMmbNmsXatWt57bXXSE1NxcfHh2effZYlS5YA8OijjxITE0NeXh6pqano9Xp+\n9atfMWrUKDZt2kRmZibR0dFs3rzZVtjp2LFjbNu2jQsXLmAwGBg9ejTPPfccM2fOtPv3zZ49m5yc\nHLv7PvjgA+68885WbWazmdOnT7N+/Xpbm1qtZurUqZw8edLueaZNm2arQQ5w4cIFvv76a+6//37H\n/xGDBLPFzNWybM4VXKKwurjdfm93PeOCo4gMHIWr8HQa0PS6YEiSpAH+C4gHvIB/AE/LslzQQf/Z\nwH8DtwP5wO+ALbIsd3te9rP5FzmZexajyX550J7ERePClKHjGR9yW6f9zGYLXxzNpKqmgb/832Y0\nGg2/25GMu1bFyy+/THZ2tq3v5s2bOXjwIFu2bCEkJISzZ8/ywgsvIEkS8fHxgJLOODU1le3bt5OX\nl0dCQgJHjx4lISGBp59+muTkZDZs2MDs2bPx8fEB4P333+fXv/41zz77LDt37mTTpk2MHDmS9evX\n4+HhQWJiIlu3biUpKYm8vDyeeOIJVq5cyauvvkpNTQ1JSUk8//zz7N+/3669YO/evR3W+24aQ0sq\nKyupra1tV441ODiYc+fOdfp+AkyZMoWqqiqio6NJSEi4Yf/BQoOxkYtFGVwolKlprG23P9RrCHcM\niSLMdyhqlXCyGAw4Y4bxMrACeAwoAd4B/gBMb9tRkqQxwF9RBONnwCQgBagB3u7ugZ0tuOgUsQAw\nmoycLbh4Q8E4fC6XnKJqcq6lUZhzhZQP/0js5GgAtmzZwoMPPmjrGxMTw4IFC5g8eTIAw4cP58MP\nPyQ9Pd3Wx2AwsGHDBiIiIoiMjCQqKgoPDw9WrFgBwMqVK/nkk0/IzMy0GZDHjRvHqlWrAHjkkUfY\ns2cP8fHxtif2efPmsW/fPtv5ExMTWbVqlW0tOz4+nhUrVlBSUkJoaGi7v9GezaEz6uuVFNdubm6t\n2rVaLQ0NDZ0eazabSU5OpqKigldeeYVf/OIXfPjhh4N63b28vpLzBZdIL76K0dz6+6BWqxnjH8G4\nIRKBuq79nwT9n14VDEmSXIFE4FeyLH9lbfsZcFWSpLtkWT7c5pAHgDpZljdZt69IkrQMuJ8eEIzx\nQ25z6gxj/JDOxSI9q4zv04sAKMy9irePn00sACIjI/Hyao6Qfeihhzh48CCvvfYa165dIyMjg6ys\nrHZFpZqWjgB0Ol2r/U034ZblVMPDw22vPTw82p3D3d3d1j8sLIzFixeTkpKCLMtkZmZy8eJFgA5n\nEQsWLCA3N9fuvh07dtiKQ3U2RlDEqml8HaFWq21CuHnzZpYtW8aZM2eYNGlSp8cNNCwWCzlV+ZzL\nv0R2Rfv33l3rTnTQWKKDx6LTilxOg5XenmFMQFmG2tfUIMvyNUmSrgEzgLaCUQT4S5L0c+AjIBqY\niTIr6XbGh9x2wyd8Z1FcXse3J5uXm4L89Nwo1OKll14iNTWVJUuWMHfuXFavXm2r+92ERqNBrW59\norbbbXFxaf+x6eiJPD09neXLlxMTE0NcXBzz58/HaDTaNUQ3sX37doxG+6LddtkJwNfXF51OR2Fh\nYav2wsJCu/0BMjIyKCgo4O6777a1RUZGAlBQYHd1dEBiNJvIKLnKuYJLdhMA+uv8uGOIxGj/CFyE\nW+ygp7cFo+nRta1FMxcYYaf/H4D3gN3A/wEa4GMUG8igob7RyOdHrmEwmQHw9XIjZs6d/On/f5es\nrCzb0/2VK1eoqqoCoKysjL1797Jt2zbmzp0LgNFoJDs7m6FDey/V+UcffURoaCg7d+60te3Zsweg\nw0I4w4Z1LUpdpVIxceJETpw4weLFiwFlqenEiRMsW7bM7jHffvstO3fu5MCBA7YZytmzZwEYM2ZM\nl67fH6ltrONCUToXC3+k3thm2U6lIsxnKHcMiWKo15BBvTwnaE1vC4YOMMuy3LY6ewNgL/zTF4gA\nXkOZYdwBJAG/sf4MeCwWC18dy6KiWvlSa12UMqv+3rcxbtw41qxZw7p16zCbzbbZg0qlQq/Xo9fr\nSU1NJSoqiurqan73u9+Rl5fXbummJwkJCSEnJ4dDhw4RERHByZMneeONN4D2S0i3Qnx8PE899RTR\n0dHExsaya9cuqqqqWLp0qa1PUVEROp0OT09PFi9ezM6dO1m7di0JCQnk5+fzm9/8hvnz5zN27Nhu\nG1dfo7K+ipO557hSmonZYm61z0XjghQ4inHBEj7u3k4aoaAv09uuDXWAWpKktkLlhmLIbstmwCjL\n8guyLJ+RZfkD4N+BFyVJGhSZ9U6kFZCZ3xxBe9/UMPy9FW1966238PX1Zfny5SQkJLBo0SJUKhVa\nrRatVktSUhIXLlxg4cKFJCQk4OPjw6pVqzh//nyvjf+xxx5jzpw5rF69mkWLFrF79242btyITqdz\nyIPJUWbOnMmmTZtITk5myZIlZGRkkJyc3MqAPn36dJKTkwEICgoiJSWFkpISli5dypo1a5gzZw6b\nN2/utjH1JSwWC+cLZPZe+DsZJVdbiYXezZPYEZNYPn4Jd4dNFWIh6BBVR8sCPYEkSdOAY0CYLMvZ\nLdqvAv8ry/JrbfpfAP4oy/K6Fm23A+eBSbIsn+ngOhHA1dTU1HYG3v7E1dwK/nboqm17khRsq5xX\nWlrK2bNnmTFjBhqNsrZcVFTE9OnT2b17dzvDsGDwUtlQzf6rR8mram2bGaIP4o4hUUT4DRdusQJA\ncbO/7777AEbKsnyt7f7eXpL6AagC7gF+D7abewRwwE7/60DbZEDjADNwuacG2Rcoq6rnq+NZtu0R\nQ7yIHdfsgqrRaEhMTCQ+Pp6lS5dSU1PDm2++SXh4ODExMc4YsqCPYbFYuFiUwdHrp1t5/vl5+DAj\n4k5C9IM3M4Dg5uhVwZBluUGSpHeA1yVJKgYKUTye9suyfNTqdusPlMqy3Ai8CfxVkqR1wIcoXlJb\ngXdkWW6f6WyA0Ggw8fnhazQaFLdTb09X7r8zHHWLMqs+Pj68++67JCUlkZKSglarJTY2luTkZLRa\nEW072KlurGH/1aOtM8eqVEwIiWby0DtEIkDBTdGhYEiStL0rJ5Jl+RcOdl0HaFFmGFqskd7WfXcB\n3wL3AvtkWf67JEk/sR7zAkqk93bgt10ZW3/CYrGQejKb0kolGM1Fo+aBuAjc3dr/q+Li4oiLi+vt\nIQr6MBaLBbn4CkeyT2EwNfuW+Lh7c+/IOIL1gU4cnaC/09kMYy7Q0sAxFOUGnwXkAQHAKBQPpx8c\nvaAsy0bgOetP2337AFWbtj8Bf3L0/P2dM3IRl6+X27ZnTR5OsJ/OiSMS9BdqGms5cO1Y68A7lYrx\nQ6KYMixGxFEIbpkOBUOW5Yim15Ik/QuKx9I/y7J8vEV7NPBnFJdXwS2SXVDFkfN5tu3xYwKJChfp\nFwSdY7FY+LHkKoezT7VKNe7t7sWskXHCViFohaGyksbSUjyGDUPdxeVrR20YrwAvthQLAFmW06z2\nha0o9gbBTVJZ08gXRzNtwWyhAZ7cPb73AuwE/ZNaQx3fXTtOZvn1Vu3jhkhMHRYj6mQLbDQUFVN2\n5gzVGVcAC54REYTOf6BL53BUMAKB8g72NQIi+f0tYDSZ+fzIVeobFU8WT3ctD4gyq4JOsFgsXC7N\n5FDWSRpaRGp7uem5Z2QsQ73sp0QRDD7qcnMpO/09tVlZrdpN1qSdXcFRwTgKrJMk6aAsyzbhkCQp\nGCX77LddvrIAUL74+05dp6isDgC1Wimz6ukhngwF9qkz1HMw8wRXy1rfAKKDx3Ln8IliViHAYrFQ\nm5lF2ekz1OfbqbE+YgRB98zo8nkdFYzngP1ApiRJh1CSAg5BSUleDjzU5SsLADh/uYRLmaW27Rkx\nwwgN9HTiiAR9matl2XyXeZx6Q/PTod7Nk5kRdzLcu32qeMHgwmI2U335CuWnz9BQUtJmrwr96JH4\nTZqIW9DN2bUcEgxZls9aI6xXo4jEaKAYxXaRJMtyaWfHC+yTV1zDd98352G8LcKfcaMHRcaTHuGz\nzz7j7bffJi8vj6ioKNatW2dLXW6P3bt3283em5aW1tND7TL1xgYOZZ7gcmlmq/aooDHEjpgkKt0N\ncsxGI1WyTPnp7zFYE5A2oVKr8YqMxHfSBFx9fW/pOg4H7smynAv8xy1dTWCjps7A50euYbYauYP8\nPLhn0nCRGfQmOXz4MGvXrmX9+vVMmTKFXbt28fjjj/PFF190WJApPT2d2bNntxKNvvj+Xyu7zneZ\nx6hrMavQueq4J+JORvgIx4jBjLmxkYoLaZR//wOmurpW+9QuLnjfHo1vzHhc9N1jZnZYMCRJUgMP\nA3OAUOBXQCxwSpblvvdI1ocxmcz848g1auuVwCp3VxfmxY3ERRi5b5r33nuPhQsX8vDDDwOwadMm\njh49yscff9xh7Y0ff/yR2NhYgm5yet7TNBgbOZx1kh9LrrZqjwwcRdyIybi5tC9vKxgcGGvrqDh3\njopzFzA3tk5Pr3Z1w3f8OHzG34HG3V4S8JvHoTuUJEk+wCGU6OxZKEF9XsBy4KgkSRO7dVQDnIM/\n5JJXoiTnValU3B8bjrdn17/8xcXFPPPMM0yaNInp06ezc+dO5syZw6effgpAQ0MDr776Kvfeey/j\nxo0jNjaWF198kTrrk8inn37KAw88wO7du5k1axYxMTEkJiZSUFDAc889x4QJE7jnnnv44x//aLvm\no48+yusJB4A1AAAgAElEQVSvv27bP336dD7++GNOnjzJokWLiImJ4ec//zlZLTwyjh07xiOPPMLE\niRMZN24cDz30EAcO2EsdpjB79mwkSbL7c+zYsXb9zWYzp0+ftpWIBaUI1NSpUzl58mSH18nIyGD0\n6NGOv+G9SFZ5Dp9c+FsrsfDQujN3zD3MGhknxGKQYqiqoui7Q2T+3+8pO3W6lVi4eHoSeFccESse\nwX/a1G4XC3B8hrEFCAMmAmkorrQAPwW+RClotKDbRzcAuXStlHOXi23bcXeEMmKIVydH2MdsNvPk\nk0+i0WhISUnBaDTy8ssvk53dXJVv8+bNHDx4kC1bthASEsLZs2d54YUXkCSJ+Ph4QMlOmZqayvbt\n28nLyyMhIYGjR4+SkJDA008/TXJyMhs2bGD27Nn4+PgA8P777/PrX/+aZ599lp07d7Jp0yZGjhzJ\n+vXr8fDwIDExka1bt5KUlEReXh5PPPEEK1eu5NVXX6WmpoakpCSef/559u/fj6tr+xvf3r17Oyzf\n2jSGllRWVlJbW9uuul5wcHCHKdQLCgqoqKjgwIEDbNu2jbq6OqZOncp//Md/dFilrzdoNBk4knUK\nubh1bs0xARHcFTYFdxe3Do4UDGQay8ooP/M9VXJ6u8JjWh8f/CZOwEuKRKXp2Wh+RwVjCfDvVuO3\nbUSyLFdJkvTfKFXx+j3l3/9A6fGTmI1t6zt1D3UNRq7mVDDC+v/21rviXehFRiqoXbT4T5uC7wTH\nMs0eP36c8+fP8/XXXzNihFKscMuWLTz44IO2PjExMSxYsIDJkycDMHz4cD788EPS09NtfQwGAxs2\nbCAiIoLIyEiioqLw8PBgxYoVAKxcuZJPPvmEzMxMmwF53LhxrFq1CoBHHnmEPXv2EB8fb3vCnzdv\nHvv27bOdPzExkVWrVtnsA/Hx8axYsYKSkhJCQ9t79nRkc+iIeqs/eVPlvCa0Wi0NDQ32DuHHH38E\nlHKzb7zxBmVlZWzdupX4+Hj++Mc/4t4DT2c34nplHvuvHqWmsdbW5q51Z0b4NEb62StIKRjo1BcW\nUnbqDDVXr9E6UxO4BQbiO3EC+tGjUN2grHJ34ahg6FAyy9qjHvvV8vod5d//0GNiAVBQWkvTw4Gb\nq4ZhQXpb5iyz0UD59z84LBhpaWkEBATYxAKUmtReXs2zlYceeoiDBw/y2muvce3aNTIyMsjKympX\nI6SpxCuATqdrtb/pJtyyOl54eLjttYeHR7tzuLu72/qHhYWxePFiUlJSkGWZzMxMLl68CNDhLGLB\nggXk5uba3bdjx452tT7sjREUsWoaX1umT5/OkSNHWonTmDFjmDlzJvv37+f++++3e1xPYDAZOJp9\nhotFP7ZqH+kXxvTwqXhoB8TXS+AgFouFupwcyk9/T+316+32e4SG4jd5Ih4jRvS6k4ajgnESeAr4\n3M6+nwGnu21ETsR3QkyPzTAsZgu1dc3nHTHEq1W6crWL1mGxAMX902w2d9rnpZdeIjU1lSVLljB3\n7lxWr15t141U3ebppO12W1xc2n9sOvrgpqens3z5cmJiYoiLi2P+/PkYjcYODdEA27dvx2g02t1n\nb7nI19cXnU5HYWHrZ5rCwsJOl5fazmSCg4Px8/MjLy+vgyO6n9yqAvZdPUJ1Q3PBSTcXN6aHT2W0\nf3gnRwoGGhaLhZqr1yg/fYb6wvbP557h4fhOmohHaIgTRqfgqGCsB76SJOkU8DeUudEyax6pB4Gu\nJSTpo/hOiOnSTbsr5BRVk7UvAwA/L3dufyDqls4nSRJlZWVkZWXZnu6vXLlCldUHu6ysjL1797Jt\n2zbmzp0LgNFoJDs7m6FDe88V86OPPiI0NJSdO3fa2vbs2QPQbi22iWHDhnXpGiqViokTJ3LixAkW\nL14MKDaeEydOsGzZMrvHfPDBB2zfvp1vv/3WVj8kJyeH0tLSXqnpbTAZOJ7zPRcK0lu1h/sOZ0bE\nNHRa+zMjwcDDYjJRnXGZstNnaCwra7NXhdfY0fhOnIhboPNjtBwN3DsgSdIc4FVgLcpCyn8AZ4AH\nZVlO7bkhDgxyi6ptr4cG3Xokd2xsLOPGjWPNmjWsW7cOs9lsmz2oVCr0ej16vZ7U1FSioqKorq7m\nd7/7HXl5ee2WbnqSkJAQcnJyOHToEBEREZw8eZI33ngDaL+EdCvEx8fz1FNPER0dTWxsLLt27aKq\nqoqlS5fa+hQVFaHT6fD09GTWrFm88cYbvPTSSzz55JOUl5fzyiuvMHnyZO6+++5uG5c98quL2Hf1\nCJX1zQFWri6u3B02hTH+EX0yFkTQ/ZiNRirTLlLxw1k7wXYavKIk/CZNQOvdd2qsO2wpkWX5gCzL\nd6O40w4HfGRZniLL8j+sMRqCTsgpal5yGNpNqT/eeustfH19Wb58OQkJCSxatAiVSoVWq0Wr1ZKU\nlMSFCxdYuHAhCQkJ+Pj4sGrVKs6fP98t13eExx57jDlz5rB69WoWLVrE7t272bhxIzqdrkMPppth\n5syZbNq0ieTkZJYsWUJGRgbJycmtlp2mT59OcnIyoNhWdu3aRV5eHj/96U9JSEhAkiT+93//t9vG\n1BaLxcKp3HN8dumrVmIxwmcoP719AWMDRgqxGASYGhooO3WazP/bTfHBQ63EQq3V4jdxAuGP/gvB\ns2b2KbEAUHW0LNASSZKuAEtkWW5XKEmSpGnA32RZ7jPRT9Y64VdTU1PbGXidgclkZsefz2M0KTaH\n+AXR6HW35kdfWlrK2bNnmTFjBhqrK11RURHTp09n9+7d7QzDAudzOvc8J3Oav0JajZa7wiYTGTBK\nCMUgwGKxUHVJpuTwEUxtvPc07u74jL8DnzvGoXFznuv09evXue+++wBGyrJ8re3+zkq0/hylwh5A\nBLBEkiR7C/z3AcI5vBOKyutsYuHt6XrLYgGKsToxMZH4+HiWLl1KTU0Nb775JuHh4cTE9IwdRnDz\nnC+41EoshnqHMGtkLHpXkWhyMNBYWkbR/gPUtXGocPH0xHfiBLxvi+pyMSNn0JkNYzLwa+trC7Ch\ng34W4PXuHNRAI7fVclT35HTx8fHh3XffJSkpiZSUFLRaLbGxsSQnJ9uMuIK+gVx8mcNZp2zbw7xD\neGDsLDSiZOqAx2wwUHbqNOXf/4ClhVej1ssLvymT8Yoc2+PBdt1JZ4LxIvAGioE7C1iEYuRuiQmo\nlGW5FkGH5LQweA8L6r5aU3FxccTFxXXb+QTdz5XSLPZfa05nMkQfxNwxM4VYDAJqs7Io2v9dKxuF\nSqXCd0IMflMm94sZRVs6q+ltAHIAJEkaCeQCI2RZvmJtCwQkWZYP9cZA+ytms8WWNwq6x0NK0D/I\nrsjlmyuHaIrWDND58cDYWaLA0QDHWFND8aHDVGe0Tu/iHhJC0D0zcAtwvnvszeJoHEYtcAClVGuT\nk/o04K+SJH0D/LMsyxU9ML5+T3FFHY0GJaJZ76G9qSSDgv5HflUhX2YcwGxRliF83L2ZHzlbJA0c\nwFjMZiovpFFy9BhmQ3OQrtrVjYC4O/GOvq3fOzc4KhivAyHA4y3aPgfuAd4Hfgs83a0jGyDktbBf\nhAbq+/0HRnBjimtK+fzHfZjM1gcFN08WSLNFio8BTENRMUX7D7SL0PaKHEvAXXfhohsYgZiOCsYD\nwNOyLH/T1CDLsgX4TpKkl4D/QQiGXXKKW9ovxHLUQKesroK/p3+DwaQ8YXpo3VkQOVt4Qw1QzI2N\nlB4/QfnZ87RMDqj18SHonhno+oBbf3fiqGC4oyQZtEcVcGt1/wYoFoultYdUNxq8BX2PqoZq/pb+\nDfVGxcfe1cWV+ZGz8XHvW8FXgltHyft0leLvDmGsaf6Oq9Qa/CZPxHfiBNR2cq71dxz9i44BiZIk\n/UOWZVtWOGuq818Cx3ticP2d0sp66huVt8vDzQU/LxGuMlCpbazjb+mp1FpTk7toXJg3dhYBOj8n\nj0zQ3Rgqqyj+7iA1ma3rq3sMG0bQPTNuuW52X8ZRwdgA7AMuS5L0d5RU50EoS1WhwOweGV0/J7dN\nOhBhvxiY1Bsb+Ft6KpX1yvKjWq3m/jH3METfZ5IfCLoBi8lE+dlzlJ04iblFNmWNhweBd8Whjxw7\n4L/jjiYfPCpJUhzwErAYCAAqgIPAUlmWB0R68+4mt7hlwkGxHNXTfPbZZ7z99tvk5eURFRXFunXr\nbEWf2rJt2zbeeustu/ueeeYZfvnLXzp0zUaTgc/Tv6WsTnESVKlU/NOoGQzzdl4KakH3U5+fT+G+\nAzSWlrZq946+jYC4WKem8+hNHF5kk2X5DLD0hh0FgLLGmdMDEd4C+xw+fJi1a9eyfv16pkyZwq5d\nu3j88cf54osv7FbwW7VqFT/72c9atb311lt89dVX/PSnP3XomkaziS9+3E9RTYnSoFJx78i7iPAb\nWIbOwYypoYGSI0epTLvYqt3V35+ge2Y6tTaFM+iSVcY6y5iDsgz1KnAbcEaW5Y6q8Q1aKqobqa1X\nPGXctBoCfIRLZU/y3nvvsXDhQh5++GEANm3axNGjR/n444/tFmvy9PTE07PZc+nMmTN8/PHH/O53\nv3OoprfZbObry9+RV1Vga5seNpUxARG3/scInI7FYqE6/UeKDx/BVFdna1e7uOA3dQq+4+/oVyk9\nuguHBEOSJFdgN/DPQCNKUsIdKDUxoiVJmiHL8uVOTtHyXBrgv4B4lFTp/0Bx2S3ooP9wIAm4H6gD\n9qLUF+/T6UhaLUcFeraqrtddFBcXs3HjRg4dOoROpyM+Pp6PPvqIp556ip/85Cc0NDSwdetWvvzy\nS4qKitDr9dx7771s2LABDw8PPv30U7Zv386jjz7Kjh07KCsrY9asWaxdu5bXXnuN1NRUfHx8ePbZ\nZ1myZAkAjz76KDExMeTl5ZGamoper+dXv/oVo0aNYtOmTWRmZhIdHc3mzZtthZ2OHTvGtm3buHDh\nAgaDgdGjR/Pcc88xc+ZMu3/X7NmzycnJsbvvgw8+4M4772zVZjabOX36NOvXr7e1qdVqpk6dysmT\nJ2/4PlosFl555RXmzp3b4ZhaXc9i5turh8kqbx7jtOETiQ7u+cJLgp6nsbyC4gPftSuP6hkeTuCM\n6Wi9vTo4cuDj6Azjv4C5wEPAVyiR3wD/ihLA9wpKqVZHeBlYATwGlADvAH8AprftKEmSm/V6ecDd\nKLaTFMCM4p3VrVyWi/gxrQCj0X6t6a6QU1hNTbXiXllU3sBf86o67e/iomFs9BBGS44ZSs1mM08+\n+SQajYaUlBSMRiMvv/wy2dnZtj6bN2/m4MGDbNmyhZCQEM6ePcsLL7yAJEnEx8cDSjrj1NRUtm/f\nTl5eHgkJCRw9epSEhASefvppkpOT2bBhA7Nnz8bHxweA999/n1//+tc8++yz7Ny5k02bNjFy5EjW\nr1+Ph4cHiYmJbN26laSkJPLy8njiiSdYuXIlr776KjU1NSQlJfH888+zf/9+XF3bRz7v3bu3w3rf\nTWNoSWVlJbW1te1mBsHBwQ7V3EhNTSUtLY3/+Z//uWFfi8XCwcwTXC5t9pCZEHo7E0Kjb3isoG9j\nMZkoO32GslNnsJibP38unp4Ezrgbz5GiXomjgrEceFGW5b9YZwgAyLJ8TZKkjSgzgBtinakkAr+S\nZfkra9vPgKuSJN0ly/LhNof8C8ry112yLJdZ+/8Gpb54t3MlvahbxAKgpr7Zi0LnfuO32Wg0cSW9\nyGHBOH78OOfPn+frr79mxIgRAGzZsoUHH3zQ1icmJoYFCxYwefJkAIYPH86HH35IenpzWVCDwcCG\nDRuIiIggMjKSqKgoPDw8WLFiBQArV67kk08+ITMz02ZAHjduHKtWrQLgkUceYc+ePcTHxzNt2jQA\n5s2bx759+2znT0xMZNWqVbYvW3x8PCtWrKCkpITQ0NB2f5s9m0Nn1NcrIUJubQyPWq2WhjZ1B+yR\nkpLCAw88QHh45zW0LRYLx66f4VJRhq3t9iGRTB0m0sn3d2qv51C0/wCGipYZjlT4jh+H/7SpqO08\n2AxGHBUMfyCjg33FgKORSRNQlqH2NTVYRecaMANoKxj3A181iYW1/y5gl4PX6xKjIoO6ZYbRaDRj\nsJ5DrVbh4Xbjt9nFRcOoSMfdMNPS0ggICLCJBUBkZCReXs3T5YceeoiDBw/y2muvce3aNTIyMsjK\nympXVKpp6QhAp9O12t90E25ZTrXljdXDw6PdOdzd3W39w8LCWLx4MSkpKciyTGZmJhcvKgbEjmYR\nCxYsIDc31+6+HTt2tCsOZW+MoIhV0/g6Ij8/n+PHj5OSktJpP4AzeRc4m99s/BwbMJK7RkwZ9E+d\n/RljbR0lh49Qld66trpbUBDBs2biFiRco1viqGBcQFly+tLOvnlAmoPnaboTtV2gzgVG0J5I4BtJ\nkv4TeAQl9v5TYJ0syx1Fnt80o6Ugh5/wO+NSZim5LspNZMQQLx6cOfqWz9kWjUaDuUV+fXu89NJL\npKamsmTJEubOncvq1attdb9bnketbl1ht+12W1zsRLB2dNNMT09n+fLlxMTEEBcXx/z58zEajXYN\n0U1s374dYws/95bYM0j7+vqi0+kobJPHp7Cw8IYG7NTUVIKCgmyzo45oWwApwm8E94yMFWLRT7FY\nLFSmXaTkyDHMjc2zULVWi/+d0/AZdzuqG3wPBiOOCsYrwB8kSfIH/oJy475bkqRHUGwJjzh4Hh1g\ntqZOb0kDSvqRtnijJDz8HPgpMAx4CwhGsYH0SVoG7HVn/YuWSJJEWVkZWVlZtqf7K1euUGXNvV9W\nVsbevXvZtm0bc+fOBcBoNJKdnc3QoUN7ZEz2+OijjwgNDWXnzp22tj179gDKl9Yew4YN69I1VCoV\nEydO5MSJEyxevBhQbDwnTpxg2bJlnR578uRJpk2b1qlI2iuAdN+ou1GrxA2lP9JQUqokCszPb9Wu\nHzOawLvuwkUv8n51hEOfeFmW/4giCpNQvKNUwJsoto2nZVn+2MHr1QFqSZLaCpUbUGOnvwEoBR6V\nZfmkLMt/BlYDj0qS1GeTyrf1kOoJYmNjGTduHGvWrOH8+fOcPXuWNWvWAMoNVK/Xo9frSU1NJSsr\ni7S0NJ577jny8vLaLd30JCEhIeTk5HDo0CFycnL485//zBtvvAG0X0K6FeLj4/nTn/7E7t27uXz5\nMhs2bKCqqoqlS5tDh4qKiqipaf0xS0tLIzIyssPzigJIA4uKC2lc/2RvK7HQenkxdOF8QubOEWJx\nAzoUDEmS1kiSZHsUlWX5Q1mWw1BiL6YDdwChsizv6ML1mlx42lo6h9J+mQpr20VZllsudjctf0V0\n4bq9Rk2dgfIqZYqrUasI9tf12LXeeustfH19Wb58OQkJCSxatAiVSoVWq0Wr1ZKUlMSFCxdYuHAh\nCQkJ+Pj4sGrVKs6fP99jY2rLY489xpw5c1i9ejWLFi1i9+7dbNy4EZ1O55AHk6PMnDmTTZs2kZyc\nzJIlS8jIyCA5ObmVAX369OkkJye3Oq6oqMiu5xW0L4DkLwog9VssJhNFB76jaP8BW6lUlUqF36SJ\njPjZMnQtbHCCjlF1tCwgSVINMFeW5UOSJJmAWFmWT9zKxaxuskVAgizLv7e2RQBXgThZlo+26f8b\n4AlgZNMyliRJy4APgSGyLJd0cJ0I4Gpqamo7A29P82N2GV8cVVwuhwXpWTJrTI9cp7S0lLNnzzJj\nxgw01gCioqIipk+fzu7du9sZhgVdI7+qkL+lf2OraeHj7s2iqDmipkU/xFRfT/4XX1KX0+xI4RYY\nSPB9s3EL6JpH3kDn+vXr3HfffaDcc6+13d+ZDaMCeE6SpDEoS1ALJUm6raPOsix/cKPByLLcIEnS\nO8DrkiQVoyQxfAfYb81X5YrikVUqy3Ij8C7wDPCB1X13OLAF+KAjsXA2bRMO9hQajYbExETi4+NZ\nunQpNTU1vPnmm4SHhxMTI9w8bwVRAGng0FBSSv7fP29VV1s/ehTBs+/tlzW1nU1ngvEqsBUl2aAF\nWN9JXwtwQ8Gwsg4lUvz31t//oLn40l3At8C9wD5ZlgskSZoJvAGcBqqtx73o4LV6ndyi3kk46OPj\nw7vvvktSUhIpKSlotVpiY2NJTk5GK74IN40ogDRwqLl6jYKvUjEbm31s/KdNxW/yJOHddpN0KBiy\nLG+TJOk9wA/F9vAg8P2tXtBaT+M560/bfftQZjMt29JQ4jH6PPUNRkoqFW9ftUpFSEDP2S8A4uLi\niIuL69FrDCZEAaSBgcVioezUaUqPN6+gq120DJlzH54jI5w2roFAp2611nxNtZIkrQSO9tVloL5C\nbnHzclSwvw6ti/Ck6S+IAkgDA7PBQOE331J9+YqtTevlRcj8ecJe0Q04Wg8jRZIkL0mSHgQ8seNd\nJcvyh909uP5Gb7jTCrofUQBpYGCorCL/H1/QUFxsa/MYNpSQ++eicRf2p+7A0Wy1c1GyxHrSZsnI\nigXFc2lQ0xsBe4LuRRRAGhjU5eaS/8VXrVKR+4wbR+DdcYMyDXlP4Wik92ZABn4NXEfJFitoQYPB\nRFG58mFVqVSEiBlGn0cUQBoYVFxIo/i7g83xFWo1gTOm43O7yCDc3TgqGLcBD8my/F1PDqY/k19c\nY0t1EejjjptWPNX0ZUQBpP6PxWSi+NARKloEomo8PAh5YC4edrIgC24dRwUjC8cz0g5KRP3u/oMo\ngNT/6SgYL2Te/Wi9Bm+Bo57G0exp/w38RpIkET/fATm9FLAnuDVEAaT+T0NJKdc/+UMrsdCPHsWw\nJQ8JsehhHJ1hNGWKvSpJUh7NFfeasMiyLHXryPoRBqOZwtLmt0TMMPoubQsgRQeLAkj9CRGM51wc\nFYx84E89OZD+TH5JDWar/SLA292hgkmC3ie7IrddAaS7w0QBpP5AR8F4wf80G/2okU4c2eDC0TiM\nlT09kP5MXouAvVAxu+iTmMymVjUtwnyHiQJI/QQRjNd36FAwrKnNC2VZNrZMc94Rsizbr6k5CMgp\nEgF7fZ1zBTIV9ZUAaDVaZkbcKQog9QNEMF7forMZRjYQBxxHib2wnwe9mUHpR2oymSkQ9os+TU1j\nLafzmmtvTBk2Hp2281rfAucjgvH6Hp0JxirgcovXNxKMQUlBWS1GkxIw5Kt3Q+8hMsX2NY5dP4PR\npNQI9/Pw4fagjivsCfoGIhivb9JZttqUFq/f75XR9ENa1b8IEstRfY28qkIySq7Ztu8Om9Jp/W6B\ncxHBeH0b4c5zi/RW/QtB1zFbzBzKOmnbHuUfzlCRI6rPIoLx+j5CMG4Bs9lCXknLgD0hGH2JtMIf\nKa0tA8BF7ULsiIlOHpGgI0RlvP6BEIxboKi8DoNRWWP10rni7enq5BEJmqgz1HMy96xte+LQ20XV\nvD6KCMbrPwjBuAWEO23f5UTODzQaGwHwdvdi/JAOy9ELnIQIxut/CMG4BfKE/aJPUlhTwqXiy7bt\nu0ZMRqMWbph9CRGM1z9xtICSCogHFmK/4p5FluV+UXe7uzCbLeSWCA+pvobFYuFQ5gmwpmoJ8x1G\nmO8wJ49K0BIRjNd/cXSG8VvgeeAqooASAKWV9TQ0mgDQuWvx1bs5eUQCALn4iq0gklqt5q4Rk508\nIkFL6gsLyfvb5yIYr5/iqGDEA1tlWf73HhxLv6Jt/W5hnHM+DcZGjud8b9uOCYnG2124Y/YVGkpK\nyfvL3zA1NAAiGK8/4qhgeAN/6cmB9DdyRP3uPsep3LPUG+oB8HTVMSFE3Ij6Co3lFeR+9hebWGjc\n3AiZdz8eQ2+Ypk7Qh3A05PUwcHdPDqQ/YbFY2gTsCfuFsymtLedCYbptO27EZLQa4b/fFzBWV5P3\nl7/alqHUWi2hDy4QYtEPcXSG8QrwoSRJLiji0baAErIsH+7OgfVlyqsaqGtQchO5u7rg7y0Mdc7E\nYrFwKOukrab6UO8QRvqNcPKoBADG2jpy/vwXW0CeSqMhdME83IODnTwywc3gqGB8Y/39svV3y0SE\nKuv2oLFYtYy/CBX2C6dzuTSTvKoCAFQqlSiK1EcwNTSQ95e/YqioABSbRahYhuoTGI0mXFy6fst2\nVDDu7fKZBzC5xS3tF2I5ypkYTAaOXj9j2x43RMLPw8eJIxKAEmeR99e/01BSYm1RMWTOP6ELC3Pq\nuAY7dbWNnDmWTVlJDWNuC0a6vWu51RytuLf/pkY3AGlnvxD5o5zKmbwL1DYqK6QeWncmh97h5BEJ\nzEYjeX//B/UFBba24Nmz0I8e5bxBCSgqqOLMsSwarcvp+dcrekYwACRJigI2ArMAH6AY+A74T1mW\n07p01X5MZU0j1XVKzhtXrYZAX1GIx1mU11e2qtF95/CJuLqIfF7OxGIyUfDl19Tl5NjaAqffjXeU\n5MRRDW4sFgsZlwpJv1Bgs/OpVCrGRg/p8rkcjfS+AziEYuz+M1AAhAIPAg9KkhQny/K5Tk4xYGhZ\n/yIkQIdaLdbKnYHFYuFI1inMFiWGNFgfyNgAkX/ImVjMZgq/+Zaaa9dsbQF3TsN3vJj1OQuDwcT3\nx7MpyK2wtbm5a5kcF47/TeS/c3SGsRm4BNwry7LtjilJkieQCvwX8JAjJ5IkSWPtHw94Af8AnpZl\nuaCz46zH/hXQy7I8y8FxdzstA/ZE/IXzyKrIIbvCWjdBpWJ62FRh6HYiFouFogPfUfVjhq3Nb+JE\n/CZPcuKoBjeVFXWcOpxJTXWDrc0/UM+k2DDcb7IyqKNxGDOA37YUCwDr9mvAzC5c82VgBfCY9bjh\nwB9udJAkSU8CC7pwnR4hR9gvnI7RbOJw1inb9m2BYwj0FAnrnIXFYqHkyFEq05qXB33G3Y5/7DQn\njmpwk5NVxqHUjFZiMSoyiNh7Rt20WIDjM4xaOq7p7bBLrSRJrkAi8CtZlr+ytv0MuCpJ0l0dxXJI\nkjQGJZ/VEQfH2yNU1zZSWaOkzHbRqAn2E/YLZ3A2P42qBkW43VzcmDo8xskjGtyUnTpN+fc/2La9\nIprn23sAACAASURBVCMJnDFdzPicgNlkJu1sHtcymhM7urhoGD9lOENH+N7y+R2dYRwBXpAkqVWE\nmiRJHsAalGA+R5iAsgy1r6lBluVrwDWUWUw7rEtYH6AsiznVuN7SnTYkwBONRtSG7m2qGqo5k3fB\ntj112HjcXUTiR2dR/sPZVvUsPEeOJHj2LCEWTqC+zsCR/VdaiYWnlxt33zemW8QCHJ9hvAgcR5kJ\nfAbkAyEoRm9vOrjZ22G49XdOm/ZcoKPQ3BdRZjGvA9sdvE6PINKBOJ+j2WcwmZUswQE6P6KCxjh5\nRIOXyouXKD7U/KyoGz6ckLn/hEotHqR6m5Kiak4fzaKhvrlqYcgwHyZMHYGLtvtiqh36z8qyfBG4\nCziIYtx+EVhs3Y6VZflMJ4e3RAeYZVk2tGlvANrl15AkaTLwHLBClmWnp1RvOcMQFfZ6n+uVeVwt\ny7Jt3x0+FbVK3JycQdWPGRR+2xye5R4SQsi8+0WK8l7GYrFwJb2Io/uv2MRCpVJx2/hQJseFd6tY\nQBfiMKxusz+9xevVAWpJklxkWTa2aHcDWhnUrctf/wesk2U5AydTW2+gtFLJhKpWqwgJEILRm5jN\n5laG7rEBIwnRBzlxRIOXmswsCr9Opcms6RYYSOiCeai1Itljb2I0mPjh5HXyrpfb2lzdXJh0ZxiB\nQ3omrX+HgiFJ0r8A/5BludT6ulNkWf7QgetlW3+HtngNMJT2y1R3ArcBmyVJ2mxtc0MRnGogWpbl\nLHqJlrOLIX46XIT9olc5XyhTXqf4kms1Wu4cPtHJIxqc1OXkkv+PL2wBYK5+foQuXIDGTdiRepPq\nynpOHsmk2voQC+Drr2NyXDgeup4LXu1shvF7IBbFdvH7G5zHAjgiGD8AVcA9TeeUJCkCiAAOtOl7\nHBjbpu23QDiwHMXu0WvkFbUsxyrcaXuT2sY6TuU2x4VOHnoHOlfhodbb1Bco1fIsJsWGpPXyYuiD\nC3HRif9Fb5J3vZwfTlzHaDTZ2iJGBxIdE4q6hx9kOxOMkUBei9e3jCzLDZIkvQO8LklSMVAIvAPs\nl2X5qNXt1h8olWW5Dmi1FCVJUiVQ54wlqpxiYfB2Fseun8FgUtZnff9fe2ceJsdVHfpfb7P07Psi\naSRZtq8kS7J2S7LlNcYLJgkEAnkYYwcCIRgIgYQQ/MAYx+zwEhLzBUKIjeG9BAzG+27ZsXbJkizZ\n8vWiffZVs/RMb1Xvj1vdXd2aGXWPepmZvr/v66+6bt2qPl3Tc0/dc89SXMGyep1mItv4e3tpe+Qx\njJD6O7hLSmj+o/fgLtX/C9nCNEzeONTOO7I72uZyOVm+Zi5z51dlRYYJFYaU8rht9wrgMSllb2I/\nIUQj6on/+0l+5h2ABzXD8GBFelvHNgEvoLLjbknyehlnLBCi97Sa+jkcDpr0+kXW6Bju5q3eo9H9\nTS1rcGovnKyiquU9ihGIVctrfs9NeMrLcyxZ/uAfC/LKjhP02jw1vSUFrN20gPIs5rNLdtH75yjz\n1BkKAxVb8Y8kqTCsxe4vWK/EY1tQ9TUmOvfjyXxGumnvGYnabOsqiylIs+eBZnwM02Dr8ZiP/8Kq\nFuaWN+VQovwjNDysSqsmVMsrqM7OE60G+ntH2Lv9OGOjMefShqZyVq6fh6cgab+ltDDZovejQKQo\nsgN4SAjhH6drA/BOBmSbNsTXv9DrF9nije536PX1A+ByutgwTy90Z5OQz0fr7x8hNKyeah0uF003\n3air5WUJ0zQ59k4vhw+0YRixLLMXXtTA+YvrcxIcOZl6uhv4mPX+Y8BuoDuhTxgYAO5Lv2jTBx2w\nl33GQn52t8bSTaxquoiyQq2ss4WqlveYrVqei6Ybrqe4Sc/wskE4ZPDq3lO0nuiPtnkK3Ky6pIX6\nxsy4zCbDZGsYO4AdAFYt77uklEcn6j9bCQTDdPer6bjD4aBJB+xlhd2nDuAPqQltWWEpKxqXnuUM\nTbowAgHaH3ksWi3P4XDQ8K5r8LboOunZYGTIz94dxxkcGI22VVQVs2bjArwlua33kmyk923AEiHE\ndyNtQoj1QohnhBCzunxrR+8IhrV+UVNRRFGWbYb5SM9IH4d7Yo5wG+etwe3U60bZwAiFaH/iSca6\nuqJt9VdfRel5ulpeNuhsG+Tl596KUxbzFlaz6arzc64sIEmFIYT4U+ARYmsaoCKzncDTQojrMyDb\ntECnA8kupmny8ondYCnpeRXNzK+ck2Op8gMzHKbzqWcYbY2FONVtvowycWEOpcoPTMNEHupg99aj\nBIMqvsLpdLJizVwuXjtv2iQ6TfZx+SvAv0opPxtpkFK+BlwjhPgRcBfKPXbWEb9+oW3omeat3qN0\nDatsm06Hk40ta3Tm0yxgGgadz73AyPGYN33NhkuoWL4sh1LlBwF/iFd2nqCncyjaVuwtYM3G+VRW\ne3Mo2ZkkqzDOB/56gmO/A25LjzjTi1DYoLPPF93XM4zMEggF2HkqlsdyReMSKou0r3+mMU2T7hdf\nYvhtW7W81auoWq290jLNQJ+PvduPM+oLRNvqGspYdUkLBYXTz/ydrESdwBpUUF0iK4C+tEk0jejs\n8xG23NkqywrxFunkaplkb/tBRoMqQNJb4GVV00U5lmj2Y5omvdu2M3j4jWhbxbKLqL5EV8vLNCeO\n9HJoXxuGEUvEfcGSBi5c2oDDOT1n1ckqjF8CX7OS/v0OldKjDlUP4+uo9B6zDns5Vh1/kVn6Rgc4\n1Cmj+xvmrsLj0go60/Tv2cvAgVej+7paXuYJhw0O7Wvl5NHYc7bH42Ll+hYamqf3jDpZhXEXsBil\nGP7V1u4Afgt8Nc1yTQvauvWCdzYwTZNtJ/ZGo+mbyhpYVD0/x1LNfgb2H6Bv957ovq6Wl3nGRoPs\n3nqM0/0xU3dZRTFrN86npGz6Z/xNSmFYBY8+IIRYBlyGShB4GnhZSnlg0pNnKOGwQUevjvDOBkf7\nT9I22AEon/9NeqE74wy+fpiebduj+95583S1vAxzut/H7q3H4lJ8zGmpYsWaubjcM+O+p7SqIqU8\nBBxKbBdClEoph8c5ZcbSPTBKKKxsi+UlBZRmMMd8PhMMB9l+MlYY6aL6C6nx6jxFmWTorbfp2hKr\nJlDc1ETj9e/S1fIySEfrafbtPEHYGlMcDgdLVzazYFHNjHo4SkphWGnHP4vKWltALEGgEyhBLXzP\nKptNvDlKzy4yxf6O1xkJqOl5kaeINc0rcizR7Gbk2PH4anl1dTTeeL2ulpchTNPkHdmNPNQRNbl6\nPC5Wb5xPXYaq4mWSZGcY3wY+BxwE6lGlVruB5SgFcmcmhMslrTp/VMYZHBviQMfr0f31c1ZS6NYz\nuUwx1tlJx1NPx1XLa77pRl0tL0MYYYODCYvb3tJC1l+6gNLyohxKNnWSNZy9H/i+lPJi4EfAHinl\nJaiKeMdSuM6MwDBM2vX6RcbZdnJv1KWwrqQGUavTT2SKwMDAuNXyXMW6Wl4mCPhD7Pyfo3HKorq2\nlMuuPn/GKgtIfqBvAJ6w3h8E1gNIKVuBbwEfSr9ouaPn9CgBKzy/tNhD+TTI4TLbODHQyokBq4y7\nw8Gl89fNKFvuTCLk89H+yGOEx1SMi6uoiKb33KSr5WWI4SE/W59/O67Y0dz51Wy4fOG0DMZLhWQV\nxgDK9ASqbOo8IUTEAPcm0JJuwXKJPR1IU22pHsjSTNgIs8220C1qzqO+pCaHEs1ejGCQ9seeIDik\n0k44XC6a3n0DBZUVOZZsdtLTNczW599iZDhWOmjx8iYuXjc34/W2s0Gy3+Bl4DNCiGLgLVTiwT+2\njl2CcrGdNcQXTNJPYenm1c7DDI6pAazAXcD6uStzLNHsxAyH6XjyafzdkTI2Dhqvu5aihoacyjVb\nOXG0j50vHSEYUNYJl8vJmo3zc1bsKBMkqzDuQsVfPGaVWL0X+IkQYidwD/BghuTLOqZpxntI6fWL\ntDIcGGFf22vR/bXNKyj2zFyb7nQlkh/Kd/JktK3uis2ULFiQO6FmKaZpcvjVNl7dczLqUFBY5GHj\nlYtomluZY+nSS7KBe/uFEEtQXlEAXwYGgUtRlfm+mRnxsk/f4BhjgRAAxYVuqmZA9OVMYsfJfYQM\ndX+rvZUsrb8gxxLNTvp27WbwjViqleq1a6i4SBehSjehUJj9u07S0RozspRXFrPu0gUUz8LYrWTj\nMH4E3CelfApASmmiZhazjsR0ILNlKjkdOHm6jSN9sfTZl7asw+mY+Xbd6cbp116jf+8r0f3yxYup\nWrc2hxLNTkZ9AXZvPRZX7KihqZxVG1pwu2dnEGSyS/YfAx7OpCDThbYeW/yFDthLG6PBMbYcjaWi\nWFQ9n6ay+hxKNDsZOXqM7hdfju57W1qou2KzfvBJMwN9PvZsi0/zcd6FdSxZ3jRtM82mg2QVxg5g\nM/BMBmXJOaZp0qrXL9KOaZq8eGxHNHV5kaeIjS1rcizV7GOso4OOp58hLor7umt1yo80037qNPt3\nxaf5WLZ6DvPPm/2efskqjFeALwkh3g/sBxLzRplSyk+mVbIccHo4gG9MPTEUelzUVOjF2HTwevdb\nsZgL4MoFG/B6dMBYOjkjMK+8nKZ336hTfqSRSJqPNw62R9s8BS7WbJhP7QxM8zEVklUYfwK0AcXA\nxnGOm2mTKIe0xsVflOCcxVPLbNE3OsCOkzF7+rIGQYuu0Z1WooF5fuX77youpummd+P2aqWcLoyw\nwcFXWjl5bPak+ZgKyXpJLcy0INOB9h5dvzudhIwwzx/ZRthQT73V3krWz9VlP9OJEQjQ/ujj0cA8\np9tN0406MC+dBPwh9m4/Hhe5XV1bytpN82d85HaqTPhthRBXA7tmW9ryybAH7OmCSefOrlP76fP1\nA+Byurj6vEtxO7U9PV2Y4TAdTz2Nv6cHULb0hnddS1GDdiZIF8NDfna/fDQucnvegmqWr54zKyK3\nU2Wyb/wMEOe4LYT4hBBiVq7sDI4EGBxRhdg9bid1Vd4cSzSzOXm6jUOdsTrRG+atprp4dgUx5RLT\nNOl64UV8J09F2+quuJySBbpSYbqYKM3HirWzI83HVJhsPhVnwBdCuIAfA3uA3kwKlQvs7rSNNSW4\n9PrFlEl0oW2pnMPSOh2gl076du5i6M03o/vV69ZSvnRJDiWaXZw40svBV1qjkdsul5OV61tompvf\npr5UDXCzdhS1B+zpdOZTJ9GFtthTxBULNug4gDRy+tBr9L+yL7pfvmQxVWu1m3I6MA2TNw61847s\njrYVFnlYd+kCKqu11SG/VmwmwZ6hVq9fTJ0zXGgXbtS5otLI8JGjdL8UC8wrmd9C3RWXa4WcBkKh\nMPt2nqSzLT/SfEyFrCsMy7R1N3ArUAY8CXxaStk5Qf8PonJXXQC0A/8OfFdKGU6XTCOjQQYsO6XL\n6aBeP0lMiTNdaBczr6I5hxLNLkbbO+h85lkiXuxF9fU0vOtaHM78tKenk3HTfDRXsOqSebM2zcdU\nOJvCGC++4lxjLu4EPgrcgloLuReV7fayxI5CiBuAXwJ/jSrgtAr4KeABvnGOckSxr180VJfgztMF\nrXNBudButbnQVum05Wkk0N9Px+O2wLyKChpvvEEH5qWBgT4fu7cewz8WS/OxSNSxeNnsTvMxFc6m\nMH4jhPAntD00TpsppRRn+zAhRAGqNvhnpZTPWG0fAo4KITZJKbclnPKXwINSyn+x9t+xsubeRjoV\nRreuf3GuKBfaAUC50F6jXWjTRmhkhPZHH48LzGu+6UYdmJcGxkvzsXz1HFryIM3HVJhMYdw3TtvW\nc/y8lSgz1JZIg5TymBDiGCpXVaLCuBtVrMmOAVSdoxxxxK1f6AXvlDkx0HqGC21VcX57k6QLIxCI\nq5jndHtoevcNeCr0/T0XdJqPqTGhwpBS3paBz5trbVsT2tuAeePIsNu+L4QoBz6FWvdIC6P+EL2D\nyqPH6XDQWKPXL1LBFxxly7Ed0X3tQps+ohXz7IF5111LUb0OzDsXxkvzUVJayLrLFlKq699MSrYX\nvb2AIaUMJrT7gUldaYQQXuAhVD6rv0+XQO226O76ai8evcCVNKZp8uLRHYxpF9q0owLztuA7ZQvM\nu/IKSua35FCqmc+oL8C+nSfps61b1tSVsmZj/qX5mArZvkOjgFMI4bZKvUYo5EzTUxQhRC2qHsdS\n4Fop5fGJ+qZKfP0LvX6RCq91vcnJ023R/avO26RdaNNE345dDL35VnS/ev06ypcszqFEMxvTNDlx\npI/DB9sJBWMOlvmc5mMqZFthRAoMN9neAzRzppkKACHEAuBp1NrH5VLKV9MpUKtev5gSfb4BdpyK\nudAub1zM3PKmHEo0ezh98BD9+2yBeUuXULVmdQ4lmtmMDPl5de+puOSBDocDsayRRaJOz4hTINsK\n4wAwBFwBPABRhbAAeCmxsxCiHngBCAObpJRH0ymMPximZ0CZUxwOB016hpEUISPMc0dexjCUZ0mN\nt4r1c7QLbToYPnKE7v+J+ZaUzJ9P3eW6Yt5UMA2TI2/18OZrHVEvKICSskIuXjuPav3/njJZVRhS\nSr8Q4l7ge0KIHqALFYfxopRyh+V2Ww30SSkDwL8CtcDVwKgQotG6lDlRoF8qdPSMRHPF1FYUUejR\n6xfJsPPUK/SPqmjYSBZal3ahPWdG29vpfPo54gPz/kAH5k2BodNjHNhzkoE+X7TN4XCwSNRxwdIG\nXNoENSVyscpzByrw7gFr+yTwaevYJtSM4iohxE7gfaiMursSrhEmDbJrc1TqnBho5bXOWNK7jfPW\naBfaNBDo66f9sScxDR2Ydy4YYYO3ZTdvH+7EMGIxxuWVxVy8di4VOgv1OZF1hWEtdn/BeiUe20J8\ngsOMPrbq+hepkehCO79yLkvqzs+hRLOD0PAIbY8+hhGwBea9R1fMS5WBPh8H9pxi6HQsvYfT6eSC\npfUsEvW6gmYayFs/smAoTJdtuqrXLyYn0YXWW1DMFQsu0bb1c0QF5j1OaFjNdqOBeeXlOZZs5hAO\nG7z5WidH3uyOmpgBqmpKWLF2LmV5VEI10+Stwujo9WFYP67q8iK8RXrqPxmvdck4F9orF26kSLvQ\nnhNmOEz7E0/h71XlZRwOB43X68C8VOjtHubVPafiihy5XE7EskYWnl+rc0GlmbxVGPaAPb1+MTnK\nhTbm5rmicYl2oT1HIoF5o60xb/K6K6/A26ID85IhFAzzxsEOjr3TE9deW1/KijVz8ZbqiO1MkLcK\no1XXv0iK8Vxo1825OMdSzXz6duzUgXlTpKtjiIN7TzHqC0Tb3B4XS1Y00bKwWptJM0heKoxw2KCj\nV88wkiHRhfYa7UJ7zgy8epD+ffuj++VLl+rAvCQI+EO8fqCdU8f74tobmspZtnqOLnKUBfJSYXT2\n+whbLneVpYWUFuv1i/E4PnAqzoV2U8saKrUL7ZQxTZPhN9+i5+VYUuaSBQuou/wy/VR8FtpPnebQ\nvta4mhWeAjfLVjXTPK9S378skZcKw17/olnXvxgXX3CUF4/GXGgXVM1jca12oZ0qY11d9G7bwWhb\nzHGgqKGBhmuv0YF5k+AfC3JoXyvtp07HtTfPq+SilXMoLMrLISxn5OXd1vUvJsc0TbYc3c5YSHme\neAu8XK5daKdEaHiY3h27GHrzzbh2T0UFTTderwPzJsA0TVpPDPDa/jaCgVie0sIiD8vXzKGxWc90\nc0HeKQzDMGm3r1/UaoWRyKEuyanTVmEZh4OrFm6kyK29TlLBCATof2UfAwdejZZVBeU6W37RRVSv\nX4urSLslj8eoL8DBva10dQzGtc9bWM3SFU14CvJu2Jo25N2d7x4YJRhSHj+lxR7KvPoJz06vr5+d\ndhfahsXMKW+c5AyNHdMwGDx8mL5dewiPjsYdK1mwgJpNGyiorMyRdNObiVKQF5cUsGLNXOp0Jbyc\nk3cKw+5OO6euVJtZbCgX2q1RF9rakmrtQpskpmniO36C3u07CPT3xx0rrKujdtNGiuc050i66c9E\nKcgXLKpBLG/ErQubTQvyTmG06/WLCdlx8hUGLBdat9Ots9Amib+7h55t2+OC8ADcJSXUbLiE0gsv\n0A8mE6BTkM8s8kphGIYZn3BQe0hFOT5wite7Elxoi3Q+o8kIDY/Qt2sXg2+8SSQlOYDT46Fq9Soq\nLl6B051X/2IpoVOQzzzy6tfcNziG37KNeos8VOr0AQD4Ame60IraRTmUaHpjBIP0v7Kfgf37z1zQ\nXrqUqnVrdabZSdApyGcueaUwEtOBaDOB5UJ7TLvQJoNa0H6Dvl27z1zQnj+fmo0bKKiuypF005+R\nIT+d7YOcPNrH0OBYtF2nIJ855JXC0OaoMznY+UacC+3V2oV2XHwnTtCzbQeBvvi0FIW1tdRs2oB3\n7twcSTZ9MQ2Tvt4RutoH6WwbYnho7Iw+OgX5zCKvFEanLf5ijl7wpsfXx67WWE6jixuX0KxdaOPw\n9/TSu307vpOn4tr1gvb4BINhujuG6GwbpKtjKC7ozo5OQT4zySuFUVLsYXg0SE15EdV5/kQTCod4\nPsGFdm3zihxLNX1QC9q7GXxDEreg7fZQuXollRev0FHaFiPDfqUg2gfp7R6JK2Jkx+VyUttQRkNT\nGQ3NFTqtxwwkr/5i77nsPI60naaloSzvnwq3n3yFgVEVSatdaGMYwSAD+w8wsG8/Rsj+dOygfOli\nqtevw+3N70VZ0zDp7/PR2TZIZ/sgw4NnmpoiFBV7aGgqp765nNr6Uu35NMPJK4VRVOhm6cKaXIuR\nc471n+Jwd6wWw6aWtXnvQmsaBkPyTfp27iLk88Ud87a0ULNxA4U11TmSLveEgmG6OobUekT7xKYm\ngIoqLw3N5TQ0lVFeWZz3D2ezibxSGBoYCfh48VjMhXZhVQui9rwcSpR7fCdP0btte7RUaoTCmhpq\nNm3EOy8/F7R9w346LFNTX89InAusHZfLSW19KfXN5TQ0lVOkywXMWrTCyCPCRpgtR7fjt1xoSwq8\nbF6wPm+fAP29ffRu247v5Mm4drfXS/Ul6ykTF+ZV6vFUTU31TUpB1NaX4nLnz33KZ7TCmMUYpkGP\nr5/WwXbaBjvpGO4mbFiBZg4HV523KS9daEM+n1rQfv0N4he03VSuWknlyovzZkE7FAzT3Rnzagr4\nJzM1FUeVREWVNjXlI1phzCJM06R/9DStQx20DnbQPtRFMBwct+/KxqU0lzVkWcLcEPKNEujri76G\n33wbI2S/Lw7KFwuqL1mHu2R2x+eYpolvJECX5fra1z08qamppr6UhqZyGpq1qUmjFcaMxjRNhvzD\nloLopG2ok7HgxGYEgIqici6sXcjFjUuzJGX2CI+NWUqhP24bHpv4nnjnzaVm40YKa2eHM4RpmgT8\nYUZ9AXwj6jU6EsDni7wPRl2px6OwyENDU1nUq0lnidXY0QpjhjES8NE21EnrYAdtQ50M+0cm7V9S\n4GVOeSPNZQ00lzdQWjDzn6DDfv8ZSiHQ13dGuo7JKKiupnbTBrwtLRmUNP2YpkkoGLaUQVApAV9M\nMYz6goRC4bNfyEZ5ZXF0FqFNTZrJ0ApjmjMW8tM+1BVVEJH04xNR6C5kTnkDzWWNzClvoLxw5sac\nGMFgnEKIvA+NTK4kE3G6PRRUV1mvagpqayhubp62C9pRheAL4BtWSsCuGOzFhaaCp8BNVbWX+uYy\nGprKKfYWpElyzWxHK4xpRjAcpGO4O6ogenz9MEHkLIDb5Vazh7IG5pQ3Ul1cOeMUhBEMEujvJ9g/\nQKCvD39vH8H+foJDQyldx+FyUVBlUwzW1l02vZRmOGTg81mmIpsiiMwYJotxSAa3x4W3pIBib4G1\n9eAtLcBr7bs92sykmRpaYeSYsBGma6Q3qiC6hnswzIltzE6nk8bSuugMos5bg3OaPilHMMNhwv4A\nhn8Mw+8nODgUN2MIDg5h91Y6Gw6nC09lRZxSKKiuxlNelpVZQ8QsFAwaBANhgsFw3FYdC094zF4o\naCq4XE6KS9Tg7/UWWO89USXhKXBNKwWpmT1ohZFlDNOg19dvLVJ30DHUTciY5InS4aC+pCY6g2go\nrcOdgxQepmliBoOEx/wYfj9h/xiGP0B4TCkB1ebHGEs4NuZP8EhKHofDgaeyMk4pFFRX4amoOCfF\nYJomhmGOO6AHg9aAP8mxUNCYMF9SOnA6nRRbCiCmEAqiCqGgUCsETW7IusIQQriAu4FbgTLgSeDT\nUsrOCfqvBf4JWAW0At+QUt6fHWknxjRNwkaYsbCfQCjIWNiPPxRQr7j3Afwhv7UNMBoaIxSe3ORQ\n7a2MziCaSuspcKfHxmyaJhiGetoP+DHGxmwKwNq3ZgLR9rExjEAAY2wsg4OkA09FuZolVFXiqqjC\nVVGJq7QMw3QQDhuEwwa+sMnQiEF48LRqCxkYhkk4ZET7GGEzeky1mdFj4ZBpO+/cnvLP6ds6HMpM\nVBJTBhHzkbekgMIit1YImmlJLmYYdwIfBW4BeoF7gQeByxI7CiHqgKeAXwEfA64FfiaE6JBSPp0O\nYQzTIBAOqkE9OsAHGAv5CYQDjIUC1tZ/hgJIy6BjmpR7vDQX19LkraWhqJpChxsjFMIcChEcaMMf\nDGGGQpjhMGYopI5Z+0b0WAgzFE44FrSdF7aS6Zn2j8aMbh0YcVswTQcmYJgOTFzR46YJhrWN9Iue\na13PsM5V13CA2w1uD7jU1lFUDIVFOAqKMD0FGCYYPgNj2ISTo8Ao0H7u9zdDuD0u3G4XBYVq6ylw\n4fFY2wIXbreTgkI3bo8z1m5tXS6nVgiaGUlWFYYQogD4HPBZKeUzVtuHgKNCiE1Sym0Jp3wcOA18\nTkppAG8IIVYDXwRSVhgdQ13sP/IKY75h/MExAoEAoWAADBOHYUJYjYCOsEl01DRMHGET0wSHYeAw\nVAqFQsMkNjqizo+eAw7TxDRMHNY+tv5unBQ5iyhyeih0FuB0BjHN07RxhFZsA3nCoKzaYgN8yRwA\nbAAAEWtJREFU5D2JfePOc2LiGvc8kxQHLYcDh8s1wcupts7xj02ICQTOzetnKjidTjWwjzOgR7Zu\nz5ltHqtN13DQ5CPZnmGsRJmhtkQapJTHhBDHgM1AosLYDLxkKYsIW4B7hRAOKWVKNpLnfvUQQ0dD\nGDhtg6XDeqWOA2VecOBQW9t7Jw4cDqfVx4nDQfRYGCcjDkjNOTR9OJxOHB43Tqca5HG5cI67deJ0\nua2tC7LwVOxwOHC5nDhdDlxuJy6XE5fLYW2duNxOnE77Maf1PnJepM12TkKfyPX1U75GkxrZVhiR\ntJ+tCe1twLwJ+u8bp68XqAF6UvnwQIeb8DjeOGcO9JMpAdsxHFPVNYkCqEXcM7ZO9SSbuO+0lJHV\n98x91c/hGG8//qOdTodSHE6H9T72cjgdUfOJ03Xm8ci5kcHX6Yz1iwz8cdd1OXBa/VxuV2wAtw3m\nDqceyDWa6Uq2FYYXMKSUiW4zfmC8EnheIDGvg9/aplwyb+3mNRzc9RZG2LQGSaca8CIzgOjAito6\nnTgdjuh7hzWIOp1qEI32iWwjA1702g5lqrEdUwOsC6fHjdPtwuFUg2VUOVmfHxl0I9vIwOtwEO0b\nGdSdEXkdtj6R/QmuGTlXD84ajSZZsq0wRgGnEMItpbS7ChUyvoVm1DpGQl8m6D8py6++mIuuXAGm\nqQZKa/DVaDQazdnJdsRXpPBAU0J7M2eaqSL9x+s7jFoMTxllGtGmD41Go0mVbM8wDgBDwBXAAwBC\niAXAAuClcfq/DNyWsMB9FbA1YSE8ERdAR0dHeqTWaDSaPMA2Zo4bHezIZMTqeAghvoUK2rsV6ELF\nYYxJKa+03G6rgT4pZUAI0QBI4L+A/wP8AfB94Hop5fOTfMZlwP9k8ntoNBrNLGazlPLlxMZcBO7d\nAXhQMwwPVqS3dWwT8AJqFrFFStkphLge+GeUt9Rx4JbJlIXFbpRLbjuQfSd/jUajmZm4UMsAu8c7\nmPUZhkaj0WhmJtM7zalGo9Fopg1aYWg0Go0mKbTC0Gg0Gk1SaIWh0Wg0mqTQBZSyzBTqgXwQ+DJw\nAcrr69+B70op89L7K9X7l3Duo0CplPLKTMo43ZnCb3Auyq39OlT2hd8AX5RS+rIi8DRjCvfvauBb\nwEVAB/BvqP/hGedxpGcY2edOYvVALkclWHxwvI5CiBuAX6KUxArg74EvAf+QDUGnKXeS5P2zI4T4\nJPDujEo2c7iT5H+DhcAzqPioS4EPAjcB38mGoNOUO0n+/p0PPGq9lqP+f78G/FU2BE032q02i1iB\niT2oeiD/abUtAI4ClybWAxFC/B4V1PhBW9v/Bm6TUp6XLbmnC6neP9t55wM7UUGggXyeYUzhN3gb\n8ENgoZSy39b2KSnl+iyKPi2Ywv27Hfi6lLLG1vbfQJGU8g+zJXe60DOM7DJuPRDgGCrQMJG7ga8n\ntBlAVUakm/6kev8i5oP7gW8Dr2dawBlAqvfwOuCZiLKw+v88H5WFRar3rxuoFkL8mRDCKYRYhpqV\n7Mm4pBlAr2Fkl5TqgUgp46IthRDlwKdQNtN8JNV6KqDWf0zge8BPMiTXTCLVe3gh8LwQ4hvAzah7\n+VvgDillYumBfCDV+/cg8DOUafkXqEjq/0Y9DM449Awju6RaDySKEMILPAQUo9Yy8pGU7p8QYg3w\nBeCjZ0lWmU+k+hssBz4GLAI+AHwetY6Rr8o31ftXiUqu+h1gHWrt41rUOsaMQyuM7BKtB5LQPlE9\nEACEELXAs8BqVOLF45kTcVqT9P0TQhShnujukFK+nSX5ZgKp/gaDQB/wESnlHinl71FK4yNCiJpx\n+s92Ur1/3wZCUsq/l1Luk1LeD3wR+PJMvH9aYWSXVOuBRBbUtgELgcsTzVR5Rir37xJgCfBtIcSw\nEGIY9XS32dpvyayo05ZUf4OtwOEEN+7IWtCC9Io2I0j1/m3gzPWKnajEqzPuN6gVRnax1wMBJq8H\nIoSoR2XvdQKbpJSvZkXK6Usq928XKnZlpe31O9Q/70qUzTkfSek3iCoTsFII4bG1LUNlgT6WKSGn\nManev1Mol3g7y1DOK+9kRMIMot1qs0yK9UB+DVwPXE3syQbATCZQbTaSyv0b59x/B87PZ7damFJN\nmtdQsRhfRy36/gx4Tkr55zkQP+ekeP9uRMVgfBX4FbAUFbj3WynlZ3Ig/jmhZxjZ5w6Ux8QDqNnD\nceD91rFNqGjuTUKIYuB9QCnqabnd9hrXfJUnJHX/ciPajCHpe2g9mFyOGgRfQQ16D6K89fKVVO7f\n46j/4z8GXkVFzP8E+Jvsipwe9AxDo9FoNEmhZxgajUajSQqtMDQajUaTFFphaDQajSYptMLQaDQa\nTVJohaHRaDSapNAKQzOtEUI4ZtJ1NVNH/02mPzpbrSYphBCXAJ9DpXCuRcWCPAl8U0qZ9rgQIcQc\nVIDT7aQxolgIUQH8E/AfjB+ZO6MQQmxB5Sr6gyx93j8Ai6SUHxNC3Ar8HJgnpTx1jte9DRUB/YUU\nzqkC9gFXSSmPnsvna5JDzzA0Z0UI8TlgK6oOx98BNwDfR1Ww2y2EuCADH3sVmamQtxyVU0r/9lPE\nquXwBVTK+HTzFSClZHxWjY7vAT/Xs5PsoGcYmkkRQlwK/AD4oZTyi7ZDW4QQDwP7gR8DWXnC1eSU\nbwP3Sym7ci2IjZ+g0m68F1WnQ5NBdKS3ZlKEEA+h0hy0jFcwRwhxCzAHVdQ+ZKV9vh34C+A8VJqE\nnwHfimQ8tcwoEpVS4VNAHbAX+JyUco/N1BHhPinlrUKIEtTg8D5Upk8/sB34W3tiRit/zx3AxcAA\nKpXFPwBrUakcIrxo5f9ZhCpDeimq3sgB4BtWWoeJ7ssxVCW/WlRhIT/wa+CLUkqfrd97LVkuQqUJ\n/yUq5brfOn4n8CHgv4DPolJkL5ZSDo/zmS2o1BLXoNJsfwf4Q2wmKSFEHXAXcCMqo+qw9Z3/Rkp5\nXAjxaeBfUGalI7ZrfxJlqmuWUvaN89nLgIPA+kjGZNvf6WZUjZYLUHmnviKlfNJ2bg3wLeCPUNXq\n9gJfklJutd3L+baPWyilPCaEuBL1d1sHlKAS+f0ncLe9vokQ4sfAWinlukS5NelFT8s1E2JN869D\nJZobt7qalPJ+KeU3pZQhq+lnqCfR/0YNZvejisUkFtz5IHATSrn8GdAI/EYI4QQeA+60+r0P+Ib1\n/hcoc9I9wLtQ+XiWA7+KmCSEEDehkr21ogr+3IEa0P4DlQvpk9a1Pg38lfV5j6IGpJtRg1ov8LCl\nSCbjs6hMpB9GVVD7KCq/EJYs/wv11HsIlUvoHuvzf5VwnUXW9/lT4PMTKIsS1JrLcpQyvh34OLa8\nWdY9eAKVrPJL1jXvRBXs+bHV7Vco5XZzwkd8FHhkPGVh8WHgxATp9f8N9Xd+L9AJPCqE2GTJVAQ8\nhzIvfhmVc6kfeE4IERng34tSBo8DG4F2IcRqVMLDTuu+vAd4GZUAMZK3KcJvgLUZMo1qbGiTlGYy\nalFVxJIq2CSEuAi4BfXE/z2r+RkhhA9Vl+KHUspDVrsLuE5KOWSdWwbcByyXUh4QQkRSP++znjaL\nUNXObpdS/sY69qJVtvb7lqzdqAFyj5TyAza5QBWtMYnVcnhdSvm6EKIRWIyaUTxh9d+FUnKTVkFE\nFRe6PjLACyHCwI+s+/A6SnE+KqX8qE2Wk8BDQohLI0/YqP/Dz0spd0zyWbeiSoAuk1Ietq61E7AX\nh5qDSr39WSnlNqttixDifFTVPKSU/das8WbUTARroN2IUuATcTUwUS2W/y2l/KF1rWdRabv/DqUk\nP4JSquullHusPk+gEmreA1wrpdwnhPAD3ZF7IIRYDjwF3CKlNK22Z1APIVegHkgiROpNXAW8Ncl3\n0JwjWmFoJiMya3Al2f9ya/t/E9p/iRo8r0A9bQMcjCgLi4iXTcl4F7ZmONdD1IPqQusVGeQKrAy/\nq1ELqPZzf45l4rKUh51O1OD+UyHEdahB6gkpZTLZRB9OmA08CPwI5UkWRqUCvyuhOttTQAD11L/V\n1r7/LJ+1GXgroiys73VSCLHDtn8KuEoI4bBqNFyAUoaXAgW2a/0H8EEhxCVSyp0oJd/B5LXiz2Ni\nr7Jf22QIWgrhT6yma1Czvf0J9+FRVNW5gvFS0Usp7wPuE0IUCSEuBM4HVqHGrIKEvqeFEAPkZ0Gn\nrKJNUpoJsbxQhoi3L8chhCi3nvJBpcAGNQjbiexX2Np8CX0iNukJf5NCiOuEEIdRyuX3xNYOABzW\n5ztQNQqSwnp6vRY1u7kOpdw6hRD/ZbltTkZiEaZua1tFzOPnJ6iZSOQ1ihrwmm3nhScy+dmotl3f\nTrt9RwjxYdSM8Cjw/1AmNh/qvkR4FlVf5SOWGetm4BcJVfUSqWDiMsKJf+8uYn/rGpTiDCa8voa6\nD7XjXVAIUWzVLzmNUqbfRSmEYMJ3iTBC/O9LkwG0wtCcjadQT60TmWf+GuizzB79VltDQp9IOcue\nqQphrSc8hFqHWARUSCk3A4/Yup22tnUJ55ZZymbcAUVK2Sal/CtLzlWoxeQ/wTLZTEKiG2i9te2y\nyfJ51KJt4uues1w7kR7OvK9xMgghLkOtJfwamCulrLEWw7fbT7AWjO9DrQVsQA3E/5nE51dOcCxR\nsTYSU9qngcOMfw/WMfFv4p9Qf4MPAGVSykVSyo+gFMZEMkz596VJDq0wNGfjB6hB6YzB0/LauR3Y\nKaV8m5jJ4s8Sukb2X07hcxOfdteg1hTukVIeidi1UTEhAE7LPHQAtUBq549R5paKxOsKIdYLITqF\nEOuklKaUcr+U8g6UR9C8s8h4fYKZ5f2odZIXUINkN7BASrkn8kINat9G1RtPheeA84UQK22y16IG\n/AibUP/TX4sEUwohXKgZVOL/+s9RCu6bwG4p5etMznHUTGE8rrfJVIwyE26xml5EzVDbEu7DH6Gc\nBiIKIPHvfRnwrJTyYSnliHXtNaiHgbjvYs0EvcCJs3wHzTmi1zA0kyKl3C6EuAv4mhBiCeoJthdV\nF/tvUaakm62+h4QQDwD/KITwop5sN6LWFB5IYlCyM2Bt3yeEeBw1swgB3xFC/BClPG4jFtwXWfv4\nKmpR+QGUV9VclEvn/VLKE5a3EcC7hRD9KHPHMPALy8W1AxVTshK1mD4ZC4DfCiHuRZXevBv4WcRd\nVQhxB3CvEMJAeS/VoBblK1ERyqnwC1Sk/cNWtPUQygPMvr60y9r+ixDiPpQZ63aUe7FDCFEspRwF\nkFIeEUK8hFpX+nQSn/808IkJjn3TUpwdKOeCctS9AKWYPgM8K4S4B7WecRPKw+3rNsU/AKwSQlxh\nfY9dwAeEEJ9AuWBfbH1fkzPXuS61yajJIHqGoTkrUso7Ud4pHpSp4DHgL1Gmj1UJaRluQ5lb/hy1\nsPkR1CB5a4of+yLKrfKbqBiPt1EzlfkoM9S/Wf2uRA0imy1ZH0Y9vS5GrXN8DfgpMXdaiXItvR1l\ntw+g1i4OWd/tKdSM5BNSyqiL7AT8EjVI/gYVAf1d1H3BkuUnKGV6pSXzP6NmLpullB2p3AxLzqtR\ns7gfoQbi57CZ5KSUW1CD/2aUgvoBambwPqvL5oTLPopaA0p0UhiPB4FGIcSqcY79Bcor6ncoRX5V\nZHHemvVtBnZa8jyOmpF8xvpdRfgBypT1FMos+DcoE+Q9lpwfRymhn6JKGNvHrhuAXVJKe917TQbQ\ngXsazRSwgs2elVJ+PMeiTBkhxPNAu5Tyw0n2fwwVizFt6nlbM9k24FYp5UO5lme2o01SGk2eIYT4\nKsqEdiVq4TlZvgK8IIS4S0rZftbe2eGTKLfo3+dakHxAm6Q0mvzjD1FmuM9LKfcme5KUcj/KdJSq\nh1dGEEJUo7zQbrGthWgyiDZJaTQajSYp9AxDo9FoNEmhFYZGo9FokkIrDI1Go9EkhVYYGo1Go0kK\nrTA0Go1GkxRaYWg0Go0mKf4/WiN5xooTtR0AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for gamma in gamma_array:\n", + " label = 'gamma = ' + str(gamma)\n", + " plot(frame[gamma], label=label)\n", + " \n", + "decorate(xlabel='Contacts per day (beta)',\n", + " ylabel='Fraction infected',\n", + " loc='upper left')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's often useful to separate the code that generates results from the code that plots the results, so we can run the simulations once, save the results, and then use them for different analysis, visualization, etc." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Contact number" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After running the SweepSeriess, we have a `SweepSeriesFrame` with one row for each value of `beta` and one column for each value of `gamma`." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(11, 4)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frame.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following loop shows how we can loop through the columns and rows of the `SweepSeriesFrame`. With 11 rows and 4 columns, there are 44 elements.\n", + "\n", + "One implementation note: when we select a column from a `SweepSeriesFrame` we get a `Series` object, rather than a `SweepSeries` object, but they are almost the same." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.1 0.1 0.0846929424381\n", + "0.18 0.1 0.70862278537\n", + "0.26 0.1 0.900780251778\n", + "0.34 0.1 0.956887899544\n", + "0.42 0.1 0.977045257074\n", + "0.5 0.1 0.984595862826\n", + "0.58 0.1 0.987400345318\n", + "0.66 0.1 0.988404249064\n", + "0.74 0.1 0.988743421406\n", + "0.82 0.1 0.988849515052\n", + "0.9 0.1 0.988879570517\n", + "0.1 0.3 0.00544355912239\n", + "0.18 0.3 0.0159140691448\n", + "0.26 0.3 0.0553797621068\n", + "0.34 0.3 0.267864167733\n", + "0.42 0.3 0.524562935844\n", + "0.5 0.3 0.686050483916\n", + "0.58 0.3 0.788378556339\n", + "0.66 0.3 0.85506574641\n", + "0.74 0.3 0.89947913569\n", + "0.82 0.3 0.929469302619\n", + "0.9 0.3 0.949853310327\n", + "0.1 0.5 0.00273576554115\n", + "0.18 0.5 0.00611834135832\n", + "0.26 0.5 0.0116394693217\n", + "0.34 0.5 0.0221147665242\n", + "0.42 0.5 0.0478162266689\n", + "0.5 0.5 0.132438038458\n", + "0.58 0.5 0.303264192648\n", + "0.66 0.5 0.464110227319\n", + "0.74 0.5 0.588476972528\n", + "0.82 0.5 0.682749610978\n", + "0.9 0.5 0.754595298329\n", + "0.1 0.7 0.001826769347\n", + "0.18 0.7 0.00378256160842\n", + "0.26 0.7 0.00642667221076\n", + "0.34 0.7 0.0101905519335\n", + "0.42 0.7 0.0159458265615\n", + "0.5 0.7 0.0257079250464\n", + "0.58 0.7 0.0450077531168\n", + "0.66 0.7 0.0906940688294\n", + "0.74 0.7 0.189795211656\n", + "0.82 0.7 0.318343186735\n", + "0.9 0.7 0.436999374456\n" + ] + } + ], + "source": [ + "for gamma in frame.columns:\n", + " series = frame[gamma]\n", + " for beta in series.index:\n", + " frac_infected = series[beta]\n", + " print(beta, gamma, frac_infected)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can wrap that loop in a function and plot the results. For each element of the `SweepSeriesFrame`, we have `beta`, `gamma`, and `frac_infected`, and we plot `beta/gamma` on the x-axis and `frac_infected` on the y-axis." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_sweep_frame(frame):\n", + " \"\"\"Plots the values from a parameter SweepSeries.\n", + " \n", + " For each (beta, gamma), computes the contact number,\n", + " beta/gamma\n", + " \n", + " frame: SweepFrame with one row per beta, one column per gamma\n", + " \"\"\"\n", + " for gamma in frame.columns:\n", + " series = frame[gamma]\n", + " for beta in series.index:\n", + " frac_infected = series[beta]\n", + " plot(beta/gamma, frac_infected, 'ro',\n", + " label='Simulation')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_sweep_frame(frame)\n", + "\n", + "decorate(xlabel='Contact number (beta/gamma)',\n", + " ylabel='Fraction infected',\n", + " legend=False)\n", + "\n", + "savefig('chap06-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It turns out that the ratio `beta/gamma`, called the \"contact number\" is sufficient to predict the total number of infections; we don't have to know `beta` and `gamma` separately.\n", + "\n", + "We can see that in the previous plot: when we plot the fraction infected versus the contact number, the results fall close to a curve.\n", + "\n", + "But if we didn't know about the contact number, we might have explored other possibilities, like the difference between `beta` and `gamma`, rather than their ratio." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a version of `plot_sweep_frame`, called `plot_sweep_frame_difference`, that plots the fraction infected versus the difference `beta-gamma`.\n", + "\n", + "What do the results look like, and what does that imply? " + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_sweep_frame_difference(frame):\n", + " for gamma in frame.columns:\n", + " series = frame[gamma]\n", + " for beta in series.index:\n", + " frac_infected = series[beta]\n", + " plot(beta-gamma, frac_infected, 'ro', label='simulation')" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n+7VwAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_sweep_frame_difference(frame)\n", + "decorate(xlabel='Contact number (beta - gamma)', ylabel='Fraction infected', legend=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the book we figured out the relationship between $c$ and $s_{\\infty}$ analytically. Now we can compute it for a range of values:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_inf_array = linspace(0.0001, 0.9999, 101)\n", + "#s_inf_array" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "c_array = log(s_inf_array) / (s_inf_array - 1)\n", + "#c_array" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`total_infected` is the change in $s$ from the beginning to the end." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "frac_infected = 1 - s_inf_array\n", + "frac_infected_series = Series(frac_infected, index=c_array)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot the analytic results and compare them to the simulations." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAERCAYAAABowZDXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4lOW5+PHvTBKyJxAIEAibIDcgIIKgoihqRaKggnJq\npSoq1late60LKlqt4tKjpXpqD7bF7Xe0qIgLiKKoWBUoIi7wCCh7QJYA2beZ3x/PO8lkmCQTmclM\nkvtzXblm5pl35r0zhPeeZ3d5vV6UUkqpxrijHYBSSqmWQROGUkqpkGjCUEopFRJNGEoppUKiCUMp\npVRINGEopZQKSXw0Ty4ifwXijTHTGzjmWOAJ4BhgO/AHY8yzjbxvIjASyAeqwxexUkq1anFADrDC\nGFMe+GRUEoaIuIB7gauAZxo4Lht4B3gRuAI4A3hGRHYaYxY3cIqRwMfhi1gppdqUMcCywMJmTxgi\ncgQ2SQwGtjRy+HTgAHC9McYDrBOR4cAtQEMJIx/ghRdeoGvXrocftFJKtQE7d+5k6tSp4FxDA0Wj\nhjEa2Ar8Avi/Ro4dA3zkJAufpcBTIuIyxtQ3Tb0aoGvXruTm5h5muEop1fJ5vV68Xnvrcrlwu10N\nHR60Kb/ZE4Yx5nngeQARaezwXOCLgLIdQArQEdgT7viUUrHP6/Xi8XjxOverPV7wgsfvouipufUr\n8wQpc+7XPc6/rO7zNWUe8GLf0+MsseTxBL5fwHsS+P7Oa5sUb7DjgvwOQX4vn4R4NycMyWFov+wm\nfe5R7fQOQQpQFlDm64hJauZYlAo7b5CLi++iA7779R9X5wLkHF/vBc533xPsQujFs87gXbES7759\neLKy8I44Fk/ffoceVxOPf7wA3tr7Xi/VNReqei6YgHfbdjzr1+MtKsKTlo73iL54u3Y99KIYcCH+\nyXbvhq1bobgEUlOgRw/IbtpFM+bPGcL5Kqs8fL1xb6tLGKVAYkCZ73FxM8eiVFBer5eyimpKyiop\nKauitLwq4H4VJeWVlJZVUV5ZfcjFvl7NeaHZvRvWrQPiIa6z7Tl8fzXsKGuGcwK0g6JyWPMtVHgi\nc8465wOKi2sfN8vv2AznbOR8LpcLlwuS2sUzXDo3+e1jPWFsxQ7x8tcNKML+SSsVER6Pl7KKqroJ\nYM03lCxfRWlBISWZWZQeOYCSjl0oLa86vG+9wTT3hWbr1vrLI3UxPcxzup2Ln9vlwuX2u+9y4XZR\nc3GsKfvie1yeMlx4cYNz68W1fQOuo46oeY3bhfN+9j64iHMf+n4uF7id41zY5+PcLnCOcbtc8ML7\nuKv22PMALq+9de+qwHX2ZTW/g8s5vvb9qelnOOScDcThfngWrvIdAb8juPbsx/WbGbhcDfZbNCrW\nE8Yy4LKADu5TgU8COsKVarLqag/7i8opKCxnf2E5BQfLKCgsp7CkgrKK6rrf/msu4G5wZ0JhNaz6\nBgZUH/YFNegFbutmXN6qmgtNzQVn2w+4+/ao/6IY5MJWe1zt/drjnLIPt+LyeGrP41xo3AeBwWfj\ndjvH4cLlDnKxwu8Ch9+FtL4LnMuF64O5uD3VtefzOreVLlwTLq6TDIL9Dk32+hPgCXLZ2OeGU37z\n0/8BG7JnffBz/ngAemWF/3w7twNBzpe/Aw4zWUCMJQwRaQdkAfuMMRXY4be3An8VkceBnwEXAeOj\nF6VqacrKqygoLKeg0CaE/U5iOFBc0XCTkL9Gvg0nJsSRnBRPSmKCcxtPSlI8KUkJpCTFk5xof5IS\n451vn7UX9qAXv3eeCn6hKXDDmb8K/ZcPVWcXbN95aHluLgzsEv7zAXTtANu3H1reLReSE8J/vpyc\nes7XLfznitY5I3y+mEoY2CG3H2BrEUuNMbtEZDzwZ+xoqc3AJcaY96MYo4phJWWV5O8pZue+Enbt\nLaGgsIzS8qqf9F5J7eJrLvYphfmkeCtJ9laR4q0iGXubUukhefI04uPCvMpOc19o8vJgzpxDy8dH\n8LtZc59Tf8fDFtWEYYwZG/B4KeAKKPsMGNV8UakWYcUKPG8vZO+uAnZ2ymXnUceSn57NweKKkN/C\n5XKRnpJAh/QkOmQk2tv0RDLSEklOjLft0T4fVcP2IHOZuudCuJMFNP+FZuRIe7toEezYYRPT+PG1\n5a3hnPo7HjZXa9yiVUR6Az8sWbJEJ+61Il6vl70Hytj04Uq2vbuMXa4UKl1+F+sBA4L2J8THuemQ\nnkj7msRgk0P79MTQawYrVgS/gE+fHrn//CtWNO/FTbV527Zt4/TTTwfoY4zZFPh8rDVJqbZmxQpY\nuBDy820zTF5enYtiVbWHbT8WsWnHATblH6SotBJWrQd32qHvtXUrcV060yUrha4dU+naMZVO7ZNJ\nT0k47NEhUft2qglCxRBNGCp6Ar+1b98Oc+ZQUe1lY5d+fL99P1t/LKKqOqDzt7ik5m6at5KunhJy\nvCV0PVBGp/OmEReJJiLQC7hq8zRhqOhZuLDmrgfY6k7DuNvz/etfUTW8XdCXJCbE0TMDeu3dRq6n\niDT8OrRzI9SfoJQCNGGoaMrP5wDt+Doui+/iMil2OUMpi0vrHNYhPYne3TLonZNB146pxHUvgzlf\nHfp+kRztopTShKEipIG+Ca/Xy449xazOGsymQg+HDLtITaFjRhLSO4u+3TPJTAtYHSYa/QlKKU0Y\nKgLq6ZvweL2s79KP1d/tZvf+Uujev87yF8neKqR6P3LmSDqdIg13VGt/glLNThOGCj+/vgkAL7De\nncny+avZf4xf34QzBLbXjvUM2fcDPbtm4M6boIlAqRilCUOFX76d4OYFNrnT+SyuC3vdSVBUO6ku\nPs7NgF4dGHrmALIyzohSoEqpptCEocIvJ4e9O/bwUXw3trtTa8tTU0hMiOPo/tkM7duJpET981Oq\nJdH/sSqsyiurWXHUWNbsWY3Hb5WXBK+Ho0f1Y9hZA0lqp392SrVE+j9XNV2wEVDApjc/YGlBAkWp\nmdClKxQV4S4uZkimlxF5x5My+rgoB66UOhyaMFTTBBkBVf7QwyxL6cXaDr1sWXExFBeTO3IwY845\nno6ZydGJVSkVVpowVNMEjIDa6UrmHXcfCqtrk0Kyt4qTq/Lp98N+XJmnNneESqkI0YShmsZvBNTq\nuE58Gt8FDzuhshKAI6sPcHLVDpKphvzCKAaqlAo3TRiqaXJyqNyez3vxuWyMy7Bl8fEkeqoYW7mV\nIz1+W61HciczpVSz05XaVJMUnnYmryQcUZssgC5J8POq7+smC9C1nZRqZbSGoUL2474S3tiXSumg\nYXYv6+ISjs70MHrqBLs7na7tpFSrpglDhWTrrkLe/vcPVFZ5IDsbd5fOjB2ey6A+HWsP0gShVKum\nCUM1auO2/Sz+fDPVHruubGK7OM4a3Yfu2UF2vVNKtVqaMFSDNmzbz+LPNuNx9n5PS07gnJP7kpWR\nFOXIlFLNTROGqstvFvfGzkewuOswPJ3sqrLt0xM59+S+pKcE3w1PKdW6acJQtfxmcW91pfJOQSKe\ngnUwANofkcukU/qRmpwQ5SCVUtGiw2pVLWcW9y5XMm8n9KpZPLD9th80WSiltIah/OTnc4AE3kzo\nRaXLfpdI81ZybsF6TRZKKU0YqlZ51268tSeZUpf9s0jyVnNO5SbSu2dHOTKlVCzQJikFgNfrZXG/\nk9jnSgQgzuvlrMrNZHnLdca2UgrQhKEcK77dxeZ2HWDAAEhN5XTPDrp1z4Lp03VCnlIK0CYpBWze\neZDl3+60D7KzGX7SUfQfenl0g1JKxRytYbRxRaWVvLd8S83jHl3SOX5wThQjUkrFqmavYYhIHHA/\nMA1IBxYB1xhjdtVz/GnAQ8BRwE7gaeARY4y3WQJuxbxeL+8t30JpeRVgZ3GfMaonbrerkVcqpdqi\naNQwZgKXApcAJwO5wCvBDhSRfsCbzs8Q4PfAPcDVzRFoa/fl+t1s+9FucuRyuTjjuF6kJOnwWaVU\ncM2aMESkHXA9cIcx5l1jzCrgQuBEERkd5CXjgVJjzH3GmO+NMfOAt4Azmy/q1mnfwTI+/Sq/5vFw\n6ayLCSqlGtTcNYxh2Gaopb4CY8wmYBMwJsjxu4EsEfmFiLhFZDC2VrIy4pG2Yh6Pl/dXbq1ZfTa7\nfTKjBnWJclRKqVjX3Akj17ndHlC+A+gR5PhXgGeAF4AK4CvgQ2wfiPqJvv5+Dzv3FgPgdrv42aie\nxMXp+AelVMOau9M7BfAYYyoDysuBYOtltwd6Aw8DL2H7MR7H9mPcE7kwWyFnFdqi/N181v5o6NEL\nsrM5dmAXOmYmRzs6pVQL0NwJoxRwi0i8MabKrzwRKA5y/Cygyhhzm/P4CxGJB/4qIn82xuyNcLyt\ng98qtJ/E96CiuBTWrSMryc0IGRrl4JRSLUVzt0NsdW4DB/p349BmKoDjObS/4nMgAegZ3tBaMWcV\n2m2uVNbHZdYUn7JlpTZFKaVC1txXiy+BQuAUX4GI9MY2O30U5PhtQOBX4MGAB9gYkQhbo/x8PMDH\n8bV5un/1frrv2hS1kJRSLU+9TVIi8remvJEx5lchHFMuIk8Bj4rIHuBH4CngQ2PMZ86w2yxgnzGm\nAngCeFNEZgAvAoOAPwFPGWMONiW+Ni0nh7X5Jex1226iBK+H0VU7IbdblANTSrUkDfVhjAP8Z1N3\nwzYFbQHygY7AEdgO6y+bcM4Zzvs879wuAq5xnhsNfACcCiw1xrwtIpOd19yGnen9N+CPTThfm1c5\nbjyfv/BJzePh1btJo0pXoVVKNUm9CcMY09t3X0QuwnZAn2+MWe5XPgh4HTuCKSROZ/fNzk/gc0sB\nV0DZfGB+qO+vDvVlZi9KBh6ArVtJKz7AsK5JkKer0CqlmibUUVIPALf7JwsAY8y3TnPRn7DNRyoW\nOENoyc+nrGs3vuh6AmRnQ3Y2I0f0IOGIjtGOUCnVAoWaMDoB++t5rgLQNSVihd8QWoDVuyoo37sW\nBgygfZ9cBvbOimJwSqmWLNRRUp8BM0SkvX+hiHTGLib4QZjjUj+VM4QWoIw41sQ5tYmtWxl1VFdd\niVYp9ZOFWsO4Gbskx2YR+QS7xlMX4CRszePcyISnmiy/dkHBNXEdqXDFAZBVXEC/3Pb1vUoppRoV\nUg3DGLMGux/F34AO2Al16di+i6HOAoIqFuTYuRYVuPkyrrav4tgOXq1dKKUOS8hLgxhjdgC/i2As\nKhzy8mDOHL6N60C5U7vI9FbQ7+yToxyYUqqlCzlhiIgb+DlwBnZpj+uwNY3/GGO+jUx4qslGjqTa\n42X1619CUTmkpnDMScfgHjUq2pEppVq4kBKGiGRiJ9iNAjYDvbBNUlOBJ0XkFGPMFxGLUjXJxpwj\nKTqmHQDJifEMGD8oyhEppVqDUEdJPYJd7O8YoD+1k+umAN+g+1PElC/X7665P6RfJ+J1gUGlVBiE\neiWZhN1WdQ1+y4UYYwqBh4DjIhCb+gl27i1ml9kMq1YR9/FHDP7XHDs3QymlDlOofRgp2IUCgykj\n+OZHKgq+fm8lrFsHwJHV+0nZsb12Ip8uBaKUOgyh1jBWAr+p57kLgVXhCUcdjtLyKtav3lDzeGi1\n3/5SixZFISKlVGsSag3jLuBdEfkP8Ba2Weq/nHWkJgK67GkMWLdpH9XFpQB08ZTS2VtW++SOHVGK\nSinVWoQ6ce8j7HDaMuAObKf377Ad4RONMUsiFqEKidfr5Zsf9kJqCgBHVe+re0A33ftCKXV4mjJx\n7yPgRBFJxs72PmiMKQI7R8MY44lQjKoxK1aQ/+YS9hekAV7alRRxZNyBusfo3hdKqcMU6jyM74FJ\nxpgvjTGlQKnfc6OwzVTZkQlRNWjuXJg9m7UdBkCnIyAtjSPL95KQ6gWX29Ysxo/XDm+l1GFraIvW\nX2B3xAO75/YkETk6yKGnA4nhD001asUKmD2bytIyNvTqBlVVsH8/A9kF/fvDXXdFO0KlVCvSUA1j\nBHCTc98L3F3PcV7g0XAGpUK0cCGUlPB9Ri6VbvtP2aG8kC7566CTblGilAqvhhLG7cB/Yzu4twDn\nAIHLf1Rj+zJKIhOealB+PqSkYNr3qCmS/VtwFRdrJ7dSKuwa2tO7EtgOICJ9gB1AD2PM905ZJ0CM\nMZ80R6AqiJwcSnr1ZZurc01R//3bIDVVO7mVUmEX6sS9EuAj4B2/slHAxyLynrM4oWpueXls6HIE\nng4dICGBbiV7yUh0w7XXaie3UirsQh1W+yjQFbjCr2whcArwT+CPwDVhjUw1buRINqwtgrU/QHIK\nRx6ZCROma7JQSkVEqAljPHCNMeZ9X4ExxoutYdwJPIYmjGZXVFLBjuQOMLwDbpeLvhMGQVJC4y9U\nSqmfINQmqSTsLO9gCgHdLDoKNm6rnZzXvXMaKZoslFIRFGrC+By4XkTq1EhEJA64Flge7sBU4zZu\nr00Y/XI1ZyulIivUJqm7gaXARhF5G7vUeTa2qSoHOC0i0al6lZRVkr+3GACXy0WfbhlRjkgp1dqF\nuvjgZ8AJwArgPOwcjSnAl8CJxphPIxahCuqHHQfxeu1eVjkdU7U5SikVcU1ZfPAL4IIIxqKaYNOO\n2uaoI7pr7UIpFXkhJwwAETkBu8x5DvAgMBD4whhT3258KgIqqzxs/bGo5nGfbjoNRikVeaGuVtsO\neAE4H6jALkr4v9g9MQaJyBhjzMaIRanq2PZjIVXVdjX5rIwkMtN07UelVOSFWsO4HxgHnAu8i535\nDTAdO4HvAexWrY1yRlbdD0wD0oFF2Dkeu+o5Phd4HDgTu6z6POCWtrx+1ab8gzX3e+doc5RSqnmE\nOqx2KnC7MeYNoNJXaIzZBNwLjG3COWcClwKXACcDucArwQ4UkURsgsoCTgR+DkwAHm7C+VoVr9fL\nZv+EoaOjlFLNJNSEkQVsqOe5PUBIVy2naet64A5jzLvGmFXYmsmJIjI6yEsuwvaXnG+MWWOM+QC4\nB7uOVZu090AZRaU2Zye2i6NrVmqUI1JKtRWhJoxvqL/JKQ/4NsT3GYZthlrqK3BqKZuAMUGOPxN4\n1xhT4Hf8P4wxbTZhbNlZWHO/Z5d03G5XFKNRSrUlofZhPAC8IiJZwBvYTZNOFJFfYmd6/zLE98l1\nbrcHlO8AenCo/sD7IvIH5xxe4FVghjGmvqVKWqcVK2DhQrbsToS0bOjRg57H9ox2VEqpNiTUiXuv\nYS/Yw7Gjo1zAE9i+jWuMMS+HeL4UwOPsteGvHLteVaAM7Aq5fbETBW/E9mP8LcTztQ4rVsCcOVRu\nz2eHKxmKi2HdOnrsWB/tyJRSbUi9CUNEbhWRmm3bjDEvGmN6YudenAQMAXKMMf/bhPOVAu7ANamw\ne4IXBzm+EtgHXGyMWWmMeR2bNC4WkY5NOG/LtnAhADvcKXiwTVAdPWWkvb84mlEppdqYhpqk7gE+\nAXaISDVwvDFmhTHGHMb5tjq3OX73AbpxaDMVTlmZMabar8zXX9Ib2HsYsbQc+fkAbHXV7tPdw1ME\nO3S+pFKq+TSUMA4AN4tIP2wT1AQRGVjfwcaYZ0M435fY5dBPAZ4HEJHe2Iv/R0GO/xi4UkQS/Jqx\nBmP3Et8Uwvlah5wc2L6dbW6/hOEt0n27lVLNqqGE8SDwJ+xig17grgaO9QKNJgxjTLmIPAU8KiJ7\nsKvePgV8aIz5zBl2mwXsM8ZUAH8Ffgs8KyL3YjvNHwGeNca0jdoFQF4epXP+wR637eZx4yXHUwLj\nQ5orqZRSYVFvH4YxZjaQiR295AImOveD/TRluM4M7DIjzwMfAJupXdRwNJDv3OLM/j4Zm0RWAS9i\nJ/n9pgnna/lGjmT75KmQmgq46JLejnbTL9etWJVSzarBYbXO8hslInIZ8Fk4vtUbY6qAm52fwOeW\nAq6Asm+x8zHatB2de8FwO0mv+8AuMDgnyhEppdqakOZhGGPmiki6iEwEUglSMzHGvBju4FSt7X6r\n03bPTmvgSKWUioxQV6sdh130z7aJHMqLbS5SEVBaXsXeg3aeotvlomvHlChHpJRqi0Kd6T0LMMBN\nwDbAE7GI1CHy99ROUemclUJCfFwUo1FKtVWhJoyBwLnGmI8jGYwKbsee2uaobp10sUGlVHSEuvjg\nFkJckVaFn38NI0cThlIqSkJNGA8B94iIrnbXzCqrPOwuKK15nNNRE4ZSKjpCbZKaAnQHfhCRfGp3\n3PPxGmMkrJEpWLGCH99cgqcgDVJTyDqyF0mJTdqGXSmlwibUq89OYH4kA1EBnBVq8+OyIT4Viovp\n+p9lMCRDJ+wppaIi1HkYl0U6EBXAWaF2l7t2CG2OpwQWLdKEoZSKinoThrO0+Y/GmCr/Zc7rY4zZ\nEdbI2rr8fLzATldyTVFXbwnsOFj/a5RSKoIaqmFsBU4AlmPnXngbeS+dHBBOOTkc3L6bUpf9J0r0\nVtPeWwHdcxt5oVJKRUZDCeNyYKPf/cYShgqnvDx2/f1fNQ+7eEvsFPvx46MWklKqbas3YRhj5vrd\n/2ezRKNqjRzJri2lsHIDFJfQJSsVJk7X/gulVNToGM0YtqtDDgy38yW7nHQE5OjcSaVU9IQ6cU81\ns2qPlz37ayfsde6Q3MDRSikVeZowYtS+A2VUVds1HtNT2pGSlBDliJRSbZ0mjBj1Y0HtZHqtXSil\nYoEmjBi12y9hZHfQ/S+UUtEX6gZKLmAaMIHgO+55jTFtfhvVcNqt/RdKqRgT6iipPwK/B35AN1CK\nrBUrqH57IXv2tofUNOjRg+wOg6MdlVJKhZwwpgF/MsbcEsFYlLPgYIEriep2HaC4mPS1X5G8pr3O\nv1BKRV2ofRgZwBuRDERRs+DgHldSTVEnT6ldcFAppaIs1ITxb+DESAaigPx8AHa7axNGtrcMdui6\njkqp6Au1SeoB4EURiccmj8ANlDDG/DucgbVJOTmwfTt7/FaozfaWQrdGFwtWSqmICzVhvO/cznRu\n/RcidDmPdbXaw9WrF94FC9jTMwMSSyAtjY7uMhj/82hHppRSISeMUyMahbId3v/+N8W9+1HeLgUq\nK0k8uJ/0vJHa4a2Uigmh7rj3YaQDafOcDu/d2bmQ0AmAjp5iXFu3RDMqpZSqEfJqtSIyALgXGAtk\nAnuAj4E/GGO+jUh0bYnT4b3Xf4SUtwx27IpWREopVUdIo6REZAh2571TgNeBR4BFwGnAcud5dThy\ncgDY60qsKeroKdMOb6VUzAi1hjELWAecaowp9hWKSCqwBLgfODf84bUheXkwZw77/GoYHb1lMP78\nKAallFK1Qk0YY4CL/ZMFgDGmWEQeBp4J9YQiEodNMNOAdGxN5RpjTKNtLyLyJpBmjBkb6vlajJEj\nqfZ4KZj/NRSXQGoKWRddpB3eSqmYEWrCKKH+Pb2bOqR2JnApcAmwF3gKeAU4qaEXichVwNlAq+2A\n3z9gCJ7h7QDISG1Hu+MHRTkipZSqFepM70+B20Qkyb9QRJKBW7GT+RolIu2A64E7jDHvGmNWARcC\nJ4rI6AZe1w+7AOKnIcbbIu07WFZzPysjqYEjlVKq+YVaw7gd2+n9g4gsAHYCXYGJ2HWmxoT4PsOw\nzVBLfQXGmE0issl5j0MSj9OE9Sy2H6U/0C/Ec7U4ew9owlBKxa6QahjGmLXAaGAZtnP7duA85/Hx\nxpgvQjxfrnO7PaB8B9Cjntfcjm32ejTEc7RYBf41jExNGEqp2BLyPAxjzFfAlMM8XwrgMcZUBpSX\nA4dcIUVkBHAzMNIY4xGRwzx9bNvrnzDSNWEopWJLvQlDRC4CFhlj9jn3G2SMeTGE85UCbhGJN8ZU\n+ZUnAnVGYDn9Jc8BM4wxG0J47xatutrDwaKKmscdMhIbOFoppZpfQzWM54HjsX0XzzfyPl4glISx\n1bnN8bsP0I1Dm6mOAwYCs0RkllOWiE04RcAgY0yrWTdjf1E5Hq8diJaR2o6EeF3LUSkVWxpKGH2A\nfL/74fAlUIidMf48gIj0BnoDHwUcuxw4MqDsj0AvYCq236PVKCgsr7nfPl1rF0qp2FNvwjDGbPZ7\neArwljFmb+BxItIVewF/rLGTGWPKReQp4FER2QP8iJ2H8aEx5jNn2G0WsM8YUwrUaYoSkYNAaWts\notrvlzB0hJRSKhaFOg/jH8AR9Tw3DLvBUqhmAC9gaxgfAJuBC5znRmNrNfXOyWit/EdIddAOb6VU\nDGqo0/tNwDfV2AXMF5HyIId2ATaGekKns/tm5yfwuaXOuep77fRQz9PS+DdJddAmKaVUDGqoD+N+\n4Arn/hXACmB3wDHVwH5gbvhDazu8Xi8FhbU1DO3DUErFoob6MD4DPgNw9vK+zxjzQ3MF1pYUl1VR\nWeUBILFdHMmJIU+PUUqpZhPqTO/LgIEi8oivTERGici7IqLbtx6m/f61i7REXK56W+WUUipqQt1A\n6b+AN6jt0wA70c4NLBaR8RGIrc3wHyHVPk2bo5RSsSnUUVJ3Ak8aY872FRhjvjHGnA78FbgvEsG1\nFfuL/Dq8dUitUipGhZow+gGv1fPca9SteagmOuBXw8hMaxfFSJRSqn6hJoxdwIh6nhsK7AtPOG1T\nQZF/k5TWMJRSsSnU4TgvAPc4azi9hp2hnY3dD+Ne7Gxt1VQrVuB5eyEH93aA1FTo0YPMtCHRjkop\npYIKNWHcBwzAJoYn/cpdwKvA3WGOq/VbsQLmzKGQBDyJHaC4mJS1X9NudXvdx1spFZNCShjO/hVT\nRGQwdu/tLOAAsMwY82UE42u9Fi4E4KCrts+ivbccFi3ShKGUiklNmiFmjPka+DqwXETSjDFFYYuq\nLcjPh9272X9gN2QlQXw8mQmlUK0fo1IqNoWUMJxVZK/Drlrbjtr1ntxAKrbjOzUSAbZaHg+sXcuB\nrk6fRVUVmdvXw6Cu0Y1LKaXqEWoNYxZwPfAV0Bm7c95uYAg2gcyMRHBtwYF2tXk2o6K4gSOVUiq6\nQh1WewHwmDHmaGA2sNIYcxx2g6NNTXgf5eN2w4ABHEzrYB8nJJDZoyvosiBKqRgV6oW+C7DQuf8V\nMArAGLMdeAi4MPyhtXI5OXg7d+Zgt16QkwOdOpGZlQ7dukU7MqWUCirUhLEf2/QEdhe8HiKS7jz+\nDugZ7sAGKU0zAAAgAElEQVRavbw8Somn0mX/CRK91SRSDeN1WS6lVGwKNWEsA34rIsnAeuzCg+c5\nzx2HHWKrmmLkSA5e+Es7YQ8XGRnJuKZP1yG1SqmY1ZSJex9i9/U+zdmX+28ici0wHPifSAXYmh04\nQmB4MgAZue1hZO/oBqSUUg0IdeLeahEZiB0VBXA7cBA4Ebsz34ORCa8VW7GCgwuWwYEESE0hI64f\n0DvaUSmlVL1CnYcxG5hrjHkHwBjjBf4YycBaNWdZkIPx3SHOLguS8e5C6JGsTVJKqZgVah/GFUCH\nSAbSpgRZFiSDCrssiFJKxahQE8ZnwJhIBtKm5OcDUOhKqCnK8FbAjh3RikgppRoVaqf3KuD3InIB\nsBoIXPDIa4y5KqyRtWY5OXi2b6fIL2Gkeyuhe/coBqWUUg0LNWGcD+wAkoETgjzvDVtEbUFeHkVz\n5uJxluRK9VYSj1fnYCilYlqoo6T6RDqQNmXkSAoPVsF7a6G4hPSMFDhP52AopWJbvQlDRE4Dluuy\n5ZFR2Fdgn52Dkd6jA4zsFeWIlFKqYQ11er8LDPIvEJFfiUjHyIbUNhwsqai5n56S0MCRSikVGxpK\nGHWWTRWROOyMbv0qHAaFxX4JI7VdA0cqpVRsaOqy5Lr2dpgUllTW3M9I0YShlIp9TdqiNRycmsr9\nwDQgHVgEXGOM2VXP8T/HLkVyJJAPzAEeMcZUN0vAEVLk1ySVpk1SSqkWIBobH80ELgUuAU4GcoFX\ngh0oInnAC9gkMRS4Dfg9cEdzBBopXq+Xwjp9GFrDUErFvsZqGMHmV/zkORfO3uDXA9cZY951yi4E\nfhCR0caYfwe85NfAK8aYvziPNzqLIF4G/OGnxhFtpeVVVHvsx5jYLo52CXFRjkgppRrXWA1jnoh8\nJyLfAWudsvm+Mr8fE+L5hmGboZb6Cowxm7DbvAZbeuR+4N6AMg8tfF0r//4LrV0oFT7z58/nggsu\nYNiwYRxzzDFceOGFvP322zXPiwivv/56xM5/2223MW3atJCP37BhA0uXLq15fNppp/HUU0+FP7Aw\naaiGMTdI2SeHeb5c53Z7QPkOoEfgwcaYFf6PRSQD+A2236PFqtN/kaz9F0qFw0svvcSsWbOYMWMG\nI0aMoLKyknfffZebbrqJ8vJyJk2axLJly8jIyIh2qDWuvvpqJk6cyNixYwGYN28eSUlJ0Q2qAfUm\nDGPMZRE4XwrgMcZUBpSXAw1+SiKSAszHLk9yWwRii7wVK2DhQop2lUNGX+jRg7QjdFqLakWcv3Hy\n8+1e9Xl5zbaCwUsvvcR//dd/MXny5Jqyfv36sWnTJp599lkmTZpEdnZ2s8QSKq+3bgt/VlZWlCIJ\nTXN3epcCbhEJTFSJ2G1fgxKRTsB72N39xhtjNkcuxAhx9sBg+3YKvfFQXAzr1pG2bVO0I1MqPPz+\nxvF47O2cOba8GbjdblatWkVhYWGd8t///vfMnj0bqNskddttt3H77bdz7733cuyxx3Lcccfx5JNP\nsn79ei688EKGDh3Kueeey1dffVXzXsGatBpq5nrnnXc4//zzGTp0KEcffTQXXngha9asAeDiiy9m\ny5Yt/OUvf+G0004DDm2SWrJkCZMnT+boo49m7NixzJ49m6qqKgA+//xzhgwZwnvvvcf48eMZPHgw\n5513HitXrjycj7FBzZ0wtjq3OQHl3Ti0mQoAEekN/BvoA5wc2EzVYjh7YAB1V6ld9Xk0olEq/Pz+\nxutopn1errjiCtasWcOYMWP49a9/zTPPPMPatWvJysoiNzc36GveeOMNkpKSePXVV7n00kv585//\nzDXXXMNVV13Fv/71LxISErjvvvt+Ujxr1qzhhhtuYPLkybz99ts899xzANx1110AzJ49m+7du3P5\n5Zczb968Q16/ePFifvvb35KXl8frr7/OrbfeynPPPceDD9ZucFpZWclf/vIX7r//fl5//XXS09O5\n4447Dqm5hEtzJ4wvgULgFF+BkxB6Ax8FHiwinYEPsHGONsasaZYoI8HZAwPqJoy03fnBjlaq5cmv\n52+5mfZ5ycvL48UXX+SUU05h5cqVPPzww5x33nlMmjSJ9evXB31NVlYWt956Kz179qzprJ4wYQKn\nnnoqIsLkyZPrfW1jEhISuOeee5g6dSq5ubkMHTqUKVOm8N133wHQvn174uLiSElJCdoU9be//Y28\nvDyuvPJKevfuzVlnncUNN9zA//3f/9XUorxeLzfeeCPHHnssffv25dJLL2Xz5s0UFBT8pJgb06wT\n94wx5SLyFPCoiOwBfgSeAj40xnzmDLvNAvYZYyqAJ4FOwGlAqYh0dd7KW99Ev5iVk2Or6AQkjC7a\nh6FaCb+/8Tq6dWu2EIYPH87w4cOprq7mm2++4f333+f555/nyiuvZPHixYcc37NnT1wuu4BFSkpK\nTZlPUlISFRUVh7wuFAMHDiQ9PZ2nn36aDRs2sHnzZtauXYvH4wnp9evXr+e8886rUzZy5Eiqqqr4\n/vvva8r69KldTDw9PR2wNY9IiMbEvRnYyXjPY2sPm4ELnOdGY2dzjxaRZGAykAYsd8p9P0Gbr2Ja\nXh5gxwSXuGrzdOr4n0UpIKXCzPkbP0Qz7POSn5/PzJkz2b17NwBxcXEMHTqUG264gccff5z8/HyM\nOXT0f3z8od+ZfQkkFL7+hGA+/fRT8vLyWLt2LUOGDOGmm27izjvvDPm9g42Wqq62C1z4x92u3aFD\n8yPVJNXsS4MYY6qAm52fwOeWUne9qtYzo80ZKVLy9mI8e92QmkJyn57EHzcqyoEpFSa+0VCLFtlm\nqG7dbLJohlFSiYmJzJs3j169enHZZXUHeGZkZOByuejY8fBr8wkJCRQV1e74sHlz/eNv5s6dy4kn\nnsjjjz9eU/bJJ3ZmgtfrxeVyNZic+vbty6pVq/jlL39ZU/af//yHhIQEevbsybfffns4v8pP0uwJ\no00bOZLivkfBEtuGmdY+OcoBKRVmI0dGZSOwrKwsrrjiCh577DGKiooYN24cSUlJfPfddzz++ONM\nmjSJbmFoGhs2bBgvv/wyI0aMoLq6mgcffDDoN3yArl27snTpUlavXk3Hjh1ZunQpc+fa6W0VFRUk\nJiaSmprKpk2b2LVrF126dKnz+t/85jf86le/YuDAgZxxxhmsXbuWP//5z0yZMqWm6am5acJoZjpp\nT6nIuPHGG+nVqxcvv/wy//znPykvL6dnz55MmjSpSbOvGzJz5kxmzpzJlClT6Ny5M9dffz27dgXv\nTr3uuuv48ccfueKKK4iLi0NEeOihh7jxxhv56quvOPbYY5k2bRr3338/y5Yt49NPP63z+jFjxjBr\n1iyefvppnnjiCTp37swll1zCVVddFZbf5adwRaqtK5qckVc/LFmypN7hdNGyZsNuPvrCdsEMPqIj\nY0ccMsFdKaWiYtu2bZx++ukAfZxlm+qIRqd3m1bkt45UqtYwlFItiCaMZlZcqglDKdUyaR9Gc/Bb\nX6c4awh0PxKyszVhKKVaFE0YkeZbX8dRdLAECtcBkJYs0YpKKaWaTJukIi1gfZ1inFrF1q1aw1BK\ntSiaMCLNb32dCtxUuuxHHl9cRKLutKeUakE0YURaTu3CvMV+S4KkpCU1aQkCpZSKNk0Ykea3vk5N\ncxSQOqBfNKJRSqmfTDu9I81vfZ3incWQmmp32ut/RHTjUkqpJtIaRnMYORLuuovi626C4cMhO5uU\nJO3wVioSdu/ezVFHHcVZZ50V9vd+9dVXGTRoUFjeq6Gd+mKV1jCaUUmZ36Q9TRhKRcSCBQvIzc1l\n48aNrFy5kmOPPTbaIQW1bNkyMjIyoh1Gk2jCiCS/CXvk5FDc/2SIaw9ASrJ+9EpFwvz58znrrLNY\nunQpL730UswmjOzs7GiH0GTaJBUpvgl727fDrl2wYAElz74IH38Mu3drDUOpCPjqq6/47rvvGD16\nNOPGjeOdd97hwIEDNc+LCPPmzWPq1KkMGTKEsWPH8tJLL9U8X15ezoMPPsipp57K4MGDOf7447n9\n9tspLS095FwPPPAAZ599dp2yLVu2ICKsXbuWPXv2cO211zJq1CiGDRvGtGnTWLt2bZ1YfE1S33//\nPZdffjnDhw9nxIgRXH311Wzbti3cH89h04QRKb4Je7t3w9q1UFxMcXwS7NkD69aRYr6JbnxKtUKv\nvfYanTp1YsSIEeTl5VFeXs78+fPrHPPoo48ydepU3n77bc444wxmzpzJdmdr2VmzZvHBBx/wyCOP\nsGjRIu6++27eeuutOknFZ9KkSWzYsKHORkYLFixgwIABDBw4kHvvvZeqqir+3//7f7z66qukpqby\n29/+Nmjct9xyC926deO1117jhRdeoKCggDvuuCOMn0x4aLtIpPgm7G3ZUlNUEp8Ezl67qUvfg5OP\nj0ZkSjXqC/Mjy7/dSWVVaPtPh1NCvJtRg7pyjHRu0usqKip46623OOuss3C73fTu3ZujjjqKl19+\nmUsvvbTmuPPPP7+mQ/y6667j2WefZc2aNXTv3p2jjz6as88+mxEjRgCQm5vLiy++yHfffXfI+QYN\nGoSIsGDBgpqO8AULFnDRRRcBdjc+ESE3N5fExETuu+8+NmzYgMfjwe2u+1198+bNnHjiiXTv3p34\n+HgeeeQR9uzZ06TfvzloDSNSfBP2SkoAqHTFUREXDwkJuPGSmN/ytiVXbcfq73ZHJVkAVFZ5WP3d\n7ia/7v3332f//v2M99tDPC8vjw0bNrBy5cqast69e9fc9+1cV+l8kTv33HMpLS3l4Ycf5uqrr2bc\nuHGsXLkSjyf4ZzF58mTefPNNPB4PX3zxBdu3b2fixIkAXH311SxevJhRo0Yxffp03nrrLfr3739I\nsgC4/vrr+fvf/85xxx3HNddcw6effkr//v2b/BlEmiaMSPFN2EtJAaAkPtE+Tk0lxVuFKwzbRSoV\nKcP6Z5MQH53LQ0K8m2H9m94h/NprrwFw2WWXMWjQIAYNGsSf/vQnAF5++eWa44JtqerbSO7OO+/k\nlltuwev1Mm7cOJ588klGNrDl7MSJEykoKODzzz9nwYIFnHzyyTV7h48fP56PP/6Y+++/n+zsbJ56\n6ikmTJgQtOZwySWX8OGHH3LbbbfRrl07HnzwQc4//3wqKioOOTaatEkqUnx/ZC4XfPQRpZlZ0L49\nJCeT4ikFv29BSsWaY6Rzk5uEomn37t0sW7aMiy66iF/84hd1nps1axbvvPMOd955Z4PvUVBQwLx5\n85g9ezbjxo0DoKqqiq1bt9a7H3jHjh05+eSTWbx4MUuWLGHGjBk1r3vsscc455xzmDhxIhMnTmTv\n3r2MHj2a5cuX15kjUlBQwF/+8heuvPJKpkyZwpQpU1izZg1Tpkxh3bp1DB069HA+mrDShBFuAUNp\nueIKuOIKit9cCgXJkJpCyuAhtQlFKXXYFixYgMfjYfr06XTv3r3Oc9OnT2fZsmWNTpJLS0sjLS2N\nJUuWMGDAAIqKinj66afJz89v8Jv+5MmTueWWW0hKSmLs2LEAxMfH880337By5UpmzJhBVlYWb7zx\nBgkJCRx11FF1Xp+ZmclHH33E1q1buemmm0hOTubVV18lIyODPn36/LQPJEK0SSqc/IfSejz21tkL\no+SSy2DMSTB8OCnSN8qBKtW6zJ8/n7Fjxx6SLABOOOEEBgwYUKdZKpiEhAQef/xxvvnmGyZMmMDV\nV19NZmYml19+OV9//XW9rxs7dixJSUlMmDChTnPXY489Rm5uLldddRVnnXUW7733Hk8++SS9evWq\n83q3283TTz8NwMUXX8w555zDhg0beOaZZ2r6WGKFy9d215qISG/ghyVLlpCbm9t8J540CT7/HEpL\nITkZ+vcHEcjNZfnkK1n+7U4Ajh3YheMH5zTyZkqplqCgoIAxY8bw0ksvHVJ7aGm2bdvG6aefDtDH\nGLMp8HltkgqXuXNh6dLax6Wl8OWX9r7bXWdZkJQk/diVaukKCgpYvnw58+fPZ/DgwS0+WYRCm6TC\nZe5ciA+SCNavh27dKC6rqilKSdRZ3kq1dFVVVdx5551s3ryZBx54INrhNAv9qhsuu3ZBWhrs31+3\nvKQExo+ntNAvYWgNQ6kWLzs7u878jrZAr1yHw39ElDNBj/btoagIqqpsjaN3bxg5kpK3a5cPSNaE\noZRqgfTK9VPNnQuzZ9tEkZICWVnw/fc2YXTqVHvctdcCUFpeW8NITtSPXSnV8uiVqynmzrU/mzbZ\nRQXT0yEzE4qL7fNHHAEFBeB2Q9eucMklcOmlVFZV1yyzEOd2kZgQF73fQSmlfqJmTxgiEgfcD0wD\n0oFFwDXGmF31HH8s8ARwDLAd+IMx5tlmCdY3r2LVKrvK7P79tU1OFRWwd689LjPT3rrdcOaZ8D//\nU+dtSsrq1i5cLlezhK+UUuEUjRrGTOBS4BJgL/AU8ApwUuCBIpINvAO8CFwBnAE8IyI7jTGLwxaR\nLzF8/DEcOGATgIhNEDvt3Al+/NH2S1Q5F3+3207O8x0PtqYRZAkB/+Yo3ZpVKdVSNWvCEJF2wPXA\ndcaYd52yC4EfRGS0MebfAS+ZDhwArjfGeIB1IjIcuAVoesLwdVJ/+aVtOvJ6obAQduywfRHV1baj\nuqSkdnny9u0hKak2UVRV2WQRH29rGVW1yYDU1KBrRGn/hVKqNWjueRjDsM1QS30FzmzCTcCYIMeP\nAT5ykoXPUuBEEWlau46vFrF6NXz7re2gXr0aNm60yaO0tG4CKCuzP0VF9rFvjoXHU5sw2rWDxES7\nwGBamu3gDrJGlCYMpVRr0NxXL986HYGbQewAetRz/BdBjk0BOgKh7zDi2wHPt6GRr6O6rMwmgepq\niIurHQ7r40sgmZm2z8LttjWOtDSbTAYPhtNOszWLehYU9O/D0DkYSqmWqrmvXimAxxhTGVBeDiTV\nc3xZkGOp5/j6+ZqYfPMl/JuS3G6bMMAmD6itOfiSh6+forLSjo7q06dmFFRjPH7rdaUmax+GUqpl\nau6EUQq4RSTeGON3xSYRKK7n+MSAMt/jYMfXLyfHrh6bkmJrF/HxNmn4+id8icK3G1aHDnbSXYcO\n4NuM/ZRT7HLlTVya/Mjc9ny3uYD4eDfSs0OTXquUUrGiuRPGVuc2x+8+QDcObabyHR+4rGs3oAjb\nGR66vDzbh9GzJ6xdazuoDxywndo++/fbRNK5M4wZ85OSQzAdMpKYOn6ADqdVSrVozZ0wvgQKgVOA\n56FmKfLewEdBjl8GXCYiLmOMr13nVOCTgI7wxvku/IsW2aam/ftrO7Dbt4dhwxrshzhcmiyUUi1d\nsyYMY0y5iDwFPCoie4AfsfMwPjTGfOYMu80C9hljKoBngFuBv4rI48DPgIuAxvY3jQPY6ZtD4ZOT\nA5dd1vArfc1PSinVxvhdM4MuRxGNITszgARsDSMBZ6a389xo4ANsLWKpMWaXiIwH/owdLbUZuMQY\n834j58gBmDp1avijV0qp1i8H2BhY2Fp33EsERgL5QHWUw1FKqZYiDpssVhhjygOfbJUJQymlVPjp\njntKKaVCoglDKaVUSDRhKKWUCokmDKWUUiFplSvhNXWTprZERLoADwPjgGTgc+BmY8zXUQ0sxojI\n8diJoz8zxiyNcjgxQUSmY+dF9QC+BX4XwhD3Vk9EUoGHgPOx6999iv0/9W1UA4uA1lrDmEntJk0n\nY1e9fSWaAcUCEXEDrwH9gXOx814OAEtEpGM0Y4slzgXgOeqZvNQWicilwJPYC+MQ4ENggbNSQ1v3\nBHZS8RTgBOyCqYtEpGkLpLYArS5h+G3SdIcx5l1jzCrgQuweGqOjG13UHY39g77cGLPc+QZ0MZAG\nnB3VyGLLnwCd8u9w9p65F5hljPm7MWYDdhOzDdgvHW3decBTxphPjDFrgTuxtbBB0Q0r/Fpjk1TQ\nTZpEZBN2Q6bAXf3aki3ABMD4lfnW5NJldAEROQubPPOANVEOJ1YI0At4yVfgrOU2LGoRxZbdwM9F\n5CVgP3Y76QLg+6hGFQGtMWE0dZOmNsMYsxd4K6D4OmxfRvj2SG+hRKQTdv2yy7D/4ZXV37ltLyLv\nA4OBdcBtQbZVbot+hV3qaBd2ZYkSYJwxZn9Uo4qAVtckRdM3aWqzROQc4EHgT05Vuq17GlhgjFkU\n7UBiTIZzOxeYg13882vgfREZGLWoYkc/YCe2Znoi8A4wT0RyG3xVC9QaE0bNJk0B5fVt0tQmicg0\n7ECAl7AjX9o0p1P3GODmaMcSg3xfvh4wxrzo9AteA6wHfhO9sKJPRPoA/wtcb4x52xjzOXZF7TLg\nxqgGFwGtMWH4b9Lkr75NmtocEbkT+AfwV+zqv03bW6R1moZtztwpIkXU9vMsFJG/Ri2q2OD7f/OV\nr8DZn2Yt0CcqEcWOY7Gj6Vb6CpzWjS+wNY9WpTX2YTR1k6Y2RURuxc5RudsY84doxxNDfonty/Hp\nCnwMTAfejUpEsWMVtnY+EufC6IycGgS8F8W4YoFvNN1Q7Ofk/9ksjFZQkdIqV6sVkYew3xinUbtJ\nU5kxZmz0ooo+EfH9Uc/FDv3zV2iM0SY7h9P+vBU4VSfugYj8AdsMNR1b07ga+DUwzBhjGnpta+ZM\nEl4GpGI/kz3ADcBUYLAxZnMUwwu71tgkBXaTphewNYwPsBsvXRDViGLDhdjq8+XYvUL8f1pde6sK\nq7uBR4DHsQnjBOxIoDabLACMMdXAROyKCf8HfIZtihrT2pIFtNIahlJKqfBrrTUMpZRSYaYJQyml\nVEg0YSillAqJJgyllFIh0YShlFIqJJowVKvmTKJqMe+rVCxrjTO9VQwSkeOw+5SMATphl5tYBDxo\njAn7ki0i0h27mOC1wKYwvm8mdsOcvxPDKweIiBe4yxhzfzOfNws7OfRnzr4ZjR1/N9DVGHN1xINT\nh01rGCriROR64BPsnhu3YveaeAy7uucKETkyAqc9lchsCjUEu5uj/t8JbjbwcijJwvEIMEFETo9g\nTCpMtIahIkpETsTuYPffxphb/J5aKiILgNXA/2C3uFQtmIiMxG5T2i3U1xhjSkXkv7F/I0dHKjYV\nHjrTW0WUiMzHbuPZ0xhTFuT5S4DuwCPGmCpnWfprgSuBI7DLljwDPOQsw4CILMWuJrsZu7x2NvAf\n7BLTK52l2//hd5q5xphpzl7ddwOTgZ7YPVI+BX5njKnZXc/ZdW8G9gK2H7sM/B3YlUk/8HvfD4Ot\nT+YsdvkDcD52UcNxQAUwD7jBGFPiHHdIs5GIzARmGGPi/X7Xb7Frov0au53um87ncw3wW6fsPeBX\nziZZvvd+DLsC70Ts3u3/AGb67xUjIldil4Xpi91k7GnsVqxe5/l/YhPAJuAXwEbgGN/zAb/3PCDZ\nGHO2X5kLu7bSVdhd+7YCs40xs/2OycEu4neOMSZwgy8VQ7RarSLGuVicCSwJliwAjDHPGmMeNMZU\nOUXPALOAl4FzgGeBe4C/Bbz059jtZq/FXsi6YjetcWN3FZzpHDcZ8K3K+xy2OemP2Iv4Tdgmphd9\nndgiMgF7Qd6O/bY8A3vR/zu2bf4q572uwS4215A52G06z8U2vUwHbm/kNcH8Ept0L8EmvJ8DK5zf\nwfee5/r9zj43AAnYddSewjYHPuF7UkRuxyaIRdikMge4D3g04H1OxW4XcC42mQVLFmnYf69XAp56\nGPu7v+qc4wXgCRGp+eyMMfnYrZMvauRzUFGmTVIqkjphdzkMaRE2ETkKe1H8nTHGd9F6V0RKgFki\n8t/GmK+d8jjgTGNMofPadOwqvEOMMV+KyEbnuC+cPd2TsLsxXmuMmec896GIZGC/iXfC7s08E1hp\njJniFxfALYAX+20f4FtjjO9+fd7wa4ZbIiJnYJPcXaF8Hn5cwPnO77pYRC7Dfls/zhhzwIkxD7sg\noL+vgQucC/xC56J+s4jcg63x3AU8aYy5yTl+sbMXyGMi8oQxZotTHo+tveQ3EOMYbHJa7isQkfbY\npPXfxpg7nOL3nJWAT8EmMZ+V2ESoYpgmDBVJvlpDXIjHn+zc/r+A8hewtY5TsBdBgK98ycLh25cg\nNdgbOzWc8VAzgqq/8zPBOaSdiCQDwwlY+t0Y8w+cJi4neYTqk4DH26jdc74pvg34XXdhl+s/4Fe2\nFwjcLnVeQG3gdeD3wHHYf5tkYEHA7pRvYFekPQ34p+98jSQLsM2HYJvifI7HXmNe9T/QGHNlkNdv\nAnJEpJ0xpqKRc6ko0YShIsYYUyAihdhvw0E53/AxxhwEspziXQGH+R5n+pWVBBzj2zWw3mZWETkT\nezEcgN1k60ugyHna5Zzfhe0vCIdgMf6UZuDCIGWh7F0S+Dn6fi//z3FxPa/177guqucYf7739P+d\nOwactyG+3ycTW9NTMUgThoq0d4BTRSSpnn6MG4C7RWQAUOCUdaHudrq+7Xb3/NQgRKQvMB/7bfds\n4AdjjNdpSx/vHOb7xp4d8Np0bB/CZz/1/A0IrH2lhfG9OwQ87urc/ojd4x7sHikbOdSOJp7L92+T\niR0oAHU/z5pziMgRQA/gY7/tgTtgE+q+Jp5XNSPt9FaR9ifsN837Ap8QkZ7YTuvPnXH7volwvwg4\n1Pd4WRPOWx3weAS2P+WPxpjv/Zpq8pxbtzGmCFvrmBjw2vOwHcOZQd73cBzEXjj9nRjG9x8f8HgK\nUIrtZ/gM24+RY4xZ6fvB9kP8kdokHSpfP5V/k9vnQCWHfp53An8P2Es+F9jhGwmnYpPWMFREGWM+\nFZH7gHtEZCB21NNeYBjwO+y3yl86x34tIs8DD4hICnbI6wnYC8zzIXQy+/N9y50sIm9jRzhVAQ87\n4/6TgMuondzn6/u4G5jvxPEc9kL2EPCsMWaLMzQX4GwRKTDGfNmUzyPAm8BUEVkBbMBuKdzvMN4v\n0PEi8j/Av7AjnX4L3OvXUf4Y8Edn9vrH2KbDB7A1g2+aeK6PscnoJJx+JmPMbhGZDfxORCqdY07C\n/mbna9IAAAE+SURBVJ7TA15/IrY2qmKY1jBUxBljZmKHXCZgh3W+hZ1T8C/smH7/jtLLsN9wL8de\nUC/Gjlya1sTTfgi8CzyIneOxAVtT6YXt2H3aOW4sdvTTGCfWBdjhowOwncT3AP9L7XBaA7yIrRk9\n18SYAt3kxPIodo5GEXDbYb6nv/uwNYW3sJ/f740x/jW9O7Gd4BcCC7HJYhF2H/Ogw6Dr48wtWUht\njc3nd9jRWBc7cUwBLncGEgAgIl2xXyACh+SqGKMT95RSYSEio7Ajw3o3ZX0wEbkTO1dkeLA5Hip2\naA1DKRUWxpjl2IEFN4f6GqeJ72rgdk0WsU8ThlIqnK4GLhCRUPtifge8aYxZFMGYVJhok5RSSqmQ\naA1DKaVUSDRhKKWUCokmDKWUUiHRhKGUUiokmjCUUkqFRBOGUkqpkPx/n6dNcnAdd08AAAAASUVO\nRK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_sweep_frame(frame)\n", + "plot(frac_infected_series, label='Analysis')\n", + "\n", + "decorate(xlabel='Contact number (c)',\n", + " ylabel='Fraction infected')\n", + "\n", + "savefig('chap06-fig04.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The agreement is generally good, except for values of `c` less than 1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose you run a survey at the end of the semester and find that 26% of students had the Freshman Plague at some point. What is your best estimate of `c`?\n", + "\n", + "Hint: if you print `frac_infected_series`, you can read off the answer. " + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.211261 0.999900\n", + "4.642296 0.989902\n", + "3.987365 0.979904\n", + "3.612133 0.969906\n", + "3.350924 0.959908\n", + "3.151808 0.949910\n", + "2.991711 0.939912\n", + "2.858363 0.929914\n", + "2.744467 0.919916\n", + "2.645332 0.909918\n", + "2.557767 0.899920\n", + "2.479505 0.889922\n", + "2.408879 0.879924\n", + "2.344627 0.869926\n", + "2.285771 0.859928\n", + "2.231541 0.849930\n", + "2.181315 0.839932\n", + "2.134590 0.829934\n", + "2.090947 0.819936\n", + "2.050040 0.809938\n", + "2.011573 0.799940\n", + "1.975299 0.789942\n", + "1.941002 0.779944\n", + "1.908499 0.769946\n", + "1.877628 0.759948\n", + "1.848249 0.749950\n", + "1.820238 0.739952\n", + "1.793487 0.729954\n", + "1.767898 0.719956\n", + "1.743384 0.709958\n", + " ... \n", + "1.181034 0.290042\n", + "1.173263 0.280044\n", + "1.165630 0.270046\n", + "1.158132 0.260048\n", + "1.150765 0.250050\n", + "1.143524 0.240052\n", + "1.136407 0.230054\n", + "1.129409 0.220056\n", + "1.122527 0.210058\n", + "1.115758 0.200060\n", + "1.109099 0.190062\n", + "1.102547 0.180064\n", + "1.096099 0.170066\n", + "1.089751 0.160068\n", + "1.083503 0.150070\n", + "1.077350 0.140072\n", + "1.071291 0.130074\n", + "1.065323 0.120076\n", + "1.059444 0.110078\n", + "1.053651 0.100080\n", + "1.047943 0.090082\n", + "1.042317 0.080084\n", + "1.036772 0.070086\n", + "1.031305 0.060088\n", + "1.025914 0.050090\n", + "1.020598 0.040092\n", + "1.015356 0.030094\n", + "1.010185 0.020096\n", + "1.005083 0.010098\n", + "1.000050 0.000100\n", + "Length: 101, dtype: float64\n" + ] + } + ], + "source": [ + "print(frac_infected_series)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.158096819542062" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Alternative solution\n", + "\n", + "\"\"\"We can use `np.interp` to look up `s_inf` and\n", + "estimate the corresponding value of `c`, but it only\n", + "works if the index of the series is sorted in ascending\n", + "order. So we have to use `sort_index` first.\n", + "\"\"\"\n", + "\n", + "frac_infected_series.sort_index(inplace=True)\n", + "np.interp(0.26, frac_infected_series, frac_infected_series.index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap07mine.ipynb b/code/chap07mine.ipynb new file mode 100644 index 00000000..28451635 --- /dev/null +++ b/code/chap07mine.ipynb @@ -0,0 +1,1753 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 7: Thermal systems\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib qt5\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The coffee cooling problem.\n", + "\n", + "I'll use a `State` object to store the initial temperature.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
temp90
\n", + "
" + ], + "text/plain": [ + "temp 90\n", + "dtype: int64" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(temp=90)\n", + "init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And a `System` object to contain the system parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
inittemp 90\n", + "dtype: int64
volume300
r0.01
T_env22
t00
t_end30
dt1
\n", + "
" + ], + "text/plain": [ + "init temp 90\n", + "dtype: int64\n", + "volume 300\n", + "r 0.01\n", + "T_env 22\n", + "t0 0\n", + "t_end 30\n", + "dt 1\n", + "dtype: object" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee = System(init=init,\n", + " volume=300,\n", + " r=0.01,\n", + " T_env=22,\n", + " t0=0, \n", + " t_end=30,\n", + " dt=1)\n", + "coffee" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `update` function implements Newton's law of cooling." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update(state, system):\n", + " \"\"\"Update the thermal transfer model.\n", + " \n", + " state: State (temp)\n", + " system: System object\n", + " \n", + " returns: State (temp)\n", + " \"\"\"\n", + " unpack(system)\n", + " T = state.temp\n", + " T += -r * (T - T_env) * dt\n", + "\n", + " return State(temp=T)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how it works." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
temp5.17
\n", + "
" + ], + "text/plain": [ + "temp 5.17\n", + "dtype: float64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update(init, coffee)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run simulations using the same function from the previous chapter." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Add a TimeFrame to the System: results\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " frame = TimeFrame(columns=init.index)\n", + " frame.loc[t0] = init\n", + " ts = linrange(t0, t_end-dt, dt)\n", + " \n", + " for t in ts:\n", + " frame.loc[t+dt] = update_func(frame.loc[t], system)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how it works." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
temp
090.000000
189.320000
288.646800
387.980332
487.320529
586.667323
686.020650
785.380444
884.746639
984.119173
1083.497981
1182.883001
1282.274171
1381.671430
1481.074715
1580.483968
1679.899128
1779.320137
1878.746936
1978.179466
2077.617672
2177.061495
2276.510880
2375.965771
2475.426114
2574.891852
2674.362934
2773.839305
2873.320912
2972.807702
3072.299625
\n", + "
" + ], + "text/plain": [ + " temp\n", + "0 90.000000\n", + "1 89.320000\n", + "2 88.646800\n", + "3 87.980332\n", + "4 87.320529\n", + "5 86.667323\n", + "6 86.020650\n", + "7 85.380444\n", + "8 84.746639\n", + "9 84.119173\n", + "10 83.497981\n", + "11 82.883001\n", + "12 82.274171\n", + "13 81.671430\n", + "14 81.074715\n", + "15 80.483968\n", + "16 79.899128\n", + "17 79.320137\n", + "18 78.746936\n", + "19 78.179466\n", + "20 77.617672\n", + "21 77.061495\n", + "22 76.510880\n", + "23 75.965771\n", + "24 75.426114\n", + "25 74.891852\n", + "26 74.362934\n", + "27 73.839305\n", + "28 73.320912\n", + "29 72.807702\n", + "30 72.299625" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(coffee, update)\n", + "coffee.results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot(coffee.results.temp, label='coffee')\n", + "decorate(xlabel='Time (minutes)',\n", + " ylabel='Temperature (C)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After running the simulation, we can extract the final temperature from the results." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def final_temp(system):\n", + " \"\"\"Final temperature.\n", + " \n", + " If system has no results, return initial temp.\n", + " \n", + " system: System object.\n", + " \n", + " returns: temperature (degC)\n", + " \"\"\" \n", + " if hasattr(system, 'results'):\n", + " return system.results.temp[system.t_end]\n", + " else:\n", + " return system.init.temp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It will be convenient to wrap these steps in a function. `kwargs` is a collection of whatever keyword arguments are provided; they are passed along as arguments to `System`." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(T_init=90, r=0.01, volume=300, t_end=30):\n", + " \"\"\"Runs a simulation with the given parameters.\n", + "\n", + " T_init: initial temperature in degC\n", + " r: heat transfer rate, in 1/min\n", + " volume: volume of liquid in mL\n", + " t_end: end time of simulation\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(temp=T_init)\n", + " \n", + " system = System(init=init,\n", + " volume=volume,\n", + " r=r,\n", + " T_env=22, \n", + " t0=0,\n", + " t_end=t_end,\n", + " dt=1)\n", + " return system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we use it:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "72.299625390403094" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee = make_system()\n", + "run_simulation(coffee, update)\n", + "final_temp(coffee)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Simulate the temperature of 50 mL of milk with a starting temperature of 5 degC, in a vessel with the same insulation, for 15 minutes, and plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "milk = make_system(T_init=5, volume=50, t_end=15)\n", + "run_simulation(milk, update)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "plot(milk.results.temp, label='milk')\n", + "decorate(xlabel='Time (minutes)',\n", + " ylabel='Temperature (C)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using `fsolve`\n", + "\n", + "As a simple example, let's find the roots of this function; that is, the values of `x` that make the result 0." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def func(x):\n", + " return (x-1) * (x-2) * (x-3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`modsim.py` provides `fsolve`, which does some error-checking and then runs `scipy.optimize.fsolve`. The first argument is the function whose roots we want. The second argument is an initial guess." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1.])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, x0=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Usually the root we get is the one that's closest to the initial guess." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, 1.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3.])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, 2.9)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But not always." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3.])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, 1.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to find the value of `r` that makes the final temperature 70, so we define an \"error function\" that takes `r` as a parameter and returns the difference between the final temperature and the goal." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func1(r):\n", + " \"\"\"Runs a simulation and returns the `error`.\n", + " \n", + " r: heat transfer rate, in 1/min\n", + " \n", + " returns: difference between final temp and 70 C\n", + " \"\"\"\n", + " system = make_system(r=r)\n", + " print('made system')\n", + " run_simulation(system, update)\n", + " return final_temp(system) - 70" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With `r=0.01`, we end up a little too warm." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "made system\n" + ] + }, + { + "data": { + "text/plain": [ + "2.2996253904030937" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func1(r=0.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The return value from `fsolve` is an array with a single element, the estimated value of `r`." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n", + "made system\n" + ] + }, + { + "data": { + "text/plain": [ + "0.011543084583978345" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution = fsolve(error_func1, 0.01, xtol=1e-8)\n", + "r_coffee = solution[0]\n", + "r_coffee" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we run the simulation with the estimated value of `r`, the final temperature is 70 C, as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee = make_system(r=r_coffee)\n", + "run_simulation(coffee, update)\n", + "final_temp(coffee)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** When you call `fsolve`, it calls `error_func1` several times. To see how this works, add a print statement to `error_func1` and run `fsolve` again." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Repeat this process to estimate `r_milk`, given that it starts at 5 C and reaches 20 C after 15 minutes. \n", + "\n", + "Before you use `fsolve`, you might want to try a few values for `r_milk` and see how close you can get by trial and error. Here's an initial guess to get you started:" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "20.230193890310051" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_milk = 0.14\n", + "milk = make_system(T_init=5, t_end=15, r=r_milk)\n", + "run_simulation(milk, update)\n", + "final_temp(milk)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mixing liquids" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function takes `System` objects that represent two liquids, computes the temperature of the mixture, and returns a new `System` object that represents the mixture." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mix(s1, s2):\n", + " \"\"\"Simulates the mixture of two liquids.\n", + " \n", + " s1: System representing coffee\n", + " s2: System representing milk\n", + " \n", + " returns: System representing the mixture\n", + " \"\"\"\n", + " assert s1.t_end == s2.t_end\n", + " \n", + " volume = s1.volume + s2.volume\n", + " \n", + " temp = (s1.volume * final_temp(s1) + \n", + " s2.volume * final_temp(s2)) / volume\n", + " \n", + " mixture = make_system(T_init=temp,\n", + " volume=volume,\n", + " r=s1.r)\n", + " \n", + " return mixture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First we'll see what happens if we add the milk at the end. We'll simulate the coffee and the milk separately." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee = make_system(T_init=90, t_end=30, r=r_coffee, volume=300)\n", + "run_simulation(coffee, update)\n", + "final_temp(coffee)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21.815752137300244" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "milk = make_system(T_init=5, t_end=30, r=r_milk, volume=50)\n", + "run_simulation(milk, update)\n", + "final_temp(milk)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap07-fig01.pdf\n" + ] + } + ], + "source": [ + "plot(coffee.results.temp, label='coffee')\n", + "plot(milk.results.temp, '--', label='milk')\n", + "decorate(xlabel='Time (minutes)',\n", + " ylabel='Temperature (C)',\n", + " loc='center left')\n", + "\n", + "savefig('chap07-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what happens when we mix them." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "63.116536019614315" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mix_last = mix(coffee, milk)\n", + "final_temp(mix_last)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's what we get if we add the milk immediately." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "coffee = make_system(T_init=90, r=r_coffee, volume=300)\n", + "milk = make_system(T_init=5, r=r_milk, volume=50)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61.428571428571438" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mix_first = mix(coffee, milk)\n", + "mix_first.t_end = 30\n", + "run_simulation(mix_first, update)\n", + "final_temp(mix_first)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function takes `t_add`, which is the time when the milk is added, and returns the final temperature." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_and_mix(t_add, t_total=30):\n", + " \"\"\"Simulates two liquids and them mixes them at t_add.\n", + " \n", + " t_add: time in minutes\n", + " t_total: total time to simulate, min\n", + " \n", + " returns: final temperature\n", + " \"\"\"\n", + " coffee = make_system(T_init=90, t_end=t_add, \n", + " r=r_coffee, volume=300)\n", + " run_simulation(coffee, update)\n", + "\n", + " milk = make_system(T_init=5, t_end=t_add, \n", + " r=r_milk, volume=50)\n", + " run_simulation(milk, update)\n", + " \n", + " mixture = mix(coffee, milk)\n", + " mixture.t_end = t_total - t_add\n", + " run_simulation(mixture, update)\n", + "\n", + " return final_temp(mixture)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can try it out with a few values." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61.428571428571438" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "62.930437921600863" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix(15)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "63.116536019614315" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix(30)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And then sweep a range of values for `t_add`" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sweep = SweepSeries()\n", + "for t_add in linrange(0, 30, 2):\n", + " temp = run_and_mix(t_add)\n", + " sweep[t_add] = temp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the result looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap07-fig02.pdf\n" + ] + } + ], + "source": [ + "plot(sweep, color='purple')\n", + "decorate(xlabel='Time added (min)',\n", + " ylabel='Final temperature (C)',\n", + " legend=False)\n", + "\n", + "savefig('chap07-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Suppose the coffee shop won't let me take milk in a separate container, but I keep a bottle of milk in the refrigerator at my office. In that case is it better to add the milk at the coffee shop, or wait until I get to the office?\n", + "\n", + "Hint: Think about the simplest way to represent the behavior of a refrigerator in this model. The change you make to test this variation of the problem should be very small!" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "60.714285714285715" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "milk = make_system(T_init=5, t_end=30, r=0, volume=50)\n", + "run_simulation(milk, update)\n", + "coffee = make_system(T_init=90, t_end=30, r=r_coffee, volume=300)\n", + "run_simulation(coffee, update)\n", + "mixture = mix(coffee, milk)\n", + "final_temp(mixture)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analysis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use the analytic result to compute temperature as a function of time. The following function is similar to `run_simulation`." + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_analysis(system):\n", + " \"\"\"Computes temperature using the analytic solution.\n", + " \n", + " Adds TimeFrame to `system` as `results`\n", + " \n", + " system: System object\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " T_init = init.temp \n", + " ts = linrange(t0, t_end, dt)\n", + " \n", + " temp_array = T_env + (T_init - T_env) * exp(-r * ts)\n", + " temp_series = TimeSeries(temp_array, index=ts)\n", + " \n", + " system.results = TimeFrame(temp_series, columns=['temp'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it. From the analysis, we have the computed value of `r_coffee2`" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r_coffee2 = 0.011610223142273859" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(temp=90)\n", + "coffee2 = System(init=init, T_env=22, r=r_coffee2, \n", + " t0=0, t_end=30)\n", + "run_analysis(coffee2)\n", + "final_temp(coffee2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can compare to the results from simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(temp=90)\n", + "coffee = System(init=init, T_env=22, r=r_coffee, \n", + " t0=0, t_end=30, dt=1)\n", + "run_simulation(coffee, update)\n", + "final_temp(coffee)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "They are identical except for small roundoff errors." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
temp
00.000000e+00
10.000000e+00
20.000000e+00
30.000000e+00
40.000000e+00
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
90.000000e+00
100.000000e+00
110.000000e+00
120.000000e+00
13-1.421085e-14
14-1.421085e-14
150.000000e+00
16-1.421085e-14
17-1.421085e-14
18-1.421085e-14
190.000000e+00
20-1.421085e-14
210.000000e+00
220.000000e+00
230.000000e+00
240.000000e+00
250.000000e+00
26-1.421085e-14
270.000000e+00
28-1.421085e-14
290.000000e+00
300.000000e+00
\n", + "
" + ], + "text/plain": [ + " temp\n", + "0 0.000000e+00\n", + "1 0.000000e+00\n", + "2 0.000000e+00\n", + "3 0.000000e+00\n", + "4 0.000000e+00\n", + "5 0.000000e+00\n", + "6 0.000000e+00\n", + "7 0.000000e+00\n", + "8 0.000000e+00\n", + "9 0.000000e+00\n", + "10 0.000000e+00\n", + "11 0.000000e+00\n", + "12 0.000000e+00\n", + "13 -1.421085e-14\n", + "14 -1.421085e-14\n", + "15 0.000000e+00\n", + "16 -1.421085e-14\n", + "17 -1.421085e-14\n", + "18 -1.421085e-14\n", + "19 0.000000e+00\n", + "20 -1.421085e-14\n", + "21 0.000000e+00\n", + "22 0.000000e+00\n", + "23 0.000000e+00\n", + "24 0.000000e+00\n", + "25 0.000000e+00\n", + "26 -1.421085e-14\n", + "27 0.000000e+00\n", + "28 -1.421085e-14\n", + "29 0.000000e+00\n", + "30 0.000000e+00" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee.results - coffee2.results" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap08mine.ipynb b/code/chap08mine.ipynb new file mode 100644 index 00000000..b9e751bb --- /dev/null +++ b/code/chap08mine.ipynb @@ -0,0 +1,3067 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 8: Pharmacokinetics\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data\n", + "\n", + "We have data from Pacini and Bergman (1986), \"MINMOD: a computer program to calculate insulin sensitivity and pancreatic responsivity from the frequently sampled intravenous glucose tolerance test\", *Computer Methods and Programs in Biomedicine*, 23: 113-122.." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
glucoseinsulin
time
09211
235026
4287130
625185
824051
1021649
1221145
1420541
1619635
1919230
2217230
2716327
3214230
4212422
5210515
629215
728411
827710
92828
1028111
122827
142828
162858
182907
\n", + "
" + ], + "text/plain": [ + " glucose insulin\n", + "time \n", + "0 92 11\n", + "2 350 26\n", + "4 287 130\n", + "6 251 85\n", + "8 240 51\n", + "10 216 49\n", + "12 211 45\n", + "14 205 41\n", + "16 196 35\n", + "19 192 30\n", + "22 172 30\n", + "27 163 27\n", + "32 142 30\n", + "42 124 22\n", + "52 105 15\n", + "62 92 15\n", + "72 84 11\n", + "82 77 10\n", + "92 82 8\n", + "102 81 11\n", + "122 82 7\n", + "142 82 8\n", + "162 85 8\n", + "182 90 7" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv('glucose_insulin.csv', index_col='time')\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what the glucose time series looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAERCAYAAABVU/GxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlclWXawPHfgcMiKIbKDjqFAU0om6IWimUu6Gtu4Jui\no8y4hISGOeSGuZUSKoqkaNriMr2+qdmYba9WblMISioOlszYCMruEiKbcN4/iJNHQA/IgQNc38+H\nj5z7fpbrPMi5eJ57U6hUKhVCCCFEPRk0dwBCCCFaJkkgQgghGkQSiBBCiAaRBCKEEKJBJIEIIYRo\nEEkgQgghGkTZ1CfMzs7mrbfe4ocffqCyspL+/fszf/58bGxsAAgMDOT8+fMa+wQGBvLmm28CUFBQ\nwPLlyzl58iRGRkaMHTuWiIgIlMq630pJSQmpqalYWVlhaGiouzcnhBCtSEVFBXl5ebi7u2Nqalqj\nvkkTiEqlYsaMGXTq1IkdO3YAsHLlSkJDQ9m/fz8qlYr09HTWrFlD37591fu1a9dO/X14eDgKhYJd\nu3aRk5PD/PnzUSqVRERE1Hne1NRUgoODdffGhBCiFdu9eze9evWqUd6kCSQ/Px9nZ2dee+01HB0d\nAZg6dSphYWHcunWLW7duUVxcjKenJ1ZWVjX2T0lJ4fTp0xw+fBgnJyfc3NyIjIxkxYoVhIWFYWxs\nXOt5q4+1e/dubG1tdfcGhRCiFcnOziY4OLjWz2No4gRiZWVFbGys+nV2djZ79uyhR48edOzYkaSk\nJExNTXFwcKh1/+TkZBwcHHByclKX+fr6UlRURFpaGh4eHrXuV/3YytbWVp247peUBF98AVlZYGcH\nAQHQu3dD36kQQrQedT36b/I2kGqzZs3iyJEjdOzYUf0469KlS3To0IF58+Zx6tQpLC0tGTt2LFOm\nTMHAwICcnBysra01jlP9Oisrq84E8jBJSbBt2++vr179/bUkESGEqF2z9cKaM2cOH3/8Md7e3oSE\nhJCTk0N6ejp37tzBz8+P7du3M3HiROLi4oiPjweguLgYExMTjeMYGRmhUCgoLS1tcCxffFF7+Zdf\nNviQQgjR6jXbHYirqysAsbGxDBw4kE8++YTo6Gju3LmDhYWFepvCwkISEhIIDw/H1NSUsrIyjeOU\nl5ejUqkwMzNrcCxZWbWXX7vW4EMKIUSr16R3IPn5+Rw6dEijrF27djg5OZGTk4NSqVQnj2qurq4U\nFRVRWFiIra0teXl5GvW5ubkA6m7ADWFnV3u5vX2DDymEEK1ekyaQa9euMXfuXI1xHoWFhVy+fJnu\n3bszfvx4Vq5cqbHP+fPnsba2xsLCAh8fHzIyMsi655YhMTERc3Nz3NzcGhxXQEDt5cOGNfiQQgjR\n6jXpIyx3d3d69erF4sWLWbFiBUqlkrVr19KpUydGjx7NnTt3iIuLw93dHW9vbxITE9m2bRuLFi0C\nwMvLC09PTyIiIoiKiiI/P5+YmBhCQkLq7MKrjeqG8i+/rHpsZW9flTykAV0IIerWpAnEwMCAjRs3\n8vbbbzNz5kxKS0vx8/Nj165dmJubM23aNJRKJZs3b+batWvY29uzYMECgoKCAFAoFMTHx7N06VKC\ng4MxNzcnKCiIsLCwR46td29JGEIIUR+KtrAiYWZmJoMGDeLIkSN1jgMRQgih6WGfnTKZohBCiAaR\nBCKEEKJBJIEIIYRoEEkgQgjRQPPnz2fq1KnNHUazkQQihBCiQSSBCCGEaBBJIEKIFiEpCZYvh9DQ\nqn+TkprmvPn5+YSHh+Pt7Y2fnx/btm1j8ODB7N+/X2O7xMREXF1dyc7OrrOsvLyc2NhY/P398fT0\n5KWXXuLHH39Ub5+cnMykSZPw8vLimWeeYeXKlRQXF6vrt27dyqBBg3B3d2fo0KHs3r1bI4b//d//\nZejQofTs2ZORI0fyySef6OKSqDXbZIpCCKGt5lpyobKykpkzZ2JoaMiHH37I3bt3Wbp0KRkZGQ06\n3sqVKzly5AhLly7lySef5IMPPmDatGl8/fXXZGRkMHXqVCZPnsyyZcvIzMxk6dKlZGZmkpCQwDff\nfMP27dtZv349Xbt25R//+AdRUVG4uLjQu3dv/va3v7Fx40beeOMN/vjHP5KSksKKFSsAGDNmTGNe\nFjVJIEIIvfegJRd0mUBOnTpFamqqehVUgJiYGEaOHFnvY92+fZt9+/axfPlyXnjhBQAWLVqEqakp\nN2/e5L333sPd3Z3XX38dAGdnZ5YuXcqMGTO4dOkSV65cwcjICHt7exwcHAgKCsLR0ZEnnngCgISE\nBF555RWG/TaJX9euXbl27RoJCQmSQIQQbVdzLbnwz3/+k86dO2usguri4kKHDh3qfazLly9TXl5O\nz5491WVKpVKdMC5duoS/v7/GPtXrkF+6dIkXX3yRvXv3MmTIEFxcXPDz8+O//uu/6Ny5M9evXycn\nJ4fo6GjWrFmj3v/u3btUVFRQVlb2SPMF1kUSiBBC79nZVT22up+ul1wwNDSksrKywftXVFSovzcy\nMnrgtqampjXKqmeaUiqVdOrUib///e+cPn2aEydOcPToUd577z1WrVrF4MGDAYiKisLX17fGcZRK\n3XzUSyO6EELvNdeSC66urty4cYMrV66oy/79739TWFhYY9vqBHH79m112S+//KL+vmvXriiVSlJT\nU9VllZWVDB06lEOHDuHs7ExKSorGMU+fPg1UPc76/PPP+eijj+jduzcREREcOHCAAQMG8MUXX9Ch\nQwdsbGzIzMykW7du6q9//OMfbN++HQMD3XzUSwIRQui93r1h2jRwdAQDg6p/p03T/Qzaffv2xd3d\nncjISFJTUzl37hyRkZFA1ezg93JxccHMzIyEhASuXLnCsWPHeP/999X1ZmZmTJw4kdjYWI4ePcov\nv/zC8uXLuXXrFn369GH69OmcP3+e6Oho/v3vf3P8+HGWLVuGv78/zs7OlJWVER0dzd///neuXr3K\n999/zz//+U88PDwACA0N5YMPPmDPnj1cuXKFgwcPsnr1aqysrHR2feQRlhCiRWiuJRfi4+NZtmwZ\nwcHBdOjQgRkzZpCamlrjkVT79u2JiYlhzZo1DB8+HDc3N15//XWN5Sb++te/YmhoyMKFCykqKqJH\njx5s376dLl260KVLFxISEli/fj07d+7kscceY8SIEbz66qsAjB49moKCAjZu3EhWVhadO3dm7Nix\nvPzyywBMmDCBsrIytm/fzooVK7CxsWHWrFnMmDFDZ9dGpnMXQog6XL9+nXPnztG/f38MDQ0ByMvL\nw8/Pj927d6sbuVurh312yh2IEELUwdDQkDlz5jB16lQCAwMpKipiw4YNdOvWTf3oqC2TNhAhhKhD\nx44dSUhI4IcffmDkyJFMnjwZpVLJe++999BeVW1Bve5ASkpKyMnJobCwEEtLS6ysrHTSt1gIIfRF\nv3796NevX3OHoZcemkDKysrYu3cvn332GefOndPo12xoaIivry9Dhw5lzJgxkkyEEKINeWAC2b9/\nP2vXrqWsrIznnnuOYcOG4eDggJmZGbdu3SI7O5szZ86wbt064uPjmT17NkFBQU0VuxBCiGZUZwKZ\nOXMm169fZ9myZQwYMKDOu4upU6dSVlbGl19+yfvvv8/XX3/Nu+++q7OAhRBC6Ic6E0hAQACjR4/W\n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\nEbVbKAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(data.glucose, 'bo', label='glucose')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration (mg/dL)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the insulin time series." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(data.insulin, 'go', label='insulin')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the book, I put them in a single figure, using `subplot`" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgQAAAHqCAYAAAB7pFb5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlclXXe//HXQTYh3EHZtASFmcxAETVxufN20hrTSpxS\nKyknQ3JrccllzJYxsVChpEmzG7FlKnVyTLtTf2E2EwNKpqYJ3pYom2hjxCII5/cH46kjuCCHs+D7\n+Xj40PP9nnOdz+V19Ly5vt/r+hqMRqMRERERua452boAERERsT0FAhEREVEgEBEREQUCERERQYFA\nREREUCAQERERwNnWBQAUFBTw0ksv8dVXX1FTU8PAgQOZM2cOHTt2BGDMmDHs37/f7DVjxozhxRdf\nBOD06dMsXryYL7/8EhcXF+69915mzpyJs/Old6+iooIDBw7g7e1NixYtmm7nRERE7ER1dTWnTp2i\nR48euLu7m/XZPBAYjUYee+wx2rVrR0pKCgAvvPACsbGxbNiwAaPRSE5ODsuWLaNfv36m17Vs2dL0\n56lTp2IwGEhNTaWwsJA5c+bg7OzMzJkzL/m+Bw4cYPz48U23YyIiInZq/fr1REREmLXZPBAUFxcT\nFBTEU089RUBAAAATJ04kLi6Os2fPcvbsWcrLywkLC8Pb27vO67OystizZw/bt28nMDCQ0NBQZs2a\nxfPPP09cXByurq71vu+Fba1fv55OnTpdVa3ffAOffw5FReDjA0OGQM+e17TbIiIiVldQUMD48ePr\n/T61eSDw9vYmISHB9LigoID333+fW265hdatW5ORkYG7uzv+/v71vj4zMxN/f38CAwNNbZGRkZSW\nlnLo0CFuvfXWel93YZigU6dOpiByORkZ8Le/1f7ZzQ3Onq197O0Nffpc7d6KiIjYXn1D5XY1qXDK\nlCkMHjyYffv28cILLwCQnZ2Nl5cXTz/9NFFRUYwcOZK1a9dSU1MDQGFhIT4+PmbbufA4Pz/fYrVt\n3Vp/+7ZtFnsLERERm7GrQDB9+nQ++OADevXqRUxMDIWFheTk5FBWVkZUVBRr1qxh3LhxrFy5kqSk\nJADKy8txc3Mz246LiwsGg4Fz585ZrLZLZYu8PIu9hYiIiM3YfMjg10JCQgBISEhgyJAhbNy4kZdf\nfpmysjJatWplek5JSQnJyclMnToVd3d3KisrzbZTVVWF0WjEw8PDYrX5+sLJk3Xb/fws9hYiIiI2\nY/MzBMXFxWzZssWsrWXLlgQGBlJYWIizs7MpDFwQEhJCaWkpJSUldOrUiVOnTpn1FxUVAZguW7SE\nESPqbx8+3GJvISIiYjM2DwR5eXk8+eSTZvcZKCkp4dixYwQHBzN27FjTfIIL9u/fj4+PD61ataJ3\n797k5uaazRdIT0/H09OT0NBQi9XZpw9MmgQBAeDkVPv7pEmaUCgiIs2DzYcMevToQUREBPPnz+f5\n55/H2dmZV155hXbt2jF69GjKyspYuXIlPXr0oFevXqSnp7N69WrmzZsHQHh4OGFhYcycOZMFCxZQ\nXFxMfHw8MTExl7zk8Fr16aMAICIizZPNA4GTkxOJiYksXbqUyZMnc+7cOaKiokhNTcXT05NJkybh\n7OzMqlWryMvLw8/Pj7lz5xIdHQ2AwWAgKSmJRYsWMX78eDw9PYmOjiYuLs7GeyYiIuI4DEaj0Wjr\nImzhxIkTDB06lB07dlzVfQhEREQc3eW++2w+h0BERERsT4FAREREFAhEREREgUBERMRkzpw5TJw4\n0dZl2IQCgYiIiNj+skMREbn+ZGTULhqXn197a/gRI3SfF1vTGQIREbGqjAxYvbp2fZiamtrfV6+u\nbbeG4uJipk6dSq9evYiKimL16tUMGzaMDRs2mD0vPT2dkJAQCgoKLtlWVVVFQkICgwcPJiwsjPvv\nv5+vv/7a9PzMzEwmTJhAeHg4t912Gy+88ALl5eWm/r/85S8MHTqUHj16cMcdd7B+/XqzGv76179y\nxx130LNnT0aOHMnGjRub4q8E0BkCERGxssstJ9/UZwlqamqYPHkyLVq04H/+5384f/48ixYtIjc3\n95q298ILL7Bjxw4WLVpEt27dePvtt5k0aRL/+7//S25uLhMnTuTBBx/kueee48SJEyxatIgTJ06Q\nnJzMzp07WbNmDcuXL6dz58784x//YMGCBXTv3p0+ffrwzjvvkJiYyJ/+9Cd++9vfkpWVxfPPPw/A\nPffcY8m/FkCBQERErMyWy8n/61//4sCBA2zfvp3AwEAA4uPjGTlyZIO39fPPP/PRRx+xePFi/vu/\n/xuAefPm4e7uzr///W/eeustevTowezZswEICgpi0aJFPPbYY2RnZ3P8+HFcXFzw8/PD39+f6Oho\nAgIC6Nq1KwDJyck88cQTDP/PKnqdO3cmLy+P5ORkBQIREXF8tlxO/ttvv6V9+/amMADQvXt3vLy8\nGrytY8eOUVVVRc+ePU1tzs7OpgCQnZ3N4MGDzV4TERFh6rv77rv58MMP+d3vfkf37t2Jiori97//\nPe3bt+fMmTMUFhby8ssvs2zZMtPrz58/T3V1NZWVlRZfr0eBQERErGrEiNo5AxezxnLyLVq0oKam\n5ppfX11dbfqzi4vLZZ/r7u5ep+3CagHOzs60a9eOjz/+mD179rB7927S0tJ46623+POf/8ywYcMA\nWLBgAZGRkXW24+xs+a9vTSoUERGrsuVy8iEhIfz4448cP37c1PZ///d/lJSU1HnuhS/8n3/+2dT2\n/fffm/7cuXNnnJ2dOXDggKmtpqaGO+64gy1bthAUFERWVpbZNvfs2QPUDh988sknvPvuu/Tp04eZ\nM2eyadMmBg0axNatW/Hy8qJjx46cOHGCLl26mH794x//YM2aNTg5Wf7rW2cIRETE6my1nHy/fv3o\n0aMHs2bNYv78+dTU1LB48WKgdvXcX+vevTseHh4kJyczbdo0vv/+e9auXWvq9/DwYNy4cSQkJNC2\nbVu6dOnC22+/zdmzZ+nbty/dunXjnnvu4eWXXyY6OpqTJ0/y3HPPMXjwYIKCgti/fz8vv/wyXl5e\n9O7dm+PHj/Ptt9/ywAMPABAbG8uSJUvw8/Ojf//+7Nu3jyVLljBp0qQm+btRIBARketKUlISzz33\nHOPHj8fLy4vHHnuMAwcO1BkCuOGGG4iPj2fZsmXceeedhIaGMnv2bOLi4kzPeeaZZ2jRogXPPvss\npaWl3HLLLaxZs4YOHTrQoUMHkpOTWb58OevWraNNmzbcddddzJgxA4DRo0dz+vRpEhMTyc/Pp337\n9tx77708/vjjADzwwANUVlayZs0ann/+eTp27MiUKVN47LHHmuTvRcsfa/ljEZHrxpkzZ/jmm28Y\nOHAgLVq0AODUqVNERUWxfv1606S/5upy3306QyAiIteNFi1aMH36dCZOnMiYMWMoLS1lxYoVdOnS\nhVtvvdXW5dmUJhWKiMh1o3Xr1iQnJ/PVV18xcuRIHnzwQZydnXnrrbeueNVAc6czBCIicl3p378/\n/fv3t3UZdkdnCERERESBQERERBQIREREBAUCERERQYFAREREsJNAUFBQwLRp04iMjCQiIoKZM2dS\nWFho6t+9ezejRo2iZ8+ejBw5krS0NLPXnz59munTpxMREUH//v2Jj4/n/Pnz1t4NERERh2XzQGA0\nGnnsscf46aefSElJITU1lVOnThEbGwtATk4OsbGxDB8+nI0bNzJ06FDi4uLIzs42bWPq1KkUFxeT\nmprKkiVL2LBhA4mJibbaJREREYdj80BQXFxMUFAQL7zwAqGhoYSGhjJx4kQOHjzI2bNnSUlJISws\njNjYWIKCgpgxYwbh4eGkpKQAkJWVxZ49e1iyZAmhoaEMHjyYWbNmsW7dOiorK228dyIiIo7B5oHA\n29ubhIQE0z2VCwoKeP/997nlllto3bo1mZmZddaC7tu3L5mZmQBkZmbi7+9PYGCgqT8yMpLS0lIO\nHTpkvR0RERFxYHZ1p8IpU6awY8cOWrdubToDUFBQQMeOHc2e5+PjQ0FBAQCFhYX4+PjU6QfIz8+/\n7u9NLSIicjVsfobg16ZPn84HH3xAr169iImJobCwkIqKClxdXc2e5+rqyrlz5wAoLy/Hzc3NrN/F\nxQWDwWB6joiIiFyeXQWCkJAQevbsSUJCAjU1NWzcuBE3NzeqqqrMnldZWUnLli0BcHd3rzNXoKqq\nCqPRiIeHh9VqFxERcWQ2DwTFxcVs2bLFrK1ly5YEBgZSWFiIr68vRUVFZv1FRUWmYYROnTpx6tSp\nOv1AnaEGERERqZ/NA0FeXh5PPvkk+/fvN7WVlJRw7NgxgoOD6d27NxkZGWavSU9PJyIiAoDevXuT\nm5tLfn6+Wb+npyehoaHW2QkREREHZ/NA0KNHDyIiIpg/fz7ffPMN3377LTNmzKBdu3aMHj2aCRMm\nkJmZycqVKzl69CgrVqxg3759PPzwwwCEh4cTFhbGzJkzOXjwIGlpacTHxxMTE1Nn7oGIiIjUz+aB\nwMnJicTERH7zm98wefJkJkyYgKenJ6mpqXh6ehISEkJSUhKffvopo0ePZufOnSQnJxMUFASAwWAg\nKSmJ9u3bM378eJ599lmio6OJi4uz8Z6JiIg4DoPRaDTaughbOHHiBEOHDmXHjh2meyA0VEYGbN0K\n+fng6wsjRkCfPhYuVERExEIu991nV/chcCQZGbB69S+PT5785bFCgYiIOBqbDxk4qq1b62/fts26\ndYiIiFiCAsE1+tVFDWby8qxbh4iIiCUoEFwjX9/62/38rFuHiIiIJSgQXKMRI+pvHz7cunWIiIhY\ngiYVXqMLEwe3basdJvDzqw0DmlAoIiKOSIGgEfr0UQAQEZHmQUMGIiIiokAgIiIiCgQiIiKCAoGI\niIigQCAiIiIoEIiIiAgKBCIiIoICgYiIiKBAICIiIigQiIiICAoEIiIiggKBiIiIoEAgIiIiKBCI\niIgICgQiIiKCAoGIiIhgJ4GguLiY2bNnExUVRUREBI8++ihHjhwx9Y8ZM4aQkBCzX/PmzTP1nz59\nmunTpxMREUH//v2Jj4/n/PnzttgVERERh+Rs6wJqamp44oknMBqNvP7663h4eJCYmMjEiRPZsmUL\nbdq0IScnh2XLltGvXz/T61q2bGn689SpUzEYDKSmplJYWMicOXNwdnZm5syZVt+fjAzYuhXy88HX\nF0aMgD59rF6GiIhIg9g8EBw+fJisrCw++eQTgoKCAIiPjycyMpK0tDR69epFeXk5YWFheHt713l9\nVlYWe/bsYfv27QQGBhIaGsqsWbN4/vnniYuLw9XV1Wr7kpEBq1f/8vjkyV8eKxSIiIg9s/mQga+v\nL2+88QY33XSTqc1gMABw9uxZjhw5gru7O/7+/vW+PjMzE39/fwIDA01tkZGRlJaWcujQoaYt/iJb\nt9bfvm2bVcsQERFpMJsHgrZt2zJkyBCcnH4pZd26dVRUVBAVFUV2djZeXl48/fTTREVFMXLkSNau\nXUtNTQ0AhYWF+Pj4mG3zwuP8/Hzr7Qi1wwT1ycuzahkiIiINZvNAcLEdO3bw6quvEhMTQ1BQEDk5\nOZSVlREVFcWaNWsYN24cK1euJCkpCYDy8nLc3NzMtuHi4oLBYODcuXNWrd3Xt/52Pz+rliEiItJg\nNp9D8GsbNmxgwYIF3HnnnTzzzDMAvPzyy5SVldGqVSsAQkJCKCkpITk5malTp+Lu7k5lZaXZdqqq\nqjAajXh4eFi1/hEjzOcQXDB8uFXLEBERaTC7OUOwatUq5s6dy/3338/SpUtNQwjOzs6mMHBBSEgI\npaWllJSU0KlTJ06dOmXWX1RUBEDHjh2tU/x/9OkDkyZBQAA4OdX+PmmSJhSKiIj9s4szBG+++SbL\nly9n2rRpxMXFmfWNHTuWnj17Mn/+fFPb/v378fHxoVWrVvTu3Ztly5aRn5+P73/O2aenp+Pp6Ulo\naKhV9wNqv/wvDgC6FFFEROydzQPB4cOHSUhI4L777mPs2LFmP+17enoybNgwVq5cSY8ePejVqxfp\n6emsXr3adGOi8PBwwsLCmDlzJgsWLKC4uJj4+HhiYmKsesnhpehSRBERcQQ2DwSffPIJ1dXVfPTR\nR3z00UdmfdOnTyc2NhZnZ2dWrVpFXl4efn5+zJ07l+joaKD2EsWkpCQWLVrE+PHj8fT0JDo6us6Z\nBlu53KWICgQiImIvDEaj0dgUG87NzeXIkSMMHTq0KTbfaCdOnGDo0KHs2LGDgICAJnuf2Fj4zxWS\nZpycYNWqJntbERGROi733ddkkwp37tzJE0880VSbdxi6FFFERByB3Vxl0FyNGFF/uy5FFBERe2Lz\nOQTN3YV5Atu21d6x0M+vNgxo/oCIiNgTBQIrqO9SRBEREXuiIQMRERFp+BmC5OTkq3peVlZWg4sR\nERER22hwIFi+fPlVP/fCMsYiIiJi3xocCA4fPtwUdYiIiIgNaQ6BiIiINPwMwYIFCxr0/Oeff76h\nbyEiIiJW1uBA8OWXX5o9Lioq4vz58/j5+eHt7c2///1vcnNzcXV1tclqgyIiItJwDQ4EO3fuNP15\n8+bNLFu2jMTERHr27Glqz8nJYcqUKYy41G36RERExK40ag5BQkICTz75pFkYAAgODmbGjBms/vW6\nvyIiImK3GnWnwh9//JFWrVrV2+fi4kJZWVljNt9sZWTULoucn1+7+NGIEbqToYiI2FajzhCEhYWx\natUqfvrpJ7P206dPk5iYSN++fRtVXHOUkQGrV8PJk7XLIp88Wfs4I8PWlYmIyPWsUWcIZs+ezYMP\nPsh//dd/0atXL9q1a0dxcTF79+7Fy8uL119/3VJ1Nhtbt9bfvm2bzhKIiIjtNCoQhIaG8ve//523\n336bvXv3cvz4cdq2bcvEiRN5+OGHadOmjaXqbDby8+tv//prWLxYwwgiImIb13SVQf/+/WnZsiUA\nHTt2ZPbs2RYvrLny9a0dJvi1oiI4cQI6dKh9fGEYARQKRETEOho8hyA+Pp6+ffsyceJE3nrrLXJy\ncpqirmarvisxc3MhMLBu+7ZtTV+PiIgIXMMZgq1bt3LixAl27drFrl27SExMpE2bNgwcOJBBgwbR\nv39/PD09m6LWZuHCT/zbtkFeHvj5QXHxL2cHfi0vz7q1iYjI9eua5hAEBAQwbtw4xo0bR2VlJZmZ\nmezatYtXX32V48ePEx4ezqBBgxg4cKDuVliPPn3MhwIWL647jAC1YUFERMQaGjWpEMDV1ZXbbruN\n2267jTlz5nDixAm++OILdu3axapVq9i7d68l6mzWRoz4Zc7Ar3XurImGIiJiHY0OBBcLCAjggQce\n4IEHHqCystLSm2+W6htG6NwZ/vGPX56jiYYiItKUGhUIHnzwQQwGQ719Tk5OeHh40KVLF6Kjo+na\nteslt1NcXEx8fDxffvklFRUV3HrrrcyePZvu3bsDsHv3buLj4zl27BhdunTh6aefZvDgwabXnz59\nmsWLF/Pll1/i4uLCvffey8yZM3F2tnjeaTL1DSPUR/crEBGRptCoOxUGBATw9ddfk5WVBYC3tzdO\nTk588803ZGRkcObMGf7+979z7733cvDgwXq3UVNTwxNPPMH333/P66+/znvvvccNN9zAxIkT+fHH\nH8nJySE2Npbhw4ezceNGhg4dSlxcHNnZ2aZtTJ06leLiYlJTU1myZAkbNmwgMTGxMbtmc5e6X4Em\nGoqISFNoVCDw9vYmMDCQzz77jJSUFF555RXefvtttm/fTkhICFFRUXz++ecMGDCAhISEerdx+PBh\nsrKyeOmll+jZsyfBwcHEx8dTVlZGWloaKSkphIWFERsbS1BQEDNmzCA8PJyUlBQAsrKy2LNnD0uW\nLCE0NJTBgwcza9Ys1q1b59BDFr6+9bdroqGIiDSFRgWCDz/8kOnTp9OpUyez9g4dOjBlyhTeffdd\nWrRowdixY9m3b1+92/D19eWNN97gpptuMrVdGIY4e/YsmZmZREZGmr2mb9++ZGZmApCZmYm/vz+B\nv7qQPzIyktLSUg4dOtSY3bOpS60cPXy4desQEZHrQ6MCQVVVFefPn6+3r7Ky0rTaobu7OzU1NfU+\nr23btgwZMgQnp19KWbduHRUVFURFRVFQUEDHjh3NXuPj40NBQQEAhYWF+Pj41OkHyL/UeXcH0KcP\nTJoEAQHg5FT7+6RJtX2LF0NsbO3vWhRJREQsoVGz7vr168err75K9+7dCQ4ONrUfPXqU5cuX079/\nfwA+//xzszMAl7Njxw5effVVYmJiCAoKoqKiAldXV7PnuLq6cu7cOQDKy8txc3Mz63dxccFgMJie\n46gunmh4YaXEC3TlgYiIWEqjAsG8efN4+OGHufvuu7nxxhtp164dp0+f5vvvv6dLly7Mnz+f7du3\n8/bbb/PKK69ccXsbNmxgwYIF3HnnnTzzzDMAuLm5UVVVZfa8yspK01oK7u7udeYKVFVVYTQa8fDw\naMzu2R2tlCgiIk2lUYGgU6dObN68mc2bN/PVV19x5swZwsPDmTx5MiNHjqRFixaUlZXx7rvvEhYW\ndtltrVq1iuXLlzNhwgTmz59vmkfg6+tLUVGR2XOLiopMwwidOnUiLS2tTj9QZ6jB0V3pyoOMjNrQ\noBsZiYhIQzUqEFRWVvLOO++QlZVFSUkJAAUFBXz88cd8/PHHGAwG1qxZc8XtvPnmmyxfvpxp06YR\nFxdn1te7d28yLhooT09PJyIiwtS/bNky8vPz8f3P1Pz09HQ8PT2b3W2T61spEWqvPNBwgoiINEaj\nJhUuXryYJUuW8H//939UVVXV+XU1l/0dPnyYhIQE7rvvPsaOHcupU6dMv8rKypgwYQKZmZmsXLmS\no0ePsmLFCvbt28fDDz8MQHh4OGFhYcycOZODBw+SlpZGfHw8MTExdeYeOLrLXXlwueEEERGRK2nU\nGYLPPvuMadOmMWXKlGvexieffEJ1dTUfffQRH330kVnf9OnTmTJlCklJScTHx/Pmm2/StWtXkpOT\nCQoKAmovUUxKSmLRokWMHz8eT09PoqOj65xpaA7qu8Xx8OG17W+9Vf9rdCMjERG5Go0KBAaD4Ypz\nA67kySef5Mknn7zsc4YMGcKQIUMu2e/t7c1rr73WqDocxcVXHlxwueEEERGRK2nUkME999zDhx9+\neMl7DIj16EZGIiLSGI06QzB9+nTuuece7rjjDm6++WbTpYAXGAwGXnrppUYVKFfncsMJIiIiV9Ko\nQLBs2TKOHTuGl5cX3377bZ3+S62EKE3jUsMJIiIiV9KoQLBp0yb++Mc/8uSTT+rLX0RExIE1ag5B\nixYtGDBggMKAiIiIg2tUIBg5ciQffvihpWoRERERG2nUkEH79u3ZuHEjw4YN45ZbbsHT09Os32Aw\nsHjx4kYVKCIiIk2vUYHggw8+oHXr1lRXV/P111/X6ddQgoiIiGNoVCDYuXOnpeoQERERG2pUIBDH\noZUQRUTkchQIrgNaCVFERK6kUVcZiGPQSogiInIlCgTXgfz8+tu1EqKIiFygQHAd8PWtv10rIYqI\nyAUKBNcBrYQoIiJXokmF14FrWQlRVyWIiFxfFAiuEw1ZCVFXJYiIXH80ZCB16KoEEZHrjwKB1KGr\nEkRErj8KBFKHrkoQEbn+KBBIHboqQUTk+qNJhVLHtVyVICIijs3uAsHChQuprq7mxRdfNLWNGTOG\n/fv3mz1vzJgxpuecPn2axYsX8+WXX+Li4sK9997LzJkzcXa2u91zGA25KkFERByf3XxjGo1GVq5c\nyfvvv8+YMWPM2nNycli2bBn9+vUztbds2dL056lTp2IwGEhNTaWwsJA5c+bg7OzMzJkzrboPIiIi\njsouAkFubi7PPvss2dnZ+F00cy03N5fy8nLCwsLw9vau89qsrCz27NnD9u3bCQwMJDQ0lFmzZvH8\n888TFxeHq6urtXZDRETEYdnFpMK9e/fi6+vL5s2bCQgIMOs7cuQI7u7u+Pv71/vazMxM/P39CQwM\nNLVFRkZSWlrKoUOHmrRuERGR5sIuAsGoUaNYunRpvWcAsrOz8fLy4umnnyYqKoqRI0eydu1aampq\nACgsLMTHx8fsNRce51/qgnoRERExYxdDBpeTk5NDWVkZUVFRTJ48mb1797J06VJKSkqYNm0a5eXl\nuLm5mb3GxcUFg8HAuXPnbFS1iIiIY7H7QPDyyy9TVlZGq1atAAgJCaGkpITk5GSmTp2Ku7s7lZWV\nZq+pqqrCaDTi4eFhi5JFREQcjl0MGVyOs7OzKQxcEBISQmlpKSUlJXTq1IlTp06Z9RcVFQHQsWNH\nq9UpIiLiyOw+EIwdO5YXXnjBrG3//v34+PjQqlUrevfuTW5urtl8gfT0dDw9PQkNDbV2udeljAxY\nvBhiY2t/z8iwdUUiItJQdh8Ihg0bxvvvv8+mTZs4fvw4H3zwAatXr2batGkAhIeHExYWxsyZMzl4\n8CBpaWnEx8cTExOjSw6t4MJSySdPQk3NL0slKxSIiDgWu59DMGnSJJydnVm1ahV5eXn4+fkxd+5c\noqOjATAYDCQlJbFo0SLGjx+Pp6cn0dHRxMXF2bjy68PllkrWnQ5FRByH3QWCdevWmT02GAzExMQQ\nExNzydd4e3vz2muvNXVpUg8tlSwi0jzY/ZCB2DctlSwi0jwoEEijaKlkEZHmwe6GDMSxaKlkEZHm\nQYFAGk1LJYuIOD4NGYiIiIgCgYiIiCgQiIiICAoEIiIigiYVigPIyKi9I2J+fu19D0aM0CRGERFL\nUyAQu3ZhrYQLLqyVAAoFIiKWpCEDsWuXWytBREQsR4FA7JrWShARsQ4FArFrWitBRMQ6FAjErmmt\nBBER69CkQrFrWitBRMQ6FAjE7mmtBBGRpqchAxEREVEgEBEREQUCERERQYFAREREUCAQERERdJWB\niBZPEhFBgUCuc1o8SUSklt0NGSxcuJB58+aZte3evZtRo0bRs2dPRo4cSVpamln/6dOnmT59OhER\nEfTv35/4+HjOnz9vzbLFQWnxJBGRWnYTCIxGIytWrOD99983a8/JySE2Npbhw4ezceNGhg4dSlxc\nHNnZ2aaYPgd5AAAgAElEQVTnTJ06leLiYlJTU1myZAkbNmwgMTHR2rsgDkiLJ4mI1LKLQJCbm8tD\nDz3Eu+++i99Fq9akpKQQFhZGbGwsQUFBzJgxg/DwcFJSUgDIyspiz549LFmyhNDQUAYPHsysWbNY\nt24dlZWVttgdcSBaPElEpJZdBIK9e/fi6+vL5s2bCQgIMOvLzMwkMjLSrK1v375kZmaa+v39/QkM\nDDT1R0ZGUlpayqFDh5q+eHFoWjxJRKSWXUwqHDVqFKNGjaq3r6CggI4dO5q1+fj4UFBQAEBhYSE+\nPj51+gHy8/O59dZbm6BiaS60eJKISC27CASXU1FRgaurq1mbq6sr586dA6C8vBw3NzezfhcXFwwG\ng+k5IpejxZNEROxkyOBy3NzcqKqqMmurrKykZcuWALi7u9eZK1BVVYXRaMTDw8NqdYqIiDgyuz9D\n4OvrS1FRkVlbUVGRaRihU6dOdS5DvPD8i4caGkI3qxFL0OdIRByF3Z8h6N27NxkZGWZt6enpRERE\nmPpzc3PJ/9X1Y+np6Xh6ehIaGnpN73nhZjUnT0JNzS83q7moDJHL0udIRByJ3QeCCRMmkJmZycqV\nKzl69CgrVqxg3759PPzwwwCEh4cTFhbGzJkzOXjwIGlpacTHxxMTE1Nn7sHV0s1qxBL0ORIRa8nI\ngMWLITa29vdr+cHD7gNBSEgISUlJfPrpp4wePZqdO3eSnJxMUFAQAAaDgaSkJNq3b8/48eN59tln\niY6OJi4u7prfUzerEUvQ50hErMFSZyPtbg7BunXr6rQNGTKEIUOGXPI13t7evPbaaxarwde39i/0\nYrpZjTSEPkciYg2XOxvZkDlLdn+GwBZ0sxqxBH2ORByLJU6724Klzkba3RkCe6Cb1YglWONzpKsY\nRCzDkVc+tdTZSAWCS9DNasQSmvJz5Mj/gYHCzOU48t+No9ZuqdPutjBihPn/BRc09GykAoGIg3Lk\n/8CaOsw46pcSOHbQc+TaHXkSsKXORioQiDgoR/4PrCnDjCN/KYFjBz1Hrt3RJwFb4mykJhWKOChH\nXrq5KcOMo9//wZGDniPXrknAOkMg4rAsNW54KU152r0pfxpz5C8lcOyfVB25dk0mVyAQcVhN+R9Y\nU592b8ow48hfStD0Qa8pOXLtoMnkCgQiDqyp/gNr6rHgpgwzzeFLCRzzJ1VHrl0UCESkHtY47d5U\nYaY5fCk58k+qjlz79U6BQETqcPTT7vpSEmk4XWUgInVoxrXI9ee6PUNQXV0NQEFBgY0rEbE/vr4w\nahSkpUFhIXTsCIMH17afOGHr6kTkWl34zrvwHfhr120gOHXqFADjx4+3cSUijmHTJltXICKWcurU\nKbp06WLWZjAajUYb1WNTFRUVHDhwAG9vb1q0aGHrckRERJpcdXU1p06dokePHri7u5v1XbeBQERE\nRH6hSYUiIiKiQCAiIiIKBCIiIoICgYiIiKBAICIiIigQ1Ku6uppXXnmFqKgowsPDmTZtGsXFxbYu\nyyKKi4uZPXs2UVFRRERE8Oijj3LkyBFT/5gxYwgJCTH7NW/ePBtWfO1ycnLq7EtISAiZmZkA7N69\nm1GjRtGzZ09GjhxJWlqajSu+Nunp6fXuZ0hICA899BDQfI7rwoUL69R9peN4+vRppk+fTkREBP37\n9yc+Pp7z589bs+xrUt++pqamMnz4cMLCwrjzzjv54IMPzPrXr19f5zj/9re/tWbZ16S+fb3SZ7a5\nHNfbb7/9kv9+8/6zeIjVjqtR6khISDAOGDDAuHv3buOBAweM0dHRxvvvv9/WZTVadXW18Q9/+INx\n7Nixxn379hmzs7ON06ZNM/bv39945swZY01NjfHWW281fvzxx8aioiLTr5KSEluXfk22bNli7Nu3\nr9m+FBUVGSsrK43Z2dnGHj16GF9//XVjTk6OMSEhwXjzzTcbjxw5YuuyG+zcuXN19nHjxo3G0NBQ\n465du5rFca2pqTEuX77c2L17d+Ozzz5rar+a4/jAAw8Yx40bZzx06JDx888/N/br18/46quv2mI3\nrsql9nX9+vXGsLAw46ZNm4w//PCD8a9//avx5ptvNm7cuNH0nIULFxoff/xxs+N86tQpW+zGVbnU\nvl7NZ7a5HNfTp0+b7eMPP/xgHDx4sPGpp54yPcdax1WB4CLnzp0zhoeHGz/66CNTW25urrF79+7G\nPXv22LCyxjt48KCxe/fuxpycHFPbuXPnjLfeeqtx48aNxh9++MHYvXt34/Hjx21YpeUkJCQYx48f\nX2/fggULjBMmTDBrmzBhgnH+/PnWKK1J/fTTT8YBAwYY4+PjjUaj0eGP6/Hjx40TJkww9u3b1zhk\nyBCz/0yvdBz37t1bZ983bNhgDA8PN547d846O9AAl9vXkSNHGpcuXWr2/Llz5xoffPBB0+MHHnjA\nuGLFCqvV2xiX29crfWab03G92MKFC4233367sayszNRmreOqIYOLHD58mNLSUiIjI01tAQEB+Pv7\nm041OypfX1/eeOMNbrrpJlObwWAA4OzZsxw5cgR3d3f8/f1tVaJFZWdn07Vr13r7MjMzzY4xQN++\nfR3+GAO8/vrruLq6EhcXB+Dwx3Xv3r34+vqyefNmAgICzPqudBwzMzPx9/cnMDDQ1B8ZGUlpaSmH\nDh1q+uIb6HL7On/+fO6//36zNicnJ3766SfT45ycHIKCgqxSa2Ndbl+v9JltTsf11w4fPsxf//pX\nFi5cSMuWLU3t1jquCgQXubDwQ8eOHc3afXx8HH4hpLZt2zJkyBCcnH457OvWraOiooKoqCiys7Px\n8vLi6aefJioqipEjR7J27VpqampsWPW1y87OJi8vj7FjxzJgwAAmTpzIN998A9Qe5+Z4jE+fPk1q\naipxcXGm/1Ac/biOGjWKpUuX4u3tXafvSsexsLAQHx+fOv0A+fn5TVTxtbvcvkZGRpp9Aebl5bFl\nyxYGDhwI1O7r2bNn2bVrF8OHD2fw4ME8/fTTFBYWWq3+hrjcvl7pM9ucjuuvJSYm0rt3bwYPHmxq\ns+ZxVSC4SHl5OU5OTri4uJi1u7q6cu7cORtV1TR27NjBq6++SkxMDEFBQeTk5FBWVkZUVBRr1qxh\n3LhxrFy5kqSkJFuX2mAVFRXk5uby888/M2vWLFatWoWPjw8TJkzg6NGjVFRU4Orqavaa5nCM3333\nXdq3b8/dd99tamtOx/ViVzqO5eXluLm5mfW7uLhgMBgc+lifOXOGyZMn06FDBx577DGg9ksUwNnZ\nmYSEBP785z/z/fffM3HiRCoqKmxZboNd6TPbHI9rbm4uO3fuZPLkyWbt1jyu1+1qh5fi7u5OTU0N\n58+fx9n5l7+eyspKs1M4jm7Dhg0sWLCAO++8k2eeeQaAl19+mbKyMlq1agVASEgIJSUlJCcnM3Xq\nVNPwgiNwd3cnIyMDV1dX0xfGkiVLOHjwIO+88w5ubm5UVVWZvaY5HOOPP/6Ye++91yzQNqfjerEr\nHUd3d3cqKyvN+quqqjAajXh4eFitTkvKzc1l0qRJVFRUkJqaipeXFwBRUVH885//pF27dqbnBgcH\nM2jQINLS0rjjjjtsVXKDXekz2xyP6+bNm/H19SUqKsqs3ZrHVWcILuLr6wv8sjzyBUVFRXVOTTqq\nVatWMXfuXO6//36WLl1qGkJwdnY2/QO8ICQkhNLSUkpKSmxRaqPccMMNZj89Ojk5ERwcTH5+Pr6+\nvhQVFZk939GPcXZ2Nj/88AN33XWXWXtzO66/dqXj2KlTp3r/LUPdYUFHcPDgQf7whz/g5OTEe++9\nZzaEAJh9aUDtafS2bdva5Wn0y7nSZ7a5HVeoPWM7YsSIegO6tY6rAsFFQkND8fT05F//+pep7cSJ\nE5w8eZI+ffrYsDLLePPNN1m+fDnTpk1jwYIFZh++sWPH8sILL5g9f//+/fj4+NT5x2nvDhw4QK9e\nvThw4ICprbq6msOHD9OtWzd69+5NRkaG2WvS09OJiIiwdqkWk5mZibe3d53JR83puF7sSsexd+/e\n5Obmmv3HmZ6ejqenJ6GhoVattbGOHj3KI488gr+/P++8847ph5cLUlJSiIqKMjtjcvLkSc6cOUO3\nbt2sXW6jXOkz25yOK0BZWRmHDh2iX79+dfqseVwVCC7i6urKuHHjWLp0Kbt27eLgwYM8+eSTREZG\nEhYWZuvyGuXw4cMkJCRw3333MXbsWE6dOmX6VVZWxrBhw3j//ffZtGkTx48f54MPPmD16tVMmzbN\n1qU3WGhoKP7+/ixcuJB9+/aRnZ3N3Llz+fHHH3nooYeYMGECmZmZrFy5kqNHj7JixQr27dvHww8/\nbOvSr9mhQ4fo3r17nfbmdFwvdqXjGB4eTlhYGDNnzuTgwYOkpaURHx9PTExMnbkH9m727Nm4urqy\ndOlSzp8/b/q3e+bMGQCGDBlCaWkp8+bN4+jRo+zZs4epU6fSu3dvBgwYYOPqG+ZKn9nmdFwBvvvu\nO6qrq+v992vN46o5BPWYMWMG58+f55lnnuH8+fMMHDiQhQsX2rqsRvvkk0+orq7mo48+4qOPPjLr\nmz59OrGxsTg7O7Nq1Sry8vLw8/Nj7ty5REdH26jia+fs7Mzq1atZunQpjz/+OOXl5fTq1YvU1FTa\nt29P+/btSUpKIj4+njfffJOuXbuSnJzsMJds1aeoqIjWrVvXaZ80aVKzOa4XCwkJuexxNBgMJCUl\nsWjRIsaPH4+npyfR0dGmSzIdxbFjx9i/fz8Aw4cPN+vr3Lkzn332GZ07d2bt2rW88sorREdH4+Li\nwu23386cOXNsUXKjXOkz21yO6wUXhj/atGlTp8+ax9VgNBqNFt+qiIiIOBQNGYiIiIgCgYiIiCgQ\niIiICAoEIiIiggKBiIiIoEAgIiIiKBCIiIgICgQiIiKCAoGIiIigQCAiIiIoEIiIiAgKBCIiIoIC\ngYiIiKBAICIiIigQiIiICAoEIiIiggKBiIiIoEAgIiIigLOtC7CViooKDhw4gLe3Ny1atLB1OSIi\nIk2uurqaU6dO0aNHD9zd3c36rttAcODAAcaPH2/rMkRERKxu/fr1REREmLVdt4HA29sbqP1L6dSp\n0zVt45vCb/j8+88pKi3Cx9OHITcOoWfHnpYsU0RExGIKCgoYP3686Tvw167bQHBhmKBTp04EBAQ0\n+PUZJzP4W97fwBXcXN04y1n+lvc3vDt508e/j6XLFRERsZj6hso1qfAabc3ZWm/7tpxtVq5ERESk\n8RQIrlF+SX697XkleVauREREpPEUCK6Rr5dvve1+Xn5WrkRERKTxFAiu0YjgEfW2Dw8ebuVKRERE\nGs/uJhUuXLiQ6upqXnzxRVNbamoqqampFBQU4OfnR0xMDNHR0ab+9evXs3jxYrPttGjRgm+//bbJ\n6rwwcXBbzjbySvLw8/JjePBwTSgUERGHZDeBwGg0snLlSt5//33GjBljan/nnXd45ZVXWLRoEeHh\n4aSnp/Pcc8/h4uLC6NGjAThy5Ai33367WSgwGAxNXnMf/z4KACIi0izYRSDIzc3l2WefJTs7Gz8/\n8zH49957j3HjxjFq1CgAOnfuTFZWFhs2bDAFguzsbPr161fvdZUiIiJyZXYxh2Dv3r34+vqyefPm\nOvcEmD9/Pvfff79Zm5OTEz/99JPpcU5ODkFBQVapVUREpDmyizMEo0aNMp0BuFhkZKTZ47y8PLZs\n2cKECRMAKCws5OzZs+zatYvExETKy8vp06cPzzzzDB07dmzy2kVERJoDuzhDcLXOnDnD5MmT6dCh\nA4899hhQO1wA4OzsTEJCAn/+85/5/vvvmThxIhUVFbYsV0RExGHYxRmCq5Gbm8ukSZOoqKggNTUV\nLy8vAKKiovjnP/9Ju3btTM8NDg5m0KBBpKWlcccdd9iqZBEREYfhEGcIDh48yB/+8AecnJx47733\nCAwMNOv/dRgA8PHxoW3btuTn1383QRERETFn94Hg6NGjPPLII/j7+/POO+/g62t+h8CUlBSioqKo\nqqoytZ08eZIzZ87QrVs3a5crIiIOLiQkhL/97W9Wea8NGzbw29/+1ibvfTG7HzKYPXs2rq6uLF26\nlPPnz3Pq1Cmg9sZD7dq1Y8iQISQkJDBv3jwmT57Mv//9b1588UV69+7NgAEDbFy9iIhcq4yTGWzN\n2Up+ST6+Xr6MCB5hlXu/7N69m1atWjX5+9jbe9t1IDh27Bj79+8HYPhw81sCd+7cmc8++4zOnTuz\ndu1aXnnlFaKjo3FxceH2229nzpw5tihZREQsIONkBqv3rjY9PvnTSdPjpg4FtrynjS3f2+4Cwbp1\n60x/vummm/juu++u+JqwsDCz14mIiGO73BLzTR0IQkJCWLp0KaNGjWLOnDk4OTnh4eHB5s2bqays\n5Pbbb+e5557jhhtuoLq6mmXLlvH3v/+dH3/8kZtuuokpU6YwYkTtejcPPvggnTt3Nrsdf31t1/Le\nlmb3cwhEROT6Y09LzH/88cdUV1fz3nvvsXz5cnbu3ElKSgpQe3v9zz77jMTERLZt28bw4cN56qmn\nyM3NbfL3tjS7O0MgIiLi6+XLyZ9O1mm3xRLzbdq0Yf78+bRo0YKbbrqJ2267ja+//hqAH374gZYt\nW+Lv74+3tzdTpkyhZ8+etGnTpsnf29J0hkBEROyOPS0x37lzZ1q0aGF67OXlZbqybdy4cfz0008M\nGjSI6OhoEhMTCQgIMN0rpynf29IUCERExO708e/DpF6TCGgVgJPBiYBWAUzqNckmK8y6urrWaTMa\njQB07dqV7du388Ybb9CrVy+2bNnC73//e/75z39ecnvnz5+3yHtbmoYMRETELjnCEvPr16+nTZs2\n3HXXXQwaNIjZs2dz99138+mnn9K/f39cXFz4+eefTc+vqakhNzeXrl272rDq+ikQiIiIXKMff/yR\nxMREPDw86N69O99++y0nTpzg0UcfBWqvgnv77bf54osvCAwMZO3atWar9doTBQIREZFr9Pjjj1NR\nUcFzzz1HcXExvr6+TJ06lXvuuQeARx55hOPHjzNt2jRcXV0ZM2YMd911l42rrp/B2FSDEXbuxIkT\nDB06lB07dhAQEGDrckRERJrc5b77NKlQREREFAhEREREgUBERERQIBAREREUCERERAQFAhEREUGB\nQERERFAgEBERERQIREREBAUCERERQYFAREREUCAQERERFAhEREQEBQIRERFBgUBERERQIBAREREU\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(2, 1, 1)\n", + "plot(data.glucose, 'bo', label='glucose')\n", + "decorate(ylabel='mg/dL')\n", + "\n", + "subplot(2, 1, 2)\n", + "plot(data.insulin, 'go', label='insulin')\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='$\\mu$U/mL')\n", + "\n", + "savefig('chap08-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Interpolation\n", + "\n", + "We have measurements of insulin concentration at discrete points in time, but we need to estimate it at intervening points. We'll use `interpolate`, which is a wrapper for `scipy.interpolate.interp1d`" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource interpolate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The return value from `interpolate` is a function." + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [], + "source": [ + "I = interpolate(data.insulin, kind='cubic')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use the result, `I`, to estimate the insulin level at any point in time." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(68.0)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "I(7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`I` can also take an array of time and return an array of estimates, which we can plot." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZYAAAEPCAYAAABhkeIdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlc1HX+wPHXcJ8CCsghpoCiqYiKYuVV1iYq0mWb4lVJ\n5lG6uWmHumqaGqZmtt4dall5ppm2VptHWwiIlooKeHBfighyz8zvD36MDIfOyCAjvp/76BHz/X75\nft8M7bx5f06FWq1WI4QQQhiISWMHIIQQommRxCKEEMKgJLEIIYQwKEksQgghDMqssQNoTMXFxZw6\ndQoXFxdMTU0bOxwhhLgnKJVKsrOz6dy5M1ZWVjXO39eJ5dSpU4SFhTV2GEIIcU/68ssvCQwMrHH8\nvk4sLi4uQMWb4+bm1sjRCCHEvSEjI4OwsDDNZ2h193ViqWz+cnNzo1WrVjp9T1RqFPsT9pOen467\nvTvBvsH09OzZkGEKIYRRqqsL4b5OLPqKSo1ixR8rOH/lPFZmVihVSjYc3wAgyUUIIf6fjArTw/6E\n/aTlp1FQVkBOUQ65xbkAHEg40MiRCSGE8ZDEoof0/HTKVeWa16XKUgDS8tMaKyQhhDA6klj04G7v\njkqt0rxWqpUAeNh7NFZIQghhdCSx6CHYNxg1N9fsVKoqEssg30GNFZIQQhgdSSx66OnZk16evbAz\nt0OBAicrJ8Z3Hy8d90IIUYWMCtOTp70n3d27A/BY28ckqQghRDVSseipaud9ibKkESMRQgjjJIlF\nT5Ud9gAl5ZJYhBCiOkkseqrssAcoLi9uxEiEEMI4SWLRk1bFIk1hQghRgyQWPVWtWConSAohhLhJ\nEoueqlYs0hQmhHHx8/Pju+++uyvP2rlzJw8++GCDPTs6Oho/Pz9SUlJ0ur68vJzPP//cYM+vDxlu\nrKeqFYt03gthXI4ePUqzZs3uu2cD/PDDDyxatIhx48Y1WgyVjDKxzJkzB6VSycKFCzXHtmzZwpYt\nW8jIyMDDw4MXX3yR4cOHa85fuXKF+fPn89tvv2Fubs4zzzzDP/7xD8zMDPsjSh+LELfXWNtL1LU/\nyN3QmM8GUKvVt7/oLjGqpjC1Ws1HH33EN998o3X8q6++4sMPP2TixIns2bOHF198kXnz5rF7927N\nNa+99ho5OTls2bKFxYsXs3PnTj7++GODx1i9YjGmX6YQxiAqNYoNxzeQej0VlVpF6vVUNhzfQFRq\nVIM/u2pz1FtvvcU777zDggULCAoKolu3bkyfPp2CggKgYnvdJUuW0LdvXzp37kxISAj79+/X3Gv0\n6NG8++67Wvev7didPLs2Z8+eZdSoUXTt2pWhQ4dy+vRprfPXrl3j7bffpk+fPnTq1Ik+ffqwZMkS\nVCoVkZGRzJgxQxPHzp07Adi6dStDhw6lS5cudOvWjZdeeonLly/r85beEaNJLMnJyYwZM4atW7fi\n4aG9qOPXX3/NyJEjCQ0NpXXr1gwfPpxhw4Zp3rzY2FhiYmJYvHgxHTp0oH///syYMYPNmzdTWmrY\nDvaqFYtKrdKaMCmEqNheojaNsb3Enj17UCqVfP3116xYsYJffvmFTZs2ARV/sB48eJCPP/6YAwcO\nMGjQIKZPn05ycnKDP7u6vLw8xo0bh7OzMzt27GDatGmsWbNG65qZM2eSmJjI6tWrOXDgABMnTuSz\nzz7jl19+oVu3bsyZMweoaJIbPHgwBw4cYNGiRUyaNIkDBw6wdu1aUlNTWbJkiUF+vlsxmqaw48eP\n4+7uzrJly3jjjTe0zs2aNQt3d3etYyYmJly/fh2o6OTy9PTEy8tLc75Xr17cuHGDuLg4unbtarA4\nq1YsUDEyzNzU3GD3F+Jel56fXuvxxthewtHRkVmzZmFqakrbtm15+OGHOXHiBACXL1/G2toaT09P\nXFxcmDRpEv7+/jg6Ojb4s6vbt28fZWVlLFy4EFtbW3x9fcnMzGT+/Pmaa/r27UtQUBDt2rUDICws\njA0bNnDu3Dkef/xx7OzsgJtNcs2bN+f9999n8ODBAHh6ejJkyBD27NljkJ/vVowmsYSGhhIaGlrr\nuV69emm9TktLY9++fYwaNQqAzMxMXF1dta6pfJ2enm6wxKJWq7WWzYeKkWG2FrYGub8QTYG7vTup\n11NrHG+M7SVat26ttX2uvb09mZmZAIwcOZKDBw/Sr18/OnfuTN++fQkJCcHe3r7Bn11dfHw8bdu2\nxdb25mdJQECA1jUjRozg559/Ztu2bVy6dIlz586RkZGBSqWqfjug4nPz/PnzrFq1igsXLnDx4kXO\nnz9Py5YtDfDT3ZrRNIXp6urVq0yYMAFnZ2deeeUVAIqKirC0tNS6ztzcHIVCQUmJ4TrYqzaDVZIO\nfCG0BfsG13q8MbaXsLCwqHGssl/U29ubn376ibVr19K9e3f27dvH0KFD+f333+u8X3m57k3ft3p2\ndQqFosY5c/ObLSEqlYpXXnmFxYsXY21tTWhoKFu2bMHT07PO5+/evZtnnnmGtLQ0AgMDmT17NuHh\n4TrHXx9GU7HoIjk5mfHjx1NcXMyWLVs0f1lYWVnV6EspKytDrVZjY2NjsOdXbwYDGXIsRHWVo78O\nJBwgLT8ND3sPBvkOMrqVwL/88kscHR0ZMmQI/fr1Y+bMmQwbNowff/yRhx56CHNzc63OdpVKRXJy\nMt7e3gaPpWPHjuzatYu8vDwcHBwAOHXqlOb8mTNnOHr0KDt37qRTp04AFBQUkJ2drUlICoVC654b\nN27khRdeYNasWZpjW7ZsuSsDju6ZxHL69GnCw8NxcHDg66+/1upzcXNz49ChQ1rXZ2VlARi07JOK\nRQjd9PTsaXSJpLrc3Fw+/vhjbGxsaN++PWfOnCElJYWXX34ZqGiK+vzzzzly5AheXl589tlnmn5d\nQwsODuaTTz5hxowZTJ8+nczMTFauXKk57+LigpmZGfv378fBwYHs7GyWL19OaWmp5o/qyma0v/76\nC29vb9zc3IiJieHs2bNYWVnx/fff88MPP9CiRYsG+RmquieawhITE3nppZfw9PTkq6++qtGR36NH\nD5KTk0lPv9lpGBkZia2tLR06dDBYHFKxCNF0vPrqqzz33HPMmzePJ598kg8++IDXXnuNp59+GoCX\nXnqJxx57jNdff52///3v2NnZMWTIkAaJxc7Oji+++ILy8nKGDx/O/PnztZqtWrZsyfvvv8+BAwcI\nDg7mzTffpGvXrgwbNoy//voLgKCgIHr16sWIESP49ttvmT17Nvb29rzwwguMGDGCv/76i/nz53Pl\nyhXS0hp2IIVCbYQTMUaPHk3r1q01EySfe+45MjMz2bRpk2bkA4CpqSnNmzdHrVbzwgsvoFAomD17\nNjk5Obz11luMHDmS1157rc7npKSkMHDgQH7++WdatWp127iuFV9j5sGZWsde6vYSQa2C7vAnFUKI\ne8/tPjuNvins4sWLmow8aJB251/r1q05ePAgCoWCVatWMXfuXMLCwrC1tWX48OFMnjzZoLHUVrHI\nQpRCCKFN78SSm5vLTz/9RGRkJKmpqRQUFODo6IiHhwd9+/alf//+9R6ut3nzZs3Xbdu25dy5c7f9\nHhcXFz755JN6Pfd2pI9FCCFuT+fEcvXqVVavXs327dtRKpX4+Pjg6elJq1atuH79OmfPnmXv3r1Y\nWFjwwgsvEB4eflc6ie6m2ioWWeFYCCG06ZRY9u/fz4IFC+jatSsLFy7k0UcfxdrausZ1BQUFHDly\nhG3btjFkyBDmzJmjmfXZFNRasUjnvRBCaNEpsXzzzTd8+umn+Pn53fI6Ozs7goODCQ4O5vTp0yxe\nvLhpJZbaRoVJU5gQQmjRKbHcyeYxnTp10uoraQqkYhFCiNsz6DyWqKgoFi1aZMhbGhWpWIQQ4vYM\nmljOnDlT57LQTUFtS+RLxSKEENruiZn3xkKGGwshxO1JYtGDLOkihHGruoujLn799VcSEhIaMKLb\nS0lJwc/Pj+joaJ2uLy8vv6N+76oyMjLw8/MjMjKyXvepiyQWPdRWscg8FiGMx9GjR2us0FGXzMxM\nJkyYwJUrVxo4KsP64YcfjL4v2+iXdDEm0nkvhHGr3D1RF0a4TKJO7oW4dUosL730kk43a+gVMxub\nDDcWwrj5+fnxwQcfEBoayltvvYWJiQk2Njbs3buX0tJSHnvsMebNm4ednR39+/cHYMyYMTz99NMs\nXryY9PR0Fi1axNGjR7GysiIoKIi33npLs/3G6NGjadu2LadOnSI5OZklS5bw2Wef0aVLF5KTkzl0\n6BDOzs6Eh4czYsQITVzR0dGsWLGC06dPY21tzeDBg5k+fXqtE82vXbvGkiVLOHLkCLm5uTg5ORES\nEsKbb75JVFQUM2bM0PysixYt4plnniE6OpqlS5dy5swZXFxcGDx4MFOmTNFsgJiamsq8efOIiorC\nycmJiRMnNujvQafEUlZWptPNXFxc9PqL4V5T1yKUarW6xiY7QjQFBxMPsvf83kb5A8rSzJKQ9iE8\n4fPEHd9jz549DB8+nK+//pqkpCSmTZuGj48PkyZNYteuXTz99NN8/PHHPPTQQxQWFjJ69Gi6devG\n119/jVKp5JNPPmHs2LHs2bNHsyPktm3bWL58OW3atKFVq1Z89tlnbNq0iREjRrBr1y7++OMP3nvv\nPezt7Rk6dCgnT55k3LhxjB49mnnz5pGSksLcuXNJSUlhzZo1NWKeOXMmubm5rF69GkdHRw4fPsx7\n771Hjx496NevH3PmzGH+/PkcPXoUe3t74uLiePnll3n99ddZsmQJaWlpLFy4kJycHBYtWkRZWRnj\nx4/H2dmZrVu3cu3aNWbPnn3H76kudEosTW2i452qrWKBiuRiaWZZ6zkh7mUHLxxstKq8pLyEgxcO\n1iuxODo6MmvWLExNTWnbti0PP/wwJ06cAKB58+YAODg4YG9vz7Zt2ygqKmLx4sWaveqXLVtGUFAQ\n//nPfxg6dCgA/v7+Nfpx2rdvz7vvvguAj48PJ0+eZPPmzQwdOpRPP/2Uzp07M3PmTM35uXPn8sor\nrxAfH1+jaunbty9BQUG0a9cOgLCwMDZs2MC5c+d4/PHHNVuHVP4Rv3HjRvr376/ZoOyBBx5g3rx5\njBw5kn/84x/ExcVx8eJFNm7ciIeHBwCzZs3SbO3eEKSPRQ+1VSxQ0c8iiUU0RU94P9GoFcsT3nee\nVKBia43KJAFgb29PZmZmrdeeOXOGq1evEhgYqHW8qKiIxMREzeva9h/p2VN7t8yuXbty8OBBAOLj\n4zXNbpUqnxEfH4+/v7/WuREjRvDzzz+zbds2Ll26xLlz58jIyEClUtUad1xcHJcvX6Zbt26aY5X9\nMImJicTHx+Pk5KRJKpXxNSS9E0tpaSlfffUVsbGx5Ofn1zivUCjYuHGjQYIzNnVVLMXlxTSzbHaX\noxGi4T3h80S9KobGVtl8VVVdnd/m5ub4+vqyatWqGueqbgViZWVV47yZmfZHqUql0jSP13Z9ZQy1\nfd8rr7zCxYsXCQkJITQ0FH9/f8aOHVtrzJVxP/XUU1o7TlZycXHhzJkzNX5mc3PzOu9nCHonlvnz\n57N9+3batWuHo6NjQ8RktOqsWKQDX4h7TvV+0Xbt2rFt2zYcHR1xcHAAKlZs/+c//8m4cePo3bt3\nnfc6deqU1usTJ07w4IMPAhVNX7GxsVrnY2JiNOeqOnPmDEePHmXnzp106tRJE0N2drYmOVSP29fX\nl8TERB544AHNsdjYWNavX8+8efPo2LEjubm5XLp0iTZt2tQar6HpnVgOHjzI66+/zqRJkxoiHqNW\nV8UiQ46FuPfY2toCcO7cOdq3b09ISAirV69m2rRpvPHGG1haWvLhhx/y559/avo76vLHH3+wZs0a\nnnzySY4cOcL+/fs1lU94eDhPP/00S5YsYfjw4ZoRWv3798fHx4eUlBTNfVxcXDAzM2P//v04ODiQ\nnZ3N8uXLKS0tpbS0VCvuv/76C29vb8LDw3nmmWdYtGgRzz//PFeuXGHWrFm0bNkSFxcXmjdvTqdO\nnXjzzTeZM2cOZWVlLFiwoCHeUg29J0gqFAoCAgIaIhajJxWLEE2HnZ0do0ePZunSpcyaNQsrKys+\n++wzrKysGDt2LCNGjKC8vJwvvvjitpsW/u1vf+PPP/8kNDSUrVu3EhERwWOPPQZUdOyvWbOGY8eO\nMWzYMN5++22eeOIJPvrooxr3admyJe+//z4HDhwgODiYN998k65duzJs2DDNFu1BQUH06tWLESNG\n8O233+Ln58fatWs5fvw4Tz31FNOmTaNnz56axGZqasr69etxd3dnzJgxTJ06lXHjxhn2zaxGodZz\nts2SJUvIzMxk6dKlmJjc2xP3U1JSGDhwID///HOtHXLV7T67m/3x+2scnxA4ge7u3RsiRCGEkRs9\nejStW7dm4cKFjR3KXXO7z069m8KmTp3K008/zZNPPkmnTp1qDJVTKBS8//77dx6xEZOKRQghbk/v\nxLJ06VIuXryIvb09Z86cqXG+KU8UlD4WIYS4Pb0Ty+7duwkPD+eNN95o0kmkNlUrFnNTc8qUFSsS\nSMUixP1LJpDXpHcniampKY888kiDJpU5c+ZoZrFWOnr0qGZMd0hICIcOHdI6f+XKFaZOnUpgYCAP\nPfQQERERlJfX3JirPqpu9GVrbqv5WlY4FkKIm/ROLCEhIWzfvr0hYkGtVvPRRx/xzTffaB1PSEhg\n4sSJDBo0iF27djFw4EAmT55MfHy85prXXnuNnJwctmzZwuLFi9m5cycff/yxQeOr2hRmY26j+Vqa\nwoQQ4ia9m8JatGjBrl27eOKJJ+jSpYtmTHUlhULB/Pnz9Q4kOTmZd955h/j4eK2lBwA2bdpEQECA\nZkXOadOmERMTw6ZNm3jvvfeIjY0lJiaGn376CS8vLzp06MCMGTN47733mDx5cq2zb+9E1aYwW4ub\nP3epstQg9xdCiKZA78Sybds2HBwcUCqVmsXcqrrTJrLjx4/j7u7OsmXLeOONN7TORUdHExwcrHUs\nKCiIffv2ac57enri5eWlOd+rVy9u3LhBXFycwdbFqatikaYwIYS4SefVjfv370/r1q355ZdfGiSQ\n0NBQQkNDaz2XkZGh2Q+hkqurKxkZGUDFTnCurq41zgOkp6cbLrFUqViszW4Os5bOeyGEuEmnxHLo\n0CGWLl2Kq6sr/fr1o1+/fgQFBdW6uFpDKC4urtGcZWFhQUlJxQd6UVGRZkObSubm5igUCs01hlC1\nYqnaFCZ9LEIIcZNOiWXDhg2UlJTwxx9/cOTIERYuXEhmZiaBgYH07duXvn371lhMzZAsLS1rbDZW\nWlqqmZxpZWWlWUenUllZGWq1GhsbGwylasWi1XkvFYsQQmjo3MdiaWlJ//79NfsKXLp0iSNHjnD4\n8GGWL19OixYt6NevH3379mXgwIEGDdLd3Z2srCytY1lZWZrmMTc3txrDjyuvr96EVh8yKkwIIW7v\njhf7atOmDaNHj2b9+vUcO3aMuXPnYmZmxgcffGDI+ADo0aMHUVFRWsciIyM1m+X06NGD5ORk0tPT\ntc7b2trSoUMHg8VR1zwWqViEEOImg+wgaWlpqel7aQijRo3i2WefZeXKlQwZMoTvv/+ekydPMnfu\nXAC6detGQEAA//jHP5g9ezY5OTlERETw4osvGmyoMdyiKUwqFiGE0NApsdS2oxpUDC22sbHB2dmZ\nnj174ubmZtDgKvn5+bFq1SoiIiJYv3493t7erFmzRtOvo1AoWLVqFXPnziUsLAxbW1uGDx/O5MmT\nDRpHnU1hUrEIIYSGToll9erVdZ5TKis+bE1NTXnppZeYPn16vYOqbe2dAQMGMGDAgDq/x8XFhU8+\n+aTez76VqhWLpZklJgoTVGoV5apyylXlmJkYpAAUQoh7mk6fhKdPn67znEqlIjMzkx9//JGlS5fi\n4+PDU089ZbAAjUnVisVUYYqlmSVFZUVAxex7SSxCCFGPznvNDUxMcHd3Z9y4cbzwwgts3brVEHEZ\npaoVi6mJKZamN+fOSHOYEEJUMOgWkL179+bixYuGvKVRqa1iqSTLugghRAWDJpZmzZrVmMjYlNyq\nYpGFKIUQooJBE0tcXFyDjQwzBlUrFjMTM62KRYYcCyFEBYMlltOnT7Nu3TqeeOIJQ93S6GhVLArt\nikWawoQQooJOw5heeumlOs+VlpaSlZVFcnIyHTt21OyZ0hRp9bGYmGJldnMRTum8F0KICjollrr6\nTRQKBXZ2drRp04YpU6YwePBgzMya7pDbGhWLNIUJIUQNOu/Hcr9Tq9Wo1CrNaxOFiQw3FkKIWhi0\n874pq9oMZqIwQaFQSMUihBC10Kvd6vXXX8fPz0/zT9WtgAHOnTuHtbU1rVu3NmiQxqD6UGNAKhYh\nhKiFXoklKSmJX3/9ldLSUhQKBVZWVrRr1w4/Pz/atWtHbGwsf/31Fz/99FNDxdtoqk+OBKRiEUKI\nWuiVWHbv3o1SqeTixYucP3+ec+fOcfbsWfbt20dRUcWaWe7u7g0SaGOrWrFUrgkmFYsQQtSk9xAu\nU1NTfH198fX1ZfDgwUDFkOP169ezadMm1q5da/AgjUH1ocaALOkihBC1MEjnvYWFBZMnT6Z3794s\nW7bMELc0OtWHGgPa81ikKUwIIQADjwrr0aMHf/zxhyFvaTRqq1jO5pwlJj2GI0lH+P7890SlRtX1\n7UIIcd/Qqyls9uzZdOjQgfbt2+Pn50ezZs20ziclJdGiRQuDBmgsqlcsUalR7DyzkxtlNwDILcpl\nw/ENAPT07NkoMQohhDHQK7EcOXKEbdu2ARWz7lu2bEmHDh1o27YtV65c4b///S9Lly5tkEAbW/WK\nZX/Cfk3lUvX8gYQDkliEEPc1vRLLr7/+SkFBAefPnyc+Pp7z589z/vx5du/eTW5uLgCTJ0/mgQce\nwMfHB29vb3x9fRk6dGiDBH83Va9YUq6naPpaqp5Py0+767EJIYQx0XtUmJ2dHd27d6d79+5ax3Ny\ncjSJpjLpHDlyhOLi4qaRWKpVLO727iRdS9IcK1eVA+Bh73HXYxNCCGOiU2KZNWsW06dPx8nJqc5r\nnJ2dcXZ25uGHHwYgOzubZcuWMWnSJMNE2sgqEwdUzGMZ2HYg62PWY4IJqsr/qVUM8h3UiFEKIUTj\n02lUWKtWrQgODmbJkiWcPn36lteePXuWefPmMXToUFq3bl1j2Zd7VfWmsJ6ePQnvEY6jlSMKFNiZ\n2zGyy0jpXxFC3Pd0qlheffVVHnvsMT788EOeffZZPDw86NKlC61atcLa2pr8/HwyMjI4fvw4OTk5\n9O/fny+++IIOHToYLNDCwkI+/PBDfvzxR4qLiwkICOCtt97C19cXgKNHjxIREcHFixd54IEH+Oc/\n/0n//v0N9vzahhv39OzJY20fI+tGFgAPujxosOcJIcS9Suc+lvbt27N27VrOnz/P3r17iYyM5Nix\nY+Tn5+Pk5ISnpyfPP/88f/vb3/Dz8zN4oAsXLuT48eN89NFHODo6smzZMsaPH8+PP/5IcnIyEydO\nZNKkSfztb39j7969TJ48mV27dtGuXTuDPL+2CZIA1ubWmq8LywoN8iwhhLiX6d153759e6ZPn94Q\nsdzSTz/9xJQpU+jRowcA//jHPxgyZAgJCQl88803BAQEaHavnDZtGjExMWzatIn33nvPIM+vrWIB\nsDa7mViKyosM8iwhhLiX3TP7sTRv3pwffviBK1euUFpayvbt23FwcMDLy4vo6Gh69eqldX1QUBDR\n0dEGe35dFYuNuY3ma6lYhBDiDiqWxvLee+/x5ptv8vDDD2NqaoqVlRWffvopzZo1IyMjg5YtW2pd\n7+rqSkZGhsGeX2fFUqUprKhMKhYhhLhnKpbLly/j7OzMunXr2Lp1K3369OH1118nIyOD4uJiLCws\ntK63sLCgpMRwC0PW2cciTWFCCKHlnqhYkpOTmT17Nl999RUBAQEAfPjhhwwePJjPP/8cS0tLysrK\ntL6ntLQUa2vr2m53R+qqWKQpTAghtN0TFcupU6dQKpV07txZc8zc3JyOHTty+fJl3N3dycrK0vqe\nrKysGs1j9aFLH4s0hQkhRD0qloKCAoqKilCpVDXOGfIDHcDNzQ2Ac+fO0alTJwDUajWJiYn069cP\nZ2dnoqK0l6yPjIwkMDDQYDHo1MciTWFCCKF/YklKSuKdd94hJiamzmvi4uLqFVR1/v7+mgmR//rX\nv3BycuKLL74gLS2NUaNGUVBQwLPPPsvKlSsZMmQI33//PSdPnmTu3LkGi0GXPhZpChNCiDtILPPn\nzychIYEpU6bg5uaGiUnDt6aZmpqyevVqli1bxhtvvEFhYSGdO3fmq6++wtPTE4BVq1YRERHB+vXr\n8fb2Zs2aNfj4+BgsBuljEUII3eidWKKjo1mwYMFdX7G4efPmLFiwoM7zAwYMYMCAAQ32fF1m3ksf\nixBC3EHnva2tLQ4ODg0Ri1GTmfdCCKEbvRPLsGHD+PLLL1Gr1Q0Rj9GSmfdCCKGbO9roKyYmhief\nfBJ/f/8ac0UUCgXz5883WIDGomrFYmZy822zMrNCoVCgVqspKS9BpVZhorgnRnELIUSD0Dux7Nix\nA3t7e8rLyzl+/HiN8wqFwiCBGZuqG31VbQpTKBRYmVlp+leKyoqwtbC96/EJIYSx0Dux/PLLLw0R\nh9GrqykMKprDNImlXBKLEOL+dscTJBMSEjh27BgFBQU4OTnRo0cPvL29DRmbUamr8x6qdeDLyDAh\nxH1O78SiUqmYM2cOO3bs0OrAVygUhIaGsmjRoibZHHarikU2+xJCiJv0Tizr1q1j9+7dTJ8+nZCQ\nEJydncnOzmbv3r2sXLkSHx8fwsPDGyLWRnWrikVGhgkhxE16J5bt27fz6quvMn78eM0xNzc3wsPD\nKSkpYfv27U0zsdyqYpG5LEIIoaH3uNjs7GzN9sDVde/enfT09HoHZYxu2ccis++FEEJD78Ti5eVF\nbGxsrediY2NxcXGpd1DG6HajwipJU5gQ4n6nd1PYc889x7Jly7CxsWHw4ME4OzuTk5PDvn37WLt2\nLRMmTGi7HwIqAAAgAElEQVSIOBtdXfNYoNqeLNIUJoS4z+mdWEaPHk1cXByLFy9myZIlmuNqtZph\nw4YxceJEgwZoLLSawm7VxyJNYUKI+5zeicXU1JQlS5Ywfvx4oqKiuH79Os2aNaNnz560a9euIWI0\nClpNYbfoY5GmMCHE/e6OJ0i2a9euSSeS6m5VsUhTmBBC3KRTYpk9ezYTJkygVatWzJ49+5bXNtlF\nKG9VscgukkIIoaFTYvntt98ICwvTfH0rTXHWPdymj0WGGwshhIZOiaXqwpOLFy/mwQcfxM7OrsZ1\n169fv23iuVfdqmKRpjAhhLhJ73ksY8eO5cKFC7WeO3PmDDNnzqx3UMaorv1YoOaosPttEzQhhKhK\np4pl5syZmhn1arWauXPn1lqxXLp0CWdnZ8NGaCRuNUHS1MQUC1MLSpWlqNQqSpWlWJpZ3u0QhRDC\nKOhUsQQHB2NqaoqpacUHauXXVf8xNzenR48eWnNbmpJbLekCMvteCCEq6VSxDBgwgAEDBgAVEyTn\nzp2Lj49PQ8ZldG5VsUBFB/614mtART+LE053LTYhhDAmevexbN68udGSyrZt23jyySfx9/fnmWee\n4ffff9ecO3r0KKGhofj7+xMSEsKhQ4cM+uzbVSwy+14IISronVgq5ebmkpWVRWZmJpmZmWRkZHDh\nwgW2bdtmyPg0du3axbx58wgPD2fv3r307NmTSZMmkZKSQkJCAhMnTmTQoEHs2rWLgQMHMnnyZOLj\n4w32/NtVLNIUJoQQFfSeeX/u3Dn++c9/kpCQUOt5hULB8OHD6x1YVWq1mo8//pjw8HCee+45oGJA\nwR9//EFsbCxRUVEEBARo1imbNm0aMTExbNq0iffee88gz1epVZrXJoqa+ViWdRFCiAp6J5YPPviA\na9euMXPmTP773/9iYWHBo48+yuHDhzl8+DCbNm0yeJAXLlwgNTWVwYMHa46ZmJjw3XffAbB69WqC\ng4O1vicoKIh9+/YZ5PlVm8FMFCa1TgKVzb6EEKKC3k1hJ06cYOrUqYwbN47BgwdTVFTEyJEjWbNm\nDY8//jibN282eJCXLl0CKiZgjhkzhoceeoiwsDCOHz8OQEZGBi1bttT6HldXVzIyMgzy/KrNYNXn\nsFTSmiQpfSxCiPuY3omltLSUNm3aANCmTRvOnj2rOffMM89w4sQJgwVXqaCgAIC33nqL4cOHs2HD\nBtq1a8fYsWNJTEykuLgYCwsLre+xsLCgpKTEIM+/Xcc9SFOYEEJU0rspzMPDg5SUFAIDA2nTpg0F\nBQWkpqbi6emJpaUleXl5Bg/S3NwcgFdffZWQkBAAHnzwQWJiYti6dSuWlpaUlZVpfU9paSnW1tY1\n7nUnbtdxD7KsixBCVNK7Ynn88cdZunQpBw8epGXLlnh7e/PRRx+RmJjI559/jpeXl8GDdHV1BaB9\n+/aaYwqFAm9vb1JSUnB3dycrK0vre7Kysmo0j90pnSoWGW4shBDAHSSWKVOmEBAQwLfffgvA22+/\nzY8//sjQoUP57bffeO211wweZKdOnbCxseGvv/7SHFOr1SQmJuLl5UWPHj2IiorS+p7IyEgCAwMN\n8nxdKhZpChNCiAp6N4UtXbqUCRMm4OfnB0Dfvn35/vvvOXXqFJ06daJ169YGD9La2pqxY8eyYsUK\nnJ2dad++PV999RVJSUmsXLmSsrIynn32WVauXMmQIUP4/vvvOXnyJHPnzjXI83WpWKQpTAghKuid\nWLZv385jjz2m1Vnu5eXVIE1gVU2dOhVra2vef/99rly5QseOHfn000/x9vYGYNWqVURERLB+/Xq8\nvb1Zs2aNwVYI0Klikc2+hBACuIPE0rVrV6KionjkkUcaIp46KRQKJkyYwIQJE2o9X3U9M0PTd1SY\n9LEIIe5neieWTp06sWHDBv7zn//QsWNHbGxstM43xa2J9Z7HIk1hQoj7mN6J5ccff8TV1ZXi4mJi\nY2NrnG+KWxPfalviSuYm5piamKJUKSlTllGmLMPc1PxuhSiEEEZD78RSdZvi+0W5qlzzdV1NYQqF\nAmszawpKKyZzFpUXSWIRQtyX9B5uHBUVxY0bN2o9d/36dfbv31/voIyNLp33IMu6CCEE3EFiGTNm\nDImJibWea6p73uvSeQ/VOvCln0UIcZ+SPe91oGvFkn0jm5j0GArLCjH/nzlju46lp2fPuxGiEEIY\nDdnzXge6VCxRqVFEp0Vzo+wGatSk5aex4fgGolKjar1eCCGaKtnzXge6VCz7E/ZrDUXOLMikhXUL\nDiQckKpFCHFf0XtUWOV+KwUFBRQVFaFSqWpcY6jFH42FLhVLen46za2bk3GjYg+YtPw0kvKSsLOw\nQ42aYN9gSTBCiPuC3oklOTmZt99+m5iYmDqviYuLq1dQxkaXisXd3h2lSknrZq05f+U810quAaBG\nzeVrl9lwfAOAJBchRJOnd2KZN28eCQkJTJkyBTc3N0xM9B5Yds/RpWIJ9g1mw/ENtHFsw4XcC5rj\n5qbmxOXE0dmlszSLCSHuC3onlujoaBYsWMDQoUMbIh6jpEvFUpkwDiQcwMLUAlcbV0pVpViZWZFb\nnEtuce4thyoLIURToXdisbW1xcHBoSFiMVq6zmPp6dmTnp49UaMm9XoqCVcTSCtIA+DStUt0ce3S\n4LEKIURj07sda9iwYXz55Zeo1eqGiMco6TqPpVKwbzAArR1aY6KoeIsLygpo69S2YQIUQggjonfF\nYmdnR0xMDE8++ST+/v419pVvkqsb61ixVKraLJaWn8bVoqt4OXiRmJuISq3SJBshhGiK9E4sO3bs\nwN7envLyco4fP17jfJNc3VjPigVuNovdKL3BOz+/Q/L1ZL4//z1/ZvxJgHuADD8WQjRZsrqxDqpW\nLHXtx1IXWwtbHnB4gP9c+A8AF69dpIVNCxl+LIRosu64TSYjI4Pdu3ezbt06srOzOXPmDKWlpYaM\nzWhoVSx3MLIrtzgXc5OKJfSLlcVkFmQCFU1lQgjR1OhdsQAsWbKEzZs3U15ejkKh4JFHHmHZsmVk\nZmbyxRdf0KJFC0PH2ai09mPRsSmsqpzCHLyaeXHhWsX8lqTrSbS0a0lafprBYhRCCGOhd8Wybt06\nNm/ezIwZMzh48KBmdNiUKVPIy8tj+fLlBg+ysenbeV+du7077nbuWJhYAFCiLCEtPw0Pew+DxSiE\nEMZC78TyzTff8NprrzFmzBg8PG5+MHbr1o1p06Zx+PBhgwZoDO6k876qYN9gTE1Mae3QWnMs+Xoy\nj7Z51CDxCSGEMdG7KSwrK4suXWqf6Ofp6cm1a9fqHZSxqW/FUtlBv+/8PlLzUzFVmOLl4EVeSZ7B\nYhRCCGOhd8XSunVrjhw5Uuu56OhovLy86h3U7Zw4cYIHH3yQyMhIzbGjR48SGhqKv78/ISEhHDp0\nyGDPq2/FAhXJZe6jc1k1eBXd3bsD8N7h9xj/3XjmH5ov+7YIIZoMvRPL2LFj+fzzz1m4cCHHjh1D\noVCQnJzMpk2b2LhxIyNHjmyIODUKCwuZMWMGSuXND/uEhAQmTpzIoEGD2LVrFwMHDmTy5MnEx8cb\n5Jn1rViq6t2qN0q1kricOPJK8kjKSyL1eqpsCiaEaDL0TizPP/8806ZNY9u2bbz00kuo1WqmTZtG\nREQEY8aMISwsrCHi1Fi8eHGN/V42bdpEQEAAEydOxMfHh2nTptGtWzc2bdpkkGcaomKpZKIw0bpH\nWkGa5v4y/FgI0RTc0XDjCRMmEBYWRmxsLNeuXcPW1pbu3bvj6Oho6Pi0HDp0iF9//ZX169czbNgw\nzfHo6GiCg4O1rg0KCmLfvn0Gea4hKxYABQpszGwoLC9EqVZypegKrrauMvxYCNEk3NEEya1btzJn\nzhz69u1LSEgI9vb2PP/88+zevdvQ8WlcvXqVd999lwULFtRYXTkjI6NGFePq6kpGRoZBnl3feSzV\neTTzwNXWVfM6uzC74rgMPxZCNAF6J5YtW7Ywf/587OzsNMfc3NwIDAzk3Xff5bvvvjNogJX+9a9/\n8dhjj9GvX78a54qLi7GwsNA6ZmFhQUlJiUGeXd+Z99UF+wbjYuOieZ1blEuZsoxBvoPqfW8hhGhs\neieWzZs3M2XKFK0VjL28vHj//feZOHEiGzZsMGiAALt27eLMmTPMnDmz1vOWlpaUlZVpHSstLa2x\n8vKd0moKM0DF0tOzJ68FvUYr+1YVzWLmNjzk9ZCsGyaEaBL07mPJyMige/futZ7r0aMH69evr3dQ\n1e3cuZPMzEz69OkDoJntHx4ezlNPPYW7uztZWVla35OVlVWjeexOGbpigYrkMrPPTLad3gZAQWmB\nQe4rhBCNTe/E4uHhQWRkJA899FCNczExMQb7MK9q6dKlFBcXa15nZ2cTFhbGggULeOSRR1ixYgVR\nUdpDdSMjIwkMDDTI8w1dsVQK9Ahk+5ntqNVqzl05R15xHg5W99funEKIpkfvxPL3v/+diIgIysvL\neeKJJ2jevDm5ubn88ssvbNy4kalTpxo8yOrJytLSUnO8RYsWjBo1imeffZaVK1cyZMgQvv/+e06e\nPMncuXMN8vyGqFgAHK0cade8HeevnEetVhOTHsNjbR8z2P2FEKIx6J1Yxo0bR2ZmJp9//jkbN27U\nHDc1NWX06NGMHz/eoAHqws/Pj1WrVhEREcH69evx9vZmzZo1+Pj4GOT+9dmP5XZ6evbkt+TfSMpL\n4mTmSQa3GyybgAkh7ml39Ck5c+ZMJk2axIkTJ7h27Rr29vb4+/vTvHlzQ8dXKzc3N86dO6d1bMCA\nAQwYMKBBnmfICZI1qOFszlnUVPQbJV5NlE3AhBD3tDv+81uhUNChQwdUKhUAZWVlZGZWbGDVEP0s\njcnQEySr+vXyrzhZOXG1+CoA6QXptHVsy4GEA5JYhBD3JL0TS1JSEu+88w4xMTF1XhMXF1evoIxN\nQ1Ys6fnptLRtqUksqddTaWkrm4AJIe5deieW+fPnk5CQwJQpU3Bzc8PE5I53N75nNGTF4m7vjlKl\npFl+M66XXkeFioSrCQT7Bt/+m4UQwgjpnViio6NZsGABQ4cObYh4jFJDVizBvsFsOL4B3+a+xGbE\nokbNtZJreDbzNOhzhBDibtE7sdja2tZYq6upa8iKpbIf5UDCAXIKc7hadBUvBy9OZ5+moLQAOwu7\n29xBCCGMi97tWMOGDePLL7/UzH6/HzToqDAqksvs/rPZM2IPT/g8gYuNCzdKb/D1qa/vq/dZCNE0\n6F2x2NnZERMTw5NPPom/v3+N9bgUCoXWOmL3OrVajUqt0rw2UTRcn5KlmSUju4zk48iPAYhKjaKo\nrIiXu7+MjblNgz1XCCEMSe/EsmPHDuzt7SkvL+f48eM1zisUCoMEZiyqN4M19M/X2bUzD3k9xJ5z\ne0jKS+JI0hG2x23nrUfeIrhdMFGpUexP2E96fjru9u53NJnSEPcQQoi66J1Yfvnll4aIw2g1dDNY\nbTo6d+SrP7/iRtkNALJuZDH9P9NZ+r+lZBRkgAIcLR3JL8kn9XoqoPtkyqjUKFZGruTitYvkl+Tj\nYe9BSl6KXvcQQohbafpjheupITvu6/Jj4o+0dWpLxxYdNclMjZqzOWdRoUKlVnG1+CrHM46TcDWB\n787qtgdOYVkhEf+LICY9hitFVyhVlXIp7xKnsk/pfA8hhLidO555n5CQwLFjxygoKMDJyYnu3bsb\nbG0uY9IYFUt6fjoALrYuWJtbE381nvzSfArLC2lGM811atSkFaSx5/weHm37KAPaDKg1+anUKo4m\nHeW7s99xKuuUZvmYSrnFueyL38fL3V+mrVPbhv3hhBBNnt6JRaVSMWfOHHbs2KE1YkmhUBAaGsqi\nRYuaVD9LY1Qs7vbumiYuOws7url1Q6VWEX81nnbN21FUVsSFaxfILc4FwNLUkm9Pf8vhy4d5vtPz\ndHLtpLnX2ZyzfHv6W839bMxtuFF2AwdLB+ws7EjNrzhuZmJGxP8iGP7gcAa0GdCkfodCiLtL78Sy\nbt06du/ezfTp0wkJCcHZ2Zns7Gz27t3LypUr8fHxITw8vCFibRSNUbFUTpqsykRhwosBL/K/5P9h\na2FLZ5fOXC26yoVrF/By8AIgoyCDlZErKSwr5OK1ixSUFmBmYkZrh9aarZC7uHYhryQPZ2tnFAoF\njpaOnLt6Di8HL5QqJV+f+prE3ERG+4/G0szyrvy8QoimRe/Esn37dl599VWt5fHd3NwIDw+npKSE\n7du3N6nEEp0WTUx6DIVlhbjYuBCVGtXgndxVJ02m5afhYe/BIN9B9PTsyYMuD2qOd3XryvSHp5Nf\nms++8/soLi8muzCbuJyba7WVKEuIy4nDzNWMcQHjeML7CU5knNC6x4TACRxLPUZSXhJQ0cGfnJfM\nq4Gv4m7v3qA/qxCi6dE7sWRnZ9OjR49az3Xv3p1169bVOyhjEZUaxZY/t2hGZxWUFty1Je17evas\n9Rl1He/dqje7z+7m42Mfax1XoMDFxgVfJ18Gtxtc5z0GtBnAN6e/4cjlI0BF9bPo6CJG+4+W0WJC\nCL3onVi8vLyIjY2tdWvi2NhYXFxcDBKYMdifsL/WyZHGuKR9M8tmjOk6hqOXj1KqLNUcNzUxxczE\nTNMfUxdzU3NG+Y/Ct7kvW/7cQpmyjJLyEjYc30DC1QSGdxpu8E3OhBBNk97DjZ977jnWrFnD559/\nTlZWFiqViqysLD777DPWrl3LM8880xBxNor0/HStPpbKxGLMS9q3cmiFpZml5p/KZOBh76HT9/du\n1Zu3+7yNq62r5tivl34l4rcIrhReaZCYhRBNi96JZfTo0QQHB7N48WL69+9Pp06d6N+/P0uWLGHQ\noEFMnDixIeJsFO727hSVF2leW5lZAbp/SDeGupbbH+Q7SOd7eDbz5N1+79Ldvbvm2KVrl1h4ZCGn\ns07XO0YhRNOmd9uGQqFgyZIlhIeHExUVRV5eHnZ2dgQFBdGuXbuGiLHRBPsG81vSb5rXlYlFnw/p\nu+1WHf/6sDKz4pUer/DLxV/YfmY7KrWKG6U3+PjYxwxpN4Qh7Yc06LppQoh7l86JJSkpiblz59K7\nd29eeeUVfH198fX1paCggKCgIAICAoiIiMDDw3j/mtdXT8+eBHoEcrXoKjfKbtDaoTXju483uv6V\n6urq4NeXQqFgoPdA2ji2YV3MOq4VX0OtVvP9+e9JzE3k5W4vY29pb4CIhRBNiU6JJTMzk7CwMMrL\nywkNDa1xfuLEiXz11Vf8/e9/Z9euXTg7Oxs80MZia2GraRJ685E38W3u28gR3X0+zX2Y1W8WG45v\n4GzOWQDisuOY8sMUnKydKCkvkcUshRAaOrVlrFu3DgsLC3bv3l0jsdjZ2TFlyhS2b9+OWq1uUsON\n1Wo1WTeyNK+rdmjfb+wt7Znae6pmyHJ2YTbH0o7xn8T/kHw9mZS8FDYc30BUalQjRyqEaGw6JZYj\nR44QHh5Oy5Yt67zGw8ODl19+mcOHDxssuKpycnKYOXMmffr0ITAwkJdffpnz589rzh89epTQ0FD8\n/f0JCQnh0KFD9X5mYVkhRWUVnfeWZpbYW9zfzT4mChNCO4TyWtBrpBdUrGemRk1ibiKns09TUl7C\ngYQDjRylEKKx6ZRYMjMzdVpgsmPHjmRkZNQ7qOpUKhVTpkzh0qVL/Pvf/+brr7/Gzs6OcePGkZub\nS0JCAhMnTmTQoEHs2rWLgQMHMnnyZOLj4+v13OzCbM3XLjYusn7W/+vs2pkOLTpoJdqrxVeJSY8h\nNj1Wdr0U4j6nU2JxcnIiOzv7ttddu3aNZs2a3fY6fZ09e5bY2Fjef/99/P398fX1JSIigsLCQg4d\nOsSmTZsICAhg4sSJ+Pj4MG3aNLp168amTZvq9dyqzWAutk1n4qchtHVqS9eWXfG090RBRcItV5eT\nfD2Zf0f9m7zivEaOUAjRWHRKLD169GD37t23vW737t34+fnVO6jq3N3dWbt2LW3b3lzSvbJ6yMvL\nIzo6ml69eml9T1BQENHR0fV6bvYN7YpF3BTsG4yJwgQfJx/8Xf2xMq0Yiu3l4MWfmX8y99e5HEs9\nJtWLEPchnRLLmDFj+O2334iIiKC0tLTG+dLSUpYuXcqhQ4cICwszeJBOTk4MGDAAE5Ob4W7evJni\n4mL69OlDRkZGjf4fV1fXejfLScVSt56ePRnffTytmrXCydqJYX7DCOsSpknAhWWFbDy+kbUxa8kv\nyW/kaIUQd5NOw427du3KjBkzWLJkCbt376Z37954enqiVCpJS0sjMjKS3NxcJk+ezIABAxo4ZPj5\n559ZtmwZL774Ij4+PhQXF2NhYaF1jYWFBSUlJfV6TtU+lvt5RFhdapsvcy7nHF+c/EKz/Etseizx\nV+IZ2WUkPTxqX7xUCNG06DxBcuzYsXTu3JmNGzfy008/aT60bW1t6dOnDy+++CIBAQENFmilnTt3\nMnv2bAYPHsybb74JgKWlJWVlZVrXlZaWYm1tXa9nSVOY/vyc/ZjTfw47zuzg8OWKEYIFpQWsi1lH\nYHogI7qMwM7CrpGjFEI0JL2WdOnRo4dmyfyrV69iZmbWIJ31dVm9ejUrVqxg1KhRzJo1S9PP4u7u\nTlZWlta1WVlZtxwefTsl5SVcL7kOVKwQ7GTtdOeB32eszKwI8w+ju3t3vjj5BblFFSsrR6dFc+7K\nOcK6hNHNvVsjRymEaCh3vNhT8+bN72pSWb9+PStWrOD1119n9uzZWkN/e/ToQVSU9sS8yMhIAgMD\n7/h5VZvBnG2cZV2sO9DRpSP/6v8vHmn9iOZYfkk+a6LX8Gnsp9wovdGI0QkhGso98Wl59uxZli9f\nzrPPPsvzzz9Pdna25p/CwkJGjRpFdHQ0K1euJDExkY8++oiTJ08yduzYO36mNIMZhrW5NWO6juG1\noNdwtHLUHI9MiWTur3P5M/PPRoxOCNEQ7omdm3744QeUSiU7duxgx44dWuemTp3KpEmTWLVqFRER\nEaxfvx5vb2/WrFmj06TOusiIMMPq7NqZfw34F9+c+oY/Uv4A4HrJdT459gludm4o1UquFF654zXH\nolKj2J+wn/T8dFm3TIhGdk8kljfeeIM33njjltcMGDDAoCPSZESY4dmY2/Bitxfp7t6dLX9u4XrJ\ndbILszmcdBhLU0vc7Ny4dO0Svyf/zpO+T9K+RXud7nv+ynl+TPgRqFh2Jr8kn9TrqUDDbyEthKjp\nnkgsjUGawhpOV7eu+Db3ZeuprayJXgNAibKEy3mXNdd8+eeXWhuN3UpMegw3yrT7a+wt7FkTvYZO\nrp2wMbcxXPBCiNu6J/pYGoNULA3L1sKW8d3H08axDeYm5jXOV08Ut1JYVljjWH5pPr+n/M6MgzP4\nNPZTzuWck1UAhLhLpGKpRbmqnKtFV4GKpWNa2LRo5IiaLv+W/thb2JN9I5sy1c25SC2sWxDcrvZt\nlqu7XnJd8/sqKi/iSuEVVKiwNbelTFlGZEokkSmRONs487DXwzzs9bAMHxeiAUliqUVOYY7mr9vm\n1s0xM5G3qaEE+waz4fgGPJt5ah3XZ6dOT3tPNhzfoHldpiwjuzAbz2aeWlVKTmEOe87tYe/5vTzo\n8iAPez1MgFuA/H6FMDD5f1QtpH/l7qlMHgcSDpCWn4aHvQeDfAfp1ele/R5tndoysedEenr2JDkv\nmaNJRzmWekzTZKZWqzmddZrTWaextbAlyDOIR1o/QqtmrQz/AwpxH5LEUovDlw8Tkx5DYVkhOYU5\n9GndR0YXNaDa1hwz1D28HLwY0WUEzz34HCcyTvBb8m/EZcdpzt8ovcEvF3/hl4u/8IDjAzS3ak5K\nfkq9hj4bGxmKLe42SSzVRKVGsTNup6bzuKi8SNPMIv9nvHeZm5prks+Vwiv8L/l//J7yu2axTKhY\nciYuJw4ThQlOVk7EX43nj5Q/eO7B53io1UM4WDngYOmAjbnNPbPp2+/Jv7PijxVcLbpKuaqcpLwk\nTmWeYkqvKfRr06+xwxNNlCSWavYn7KdUeXNrAGuzioUsDyQckMTSRLSwaUGIXwhD2w/lbM5Zfkv+\njdj0WJLykgBQqVVcKbqZcFZHrSYyJVLz2tTElGaWzXCwdNAkm2aWzTRfO1g5kHg1kcOXD5N1I+uu\nVwm5RbmcyjrFqaxTfHHyC/JKam66Nv0/03nc+3G8HLxo7dAar2YV/3a0crxnkqYwXpJYqknPT6eZ\nZTNyinKwMLHQLEOSlp/WyJEJQ1MoFHR06UhHl47cKL3BiB0jSM9Pp6CsQOu66kOflSoluUW5msU1\nq8suzCYup6K5zcrUCjsLO/6X/D/G+I8huF2wwT+8lSolF3Iv8FfWX5zOOk3K9RTNucqFVKu7UXaD\nq0VXuVp0lZMZJzXH7SzsaiQbV1tXSTZCL5JYqnG3d0elVuFo5YilqaVmxJCHvUcjRyYakq2FLYEe\ngaReT+VG6Q0KygooU5ZRqizF1tyW9i3ak1eSx/WS6xSVFd3yXpWVD0CxspjiomJyinJY/sdyDl0+\npPXhXfkBru+Hd15xHqezT3Mq6xRnss/UGZONuQ1KlZLm1s2xMbfR/GyV20lXV1BaQFx2nFY/lKWZ\nJa2atdJKNu727jKaTtRJ/suopnL4a/U9Qwb5DmqkiMTdUvm7t7WwxdbCVnO8+tDnUmUp10uuk1ec\np0k2lV/nFecRmxGLhYkFZaoy1Nwc7lxZ+dzuw7vyAzzlegoHLxwkPT+dlnYtCWgZgEKh4FTWKa3k\nVZ2ZiRntWrSjs2tnnurwFLvidtVIWi8GvIiXgxfJ15NJyksiKS+J5LxkisuLa9yvpLyExKuJJF5N\n1BwzNTHFw95DK9m0atYKSzNLPd7xxmdMAxuMKZb6ksRSjSGGv4p7k66/ewtTC5xtnHG2ca71PrnF\nuaReT0WlVlFYVqipEkwVpliZWen04Z1dmM25nHPYmNtgaWbJb8m/8c3pb+jo3LHWIfBO1k50ce1C\nZxAoNo8AAA73SURBVNfOdHDuoPUB72zjXOfP5NnMk96tegMVw7BzCnMqksz/J5zkvORam9OUKiXJ\neckk5yVrjikUClxtXbWSjZeD113f2E2tVlOuKqe4vJgSZUnFv8tLNK8rv/4r8y/2xe9DqVKiRs35\nK+c5dOkQj7Z9FB+nO1/A9k4k5iby34v/1Xr9e/LvDG0/lAC3ACzNLLEys8LS9P//bWap+drC1MLo\nmioV6vt4nYuUlBQGDhzIzz//TKtWModBGEZUapTWhM1K47uPJ9AjkOzC7IoP5SrVQn5Jvta1ta1/\nBmBnbkd39+6YKEzwbe5LZ9fOdGnZBXc79wb7cMkrzquRbHIKc3T+fidrJ61kk1OYw9Gko2QUZOBm\n58bffP6Gf0v/2yaCyq9ru6b6a10+1m73Ht9N9Y2laqLR9eu6EpWlmSXmJuZEp0XXWUHd7rNTKhYh\nDOx2lY+rrSuutq708KjYjVWtVpNXkqeVbKLSomrc18LEAntLeyYETqCjc0eszeu39bauHKwc6GLV\nhS4tu2iOFZYVknI9RasZLb0gvdYP9MqBDiczTmoGNlT2zyhVSr4+/XWdlVhDqm2NOdBvnTpDqW8s\nJeUlWrve1ld2YTbxV+IxNTHF3a6i31mfaReSWIRoAPpM+lQoFDhaOeJo5aj58M66kcXla5cpKC2g\nuLwYOws7bM1t8XLwuut/TdfGxtyG9i3aa21tUKYsIzU/VSvZpOanUqa8uQZcZd9Quapc637JeckG\nTSxmJmZaf5VXfl31dWWfmInCRGuHWBcbF0Z0GWGwWHRRqizVVIFq1ChVSlRqFQ6WDjzs9XCNyqzq\n11WnRxhKUl4S5epyypXlXMq7hJudGxamFjpPu5DEIoQRqhxIUHXXTTDuQSTmpua0cWxDG8c2mmMq\ntYqMggxNsvkr6y9KyksoV99MLAoUlChLaG7d/LbNNRamFjUSRG1fm5qY3jbeds3b1dlkebf7VG3N\nbe84FpVaRamytNakU/l1cXmx1jW1JarK48XlxVoVVHOr5poVyHWddiGJRQgj1FQGkZgoTPCw98DD\n3oPerXpzNucsKXkplKnKUKDA1MQUE4UJrZq1Ynb/2Xc1NmN6j+sTi4nCRJNsDWXur3NJzktGpVZh\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts = linrange(0, 182, 2)\n", + "\n", + "plot(data.insulin, 'go', label='insulin data')\n", + "plot(ts, I(ts), color='green', label='interpolated')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n", + "\n", + "savefig('chap08-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** [Read the documentation](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html) of `scipy.interpolate.interp1d`. Pass a keyword argument to `interpolate` to specify one of the other kinds of interpolation, and run the code again to see what it looks like. " + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nh2gAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts = linrange(0, 182, 2)\n", + "\n", + "plot(data.insulin, 'go', label='insulin data')\n", + "plot(ts, I(ts), color='green', label='interpolated')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n", + "\n", + "savefig('chap08-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The glucose minimal model\n", + "\n", + "I'll cheat by starting with parameters that fit the data roughly; then we'll see how to improve them." + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k1 = 0.03\n", + "k2 = 0.02\n", + "k3 = 1e-05\n", + "G0 = 290" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To estimate basal levels, we'll use the concentrations at `t=0`." + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Gb = data.glucose[0]\n", + "Ib = data.insulin[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the initial conditions, `X(0)=0` and `G(0)=G0`, where `G0` is one of the parameters we'll choose." + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "init = State(G=G0, X=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the system object with all parameters and the interpolation object `I`." + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " t0=0, t_end=182, dt=2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the update function. Using `unpack` to make the system variables accessible without using dot notation, which makes the translation of the differential equations more readable and checkable." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func(state, t, system):\n", + " \"\"\"Updates the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: State object\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " G += dGdt * dt\n", + " X += dXdt * dt\n", + "\n", + " return State(G=G, X=X)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before running the simulation, it is always a good idea to test the update function using the initial conditions. In this case we can veryify that the results are at least qualitatively correct." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
G278.12
X0.00
\n", + "
" + ], + "text/plain": [ + "G 278.12\n", + "X 0.00\n", + "dtype: float64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func(init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now run simulation is pretty much the same as it always is." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation(system, update_func):\n", + " \"\"\"Runs a simulation of the system.\n", + " \n", + " Adds a TimeFrame to `system` as `results`\n", + " \n", + " system: System object\n", + " update_func: function that updates state\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " frame = TimeFrame(columns=init.index)\n", + " frame.loc[t0] = init\n", + " ts = linrange(t0, t_end-dt, dt)\n", + " \n", + " for t in ts:\n", + " frame.loc[t+dt] = update_func(frame.loc[t], t, system)\n", + " \n", + " system.results = frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how we run it. `%time` is a Jupyter magic command that runs the function and reports its run time." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 154 ms\n" + ] + } + ], + "source": [ + "%time run_simulation(system, update_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The results are in a `TimeFrame object` with one column per state variable." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
0290.0000000.000000
2278.1200000.000000
4266.9528000.000300
6256.2954600.002668
8245.0701400.004041
10233.9051380.004680
12223.2016510.005252
14212.9848440.005722
16203.2882070.006093
18194.1334610.006330
20185.5478350.006490
22177.5266060.006610
24170.0480140.006726
26163.0776970.006813
28156.5909970.006872
30150.5632550.006929
32144.9628290.007008
34139.7531910.007108
36134.9012940.007172
38130.3923020.007201
40126.2109250.007197
42122.3416650.007161
44118.7690290.007094
46115.4776980.007003
48112.4517430.006887
50109.6758360.006747
52107.1353080.006585
54104.8161800.006402
56102.7051920.006226
58100.7840580.006057
.........
12486.3906940.001095
12686.5381020.000973
12886.6974210.000858
13086.8667970.000750
13287.0445390.000648
13487.2291050.000552
13687.4190900.000462
13887.6132150.000377
14087.8103140.000298
14288.0093280.000224
14488.2092960.000155
14688.4093430.000089
14888.6090330.000026
15088.807970-0.000036
15289.005799-0.000094
15489.202200-0.000150
15689.396887-0.000204
15889.589604-0.000256
16089.780123-0.000306
16289.968242-0.000354
16490.153784-0.000400
16690.336592-0.000446
16890.516892-0.000492
17090.694895-0.000538
17290.870797-0.000585
17491.044781-0.000631
17691.217018-0.000678
17891.387668-0.000725
18091.556880-0.000772
18291.724792-0.000819
\n", + "

92 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " G X\n", + "0 290.000000 0.000000\n", + "2 278.120000 0.000000\n", + "4 266.952800 0.000300\n", + "6 256.295460 0.002668\n", + "8 245.070140 0.004041\n", + "10 233.905138 0.004680\n", + "12 223.201651 0.005252\n", + "14 212.984844 0.005722\n", + "16 203.288207 0.006093\n", + "18 194.133461 0.006330\n", + "20 185.547835 0.006490\n", + "22 177.526606 0.006610\n", + "24 170.048014 0.006726\n", + "26 163.077697 0.006813\n", + "28 156.590997 0.006872\n", + "30 150.563255 0.006929\n", + "32 144.962829 0.007008\n", + "34 139.753191 0.007108\n", + "36 134.901294 0.007172\n", + "38 130.392302 0.007201\n", + "40 126.210925 0.007197\n", + "42 122.341665 0.007161\n", + "44 118.769029 0.007094\n", + "46 115.477698 0.007003\n", + "48 112.451743 0.006887\n", + "50 109.675836 0.006747\n", + "52 107.135308 0.006585\n", + "54 104.816180 0.006402\n", + "56 102.705192 0.006226\n", + "58 100.784058 0.006057\n", + ".. ... ...\n", + "124 86.390694 0.001095\n", + "126 86.538102 0.000973\n", + "128 86.697421 0.000858\n", + "130 86.866797 0.000750\n", + "132 87.044539 0.000648\n", + "134 87.229105 0.000552\n", + "136 87.419090 0.000462\n", + "138 87.613215 0.000377\n", + "140 87.810314 0.000298\n", + "142 88.009328 0.000224\n", + "144 88.209296 0.000155\n", + "146 88.409343 0.000089\n", + "148 88.609033 0.000026\n", + "150 88.807970 -0.000036\n", + "152 89.005799 -0.000094\n", + "154 89.202200 -0.000150\n", + "156 89.396887 -0.000204\n", + "158 89.589604 -0.000256\n", + "160 89.780123 -0.000306\n", + "162 89.968242 -0.000354\n", + "164 90.153784 -0.000400\n", + "166 90.336592 -0.000446\n", + "168 90.516892 -0.000492\n", + "170 90.694895 -0.000538\n", + "172 90.870797 -0.000585\n", + "174 91.044781 -0.000631\n", + "176 91.217018 -0.000678\n", + "178 91.387668 -0.000725\n", + "180 91.556880 -0.000772\n", + "182 91.724792 -0.000819\n", + "\n", + "[92 rows x 2 columns]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following plot shows the results of the simulation along with the actual glucose data." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nhujoaGbOnEloaCjOzs6EhIQYhptaizNnznDkyBEA+vbta5TXvHlzvv/+e5o3b86qVav4+OOPCQkJ\nwc7OjqeeeoopU6aYo8j3pbLva225rnr65pUGDRqUyavp66rR6XQ6k7yzEEIIIWoNaZIQQgghRKUk\nYBBCCCFEpSRgEEIIIUSlJGAQQgghRKUkYBBCCCFEpSRgEEIIIUSlJGAQQgghRKUkYBBCCCFEpSRg\nEEIIIUSlJGAQQgghRKUkYBBCCCFEpSRgEEIIIUSlJGAQQgghRKUkYBBCCCFEpSRgEEIIIUSlJGAQ\nQgghRKUkYBBCCCFEpSRgEEIIIUSltOYugKW6ceMGR48exdXVFVtbW3MXRwghhDCp4uJiMjMzadeu\nHY6OjmXyJWCowNGjRwkNDTV3MYQQQogatXbtWgICAsqkS8BQAVdXV0D9w7m7u5u5NEIIIYRppaWl\nERoaarj/3U4ChgromyHc3d3x9vY2c2keLLmFuWTkZJB+PZ2MnAxyC3OxtbHFVmOLrY0tWhst9R3q\n413PG08XT+xs7cxdZCGEqDUqaoaXgEGYXV5hHkcyjpCQmkDipUSy87Pv+rUajYamzk3xrufNI66P\n4Ofuh7O9swlLK4QQDyYJGIRZ5Bfl878L/yMhLYGTWScpLim+p/fR6XSkXU8j7XoacSlxxPwaw8Ou\nD9PZo7MED0IIUY0kYBA1Kr/o/7N352FRlusDx78z7CDKJiCiouICuLAIImJplktpLlm2Wpm/TFMz\nS0tRPJaWmpWm56SZ5bFVLbHUSjvuRIosKiIo4pIoq4AgIjDM/P7g8tUJtFGBYbk/1+V1Mc/7zLz3\nWM7cPMv9lLDn7B52pO7gSumVKvuYqk1xtnHGpYkLzjbONLVoilanpVxbTrmunLLyMrKKsrhQeIGs\noix0Op3yXK1OS2JWIolZiXx99GuCWgYxoP0AWjZtWVtvUQghGiRJGESt+KdEoY1dG/xc/eju2p0W\nTVqgUqkMft30K+mcyj1F7MVYTuedVq5pdVoOpB3gQNoBujh3YaDnQDo4dDD4tYUQQtwgCYOoURlX\nMoj8K5Ko81EUlRbpXXO0duSBtg/g5+qHo7XjXb2+hakFHnYeeNh58GC7B8krziM2PZZDFw5xNv+s\n0u9Y1jGOZR2jrX1bHvd+nPYO7e/lbQkhRKMjCYOodmXlZcSlx7H/r/2kXEqpdN3R2pHBnoPp1aoX\n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\nEjs7O9q2batcNzc3p1u3bkpScbPc3FwyMzNZtGgRS5YsUdo1Gg3l5eWUlpZibm7+j+/Lw8ND77Gt\nrS1lZRWjty+99BITJ06kV69e+Pn50adPHx599FEsLKon2bvdvaubJAyNQP61fFbGrFS+7KBiR8CE\nHhOwt7I3YmT1h425Da8Hv86nMZ+SlJ0EwO4zu7l87TJj/cbWq6JVQhjLzV+SZmZm2NnZ6Y0mXHc9\nMQCqnIu/VZJuaWlZZbtWq63ydczMKv7dzpkzh6CgoErXDV0HUFVScX0EskePHuzdu5fIyEgiIyP5\n5ptv+PTTT9mwYQMdOnSo8vU0Go1B9/2ne1c3+bWygbtYeJEF+xboJQvB7sFMD5kuycIdsjC1YFLQ\nJHq49VDa4tLjWHpgqdRqEOIOdejQgfz8fADatGlDmzZtcHd3Z+nSpRw6dOiuXtPT05P8/HxOnz6t\ntJWWlpKQkICnpyegn2zY2tri4uJCWlqaEkObNm2IiopizZo1qNX3/hW5YsUK4uLieOihh5g3bx47\nduzAzMyMPXv2ABVJy5UrN0ruX7lyhUuXLt3zfWuCJAwNWEFJAcsPLqegpACoKFD0hM8TvOD7gvxG\nfJdM1aa85P8SD7R9QGk7lXuKD6I+4NLVuvmPXIi6qFevXvj6+jJ16lRiYmI4c+YMs2fPZteuXXTs\n2PGuXjM4OBg/Pz/efPNNYmNjOXnyJDNnzqSgoIDRo0cDYGNjQ2ZmJufPn0ej0TBhwgTWrl3L+vXr\n+euvv9iyZQsLFy6stu2LFy5cYN68eRw8eJALFy7w888/U1hYSPfu3QHw9fVl27ZtxMfHk5KSwttv\nv11t6xuqmyQMDVRZeRmfHvqU3OJcoKK+wGvBr9G/XX+Zc79H1xOvUd43Cr+kF6azMHIh5y+fN2Jk\nQtQfKpWKf//733h6ejJx4kRGjBjB2bNnWbNmjTIacDevuWLFCtq2bcv48eMZPXo0+fn5fPvtt8r6\niZEjR1JeXs7DDz/M8ePHeeqpp5g2bRpr1qzh4YcfZunSpUycOJFJkyZVy/ucPXs2wcHBvPHGGwwc\nOJC1a9fy/vvvK1Mg06ZNo3Pnzrzwwgu8+OKL+Pv74+/vXy33rm4qnSz1rtL1/a7X9+nWJzqdjjXx\nazh0oWJYT6VSMSloEl2cuxg5sobn0IVDrD28Fo22Ys7RwtSCcf7j6ObSzciRCSHEnfmn7z0ZYWiA\n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\nCxxIgk0HAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(2, 1, 1)\n", + "\n", + "plot(system.results.G, 'b-', label='simulation')\n", + "plot(data.glucose, style='bo', label='glucose data')\n", + "decorate(ylabel='mg/dL')\n", + "\n", + "subplot(2, 1, 2)\n", + "\n", + "plot(system.results.X, style='g-', label='remote insulin')\n", + "\n", + "decorate(xlabel='Time (min)', \n", + " ylabel='Arbitrary units')\n", + "\n", + "savefig('chap08-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Numerical solution\n", + "\n", + "We can do the same thing using `odeint`. Instead of an update function, we provide a slope function that just evaluates the right-hand side of the differential equations. We don't have to do the update part; `odeint` does it for us." + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: derivatives of G and X\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " return dGdt, dXdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-5.9399999999999995, 0.0)" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `System` object we use with `run_odeint` is almost the same as the one we used with `run_simulation`, but instead of providing `t0`, `t_end`, and `dt`, we provide an array of times where we want to evaluate the solution. In this case, we use `data.index`, so the results are evaluated at the same times as the measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system2 = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " ts=data.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`run_odeint` is a wrapper for `scipy.integrate.odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource run_odeint" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 179 ms\n" + ] + } + ], + "source": [ + "%time run_odeint(system2, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
time
0290.0000000.000000
2278.4419460.000148
4267.2463390.001463
6255.7911540.003294
8244.3850490.004280
10233.3856890.004877
12222.8753910.005391
14212.8831040.005807
16203.4326040.006108
19190.3111060.006378
22178.4307230.006560
27161.1412930.006767
32146.6273080.006957
42124.2722570.007043
52109.1259280.006436
6299.3105540.005632
7293.1024550.004786
8289.4343590.003872
9287.4980850.002986
10286.7126500.002313
12286.8448660.001199
14288.3567580.000232
16290.136930-0.000339
18291.795663-0.000810
\n", + "
" + ], + "text/plain": [ + " G X\n", + "time \n", + "0 290.000000 0.000000\n", + "2 278.441946 0.000148\n", + "4 267.246339 0.001463\n", + "6 255.791154 0.003294\n", + "8 244.385049 0.004280\n", + "10 233.385689 0.004877\n", + "12 222.875391 0.005391\n", + "14 212.883104 0.005807\n", + "16 203.432604 0.006108\n", + "19 190.311106 0.006378\n", + "22 178.430723 0.006560\n", + "27 161.141293 0.006767\n", + "32 146.627308 0.006957\n", + "42 124.272257 0.007043\n", + "52 109.125928 0.006436\n", + "62 99.310554 0.005632\n", + "72 93.102455 0.004786\n", + "82 89.434359 0.003872\n", + "92 87.498085 0.002986\n", + "102 86.712650 0.002313\n", + "122 86.844866 0.001199\n", + "142 88.356758 0.000232\n", + "162 90.136930 -0.000339\n", + "182 91.795663 -0.000810" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system2.results" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the results from `run_simulation` and `run_odeint`, we can see that they are not very different." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system.results.G, 'r-')\n", + "plot(system2.results.G, 'b-')\n", + "plot(data.glucose, 'bo')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The differences are usually less than 1% and always less than 2%." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
2-0.115624-100.000000
4-0.109838-79.488129
60.197156-19.008861
80.280333-5.584132
100.222571-4.045820
120.146387-2.574882
140.047791-1.457351
16-0.070980-0.241936
22-0.5067050.770903
32-1.1351760.739019
42-1.5535181.669890
52-1.8241492.322664
62-1.8770011.900503
72-1.7640222.270604
82-1.5745392.091263
92-1.3466862.279411
102-1.0931000.658312
122-0.6766482.068862
142-0.393212-3.390112
162-0.1871464.346125
182-0.0772051.148839
\n", + "
" + ], + "text/plain": [ + " G X\n", + "2 -0.115624 -100.000000\n", + "4 -0.109838 -79.488129\n", + "6 0.197156 -19.008861\n", + "8 0.280333 -5.584132\n", + "10 0.222571 -4.045820\n", + "12 0.146387 -2.574882\n", + "14 0.047791 -1.457351\n", + "16 -0.070980 -0.241936\n", + "22 -0.506705 0.770903\n", + "32 -1.135176 0.739019\n", + "42 -1.553518 1.669890\n", + "52 -1.824149 2.322664\n", + "62 -1.877001 1.900503\n", + "72 -1.764022 2.270604\n", + "82 -1.574539 2.091263\n", + "92 -1.346686 2.279411\n", + "102 -1.093100 0.658312\n", + "122 -0.676648 2.068862\n", + "142 -0.393212 -3.390112\n", + "162 -0.187146 4.346125\n", + "182 -0.077205 1.148839" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff = system.results - system2.results\n", + "percent_diff = diff / system2.results * 100\n", + "percent_diff.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** What happens to these errors if you run the simulation with a smaller value of `dt`?" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " t0=0, t_end=182, dt=0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "run_simulation(system, update_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GX
2.0-0.024355-24.503098
4.00.001998-19.477825
6.00.060399-4.663370
8.00.069468-1.374614
10.00.054099-0.997428
12.00.033978-0.637032
14.00.008702-0.362880
16.0-0.021713-0.064782
19.0-0.0744360.152854
22.0-0.1276400.153329
27.0-0.2095950.255111
32.0-0.2772390.134593
42.0-0.3790390.372308
52.0-0.4456360.537464
62.0-0.4586290.438228
72.0-0.4327210.531732
82.0-0.3871860.489863
92.0-0.3322650.534441
102.0-0.2697000.136737
122.0-0.1685020.473270
142.0-0.098135-0.925831
162.0-0.0472141.111370
182.0-0.0199500.295936
\n", + "
" + ], + "text/plain": [ + " G X\n", + "2.0 -0.024355 -24.503098\n", + "4.0 0.001998 -19.477825\n", + "6.0 0.060399 -4.663370\n", + "8.0 0.069468 -1.374614\n", + "10.0 0.054099 -0.997428\n", + "12.0 0.033978 -0.637032\n", + "14.0 0.008702 -0.362880\n", + "16.0 -0.021713 -0.064782\n", + "19.0 -0.074436 0.152854\n", + "22.0 -0.127640 0.153329\n", + "27.0 -0.209595 0.255111\n", + "32.0 -0.277239 0.134593\n", + "42.0 -0.379039 0.372308\n", + "52.0 -0.445636 0.537464\n", + "62.0 -0.458629 0.438228\n", + "72.0 -0.432721 0.531732\n", + "82.0 -0.387186 0.489863\n", + "92.0 -0.332265 0.534441\n", + "102.0 -0.269700 0.136737\n", + "122.0 -0.168502 0.473270\n", + "142.0 -0.098135 -0.925831\n", + "162.0 -0.047214 1.111370\n", + "182.0 -0.019950 0.295936" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff = system.results - system2.results\n", + "percent_diff = diff / system2.results * 100\n", + "percent_diff.dropna()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimization" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's find the parameters that yield the best fit for the data." + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k1 = 0.03\n", + "k2 = 0.02\n", + "k3 = 1e-05\n", + "G0 = 290" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, we'll get basal levels from the initial values." + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "Gb = data.glucose[0]\n", + "Ib = data.insulin[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the slope function is the same." + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the glucose minimal model.\n", + " \n", + " state: State object\n", + " t: time in min\n", + " system: System object\n", + " \n", + " returns: derivatives of G and X\n", + " \"\"\"\n", + " G, X = state\n", + " unpack(system)\n", + " \n", + " dGdt = -k1 * (G - Gb) - X*G\n", + " dXdt = k3 * (I(t) - Ib) - k2 * X\n", + " \n", + " return dGdt, dXdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system` takes the parameters and `DataFrame` and returns a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(G0, k1, k2, k3, data):\n", + " \"\"\"Makes a System object with the given parameters.\n", + " \n", + " G0: initial blood glucose\n", + " k1: rate parameter\n", + " k2: rate parameter\n", + " k3: rate parameter\n", + " data: DataFrame\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(G=G0, X=0)\n", + " system = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " Gb=Gb, Ib=Ib, \n", + " I=interpolate(data.insulin),\n", + " ts=data.index)\n", + " return system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`error_func` takes the parameters and actual data, makes a `System` object and runs it, then compares the results of the simulation to the data. It returns an array of errors." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(params, data):\n", + " \"\"\"Computes an array of errors to be minimized.\n", + " \n", + " params: sequence of parameters\n", + " data: DataFrame of values to be matched\n", + " \n", + " returns: array of errors\n", + " \"\"\"\n", + " print(params)\n", + " \n", + " # make a System with the given parameters\n", + " system = make_system(*params, data)\n", + " \n", + " # solve the ODE\n", + " run_odeint(system, slope_func)\n", + " \n", + " # compute the difference between the model\n", + " # results and actual data\n", + " error = system.results.G - data.glucose\n", + " return error.loc[8:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When we call `error_func`, we provide a sequence of parameters as a single object." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 0.01, 0.001, 1e-08)" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = G0, k1, k2, k3\n", + "params" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how that works:" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 0.01, 0.001, 1e-08)\n" + ] + }, + { + "data": { + "text/plain": [ + "time\n", + "8 -231.080574\n", + "10 -205.435564\n", + "12 -198.823159\n", + "14 -191.242718\n", + "16 -180.693607\n", + "19 -174.427333\n", + "22 -152.228118\n", + "27 -139.706434\n", + "32 -115.356749\n", + "42 -91.140297\n", + "52 -66.516359\n", + "62 -48.428356\n", + "72 -35.825191\n", + "82 -24.660549\n", + "92 -25.892563\n", + "102 -21.483375\n", + "122 -16.608003\n", + "142 -11.797688\n", + "162 -10.859071\n", + "182 -12.633904\n", + "dtype: float64" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`fit_leastsq` is a wrapper for `scipy.optimize.leastsq`" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource fit_leastsq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.00000000e+00 1.00000000e-02 1.00000000e-03 1.00000000e-08]\n", + "[ 2.00000000e+00 1.00000000e-02 1.00000000e-03 1.00000000e-08]\n", + "[ 2.00000000e+00 1.00000000e-02 1.00000000e-03 1.00000000e-08]\n", + "[ 2.00000003e+00 1.00000000e-02 1.00000000e-03 1.00000000e-08]\n", + "[ 2.00000000e+00 1.00000001e-02 1.00000000e-03 1.00000000e-08]\n", + "[ 2.00000000e+00 1.00000000e-02 1.00000001e-03 1.00000000e-08]\n", + "[ 2.00000000e+00 1.00000000e-02 1.00000000e-03 1.00000001e-08]\n", + "[ 2.62182900e+02 -2.48827294e-02 4.70044133e+01 -2.47869878e-07]\n", + "[ 3.06034227e+01 4.28304495e-02 -2.85448077e-02 3.00549226e-07]\n", + "[ 3.06034232e+01 4.28304495e-02 -2.85448077e-02 3.00549226e-07]\n", + "[ 3.06034227e+01 4.28304501e-02 -2.85448077e-02 3.00549226e-07]\n", + "[ 3.06034227e+01 4.28304495e-02 -2.85448073e-02 3.00549226e-07]\n", + "[ 3.06034227e+01 4.28304495e-02 -2.85448077e-02 3.00549230e-07]\n", + "[ 9.48112971e+01 6.83473218e-02 2.19005226e-02 6.75875660e-07]\n", + "[ 9.48112985e+01 6.83473218e-02 2.19005226e-02 6.75875660e-07]\n", + "[ 9.48112971e+01 6.83473229e-02 2.19005226e-02 6.75875660e-07]\n", + "[ 9.48112971e+01 6.83473218e-02 2.19005229e-02 6.75875660e-07]\n", + "[ 9.48112971e+01 6.83473218e-02 2.19005226e-02 6.75875670e-07]\n", + "[ 9.81001806e+01 6.47626171e-02 8.56111739e-03 -3.40556503e-06]\n", + "[ 9.81001820e+01 6.47626171e-02 8.56111739e-03 -3.40556503e-06]\n", + "[ 9.81001806e+01 6.47626181e-02 8.56111739e-03 -3.40556503e-06]\n", + "[ 9.81001806e+01 6.47626171e-02 8.56111751e-03 -3.40556503e-06]\n", + "[ 9.81001806e+01 6.47626171e-02 8.56111739e-03 -3.40556498e-06]\n", + "[ 9.89633338e+01 5.43602046e-02 5.39325062e-02 -1.15013927e-05]\n", + "[ 9.89633352e+01 5.43602046e-02 5.39325062e-02 -1.15013927e-05]\n", + "[ 9.89633338e+01 5.43602054e-02 5.39325062e-02 -1.15013927e-05]\n", + "[ 9.89633338e+01 5.43602046e-02 5.39325070e-02 -1.15013927e-05]\n", + "[ 9.89633338e+01 5.43602046e-02 5.39325062e-02 -1.15013926e-05]\n", + "[ 3.20174914e+02 2.46446187e-02 9.63991666e-02 2.48981984e-06]\n", + "[ 3.20174919e+02 2.46446187e-02 9.63991666e-02 2.48981984e-06]\n", + "[ 3.20174914e+02 2.46446191e-02 9.63991666e-02 2.48981984e-06]\n", + "[ 3.20174914e+02 2.46446187e-02 9.63991680e-02 2.48981984e-06]\n", + "[ 3.20174914e+02 2.46446187e-02 9.63991666e-02 2.48981988e-06]\n", + "[ 3.02340007e+02 4.67726922e-02 3.12157687e-01 -1.33542524e-05]\n", + "[ 3.02340012e+02 4.67726922e-02 3.12157687e-01 -1.33542524e-05]\n", + "[ 3.02340007e+02 4.67726929e-02 3.12157687e-01 -1.33542524e-05]\n", + "[ 3.02340007e+02 4.67726922e-02 3.12157691e-01 -1.33542524e-05]\n", + "[ 3.02340007e+02 4.67726922e-02 3.12157687e-01 -1.33542522e-05]\n", + "[ 3.02942852e+02 4.78931830e-02 3.15163441e-01 -1.34902668e-05]\n", + "[ 3.02942856e+02 4.78931830e-02 3.15163441e-01 -1.34902668e-05]\n", + "[ 3.02942852e+02 4.78931837e-02 3.15163441e-01 -1.34902668e-05]\n", + "[ 3.02942852e+02 4.78931830e-02 3.15163446e-01 -1.34902668e-05]\n", + "[ 3.02942852e+02 4.78931830e-02 3.15163441e-01 -1.34902666e-05]\n", + "[ 3.03836025e+02 4.74289617e-02 3.14534670e-01 -1.35716169e-05]\n", + "[ 3.03836025e+02 4.74289617e-02 3.14534670e-01 -1.35716169e-05]\n", + "[ 3.03836025e+02 4.74289617e-02 3.14534670e-01 -1.35716169e-05]\n", + "[ 3.03836025e+02 4.74289617e-02 3.14534670e-01 -1.35716169e-05]\n", + "[ 3.02865155e+02 4.74571658e-02 3.14635099e-01 -1.35299983e-05]\n", + "[ 3.02580400e+02 4.77067816e-02 3.14993020e-01 -1.35054320e-05]\n", + "[ 3.02754347e+02 4.78045540e-02 3.15106430e-01 -1.34977431e-05]\n", + "[ 3.02847904e+02 4.78496126e-02 3.15139861e-01 -1.34939854e-05]\n", + "[ 3.02891683e+02 4.78699104e-02 3.15151806e-01 -1.34922621e-05]\n", + "[ 3.02919182e+02 4.78824715e-02 3.15158345e-01 -1.34911876e-05]\n", + "[ 3.02930848e+02 4.78877617e-02 3.15160915e-01 -1.34907333e-05]\n", + "[ 3.02936823e+02 4.78904627e-02 3.15162187e-01 -1.34905010e-05]\n", + "[ 3.02939838e+02 4.78918240e-02 3.15162818e-01 -1.34903839e-05]\n", + "[ 3.02941349e+02 4.78925054e-02 3.15163132e-01 -1.34903252e-05]\n", + "[ 3.02942103e+02 4.78928457e-02 3.15163287e-01 -1.34902959e-05]\n", + "[ 3.02942480e+02 4.78930154e-02 3.15163365e-01 -1.34902813e-05]\n", + "[ 3.02942668e+02 4.78931001e-02 3.15163404e-01 -1.34902740e-05]\n", + "[ 3.02942761e+02 4.78931421e-02 3.15163423e-01 -1.34902704e-05]\n", + "[ 3.02942807e+02 4.78931630e-02 3.15163432e-01 -1.34902686e-05]\n", + "[ 3.02942830e+02 4.78931734e-02 3.15163437e-01 -1.34902677e-05]\n", + "[ 3.02942841e+02 4.78931782e-02 3.15163439e-01 -1.34902673e-05]\n", + "[ 3.02942847e+02 4.78931808e-02 3.15163440e-01 -1.34902670e-05]\n", + "modsim.py: scipy.optimize.leastsq ran successfully\n", + " and returned the following message:\n", + "The relative error between two consecutive iterates is at most 0.000000\n" + ] + } + ], + "source": [ + "best_params = fit_leastsq(error_func, params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have `best_params`, we can use it to make a `System` object and run it.\n", + "\n", + "We have to use the scatter operator, `*`, to make `best_params` behave like four separate parameters, rather than a single object." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = make_system(*best_params, data)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results, along with the data. The first few points of the model don't fit the data, but we don't expect them to." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nUAIhhBDilf8HLO/KBARK0JEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system.results.G, label='simulation')\n", + "plot(data.glucose, style='bo', label='glucose data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration (mg/dL)')\n", + "\n", + "savefig('chap08-fig04.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Since we don't expect the first few points to agree, it's probably better not to make them part of the optimization process. We can ignore them by leaving them out of the `Series` returned by `error_func`. Modify the last line of `error_func` to return `errors.loc[8:]`, which includes only the elements of the `Series` from `t=8` and up.\n", + "\n", + "Does that improve the quality of the fit? Does it change the best parameters by much?\n", + "\n", + "Note: You can read more about this use of `loc` [in the Pandas documentation](https://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-integer)." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#isnt this already from 8 up?\n", + "\n", + "def error_func(params, data):\n", + " \"\"\"Computes an array of errors to be minimized.\n", + " \n", + " params: sequence of parameters\n", + " data: DataFrame of values to be matched\n", + " \n", + " returns: array of errors\n", + " \"\"\"\n", + " print(params)\n", + " \n", + " # make a System with the given parameters\n", + " system = make_system(*params, data)\n", + " \n", + " # solve the ODE\n", + " run_odeint(system, slope_func)\n", + " \n", + " # compute the difference between the model\n", + " # results and actual data\n", + " error = system.results.G - data.glucose\n", + " return error.loc[8:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** How sensitive are the results to the starting guess for the parameters. If you try different values for the starting guess, do we get the same values for the best parameters?" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.71898433e+02 2.67985448e-02 1.21544443e-02 1.07084478e-05]\n", + "[ 3.02942852e+02 4.78931830e-02 3.15163441e-01 -1.34902668e-05]\n" + ] + } + ], + "source": [ + "print(best_params)\n", + "print(best_params2)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "k1 = 0.01\n", + "k2 = 0.001\n", + "k3 = 1e-08\n", + "G0 = 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Interpreting parameters\n", + "\n", + "Based on the parameters of the model, we can estimate glucose effectiveness and insulin sensitivity." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def indices(G0, k1, k2, k3):\n", + " \"\"\"Compute glucose effectiveness and insulin sensitivity.\n", + " \n", + " G0: initial blood glucose\n", + " k1: rate parameter\n", + " k2: rate parameter\n", + " k3: rate parameter\n", + " data: DataFrame\n", + " \n", + " returns: State object containing S_G and S_I\n", + " \"\"\"\n", + " return State(S_G=k1, S_I=k3/k2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
S_G0.026799
S_I0.000881
\n", + "
" + ], + "text/plain": [ + "S_G 0.026799\n", + "S_I 0.000881\n", + "dtype: float64" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "indices(*best_params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The insulin minimal model\n", + "\n", + "In addition to the glucose minimal mode, Pacini and Bergman present an insulin minimal model, in which the concentration of insulin, $I$, is governed by this differential equation:\n", + "\n", + "$ \\frac{dI}{dt} = -k I(t) + \\gamma (G(t) - G_T) t $" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write a version of `make_system` that takes the parameters of this model, `I0`, `k`, `gamma`, and `G_T` as parameters, along with a `DataFrame` containing the measurements, and returns a `System` object suitable for use with `run_simulation` or `run_odeint`.\n", + "\n", + "Use it to make a `System` object with the following parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "I0 = 360\n", + "k = 0.25\n", + "gamma = 0.004\n", + "G_T = 80" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(I0, k, gamma, G_T, data):\n", + " init = State(I=I0)\n", + " system = System(init=init, k=k, gamma=gamma, G_T=G_T, ts=data.index, G=interpolate(data.glucose))\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
initI 360\n", + "dtype: int64
k0.25
gamma0.004
G_T80
tsInt64Index([ 0, 2, 4, 6, 8, 10, 12,...
G<scipy.interpolate.interpolate.interp1d object...
\n", + "
" + ], + "text/plain": [ + "init I 360\n", + "dtype: int64\n", + "k 0.25\n", + "gamma 0.004\n", + "G_T 80\n", + "ts Int64Index([ 0, 2, 4, 6, 8, 10, 12,...\n", + "G " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_odeint(insulin_system, slope_func)\n", + "\n", + "print(insulin_system.results)\n", + "\n", + "plot(data.insulin, 'go', label='insulin data')\n", + "plot(insulin_system.results, color='green', label='odeint')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n", + "\n", + "savefig('chap08-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "_Markdown_ $a^2$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Write an error function that takes a sequence of parameters as an argument, along with the `DataFrame` containing the measurements. It should make a `System` object with the given parameters, run it, and compute the difference between the results of the simulation and the measured values. Test your error function by calling it with the parameters from the previous exercise.\n", + "\n", + "Hint: As we did in a previous exercise, you might want to drop the errors for times prior to `t=8`." + ] + }, + { + "cell_type": "code", + "execution_count": 259, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(params, data):\n", + " system = make_system(*params, data)\n", + " run_odeint(system, slope_func)\n", + " error = system.results.I - data.insulin\n", + " return error.loc[8:]" + ] + }, + { + "cell_type": "code", + "execution_count": 260, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(360, 0.25, 0.004, 80)" + ] + }, + "execution_count": 260, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params = I0, k, gamma, G_T\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 261, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "time\n", + "8 10.636133\n", + "10 -3.234670\n", + "12 -7.946879\n", + "14 -8.010268\n", + "16 -3.593411\n", + "19 1.811071\n", + "22 2.581632\n", + "27 7.014287\n", + "32 3.758216\n", + "42 8.932902\n", + "52 9.554216\n", + "62 0.767804\n", + "72 -3.217947\n", + "82 -10.382598\n", + "92 -7.401702\n", + "102 -9.056569\n", + "122 -3.584244\n", + "142 -3.586427\n", + "162 3.170251\n", + "182 18.702699\n", + "dtype: float64" + ] + }, + "execution_count": 261, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(params, data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Use `fit_leastsq` to find the parameters that best fit the data. Make a `System` object with those parameters, run it, and plot the results along with the measurements." + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "modsim.py: scipy.optimize.leastsq ran successfully\n", + " and returned the following message:\n", + "The relative error between two consecutive iterates is at most 0.000000\n" + ] + } + ], + "source": [ + "best_params = fit_leastsq(error_func, params, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 267, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "better_system = make_system(*best_params, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 268, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(better_system, slope_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 269, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(data.insulin, 'ro', label='insulin data')\n", + "plot(better_system.results, 'g-', label='simulation results')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Using the best parameters, estimate the sensitivity to glucose of the first and second phase pancreatic responsivity:\n", + "\n", + "$ \\phi_1 = \\frac{I_{max} - I_b}{k (G_0 - G_b)} $\n", + "\n", + "$ \\phi_2 = \\gamma \\times 10^4 $" + ] + }, + { + "cell_type": "code", + "execution_count": 271, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "I 6.779535\n", + "dtype: float64" + ] + }, + "execution_count": 271, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(*best_params, data)\n", + "unpack(system)\n", + "theta1 = (better_system.results.max() - data.insulin[0]) / (k * (290 - data.glucose[0]))\n", + "theta1" + ] + }, + { + "cell_type": "code", + "execution_count": 272, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "38.301171870899175" + ] + }, + "execution_count": 272, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(*best_params, data)\n", + "unpack(system)\n", + "theta2 = gamma * 10**4\n", + "theta2" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap09mine.ipynb b/code/chap09mine.ipynb new file mode 100644 index 00000000..6703ae80 --- /dev/null +++ b/code/chap09mine.ipynb @@ -0,0 +1,1942 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 9: Projectiles\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Dropping pennies\n", + "\n", + "I'll start by getting the units we'll need from Pint." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m = UNITS.meter\n", + "s = UNITS.second\n", + "kg = UNITS.kilogram" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And defining the initial state." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
y381 meter
v0.0 meter / second
\n", + "
" + ], + "text/plain": [ + "y 381 meter\n", + "v 0.0 meter / second\n", + "dtype: object" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(y=381 * m, \n", + " v=0 * m/s)\n", + "init" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Acceleration due to gravity is about 9.8 m / s$^2$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "g = 9.8 * m/s**2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "When we call `odeint`, we need an array of timestamps where we want to compute the solution.\n", + "\n", + "I'll start with a duration of 10 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 0. 0.34482759 0.68965517 1.03448276 1.37931034 1.72413793 2.06896552 2.4137931 2.75862069 3.10344828 3.44827586 3.79310345 4.13793103 4.48275862 4.82758621 5.17241379 5.51724138 5.86206897 6.20689655 6.55172414 6.89655172 7.24137931 7.5862069 7.93103448 8.27586207 8.62068966 8.96551724 9.31034483 9.65517241 10. ] second" + ], + "text/latex": [ + "$[ 0. 0.34482759 0.68965517 1.03448276 1.37931034 1.72413793 2.06896552 2.4137931 2.75862069 3.10344828 3.44827586 3.79310345 4.13793103 4.48275862 4.82758621 5.17241379 5.51724138 5.86206897 6.20689655 6.55172414 6.89655172 7.24137931 7.5862069 7.93103448 8.27586207 8.62068966 8.96551724 9.31034483 9.65517241 10. ] second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duration = 10 * s\n", + "ts = linspace(0, duration, 30)\n", + "ts" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now we make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = System(init=init, g=g, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And define the slope function." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing `g`\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system) \n", + "\n", + " dydt = v\n", + " dvdt = -g\n", + " \n", + " return dydt, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "It's always a good idea to test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 seconds\n", + "0.0 meter / second\n", + "-9.8 meter / second ** 2\n" + ] + } + ], + "source": [ + "dydt, dvdt = slope_func(init, 0, system)\n", + "print(dydt)\n", + "print(dvdt)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now we're ready to run `odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 second seconds\n", + "0.0 seconds\n", + "1.194418165246393e-05 seconds\n", + "1.194418165246393e-05 seconds\n", + "2.388836330492786e-05 seconds\n", + "2.388836330492786e-05 seconds\n", + "0.11946570488794424 seconds\n", + "0.23890752141258353 seconds\n", + "0.35834933793722284 seconds\n", + "1.5527675031836161 seconds\n", + "2.747185668430009 seconds\n", + "3.9416038336764023 seconds\n", + "15.885785486140335 seconds\n" + ] + } + ], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's what the results look like." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
0.000000381.0000000.000000
0.344828380.417360-3.379310
0.689655378.669441-6.758621
1.034483375.756243-10.137931
1.379310371.677765-13.517241
\n", + "
" + ], + "text/plain": [ + " y v\n", + "0.000000 381.000000 0.000000\n", + "0.344828 380.417360 -3.379310\n", + "0.689655 378.669441 -6.758621\n", + "1.034483 375.756243 -10.137931\n", + "1.379310 371.677765 -13.517241" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
8.62069016.850178-84.482759
8.965517-12.864447-87.862069
9.310345-43.744352-91.241379
9.655172-75.789536-94.620690
10.000000-109.000000-98.000000
\n", + "
" + ], + "text/plain": [ + " y v\n", + "8.620690 16.850178 -84.482759\n", + "8.965517 -12.864447 -87.862069\n", + "9.310345 -43.744352 -91.241379\n", + "9.655172 -75.789536 -94.620690\n", + "10.000000 -109.000000 -98.000000" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The following function plots the results." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_position(results):\n", + " \"\"\"Plot the results.\n", + " \n", + " results: DataFrame with position, `y`\n", + " \"\"\"\n", + " newfig()\n", + " plot(results.y, label='y')\n", + " \n", + " decorate(xlabel='Time (s)',\n", + " ylabel='Position (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap09-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_position(system.results)\n", + "savefig('chap09-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Add a print statement to `slope_func` to print the value of `t` each time it's called. What can we infer about how `odeint` works, based on the results?" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing `g`\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system) \n", + "\n", + " dydt = v\n", + " dvdt = -g\n", + " \n", + " print(t,'seconds')\n", + " return dydt, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**Exercise:** Change the value of `dt` and run the solver again. What effect does it have on the results?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Onto the sidewalk\n", + "\n", + "Here's the code again to set up the `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(duration, v_init=0):\n", + " \"\"\"Make a system object.\n", + " \n", + " duration: time of simulation in seconds\n", + " v_init: initial velocity, dimensionless\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " init = State(y=381 * m, v=v_init * m / s)\n", + "\n", + " g = 9.8 * m/s**2\n", + " ts = linspace(0, duration, 11)\n", + " return System(init=init, g=g, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 seconds\n", + "0.0 seconds\n", + "1.2391823754412774e-05 seconds\n", + "1.2391823754412774e-05 seconds\n", + "2.478364750882555e-05 seconds\n", + "2.478364750882555e-05 seconds\n", + "0.12394302119163657 seconds\n", + "0.2478612587357643 seconds\n", + "0.37177949627989204 seconds\n", + "1.6109618717211696 seconds\n", + "2.850144247162447 seconds\n", + "4.089326622603725 seconds\n", + "16.481150377016498 seconds\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
0.0381.00.0
1.0376.1-9.8
2.0361.4-19.6
3.0336.9-29.4
4.0302.6-39.2
5.0258.5-49.0
6.0204.6-58.8
7.0140.9-68.6
8.067.4-78.4
9.0-15.9-88.2
10.0-109.0-98.0
\n", + "
" + ], + "text/plain": [ + " y v\n", + "0.0 381.0 0.0\n", + "1.0 376.1 -9.8\n", + "2.0 361.4 -19.6\n", + "3.0 336.9 -29.4\n", + "4.0 302.6 -39.2\n", + "5.0 258.5 -49.0\n", + "6.0 204.6 -58.8\n", + "7.0 140.9 -68.6\n", + "8.0 67.4 -78.4\n", + "9.0 -15.9 -88.2\n", + "10.0 -109.0 -98.0" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(10)\n", + "run_odeint(system, slope_func)\n", + "system.results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "To figure out when the penny hit the sidewalk, we use `interp_inverse`, which return a function that maps from height to time." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "y = system.results.y\n", + "T = interp_inverse(y, kind='cubic')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "`T(0)` interpolates the time when the height was 0." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(8.81792826905006)" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T_sidewalk = T(0)\n", + "T_sidewalk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can compare that to the exact result. Without air resistance, we have\n", + "\n", + "$v = -g t$\n", + "\n", + "and\n", + "\n", + "$y = 381 - g t^2 / 2$\n", + "\n", + "Setting $y=0$ and solving for $t$ yields\n", + "\n", + "$t = \\sqrt{\\frac{2 y_{init}}{g}}$" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sqrt(2 * init.y / g)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The estimate is accurate to 4 decimal places." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "We can double-check by running the simulation for the estimated flight time." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 seconds\n", + "0.0 seconds\n", + "1.2373598314419205e-05 seconds\n", + "1.2373598314419205e-05 seconds\n", + "2.474719662883841e-05 seconds\n", + "2.474719662883841e-05 seconds\n", + "0.1237607303408209 seconds\n", + "0.24749671348501295 seconds\n", + "0.371232696629205 seconds\n", + "1.6085925280711255 seconds\n", + "2.845952359513046 seconds\n", + "4.083312190954967 seconds\n", + "16.45691050537417 seconds\n" + ] + } + ], + "source": [ + "system = make_system(duration=T_sidewalk)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And checking the final state." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def final_state(results):\n", + " \"\"\"Returns the final position and velocity, with units.\n", + " \n", + " results: TimeFrame with y and v.\n", + " \n", + " returns: y, v at t_end\n", + " \"\"\"\n", + " t_end = results.index[-1]\n", + " y, v = results.loc[t_end]\n", + " return y*m, v*m/s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "As expected, the final height is close to 0." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.003708896250259386 meter" + ], + "text/latex": [ + "$-0.003708896250259386 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_final, v_final = final_state(system.results)\n", + "y_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And we can check the final velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-86.41569703669059 meter/second" + ], + "text/latex": [ + "$-86.41569703669059 \\frac{meter}{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And convert to km/h" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-311.0965093320861 kilometer/hour" + ], + "text/latex": [ + "$-311.0965093320861 \\frac{kilometer}{hour}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "km = UNITS.kilometer\n", + "h = UNITS.hour\n", + "v_final.to(km / h)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "If there were no air resistance, the penny would hit the sidewalk (or someone's head) at more than 300 km/h.\n", + "\n", + "So it's a good thing there is air resistance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Try changing the initial velocity and see what effect it has on the time to hot the sidewalk. Sweep a range of values for the initial velocity, from 0 to 25 m/s, and plot `T_sidewalk` as a function of initial velocity. You might find the following function useful.\n", + "\n", + "Things might go horribly wrong for the larger initial velocities. What's going on?" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def flight_time(system):\n", + " \"\"\"Simulates the system and computes flight time.\n", + " \n", + " Uses cubic interpolation.\n", + " \n", + " system: System object\n", + " \n", + " returns: flight time in seconds\n", + " \"\"\"\n", + " run_odeint(system, slope_func)\n", + " y = system.results.y\n", + " inverse = Series(y.index, index=y.values)\n", + " T = interpolate(inverse, kind='cubic')\n", + " T_sidewalk = T(0)\n", + " return T_sidewalk * s" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.\n", + " 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.]\n" + ] + } + ], + "source": [ + "v_0_array = linspace(0,25,26)\n", + "def sweep_speeds(array):\n", + " sweep = SweepSeries()\n", + " for v_0 in array:\n", + " system = make_system(10,v_0)\n", + " sweep[v_0] = flight_time(system).magnitude\n", + " return sweep\n", + "print(v_0_array)" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x_sweep = sweep_speeds(v_0_array)\n", + "plot(x_sweep)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### With air resistance" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we'll add air resistance using the [drag equation](https://en.wikipedia.org/wiki/Drag_equation)\n", + "\n", + "First I'll create a `Condition` object to contain the quantities we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(height = 381 * m,\n", + " v_init = 0 * m / s,\n", + " g = 9.8 * m/s**2,\n", + " mass = 2.5e-3 * kg,\n", + " diameter = 19e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " v_term = 18 * m / s,\n", + " duration = 30 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now here's a version of `make_system` that takes a `Condition` object as a parameter.\n", + "\n", + "`make_system` uses the given value of `v_term` to compute the drag coefficient `C_d`." + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Makes a System object for the given conditions.\n", + " \n", + " condition: Condition with height, g, mass, diameter, \n", + " rho, v_term, and duration\n", + " \n", + " returns: System with init, g, mass, rho, C_d, area, and ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(y=height, v=v_init)\n", + " area = np.pi * (diameter/2)**2\n", + " C_d = 2 * mass * g / (rho * area * v_term**2)\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, rho=rho,\n", + " C_d=C_d, area=area, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Let's make a `System`" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
inity 381 meter\n", + "v 0.0 meter / secon...
g9.8 meter / second ** 2
mass0.0025 kilogram
rho1.2 kilogram / meter ** 3
C_d0.4445009981135434 dimensionless
area0.0002835287369864788 meter ** 2
ts[0.0 second, 0.3 second, 0.6 second, 0.8999999...
\n", + "
" + ], + "text/plain": [ + "init y 381 meter\n", + "v 0.0 meter / secon...\n", + "g 9.8 meter / second ** 2\n", + "mass 0.0025 kilogram\n", + "rho 1.2 kilogram / meter ** 3\n", + "C_d 0.4445009981135434 dimensionless\n", + "area 0.0002835287369864788 meter ** 2\n", + "ts [0.0 second, 0.3 second, 0.6 second, 0.8999999...\n", + "dtype: object" + ] + }, + "execution_count": 126, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's the slope function, including acceleration due to gravity and drag." + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing g, rho,\n", + " C_d, area, and mass\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system)\n", + " \n", + " f_drag = rho * v**2 * C_d * area / 2\n", + " a_drag = f_drag / mass\n", + " \n", + " dydt = v\n", + " dvdt = -g + a_drag\n", + " \n", + " return dydt, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "As always, let's test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, )" + ] + }, + "execution_count": 128, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "And then run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "First check that the simulation ran long enough for the penny to land." + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 130, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Then compute the flight time." + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(22.439794207078908)" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = system.results.y\n", + "inverse = Series(y.index, index=y.values)\n", + "T = interpolate(inverse, kind='cubic')\n", + "T_sidewalk = T(0)\n", + "T_sidewalk" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Setting the duration to the computed flight time, we can check the final conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(duration=T_sidewalk)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "y_final, v_final = final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The final height is close to 0, as expected. And the final velocity is close to the given terminal velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_final, v_final" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Here's the plot of position as a function of time." + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap09-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nASKEEKJD/j8VNerOzMcPPgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_position(system.results)\n", + "savefig('chap09-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And velocity as a function of time:" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_velocity(results):\n", + " \"\"\"Plot the results.\n", + " \n", + " results: DataFrame with velocity, v\n", + " \"\"\"\n", + " newfig()\n", + " plot(results.v, label='v')\n", + " \n", + " decorate(xlabel='Time (s)',\n", + " ylabel='Velocity (m/2)')" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_velocity(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "From an initial velocity of 0, the penny accelerates downward until it reaches terminal velocity; after that, velocity is constant." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Run the simulation with an initial velocity, downward, that exceeds the penny's terminal velocity. Hint: use `condition.set`.\n", + "\n", + "What do you expect to happen? Plot velocity and position as a function of time, and see if they are consistent with your prediction." + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(v_init=-20*m/s)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nI2t/n9LSUnh4eGDDhg04deoUxowZg/j4eDz55JMmyxGMVmPGjMEvfvELk22ffvopNBoNoqOjsXPn\nzhH9/RksYU4SAAADDklEQVTV/wVbW1shlUohl8tNtltbNElMNBoNrly5ArVajRdeeAFZWVnw9/fH\n448/jgsXLji6eLcVjUZjXDyrC79H3crKytDS0oLo6Gjk5ORg2bJleOutt7B7925HF80hvvnmG2zf\nvh0rVqxAaGjoiP/+jOoahVKphMFggE6ng5NT969qbdEkMVEqlfj++++hUCiMX+LXX38dRUVF+Oyz\nz7BlyxYHl/D24ezsjPb2dpNt/B51S09PR0tLCzw9PQEAYWFhaGpqwrvvvovf/e53xmYYMTh48CC2\nbNmChQsXYuPGjQBG/vdnVNcoei6a1FN1dfWAFkAajdzd3U3+pSOVSjFlypQBrU0+mgUGBhoXz+rC\n71E3JycnY0h0CQsLQ3NzM5qamhxUquGXlZWF5ORkPPbYY8jIyDA2u43078+oDorw8HC4ubmZLJpU\nUVGBq1ev9rpokpgUFhYiMjIShYWFxm16vR7nz5/H1KlTHViy209UVBS+//57k20nT560eEtmMUpI\nSMC2bdtMthUUFMDf398sQEarDz74ADt27MCaNWuwZcsWk1rUSP/+jOqgUCgUWLZsGTIyMvCvf/0L\nRUVFWL9+PWbPno177rnH0cVzuPDwcIwfPx4pKSk4e/YsSktLkZycjBs3buCJJ55wdPFuK48//jjy\n8/Px1ltv4cKFC9i5cyfOnj1rc40UsYiNjUVubi7+/Oc/46effsKBAweQnZ2NNWvWOLpow+L8+fPI\nzMzEr371KyQkJKCmpsb4aGlpGfHfn1HdRwF0jFfW6XTYuHEjdDodfv7zn9tcKU8snJyckJ2djYyM\nDDz77LNobW1FZGQk/vSnPw14ydnRKiwsDLt378Ybb7yBDz74AJMnT8a7775rcz15sUhMTISTkxOy\nsrJw7do1jBs3DsnJyXjkkUccXbRhkZeXB71ejy+++AJffPGFyb7nn38ev/nNb0b094frURARkVWj\nuumJiIgGj0FBRERWMSiIiMgqBgUREVnFoCAiIqsYFEREZBWDgoiIrGJQEBGRVQwKIiKy6v8DfFN4\nml8kSNsAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system.results.y)\n", + "newfig()\n", + "plot(system.results.v)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dropping quarters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Suppose we drop a quarter from the Empire State Building and find that its flight time is 19.1 seconds. We can use this measurement to estimate the coefficient of drag.\n", + "\n", + "Here's a `Condition` object with the relevant parameters from\n", + "https://en.wikipedia.org/wiki/Quarter_(United_States_coin)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(height = 381 * m,\n", + " v_init = 0 * m / s,\n", + " g = 9.8 * m/s**2,\n", + " mass = 5.67e-3 * kg,\n", + " diameter = 24.26e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " duration = 19.1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's a modified version of `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Makes a System object for the given conditions.\n", + " \n", + " condition: Condition with height, v_init, g, mass, diameter, \n", + " rho, C_d, and duration\n", + " \n", + " returns: System with init, g, mass, rho, C_d, area, and ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(y=height, v=v_init)\n", + " area = np.pi * (diameter/2)**2\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, rho=rho,\n", + " C_d=C_d, area=area, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can run the simulation with an initial guess of `C_d=0.4`." + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEPCAYAAABsj5JaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XdYlGe+PvD7nWGGofehg0oZbEgTNSoWxJRdl2jUJKtZ\n9bfZRGVNMZueuMluzkZjqnLW7Ime3UPcRKKRJKasokbUJBYUCxaaSh+a9Drt9wcyOkHiiMAwzP25\nLq8rPu+UrxPgy/s87/vcgk6n04GIiOg2iUxdABERmSc2ECIi6hU2ECIi6hU2ECIi6hUrUxcwENra\n2pCdnQ0PDw+IxWJTl0NEZBY0Gg2qqqowZswYyGSybsctooFkZ2dj0aJFpi6DiMgs/fvf/0ZMTEy3\ncYtoIB4eHgA6PwQvLy8TV0NEZB6USiUWLVqk/xn6cxbRQLqmrby8vODn52fiaoiIzEtPU/8W0UB6\nUl3Xir3Hi9DQ3AGxSIBYJEAqEcNWZgUbayvYyiRwtreGk70Uzg4yONhKIAiCqcsmIhoULLqBXLhy\nFdV1rYaDrSpcbbj5462lYng420LuYgMvNzv4eNhBJrXoj5CILJhF//QL8XdGQUkdmlpVRj2+vUOD\nkspGlFQ2AgAEQYC7swx+cgcM93GEl6sdRCKeoRCRZbDoBuLlZoff3TcKKo0WGo0Wao0OHSoNWtvV\naGlToalVhfqmdtQ1duBqQxvaOtQGz9fpdKiqbUVVbSuyciphY22FQC9HhAQ4w1/uwGZCREOaRTcQ\nABCJBFiLxIDkl+8P0el0aGxRobK2BZVXW1Ba1YTK2lbcuBdla7saFwuv4mLhVdhYWyHYzxkjh7nC\nw8WGaydENORYfAMxliAIcLSTwtFOimA/ZwBAu0qDsqomXClvwJWyBjS3XZ8Ka21X42xBNc4WVMPD\n2QajhrshNNAF1rdoVERE5oIN5A5YS8QY7uOE4T5O0EXpUFnbivziOuQV1xqsq1TVtSIjqwQ/ni1D\nWKArwkPc4eLQ/a5OIiJzwgbSRwRBgKerLTxdbTFprDfKqptw8cpV5JfUQ63RAgBUaq3+rGSYtyOi\nFHJ4u9txeouIzBIbSD8QiQT4yR3gJ3fAlAg18orqkF1QjZqGNv1jrpQ34Ep5A7zc7BAdJscwb0c2\nEiIyK2wg/UwmtcLYYHeMCXJDSWUTzuRX40p5g37xXVnTjG9+uAwPZxuMH+WF4T5sJERkHthABogg\nCPD3dIC/pwNqG9uQlVOFnMKr0Gg7G0lVXSu+/bGzkcSO9uIZCRENeswDMQEXBxlmxvjjkftGITJU\nDivx9f8NVXWt+OaHy9j5fT7KqppMWCUR0S9jAzEhexsJJo/zwe/uG4lIhWEjKa9pxs4D+dh16BJq\n6lt/4VWIiEyDU1iDgK1MgsnhPogM9UDmhQpkX6qB9trUVqGyAUUVjRg5zBUTRnvBzkZi4mqJiDrx\nDGQQsZVJEBfph8X3jERYoKt+DUSn0+H85Rps/c8FZF6o0F8WTERkSmwgg5CjnRSzYgPw4KxQBHg6\n6MdVai2OZJfjk90XkV9SZ7CNChHRf/3Xf+FXv/qVwVhRUREUCgUuXLjQ5+/HKaxBzN3ZBr+JC0Kh\nsgE/ni7T30fS0NyB//x0BX5yB8RF+sLVkXe1E/WXrJxKHDuvhEo98Gf+EisRYkd5IVIhN+rxc+fO\nRUpKCs6fP49Ro0YBAL766iuEhYVh5MiRfV4fz0DMQKCXIx5MUGBapJ9B/khJZSO27cnB4dOl6FBp\nTFgh0dB1KrfKJM0D6Jx1OJVbZfTjR40aBYVCga+++ko/9tVXX2Hu3Ln9UR4biLkQiQSMDXbH4nvD\nEB7srl8f0ep0OJVbhU92X0RecS2ntYj6WESoByRWpvlRKbESISL05nnkPZk3bx6+/vpraLVaZGVl\nobS0FHPmzOmX+jiFZWZkUivERfph1HA3HMwqRVl1570iTa0q7D5SiPOeVxEX6cvNGon6SKRCbvQU\n0mAwZ84crF+/HkePHsWePXsQFxcHNze3fnkvnoGYKXdnG8ydHoTZEwJhK7t+aW9xRee01vHzSmh4\ntRaRxXFzc0NcXBz27NmDffv29dv0FcAGYtYEQUBogAsW3ROGccEe+mktjVaHo+eU+DQ9B6W8m53I\n4sybNw87d+5Ee3s7pk+f3m/vwwYyBFhLxJga6YuF8aHwdLXVj9c1tiPtQD72ZxZ3i+MloqFr+vTp\nkMlk+PWvfw2pVNpv78MGMoR4uNjggRkhiIv0hfSG5MPzl2vwye4c5Bfz3hEiS9DU1ITm5mbMmzev\nX9+Hi+hDjEgkIDzYAyN8nXEoqwQFpfUAgJY2Ff5z5AqG+zhhWpQf7LklCtGQU1tbi2PHjuGLL77A\nmDFjMHr06H59PzaQIcreRoJ77xqOgpI6HMwq1ee1Xy6rR2lVEyaH+2DUcFduGU80hKjVarz88suQ\ny+XYuHFjv78fG8gQF+TnDD9PB/x0pgzZl2oAAB0qDb4/UYy84jrMiPaDk721iaskor7g4eGBzMzM\nAXs/roFYAGuJGNOj/TF3ejCcb2gWXXeyn86r4toIEd02NhAL4uthj4dmKxCpkOunrlQaLQ6dKkXa\ngXzUNbabuEIiMidsIBbGSizC5HAfzJ8ZArcbNmEsq27GtvQcnMqt1GeREBH9EjYQC+XpaouFs0Ix\nfqQnRNfORtQaLQ6fLkPagXzUNraZuEIiGuzYQCyYWCzChDHeWBAfCndnG/14eU0zUtNzcTqXayNE\n1DM2EIKHiw0WzAxB7Ggvg7ORQ6dLkXagAPVNXBshou7YQAhA59lI7CivbmcjZdVN2LYnB2fzq3k2\nQkQG2EDIQNfZyI1rIyqNFhlZJfjy4CU0NHeYuEIiGizYQKibrrWR+TNDDOJySyobsS09BxcuX+XZ\nCBGxgVDP5Neu1Iq64b6RDpUG+zKL8O0Pl9FybXsUIrJMbCD0i6zEItwV7oMHZhjexX65vKFzh9+S\nOhNWR0SmxAZCRvFys8ODCaEID3bXj7V1qPGfn65gz9FC5o0QWSA2EDKaxEqMuEg/JMYFGWwHn1tU\ni217clCkbDBhdUQ00Aa8gSiVSjzxxBOIjY1FTEwMnn76aVRUVOiPHz58GImJiQgPD8ecOXOQkZFh\n8Pyamho8+eSTiImJwaRJk7B+/Xqo1fztdyD5ezrg4bvDMHKYq36sqVWFrw5dQsbJEqjUGhNWR0QD\nZUAbiE6nw2OPPYaGhgakpKRg69atqKqqwooVKwAA+fn5WLFiBe655x6kpaUhPj4eSUlJyMvL07/G\nqlWrUF1dja1bt2Lt2rXYuXPngOx7T4asJWLEjw/AfXcNh4319VSAswXVSE3PhbKm2YTVEdFAGNAG\nUl1djaCgILzxxhsICwtDWFgYli5dinPnzqG+vh4pKSmIiIjAihUrEBQUhKeeegqRkZFISUkBAGRl\nZeHEiRNYu3YtwsLCMG3aNDz33HP4+OOP0dHB+xNMYYSvEx6ercBwHyf9WF1TOz7/Ph9Hssuh4caM\nREPWgDYQDw8PvPfee/Dz8wPQOZ2VmpqKsWPHwsnJCZmZmYiNjTV4zoQJE/QBKZmZmfD19YW/v7/+\neGxsLJqbm3HhwoWB+4eQAVuZBPfdNQzxMQH6LHadTofMCxXYsT8XVxu4MSPRUGSyRfSVK1di2rRp\nOH36NN544w0AnQ3F09PT4HFyuRxKpRIAUFFRAblc3u04AJSXlw9A1dQTQRAwcrgrHkpQwMfdXj9e\nVduKz/bmMrSKaAgyWQN58sknsX37dkRFRWHZsmWoqKhAW1sbpFKpweOkUina2zs382ttbYW1tWH8\nqkQigSAI+seQaTnaSTF3ehAmh/tALLphY8ZTpfjq0CU0tXCqkWioMFkDUSgUCA8Px3vvvQetVou0\ntDRYW1tDpTK8u7mjowM2Np2b+8lksm5rHSqVCjqdDra2tgNWO/0yQRAQqZBj4SzDjRmLKxrxaXoO\n8oprTVgdEfWVAV9E/+abbwzGbGxs4O/vj4qKCnh7e6OystLgeGVlpX5ay8vLC1VVVd2OA+g29UWm\n5+bUuTFjdNj1rVDaOzTYfaQQu4/w5kMiczegDaSsrAyrV6/G2bNn9WONjY24fPkygoODER0djePH\njxs85+jRo4iJiQEAREdHo7i42GC94+jRo7Czs0NYWNjA/CPotojFIkwa64O504PgaHd9ejKvuPPm\nw+KKRhNWR0R3YkAbyJgxYxATE4NXXnkFZ86cwfnz5/HUU0/B1dUV999/PxYvXozMzExs2LABBQUF\n+OCDD3D69GksWbIEABAZGYmIiAg8/fTTOHfuHDIyMrB+/XosW7as29oJDS4+7vZ4KEHR7ebDLw8W\n4PDpUqg1WhNWR0S9MaANRCQSYePGjRg5ciQef/xxLF68GHZ2dti6dSvs7OygUCiQnJyM3bt34/77\n78f+/fvx4YcfIigoCEDn3HpycjLc3NywaNEivPTSS1iwYAGSkpIG8p9BvSS9dvPhvZOGQSa9fvPh\nqdwqbN+bi+q6VhNWR0S3S9BZwLWVJSUliI+Px759+/T3oJBptbSpsO94MQpv2D9LJBIwcbQ3IkI9\nILp2BRcRmc6tfnZyM0UyCVuZBL+eMhzTovxgJe78MtRqdfjxbBm+PFjA5EMiM8AGQiYjCALGBrnj\nwYRQyF2uX4ZdWtWEbek5yClk8iHRYMYGQibn4iDDA9dy2G9MPkw/VsSsEaJBjA2EBgWxSMCEMd54\nYEbwzy73rePlvkSDFBsIDSpebnZ4KEGBUcO7X+77w+kyaHi5L9GgwQZCg45UIsbMmM6skRsv983K\nrcT2/XmoqeflvkSDARsIDVpdWSMBXg76seq6zt19T+VWcoGdyMTYQGhQs7ORYM6UEZgWef1yX41W\nh8Ony/DlQe7uS2RKbCA06AmCgLHB7lg4KxQeLtd39y2p7NzdN7+4zoTVEVkuNhAyG66OMsyfEYLo\nME+D3X3/c+QK9h4rRIdKY+IKiSwLGwiZlc7dfb0xd5rh7r4XC2uxLT0H5dXNJqyOyLKwgZBZ8vGw\nx4MJCigCXPRjDc0d2HkgH0eyy6HRcoGdqL9Z3fohnYqKinD06FGUlJSgqakJLi4u8Pb2xpQpUxjm\nRCZhLREjYUIgAr0dkZFVgvYODXQ6HTIvVKC4ohGzYgPg4iAzdZlEQ9YtG8jevXvxj3/8A9nZ2dDp\ndHB0dISNjQ0aGhrQ2toKQRAQHh6Oxx9/HDNnzhyImokMhAa4wMfdDnuPF6GksgkAUHG1BZ+l52JK\nhC9GDXfVr5kQUd/psYGUlpbihRdeQEFBAWbPno3Vq1dj7NixsLe31z+moaEBJ06cwMGDB/H8888j\nODgYb731Fvz9/QekeKIu9rZSJMYF4VRulX4KS6XR4vsTxbhS3oAZ0X6wlUlMXSbRkNJjA3nkkUfw\n+9//HgsXLoREcvNvPEdHR8yYMQMzZszA888/j23btmHJkiXYv39/vxVM1BNBEBCpkMPf0wF7jhbi\nakMbAOByWT0qrrYgPsYfgd6OJq6SaOjosYF88cUXcHQ0/ptNJpNh6dKlmDt3bp8URtRb7s42WDgr\nFD+eKcOZ/GoAnQFWuw5fwtggd9wV7gOJFa8fIbpTPX4X3U7zuJGTk1OviyHqK1ZiEeIi/TBn6giD\nqauzBdXYvi8XVbXcT4voThl1FVZHRwc++eQTZGVlobGx+7bagiBgy5YtfV4c0Z0K9HLEQwmh+P5E\nCS6X1QMArja0Yfv+XEwc7Y1IhQcX2Il6yagG8pe//AU7duxASEgInJ2d+7smoj5lK5PgvruG4fzl\nqzh8qhQqjVYfn1uobEBCbADsbaW3fiEiMmBUA0lPT8cTTzyBlStX9nc9RP1CEASMHuEGXw97pB8r\nRMXVFgCd8bmfpudgepQfQvxdbvEqRHQjo1YSBUFAREREf9dC1O+cHawxb4ZhfG57hwa7jxRi77FC\ntHM/LSKjGdVA5s6dix07dkCrZRocmb+u+Nx504O77aeVmp6DsuomE1ZHZD6MmsJ68sknMXfuXNx9\n990YPXo0bGxsDI4LgoC//e1v/VIgUX/xdu+Mzz2YVYKLhbUAOvfTSjtQgOgwOcaP8oJYxAV2op4Y\n1UDefvttXL58GQ4ODjh//ny347yKhcyVVCLGrNjO/bQOnOy+n1ZCbCCcHaxNXSbRoGRUA/niiy/w\nhz/8AatXr2azoCEpxN8F3m52SD9WhNKq6/tppabncD8toh4YtQYiFosxefJkfgPRkGZvK8X904Jw\nV7gPRNemrrr20/rupytobVebtkCiQcaoBjJnzhzs2LGjv2shMjlBEBClkGPBzFC4Ol7fCv5SaT22\n7clBkbLBhNURDS5GTWG5ubkhLS0NCQkJGDt2LOzs7AyOC4KAv/zlL/1SIJEpeLjYYEF8535aZws6\n99NqblPhq0OXMC7YA5PCvWEl5n5aZNmMaiDbt2+Hk5MTNBoNTp061e04p7ZoKJJYiTAtyg/DvB2x\n93iRfgrrdH4VSiobkTAhEO7ONrd4FaKhy6gGwu3ZyZIFejvi4dkKfJ9ZjMvlnVNYNQ1t2L4vF5PG\nemNcCPfTIsvU4zl4cXFxr16wt88jGsxsZRLcN3k4pkf56aeuNFodDp8uw1eHLqGpVWXiCokGXo8N\nZMmSJXjnnXdQV1dn1AtVVlZi7dq1WLJkSZ8VRzSYCIKAMUHueDAhFHIXW/14cUUjtu3JQX6Jcd8r\nRENFjw1k586dKCsrw9SpU7F8+XKkpaUhPz8fbW2dKW9NTU3Iz89HamoqkpKSMHPmTCiVSl6tRUOe\ni4MMD8wIRnTY9f202jrU+M9PV7DveBE6uJ8WWYge10CcnZ3xzjvv4MyZM9i8eTNeffVVaDTdvzGs\nra0RFxeHTz75BOHh4f1aLNFgIRaLMGmsNwK8HJB+tFA/hXXhylWUVTcjITYAXm52t3gVIvN2y0X0\n8PBwbNiwAS0tLcjMzERxcTGamprg4uICHx8fxMTEQCaT3epliIYkXw97PDRbgYyTpcgr7txPq76p\nHTu/z0fMKE/EhHnqb0okGmqMugoLAGxtbREXF9eftRCZJZnUCndPDMQwbwdkZJWiQ6WBVqfDsXNK\nFCsbMSs2AE723E+Lhh7eCUXURxSBrngoQQEf9+tTV+U1zUjdm4uLhVeh0+lMWB1R32MDIepDjnZS\n3D8tGBPHeEN0bYG9Q6XB3mNF2HO0EG0d3E+Lhg42EKI+JhIJiBnpiQdmhsD5hqmrvOI6bNuTg5LK\nRhNWR9R32ECI+omnqy0eTAjF6BFu+rGmVhW+PHgJP54pg0bDhE8ybwPeQKqrq/H8889jypQpiImJ\nwe9//3vk5ubqjx8+fBiJiYkIDw/HnDlzkJGRYfD8mpoaPPnkk4iJicGkSZOwfv16qNWcFqDBSWIl\nxoxof9x313DIpJ3XrOh0OpzMqcSO/Xm42tBm4gqJes+oq7B0Oh127tyJAwcOoKWlpdtioCAI2LJl\nyy1fR6vV4o9//CN0Oh3+/ve/w9bWFhs3bsTSpUvxzTffoKamBitWrMDKlSsxe/Zs7Nq1C0lJSUhL\nS0NISAgAYNWqVRAEAVu3bkVFRQVeeOEFWFlZ4emnn+7FP59oYIzwdYKnqy32HS9CUUXnFFZVXSs+\n25uLyeE+GBPkxv20yOwYdQby7rvv4uWXX8aFCxfQ3t4OlUpl8Kejo8OoN7t48SKysrLwt7/9DeHh\n4QgODsb69evR0tKCjIwMpKSkICIiAitWrEBQUBCeeuopREZGIiUlBQCQlZWFEydOYO3atQgLC8O0\nadPw3HPP4eOPPza6BiJTsbORYM7UEZg6zlefta7WaJGRVYJvfriMljbup0XmxagzkLS0NCxbtgzP\nP//8Hb2Zt7c3/vGPf2D48OH6sa7fuurr65GZmYl7773X4DkTJkzAN998AwDIzMyEr68v/P399cdj\nY2PR3NyMCxcuYNy4cXdUH1F/EwQB40I94Odpjz1Hi1BT3woAuFLegE/35CB+fACGeTuauEoi4xh1\nBtLU1IQZM2bc8Zu5uLhg+vTpEImuv+3HH3+MtrY2TJkyBUqlEp6engbPkcvlUCqVAICKigrI5fJu\nxwGgvLz8jusjGihuTjZYEB+CiFAP/VhruxpfH76EAydLoFJzgZ0GP6MaSGRkJE6ePNnnb75v3z68\n++67WLZsGYKCgtDW1gapVGrwGKlUivb2dgBAa2srrK0N7+iVSCQQBEH/GCJzYSUWYco4XyTGBcFO\nJtGPZxdU47O9uaiqbTVhdUS3ZtQU1vLly/HMM89ArVYjKirqpntfRUVF3dYb79y5E6+++iruu+8+\nPPvsswA6N2ZUqQzngTs6OmBj05n6JpPJuq11qFQq6HQ62Nragsgc+Xs64KHZChw4UYyC0noAQG1j\nG7bvz8XE0d6IVDCwigYnoxpIV8ZHcnIyAMMIW51OB0EQcOHCBaPfdNOmTXj//fexePFivPLKK/rX\n8/b2RmVlpcFjKysr9dNaXl5e3S7r7Xr8z6e+iMyJjbUV7pk0DOcvX8XhU6VQabTQanX48WwZCpUN\nSIgNgL2t9NYvRDSAjGogXVdB9YWPPvoI77//Pp544gkkJSUZHIuOjsbx48cNxo4ePYqYmBj98bff\nfhvl5eXw9vbWH7ezs0NYWFif1UhkCoIgYPQIN/h62CP9WCEqrrYAAEqrmvBpeg6mR/khxN/FxFUS\nXWdUA4mNje2TN7t48SLee+89PPDAA1i4cCGqqqr0x+zs7LB48WI88MAD2LBhA371q1/h66+/xunT\np/Haa68B6FyLiYiIwNNPP41XX30V1dXVWL9+PZYtW9Zt7YTIXDk7WGPejBAcP6/EiYuV0Ol0aO/Q\nYPeRQhSWNyIu0hdSidjUZRIZv517QUEBNm7ciGPHjqGxsREuLi6IiYnBypUrERwcbNRrfPvtt9Bo\nNPj888/x+eefGxx78sknsXLlSiQnJ2P9+vX46KOPMGLECHz44YcICgoC0PkbWnJyMl577TUsWrQI\ndnZ2WLBgQbczGSJzJxYJmDimM7Bq77EiNDR3rv1dLLyKsuomJMQGwtudgVVkWoLOiD2mc3Jy8PDD\nD8PGxgYzZ86Em5sbqqqq8P3336O1tRXbtm2DQqEYiHp7paSkBPHx8di3bx/8/PxMXQ7RbWlXaXAo\nqwQXC2v1Y4IgYPxIT8SMZGAV9Z9b/ew06gzk7bffxogRI5CSkmJwtVNLSwuWLl2K999/H5s2beq7\nqolIz1oixqzYQAR4OSLjZAnaVRrodDocO6+8tsAeCGcHBlbRwDPqPpDMzEwsX76826Wytra2ePTR\nR5GZmdkvxRHRdaEBLnhotgK+Hvb6sYqrLUjdm4Pzl2sYWEUDzqgG0nUfxs0IggCNRtNnBRFRzxxs\npUiMC8KksdcDq1RqLfZnFuM/RwrR1s6dqWngGNVAIiIi8NFHH3W727utrQ2bN29GZGRkvxRHRN2J\nRAKiwzwxf2aIwdRVQUkdtqXnoLiCgVU0MIxaA3nmmWcwf/58xMfHY+bMmXB3d0d1dTX279+P5uZm\n/Pvf/+7vOonoZ+SutnhwVih+OF2G7Es1ALoCqwoQGSrHxDFeEIuZGUf9x6gGEhQUhG3btuG///u/\nsW/fPtTX18PR0RHjx49HUlISQkND+7tOIroJiZUY06P9EejtiP2ZxWi9NoWVlVuJ4spGJMQGwM2p\n5yloojth9H0gCoUCGzZs6M9aiKiXhvs44eHZtth7vAhFys4prOq6Vmzfl4e7wr0xNsid+2lRn+ux\ngezatQtTp06Fs7Mzdu3adcsXmjNnTp8WRkS3x1YmwZwpI3C2oBo/nimHWqOFWqPFwaxSFJY3In68\nP2xv2PWX6E712ECeffZZfPbZZ3B2dtbvltsTQRDYQIgGAUEQEB7scW0/rSJU13VuCV+o7Aysmhnj\nj+E+TiaukoaKHhvIvn374OHhof9vIjIfbk42WDAzBEfOKZGV07ljdWu7Gt/8cBljRrhh8jhfSKy4\nwE53psevIF9fX/0GhcePH4etrS18fX27/ZFKpdi9e/eAFUxExhGLRZgc7oPEuCDY29wQWHWpBql7\nc1B5bbdfot4y6leQF198EcXFxTc9duHCBbz33nt9WhQR9R1/Twc8lKBAkJ+zfqyusR079ufhxMUK\naLW8g516p8cprMcffxz5+fkAOkOjkpKSbrplek1NDQICAvqvQiK6YzJrK9wzMRAXrzji4KnOzHWt\nToefzpajSNmIWbEBcGBgFd2mHhvIihUrsGPHDgDAjh07MHbsWLi6uho8RiQSwdHREXPnzu3fKono\njgmCgJHDXeHjYYc9Rw0Dq7btycG0KD+EBjCwiozXYwOJiIhAREQEAECj0WDlypXw9/cfsMKIqH84\n2XcGVp24UIHjFyo6A6tUGuw5WogiZQPiIv0YWEVGMepGwjfffLO/6yCiASQWCYgd7QV/TwekHyu8\nIbCqFmXVzQysIqP02EDGjBmDTz75BOHh4Rg9evQt72LNzs7u8+KIqH95u9vhoQQFDt4QWNXQ3IGd\nB/IRHSbH+FFeEDOwinrQYwNZvnw5PD099f/NbRCIhibptcCqQG9HHDhZgvaOzsCqzAsVKK5oZGAV\n9ajHBvLHP/5R/9+rVq0akGKIyHRC/F3g7WaH9GNFKK1qAnA9sGpqhC9GDnPlL5JkwOhbUYuLi1FQ\nUAAAaGxsxBtvvIE//vGP+Prrr/utOCIaWPa2Utw/LQh3hfvos9b1gVU/XWFgFRkwqoFkZGTg3nvv\n1V/Wu2bNGnz66acoLS3Fs88+qx8nIvMnCAKiFHLMnxkCFweZfrygtJ6BVWTAqAayadMmTJkyBUlJ\nSWhoaEB6ejoee+wxpKWl4bHHHsP//d//9XedRDTA5C62WDgrFGOC3PVjXYFVh0+XQq3RmrA6GgyM\naiAXL17EkiVLYG9vj4MHD0Kj0eDuu+8GAEyePBmFhYX9WiQRmYbESoTpUX741eThsLG+vmR6KrcK\nO/bnoaa+1YTVkakZ1UCsra2h0WgAAIcPH4abmxvCwsIAANXV1XB0dOy/ConI5DoDqxQI9Lr+vV5d\n14rP9uayQqB3AAAYpUlEQVTidF4VdDrup2WJjLqRMCoqClu2bEF9fT12796t37okOzsbycnJiI6O\n7tciicj0bGUS/HrKcGQX1OCHM2VQa7TQaHU4dKoUhcoGxMcEwM6GgVWWxKgzkJdeeglKpRLPPPMM\nfH19sWLFCgCdGy6q1Wr86U9/6tciiWhwEAQBY4PdsXBWKNydr2etFykbsS09B5fL6k1YHQ00o85A\n/P398e2336Kmpgbu7tcX1DZt2oSRI0dCIuFvHUSWxNVRpg+sOpXbOYVlGFjlA4kV99Ma6oxqIEDn\nbx51dXXYs2cPmpqa4OLigqioKDYPIgvVFVgV4OmAfceL0NSqAtAZWFVS1YTZsYGQu9qauErqT0Y1\nEK1WizVr1uDzzz83WCwTBAGJiYl48803eYcqkYXqCqw6cLIE+SV1AK4HVsWO9kKUQq6/KZGGFqPW\nQP7nf/4HX3zxBZ555hlkZGTg3LlzOHDgAFavXo1vvvkGmzdv7u86iWgQk1lb4e6JgZg1PkCfta7V\n6XAkuxxfZBTod/ulocWoBrJjxw4sX74cjz76KDw9PSEWi+Hl5YU//OEPePzxx3knOhFBEASEDXPF\nQwkKeLld3wq+rLoJqek5yC2qNWF11B+MaiBVVVU9XqobFRWF8vLyPi2KiMyXk7015k0PRuwoL/3U\ndldgVfrRQrSrNCaukPqKUQ3E398fWVlZNz2WlZUFDw+PPi2KiMyb6Fpg1QMzguFodz1rPaeoFqnp\nOSi7ttsvmTejGsj8+fPx4Ycf4l//+hcqKyuh1WpRWVmJf/7zn/jHP/6BefPm9XedRGSGvNw6A6tG\nDnPVjzU0dyAtowA/nS2HRss72M2ZUVdhPfLII7hw4QLWrl2LdevW6cd1Oh1+85vf6G8sJCL6OalE\njPjxAQj0csT3J4v1gVUnLlagpJKBVebMqAYiFouxbt06PProo8jMzER9fT0cHR0xfvx4hISE9HeN\nRDQEBPs7w8vNFnuPF6Gk8obAqvQcTInwxajhDKwyN7dsINXV1SgrK0NAQABCQkLYMIio1+xtpUiM\nC0JWbhWOZJdDq9VBpdHi+xPFKFQ2YEa0v8GuvzS49fh/qqOjAy+++CK+++47/c2D9957L/785z/D\nyclpwAokoqGlK7DKX+6A9GOFuNrQBgC4VFqPipoWxI/3R4AXd/g2Bz02kA8++ADfffcdHnjgAYwa\nNQqXL19GamoqtFot3n///YGskYiGIA8XGyyID8WPZ8pwtqAaANDcpsJXhy5hXIgHJo31hpXY6NRt\nMoEeG8iePXuQlJSEpKQk/ZhCocCf//xntLe3w9qai15EdGckViJMi/JDoLcj9h0vQuu1zPXTeVUo\nqWzC7AkBcHOyucWrkKn02N6VSiViY2MNxqZNmwa1Wo2SkpJ+L4yILMcwb0c8PFuBYd7Xp65q6q8F\nVuUysGqw6rGBqFSqbmcZLi4uAID29vb+rYqILI6tTIJfTR6OaVF++qkrjVaHQ6dLsevQJTRf2+2X\nBo9eTTD21W8Da9aswcsvv2wwdvjwYSQmJiI8PBxz5sxBRkaGwfGamho8+eSTiImJwaRJk7B+/Xqo\n1eo+qYeITEsQBIwN6gys8rgxsKqiEZ/uYWDVYNOrBnKn12rrdDp88MEHSE1NNRjPz8/HihUrcM89\n9yAtLQ3x8fFISkpCXl6e/jGrVq1CdXU1tm7dirVr12Lnzp3YuHHjHdVDRIOLq6MM82eGIEoh1/+8\naevoDKz6/kQxVGrupzUY/OIF12+88Qbs7e31f+8683j99ddhZ3d9t01BELBlyxaj3rC4uBgvvfQS\n8vLy4OPjY3AsJSUFERER+jvbn3rqKZw4cQIpKSn461//iqysLJw4cQJ79+6Fv78/wsLC8Nxzz+Gv\nf/0rkpKSIJVKb/aWRGSGxGIR7gr3QYCXA/Yeux5Yde5SDUorm5AwIRCeDKwyqR7PQMaPHw9ra2uo\nVCr9H7VajfHjx0MqlRqMd3QYv9f/yZMn4e3tjV27dsHPz8/gWGZmZreF+wkTJiAzM1N/3NfXF/7+\n/vrjsbGxaG5uxoULF4yugYjMh5/cAQ/NViDE31k/VtfUjs/35yHzQgW03E/LZHo8A/n444/75Q0T\nExORmJh402NKpRKenp4GY3K5HEqlEgBQUVEBuVze7TgAlJeXY9y4cf1QMRGZmkxqhdkTAhHo7YiD\nWaXoUGn0gVVFykbMig0w2PWXBsagukunra2t2zSUVCrVX/XV2tra7cowiUQCQRB4ZRjRECcIAsIC\nXfHgrNBugVXbGFhlEoOqgXRNmd2oo6MDNjadV2PIZLJu02UqlQo6nQ62tpwLJbIE+sCq0V4QXVtg\n77gWWLX7SCHaOnhV5kAZVA3E29sblZWVBmOVlZX6aS0vLy9UVVV1Ow6g29QXEQ1dIpGA2FFemPez\nwKq84lqkpucysGqADKoGEh0djePHjxuMHT16FDExMfrjxcXFBhG6R48ehZ2dHcLCwga0ViIyvZsF\nVjW2MLBqoAyqBrJ48WJkZmZiw4YNKCgowAcffIDTp09jyZIlAIDIyEhERETg6aefxrlz55CRkYH1\n69dj2bJlvISXyEJ1BVbdM2kYrKViANAHVn2+Pw+1jW0mrnDoGlQNRKFQIDk5Gbt378b999+P/fv3\n48MPP0RQUBCAzkW05ORkuLm5YdGiRXjppZewYMECgw0ficgyBfs54+EEBfzkDvqxytoWfJaei3OX\narifVj8QdBbwqZaUlCA+Ph779u3rdu8JEQ0tOp0Op3Kr8NO1wKouw32cMDOGgVW341Y/OwfVGQgR\n0Z0SBAGRCjkWzAyFq6NMP365rB6f7slBobLBhNUNLWwgRDQkebjYYOGsUIQHu+vHWtpU2HXoEg5l\nlUKt0ZqwuqGBDYSIhiwrsQhxkX6YM2WEwdTV6fwqbN+bi5r6VhNWZ/7YQIhoyAu8Flg1/MbAqoY2\nBlbdITYQIrIItjIJ7ps8HNNvElj11aFL+t1+yXhsIERkMQRBwJggdzz4s8Cq4opGbNuTg4KSOhNW\nZ37YQIjI4rj0EFj13U9XsD+TgVXGYgMhIovUFViVGDcC9jYS/fj5yzVITc9FxdUWE1ZnHthAiMii\nMbCq99hAiMjidQVWzYoNgFTSuZ9WV2DVFxn5aGg2PnXVkrCBEBHBMLDK2yCwqhnb0nOQU3jVhNUN\nTmwgREQ3cLK3xtzpwZjws8Cq9GNFDKz6GTYQIqKfEYkEjL8WWOVkfz1Gm4FVhthAiIh60BlYFYpR\nw28WWFUGjYXvp8UGQkT0CyRWYsyMCcC9k4ZBJu3cT6szsKoSn3+fb9GBVWwgRERGCPJzxkOzFfD3\n7B5YlV1QbZH7abGBEBEZyd5Ggt9MHYEp43wgFnUusKs0Whw4WYJvf7yCljbL2k+LDYSI6DYIgoCI\nUDkWxHcPrNqWnmtRgVVsIEREveDu3HNg1cGsEosIrGIDISLqpRsDq2xl1/fTOpNfje17c1FdN7QD\nq9hAiIjuUKC3Ix5KCO0WWLV9Xy5O5VYO2QV2NhAioj7QU2DV4dNlQzawig2EiKiPGARWuQz9wCo2\nECKiPubiKMP8GT0FVhUNmcAqNhAion7QFVh1/7SgnwVWXR0ygVVsIERE/cjXw/5aYJWLfmyoBFax\ngRAR9bPOwKoAJNwksCrtQD7qm9pNXGHvsIEQEQ0AQRCguElgVXlNM1L35iKn8KrZXe7LBkJENIC6\nAqsmjvHuFli152iRWQVWsYEQEQ0wkUhAzEhPzJsRDOefBVZt25ODUjMJrGIDISIyES83Ozz4s8Cq\nplYVvjCTwCo2ECIiE/qlwKod3+ehtmHwBlaxgRARDQI3C6yqqm1F6t7BG1jFBkJENEh0BVZNHeer\nD6xSdwVW/XB50AVWsYEQEQ0igiBgXKgHFsSHwu3GwKryhs7AqvLBE1jFBkJENAi5O9tgwaxQjAv2\n0I+1tKmw6/DgCaxiAyEiGqSsxCJMjfTFnKndA6s+GwSBVWwgRESDXKDXtcAqHyf92NVrgVVZOaYL\nrGIDISIyA7YyCe67axhmRPtDckNg1Q9nyvDlQdMEVrGBEBGZCUEQMHqEGxYmhELuYqsfL6nsDKzK\nH+DAKjYQIiIz4+IgwwMzghEd5mkQWPWfnwY2sMosG4hGo8E777yDKVOmIDIyEk888QSqq6tNXRYR\n0YARi0WYNNb7poFV29Jzoaxp7vcazLKBbNy4EWlpaVi3bh22bt0KpVKJVatWmbosIqIBd7PAqvqm\nduz8Ph/Hzyv7NbDK7BpIR0cHUlJSsHr1akyePBmjR4/Gu+++i5MnT+LkyZOmLo+IaMDJpFa4e2Jg\nt8Cqo+eU/RpYZXYN5OLFi2hubkZsbKx+zM/PD76+vsjMzDRhZUREpqUIdMVDCQr4uHcPrLrYD4FV\nZtdAlEolAMDT09NgXC6X648REVkqRzsp7p/WPbBq77Ei7Dla2KeBVWbXQFpbWyESiSCRSAzGpVIp\n2tvNM1eYiKgvdQVWPTAz5GeBVXV9Glhldg1EJpNBq9VCrTbsoh0dHbCxsTFRVUREg4+nqy0eTAjF\n6BFu+rGuwKofz9x5YJXZNRBvb28AQFVVlcF4ZWVlt2ktIiJLJ7ESY0a0P+67a7hBYNXJnErs2J+H\nq3cQWGV2DSQsLAx2dnY4duyYfqykpASlpaUYP368CSsjIhq8Rvg64aHZCgTcGFhV14rP9ubibC8D\nq6z6ssCBIJVK8dvf/hZvvfUWXFxc4Obmhtdffx2xsbGIiIgwdXlERIOWvY0Ec6aOwJm8avx4tgwa\nrQ5qjRYZJ0ugrG7GrNgA/Z3txjC7BgIATz31FNRqNZ599lmo1WpMnToVa9asMXVZRESDXldglZ+n\nPfYcKUTNtSmsnKJaxIz0hMsNIVa3YpYNxMrKCi+88AJeeOEFU5dCRGSW3Jw6A6t+OluOc5dq4OYk\ng6Od9LZewywbCBER3TkrsQhTI3xxV7gPBHRe/ntbz++fsoiIyFyIb7NxdLGIBqLRdG5tzDvViYiM\n1/Uzs+tn6M9ZRAPpumdk0aJFJq6EiMj8VFVVITAwsNu4oDNVmO4AamtrQ3Z2Njw8PCAWi01dDhGR\nWdBoNKiqqsKYMWMgk3W/OssiGggREfU9s7sTnYiIBgc2ECIi6hU2ECIi6hU2ECIi6hU2ECIi6hWL\nbSAajQbvvPMOpkyZgsjISDzxxBOorq42dVlmLT8/HwqFotsfZtXfvjVr1uDll182GDt8+DASExMR\nHh6OOXPmICMjw0TVmZ+bfZ7z58/v9rX688fQL7OIGwlvZuPGjUhLS8O6devg7OyM119/HatWrcKn\nn35q6tLMVm5uLlxcXLBr1y6DcWdnZxNVZH50Oh02bNiA1NRUzJ8/Xz+en5+PFStWYOXKlZg9ezZ2\n7dqFpKQkpKWlISQkxIQVD249fZ46nQ75+fl4++23MXHiRP04U01vj0U2kI6ODqSkpOCVV17B5MmT\nAQDvvvsu4uPjcfLkSURFRZm4QvOUm5uL4OBgeHh4mLoUs1RcXIyXXnoJeXl58PHxMTiWkpKCiIgI\nrFixAkBnpMGJEyeQkpKCv/71r6Yod9D7pc+zuLgYra2tiIiI4NfrHbDIKayLFy+iubkZsbGx+jE/\nPz/4+vpyuuUO5OXlYcSIEaYuw2ydPHkS3t7e2LVrF/z8/AyOZWZmGny9AsCECRP49foLfunzzM3N\nhUwmg6+vr4mqGxos8gyka4Own2eoy+Vybrh4B/Ly8tDe3o6FCxeitLQUISEhWL16NcLDw01dmllI\nTExEYmLiTY8plUp+vd6mX/o88/Ly4ODggD/96U84duwYXFxcMG/ePCxZsgQikUX+Xt0rFvlJtba2\nQiQSQSKRGIxLpVK0t7ebqCrz1tbWhuLiYjQ1NeG5557Dpk2bIJfLsXjxYhQUFJi6PLPX1tYGqdQw\n7Idfr72Xn5+PlpYWTJkyBVu2bMFvf/tbbNiwAcnJyaYuzaxY5BmITCaDVquFWq2GldX1j6Cjo4OL\naL0kk8lw/PhxSKVS/Q+6tWvX4ty5c/jkk0/w6quvmrhC82ZtbQ2VSmUwxq/X3lu3bh1aWlrg6OgI\nAFAoFGhsbMSHH36IVatW3VYuuCWzyDMQb29vANe3ee9SWVnZbZqAjGdvb2/wW7JIJEJwcDDKy8tN\nWNXQ4O3tjcrKSoMxfr32npWVlb55dFEoFGhubkZjY6OJqjI/FtlAwsLCYGdnh2PHjunHSkpKUFpa\nivHjx5uwMvOVnZ2NqKgoZGdn68c0Gg0uXrzIy0z7QHR0NI4fP24wdvToUcTExJioIvO2cOFCvPHG\nGwZjZ8+ehVwu79ZYqGcW2UCkUil++9vf4q233sLBgwdx7tw5rF69GrGxsYiIiDB1eWYpLCwMvr6+\nWLNmDU6fPo28vDy8+OKLqK2txe9+9ztTl2f2Fi9ejMzMTGzYsAEFBQX44IMPcPr0aSxZssTUpZml\nhIQEpKam4osvvkBRURG2b9+OzZs344knnjB1aWbFItdAgM7r6NVqNZ599lmo1WpMnToVa9asMXVZ\nZsvKygqbN2/GW2+9heXLl6O1tRVRUVHYunUr3NzcTF2e2VMoFEhOTsb69evx0UcfYcSIEfjwww8R\nFBRk6tLM0qOPPgorKyts2rQJZWVl8PHxwYsvvogFCxaYujSzwkApIiLqFYucwiIiojvHBkJERL3C\nBkJERL3CBkJERL3CBkJERL3CBkJERL1isfeBEP3cCy+8gLS0tF98TGxsLD7++GM88sgjEIvF+Ne/\n/jUwxd1EXV0d5s2bh3/+858IDAy85eOTk5NRXV2N1157rf+LI4vA+0CIrikqKsLVq1f1f3/99dch\nFovxyiuv6Mfs7e0RHByM/Px8CIJg0hv5nnnmGXh6euK5554z6vFtbW2455578Oabb2LSpEn9XB1Z\nAp6BEF0TEBCAgIAA/d/t7e0hFotvur1NcHDwQJbWzZkzZ7B7924cPHjQ6OfIZDIsXboUb775Jr76\n6qt+rI4sBddAiHrhkUcewdKlS/V/VygUSE1NxZ/+9CdERkZi4sSJSE5ORlNTE1588UVER0dj8uTJ\nWL9+PW486a+trcUrr7yCSZMmITw8HA8//DBOnDhxy/ffvHkz7rrrLri6uurHsrOzsWTJEkRHRyMy\nMhJLly7FqVOnDJ533333IS8vDwcOHLjjz4CIDYSoj6xbtw4uLi74+9//jhkzZmDjxo2YP38+bGxs\nkJycjISEBGzevBl79uwBALS3t2Pp0qU4cOAAVq9ejQ0bNsDJyQlLly7FmTNnenyf5uZm7N+/H7Nn\nz9aPNTU14dFHH4WLiws2btyI9957D62trXj00UfR1NSkf5xcLkdkZCR27drVfx8EWQxOYRH1kdGj\nR+Pll18G0Lk78c6dO+Hm5qbfpHPixInYtWsXTp06hbvvvhtffvklcnJysH37dowdOxYAEBcXh/nz\n5+O9997DP//5z5u+T2ZmJlQqlUFUcH5+vn7n46ioKADAiBEjkJqaiubmZtjb2+sfO2bMGHz77bf9\n8hmQZeEZCFEfufEHuouLC8RiscGYIAhwcnJCQ0MDAOCnn36Cp6cnRo4cCbVaDbVaDa1WixkzZuD4\n8ePo6Oi46fuUlJQAAPz8/PRjISEhcHV1xfLly7FmzRqkp6fD3d0dzz77bLfQKV9fX1RVVfX4+kTG\n4hkIUR+xs7PrNmZra9vj4+vq6qBUKjF69OibHq+trb1p4mBXYt6NcbZ2dnb497//jU2bNuG7775D\namoqZDIZEhMT8corrxgkRXbV1NTUZLCGQnS72ECITMTBwQFBQUFYt27dTY+7uLj84nhjY6NBet6I\nESOwfv16aDQanDlzBl9++SU+/fRTDBs2DP/v//0//ePq6+shEong5OTUh/8askScwiIykfHjx6Os\nrAxyuRxjx47V/9m3bx8+/vhjSCSSmz7Px8cHAKBUKvVj6enpmDhxIqqqqiAWixEZGYnXXnsNjo6O\n3TLplUol5HI5xGJx//3jyCKwgRCZyLx58+Dp6Ylly5bhyy+/xJEjR7B27Vps2rQJ/v7+EAThps+L\niYmBTCYzuNw3KioKOp0OSUlJ2Lt3L3766SesWbMGTU1NBldrAcDJkycxZcqUfv23kWVgAyEyka51\ni3HjxmHt2rV47LHHcOjQIbz66qtYtWpVj8+zsbFBXFycwU2Ebm5u2LJlCxwcHPDyyy/j8ccfx7lz\n57Bx40aMHz9e/7iqqipcvHixW1Mh6g1uZUJkhs6cOYOHH34Y+/fvv+lCe082bdqE3bt3Iy0trccz\nHCJj8QyEyAyFh4cjPj4e//u//2v0c1paWvDJJ59g9erVbB7UJ9hAiMzUa6+9ht27d6OwsNCox2/Z\nsgUzZsxAXFxcP1dGloJTWERE1Cs8AyEiol5hAyEiol5hAyEiol5hAyEiol5hAyEiol75/1aseuuX\nr2LpAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "condition.set(C_d=0.4)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "plot_position(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final height is -11 meters, which means our guess was too low (we need more drag to slow the quarter down)." + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`height_func` takes a hypothetical value of `C_d` and returns the height after 19.1 seconds." + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def height_func(C_d, condition):\n", + " \"\"\"Final height as a function of C_d.\n", + " \n", + " C_d: drag coefficient\n", + " condition: Condition object\n", + " \n", + " returns: height in m\n", + " \"\"\"\n", + " condition.set(C_d=C_d)\n", + " system = make_system(condition)\n", + " run_odeint(system, slope_func)\n", + " y, v = final_state(system.results)\n", + " return y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we run it with `C_d=0.4`, we get -11 meters again." + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-11.034779626277231 meter" + ], + "text/latex": [ + "$-11.034779626277231 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "height_func(0.4, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use `fsolve` to find the value of `C_d` that makes the final height 0." + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.42587017])" + ] + }, + "execution_count": 148, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution = fsolve(height_func, 0.4, condition)\n", + "solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plugging in the estimated value, we can run the simulation again to get terminal velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "condition.set(C_d=solution)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "final_state(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, the terminal velocity of the quarter is higher than that of the penny, but we should not take this result seriously because the measurements we used are not real; I made them up." + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap10mine.ipynb b/code/chap10mine.ipynb new file mode 100644 index 00000000..4e0e8033 --- /dev/null +++ b/code/chap10mine.ipynb @@ -0,0 +1,2279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 10: Vectors\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Vectors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A `Vector` object is like a combination of a NumPy array and a Pint Quantity.\n", + "\n", + "I'll start by grabbing the units we'll need." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m = UNITS.meter\n", + "s = UNITS.second\n", + "kg = UNITS.kilogram\n", + "N = UNITS.newton" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a two dimensional `Vector` in meters." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "A = Vector(3, 4) * m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can access the elements by name." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "3.0 meter" + ], + "text/latex": [ + "$3.0 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.x" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "4.0 meter" + ], + "text/latex": [ + "$4.0 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The magnitude is the length of the vector." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "5.0 meter" + ], + "text/latex": [ + "$5.0 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.mag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The angle is the number of radians between the vector and the positive x axis." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.9272952180016122 radian" + ], + "text/latex": [ + "$0.9272952180016122 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we make another `Vector` with the same units," + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "B = Vector(1, 2) * m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can add `Vector` objects like this" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 4. 6.] meter" + ], + "text/latex": [ + "$[ 4. 6.] meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A + B" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And substract like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 2. 2.] meter" + ], + "text/latex": [ + "$[ 2. 2.] meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A - B" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can compute the Euclidean distance between two Vectors." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "2.8284271247461903 meter" + ], + "text/latex": [ + "$2.8284271247461903 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.dist(B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the difference in angle" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.17985349979247822 radian" + ], + "text/latex": [ + "$-0.17985349979247822 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.diff_angle(B)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we are given the magnitude and angle of a vector, what we have is the representation of the vector in polar coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mag = A.mag\n", + "angle = A.angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `pol2cart` to convert from polar to Cartesian coordinates, and then use the Cartesian coordinates to make a `Vector` object.\n", + "\n", + "In this example, the `Vector` we get should have the same components as `A`." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 3. 4.] meter" + ], + "text/latex": [ + "$[ 3. 4.] meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, y = pol2cart(angle, mag)\n", + "Vector(x, y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Create a `Vector` named `a_grav` that represents acceleration due to gravity, with x component 0 and y component $-9.8$ meters / second$^2$." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 0. -9.8] meter/second2" + ], + "text/latex": [ + "$[ 0. -9.8] \\frac{meter}{second^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_grav = Vector(0, -9.8) * m/s**2\n", + "a_grav" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Degrees and radians\n", + "\n", + "Pint provides units to represent degree and radians." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "degree = UNITS.degree\n", + "radian = UNITS.radian" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you have an angle in degrees," + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "45 degree" + ], + "text/latex": [ + "$45 degree$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle = 45 * degree\n", + "angle" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can convert to radians." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad = angle.to(radian)\n", + "angle_rad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If it's already in radians, `to` does the right thing." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad.to(radian)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also convert from radians to degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "45.0 degree" + ], + "text/latex": [ + "$45.0 degree$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle_rad.to(degree)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As an alterative, you can use `np.deg2rad`, which works with Pint quantities, but it also works with simple numbers and NumPy arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.deg2rad(angle)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Create a `Vector` named `a_force` that represents acceleration due to a force of 0.5 Newton applied to an object with mass 0.3 kilograms, in a direction 45 degrees up from the positive x-axis.\n", + "\n", + "Add `a_force` to `a_drag` from the previous exercise. If that addition succeeds, that means that the units are compatible. Confirm that the total acceleration seems to make sense." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 1.1785113 1.1785113] newton/kilogram" + ], + "text/latex": [ + "$[ 1.1785113 1.1785113] \\frac{newton}{kilogram}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, y = pol2cart(angle.to(radian), 0.5)\n", + "force = Vector(x, y) * N\n", + "mass = 0.3 * kg\n", + "a_force = force / mass\n", + "a_force" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 1.1785113 -8.6214887] newton/kilogram" + ], + "text/latex": [ + "$[ 1.1785113 -8.6214887] \\frac{newton}{kilogram}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_force + a_grav" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Baseball" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a `Condition` object that contains the parameters for the Manny Ramirez problem." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(x = 0 * m, \n", + " y = 1 * m,\n", + " g = 9.8 * m/s**2,\n", + " mass = 145e-3 * kg,\n", + " diameter = 73e-3 * m,\n", + " rho = 1.2 * kg/m**3,\n", + " C_d = 0.3,\n", + " angle = 45 * degree,\n", + " velocity = 40 * m / s,\n", + " duration = 5.1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the function that uses the `Condition` object to make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition object with angle, velocity, x, y,\n", + " diameter, duration, g, mass, rho, and C_d\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " # convert angle to degrees\n", + " theta = np.deg2rad(angle)\n", + " \n", + " # compute x and y components of velocity\n", + " vx, vy = pol2cart(theta, velocity)\n", + " \n", + " # make the initial state\n", + " init = State(x=x, y=y, vx=vx, vy=vy)\n", + " \n", + " # compute area from diameter\n", + " area = np.pi * (diameter/2)**2\n", + " \n", + " # compute timestamps\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, g=g, mass=mass, \n", + " area=area, rho=rho, C_d=C_d, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we use it:" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
initx 0 meter\n", + "y ...
g9.8 meter / second ** 2
mass0.145 kilogram
area0.004185386812745002 meter ** 2
rho1.2 kilogram / meter ** 3
C_d0.3
ts[0.0 second, 0.051 second, 0.102 second, 0.153...
\n", + "
" + ], + "text/plain": [ + "init x 0 meter\n", + "y ...\n", + "g 9.8 meter / second ** 2\n", + "mass 0.145 kilogram\n", + "area 0.004185386812745002 meter ** 2\n", + "rho 1.2 kilogram / meter ** 3\n", + "C_d 0.3\n", + "ts [0.0 second, 0.051 second, 0.102 second, 0.153...\n", + "dtype: object" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the slope function that computes acceleration due to gravity and drag." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes derivatives of the state variables.\n", + " \n", + " state: State (x, y, x velocity, y velocity)\n", + " t: time\n", + " system: System object with g, rho, C_d, area, mass\n", + " \n", + " returns: sequence (vx, vy, ax, ay)\n", + " \"\"\"\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " a_grav = Vector(0, -g)\n", + "\n", + " v = Vector(vx, vy)\n", + " \n", + " f_drag = -rho * v.mag * v * C_d * area / 2\n", + " a_drag = f_drag / mass\n", + " \n", + " a = a_grav + a_drag\n", + " \n", + " return vx, vy, a.x, a.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Always test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " ,\n", + " )" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run `odeint`" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are the first few time steps." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
xyvxvy
0.0000.0000001.00000028.28427128.284271
0.0511.4349292.42222927.98892427.491730
0.1022.8550173.80438927.70222626.712880
0.1534.2606975.14716527.42383625.947141
0.2045.6523846.45121127.15343325.193958
\n", + "
" + ], + "text/plain": [ + " x y vx vy\n", + "0.000 0.000000 1.000000 28.284271 28.284271\n", + "0.051 1.434929 2.422229 27.988924 27.491730\n", + "0.102 2.855017 3.804389 27.702226 26.712880\n", + "0.153 4.260697 5.147165 27.423836 25.947141\n", + "0.204 5.652384 6.451211 27.153433 25.193958" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the last few. The last value of `y` is negative, indicating that the ball hit the ground before the end of the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
xyvxvy
4.896100.2747613.58038315.135822-21.336469
4.947101.0440112.48328115.030816-21.686507
4.998101.8079021.36842314.925643-22.032810
5.049102.5664240.23599814.820318-22.375365
5.100103.319572-0.91380014.714856-22.714157
\n", + "
" + ], + "text/plain": [ + " x y vx vy\n", + "4.896 100.274761 3.580383 15.135822 -21.336469\n", + "4.947 101.044011 2.483281 15.030816 -21.686507\n", + "4.998 101.807902 1.368423 14.925643 -22.032810\n", + "5.049 102.566424 0.235998 14.820318 -22.375365\n", + "5.100 103.319572 -0.913800 14.714856 -22.714157" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualizing the results\n", + "\n", + "We can extract the x and y components as `Series` objects." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(angle=30)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [], + "source": [ + "xs = system.results.x\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simplest way to visualize the results is to plot x and y as functions of time." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nmNGOAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(xs, label='x')\n", + "plot(ys, label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Position (m)')\n", + "\n", + "savefig('chap10-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plot the velocities the same way." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "vxs = system.results.vx\n", + "vys = system.results.vy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The x velocity slows down due to drag. The y velocity drops quickly while drag and gravity are in the same direction, then more slowly after the ball starts to fall." + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nP5YaGgwTHzEhAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(vxs, label='vx')\n", + "plot(vys, label='vy')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Velocity (m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another way to visualize the results is to plot y versus x. The result is the trajectory of the ball through its plane of motion." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(xs, ys, label='trajectory')\n", + "\n", + "decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)')\n", + "\n", + "savefig('chap10-fig02.pdf')" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nTO68807uu+8+4NwupiNHjvDDH/6Q7du3k5yczLJly3jooYdISrJWtra3t/OTn/yE1atXU1tby5Qp\nU3j00UdJT0/nqquucsX24IMP8uUvf5kjR47w7LPPsnv3bmw2G8uWLePRRx8lNTUVABHh/vvv5/XX\nXwdg2bJl7Nixg7ffftt1r9OnT3PNNdewevVqpk6dOrx/qcOsur6FLftKKSiu7XE+PMzG9AlpXCoZ\nOvXSx1paO9hpKth7rJIOj8WHU/JTmD8jO6g/o6Kioq7/l8cbY056Ph7SLYhdpoJtB8vOWco/EiIj\nwpg7LYvZkuHV9c8//zy33XYbK1as4F/+5V+4/fbbefXVV/nlL39JdHQ0U6dO5eabb2bMmDH89re/\nJSYmhtWrV/Pss8+ycOHCc75sy8vLueeee7jtttt47LHHqKur45lnnuHBBx/kt7/9LQDf+973WLdu\nHY8//jiTJ0/m5Zdf5r777uPdd9/lZz/7Gffffz+vvfYaEydOpKioiE9/+tMsX76c3//+99TV1bFq\n1So+97nP8frrrxMebtX+f+2113jhhRdob28nIiKCP/3pTxw8eJBp06YBsGbNGqZMmRLQyaGltYOt\nB8o4cLyqx6ykMJuNqeNTuXxqZlB/6QSSmOgIFszKYdbk0Ww/VM5Bt8/s8KlqCopruWxKJrMvGh2S\nC+5COkHsPnLGJ8kBoL3Dzu4jZ7xOEKNGjSI8PJy4uDjXb+RXXnklc+fOBaClpYVbb72VG264gczM\nTAAeeOABfv7zn2OMOecL9w9/+AO5ubk88sgjrnPPPfccS5YsYdeuXUyePJnXX3+dVatWcfXVVwPW\nGEZMTAx1dXUkJycDkJqaSnx8PD/96U9JSkri6aefJjIy0nW/66+/nk2bNrnGTW699dYesYgIa9as\n6ZEg7rzzzgH9XfqLTruDA8cr2XqgjNa2nlVUJ+elMG96FqMStSvJHyXERrLs0lwunpTOR/tKOVFi\ntfraO+xs2V/K4ZNnWTx7DPlZSee5U3AJ6QRxyUWjfdqCuOSi0YO6R15enuvPMTEx3H333fz1r39l\n7969nDp1ikOHDmG323sdmD506BCHDh1i9uzZ5zxWUFBAREQE7e3tzJo1y3U+IiLClVDOnj3b4zlH\njx5l5syZruQAMHHiRFJSUjhy5IgrQbjHDHDbbbfxq1/9iocffpg9e/ZQXFzMypUrB/6X4WPFZxrY\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#80 degrees\n", + "newfig()\n", + "plot(xs, ys, label='trajectory')\n", + "\n", + "decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)')\n", + "\n", + "savefig('chap10-fig02.pdf')" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nrkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#30 degrees\n", + "newfig()\n", + "plot(xs, ys, label='trajectory')\n", + "\n", + "decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)')\n", + "\n", + "savefig('chap10-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also animate the flight of the ball. If there's an error in the simulation, we can sometimes spot it by looking at animations." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nLROEJKnW/wftKaIjvuvtzwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)',\n", + " xlim=[0, 105],\n", + " ylim=[-5, 35],\n", + " legend=False)\n", + "\n", + "for x, y in zip(xs, ys):\n", + " plot(x, y, 'bo', update=True)\n", + " sleep(0.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a function that encapsulates that code and runs the animation in (approximately) real time." + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def animate2d(xs, ys, speedup=1):\n", + " \"\"\"Animate the results of a projectile simulation.\n", + " \n", + " xs: x position as a function of time\n", + " ys: y position as a function of time\n", + " \n", + " speedup: how much to divide `dt` by\n", + " \"\"\"\n", + " # get the time intervals between elements\n", + " ts = xs.index\n", + " dts = np.diff(ts)\n", + " dts = np.append(dts, 0)\n", + "\n", + " # decorate the plot\n", + " newfig()\n", + " decorate(xlabel='x position (m)',\n", + " ylabel='y position (m)',\n", + " xlim=[xs.min(), xs.max()],\n", + " ylim=[ys.min(), ys.max()],\n", + " legend=False)\n", + "\n", + " # loop through the values\n", + " for x, y, dt in zip(xs, ys, dts):\n", + " plot(x, y, 'bo', update=True)\n", + " sleep(dt / speedup)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\niCT9P2WEuHsxpFW3AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "animate2d(system.results.x, system.results.y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Run the simulation for a few different launch angles and visualize the results. Are they consistent with your expectations?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Finding the range" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we'll find the time and distance when the ball hits the ground." + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition.set(duration=7*s)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have to interpolate y to find the landing time, then interpolate x to find the range." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def interpolate_range(results):\n", + " \"\"\"Computes the range of the ball when it lands.\n", + " \n", + " results: TimeFrame with x and y\n", + " \n", + " returns: distance in meters\n", + " \"\"\"\n", + " xs = results.x\n", + " ys = results.y\n", + " t_end = ys.index[-1]\n", + " \n", + " if ys[t_end] > 0:\n", + " msg = \"\"\"The final value of y is still positive;\n", + " looks like the simulation didn't run\n", + " long enough.\"\"\"\n", + " raise ValueError(msg)\n", + " \n", + " t_peak = ys.argmax()\n", + " descent = ys.loc[t_peak:]\n", + " T = interp_inverse(descent, kind='cubic')\n", + " \n", + " t_land = T(0)\n", + " X = interpolate(xs, kind='cubic')\n", + " return X(t_land)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the result." + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(97.09774794768241)" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interpolate_range(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** The baseball stadium in Denver, Colorado is 1,580 meters above sea level, where the density of air is about 1.0 kg / meter$^3$. How much farther would a ball hit with the same velocity and launch angle travel?" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [], + "source": [ + "# Hint: rather than modify `condition`, make a copy\n", + "\n", + "condition2 = Condition(condition)" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(102.22512880611951)" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "condition2.set(rho=1.0*kg/m**3)\n", + "system = make_system(condition2)\n", + "run_odeint(system,slope_func)\n", + "interpolate_range(system.results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optimal launch angle\n", + "\n", + "To find the launch angle that maximizes range, we need a function that takes launch angle and returns range." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def range_func(angle, condition): \n", + " \"\"\"Computes range for a given launch angle.\n", + " \n", + " angle: launch angle in degrees\n", + " condition: Condition object\n", + " \n", + " returns: distance in meters\n", + " \"\"\"\n", + " print(angle)\n", + " condition.set(angle=angle)\n", + " system = make_system(condition)\n", + " run_odeint(system, slope_func)\n", + " x_range = interpolate_range(system.results)\n", + " return x_range" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's test `range_func`." + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 285 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "array(109.07212101030548)" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time range_func(45, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And sweep through a range of angles." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30.0 102.22512880611951\n", + "33.0 105.61073422582602\n", + "36.0 107.97200490961362\n", + "39.0 109.32525682573122\n", + "42.0 109.68662225002511\n", + "45.0 109.07212101030548\n", + "48.0 107.49791212235652\n", + "51.0 104.98068732786591\n", + "54.0 101.53816371252147\n", + "57.0 97.1896982361027\n", + "60.0 91.95703077946803\n" + ] + } + ], + "source": [ + "angles = linspace(30, 60, 11)\n", + "sweep = SweepSeries()\n", + "\n", + "for angle in angles:\n", + " x_range = range_func(angle, condition)\n", + " print(angle, x_range)\n", + " sweep[angle] = x_range" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the `Sweep` object, it looks like the peak is between 40 and 45 degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap10-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(sweep)\n", + "decorate(xlabel='Launch angle (degree)',\n", + " ylabel='Range (m)',\n", + " legend=False)\n", + "\n", + "savefig('chap10-fig03.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use `max_bounded` to search for the peak efficiently." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45.0\n", + "34.3769410125\n", + "55.6230589875\n", + "21.246117975\n", + "41.8191039876\n", + "41.6971472537\n", + "41.6051027031\n", + "41.6031028639\n", + "41.6034368143\n", + "41.6027689135\n", + "Wall time: 3.24 s\n" + ] + } + ], + "source": [ + "%time res = max_bounded(range_func, [0, 90], condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an `OptimizeResult` object." + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "scipy.optimize.optimize.OptimizeResult" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(res)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the following variables." + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + " fun: 109.69517452156008\n", + " message: 'Solution found.'\n", + " nfev: 9\n", + " status: 0\n", + " success: True\n", + " x: 41.603102863878036" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the optimal angle is about 41 degrees, and the resulting range is 103 meters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Add a print statement to `range_func` that prints `angle`. Then run `max_bounded` again so you can see how many times it calls `range_func` and what the arguments are." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Turning off units\n", + "\n", + "Each time `range_func` runs, it calls `odeint`, which runs `slope_func` many times. And each time `slop_func` runs, it checks the units for all computations, which takes some time. We can speed up the whole process by removing the units from the computation (now that we are satisfied that they are correct).\n", + "\n", + "Because of the way we organized the code, all units are in the `Condition` object, so we can \"turn off units\" by defining a new `Condition` object with no units:" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(g = 9.8,\n", + " mass = 145e-3,\n", + " diameter = 73e-3,\n", + " rho = 1.2,\n", + " C_d = 0.3,\n", + " angle = 45,\n", + " velocity = 40,\n", + " duration = 7)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now `range_func` and `max_bounded` are substantially faster." + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45\n", + "Wall time: 52 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "array(102.72237841710975)" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%time range_func(45, condition)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "45.0\n", + "34.3769410125\n", + "55.6230589875\n", + "21.246117975\n", + "41.4051852323\n", + "41.2368620421\n", + "41.1390964616\n", + "41.1364127407\n", + "41.1367466842\n", + "41.1360787972\n", + "Wall time: 749 ms\n" + ] + } + ], + "source": [ + "%time res = max_bounded(range_func, [0, 90], condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### The Manny Ramirez problem\n", + "\n", + "Finally, let's solve the Manny Ramirez problem:\n", + "\n", + "*What is the minimum effort required to hit a home run in Fenway Park?*\n", + "\n", + "Fenway Park is a baseball stadium in Boston, Massachusetts. One of its most famous features is the \"Green Monster\", which is a wall in left field that is unusually close to home plate, only 310 feet along the left field line. To compensate for the short distance, the wall is unusually high, at 37 feet.\n", + "\n", + "Although the problem asks for a minimum, it is not an optimization problem. Rather, we want to solve for the initial velocity that just barely gets the ball to the top of the wall, given that it launches at the optimal angle.\n", + "\n", + "And we have to be careful about what we mean by \"optimal\". For this problem, we don't want the longest range, we want the maximum height at the point where it reaches the wall.\n", + "\n", + "If you are ready to solve the problem on your own, go ahead. Otherwise I will walk you through the process with an outline and some starter code.\n", + "\n", + "As a first step, write a function called `height_func` that takes a launch angle and a condition as parameters, simulates the flights of a baseball, and returns the height of the baseball when it reaches a point 94.5 meters (310 feet) from home plate." + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": {}, + "outputs": [], + "source": [ + "def height_func(angle,condition):\n", + " condition.set(angle=angle)\n", + " system = make_system(condition)\n", + " run_odeint(system,slope_func)\n", + " x_time = interp_inverse(system.results.x)\n", + " y_range = interpolate(system.results.y)\n", + " time_wall = x_time(94.5)\n", + " return y_range(time_wall)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your function with a launch angle of 45 degrees:" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.025366370142653)" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "height_func(45, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now use `max_bounded` to find the optimal angle. Is it higher or lower than the angle that maximizes range?" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": {}, + "outputs": [], + "source": [ + "res = max_bounded(height_func, [0,90], condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following lines compute the height of the ball at the wall, given that it's launched at the optimal angle." + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.045254540088495)" + ] + }, + "execution_count": 143, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "angle = res.x\n", + "height = height_func(angle, condition)\n", + "height" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we need to find the height of the ball at the wall, for a given velocity, given that it's launched at the optimal angle.\n", + "\n", + "Write a function called `best_height` that takes velocity and a `Condition` object as parameters. It should use `max_bounded` to find the optimal launch angle, then compute and the highest possible height of the ball at the wall, for the given velocity." + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def best_height(velocity, condition):\n", + " res = max_bounded(height_func, [0,90], condition)\n", + " condition.set(angle=res.x, velocity=velocity)\n", + " system = make_system(condition)\n", + " run_odeint(system,slope_func)\n", + " x_time = interp_inverse(system.results.x)\n", + " y_range = interpolate(system.results.y)\n", + " time_wall = x_time(94.5)\n", + " return y_range(time_wall)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use this code to test `best_height`" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.045254540088495)" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best_height(40, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we want to use `fsolve` to find the initial velocity that makes the height of the ball exactly 11 meters when it reaches the wall.\n", + "\n", + "To use `fsolve`, we need an error function that returns 0 when we have the right velocity. Write a function called `error_func` that takes a velocity and a `Condition` object, uses `best_height` to find the height of the ball at the wall, and returns the difference between the result and the target value (11 meters)." + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func(velocity, condition):\n", + " return best_height(velocity, condition) - 11" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your error function like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.045254540088494721" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(40, condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then use `fsolve` to find the answer to the problem, the minimum velocity that gets the ball out of the park." + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\scipy\\optimize\\minpack.py:161: RuntimeWarning: The iteration is not making good progress, as measured by the \n", + " improvement from the last ten iterations.\n", + " warnings.warn(msg, RuntimeWarning)\n" + ] + }, + { + "data": { + "text/plain": [ + "array([ 39.98880121])" + ] + }, + "execution_count": 149, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(error_func,40,condition)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And just to check, run `best_height` with the value you found. The result should be 11 meters." + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(11.00037039926747)" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "best_height(39.9888, condition)" + ] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/code/chap11mine.ipynb b/code/chap11mine.ipynb new file mode 100644 index 00000000..d2b02b7b --- /dev/null +++ b/code/chap11mine.ipynb @@ -0,0 +1,1961 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Chapter 11: Rotation\n", + "\n", + "Copyright 2017 Allen Downey\n", + "\n", + "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# If you want the figures to appear in the notebook, \n", + "# and you want to interact with them, use\n", + "# %matplotlib notebook\n", + "\n", + "# If you want the figures to appear in the notebook, \n", + "# and you don't want to interact with them, use\n", + "# %matplotlib inline\n", + "\n", + "# If you want the figures to appear in separate windows, use\n", + "# %matplotlib qt5\n", + "\n", + "# tempo switch from one to another, you have to select Kernel->Restart\n", + "\n", + "%matplotlib inline\n", + "\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Rolling paper\n", + "\n", + "We'll start by loading the units we need." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "radian = UNITS.radian\n", + "m = UNITS.meter\n", + "s = UNITS.second" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And creating a `Condition` object with the system parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(Rmin = 0.02 * m,\n", + " Rmax = 0.055 * m,\n", + " L = 47 * m,\n", + " duration = 130 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following function estimates the parameter `k`, which is the increase in the radius of the roll for each radian of rotation. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def estimate_k(condition):\n", + " \"\"\"Estimates the parameter `k`.\n", + " \n", + " condition: Condition with Rmin, Rmax, and L\n", + " \n", + " returns: k in meters per radian\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " Ravg = (Rmax + Rmin) / 2\n", + " Cavg = 2 * pi * Ravg\n", + " revs = L / Cavg\n", + " rads = 2 * pi * revs\n", + " k = (Rmax - Rmin) / rads\n", + " return k" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As usual, `make_system` takes a `Condition` object and returns a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition with Rmin, Rmax, and L\n", + " \n", + " returns: System with init, k, and ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(theta = 0 * radian,\n", + " y = 0 * m,\n", + " r = Rmin)\n", + " \n", + " k = estimate_k(condition)\n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, k=k, ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
inittheta 0 radian\n", + "y 0 meter\n", + "r ...
k2.7925531914893616e-05 meter
ts[0.0 second, 1.3 second, 2.6 second, 3.9000000...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "y 0 meter\n", + "r ...\n", + "k 2.7925531914893616e-05 meter\n", + "ts [0.0 second, 1.3 second, 2.6 second, 3.9000000...\n", + "dtype: object" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
theta0 radian
y0 meter
r0.02 meter
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "y 0 meter\n", + "r 0.02 meter\n", + "dtype: object" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write a slope function based on the differential equations\n", + "\n", + "$\\omega = \\frac{d\\theta}{dt} = 10$\n", + "\n", + "$\\frac{dy}{dt} = r \\frac{d\\theta}{dt}$\n", + "\n", + "$\\frac{dr}{dt} = k \\frac{d\\theta}{dt}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes the derivatives of the state variables.\n", + " \n", + " state: State object with theta, y, r\n", + " t: time\n", + " system: System object with r, k\n", + " \n", + " returns: sequence of derivatives\n", + " \"\"\"\n", + " theta, y, r = state\n", + " unpack(system)\n", + " \n", + " omega = 10 * radian / s\n", + " dydt = r * omega\n", + " drdt = k * omega\n", + " \n", + " return omega, dydt, drdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `slope_func`" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " )" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And look at the results." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
thetayr
124.81248.046.7070640.054851
126.11261.047.4224870.055214
127.41274.048.1426300.055577
128.71287.048.8674930.055940
130.01300.049.5970740.056303
\n", + "
" + ], + "text/plain": [ + " theta y r\n", + "124.8 1248.0 46.707064 0.054851\n", + "126.1 1261.0 47.422487 0.055214\n", + "127.4 1274.0 48.142630 0.055577\n", + "128.7 1287.0 48.867493 0.055940\n", + "130.0 1300.0 49.597074 0.056303" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Extracting one time series per variable (and converting `r` to radians):" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "ys = system.results.y\n", + "rs = system.results.r * 1000" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `theta`" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `y`" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nA6ef1MpfzGxDAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `r`" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(rs, color='red', label='r')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Radius (mm)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also see the relationship between `y` and `r`, which I derive analytically in the book." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(rs, ys, color='purple')\n", + "\n", + "decorate(xlabel='Radius (mm)',\n", + " ylabel='Length (m)',\n", + " legend=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's the figure from the book." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap11-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nBSA3N5e5c+dSVlbGQw89RHZ2Nk6n06eyqKurY8SIEWzZsoXdu3eTmprK8uXLcblcPpXDrXpbd2tr\nKwEBAbp+s9mMyWTy2mwuXbrE0qVLGTFiBEuWLAE8LwePeljTYBgyZAjd3d10dXVx773/xNXR0UFg\nYOAgzmxgVFRU4HA4yMjIYNWqVQAEBATQ2dmpG+eNeVRWVnL69GkOHjx4235fyQHQCuQXXniBmTNn\nAjBx4kROnjzJ7t27fSaL+vp6HA4Hu3btIi4uDoDi4mIyMjLYvn27z+TQU2/rHjJkCB0dHbr+zs5O\nlFJYLJYBm+dAqa+vZ9GiRbS1tbFjxw6GDRsGeF4OUiD0YvTo0cCNp13dfA/Q0tJi2KXmbT766CNK\nSkrIysoiPz9fOw9h9OjRtLS06MZ6Yx4VFRU0NzeTmpoKgPr7sSWLFy/mqaee8pkc4J/doOPHj9fa\nTCYTDz74IA0NDT6TxalTp7h+/ToxMTFam9lsJioqirq6Op/Joafe1h0eHm647PHmeG/L5ueff2bx\n4sUEBwezZ88e3e+Gp+Ughxh6ERkZSVBQECdOnNDaGhoauHjxIomJiYM4s/71ySefUFJSwvLly3E4\nHFpxAJCQkEBNTY1u/PHjx3nkkUcGepr96r333uPQoUPs37+f/fv3U1ZWBsBbb73FihUrfCYHgOjo\naCwWCz/99JPWppTC6XQyduxYn8kiPDwcgDNnzmhtN3N44IEHfCaHnnpbd0JCAvX19brj7MePHyco\nKIjIyMgBnWt/cjqdLFy4kDFjxrBr1y5dcQAemMOgXkPhIdatW6eSk5PV119/rd0HoeclPd7kl19+\nUVFRUWr16tWqpaVF97p27Zr69ddfVXR0tNqwYYM6e/asKikpUVarVXdZpDdqamrSXeboazmsX79e\nJSYmqi+//FKdP39evf3228pqtSqn0+kzWXR1dal58+apJ598UtXU1KizZ88qh8Oh4uLiVENDg8/k\nkJWVpbu8r7d1d3d3q3nz5qlnnnlGnTp1Srv+f+PGjYO1hD7RM4c5c+ao1NRUde7cOd3fTbfbrZTy\nvBykQLgLnZ2d6t1331WTJ09W8fHxasWKFdp/uDcqLi5W48ePv+3rww8/VEopdfToUZWRkaFiYmLU\nrFmz1LfffjvIs+5/PQsEpXwrh+7ubvXxxx8rm82mYmJi1Ny5c1VNTY3W7ytZuN1ulZeXp6ZNm6YS\nEhJUdna2On36tNbvCzn0/GFUqvd1t7S0qBdffFE9/PDDKjk5WRUXF6vr168P5LT73K05nDt37o5/\nN6dPn65t40k5mJT6+8CqEEIIIcTf5BwEIYQQQhhIgSCEEEIIAykQhBBCCGEgBYIQQgghDKRAEEII\nIYSBFAhCCCGEMJBbLQshDHJzc6msrPzXMTcf7+vn58f27dsHYFY3OBwOwsPDeemll3odW1dXx8KF\nC6msrGT48OEDMDshvIfcB0EIYfDbb79x6dIl7fObb76Jn58f+fn5WtvQoUOBG89kiIiIGJB5ffPN\nNzgcDr744gvDU/HupLCwELfbTVFRUT/PTgjvInsQhBAG48aNY9y4cdrnoUOH4ufnpz3BcDAopVi7\ndi05OTl3XRwALFq0CJvNRnZ2NtHR0f04QyG8i5yDIIT4vz333HPk5ORonydMmMBnn33Ga6+9xqRJ\nk0hKSqK0tJSrV6+yevVqEhISSElJYd26ddy68/Ly5cvk5+czdepUYmNjefbZZzl58qTuu6qrq3E6\nnWRkZGhtbW1trFmzhrS0NGJiYpgxYwZbt27VbRcaGkpSUhKbN2/unxCE8FJSIAgh+lRhYSEhISFs\n2rSJ9PR0PvjgAzIzMwkMDKS0tJTHH3+csrIyvvrqKwDa29vJycmhurqalStXsnHjRoKDg8nJyeHH\nH3/U/t2qqiri4+MJCwvT2t555x2OHTtGbm4uW7du5bHHHqOoqMhw/oTdbufIkSP89ddfAxOCEF5A\nDjEIIfpUdHQ0eXl5wI3HpVdUVBAaGsrrr78OQFJSElVVVfzwww/Y7XYOHDjAmTNn2Lt3L1arFYC0\ntDQyMzNZv34927ZtA+D7779n9uzZuu86ceIEKSkp2l6FKVOmYLFYCAkJ0Y2zWq10dnZSW1tLampq\nv65fCG8hBYIQok/FxsZq70NCQvDz89O1mUwmgoODuXLlCgDfffcdo0aNIioqiq6uLm1ceno6mzdv\npqOjg66uLtxuN/fff7/uu6ZMmcKePXtwuVzYbDZsNtttr24YM2YMABcvXuzTtQrhzaRAEEL0qaCg\nIEObxWK54/g//vgDl8t1xxMIL1++rL0PDAzU9eXl5REeHs7BgwcpKCigoKCASZMmsWbNGiIjIw3b\n/fnnn/9pLUL4MikQhBCDatiwYURERFBYWHjb/lsPF9zc63CTv78/y5YtY9myZTQ2NnL06FE2bdrE\nqlWrqKqqMmzX89CDEOLO5CRFIcSgSkxMpLGxkZEjR2K1WrXX4cOH+fTTTzGbzfj7+xMWFkZzc7O2\nXXt7O3a7nfLycgDuu+8+5s+fzxNPPEFTU5PuO1wulzZGCHF3ZA+CEGJQPf300+zYsYMFCxawdOlS\nRo0aRXV1Ndu2bePll1/GZDIBkJKSorv0MSAggNjYWEpLSzGbzUyYMIHz589TWVmJ3W7XfUdtbS0W\ni4X4+PgBXZsQnkwKBCHEoAoKCmLnzp0UFxezdu1arl27xtixY3E4HGRlZWnj7HY7r7zyCm63m9DQ\nUODGHR5DQkIoLy/n999/JzQ0lMzMTF599VXddxw7dgybzfafbrAkhK+TWy0LITyCUopZs2Yxc+ZM\nlixZctfbNTY2Mn36dPbt28fEiRP7cYZCeBc5B0EI4RFMJhMrV65k586dtLa23vV25eXlzJgxQ4oD\nIf4jKRCEEB4jPT2dlJQUw+2U7+TChQscOXJEu0mTEOLuySEGIYQQQhjIHgQhhBBCGEiBIIQQQggD\nKRCEEEIIYSAFghBCCCEMpEAQQgghhIEUCEIIIYQw+B/PcvlKSWMYEgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(3, 1, 1)\n", + "plot(thetas, label='theta')\n", + "decorate(ylabel='Angle (rad)')\n", + "\n", + "subplot(3, 1, 2)\n", + "plot(ys, color='green', label='y')\n", + "decorate(ylabel='Length (m)')\n", + "\n", + "subplot(3, 1, 3)\n", + "plot(rs, color='red', label='r')\n", + "\n", + "decorate(xlabel='Time(s)',\n", + " ylabel='Radius (mm)')\n", + "\n", + "savefig('chap11-fig01.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use interpolation to find the time when `y` is 47 meters." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(125.33333334940457)" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "T = interp_inverse(ys, kind='cubic')\n", + "t_end = T(47)\n", + "t_end" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At that point `r` is 55 mm, which is `Rmax`, as expected." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(55.00000000448797)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "R = interpolate(rs, kind='cubic')\n", + "R(t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The total amount of rotation is 1253 rad." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(1253.3333334940455)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "THETA = interpolate(thetas, kind='cubic')\n", + "THETA(t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unrolling" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For unrolling the paper, we need more units:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "kg = UNITS.kilogram\n", + "N = UNITS.newton" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And a few more parameters in the `Condition` object." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(Rmin = 0.02 * m,\n", + " Rmax = 0.055 * m,\n", + " Mcore = 15e-3 * kg,\n", + " Mroll = 215e-3 * kg,\n", + " L = 47 * m,\n", + " tension = 2e-4 * N,\n", + " duration = 180 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`make_system` computes `rho_h`, which we'll need to compute moment of inertia, and `k`, which we'll use to compute `r`." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition with Rmin, Rmax, Mcore, Mroll,\n", + " L, tension, and duration\n", + " \n", + " returns: System with init, k, rho_h, Rmin, Rmax,\n", + " Mcore, Mroll, ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(theta = 0 * radian,\n", + " omega = 0 * radian/s,\n", + " y = L)\n", + " \n", + " area = pi * (Rmax**2 - Rmin**2)\n", + " rho_h = Mroll / area\n", + " k = (Rmax**2 - Rmin**2) / 2 / L / radian \n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, k=k, rho_h=rho_h,\n", + " Rmin=Rmin, Rmax=Rmax,\n", + " Mcore=Mcore, Mroll=Mroll, \n", + " ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
inittheta 0 radian\n", + "omega 0.0 radi...
k2.7925531914893616e-05 meter / radian
rho_h26.07109543981524 kilogram / meter ** 2
Rmin0.02 meter
Rmax0.055 meter
Mcore0.015 kilogram
Mroll0.215 kilogram
ts[0.0 second, 1.8 second, 3.6 second, 5.4 secon...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "omega 0.0 radi...\n", + "k 2.7925531914893616e-05 meter / radian\n", + "rho_h 26.07109543981524 kilogram / meter ** 2\n", + "Rmin 0.02 meter\n", + "Rmax 0.055 meter\n", + "Mcore 0.015 kilogram\n", + "Mroll 0.215 kilogram\n", + "ts [0.0 second, 1.8 second, 3.6 second, 5.4 secon...\n", + "dtype: object" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
theta0 radian
omega0.0 radian / second
y47 meter
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "omega 0.0 radian / second\n", + "y 47 meter\n", + "dtype: object" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we compute `I` as a function of `r`:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def moment_of_inertia(r, system):\n", + " \"\"\"Moment of inertia for a roll of toilet paper.\n", + " \n", + " r: current radius of roll in meters\n", + " system: System object with Mcore, rho, Rmin, Rmax\n", + " \n", + " returns: moment of inertia in kg m**2\n", + " \"\"\"\n", + " unpack(system)\n", + " Icore = Mcore * Rmin**2 \n", + " Iroll = pi * rho_h / 2 * (r**4 - Rmin**4)\n", + " return Icore + Iroll" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When `r` is `Rmin`, `I` is small." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "6e-06 kilogram meter2" + ], + "text/latex": [ + "$6e-06 kilogram \\cdot meter^{2}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "moment_of_inertia(system.Rmin, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As `r` increases, so does `I`." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.00037418750000000006 kilogram meter2" + ], + "text/latex": [ + "$0.00037418750000000006 kilogram \\cdot meter^{2}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "moment_of_inertia(system.Rmax, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the slope function." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " \"\"\"Computes the derivatives of the state variables.\n", + " \n", + " state: State object with theta, omega, y\n", + " t: time\n", + " system: System object with Rmin, k, Mcore, rho_h, tension\n", + " \n", + " returns: sequence of derivatives\n", + " \"\"\"\n", + " theta, omega, y = state\n", + " unpack(system)\n", + " \n", + " r = sqrt(2*k*y + Rmin**2)\n", + " I = moment_of_inertia(r, system)\n", + " tau = r * tension\n", + " alpha = tau / I\n", + " dydt = -r * omega\n", + " \n", + " return omega, alpha, dydt " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `slope_func`" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " )" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And look at the results." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
thetaomegay
172.8503.3769986.83022222.852269
174.6515.7882196.96058022.346268
176.4528.4371507.09437621.835001
178.2541.3301517.23180221.318468
180.0554.4739407.37306620.796665
\n", + "
" + ], + "text/plain": [ + " theta omega y\n", + "172.8 503.376998 6.830222 22.852269\n", + "174.6 515.788219 6.960580 22.346268\n", + "176.4 528.437150 7.094376 21.835001\n", + "178.2 541.330151 7.231802 21.318468\n", + "180.0 554.473940 7.373066 20.796665" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Extrating the time series" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "omegas = system.results.omega\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `theta`" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nUF2tUFWtoKuqRqur1v+p1VVTqa2iUlvzZ4WuioqKKjSVOjSVNX+WV+go1+jq3Iq1scxNTXC0t8TR\n3hIneyucHGqSRhc7S8xkuXMhRCtrdwnkzJkzlJaWEhkZqS/z9vbGy8uLpKSkRiWQnIIyfjp6leKy\nmj4ERYFqRdH/eTNxKE14Kmgqa0szHGwt9D9d7CxrfmwtsJUnCiFEG9LuEkhWVhYA7u7uBuVqtVpf\n11DHU3PJzC9tttjuxNREhY2VOTZWZthYmmFrbY6djQW2VubY2dT82NtYyJOEEKLdaHcJpLy8HBMT\nE8zNDUcOWVhYUFFR0ajX6tG1C+evFqHV3bl5yUSlwtREhZmZCeZmJpiZ1vxpbmaKuZkJluYmWJib\nYmluiqWFKVYWZvo/rS3NsLYyw8LMRJ4ehBAdSrtLIFZWVlRXV6PT6TAzuxV+ZWUl1tbWjXotf29H\nfD3sb82XUKkwUdUkDJWJSp84ZG0nIYSord0lEE9PTwByc3P1/w2Qk5NTq1mrIWqeImTFWCGEaKx2\nl0CCgoKwtbXl0KFDREdHA3DlyhWuXr3KwIED67ymqqrmCaOxfSRCCNGZ3fzMvPkZ+nvtLoFYWFjw\n5JNP8te//hUnJydcXFz4y1/+QmRkJKGhoXVek5ubC8DUqVNbM1QhhOgQcnNz6datW61yldKaY1Sb\niU6n45133iEhIQGdTqefie7s7Fzn+RqNhpSUFNzc3DA1leYqIYRoiKqqKnJzc+nXrx9WVla16ttl\nAhFCCGF8MulACCFEk0gCEUII0SSSQIQQQjSJJBAhhBBNIglECCFEk3TaBFJVVcW7775LVFQUYWFh\nvPDCC+Tl5Rk7rHYtLS2NwMDAWj9JSUkA7N+/n+joaIKDg5k4cSKJiYlGjrj9WbJkCQsXLjQou9t9\nzc/PZ86cOURERDBkyBDi4uLQ6Rq3OVlnUtc9fuyxx2r9vb79nE57j5VOauXKlcrQoUOV/fv3Kykp\nKcqUKVOU//7v/zZ2WO3a9u3blUGDBik5OTkGP5WVlUpqaqrSr18/5YMPPlDS0tKUlStXKn379lXO\nnTtn7LDbherqauX9999XevXqpbz++uv68obc1yeeeEJ58sknldOnTyt79+5VBg8erLz33nvGeBtt\nWn33uLq6WgkJCVG+/fZbg7/XxcXF+nM66z3ulAmkoqJCCQsLU7766it9WUZGhtKrVy8lOTnZiJG1\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `omega`" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nGHt7e5KTk/Hw8CAwMLBIH/b555+TkZF3g0hCQgKDBg3i448/pmXLlkV6LyHEQ8pKgr9XQdJR03Gv\nluqdunK1bxM0h//mzZuZNWsW169fN455eXnx1ltvGbt/Psi9SzvLlStnHPf0lL08hTCrOxutXFwH\nuel5404e8NgQqFjfcrWJEqcp/Hft2sWECRNo06YNYWFheHl5ER8fz7Zt23j//fepUKGCbOEoRGmW\ncVXdaCX5jOm4d1uo2kdW8tggTeEfHh5Oz549+eyzz0zGe/fuzfjx4/n6668fKvx9fX05c+bMg58o\nhHg4igHifoTYLaDc1aCxXGW19XKFWparTViUppu8zp49S1hYWIHHwsLCiIqKKvCYEMKCUmPgxKdw\ncf1dwa8D307qfroS/DZN05V/5cqVuXr1aoHH4uLicHZ2LtaihBCPIDcTLm1Vr/hR8sadA6D6ULUT\np7B5msK/Xbt2zJ07lzp16lC/ft6XQsePH2fevHm0b9/ebAUKIYog6QT8vRKy8hZmoHME/zDwfUYa\nsQkjTeE/evRofvvtN/r160e1atWoXLkyCQkJxMTE8NhjjzFu3Dhz1ymEuJ/sW2qv/XtbM7jVhqDB\noPe2TF2i1NIU/u7u7mzYsIH169dz6NAhbt68Sd26dRk6dCh9+vSRaR8hLEVRIOEXuLgBctPyxu1d\n1DX7Xi1kdy1RIM3r/PV6PYMGDWLQoEHmrEcIoVXaJXWKJ+WerrqeT6qtGRzdLFOXsAqFhv/kyZM1\nv4lOp5PWDEKUlNxMuPR/t7/QNeSNl6ustmZwr2ux0oT1KDT89+/fr/lNdPJnpRAl48ZRtR9PVmLe\nmM4e/DpDlW5g52i52oRVKTT89+zZU5J1CCHuJ/O6Gvp3b6cI4BasXu07+1mmLmG1itTYLTMzk8jI\nSK5evUqrVq1IT0/H11c2bxbCbAw5ELcLLm0zvUPXwRWq9gOv5vKFrngomsN/5cqVfPnll9y6dQud\nTse6dev48ssvycrKYtGiRZQvL50AhShWN0/BhdWQEW86Xrk1VH0WHFwsU5coEzS1d1i3bh0ff/wx\nzz77LMuXLzf24e/Xrx/Hjh1j/vz5Zi1SCJuSdQPOLoYzc02D3zkA6k1Q1+1L8ItHpOnKf+nSpYwY\nMYLx48eTm5trHO/UqRPx8fEsW7aMCRMmmK1IIWyCIQfidsPlbWDIzBu300NAL/BpBzpN12tCPJCm\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(omegas, color='orange', label='omega')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angular velocity (rad/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting `y`" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the figure from the book." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap11-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "subplot(3, 1, 1)\n", + "plot(thetas, label='theta')\n", + "decorate(ylabel='Angle (rad)')\n", + "\n", + "subplot(3, 1, 2)\n", + "plot(omegas, color='orange', label='omega')\n", + "decorate(ylabel='Angular velocity (rad/s)')\n", + "\n", + "subplot(3, 1, 3)\n", + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time(s)',\n", + " ylabel='Length (m)')\n", + "\n", + "savefig('chap11-fig02.pdf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Yo-yo" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Simulate the descent of a yo-yo. How long does it take to reach the end of the string.\n", + "\n", + "I provide a `Condition` object with the system parameters:\n", + "\n", + "* `Rmin` is the radius of the axle. `Rmax` is the radius of the axle plus rolled string.\n", + "\n", + "* `Rout` is the radius of the yo-yo body. `mass` is the total mass of the yo-yo, ignoring the string. \n", + "\n", + "* `L` is the length of the string.\n", + "\n", + "* `g` is the acceleration of gravity." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "condition = Condition(Rmin = 8e-3 * m,\n", + " Rmax = 16e-3 * m,\n", + " Rout = 35e-3 * m,\n", + " mass = 50e-3 * kg,\n", + " L = 1 * m,\n", + " g = 9.8 * m / s**2,\n", + " duration = 1 * s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a `make_system` function that computes `I` and `k` based on the system parameters.\n", + "\n", + "I estimated `I` by modeling the yo-yo as a solid cylinder with uniform density ([see here](https://en.wikipedia.org/wiki/List_of_moments_of_inertia)). In reality, the distribution of weight in a yo-yo is often designed to achieve desired effects. But we'll keep it simple." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system(condition):\n", + " \"\"\"Make a system object.\n", + " \n", + " condition: Condition with Rmin, Rmax, Rout, \n", + " mass, L, g, duration\n", + " \n", + " returns: System with init, k, Rmin, Rmax, mass,\n", + " I, g, ts\n", + " \"\"\"\n", + " unpack(condition)\n", + " \n", + " init = State(theta = 0 * radian,\n", + " omega = 0 * radian/s,\n", + " y = L,\n", + " v = 0 * m / s)\n", + " \n", + " I = mass * Rout**2 / 2\n", + " k = (Rmax**2 - Rmin**2) / 2 / L / radian \n", + " ts = linspace(0, duration, 101)\n", + " \n", + " return System(init=init, k=k,\n", + " Rmin=Rmin, Rmax=Rmax,\n", + " mass=mass, I=I, g=g,\n", + " ts=ts)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Testing `make_system`" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
inittheta 0 radian\n", + "omega 0.0 radi...
k9.6e-05 meter / radian
Rmin0.008 meter
Rmax0.016 meter
mass0.05 kilogram
I3.0625000000000006e-05 kilogram * meter ** 2
g9.8 meter / second ** 2
ts[0.0 second, 0.01 second, 0.02 second, 0.03 se...
\n", + "
" + ], + "text/plain": [ + "init theta 0 radian\n", + "omega 0.0 radi...\n", + "k 9.6e-05 meter / radian\n", + "Rmin 0.008 meter\n", + "Rmax 0.016 meter\n", + "mass 0.05 kilogram\n", + "I 3.0625000000000006e-05 kilogram * meter ** 2\n", + "g 9.8 meter / second ** 2\n", + "ts [0.0 second, 0.01 second, 0.02 second, 0.03 se...\n", + "dtype: object" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(condition)\n", + "system" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
theta0 radian
omega0.0 radian / second
y1 meter
v0.0 meter / second
\n", + "
" + ], + "text/plain": [ + "theta 0 radian\n", + "omega 0.0 radian / second\n", + "y 1 meter\n", + "v 0.0 meter / second\n", + "dtype: object" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.init" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Write a slope function for this system, using these results from the book:\n", + "\n", + "$ r = \\sqrt{2 k y + R_{min}^2} $ \n", + "\n", + "$ T = m g I / I^* $\n", + "\n", + "$ a = -m g r^2 / I^* $\n", + "\n", + "$ \\alpha = m g r / I^* $\n", + "\n", + "where $I^*$ is the augmented moment of inertia, $I + m r^2$.\n", + "\n", + "Hint: If `y` is less than 0, it means you have reached the end of the string, so the equation for `r` is no longer valid. In this case, the simplest thing to do it return the sequence of derivatives `0, 0, 0, 0`" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " theta, omega, y, v = state\n", + " unpack(system)\n", + " \n", + " if y > 0 * m:\n", + " r = sqrt(2*k*y + Rmin**2)\n", + " a = -1 * mass * g * r**2 / (I + mass * r**2)\n", + " alpha = mass * g * r / (I + mass * r**2)\n", + " \n", + " return omega, alpha, v, a\n", + " else:\n", + " return 0, 0, 0, 0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " ,\n", + " )" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, 0*s, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": true, + "scrolled": false + }, + "outputs": [], + "source": [ + "run_odeint(system, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check the final conditions. If things have gone according to plan, the final value of `y` should be close to 0." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
thetaomegayv
0.9667.11465144.630635-1.582474e-08-1.994692
0.9767.11465144.630635-1.582474e-08-1.994692
0.9867.11465144.630635-1.582474e-08-1.994692
0.9967.11465144.630635-1.582474e-08-1.994692
1.0067.11465144.630635-1.582474e-08-1.994692
\n", + "
" + ], + "text/plain": [ + " theta omega y v\n", + "0.96 67.11465 144.630635 -1.582474e-08 -1.994692\n", + "0.97 67.11465 144.630635 -1.582474e-08 -1.994692\n", + "0.98 67.11465 144.630635 -1.582474e-08 -1.994692\n", + "0.99 67.11465 144.630635 -1.582474e-08 -1.994692\n", + "1.00 67.11465 144.630635 -1.582474e-08 -1.994692" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.tail()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "thetas = system.results.theta\n", + "ys = system.results.y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`theta` should increase and accelerate." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n/h8lpoQYSMHCWQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(thetas, label='theta')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Angle (rad)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`y` should decrease and accelerate down." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(ys, color='green', label='y')\n", + "\n", + "decorate(xlabel='Time (s)',\n", + " ylabel='Length (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.6.1" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}