From cec496bb9f9371d3c2cd1ecb4b7a331a27b67db6 Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 5 Sep 2017 16:58:31 -0400 Subject: [PATCH 01/11] Adding chap01mine --- code/chap01mine.ipynb | 2059 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2059 insertions(+) create mode 100644 code/chap01mine.ipynb diff --git a/code/chap01mine.ipynb b/code/chap01mine.ipynb new file mode 100644 index 00000000..b6477fcb --- /dev/null +++ b/code/chap01mine.ipynb @@ -0,0 +1,2059 @@ +{ + "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": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello\n" + ] + } + ], + "source": [ + "print ('Hello')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hello" + ] + }, + { + "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": 26, + "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 two lines create new variables named `meter` and `second`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "UNITS." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a variable named `a` and display its value:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9.8 meter / second ** 2\n" + ] + } + ], + "source": [ + "a = 9.8 * meter / second**2\n", + "print (a)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Create `t` and display its value:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4 second\n" + ] + } + ], + "source": [ + "t = 4 * second\n", + "print (t)" + ] + }, + { + "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": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "156.8 meter\n" + ] + } + ], + "source": [ + "h = a * t**2\n", + "print (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": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8.817885349720552 second\n" + ] + } + ], + "source": [ + "h = 381 * meter\n", + "t = sqrt(2 * h / a)\n", + "print (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": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "86.41527642726142 meter / second\n" + ] + } + ], + "source": [ + "v = a * t\n", + "print (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": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mile = UNITS.mile\n", + "hour= UNITS.hour" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "193.30546802805438 mile/hour" + ], + "text/latex": [ + "$193.30546802805438 \\frac{mile}{hour}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "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": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20.070408163265306 second\n" + ] + } + ], + "source": [ + "# Solution goes here\n", + "v = 20 * meter / second\n", + "a = 9.8 * meter / second**2\n", + "h_tot = 381 * meter\n", + "t_1 = v/a\n", + "h_1 = (0.5*a*t_1*t_1)\n", + "t_2 = (h_tot-h_1)/v\n", + "t_tot = t_1 + t_2\n", + "print (t_tot)" + ] + }, + { + "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": 23, + "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": 24, + "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": 24, + "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": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare.olin" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'System' object has no attribute 'wellesly'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mbikeshare\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwellesly\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36m__getattr__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 3079\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3080\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3081\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3082\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3083\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mAttributeError\u001b[0m: 'System' object has no attribute 'wellesly'" + ] + } + ], + "source": [ + "bikeshare.wellesly" + ] + }, + { + "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": 32, + "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": 33, + "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": 33, + "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": 34, + "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": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "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": 37, + "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": 38, + "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": 39, + "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": 39, + "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": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 41, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def bike_to_olin():\n", + " bikeshare.olin += 1\n", + " bikeshare.wellesley -=1\n", + "bike_to_olin()\n", + "plot_state()" + ] + }, + { + "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": 42, + "metadata": { + "collapsed": true + }, + "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": 43, + "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": 44, + "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": 45, + "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": 45, + "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": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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": 46, + "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": "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": 47, + "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": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap01_fig01.pdf\n", + "Saving figure to file chap01_fig02.pdf\n" + ] + } + ], + "source": [ + "savefig('chap01_fig01.pdf')\n", + "savefig('chap01_fig02.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": 50, + "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": 51, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running move_bike_debug with argument 1\n" + ] + } + ], + "source": [ + "# Solution goes here\n", + "move_bike_debug(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running bike_to_wellesley_debug\n", + "Running move_bike_debug with argument 1\n" + ] + } + ], + "source": [ + "# Solution goes here\n", + "bike_to_wellesley_debug()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running bike_to_olin_debug\n", + "Running move_bike_debug with argument -1\n" + ] + } + ], + "source": [ + "# Solution goes here\n", + "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": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "flip(0.2)" + ] + }, + { + "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": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "heads\n" + ] + } + ], + "source": [ + "if flip(0.7):\n", + " print('heads')\n", + " " + ] + }, + { + "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": 85, + "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": 86, + "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": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Moving a bike to Wellesley\n" + ] + }, + { + "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": 87, + "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": 88, + "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": 88, + "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": 89, + "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": 100, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Moving a bike to Wellesley\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
olin7
wellesley5
\n", + "
" + ], + "text/plain": [ + "olin 7\n", + "wellesley 5\n", + "dtype: int64" + ] + }, + "execution_count": 100, + "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": 105, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def decorate(): \n", + " legend(loc = 'best')\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": 106, + "metadata": { + "scrolled": true + }, + "outputs": [], + "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": 107, + "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": 108, + "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": 109, + "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": 110, + "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": 111, + "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": 112, + "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": 113, + "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": 114, + "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": 55, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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": 120, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def decorate(loc='best'):\n", + " legend(loc=loc)\n", + "decorate(loc)" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "decorate('upper right')" + ] + }, + { + "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": 122, + "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": 123, + "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": 124, + "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": 125, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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": 126, + "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": 127, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def run_steps(num_steps,p1,p2):\n", + " for i in range(num_steps):\n", + " step(p1,p2)\n", + " plot_state()" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare = System(olin=10, wellesley=2)\n", + "newfig()\n", + "run_steps(60,.7,.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bikeshare = System(olin=20, wellesley=20)\n", + "newfig()\n", + "run_steps(60,.9,.9)" + ] + }, + { + "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 +} From 7ced8f6ea6e600d37b36e479ed5b63ba200ac9ea Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 12 Sep 2017 21:54:09 -0400 Subject: [PATCH 02/11] Chapter 2 Completed --- code/chap01_fig01.pdf | Bin 0 -> 14488 bytes code/chap01_fig02.pdf | Bin 0 -> 14488 bytes code/chap02mine.ipynb | 6963 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 6963 insertions(+) create mode 100644 code/chap01_fig01.pdf create mode 100644 code/chap01_fig02.pdf create mode 100644 code/chap02mine.ipynb diff --git a/code/chap01_fig01.pdf b/code/chap01_fig01.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd99873495f17713c299003e2ab2af236d09c4f0 GIT binary patch literal 14488 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 Axc~qF literal 0 HcmV?d00001 diff --git a/code/chap01_fig02.pdf b/code/chap01_fig02.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fd99873495f17713c299003e2ab2af236d09c4f0 GIT binary patch literal 14488 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 Axc~qF literal 0 HcmV?d00001 diff --git a/code/chap02mine.ipynb b/code/chap02mine.ipynb new file mode 100644 index 00000000..84953992 --- /dev/null +++ b/code/chap02mine.ipynb @@ -0,0 +1,6963 @@ +{ + "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": 101, + "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 notebook\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": 102, + "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": 103, + "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": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare1 = System(olin=10, wellesley=2)\n", + "bikeshare1" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "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": 104, + "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": 105, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bike_to_olin(bikeshare1)" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "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": 107, + "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": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bikeshare1" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "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": 108, + "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": 109, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "IOPub data rate exceeded.\n", + "The notebook server will temporarily stop sending output\n", + "to the client in order to avoid crashing it.\n", + "To change this limit, set the config variable\n", + "`--NotebookApp.iopub_data_rate_limit`.\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": 112, + "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": null, + "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": null, + "metadata": {}, + "outputs": [], + "source": [ + "x == 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can use `==` in an `if` statement." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if x > 5:\n", + " print('yes, x is 5')\n", + "else:\n", + " print ('sorry, try again')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if you use `=` in an `if` statement, you get an error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# If you remove the # from the if statement and run it, you'll get\n", + "# SyntaxError: invalid syntax\n", + "\n", + "if x = 5:\n", + " print('yes, x is 5')" + ] + }, + { + "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": null, + "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": null, + "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": null, + "metadata": {}, + "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": null, + "metadata": {}, + "outputs": [], + "source": [ + "bikeshare.olin_empty" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "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": null, + "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", + " if flip(p1):\n", + " bike_to_wellesley(system)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(system)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0,\n", + " clock = 0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\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", + " system.clock += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "step (bikeshare)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the simulation, check the final value of `clock`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# print(bikeshare.clock)\n", + "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": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0,\n", + " clock = 0, t_first_empty = 0)\n", + "\n", + "def move_bike(system, n):\n", + " olin_temp = system.olin - n\n", + " if olin_temp < 0:\n", + " system.olin_empty += 1\n", + " system.t_first_empty += 1\n", + " return\n", + " \n", + " wellesley_temp = system.wellesley + n\n", + " if wellesley_temp < 0:\n", + " system.wellesley_empty += 1\n", + " system.t_first_empty += 1\n", + " return\n", + " \n", + " system.olin = olin_temp\n", + " system.wellesley = wellesley_temp" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare = System (olin = 10, wellesley = 2,\n", + " olin_empty = 0, wellesley_empty = 0,\n", + " clock = 0, t_first_empty = 0)\n", + "newfig()\n", + "plot_system(bikeshare)\n", + "decorate_bikeshare()\n", + "run_steps(bikeshare, 60, 0.7, 0.6)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After the simulation, check the final value of `t_first_empty`." + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'System' object has no attribute 't_first_empty'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mAttributeError\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;31m# print(bikeshare.t_first_empty)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mprint\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mbikeshare\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mt_first_empty\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32mC:\\ProgramData\\Miniconda3\\lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36m__getattr__\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 3079\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3080\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3081\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3082\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3083\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mAttributeError\u001b[0m: 'System' object has no attribute 't_first_empty'" + ] + } + ], + "source": [ + "# print(bikeshare.t_first_empty)\n", + "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": 114, + "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": 115, + "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": 116, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 116, + "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": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 117, + "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": 118, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 118, + "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": 119, + "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": 120, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def make_system():\n", + " system = System(olin=10, wellesley=2)\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "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": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "bikeshare = make_system()\n", + "bikeshare" + ] + }, + { + "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": 122, + "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": 123, + "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": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 124, + "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": 125, + "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": 126, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = run_simulation()" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4 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": 128, + "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": 129, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 129, + "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": 130, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 130, + "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": 131, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "bikeshare = System(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0)\n", + "def run_simulation(system, n, p1=0.4, p2=0.2, plot_flag=True):\n", + " run_steps(system, n, p1, p2, plot_flag)\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "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
olin5
wellesley7
olin_empty0
wellesley_empty0
\n", + "
" + ], + "text/plain": [ + "olin 5\n", + "wellesley 7\n", + "olin_empty 0\n", + "wellesley_empty 0\n", + "dtype: int64" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "run_simulation (bikeshare, 60, 0.4, 0.3, 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": 133, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 0.25, 0.5 , 0.75, 1. ])" + ] + }, + "execution_count": 133, + "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": 134, + "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": 135, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "array = linspace(1, 10, 10)\n", + "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": 136, + "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": 137, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 3., 5., 7., 9., 11.])" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "array = linrange(1, 11, 2)\n", + "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": 138, + "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": 138, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1_array = linspace(0, 1, 11)\n", + "p1_array" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0\n", + "0.1 0\n", + "0.2 0\n", + "0.3 4\n", + "0.4 3\n", + "0.5 0\n", + "0.6 16\n", + "0.7 24\n", + "0.8 25\n", + "0.9 37\n", + "1.0 39\n" + ] + } + ], + "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\n", + "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": 140, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "def parameter_sweep(p1_array):\n", + " newfig()\n", + " for p1 in p1_array:\n", + " system = run_simulation(bikeshare, p_array, p1=p1)\n", + " plot (p1, system.olin_empty, 'rs', label = 'olin')\n", + " plot (p1, system.wellesley_empty, 'bo', label = 'wellesley')\n", + "parameter_sweep(p1_array)\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "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": 163, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "newfig()\n", + "plot(3.8,12,'rs',label='12 bikes at olin')\n", + "plot(5.9,10,'bo',label='10 bikes at olin')\n", + "def decorate_bikeshare():\n", + " decorate(title='Olin-Wellesley Bikeshare',\n", + " xlabel='Unhappy people/# of simulation runs', \n", + " ylabel='# of bikes starting at olin')\n", + "decorate_bikeshare()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true, + "scrolled": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "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 +} From f56684038d74b4ffbc4354c28f7d875d321230ed Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 19 Sep 2017 19:16:50 -0400 Subject: [PATCH 03/11] Chapter 3 Complete --- code/chap03mine.ipynb | 4544 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4544 insertions(+) create mode 100644 code/chap03mine.ipynb diff --git a/code/chap03mine.ipynb b/code/chap03mine.ipynb new file mode 100644 index 00000000..0d4adbfb --- /dev/null +++ b/code/chap03mine.ipynb @@ -0,0 +1,4544 @@ +{ + "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": [ + "census-un#subtracts un value from census value for every year (in billions)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.09298198899999921" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(abs(census-un))#displays the value that is the farthest away from zero when you subtract un from census values\n", + "#instead of the most positive value" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2862470293832287" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(abs(census-un)/un)*100 #divides the value farthest from zero by the subtracted value at every point to give a percentage \n", + "#difference between the two#multiplying by 100 just makes it easier to view as a percentage" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.2813631502151765" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max(abs(un-census)/census)*100 #it does make a difference to switch the order of census and un because the difference is \n", + "#measured relative to each other so changing the values that you are referencing will give you a small difference" + ] + }, + { + "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 1970 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": { + "text/plain": [ + "(1970, 2015)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first_year = census.index[20]\n", + "last_year = census.index[-1]\n", + "first_year, last_year\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.078750939311111115" + ] + }, + "execution_count": 33, + "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": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "results = TimeSeries()\n", + "results[1950]=census[1950]-.42\n", + "for t in linrange(1950, 2015):\n", + " results[t+1] = results[t] + annual_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-5.03017777858e-05\n" + ] + } + ], + "source": [ + "print(results[2015] - census[2015])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEPCAYAAACqZsSmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVPX+x/HXzMDAsO87LiCisim4L7iWpmnl1hVNrVxK\nvdnNyhZv18xSS8tSuy5l5VYuaUZWVuaa5YLKJgqogIjsO8M6c35/8HOKq+SgwLB8n49HjweeM+ec\nz6S858z3fBeZJEkSgiAIQqsiN3QBgiAIQuMT4S8IgtAKifAXBEFohUT4C4IgtEJGhi5AH2VlZcTE\nxODo6IhCoTB0OYIgCE2eRqMhKysLf39/TE1Nb9vfLMI/JiaGyZMnG7oMQRCEZmf79u107979tu3N\nIvwdHR2B6jfh4uJi4GoEQRCavvT0dCZPnqzLz//VLML/VlOPi4sLHh4eBq5GEASh+aitqVw88BUE\nQWgGctQ5JOYm1tgmSRJarfaezifCXxAEoYlLzk9m+YnlrD29lrSiNKC6I8yZM2eIjo6+p3OK8BcE\nQWjCojKiWHlyJYXlhZRWlrL+7Hq0khZJksjJySElJYWsrKw6n1eEvyAIQhN1JOkIH5/5mApNBQBm\nxmY8EfgEcpkclUpF586dAcjLy6vzuZvFA19BEITWZm/cXg4mHgRA0kpYa+x4cfC/cLZw1r2mbdu2\n2NjYYGNjU+fzizt/QRCEJsjc2ByA0jwNlResMI9tj7LSpMZrZDLZPQU/iPAXBEFokoa2H4pbmQem\n8Y44lLRHXaRl//5j1Ncs/KLZRxAEwcBSC1MxUZjgaF49ICs3N5eoqCgClf44uKpJTi5ELpdjaelQ\nb9cU4S8IgmAgGq2GHxN/5Lv472hv2575PeaTEJ9AUlISkiRhJDfC09MKrVbFmDH9advWqd6uLcJf\nEATBANKK0vj8wuck5ycjIXE+5jKvHlrNwKDOyOUyAIyMjOjcuTOjR7dFJpPV6/VF+AuCIDQiraTl\n5ys/8+3lb6nSVgGQHVuJbZE9VJmSlFSIl5c1Tk5OBAYGolKpGqSORg3/U6dOMXXq1Dvu69WrF1u2\nbGnMcgRBEBpVRnEGn1/4nKt5V3XbjORG9OvQh/TTpciA7OwKxowJpF27NvV+t/9XjRr+3bp148SJ\nEzW2/fbbb7z66qvMnDmzMUtpcoYMGcL48eOZM2fOXfeVl5ezYcMGDhw4wI0bNzA3Nyc4OJi5c+fi\n7+//t9cpLi7mk08+4eDBg6SlpWFtbU2PHj2YN28e7du3b5D3JgitnSRJ/HrtV/Zd2kelplK3va1N\nW6Z3nY6rhSurkr7HwgImTRqEtbV5g9fUqOGvVCprTC9aVFTEypUrefrppxkwYEBjltKsvfbaa8TF\nxfH666/j5eVFfn4+mzdvZsqUKXz99dd4e3vf8bjs7GzCwsIwMzNjwYIF+Pr6kp2dzX//+1/+8Y9/\nsG3bNnx8fBr53QhCy6bRalj9x2ric+KRtBL5SRrs7VQ83OshRnQYgUJePevmv/71EApF4/W+N2g/\n/48//hilUsncuXMNWUazUlxczIEDB3jxxRcJDQ3Fw8MDf39/3nvvPezt7dm1a1etxy5evBhJkti2\nbRvDhg3D09OTbt26sW7dOpydnVmxYkUjvhNBaB0UcgXuVu6UFlSRf0HCItMGt7QAhngO0QU/0KjB\nDwYM/5ycHLZt28bcuXMb7IFGSyWXyzlx4gQajUa3TaFQ8MUXXzBr1qw7HpOVlcWhQ4eYNm0aFhYW\nNfYZGxuzatUqFi1apNsWHx/P008/TVBQEKGhobzxxhsUFhbq9g8ZMoTNmzfzzDPPEBQURL9+/Vi7\ndq1uf3Z2NvPmzaNnz5507dqV6dOnExcXp9vv6+vL/v37a9Tx121Xr17lqaeeIjg4mJCQEObMmUNq\nauo9/N8SBMOSJIluJt1wzXPBvswd+0pvinK0HDlyzqB1GSz8v/zyS+zt7RkzZkyDXSM8/AqzZ//E\n7Nk/ER5+5bb9u3df1u3/+eek2/Zv23ZRt//48duD55NPonT7T5++2RBv4TYWFhaEhYWxfft2QkND\nefnll9m9ezdpaWl4eHhgb29/x+Pi4uLQarUEBQXdcb+Pjw/t2rUDICMjgyeeeIKOHTuyb98+Pvro\nIxITE5k3b16NYz788EMGDx7Md999x/Tp01mzZg1nz54F4M0336Sqqoovv/ySvXv3Ym5uzj//+U+9\n3+eLL76Im5sb+/btY/v27eTl5fHaa6/pfbwgGIIkSfyW8htF5UVAddP2iRMniL8UT792vfBx9EIh\nlxMc3IVhw3oZtNY6tfmXlZWRkZFBUVERtra2ODo6olQq7+nC3377LWPHjsXY2Piejm/NFi1aRGBg\nIHv27OH7779n//79yGQyHnzwQd5++20sLS1vO+bWXbuVldVdz79jxw48PDxYuHChbtsHH3xAaGgo\n58+fp1u3bgAMHjyYxx9/HICZM2eyceNGLly4QPfu3UlOTsbX1xcPDw9MTExYsmQJiYmJaLVa5PK7\n33MkJyfTr18/3N3dMTIy4r333iM7O1uv/z+CYAh5pXlsjdpKbGYs/nZB9Fb2JzPzum6xFRkyAgM9\n8fLqhJeXq4Gr1SP8Kyoq2LNnD9999x1RUVG3NTX07NmT4cOH89hjj+n9QZCQkEBycjKjRo2698pb\nGCMjo1pX5NFqtRgZ1fyrGjNmDGPGjEGtVhMREcEPP/zAvn37kMvlrF69+rZz2NraAlBQUHDXWuLi\n4oiLi9OF/F9duXJFt/3WN4VbLC0tqays7skwZ84cFi5cyE8//USPHj0IDQ1l9OjRegU/wPz581mx\nYgU7duygd+/eDBo0SPx7EZokSZL4PfV3dsXuQl2ppvBmJb+diSTNqJy+3ToA1U21HTt2xNvbW+/f\ngYb2t+G/d+9eVq1aRUVFBYMHD2bEiBG4u7tjZmZGQUEB6enpnDt3jvfff5+1a9fy3HPPMWHChLte\n9OzZszg6OtbaK6W+jB7tzejRtV9jwgRfJkzwrXX/lCldmDKlS637Z8wIZMaMwPuq8RYrKyuKi4vv\nuK+goEA3c9+pU6c4cuSI7q7czMyMAQMGMGDAABwcHNi6desdz+Hv74+RkREXLlwgMPD2msPDwzl0\n6BArVqzA2NiYfv361XgGcIudnZ3u5zt92N+adGrEiBH07duXo0ePcvLkST7++GM2bNjA/v37cXC4\nfX6SqqqqGn+eOnUqI0eO5PDhw5w8eZJly5axefNm9u/ff8/fNgWhvuWX5bM1cisxmTEAVJRpIEWJ\njcaZqjIT0tKK8fdvQ2Bg4B2/kRtSreE/e/ZscnNzefPNNwkNDa31F2769OlUVFTw448/8tlnn/HT\nTz+xadOmv71oXFwcHTt2vL/KWxg/Pz/Onz9/2/ZLly6hVqsJCAgAqnv7bN68mYcffhg/P78ar7W0\ntKy1zd/a2poHHniAL774gnHjxmFu/mc/4vLycjZt2oSdnR0mJiZ06NCB8PBw3NzcdM1y169fZ+nS\npSxYsOCu/4irqqpYtWoVY8aMYfTo0YwePZqcnBz69u3L6dOnGTlyJMbGxjU+7JKTk3U/5+XlsXbt\nWmbOnMmECROYMGECUVFRTJgwgUuXLt3xw0sQGpMkSZy6cYqdMTtRV6p12z3t3XDt3IOkyBsolcZ0\n6NCZvn2DGnSw1r2qNfwfeughHn30Ub1OolQqdb/o33zzzV1fn5mZibW1tf5VtgJPPPEEjz32GG+8\n8YauL358fDyrVq1i8ODBuhV7Bg8eTI8ePZg9ezbz58+nZ8+elJWVcf78eTZs2MDrr79e6zVeeeUV\nwsLCmDx5Ms899xw+Pj7cuHGDdevWkZGRoWsumjJlCtu3b+eVV15h1qxZVFRUsGTJEgoLC29r6rkT\nIyMjYmNjOXv2LIsWLcLOzo7w8HCMjY11H1hdu3Zl165dhISEoNFoWLZsme4Gw9rammPHjnH9+nVe\neOEFVCoVe/fuxcrKSgxEEwwuvyyf7VHbicqIQquRkCtkyGQyhrQfwqOdHkUuGbFbfpIRIwKxtb37\nMzZDkUn1NTl0A0pNTWXo0KEcOnQIDw8PQ5fTYKKioli7di2RkZGo1WpcXFwYOXIkc+fOrfHNS61W\n60bppqamIpPJ6NSpE0899RQPPvjg314jKyuLDRs2cOTIETIzM7Gzs6Nnz57MmzePNm3a6F4XHR3N\nypUruXDhAqampvTq1YtXXnkFNzc34M4jkv+6LSsri3feeYfff/+dkpISfHx8mD9/PgMHDgQgMTGR\nxYsXExkZiZOTE/Pnz2fNmjXMmzePRx55hKtXr7J8+XLOnz9PRUUFAQEBvPzyy+KuXzCo3NJc3jr6\nFsUVJeRcq8A8zwz3IBueDn0SH/umNUDybrlZp/C/fPkypaWld3wwGRwcfH+V/o3WEv6CIDRtkiTx\n8e8fc/TQeUzKTTDX2NPZrRNzn514W6cMQ7tbbupVbUxMDPPnzyctLe22fZIkIZPJagzgEQRBaGkk\nSSI1NRXPPE/aW6RTXmyNUjKnqKCKwsIi7OxsDV1inegV/m+//TZyuZxly5bh4uLSZLoqCYIgNJT8\nsnwOxB9ggt8EqsqriIqKIisrCxky+nfoSVxlLh4eHowbNwATk+bXA02v8I+NjeX9999n2LBhDV2P\nIAiCQUmSxMnrJ9l9cTfFpSVcOHaTfh6+KP6chgczMzOefLJ3jYkqmxu9wt/Ozg7FX9+5IAhCC5Rb\nmsu2qG3EZsZSlFNB1VUjKrTXiC2xIrCLKzKZjPbt2+Pr69vk2vjrSq/qJ02axMaNG+ndu7eYhE0Q\nhBZHkiSOpxxnz8U9lFeVV2+TyTDVmGNX5UlBjobKSmMGD+6lGy3f3OkV/jdu3CAxMZH+/fvTsWPH\n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\nRU5ErkJggg==\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-fig03.pdf')" + ] + }, + { + "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": 37, + "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": 38, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system = 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": 39, + "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": 40, + "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": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation1(system)\n", + "plot_results(system, 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": 42, + "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": 43, + "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\n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\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": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system2 = System(t0=t0,\n", + " t_end=t_end,\n", + " p0=census[t0])" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_simulation1b(system, birth_rate, death_rate=.01):\n", + " results = TimeSeries()\n", + " results[system.t0]=system.p0\n", + " total_change = (birth_rate-death_rate)\n", + " for t in linrange(system.t0, system.t_end):\n", + " results[t+1]=results[t]+(results[t]*total_change)\n", + " system.results=results" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file GoodAssModel.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nycmcP3+eli1bltl7oizFVwKqNFOoIi0tDQsLC6Ukc+/ePY4ePQpQ4gGdZ+nRoweRkZGcPXtWUfbo\n0aMKD80gSRLz588nKytLqVdC165dCQsL48yZM0r1V69ezaRJkxTPUqh6nJX9/j6Ng4MDH3zwAffu\n3ePbb79VlFck1q5du5KWlsb27duV9vXbb78xefJk/v333yo7HjU1tRLvW2llz8Pe3p769euza9cu\npV4s165dIzQ0VKXYoPx/Vw0NDby8vDhz5gxhYWFKyxYuXMiECRPK1ZPN0tKSFi1acPDgQQICAhRP\nsj9JXV2djh078vfffxMSEqIolySJ9evXI5PJ6Ny5MzKZjO7du/PXX38pPTcUFxendH+nso+jIl6b\nM//jx48r2qclSeL+/fvs2LGD7OxsJk+eXO7tFW/r999/R5Ik+vfvX6H4vLy8OHToEDNmzMDBwYG4\nuDhFfACZmZnl2t57773HgQMHmDhxIiNGjMDY2Bh/f/9yNfuEh4crvizkcjnJyckcP36cwMBAhg8f\nrnRPYezYsRw9epQJEyYwePBgmjdvzuXLl9m/fz9eXl54eXmV6zgNDQ1RU1PjxIkTWFhY0KNHj3Id\nf3mNHz+eP//8E39/f/r160ebNm0qFKuPjw979+5lzpw5hISE4OjoSEREBP7+/tjZ2VXpkCDGxsaE\nhYWxbds23N3dadasGcbGxly8eJGNGzfSpk0bnJycnmvbampqTJs2jU8++YTBgwfz1ltv8eDBA375\n5ZdSm4JKiw1g+/btJCcn07dvX5X3/dlnnxEQEMDQoUMZOnQoFhYWnD59mlOnTjFo0CBF92NVeXt7\ns2LFCnR1dUtcxZS232HDhjFs2DDMzMw4duwY58+f57333lM8FDZp0iROnz6Nn58fI0eORF1dnV9/\n/RU9PT2lL8rKPo7n9dok/wULFih+V1dXp06dOjg4ODBv3jyVxvJ5krW1NcOGDWPPnj0EBQVVeJyS\nWbNmoaury8mTJ9m/fz/m5ua8/fbbdO/enSFDhnD+/HlatWql8vb09fXZunUr3377Lf7+/sjlcnr3\n7k3z5s2ZO3euSts4duyYYiwYNTU1DAwMaNWqFT/88EOJYR0MDQ3x9/dn2bJlHD58GH9/fywsLBg/\nfjxjxoxRnPGpepw6OjpMnjyZn376iblz55Z6I60y1apVi9mzZ/Pee+/x9ddfs2/fvgrF2rZtWzZv\n3szKlSs5cuQIv//+O3Xr1mXIkCFMmDChSi/tJ06cyMyZM5k/fz4TJkygWbNmjBo1ivDwcL7//nsG\nDBjw3MkfoFevXvzwww+sXr2ab7/9lnr16jF9+nT27dtX6nMJj/P09OSNN97g1KlTnD9/vlxf6o0a\nNWLHjh0sW7aMHTt2kJWVRcOGDZk+ffpzDVBXnPw7duyo1HOprP3++OOP/Pbbb+Tk5GBtbc28efN4\n9913FfXq16/P9u3bWbx4MRs2bEBLSwsfHx8ApXtElX0cz0smVdYdQEEQXnlyuZz09PRSewX17dsX\nAwODUp8IFl48r3WbvyAI5SOXy/Hy8mLGjBlK5eHh4URGRuLo6FhDkQnl9do0+wiCUHFaWlr06dOH\nXbt2IZPJsLe3JzExke3bt2NkZMR7771X0yEKKhLNPoIglEteXh4//fQT+/fv5+7du9SuXRtPT08+\n+eSTEg9SCi+ulyL55+TkEBwcjJmZWbkethIEQXhdyeVykpKSsLe3L/WG9kvR7BMcHMzQoUNrOgxB\nEISXztatW0sdm6zak39WVhZLlizhyJEj5OTk0Lp1a6ZNm/bUCRTMzMyAooN4WZ+MFARBqE73799n\n6NChivz5pGpP/vPmzePKlSssXboUQ0NDvv/+e0aNGsWRI0fKHBukuKnH3NxctCkKgiCUQ1lN5dXe\n1fP48eP4+vrSpk0brK2tmTx5Mvfu3ePmzZvVHYogCMJLLTMzs8RsZ6qq9uRvbGzMoUOHSElJIS8v\nj127dlGnTp1qG8lOEAThVZCdnc2///7L33//rdI8GE+q9uQ/Z84c7t+/T7t27WjdujU7duxg3bp1\nL+wQt4IgCC+a3Nxczp8/T3Z2NpmZmQQEBJR7uPZqT/537tzB1NSUdevWsX37djp06MDHH3+sNEm5\nIAiCULr8/HwCAgLIyMgAisbdsre3L/c8ItWa/GNjY/n666/53//+R6dOnXBycmLJkiVoa2uzefPm\n6gxFEAThpXT16lXS09OBokmbXFxcyuzR8zTVmvyDg4ORy+XY29sryjQ1NWnZsmWpkyAIgiAIymxs\nbBTDZzs6OirNGVwe1Zr8i/voh4eHK8okSSIqKoomTZpUZyiCIAgvJUNDQ9q1a4ejo2OFhjqv1uTv\n6OioeKjr0qVLREVFMXPmTO7evYufn191hiIIgvDSql27tmJq1OdVrclfXV2d1atX4+TkxKeffsqg\nQYOIiYlh27ZtNGjQoDpDEQRBeOFJkkRERASPHj2q9G1X+xO+xsbGKs8kJQiC8DqLiIggIiKC27dv\n07ZtWwwNDStt22IyF0EQhBdQVFQUERERQNEw2tHR0ZW6fZH8BUEQXjDR0dGEhoYqXtetW7fSZ0kT\nyf8F0bVrV1atWqXSstzcXJYtW0bPnj2xt7enbdu2fPjhhwQHBz9zPxkZGfz444+88cYbODk54eXl\nxZQpU7h9+3alHYsgCM8vNjaWoKAgxWsTExNcXV1RU6vcdC2S/0voyy+/5PDhw/zvf//j8OHD/PTT\nT+jo6ODn50dUVFSZ6yUnJzNgwABOnz7NlClTOHjwIEuXLuXRo0cMHjyYyMjIajwKQRCeFB8fT2Bg\noOK1kZER7u7uVTKJlUj+L5mMjAz++OMPPvvsM7y8vLC0tMTe3p5vv/0WExMTduzYUea6s2bNQpIk\ntmzZgre3Nw0bNsTZ2ZmVK1dSr149Fi1aVI1HIgjC4+7du8fVq1cVY/TUqVOHtm3boqFRNf1yRPJ/\nCampqXHu3DnkcrmiTF1dnZ9//pkxY8aUuk5SUhInTpxgxIgR6OvrKy3T1NRkyZIlfPXVV4qyiIgI\nPvjgA0XT0IwZM3j48KFiedeuXdm4cSPjxo3DycmJ9u3bs2LFCsXy5ORkPvroI9zd3WndujUjR47k\nxo0biuW2trbs379fKY7Hy27dusX777+Pi4sLbdq0Yfz48cTFxT3HuyUIL77ExESuXLmiSPy1a9em\nbdu2aGpqVtk+X+nkf+BAFGPHHmXs2KMcOFCyOWTnznDF8mPHokss37IlVLH8r79KJp4NG64rll+4\ncK8qDqEEfX19fH192bp1K15eXnzxxRfs3LmTu3fvYmlpiYmJSanr3bhxg8LCQpycnEpd3rx5c8VT\n1gkJCQwbNgwbGxv27t3LsmXLuHnzJh999JHSOkuXLqVLly4cPHiQkSNHsnz5ci5dugTA7NmzKSgo\nYPv27ezZswc9PT0mTpyo8nF+9tlnWFhYsHfvXrZu3UpqaipffvmlyusLwsskMTGRwsJCAPT09PDw\n8ChzcqvKUq7riZycHBISEnj06BFGRkaYmZkpxpgQqs9XX32Fo6Mju3bt4tChQ+zfvx+ZTEaPHj2Y\nN28etWvXLrFO8Vm7KkNnb9u2DUtLS6ZOnaoo++GHH/Dy8uLq1as4OzsD0KVLFwYNGgTA6NGjWbdu\nHdeuXcPV1ZU7d+5ga2uLpaUl2trafPPNN9y8eZPCwkKVblzduXOH9u3b06BBAzQ0NPj2229JTk5W\n6f0RhJeNnZ0dkiSRmJiIp6dnqROuV7ZnJv/iCVcOHjzI9evXSzQ1uLu707NnT/r37y++CCpAQ0ND\n8c3/pMLCwhLtfv369aNfv35kZWVx+fJl/vzzT/bu3Yuamho//vhjiW0YGRkBKEYDfJobN25w48YN\nRZJ/XFRUlKL8yfGYateuTX5+PgDjx49n6tSpHD16FDc3N7y8vOjbt6/KPRYmTZrEokWL2LZtGx4e\nHnTu3Jk+ffqotK4gvGxkMhn29vbk5eVV+Rl/sacm/z179rBkyRLy8vLo0qULvXr1okGDBujq6pKe\nns79+/e5cuUK33//PStWrODjjz/Gx8enWgJXRd++1vTta13mch8fW3x8bMtc7ufXCj+/VmUuHzXK\nkVGjKqfvrYGBgWJ87ielp6crnuwLCAjg9OnTirNyXV1dOnbsSMeOHTE1NeXXX38tdRv29vZoaGhw\n7dq1UvsLHzhwgBMnTrBo0SI0NTVp37690j2AYsbGxorfS/uyL26z7NWrF+3atePMmTP8888/rFq1\nirVr17J//35MTU1LrFdQUKD0evjw4fTu3ZtTp07xzz//sGDBAjZu3Mj+/fvFSYbw0svMzERXV1dp\nDH6ZTFZtiR+ekvzHjh3LgwcPmD17Nl5eXmV+4EaOHEleXh6HDx9m06ZNHD16lPXr11dZwK8qOzs7\nrl69WqI8LCyMrKwsHBwcgKLePhs3buTNN9/Ezs5OqW7t2rXLbPOvU6cO3bt35+eff+add95BT09P\nsSw3N5f169djbGyMtrY2zZo148CBA1hYWChuOMXGxjJ37lymTJlSarPS4woKCliyZAn9+vWjb9++\n9O3bl5SUFNq1a8eFCxfo3bs3mpqaSl92jw/pnZqayooVKxg9ejQ+Pj74+Phw/fp1fHx8CAsLq/SH\nXQShOqWlpfHvv/9Sv359nJycyj0JS2Up8xr8jTfeYOfOnXh7ez/zTEtLS4t+/fqxZ88eevfuXelB\nvg6GDRtGaGgoM2bMICwsjJiYGI4fP87kyZPp0qULLVu2BIra2d3c3Bg7diw7d+7kzp07hIeH89tv\nv7F27VomTJhQ5j6mTZuGJEkMHTqUkydPEhsby/nz5xk1ahQJCQnMmDEDAD8/Px4+fMi0adMIDw8n\nKCiITz/9lOjoaJWG3tbQ0CAkJIQZM2YQGBhIbGws/v7+aGpqKr6wiqfwDAsLIyQkhJkzZyr+z+rU\nqcPZs2cV78WdO3fYs2cPBgYGNG3atILvtCDUnLS0NM6fP09BQQGxsbFKT/FWtzLP/N9+++1yb0wm\nk9G/f/8KBfS6atasGVu3bmXFihWMGDGCrKwszM3N6d27t1JCV1NTY926dWzYsIHNmzczd+5cZDIZ\nLVq0YP78+fTo0aPMfZibm+Pv78/atWuZP38+iYmJGBsb4+7uzrx58xRjg5uZmbFp0ya+++47Bg4c\nSK1atWjbti1Lly5VucllyZIlzJ8/n7Fjx5KZmUnz5s1ZuXKlYhjaWbNmMWvWLHx8fKhbty6TJk0i\nISFBcYxr165l4cKFDBs2jLy8PBwcHPjpp5+eedUhCC+q4sRffF9MS0urQuPxV5RMKsesv+Hh4WRn\nZ5d6Y9LFxaVSA3tcXFwc3bp148SJE1haWlbZfgRBEKpCaYnf09NTpd53z+tZeVOlrp7BwcFMmjSJ\nu3fvllgmSRIymUzpAR5BEAShSE0kflWolPznzZuHmpoaCxYswNzcvNIHGBIEQXgVpaenl0j8Hh4e\nNZ74QcXkHxISwvfff4+3t3dVxyMIgvBKKO2M38PDgzp16jzX9h7mPiQ1O5XGhhWbvrGYSqfwxsbG\nVTKqnCAIwqtIkiSuXr2qSPyampoVSvwAW65vYfmF5TzIflApMaqU/IcMGcK6devIzs6ulJ0KgiC8\nymQyGa6urmhrayva+CuS+AGG2A9BhozVF1dTKJU+GkB5qNTsEx8fz82bN+nQoQM2Njbo6OgoLZfJ\nZPz0008VDkYQBOFVUbt2bTw9PZEkqVLa+I10jPjQ7UOy8rNQk1X8vqtKyf/27du0aNFC8br4UkYQ\nBEEoIpfLSzSPP+9zKQ9zHxKdFo1jPeWn2a2MrJ47vieplPzLGi9GEARBKJov4+rVq7i7uyvG4Xoe\nkiTxT+w/7ArdRU5BDh+3/ZiWZi0rMdL/lGtI55s3b3LhwgUyMjIwMjKiTZs2WFlV3jeRIAjCyyYh\nIYFLly5RWFjI+fPnn7t9PyEjgS3XtxCREgHAo4w8Rq/5hu/6LMDDpUklR61i8i8sLGTGjBns3r2b\nxx8IlslkvPXWWyxYsKDGBid6VXTt2pV3332X8ePHP3VZ8VN7vXv35ocffihR19bWlsWLF/PWW2+V\nWFa87uNq1apFkyZNGDhwIL6+voq/4549e5g+fXqZ8S5dupRevXoBRcM8L1u2jICAADIyMqhfvz7d\nu3dn/PjN/W4DAAAgAElEQVTxJWYNg6JBA0+fPs2OHTvKnFxGEF4G9+7d48qVK4pRDzQ0NMo97WJB\nYQFHo47yR8QfFBQWjW6bmJTFnRtymmV148DuWNo4NERTs3J7XKoU5bp169i3bx9Tpkyhb9++mJqa\nkpSUxIEDB1i2bBnW1taMHj26UgMTnu7QoUP06dPnuZ69WLVqFY6OjkiSxKNHjzh16hQLFy4kLi5O\naQIXdXV1zpw5U+o2is9skpKS8PX1xdvbm02bNlG7dm3Cw8NZsGABwcHB/PLLL0rrJSUlce7cOZo0\naYK/v79I/sJLKz4+XmnOXV1dXTw9PdHV1VV5G7dTb/NL4C/cffTf6AlqMjXede5LQJAhuQWQlpbL\nrVvp2NoaP2VL5adS8t+1axfjxo1j1KhRijJzc3NGjx5Nbm4uu3btEsm/mjVs2JBZs2bh5uZW7kvM\nOnXqYGZmBkDdunWxtrZGQ0ODRYsW8c4779CsWTNF3eJ6ZTl8+DBQ9BR4MUtLS/T09BgxYgRhYWFK\nnQV+//136taty9ChQ/nhhx/48ssvS706EIQXWWxsLIGBgYrEr6enh6enZ4mekGXJKchhX9g+Tkef\nVmpNaWzYmGGOw2hYpyENH8Vy7VoSgwfbUreu3lO29nxU6i+UlJREmzZtSl3m4uLCvXuqzV8bEBCA\nra1tqT/Dhw9XPWqBzz//nPz8fBYsWFAp2/Px8UFLS4s///yzXOupqanx6NEjLl++rFTu5ubGwYMH\nSwzBvG/fPjw8POjevTvZ2dn8/vvvFY5dEKpTdHQ0165dU5psvV27dionfoDtQds5dfsUBQVybt1K\nIykhDx87H6Z1mEbDOg0B6NjRkokTnask8YOKZ/4NGzbk6tWreHp6llh29erVZ54dFnN2dubcuXNK\nZX///TfTp0+vkiuHA+EHOBhxUKW6HRt3xM/RT6lsy/Ut/HXnL5XWf9PmTfra9i13jM/LxMSE6dOn\nM3XqVHr37o2Xl1eFtqenp4elpSURERHlWq9Pnz789NNP+Pr6YmdnR9u2bWnbti0eHh40b95cqW5Q\nUBARERFMmTKF+vXr07p1a3bu3Imvr2+FYheE6nLz5k2lQSwNDAyea7L1vrZ9+etmAFcCE9DLssRK\n6o77wI5K/fer+j6qSmf+7777LmvWrGHz5s2KWeYTExPZtGkTa9euZcCAASrtTEtLCzMzM8VPrVq1\n+O677/jggw/o2LFjhQ7kdfT222/TuXNnZsyYUeYUkOXx5FSScrkcZ2fnEj9du3ZV1DE0NGT37t2M\nGTOGzMxMNm7cyNixY2nfvj3bt29X2v7evXsxMDCgXbt2QNEXR2hoKNevX69w7IJQ1ZKTk5USv5GR\nEe3atXtm4pckqcQTuaa6pgxzGYyL7E3sMt+CLD3+/ju+SuIui0pn/sOGDePGjRssXLiQRYsWKcol\nSaJfv358+OGHz7XzVatWoaWl9dTZp14X5Z3Avdjs2bPp06cPixcv5ptvvqlQDBkZGUpXcerq6uzb\nt69EvSdHdTUyMmLKlClMmTKFu3fv8s8//7Bt2zZmzZqFhYUFnTp1Ii8vjz/++INu3bopJoTp1asX\n8+fPx9/fX0zNKLzwTExMsLKy4tatW5iYmODu7v7Mnj2JmYlsvb6V5ibNedPmTaVlXaw7U2+IPZs2\nBePjY4ubm3lVhl+CSslfXV2dRYsWMWrUKC5evMjDhw8xMDDAzc2txKW9qlJSUtiyZQuzZs0qV1tZ\nefS17Vuhphg/R78STUFVRdUJ3J9kbm7O1KlTmTFjRoWm0MzOzub27dv06dNHqbx45q2yrFu3jsaN\nG9OzZ08ALCwsePfdd+nXrx+9evXizJkzdOrUiZMnT5KWlsb+/fuV2vkLCws5dOgQ06dPFzd+hRea\nTCajVatW6Onp0bBhw6cOdikvlHPs1jEORhwkX55PwM3rZETWZXAfd6V6rVqZMm9eR7S0qn/gzHJ1\nSG3evPlzJ/snbd++HRMTE/r161cp23vZqTqBe2kGDhzIoUOH+Oqrr557/zt37qSwsLDcXyDXr1/n\nzz//xNvbW+nDoKWlhY6OjmJC+b1791KvXj02bNigtP7ly5eZNWsWBw4cYMiQIc8dvyBUtuIr8cev\ndGUy2TPnsY5Oi+bXwF+JexiHvLCQiPBUkpOzyc75Cy/nVlhYKJ/k1ETih6ck/549e7J06VJatGhB\njx49nnnz4ciRI+Xa8e+//86AAQPQ1NQs13qvqmHDhtG/f39mzJiBr68vurq6REREsGTJEqUJ3Msy\nd+5c+vZV7SonPT2dpKQkJEni4cOHnD17lh9//JExY8aUmFM0KSmp1G3o6Oigr6/PhAkT8PX1ZcyY\nMYwaNYpGjRpx79499u7dS3p6OoMGDVL07Z8wYQI2NjZK27G2tmb9+vXs3LlTJH/hhVFQUMDly5dR\nV1enTZs2Kt18zS3IZX/4fk7ePqnoCaSmJkNPboplRntqy+uxd28kEyY4V3X4Kikz+bu4uKCnp6f4\nvTLvPEdGRnLnzp0STQyvM1UncC+LpaUlU6ZMYc6cOc+s+/hTxIaGhlhbWzNnzpwSTwXL5XI6dOhQ\n6jaGDh3KjBkzaNmyJf7+/qxevZrPP/+ctLQ0DAwMaN++Pb/99humpqb89NNPyGQyBg4cWGI76urq\nDB8+nAULFhAUFPTUKxxBqA75+flcuHCBBw+Kxs0PDAzEycnpqTkwKCGIbUHblMba11TXpJ9tP+za\neDBvbgBt29VnwACbMrdR3co1gXtl2b59OytXrizR7bMsYgJ3QRCqQ25uLgEBAaSnpyvKbG1tad68\neanJPzs/my3Xt3Dp7iVy8+QkJ2fRwKI2Lc1a4ufoh6muKQAPHmRjbFw19zbL8twTuCckJJRrR/Xq\n1VO57o0bN0pc/guCINSkrKwszp8/T2ZmpqLMzs7uqYNXaqlrcffRXeLvZnAnOh1ZgTZDWgzDt20v\npS+L6k78qigz+Xfq1KlcTT2P9399lsTExArPaiMIglBZHj58SEBAADk5OUDRjV0nJycaNmz41PXU\n1dQZ7jSc05enYpJti1WOF2HHayN1hBd9rMsyk//8+fOr7AmzNWvWVMl2BUEQyuvBgwdcuHBBMUmV\nmpoabdq0wdxcud99QWEBAXEBtGvYTik3NjVqyoahS1ix6CYG9bQYMqQFamoveObnKclf1ad2BUEQ\nXlaJiYlcunQJuVwOFD1s6e7uruiiXCwyJZIt17dwL+Me4REPGNn1TaUEb23ekMmT62BhoY+GRsWn\nWKwOZSb/8pydy2Qyxo4dWykBCYIgVAdJkggNDVUkfm1tbdq2bavUJJ2Zl8meG3s4F3OOzKx8IiNT\n+Td9E/VlzXijm3L360aNKj5Pb3UqM/n/+OOPKm9EJH9BEF42MpkMd3d3zp07h7q6Oh4eHoru7ZIk\ncSH+AjtDd/Io9xEAycnZZKZLNM3x5PCBeNq7WWFgUL4B3V4kZSb/sLCw6oxDEASh2unq6uLh4YGW\nlha1atUCisbj2Ra0jRtJyp1Y3mzTgej7VmRlatClW2Nq1SrfjF0vmpc7ekEQBBUVFhaSnp6OkZGR\nUrmBQVFzzePTKWZk56CpqYa6mhpGOkYMsR+Ck7kTt+qmoaOjQf36L/84VDU2vIMgCEJ1KSgo4NKl\nS6SkpODh4VHihi7A4ZuH2R/2O/HxGcTceUiDBvp80HUA/Wz7UUuj6KrAyqr0ARZfRjUyvIMgCEJ1\nefKp3QsXLtC5c+cSowl3a9qNHQGHuH07HX25GWZh3nR4p7ci8b9qykz+j08PuHDhwmoJRqhaly5d\nYujQoSoPk7Fnzx6++uorQkNDqyE6Qah8GRkZBAQEkJWVpSiztrZGW1ub3IJctDX+u2Gro6nDJ91G\nsfbuv0i3rLFsYIBcXvocG68Cldv8CwsLOXXqFJcvXyYjI0MxmUFpUzsKgiDUtAcPHnDx4kXy8vKA\not49jo6OaBhpsOTfJRjpGOPXaoTSjVsXCxdmDrMhJCSZrl0boa7+cvTZfx4qJf/k5GRGjRpFWFgY\nWlpaGBsbk5KSwpo1a/D09GTFihXo6upWdayCIAgquX//PleuXFH04VdXV8extSMX0i9w7Pox0h/l\ncPNmGnfPmzBj/NtK61pY6JcYc/9VpNLX2sKFC0lKSmL9+vVcv36d06dPExQUxPLlywkJCVGa2lF4\nPra2tuzcuZPBgwfj4OBA7969uXbtGtu2baNTp064uLjw6aefKs5ioKgZx8/PD2dnZ9q1a8fcuXPJ\nzs5WLA8LC8PPzw8nJyfefPNNQkJClPZZWFjImjVr6NKlC61bt+add97hzJkz1XbMglAVbt++rfTU\nrra2NobNDVl1YxVHbh4hKzuPa9cSyXiUz8UbEYSEJNdwxDVDpTP/U6dO8fXXX5eYZN3b25sHDx7w\n3XffMXv27CoJsCLCw8OJiIhQqW7jxo1LzCN7/fp17ty5o9L6NjY22NraljvGx33//ffMmzePJk2a\nMG3aNMaMGYODgwPr16/n9u3bTJkyBVdXV3x9fQkMDGTkyJEMGzaM2bNnExcXx6xZs4iLi2PNmjWk\np6czcuRIPDw82L17N9HR0Xz99ddK+1uyZAnHjh3jm2++oVGjRvz111989NFHbNiwgbZt21boWASh\nJoSGhhIVFaV4raatRrhOOMFhwYqyWrU0cLBogWaYK3XUzEhKyiptU688lZK/lpYWtWvXLnWZhYVF\npQb0Ohs4cCBdu3YF4K233uKbb75h1qxZNGzYEBsbGzZs2EBkZCQAGzduxN7enqlTpwJFN7FmzZrF\nmDFjiIyM5OLFi+Tn5zNv3jz09PRo1qwZCQkJikneMzMz+eWXX1i+fLniS71x48aEhYWxbt06kfyF\nl1Jx87OERFJhEtdyr5Gbm4uMot6K+lr6vNPqHey8XPjtt3D6929G3bp6NRlyjVEp+Q8ZMoSlS5fi\n5OSEqampojwrK4t169bh4+NTZQG+Th6fQlFHRwc1NTWlXjm1atVSNPtERkbSqVMnpfVdXV0VyyIj\nI2natKmiuy5A69atFb9HRUWRl5fHpEmTlOYozc/PV/obC8LLpEmTJqQ+TGVf0D7ide8SHf2QR4/y\naO1UF6/GXrzd4m30tIo+E2PHOtVwtDWrzOT//vvvK36XJImoqCi8vb1xcXHBxMSEhw8fcuXKFQoK\nCqhbt261BFtetra2FWqKcXR0LNEUVJU0NJT/HDKZrMznK4ofRX9c8aRsGhoayGQynpyk7fH5krW0\ntABYvnw5jRs3Vqr3+JeBILzIJEkq8Rlp7dCas5nn+P3Pq+TkyNGXm9FVewSDHNvVUJQvpjKTf/HY\n1sVcXFwU5ffv3wegRYsWQNGwqEL1sra25urVq0plly9fVixLT09XTKJePEphcPB/7Z6NGzdGU1OT\nhIQEvLy8FOUrVqxALpczadKkajgKQXh+KSkpRERE4ObmpnTiJJPJGOo0hDPXrpMf2pz6eY6k3X49\nm3aepszk/+uvv1ZnHEI5jR49mv79+7No0SJ8fHyIj49n9uzZdOrUCWtra+rVq8fKlSv54osvmDJl\nCgkJCSxbtkyxvo6ODiNHjmTJkiXo6enh4ODAqVOnWLlyJfPmzavBIxOEZ4uLiyMwMJDUrFTOxZ7j\n4/4fo6353wNbprqmbH1/BSuWBdK5c0NcXc2fsrXXU5nX98VnkeV16dKl5w5GUJ2NjQ1r1qzhwoUL\n9OvXj+nTp9O9e3eWLl0KgL6+Pj///DMFBQX4+PjwzTffMHr0aKVtfPLJJwwZMoTFixfzxhtvsH37\ndr755hsxkY/wwpIkifDwcAIuBRCaGMr1xOtEx8YzdtEycnMLlOrqaGvz2WduuLnVF8PTlEImPdkw\n/P/69euHtbU1H374oUqTrV+/fp3169cTHR3NgQMHKjXIZ81CLwjCq08ul3P12lUuhl0kJj0GuSQn\nIS2Da+lxSJIm/2s7m0Hv2td0mC+MZ+XNMpt9du/ezYoVK3jnnXdo0qQJPXr0wNHREUtLS3R0dHj4\n8CEJCQlcvnyZs2fPcvv2bfz8/FiyZEmVHpAgCK+f3NxcDp05RGB0IFn5Rf3yC2oV8LDeIwyTm9E0\nuwOBV1IZ8JYcTU31Go725VBm8tfU1GTy5Mn4+vqyefNmduzYwcqVK5UunyRJwsLCgp49e7J27Vrq\n1atXLUELgvD6iE2Mxf+oP4np/3UsydPPw6iREQsdxnIw/SFNmtShTx8rkfjL4Zn9/OvVq8fUqVOZ\nOnUqUVFRxMXF8ejRI4yMjLCwsKBp06bVEacgCK+hg1cOci7gHLm5BTx6lEedOtpQr5A+rn3o2rQr\n6mrqNJ8sKU2mLqimXDN5WVtbY21tXVWxCIIgKEiSxIN7D3j4MJeMR3kUUAgFJix56xPq1PpvknWR\n+J+PeJpHEIQXkkwmw6ebD7Vr61FYqIlamgvaUe0pyNSq6dBeCWIOX0EQaly+PJ8jUUdobd4aS4P/\neqbo1NLh40EfcnD3PfJy1Rg0yBYTE52nbElQlUj+giDUGEmSuJ5wHf8Qf5KSU9gb/xdfD5hOkyb/\nzZXbwKQB779njoaGmuivX4lqpNln586d9OzZE0dHRwYMGMC///5bE2EIglCDEjISWH5hOasuriL2\nViLZwerkPchg2ZZdpYxLpS4SfyWr9uS/d+9eZs+ezejRozlw4ABubm6MHz+euLi46g5FEIQakFuQ\ny94be5l9ZjYhCSFop2tjlmWIhqRBnQIL1NLlBAeL8cKqmkrNPrm5uaxdu5bTp0+TlZVV4lsZ4MiR\nI8/cjiRJLF++nNGjR/Puu+8CMHXqVM6fP8/Vq1fF07uC8AqTJIlLdy+xK3QXaTlpUAi6KbpoZmtS\n37A+jWTGPEiGN9/shIODeGaoqqmU/OfNm8fOnTtxd3enefPmzz3k761bt4iPj6d3796KMjU1Nfbv\n3/9c2xME4eVwP+M+W69vJTw5nLt3M9DT0sKywAQjNSOamTdDT0sP42YmtG7tjJ6euKFbHVRK/keO\nHGHy5MmMGTOmQjuLjo4G4OHDhwwfPpzIyEisrKyYMmWKYshoQRBePfnyfALjQgm9kYJaljqtapnR\nwrYl5rWLzvCbNm1Kq1atxFwS1UildzovL69SJjXJyMgAYNq0afj4+LBhwwaaN2/OiBEjlObdFATh\n1dKwTkM6N/XCME8PFzU7TLNtkD/UQ01NDScnJ+zt7UXir2YqvdsdOnTg7NmzFd5Z8UxS48aNo2/f\nvtjZ2TFz5kyaNGnC9u3bK7x9QRBqXkx6DFfuXSlR/pbtm/Rv0hMjGmDd1JimTU3w9PRUmr5UqD4q\nNfv069ePr776itTUVFxcXEqdQrBv377P3E7xdI+PDxEtk8mwsrISvX0E4SWXmZfJvrB9/BXzF9mP\nYESjKXRt31yx3MTAhHf69uCffwKoW9cEV1fXUnOJUD1USv4TJ04Eirpp7t27t8RymUymUvK3s7ND\nV1eXoKAgHBwcgP/mB/b09CxP3IIgvCAkSeKf2H/YfWM36VmPuBmVRmJiFveu/ISL3SwMDf9L8Obm\n5rRv74GZmZlo5qlhKiX/EydOVMrOdHR0GDFiBD/++COmpqbY2Niwbds2YmJilKYYFATh5RCbHsu2\noG3cSr0FgJq6jIyMPIwLGtNU3pxduwIZNaqt0jpi6PcXg0rJv0GDBorfs7KyyMzMxNDQUNGGXx6T\nJk1CR0eH+fPnk5KSQsuWLdm4cSNWVlbl3pYgCDUjpyCH/WH7ORV9Sum5H1NdE770Hsxfu+NoYClh\nbp5Kbm4u2traT9maUBNUHtsnICCA7777jpCQEMUf29HRkU8++aRcTTYymYyxY8cyduzY8kcrCEKN\nkiSJy/cusyNkB8kZD0hLy8XMVBd1NXV6WPego3lHrl+9jqdHbXR1NZCkfKKiomjVqlVNhy48QaXk\nf/HiRT744AOaNm3Kxx9/jImJCYmJiRw+fJjRo0ezefNmXF1dqzpWQRBqWH5hPjtCdhARc5dbt9Ip\nyC/Eoasd4zu8h/yhnAv/XqCgoABd3aLU0rRpU1q0aFHDUQulUSn5L126FE9PT9atW6c0uNL48eMZ\nM2YMy5cv5+eff66yIAVBeDFoqWsxyG4QH12YhyyvFi2yO1HrahuSLJO4ffu2op66urpizm/hxaTS\n7fbg4GCGDh1aYlQ9mUzG0KFDCQoKqpLgBEGoWQkZCSXKXOq78EXvMXhkjcS2dkuaN3+olPj19PTo\n0KGDSPwvOJXO/A0MDMjKyip1WWZmJurqYtJkQXiVZOVnsTt0N+dizuFrNZpOdv8168pkMvo798Ji\neCQPHkRRUJCvWGZubk7r1q2fqzOIUL1UOvP38PBg+fLlJCQonwUkJCSwfPly0UdfEF4RkiRxMf4i\nM07N4NStM0REPGDypu+5Eni3RN169TQViV8mk9GyZUtcXV1F4n9JqHTmP2XKFN555x169uxJmzZt\nMDU1JTk5mcuXL6Ovr8/nn39e1XEKglDFHmQ/YFvQNoISippxY+484n5CFiZyK7b6B2HXoi7a2v+l\njMaNG5OSkkJKSgouLi6YmprWVOjCc1Ap+derV4+9e/eyceNGLl++TFxcHAYGBvj6+vLee+9hZmZW\n1XEKglBFCqVCzkSfYW/YXnILchXlDjYNMY+zQS+rCTYt6pGXJ1dK/jKZDCcnJwoKCsQwDS8hlfv5\nm5mZMXXq1KqMRRCEanbv0T1+CfyFmw+ikMlARlGnjs5NOtO/ZX9CzdNRV5dRu3YG165doF27dkr3\n+DQ0NNDQEFOBv4zK/KutWbOGAQMGULduXdasWfPUjRQ/uCUIwsvjYvxFNl/bTEpaJpGRqVhY6NPG\npjnDHIdhbWwNgL29GoGBgYSE3AcgJCSkUoZ3F2pemcn/xx9/pF27dtStW5cff/zxqRsRyV8QXj5N\njZqSkpJDYHASaqhBREs+evcTTI31AUhNTeXy5ctkZ2cr1klPT0cul4sefq+AMpN/WFhYqb8LgvBq\nMNU15X3PwSyM2oVFYmdMtOpx/242JkZ63Lp1ixs3biiN22NlZUXLli3FaJyvCJX+iitWrCjRzbNY\nfHw8c+fOrdSgBEGoXNFp0fwd83eJcu9m3Vg9dD4dnFoya1Y7mjc34MKFC4SGhioSv6amJm5ubtjZ\n2YnE/wpR6U7NypUr8fLyKnUo1mvXruHv789XX31V6cEJglAxBYUFHIw4yJ83/yTxfjZRpjKGv91O\nsVxNpoatjQm2NiYkJydz9uxVcnJyFMuNjIxwcXFBV1e3JsIXqlCZyX/IkCFcu3YNKHrwY9CgQWVu\npHhiFkEQXhx30u6w+dpmYlLjCL2RQlpaLqtvbKZLG3saNjRQqpucnMz58+eVmnmsra1p0aKFONt/\nRZWZ/OfOncvRo0eRJIlly5YxcOBAzM3Nleqoq6tTu3ZtvL29qzxQQRBUIy+U80fkH/wZ+SeFUiHq\nGjIkCQwLGmCT3Z3Dh6MZPVq5x46JiQlGRkY8ePAAbW1tWrdurZh2VXg1lZn8ra2t+fDDDwEoLCzE\nx8dHzMAjCC+4u4/usunqJmLSYxRl2urafNF7FKc2adGleyP69rUusZ5MJsPZ2ZnQ0FDs7e3FQ1uv\nAZXa/D/66COgqOtXfn6+4tJQkiSysrK4fPkyPj4+VRelIAhPVSgVcvzWcfbd2EdCcgamJjoANDdp\nzginEZjpmdGjeR76+loUFBRw69YtmjZtqjRSr66urpiX4zWiUvIPDw/ns88+4+bNm6Uul8lkIvkL\nQg36+drPHAs7S0REKpmZ+Tg51GNUe1+6Ne2mSPD6+lqkp6dz5coVMjIyKCwspFmzZjUcuVBTVLqT\ns3jxYtLS0pg6dSru7u506NCBr7/+mk6dOiGTyfjll1+qOk5BEJ6iU5NO3LubSWZmPvpyM0xC3qSD\nRWdF4pckiaioKM6dO0dGRgZQ9PxOZmZmTYYt1CCVkv+1a9eYNGkSI0eOpHfv3mRnZ+Pr68uaNWvw\n9vbm119/reo4BUF4CisjKz7qPhRbWTvccofQ37sNWlpFT+Hm5ORw/vx5QkNDKSwsBIrG5HFychJd\nOF9jKjX75OXl0aRJEwCaNGmi9MTvgAEDmDlzZpUEJwhCSREpEWTmZtG6vpNSm/07jm9hp9UBU1Md\nTE2Lkvq9e/cIDAwkP/+/CVcMDQ1xdnZGX1+/2mMXXhwqJX8LCwvi4uJwdXWlSZMmZGRkEB8fT4MG\nDdDW1iY9Pb2q4xSE115BYQEHwg+w5/pBosIy+drrK97oYq9Up0ULk6K6BQWEhIQQE/Nfrx+ZTEaz\nZs2wsbERffcF1Zp9vL29+e677zh27Bj16tXDysqKpUuXEhUVxebNm2nYsGFVxykIr7XEzEQW/72Y\n7Zf2ceXKfVIzH/HtoZ9ISckuUTcjI4MzZ84oJX4dHR08PT3FQ1uCgspdPe/cucOOHTvo3r0706dP\n56OPPuLAgQOoq6vz/fffV3WcgvBakiSJf2L/wT/En9yCXOoYaFOrlgbaj+pjnd+JmJiHmPx/t85i\nOjo6Sgm+QYMGODg4iOkVBSUqJX8dHR1WrFhBXl4eAB07duTAgQOEhIRgZ2dHo0aNqjRIQXgdZeVn\n8Wvgr1y5d0VRpqmhwaQeI7l3zoIRI+wxN9crsZ66ujrOzs4EBARgZ2dHgwYNlO4NCAKUYyYvAC0t\nLcXvjRo1EklfEKpIZEoky/5eQ2xSAvXqFiV4c31zRrmMomGdhkjtJGQyGZIkkZCQQL169ZQSvKGh\nId26dROzbAllKvM/o0ePHuU6Wzhy5IhK9W7evEmfPn1KlG/dulU8XSgIwJGbR1h58ldu3UqjUJLQ\n1dWkj503PnY+aKkXnYDJZDKysrK4du0aKSkpODs7Y2lpqbQdkfiFpynzv8PFxaVKLhUjIiIwMjLi\nwIEDSuWGhoaVvi9BeBmZ6JiSmJSJvFBCU6qFYWRnfAf7Kj2wFRsbS0hICAUFBQAEBQVhYmKCjo7O\n07LqxsgAACAASURBVDYtCAplJv+FCxdWyQ4jIiJo1qwZZmZmVbJ9QXjZuTZow/BOb7Lt94t00H+b\n8SPbKRJ/Tk4O169fV5pcSSaT0bRpU7S1tWsqZOElpNJ14ZUrV55Zx8XFRaUdRkZGYmVlpVJdQXjV\n5RTkcDc1ESsz5ftnoz2H06N+f5o0NkRDQw1JkoiPjyc4OFjpgS19fX1at26NkZFRdYcuvORUSv6+\nvr7PbAK6ceOGSjuMjIwkNzeXgQMHEh8fT/Pmzfn0009xdHR89sqC8AqJehDFnD+WERqazMpBC3Br\n/d8XgKa6Js2sjQHIzc0lKCiIe/fuKa3ftGlTWrZsKSZTF56LSsm/tIHbsrKyuHTpEvv372f58uUq\n7SwnJ4fY2FiMjY354osv0NLSYsuWLfj5+bF3716srUuOMy4Ir5pCqZBDkYdYe+o3bkalAvD1jhXs\nsZmHrq5yX/zU1FQuXLig6GYNRUMvt27dGhMTk2qNW3i1qJT83d3dSy3v3Lkzurq6rF69mrVr1z5z\nO7Vq1eLixYtoaWkpuo0uXLiQkJAQtm3bxtdff12O0AXh5ZOYmcjGqxu5nXobs7q1iIlRozBPg/pq\nzUhNzSmR/PX09JSuuhs3bkyrVq1ETx6hwir8H+Tq6sr69etVrv/kYFJqamo0a9asxCWtILxKJEni\nXMw5doTsIE9edBavqaFOV2cXWmT3YuRAN7S1S34ctbS0cHR0JDg4GCcnJ9FRQqg0FU7+p06dQk+v\n5FOGpQkODmb48OH88ssv2NsXDUgll8sJCwujV69eFQ1FEF5I6TnpzNqznFtZYZjXK/qsqKup08+2\nHz2se6AmKxqKIScnh4SEBBo3bqy0vrm5OWZmZqJtX6hUKiX/999/v0SZXC7n/v37xMTEMHr0aJV2\n1qJFCxo0aMCMGTOYOXMmurq6rF+/ntTUVIYPH16+yAXhJfDXzQD+57+UpPR01NVlGBpq09S0IR84\nf0DDOkUDIhb32w8NDSU/Px89PT1MTU2VtiMSv1DZVEr+j3ctKyaTybC2tmbUqFG88847qu1MQ4MN\nGzawePFixo0bR3Z2Ni4uLmzZskXcvBJeSQVq2WTmF82WJZdL1E5uxf/6f4ymelHbflZWFtevXycp\nKUmxTmBgIF26dBGjbwpVSqXkX5kzddWrV48lS5ZU2vYE4UXWuWknerud548z13jPeQTj3u2Bpro6\nkiRx+/ZtwsLCkMvlivp6eno4OTmJxC9UuXK1+Z85c4bLly+Tnp6OqakpHh4euLm5VVVsgvBSSU5P\n50pwLD3a/zfBikwm43Pv8UzwKMTcpGgIk0ePHhEYGEhqaqpSPSsrK2xtbUUTj1AtVEr+qampjB49\nmuDgYLS0tDA2NiYlJYVVq1bRvn17Vq5cKR4tF15bkiSx5dhxlp35CXK1sbb4v/buPC7Kcv8f/2tm\nYIBhHfYdFWYAWWRT1tDU3Ncyy63slBv9jvnLjycz4/Q5WVmpuB/T+qjlkllqkuWpQ4pHUQRBFGQR\nlVW2YZNtFmau7x8cxyYkx5SZQd7Px4PHQ+7rvu95v5mZt/dcc93XtQHeA+91Y1qZWMHKpOt7suvX\nr6O4uBiMMXW7paUlQkJCaH4rolNafbZcs2YNKioqsGPHDly5cgWnT5/G1atXsXXrVuTm5mLdunW9\nHSchBqlV3orPsz7Hjks70KpoQStXgv/dvxsqFeu2b15eHq5fv64u/FwuF2KxGPHx8VT4ic5pVfzP\nnDmDt956CyNGjNDYPmrUKCxfvhwnTpzojdgIMViMMWRUZuC90+8h83YmvH1swOVyYMW3wsS4MNxv\nNhQfHx91l46trS3i4+Ph6+tL/ftEL7Tq9uHxeLC0tLxvm4ODw31HAxHypMq9UYbU+mRcqbmi3mZm\naoTZ8WOx5KmXYGtpDcYYGGMad+cKBAIEBASAMQYvLy9aXYvoldYTuyUlJSEoKAhOTk7q7a2trdi5\ncyfmzp3bawESYihaW2VYs+8AfrjxPXwDrGD/37VzbUxtMDd4LoKcggB0Dd+8evUqrK2t4efnp3GO\n39/ARYi+aFX8a2trUVtbi2eeeQbh4eFwdHREU1MTsrKy0NbWBj6fr74RjMPh4IsvvujVoAnRNcYY\nXt/3Hi7evAJwgBvFTRDamGCU90hM958OUyNTqFQq3Lx5E0VFRVAqlZBIJHBzc+vxUzMh+qRV8S8t\nLVVfwXR2duL27dsAoN6mVCo1xioT8qThcDiYEhuJy+W5kCtUcLdxwf8X9gZCPAcDAOrr63H16lW0\ntLSoj2GMQSKRUPEnBknnN3kR0hd0dqrA5XLA5d7rl58aMAm/Bl+A2HowEp6ZBWOeMeRyOa5du4by\n8nKN462srDBkyBAaxUMM1kPd5FVcXIyLFy+itbUVQqEQ4eHhtCoXeeLkFJTj7wc/w9yoZzFj/L0V\n6oy4Rtj8/Afgcbvu0C0tLUVBQYHGXPtGRkbw9fXFwIED6QtdYtC0Kv4qlQqJiYn47rvvNG5O4XA4\nmDp1Kj766CN6oZM+jzGGvaeTseHHPVBwZNh8qhEjI/1ha3tvUXQelweZTIaMjAyNO3QBwMXFBQEB\nAbSIOukTtCr+O3fuxLFjx7B8+XJMnjwZ9vb2qKurQ3JyMjZv3gxvb2+tZ/YkxBCVN5fjwNUDKG65\nAWNzJRTtQAOvFOcLr2BidKTGvnw+HyqVSv27QCBAYGCgxkg4QgydVsX/22+/xeLFi/Haa6+ptzk7\nO2PBggWQyWT49ttvqfiTPknaKcXxwuP49davYIyBy+FALBaiscIIidOXIEYU3u0YDoeDoKAgpKWl\nwdvbGyKRiObjIX2OVsW/rq4O4eHd3wQAEBYWhp07dz7WoAjpbR0dCmw5+j1S636E+6B7SycacY0w\nK3wixr8wHsY8YzQ3N6O0tBRBQUEaXZtCoRCjR4+mOa1In6VV8ffw8EB2djaio6O7tWVnZ9PScqRP\nuV5VigWbP0aNshQcADZOjrAw58PP3g+zg2bDycIJCoUCV69dRWlpKRhjsLGxgaenp8Z5qPCTvkyr\n4j9jxgxs2LABAoEAEyZMgL29PSQSCU6cOIHPPvsMixYt6u04CXlsuCad6LSpAeoBBuBOLRfLnnsN\nEa4RAHDfUTyFhYVwd3eneXjIE0Or4j9v3jzk5+dj7dq1+Pjjj9XbGWOYMmUKlixZ0msBEvKofj/H\njretN2ZGjcWelB8xI3wC/v8J82BmbIaGhgbk5uaiublZ43gHBwcEBgZS4SdPFK0ndvv444/x2muv\nITMzE83NzbCyssLQoUMhEol6O0ZC/hS5XIl9yWkorriND5bO1PgP4JWoWZg+ZAI8bNwhlUqRnZuN\niooKjePNzMwQEBAAZ2dnGspMnjgPdZOXi4sLPDw8YG1tDVtbW3h4ePRWXIQ8kobWJrzy8Xpcl2XB\niJliUuYwxAwdqG63NLGEpYkliouL1XPx3MXj8eDj4wNvb28axUOeWFrf5PXpp59i37596OzsVN/o\nZWZmhiVLlmDhwoW9GiQh2lKqlDhdchrJRclos6sCuw0oOFJ8ce4QYoau7La/XC7XKPyurq7w9/eH\nQCDQZdiE6JxWxX/Lli348ssv8dJLL2Hs2LGws7ODRCLByZMnsXnzZpibm2POnDm9HSshPersVKGo\nsQDf5H2DqpYqAICnlyUam6R4yjcCb02cf9/jRCIRKioqYGJigoCAANjb2+swakL0R+ubvBISEvD6\n66+rt3l4eCA0NBTm5ubYu3cvFX+iF62tchw4lonvi7+Da1gLuL/pm3ezdsGyxUsR7BwMqVSKnJwc\niMVijekXjI2NER0dDQsLC+rXJ/2KVsW/tbUVwcHB920LDw/H//3f/z3WoAjRRodcivlr1yNfng4V\nlOBUWcPN1RKmRqaYKJ6IkQNHgsM4KCoqwo0bN9DZ2QmlUomwsDCN89CUy6Q/0qr4jxgxAl9//TWe\neuqpbm0nTpxAfHz8Yw+MkAfhcAGuVxlU17v67Jub5Hg+MgbT/afDkm+JyspKFBQUoKOjQ31MZWUl\nRCIRFXzS72lV/CMiIrBx40ZMnjwZEydOhIODA5qamnD69GlcunQJ8+fPx44dOwB0zXtCN32R3nDn\njgxWVvfuqjU1MsVfn3kJK+s3IMJ7MJaN/gsGCgeivr4eZ6+dRVNTk8bxVlZWGDx4MBV+QgBw2G/n\naO7B79ch/cMTcjjIz89/pKB+r6KiAqNGjUJKSgrc3d0f67mJ4autbcP+b7ORdjMTe/43AebmfHUb\nYwxXaq4g2CkYbW1tyM/PR3V1tcbxJiYm8PX1haenJ/Xrk37jQXVTqyv/goKCxx4YAFy+fBmzZ8/G\n7t27ERkZ+eADSL+jUCrwP9t3IbstFZ1cOXYd8cWyeePV7RwOB0Och+DGjRvIz8/XWG+Cx+Nh0KBB\n8PHxgZHRQ93SQsgTT2/viPb2dvztb3+jtX9Jj67VXcOh3ENoH3ALnde65tk5U38CS1Vju021YGVl\npVH43d3d4efnRwurENIDvRX/tWvXwsnJCaWlpfoKgRgYxhiqqtrAt5HicN5hXK6+DACwtTOFu5sF\n/D29sCj2ZXA4nG7z9Tg4OMDBwQEqlQoBAQGwtrbWVxqE9Al6Kf6pqak4ffo0du3ahSlTpugjBGJg\nbt9uxYFDuUgp/RnOsRXgm94r7GZGZvjbpOcxYsAISGolOH36NEQiUbd+zIiICPB4POrXJ0QLOi/+\nDQ0NeOedd/Dhhx/S1RkB0HXFv27fMZyq/QFSfgtabpoiYHDXnbbRHtF41v9ZKFoVSD+frl43t7Cw\nEK6urhrdP9SvT4j2dP5u+fvf/46RI0ciPj6+26gM0j9xOBwIh9RAltICDgATEx48rT0xK2gW7Lh2\nyL+cj9raWo1j5HI57ty5AxsbG/0ETUgf12Pxr6mpeagTabN49dGjR3Ht2jUcP378oc5NnixVVa1w\ncbHQ2LYobh4yS3PgbGeNuREzEWIXgutF15FXmaexH5fLxYABAyASicDn80EI+XN6LP7Dhw9/qL5T\nbcb2HzlyBDU1NYiLiwMA9eiMBQsWYNq0afjHP/6h9eORvqexUYpvvy3ETzn/wf8mzEDQYGd1m6O5\nI96f+j9wF7ij4lYFUq+maoze4XA4cHd3h1gsphk3CXkMeiz+H374obr4Nzc3Y926dYiOjsb48ePV\nd/j++uuvOH36NFau7D5V7v2sW7cOUqlU/XtdXR3mzJmDNWvWIDY29hFTIYZuz5GzOJR/CM2C2/jo\ncDv2vbsCXO69C4xgp2Dk5+d3GwHm7OwMPz8/ujOXkMeox+L/7LPPqv/9+uuvY9q0aVizZo3GPpMn\nT8aaNWvw008/4YUXXnjgg/2+a+juAthOTk6ws7N7qMBJ39Emb8PxwuO4YvMrWk2qACVQJchCRUM1\nPO1dNPb19vZGSUkJOjs7YW9vDz8/PwiFQj1FTsiTS6svfM+dO4dt27bdt+3pp5/G4cOHH2tQpO+r\nr++AjZCPtPI0HC04ijZ5G/h8Lnx8bGBmaoznhkxEi6QB7QJrjW4cPp+PgIAAmJmZwd7enoZtEtJL\ntCr+QqEQV65cuW/XzMWLF7X6svd+nJ2dUVhY+KeOJYZJLlfi5Mlb+OaX8zCPzAOsGzXah/uHI84q\nDg2VDbgpv4lOWSeGDBmisY+np6cuQyakX9Kq+D///PPYtm0bpFIpRo0aBaFQiPr6epw8eRJfffUV\nVq1a1dtxkj4i+edcbP11H6rNroGfz0VEhDOMjLiwM7XDCOEIoAGorr83xLe8vBw+Pj4wNzfXX9CE\n9ENaFf8lS5agpaUFX3zxBXbu3KnebmJigjfeeINW8SJq5qJaNKYXAjLAxNQIrJOD4XbDYSe1g6xK\nprGvQCCASCSi+XcI0QOtij+Hw8Fbb72FhIQEZGdn486dOxAKhQgNDaVhd/2YQtE1KZ+xMU+97RnR\nSHwf+DMqm6vwtEc4vOENTjMHcsjV+5iZmUEkEsHDw6PbBG2EEN14qDt8LS0tadUuAsYYsrNr8eW3\nFxEa5oCXZ0Sp23hcHv7nmcXIvZwLbptmYTc1NYWPjw+8vLyo6BOiZz0W/zFjxjzUSIt//etfjyUg\nYviyciqxau/nqDDJwsV0Z4yPD4Kj470+e29bb1gEWODixYsA7hV9T09P8Hi8nk5LCNGhHot/WFgY\nDbMjGhhjyLydiW/rvkWjfRFULUq0G1fjhws/4ZXJz2m8XhwdHeHk5AQHBwcq+oQYoB6L/9q1a9X/\nPnHiBKKjo2Fra6uToIjhUKkY5HIlaqSVOJR3CDcabgAARIOEkN0GgoQDYKZQoKqqCq6ururjOBwO\nhg0bpq+wCSEPoFWf/+rVq7F27VqMHTu2t+MhBuT69Ubs/foSblungz+ovGsBFSUHJi0msG+3x0CP\ngXAy77rHo6ioCC4uLvRpkZA+Qqvi7+TkhI6Ojt6OhRiQyqpmLNuyA2UmF9HZIkeojRMcYAnTNlO4\nWbjB08UTPE5XV45AIMDAgQP1HDEh5GFoVfxnzZqFDz/8EDk5OfDz87vv8M7Jkyc/9uCI/nAs2tDq\nkQVenQruxvawrbWGi60TBjkPgplR17h8CwsLiEQiuLm50RU/IX2MVsX/o48+AgAcPHjwvu0cDoeK\nfx/W2alCS4scQqGpepurpStejBqHrDM5cBJaQ+wggtC0a4I1KysriEQi6uYhpA/TqvinpKT0dhxE\nDxhjuHSpBoeO5UAhaETS2y9oFPO5w2ZCKDeHoF0ADjgQCoUQiURwdHSkok9IH6dV8Xdzc1P/u729\nHW1tbbCxsYGxsXGvBUZ6X239Hbx34HOU8DJhoxDg6AlXPDvp3k18liaWmBI9BVevXoWPjw9sbW2p\n6BPyhND6Dt/09HSsW7cOeXl56hWWgoODsWzZMkRHR/dagOTxUzEV0srTcDz/OEzd6+Bf7wgBj48r\nt9IwQToMpqb3un8EAgEiIyP1GC0hpDdoVfwzMjLw6quvYuDAgVi6dCns7OxQW1uLkydPYsGCBdiz\nZw8iIiJ6O1byCBobpaira0eHVTmO5R1DfVU9TFpMMMDYHm2WCjjYWGOQnStu3boFf39/fYdLCOll\nWhX/TZs2ITo6Gjt37tT42J+QkICFCxdiy5Yt2Lt3b68FSf48qbQTP/54E0dS01BtmY7BPnyYtPNh\nyrqu7k2M+fDz8oWbjRsGDBhAQzYJ6Se0Kv65ubnYuHFjt/5eDoeDOXPm4M033+yV4Mija5G1YFfm\nNnDNm+ECc3TWcGFqwQGPw4O7lTu8Hb0h8hbBy8sLRkYPNc8fIaQP0+rdbmVlhfb29vu2tbW10bwt\nBszW0gpuA7iQlZnD2JgLEz4PbpZu8Hfzh7/YH25ubjTDJiH9kFbFPyoqClu2bEF4eLjGko01NTXY\nsmULfeFrABhjyMuToFbSgqeHD1R/SuNxeXh13AvYd+RrDLLxQMigEAT5BcHBwYFG7hDSj2lV/Jcv\nX47nnnsOY8eORXh4OOzt7SGRSHDp0iVYWFhgxYoVvR0n+QMtLXJs+OxfuFpzFlYmKri7JkAsvtd3\nH+URCZvp1nC1cYW1tbUeIyWEGAqtPu87OTnh6NGjmDVrFlpaWnD58mXcuXMHs2fPxtGjR+Hh4dHb\ncZL7YIzhWtk17Pp5K0rafoaZSSsUaMe3P2nelMfhcODv5U+FnxCi1uOV/8WLFxEaGqq+kcvBwQFv\nvfWWzgIjPVOpVMgsyERqTirqGuoAAFaWfDQ2SCEQGMHcQQq5XA4+n6/nSAkhhqrH4v/SSy/BzMwM\nQ4cORWxsLGJiYiASiXQZG/mdlpY27D32A4qrroJvLtdoMzHhwc/XA+OixiDUJ5T68wkhf6jH4r91\n61ZcunQJly5dwqeffgqlUgl7e3vExMSofxwcHHQZa7+WV1mIDTt3Qa7sAAeAPd8MRsZcgAO4urpi\n3NBx8HPz03eYhJA+osfiP3r0aIwePRoA0NHRgcuXL+PSpUvIyMjAe++9B6lUCh8fH/WnAlrYvXc5\nCe3QbNIEs3YTMADNHTKE+/lj4tCJ8LLz0nd4hJA+RqvRPmZmZoiOjlYP6ezs7ERGRgYOHTqEffv2\nYe/evcjPz+/VQPuL9vZ2pGdnQ96hwtjRT6m32wvsMSwsGBnn8uDr7Y/Xp82Ci43TH5yJEEJ6pvUt\nnTKZDOnp6Th//jzS09NRWFgIDoeDoKAgxMbGav2A1dXV+PDDD3HhwgWoVCo89dRTWLlypcb9A/0N\nYwy1tbU4n52BUxkZaJTVw9bYCcPjhmpMsrZg+DwsjOfBRmClx2gJIU+CPyz+RUVFOHv2LM6ePYtL\nly5BJpPB09MTsbGxSEhIQFRUFCwsLLR+MMYYFi5cCFtbW3z55ZcAgDVr1mDJkiU4cuTIo2XSB8lk\nMpSVlSHzWiZu1t1Ek7QZTfI2MACNijqkXcjFyBH3JswTmgn1Fywh5InSY/GPj49HXV0drKysEBkZ\niVWrViE2Nhbu7u5/+sEkEgm8vb2xfPly9Xnmz5+P119/Hc3Nzf1iHPrt2y1ISytGTl4+HL2aIJHV\noKOza31kDgcwMeWhpq0VJpZWsHR88v8ehBD96LH419bWQigUYsaMGYiJiUFERMQjL97i4OCApKQk\n9e/V1dU4dOgQgoKC+kXhB4A9B0+gTHINHbxG1NfwYGHRNRafcRkUFgr4ikX4q/8YBLn76jlSQsiT\nrMfiv3v3bpw9exZnzpzB559/DlNTU/WY/7i4OHh7ez/SAyckJCAlJQXW1tbqLqAnjUzWCROTe39i\nxhgqhdloa2z9bztgZqsEbIBo/2iM9B4JWzNbfYVLCOlHOOzuslx/QCKR4OzZszh37hzS0tJQX18P\nZ2dnxMTEIC4uDjExMbCxsXmoBy4sLIRMJsP27duRk5ODY8eO9filb0VFBUaNGoWUlJRH6nbShc5O\nFdLTK3Dq1FUYG7dhxYoZGrNm/lJ0CvsPHwbXmsF5gB3GBI5GtHs0TIxM9Bg1IeRJ86C6qdVoH3t7\ne0ybNg3Tpk0DAOTn5+PcuXPIzMzEypUroVQqkZeX91CB+fp2dWskJSVhxIgROHr0KBYvXvxQ5zAk\njDHU19cjN/c6vv8xHR1G9VBwpMjPj0BAwCD1fsO9Y3FzbBHiPOMw2GEw3YlLCNGLh1q9486dO8jO\nzkZ2djauXLmC3NxcKJVKBAQEaHW8RCJBeno6Jk6cqN5mZmYGDw8P1NTUPFzkBkIqlaKiogIlpSUo\nk5ShqqUKrVY1kEqV4HCAtJwMjeLP5/GxKGKRHiMmhJAHFP+SkhJkZ2cjKysL2dnZuHnzJlQqFXx8\nfBAVFYU5c+YgMjJS6+Get2/fxptvvglPT08EBQUBAFpaWnDr1i1Mnz790bPREaVSifPni5CWdg3W\ndu2Q85tQ3VoNhUoBADA3N4bKRAW+M4Nl4AN71QghROd6LP5RUVFobm4GYwyurq6IiorCokWLEBUV\n9afn9AkMDERERARWr16N999/H0ZGRli/fj1sbW3VXUp9wZGjF/GfzDNo5zaASTtgZ9d1IxbjMCjM\nFVBYKhDpNQTDvYZDbCfWc7SEENJdj8U/MjISMTExiI6Ohqen52N5MC6Xiy1btuCTTz7BokWLIJPJ\nEBcXh3379sHc3PyxPMbj1tnZCR6Pp9E3rxxwG42XSwFwwJEDHTwZmI0S5kJzPDPwGcR5xsHatH8M\nXSWE9E09Fv9Nmzb1ygPa2tpi7dq1vXLux4UxhurqWqSlXUNhUQn+8spkODvbq9tHDx6OY7+eBOMw\nmHtwIR7oh6e8nkKwUzC4HFoPlxBi+B7qC98nXWtrKyoqKlBeXo7/pBeipr0GUm4zfvrVAa/MnqTe\nz15gj3FjYiE0FSLOMw52Ajs9Rk0IIQ+v3xd/uVyO27dvo6KiAjWSGtS21aKmrQYN/Ga0S7sWTLlU\nnIP5bKJG18/8kPl6ipgQQh5dvy3+d+7cwblzl3GtoAQtnY0wte1Ao7QRDF2jc0zMeWhqbwXXTgXf\nAE8aj08IeaL02+J/vbICx/7zM6TcZjCo4GgqAJfLgcJMAbm5HDxLHp6LfRqxHrHwsfXRd7iEEPJY\nPfHFv7W1FUVFt+DjMxBWVvfuRxA6m6LZtA7GciO0MRlUXDks3HgQOYoQ4xGDMJcwmnKBEPLEeiKL\nv1QqRWVlJS5eLMD1m5Woba3DM3FPYerEe0tNDrQZCEt3c5Q1VkE0wB3jAocjyiMK9gL7PzgzIYQ8\nGZ6Y4q9QKFBVVYXKykrUSeogaZegoLIM1R11YDwgPfcSpkx4St13z+Fw8Makv8DMyAyDhIOoT58Q\n0q/06eLf0SHDxYvXkZd3EwrFHdi5ATWtNZC0S6BkSnQaq6ACQ7OqHQpWDsaYRpEPdAzUY/SEEKI/\nfbr4l5bW4fsfU9DBbYLMqAn2PGPgv7W906QTcls52gWtGObth+HecXR1Twgh/9Wni7/K9g6qTfPB\nU/IABrQxFbhCFRQCBRysHTDKfRQi3SOpH58QQn6nTxd/sb0YPDsO5AopjOwYjJysEOUegyj3KAyw\nGUBX+oQQ0oM+XfyNuEaYNHIEJO0SRHtEI9gpGEbcPp0SIYToRJ+vlDMDZtIVPiGEPKQ+PwUlFX5C\nCHl4feLKX6lUAgCqq6v1HAkhhPQNd+vl3fr5e32i+NfV1QEA5syZo+dICCGkb6mrq4OXl1e37RzG\nmMEvMiuVSpGbmwsHBwfweDx9h0MIIQZPqVSirq4OgYGBMDU17dbeJ4o/IYSQx6vPf+FLCCHk4VHx\nJ4SQfoiKPyGE9ENU/AkhpB+i4k8IIf2QwRX/xMREvPPOOxrbjh07hkmTJiEkJATPP/88zp07p9G+\nf/9++Pr6avwMHjxYY589e/bg6aefxpAhQ/DKK6+gpKTEoHKQy+VYu3YtYmNjERoaioULF6K8vLzP\n5LBly5Zuz8Hdn61bt+o8hz/zHJSXl2Px4sWIiIhAXFwcVq9ejTt37mjsY8jPAQCUlJRgwYIFv7Fh\nJQAADctJREFUiIiIQHx8PDZv3ozOzk6d5iCRSPDWW28hLi4OERERePXVV1FUVKRuP3v2LKZOnYrg\n4GBMnjwZqampGsfX19fjjTfeQEREBKKjo/Hpp5/qNIdHjf8uuVyOKVOm4Pvvv+/WpsvXUY+YgVCp\nVGzjxo1MLBazVatWqbcnJyczX19ftmPHDnbz5k22b98+FhQUxC5cuKDeJzExkS1evJjV1taqf+rq\n6tTt33zzDQsNDWU//fQTKygoYIsWLWKjRo1iMpnMYHJYuXIli4+PZ2lpaaywsJDNmzePTZo0ialU\nqj6RQ2trq8bfv7a2liUmJrLo6GhWXV2tsxz+bPwKhYKNGzeOJSQksOLiYnbp0iU2btw49te//lV9\nDkN/DpqamlhMTAybN28ey8vLYxkZGWzcuHHs7bff1lkOSqWSvfDCC2zmzJksJyeHXb9+nS1dupRF\nR0ezhoYGdv36dRYYGMi2b9/OiouLWVJSEgsICGBFRUXqc8yaNYvNnj2b5efns9OnT7OoqCi2YcMG\nneTwOOJnjLGWlhb22muvMbFYzI4dO6bRpqvX0YMYRPEvKytjc+fOZZGRkWzEiBEaL/gpU6aw5cuX\na+z/zjvvsLlz56p/nzVrFtu0aVOP5x8zZgzbvHmz+vfW1lYWEhLCjh8/bhA5lJWVMbFYzNLS0tTt\nN27cYCNGjGAlJSV9Ioffy8rKYn5+fiw1NVW9rbdzeJT4CwsLmVgsZgUFBer2ffv2sdDQUJ3F/6g5\n7N69m4WGhrLGxkZ1e2ZmJhOLxay8vFwnOeTl5TGxWMyKi4vV22QyGRsyZAg7evQoe/fdd7u9ZubO\nnctWr17NGOt63YjFYlZWVqZuP3LkCAsNDVUXx97M4VHjZ4yxc+fOsVGjRrHp06fft/jr4nWkDYPo\n9snKyoKLiwuSk5Ph7u6u0VZaWoqIiAiNbf7+/sjOzlZ/FCwuLoa3t/d9z11fX4+SkhIMGzZMvc3c\n3ByBgYHIzMw0iBzOnj0LW1tbREdHq9sHDRqEU6dOwcvLq0/k8FuMMXzwwQcYM2YM4uPjAejmeXiU\n+K2trcHlcvHNN99AJpOhoaEBJ0+eRGBgoM7if9QcSktLIRKJYGNjo26/2/2ZmZmpkxxcXFzw2Wef\nYeDAgeptdydfbG5uRmZmpsbjA0BkZKT68TMzM+Hm5gYPDw91+7Bhw9DW1ob8/Pxez+FR4weAX3/9\nFdOmTcPXX3/d7fy6eh1pwyDm9pk6dSqmTp163zZHR0dUVVVpbKusrIRCocCdO3egUCjQ3NyMM2fO\nYMuWLejo6MDQoUOxYsUKODk5qSc3cnJy6nbexzlR3KPkUFJSAg8PDyQnJ2PXrl1oaGhAWFgYVq1a\nBWdn5z6Rg62trXp7SkoKrl27hvXr16u36SKHR4nfyckJq1evxrp163DgwAGoVCp4e3tj3759Oov/\nUXNwdHTEqVOnoFKpwOVy1e1AV9HRRQ5CoRAjRozQ2PbVV19BKpUiLi4OmzZt+sPHr6mpgaOjY7d2\nAKiqqoKRkVGv5vCo8QPA6tWrezy/rl5H2jCIK/8/MmXKFOzfvx/nz5+HUqnEhQsX8N133wEAFAoF\nrl+/DgAwMjJCUlISPvroI5SUlGD+/PmQSqXo6OgAAJiYmGicl8/nQyaTGUQOra2tuHnzJnbv3o23\n334bmzZtQn19PV5++WXIZLI+kcNv7d27F+PGjdOYTErfOTwofpVKhVu3biE6OhoHDx7EF198AR6P\nh2XLlkGpVOo9fm1yGD9+POrr6/Hpp5+io6MDEokEa9asgZGRERQKhV5ySElJwYYNG/DKK6/A29sb\nUqkUfD6/x8fv6OjoFp+xsTE4HI5e3gsPG/+DGMLr6C6DuPL/IwsXLkRDQwMWLFgApVIJHx8fvPrq\nq1i/fj0sLS0RFxeH8+fPa1x5+vj4ID4+HqmpqXBzcwPQ9c37b8nlcpiZmRlEDkZGRmhpacGmTZvU\nH3c3b96MuLg4pKamwtXV1eBzuKu6uhoXL17E3r17NY6/O7GUvnJ4UPzHjx9HcnIyTp06BYFAAADw\n8vLC6NGjkZqaqr76NOTnwMnJCZs2bUJiYiL27NkDgUCApUuXorCwEJaWljp/Do4cOYJ3330XEyZM\nwIoVKwB0Fb3fXyz89vFNTU27xadQKMAYg0Ag0GkOfyb+B9H3++C3DP7Kn8/nIzExEVlZWThz5gyS\nk5NhamoKe3t79Zv0t4Uf6PoIJRQKUVVVBRcXFwD3poW+q7a2tttHL33l4OTkBIFAoNHPaWdnBxsb\nG1RUVPSJHO5KSUmBg4NDt35RfefwoPhzcnIwaNAgjVw8PDwgFApRVlam9/i1yQEARo4cibNnzyI1\nNRXnz5/Hc889h4aGBnh4eOg0h3/+8594++238eKLL+KTTz5Rd0O5uLigtra2x8d3dna+b3xAV1eJ\nrnL4s/E/iCG8ju4y+OKflJSEnTt3gs/nw8HBAQDw73//G7GxsQCAL7/8EnFxcRr/G1dWVqKhoQEi\nkQh2dnYYMGAALl68qG5va2tDbm4uhg4dahA5REREoL29HTdu3FAfU1dXh8bGRnh6evaJHO66+4XY\n3TfLXfrO4UHxOzs7o6SkROOKrLa2Fk1NTfDy8tJ7/NrkkJmZiZdffhlKpRKOjo7g8/n497//DYFA\ngLCwMJ3lsGvXLmzcuBFLly7Fu+++q7HaXnh4ODIyMjT2T09PV3+RHR4ejvLyco3vNtLT02Fubg4/\nPz+d5PAo8T+IIbyO1HQ6tkgLc+fO1Rje9s0337CwsDB2+vRpVlZWxt5//30WEhLCbty4wRhjrLS0\nlIWEhLAVK1aw4uJilpmZyaZPn85mzZqlPseBAwdYSEgI++GHH1hhYSFbtGgRGzNmTK+Nq33YHFQq\nFZs9ezabMmUKy8rKYvn5+WzevHls3Lhx6hgNPYe7xowZw/75z3/e95y6zOFh46+urmYRERFs6dKl\nrKioiOXk5LAXX3yRTZs2jSkUCp3H/2dyqK+vZxEREWzt2rWsrKyM/fzzzywsLEzj+ejtHPLz85m/\nvz97++23u9330dbWxgoKClhAQADbtGkTKy4uZhs3bmRBQUHqoZUqlYrNnDmTvfDCCyw3N1c9zv+3\nQyN7M4dHjf/37jfUU9evo54YfPFnjLFt27ax+Ph4FhISwubOnctycnI02rOzs9ncuXNZaGgoGzZs\nGFu5ciVramrS2GfHjh0sNjaWhYSEsL/85S8a44gNIYfm5ma2atUqNnToUBYSEsISEhJYVVVVn8qB\nMcZCQ0PZgQMHejyvrnL4M/EXFhayV199lQ0dOpTFxsayFStWsPr6er3E/2dzyMjIYDNmzGDBwcFs\n9OjRbPfu3d3O25s5rF+/nonF4vv+bNu2jTHG2KlTp9iECRNYYGAgmzJlCjt37pzGOWpra1lCQgIb\nMmQIi4mJYevXr2dKpVInOTyO+H/rfsW/N+N/GLSYCyGE9EMG3+dPCCHk8aPiTwgh/RAVf0II6Yeo\n+BNCSD9ExZ8QQvohKv6EENIPUfEn/VpiYiJ8fX17XI0pJSUFvr6+2L59u44jI6R30Th/0q+1trZi\n0qRJ4HA4+OGHH2Bubq5ua2lpwYQJE+Ds7Iyvv/4aPB5Pj5ES8njRlT/p1ywsLPCPf/wDt2/fRlJS\nkkbbJ598gubmZqxdu5YKP3niUPEn/V58fDymT5+O/fv3IycnBwCQkZGBw4cP480339RYJe7gwYMY\nP348AgMDMWrUKOzatQu///B84MABTJ8+HUOGDEFwcDCeffZZ/PLLL+r2w4cPIzQ0FPv370d0dDQi\nIyNRUVGhm2QJ+S/q9iEEXUv0TZw4Ec7Ozjhw4ACeffZZCIVCfPnll+pZHbdt24atW7di/vz5iI2N\nRU5ODrZv34758+er53vfvXs31q1bhzfeeANDhgxBU1MTdu7ciaKiIqSkpMDR0RGHDx9GYmIivL29\nsWLFCjQ2NmLatGn6TJ/0RzqfTYgQA/XLL78wsVjM5syZw0JDQ9WLnjPGWFNTEwsKCmIffPCBxjFf\nfPEFGzx4MKuurmaMMfb++++zpKQkjX1ycnKYWCxmP//8M2Osa3ZOsVjMfvrpp17OiJCeUbcPIf81\nevRoTJw4ERkZGVi5cqXGAupZWVmQyWR4+umn0dnZqf4ZOXIkOjs7ceHCBQBd67cuW7YMzc3NuHz5\nMr7//nscPHgQQPflLv39/XWXHCG/Y/DLOBKiS3FxcThx4gTi4+M1tjc1NQEA5s+ff9/j7q7uVFJS\ngsTERKSnp4PP52PQoEEQiUQA0O27gd+uGkaIrlHxJ0QLd9cp3rRpk3pd6N9ycnKCUqnEwoULYWFh\ngSNHjsDX1xdGRkYoKChAcnKyrkMm5A9Rtw8hWggJCYGxsTEkEgmCgoLUPzKZDBs3boREIoFEIkFp\naSlmzpyJgIAAGBl1XVudOXMGAKBSqfSZAiEa6MqfEC3Y29vjpZdewrp169Dc3IywsDBUVlYiKSkJ\nNjY28PHxgbGxMVxcXLB3717Y2dnBwsICZ86cwVdffQUA6Ojo0HMWhNxDV/6EaGnFihVYtmwZkpOT\nsWDBAmzcuBEjRozA3r17wefzweFwsH37dtjZ2eFvf/sbli1bhqtXr+Kzzz6Dl5cXMjMz9Z0CIWo0\nzp8QQvohuvInhJB+iIo/IYT0Q1T8CSGkH6LiTwgh/RAVf0II6Yeo+BNCSD9ExZ8QQvohKv6EENIP\n/T9EM2/MAzNx4wAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation1b(system2, birth_rate=.0275, death_rate=.01)\n", + "plot_results(system2, title='Birth and Death Rate Fitting the Model')\n", + "savefig('GoodAssModel.pdf')" + ] + }, + { + "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": 47, + "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": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system.death_rate = 0.01\n", + "system.birth_rate = 0.027" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "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\n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\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(system)\n", + "plot_results(system, 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": 50, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system3 = System(t0=t0,\n", + " t_end=t_end,\n", + " p0=census[1950])" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "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]=results[t]*(1+alpha)\n", + " system.results=results" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation2b(system3, .017)\n", + "plot_results(system3, title='model using alpha value')" + ] + }, + { + "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": 53, + "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(t,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": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 54, + "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": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "function" + ] + }, + "execution_count": 55, + "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": 56, + "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": 57, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1950.0 2.557628654\n", + "1951.0 2.60110834112\n", + "1952.0 2.64532718292\n", + "1953.0 2.69029774503\n", + "1954.0 2.73603280669\n", + "1955.0 2.78254536441\n", + "1956.0 2.8298486356\n", + "1957.0 2.87795606241\n", + "1958.0 2.92688131547\n", + "1959.0 2.97663829783\n", + "1960.0 3.02724114889\n", + "1961.0 3.07870424842\n", + "1962.0 3.13104222065\n", + "1963.0 3.1842699384\n", + "1964.0 3.23840252735\n", + "1965.0 3.29345537032\n", + "1966.0 3.34944411161\n", + "1967.0 3.40638466151\n", + "1968.0 3.46429320075\n", + "1969.0 3.52318618517\n", + "1970.0 3.58308035032\n", + "1971.0 3.64399271627\n", + "1972.0 3.70594059245\n", + "1973.0 3.76894158252\n", + "1974.0 3.83301358942\n", + "1975.0 3.89817482044\n", + "1976.0 3.96444379239\n", + "1977.0 4.03183933686\n", + "1978.0 4.10038060559\n", + "1979.0 4.17008707588\n", + "1980.0 4.24097855617\n", + "1981.0 4.31307519163\n", + "1982.0 4.38639746988\n", + "1983.0 4.46096622687\n", + "1984.0 4.53680265273\n", + "1985.0 4.61392829783\n", + "1986.0 4.69236507889\n", + "1987.0 4.77213528523\n", + "1988.0 4.85326158508\n", + "1989.0 4.93576703202\n", + "1990.0 5.01967507157\n", + "1991.0 5.10500954779\n", + "1992.0 5.1917947101\n", + "1993.0 5.28005522017\n", + "1994.0 5.36981615891\n", + "1995.0 5.46110303361\n", + "1996.0 5.55394178519\n", + "1997.0 5.64835879553\n", + "1998.0 5.74438089506\n", + "1999.0 5.84203537027\n", + "2000.0 5.94134997157\n", + "2001.0 6.04235292108\n", + "2002.0 6.14507292074\n", + "2003.0 6.2495391604\n", + "2004.0 6.35578132612\n", + "2005.0 6.46382960867\n", + "2006.0 6.57371471201\n", + "2007.0 6.68546786212\n", + "2008.0 6.79912081577\n", + "2009.0 6.91470586964\n", + "2010.0 7.03225586943\n", + "2011.0 7.15180421921\n", + "2012.0 7.27338489093\n", + "2013.0 7.39703243408\n", + "2014.0 7.52278198546\n", + "2015.0 7.65066927921\n" + ] + } + ], + "source": [ + "run_simulation(system, 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": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nKv6EENID/S9s8sixJDKW5AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(system, 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": 59, + "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": 60, + "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": [ + "system.alpha = system.birth_rate - system.death_rate\n", + "\n", + "run_simulation(system, update_func1b)\n", + "plot_results(system, 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": 61, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system4 = System(t0=t0, \n", + " t_end=t_end,\n", + " p0=census[t0],\n", + " alpha1=.02,\n", + " alpha2=.017)\n", + "\n", + "def run_simulation1c(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_func1c(results[t], t, system)\n", + " system.results = results" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": true, + "scrolled": false + }, + "outputs": [], + "source": [ + "def update_func1c(pop, t, system):\n", + " if t <= 30:\n", + " result=pop*(1+system.alpha1)\n", + " else:\n", + " result=pop*(1+system.alpha2)\n", + " return result\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "run_simulation1c(system4, update_func1c)\n", + "plot_results(system4,'alpha change after 1980')" + ] + }, + { + "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": 64, + "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": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap03-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEjCAYAAADaCAHrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdclWX/wPHPYe+9FHCwXIAC4kwUxZEzUxyA4ym3lpZP\nj2bmo+ZOzVmOUstsuNBI2zkqe1IRRRAQUFFQ9p4Hzrl/f/jzFAF5UBDQ6/169epw3eP63gf5nvtc\n9zVkkiRJCIIgCM8UjYYOQBAEQXjyRPIXBEF4BonkLwiC8AwSyV8QBOEZJJK/IAjCM0gkf0EQhGeQ\nSP6CIAjPIJH8hTqRn5/P7t27GTlyJD4+PnTt2pVx48Zx6NAh5HJ5g8XVt29fJkyYUKfnzMrKori4\nWPXzwoULadOmTZ3W8aRNmDCBvn37PrHjhIYnkr/w2OLj4xk5ciSbN2+mbdu2vPHGG8ycORMzMzPe\nfvttQkJCyMjIaOgw68SZM2cYNGgQ2dnZqrKxY8eybt26BoxKEGpPq6EDEJq2oqIipk+fTllZGYcP\nH6Zt27aqbZMnT+bUqVPMmzePV155hc8++wwNjaZ9vxEZGUl+fn6lMi8vL7y8vBooIkF4NE37L1Fo\ncB9++CEpKSmsWrWqUuJ/wN/fn9mzZxMREUFoaGgDRCgIQnVE8hceS1hYGK1ataJ379417hMcHIy2\ntjZhYWGqspra4v9eLkkSn3/+OaNHj8bLywsPDw8GDRrErl27+Pu0VCdPnmTEiBF4enoydOhQfvrp\np2rPv3jxYhYtWoSnpyd+fn5kZ2erVc/ChQvZtm0bAP369VPFWV2bf1paGosWLeK5557Dy8uLUaNG\n8eOPP/7je7lw4UKGDh1KeHg4Y8eOxdPTk379+hEaGkp5eTkbNmygR48e+Pr6Mm/ePHJyciodHxcX\nx6xZs+jcuTOenp6MGTOm2jrPnTvHuHHj6NSpEwEBARw6dKjaeBISEpg9ezadO3emY8eOjBs3jl9+\n+eUfr0FoOkSzj/DI0tPTuXPnDi+++OI/7mdoaIiHhwfh4eG1rmPTpk3s2LGDkSNHMmbMGIqKijh2\n7BgbNmzA0NCQ4OBgAI4ePcqbb76Jl5cXb7zxBklJScybNw+ZTIa9vX2lc544cQInJycWLVpEZmYm\nFhYWvPfeew+tZ+zYsRQWFvLDDz/w5ptv4urqWm3Mubm5jBkzhtzcXIKDg3F0dOTrr79mzpw5bNu2\njYCAgBqvNyMjgxkzZhAYGMjw4cP55JNPWLRoEWFhYRQUFDB79mwSExM5cOAA+vr6rF69GrjfHDVx\n4kSMjIz417/+haGhIcePH2f27NksWbJE9T6dO3eOqVOn0qpVK+bNm0d2djYrV65EJpNhbm6uiiMu\nLo6goCCsrKyYPn062trafP3110ybNo0NGzYwePDgWv8uhUZGEoRHdPXqVcnNzU1av379Q/d95ZVX\nJDc3NyknJ0eSJEny9/eXQkJCquz313K5XC55e3tLr732WqV9CgoKJHd3d2n69OmSJElSRUWF1L17\nd2nUqFGSXC5X7XfkyBHJzc2tUj3+/v5S27ZtpdTUVFWZuvVIkiRt2bJFcnNzk+7cuaMqW7BggeTm\n5qb6ed26dZKbm5t08eJFVVlpaakUEBAgjRo1qsb36MF59u/fryo7ffq05ObmJvn7+0tlZWWq8nHj\nxknPPfec6ufAwECpU6dO0r179yrVOXLkSMnT01PKysqSJEmSRo4cKfXu3VsqKChQ7ff777+r6ngg\nJCRECggIkIqKilRl5eXlUlBQkNSjRw9VLCEhIZWOE5oO0ewjPBEPHvQqFAq1j9HW1ubcuXMsX768\nUnlOTg5GRkaq7pbR0dFkZWXx4osvoq2trdpvxIgRmJqaVjlvixYtsLW1rXU96jp9+jQdOnTAx8dH\nVaarq8uuXbvYsmXLQ4/v37+/6nWrVq0A6NWrFzo6OqpyBwcHVQ+qzMxMrly5wogRI7Czs6tU58sv\nv0xpaSnnzp0jKyuL6OhohgwZgpGRkWq/bt26VWq2ysnJ4fz58/Tu3ZvS0lKys7PJzs4mPz+f/v37\nk5mZydWrV2v1ngiNj2j2ER6ZjY0NgFrdODMyMtDS0sLMzKxWdWhra3P69Gl++uknbt68SVJSEnl5\neQCqtviUlBTgflL/K01NTVq2bFnlnJaWlo9Uj7pSUlKq7fveunVrtY7/a3yamprVxqypqVnl+qs7\nv7OzMwB3796t8X0CcHJyIjIyEoA7d+4AsH//fvbv319tjPfu3VPrWoTGSyR/4ZHZ2NjQokWLh7bl\nl5SUEBUVhYeHhyqZ1eSv3wwkSWLWrFmcOnUKHx8fvLy8GDt2LL6+vkyaNEm1n0wmA6C0tLTK+ZRK\nZZWyv8egbj3qUigUqpgehZZW1T/LfzrfP304Pbh+bW1ttd+nB7+D4ODgGp9PuLi41Fin0DSI5C88\nlmHDhrF9+3Z+/vnnSne7a9eupXXr1owaNYovvviC0tJShg8frtquoaFRZeRvRUUFOTk5qjvTixcv\ncurUKWbNmsXcuXMr7Zebm4ujoyOA6v9JSUmVzidJEikpKTU+mH1A3XrU1bx5c27fvl2lPDQ0lPDw\ncJYsWVKpCedxPXigfePGjSrbbt68CYCdnR329vbIZLIq7xNAcnJylfNpamrSo0ePSvslJCSQnJyM\nvr5+ncUvNAzR5i88lilTpuDo6MjixYuJjY1VlWdnZ7N06VICAwPZuHEjbm5ujB49WrXdysqKmzdv\nVroL/fnnnykrK1P9nJubC1S9yzx48CAlJSVUVFQA0L59e+zt7fn8888pKSlR7XfixIkq3SGro249\n8Oezi3+62/bz8+Pq1atERUWpysrLy/noo4+Iioqq08QPYG1tjbu7O1999RWpqamqcrlczt69e9HR\n0aFnz55YWFjg6+vLV199RWZmpmq/iIgIoqOjVT/b2Njg7u5OaGgoaWlpla5h0aJFvPrqq5XeE6Fp\nEnf+wmMxMDBg586dzJgxg9GjRzNs2DA6duyIp6cn8fHxqqTSq1evSs0ZQ4cO5Z133mHKlCkMHz6c\npKQkDh48WKlbppeXF0ZGRqxevZqUlBRMTU35448/OHnyJLq6uhQVFQH3m0TefvttZs+ezdixYxk1\nahRpaWkcOHBArWcM6tYDYGFhAdwf3Obn50e/fv2qnG/GjBl89913TJo0iZCQEGxsbDhx4gSJiYns\n2bPn0d7oh1i8eDGTJk1i9OjRjB8/HkNDQ7766iuio6NZvHgxJiYmACxYsIDg4GDGjBlDcHAwJSUl\n7Nu3r1I3z7+eb9SoUYwfPx4zMzNOnDjBlStXmD9/fpX9haZH3PkLj83Z2ZmjR4/y6quvEhsby7p1\n69i0aRMAr7/+OtOmTWPfvn2MGjWKW7duARAUFMQrr7xCcnIy77zzDufPn2fbtm2VmmisrKzYtWsX\njo6OfPDBB2zcuJG7d++yceNGgoKCSEhIUN3B+vv7s3PnTvT09Ni4cSM//vgjK1euxMnJ6aHx16ae\nIUOG0KNHD44ePcr69eurPZ+lpSVffvkl/v7+fPHFF6xfvx5JktizZw/du3d/nLe6Rl5eXnz++ed0\n6NCBPXv2sHnzZnR1ddm+fXulQXPu7u7s378fR0dHtm3bxqFDh5gzZw7PPfdctedzd3dn7969vPvu\nu5SUlLBmzRqmTZtWL9cgPFkyqbZdGQThEcTFxbFv3z7eeuutSt0MBUFoGCL5C4IgPINEs48gCMIz\nqEk88C0tLSUqKgpra+uH9hMXBEEQ7o/XyMjIwN3dHT09vSrbm0Tyj4qKUk1MJQiCIKjvwIEDdO7c\nuUp5k0j+1tbWwP2L+OvcJYIgCEL1UlNTCQ4OVuXPv2sSyf9BU4+dnR0ODg4NHI0gCELTUVNTuXjg\nKwiC0ETl5OSQlZX1SMeK5C8IgtAE3bp1i99++41Lly5VmhZFXSL5C4IgNEEGBgZIkqTqDVlbIvkL\ngiA0QTY2Nri4uGBubk67du1qfXyTeOArCILwLHtwh//3qbQfrMD2YLbZ2hB3/oIgCI2YXC7n/Pnz\n/Prrr1XWwNDQ0HikxA8i+QuCIDRaWVlZnDlzhvT0dIpLiomIiKj1sqI1EclfEAShkZEkifj4eH7/\n/XdKS0u5k3+Hy6mX0dGvu4WARJu/IAhCI1JWVsbly5dJT08HIDEnkZSiFIoti/k+/3vaK9qjq6X7\n2PWI5C8IgtBIZGVlcenSJUpLS5GQiMuMI7UilSK7IiQtCS2ZNhJ10+wjkr8gCEIDkySJhIQE4uLi\nkCSJcmX5/cSvnUqpZSnIgHsOKOK6o9vj8e/6QbT5C4IgNLi0tDRiY2ORJInskmzC08JJNk6m1Px+\n4u/Tqg+zu08jMb6A06fv1EmdIvk3En379uX9999Xa1tZWRlbtmxh4MCBuLu707VrV2bOnKnWKL/C\nwkI2bdrE888/T8eOHfHz82P+/PncvHmzzq5FEITasbW1xdbOloTsBCLzIsmyzqJCvwKAYW2GMc59\nHJ4etvTsac+9e0V1Uqdo9mmCFi1aRExMDG+99RZOTk7k5uayZ88eQkJCOHLkCM7OztUel5mZSVBQ\nEAYGBsyfP582bdqQmZnJBx98wLhx4/j0008rLaAuCMKTUaYo40T+CXK0cigzLyM7twRbU0tm95hG\nO+s/R++GhLRHQ0NWJ3WKO/8mprCwkBMnTvDvf/8bPz8/HBwccHd3591338XS0pKDBw/WeOzSpUuR\nJIlPP/2UgIAAHB0d8fLyYvv27dja2rJ27doneCWC8GwqKysjKioKhUKhKtPT0sPZypkiwxKuJ+SQ\nGmFGs7gXaGPZttKxdZX4QST/JklDQ4Nff/210j8eTU1NPv74Y6ZNm1btMRkZGfz0009MmjQJIyOj\nStu0tbXZsGEDixcvVpVdv36dl19+WdU0tGTJEvLz81Xb+/bty549e5gxYwYdO3akZ8+ebNu2TbU9\nMzOTOXPm0KVLFzp16sTkyZOJiYlRbW/Tpg3Hjx+vFMdfy27cuMFLL72Et7c3Pj4+zJo1i+Tk5Ed4\ntwSh8cjKyuLs2bPcvHmT6OjoStvGdhiLhaYdprd60K54CLcTyzhzpm7a96vzVCf/sLBEpk//nunT\nvycsLLHK9kOH4lTbf/jhVpXtn356TbX9l1+qJp4PP4xUbT9//l59XEIVRkZGBAUFceDAAfz8/PjP\nf/7DoUOHuHv3Lg4ODlhaWlZ7XExMDEqlko4dO1a73dXVlVatWgH3Hz5NmDABNzc3QkND2bJlCwkJ\nCcyZM6fSMZs3b8bf35+vv/6ayZMns3XrVi5evAjAsmXLqKio4PPPP+fo0aMYGhryyiuvqH2d//73\nv2nevDmhoaEcOHCAnJwcFi1apPbxgtCY/H3QVlZxFjdu3qh0Q6Wrpcu6oct5uf8wZMjo3NkOX9/6\nW7mwVm3+paWlpKWlUVBQgLm5OdbW1ujoqD/i7I8//mDixInVbuvatSuffPJJbcJ5Zi1evBhPT08O\nHz7MyZMnOX78ODKZjAEDBrBy5UqMjY2rHPPgH5mJiclDz//ZZ5/h4ODAggULVGXvvfcefn5+RERE\n4OXlBYC/vz9jx44FYOrUqezatYvLly/TuXNnkpKSaNOmDQ4ODujq6rJ8+XISEhJQKpVqzUWSlJRE\nz549sbe3R0tLi3fffZfMzEy13h9BaEz+OmhLISlIzE4ktSQV5/bO6OsbVtpXJpPx/POtadXKBA+P\n6pdfrCsPTf5yuZzDhw/z9ddfExkZWaWpoUuXLgwcOJCRI0c+9IPAy8uLX3/9tVLZb7/9xptvvsnU\nqVMf8RKeDlpaWiiVymq3KZVKtLQq/6qGDx/O8OHDKS4uJjw8nG+++YbQ0FA0NDTYtGlTlXOYm5sD\nkJeX99BYYmJiiImJUSX5v0pMTFSVP/im8ICxsTHl5eUAzJo1iwULFvD999/j6+uLn58fw4YNU3sS\nqrlz57J27Vo+++wzunXrRp8+fRgyZIhaxwpCY5GdnU14eDilpaUUyAuIzYylSKOIAptCDl8+RcQp\nHba9NQlt7T+XWtTS0qj3xA8PSf5Hjx5lw4YNyOVy/P39GTRoEPb29hgYGJCXl0dqaiqXLl1i48aN\nbNu2jVdffZXAwMAaz6ejo1NpMeGCggLWr1/Pyy+/TK9everuqv7fsGHODBtWfc8XgMDANgQGtqlx\ne0hIe0JC2te4fcoUT6ZM8XysGB8wMTGhsLCw2m15eXmYmZkB9789nT59WnVXbmBgQK9evejVqxdW\nVlbs37+/2nO4u7ujpaXF5cuX8fSsGnNYWBg//fQTa9euRVtbm549e1Z6BvCAhYWF6nV1H/YPJp0a\nNGgQPXr04MyZM5w7d47333+fnTt3cvz4caysrKocV1FRUenniRMnMnjwYE6dOsW5c+dYvXo1e/bs\n4fjx47X6tikIDUGSJBITE1V992/n3eZ23m1KTUopMS3h8pV09LOcqSix5tixhH/MQ/WlxuQ/ffp0\nsrOzWbZsGX5+fjX+wU2ePBm5XM63337L3r17+f7779m9e7dalb///vvo6Ogwe/bsR4v+KdKhQwci\nIiKqlMfGxlJcXIyHhwdwv7fPnj17GDp0KB06dKi0r7GxcY1t/qampvTv35+PP/6YUaNGYWj459fN\nsrIydu/ejYWFBbq6uri4uBAWFkbz5s3R1tYG4M6dO6xYsYL58+dX26z0VxUVFWzYsIHhw4czbNgw\nhg0bRlZWFj169OD8+fMMHjwYbW3tSh92SUlJqtc5OTls27aNqVOnEhgYSGBgIJGRkQQGBhIbG1vt\nh5cgNBbl5eVcunSJ9PR0SitKicuMI68ij2LrYir0KzDQNmCK9xTCv7qfU9PSilAqpTrtyaOOGpP/\n888/zwsvvKDWSXR0dFR/6MeOHVPrmKysLD799FOWLl1aZYGCZ9GECRMYOXIkS5YsUfXFv379Ohs2\nbMDf31+1Uo+/vz++vr5Mnz6duXPn0qVLF0pLS4mIiGDnzp289dZbNdaxcOFCgoKCCA4O5tVXX8XV\n1ZWUlBS2b99OWlqaqrkoJCSEAwcOsHDhQqZNm4ZcLmf58uXk5+dXaeqpjpaWFtHR0Vy8eJHFixdj\nYWFBWFgY2traqg+sTp06cfDgQXx8fFAoFKxevVp1g2FqasrZs2e5c+cOr7/+Ovr6+hw9ehQTExNa\nt279mO+0INQvTU1NysvLSStKIzE7Ebm2XDU3j6ulKy95vYS5njmyu1dp186Cnj3tkcmebOKHf0j+\n6ib+v5LJZIwcOVKtfT///HMsLS0ZPnx4ret5Grm4uHDgwAG2bdvGpEmTKC4uxs7OjsGDB1f6ZqSh\nocGuXbv48MMP2bdvHytWrEAmk9G2bVtWrVrFgAEDaqzDzs6OL7/8kp07d7Jq1SrS09OxsLCgS5cu\nrFy5khYtWgBgbW3N3r17Wb9+PWPGjEFPT4+uXbuyefNmtZtcNmzYwKpVq5g+fTpFRUW4urqyfft2\nWrZsCdwfc7B06VICAwOxsbFh7ty5pKWlqa5x586drFmzhgkTJiCXy/Hw8OCjjz566LcOQWhoFVIF\nUZpRJOYkUmZURkJhJs1lRoxqO5KBLgPRkN1/7jV1asN+g5VJtVgZIC4ujpKSkmofTHp7e9eq4gED\nBjB06FBeffXVh+6bnJxMv379+Omnn3BwcKhVPYIgCPWpvLwcLS0t1d27JElsPb+VCzeuEJeQRUWe\nIYHOIbw58/knGtfD8qZaXT2joqKYO3cud+/erbJNkiRkMlmlATwPEx8fT1JSkui9IQhCk/agN0/r\n1q1xcXEB7reATO40mfDEBRhltcGppBe3LmsSHZ1Jhw5VOzs0FLWS/8qVK9HQ0GD16tXY2dk98pqR\nD1y8eBFra+sa56ARBEFozP7am6e4vJjS2FLMzc1VHS5MdE3YNmodoRW3+eOPewwf7ky7dtV3xmgo\naiX/6OhoNm7cSEBAQJ1UGhMTg5ubW52cSxAE4UmSy+VERESQnp7O3YK73My5iYO5A56FPvy1s52x\nrjGBgW7079+SZs2Maj5hA1Er+VtYWKCpqfnwHdWUnp6OqalpnZ1PEAThSXjQzJNflM/1rOvklOZQ\nqiHni8Qz3L5jx5o3RlXqsqmvr42+vnYDRlwztZL/+PHj2bVrF926dauTbpk7dux47HMIgiA8KX9t\n5skoyiA+O54KZQXFhqWcibuBntyKe8Xl/PzzbQICWjZ0uGpRK/mnpKSQkJDAc889h5ubW5UPAJlM\nxkcffVQvAQqCIDSkB80899LukZidSFpRGpKGRLF1MQoDBUM1BpP5W2u0NLSoqKh+ipbGSK3kf/Pm\nTdq2/XNe6QfztwiCIDztwsPDuZFyg7isOEorSlHoKCiyKsLM2IyXvF7CydSFj8uj6d+/JS1aPHzi\nxMZCreRf03wxgiAITzOFUsEd3TtcSb+CUiFxpzQHE3sNurfsxjj3cRhoGwDw8sseDRxp7dVqSueE\nhATOnz9PYWEh5ubm+Pj44OTkVF+xCYIgNCgJifjCeO5p5HAzJY88eQVBtkG85DW6oUN7bGp12Fcq\nlSxevJhhw4axfPlyNm7cyNtvv82QIUNYuHAhtRgkLNRA3QXck5OTadOmDa+99lq1+1a3QtYDD479\n638dO3ZkxIgRHDhwoNLv8ejRo1X2/et/3377rWrfxMRE5s6dS7du3XB3d6d///6sW7euxllKp0+f\nTps2bbhy5Ypa740gPCnZ2dncu/fnwkxaGlq85PUSRVrlKEos8CkIJumcKRkZxQ0YZd1Q685/165d\nHDt2jPnz5zNs2DCsrKzIyMggLCyMLVu24Ozs/MzPx/+knTx5kiFDhjzS2Iv3338fT09PJEmioKCA\nU6dOsWbNGpKTkyst4KKpqcmZM2eqPceDrroZGRkEBQUREBDA3r17MTY2Ji4ujtWrVxMVFVVlgZ6M\njAx+/fVXWrVqxZdfflnjymKC8CQ96M1z9dpV9LT1MDY2Vi132sy4GZtGLyf04wzu3Sti8uQOWFsb\nNHDEj0+t5H/48GFmzJjBlClTVGV2dnZMnTqVsrIyDh8+LJL/E+bo6MjSpUvx9fWt9ZgJU1NT1boK\nNjY2ODs7o6Wlxdq1axk1apRqmDpQaf2F6jz4BrBy5UpVmYODA4aGhkyaNInY2NhKnQW++uorbGxs\nCA4O5r333mPRokVV1hQWhCeprKyMiIgIom9Fk5iTiKNxCwwvmeDn11O1TwuzFrz0kh1aWrJG22+/\nttRq9snIyMDHx6fabd7e3pW+JglPxhtvvEF5eTmrV6+uk/MFBgaio6PDN998U6vjNDQ0KCgoIDw8\nvFK5r68vX3/9dZUpmI8dO0a3bt3o378/JSUlfPXVV48duyA8qqysLH46/RO/xPxCXFYcxaVlnI6P\n4I+oqk2WxsY6T03iBzXv/B0dHYmIiKB79+5VtkVERDz07rChhMWF8fX1r9Xat1fLXoR4hlQq+zTy\nU35J+kWt44e6DWVYm2G1jvFRWVpa8uabb7JgwQIGDx6Mn5/fY53P0NAQBwcHrl+/XqvjhgwZwkcf\nfURQUBAdOnSga9eudO3alW7duuHq6lpp36tXr3L9+nXmz59Ps2bN6NSpE4cOHSIoKOixYheE2pIk\niYSEBH6//DvXs64jV8ipqFASnZ5GZrkCzag0Ll5MpXPn+ltAvaGpdec/evRoduzYwb59+0hPT0ep\nVJKens7evXvZuXMnL774Yn3HKVTjhRdeoE+fPixZsqTGh6u18felJBUKBV5eXlX+69u3r2ofMzMz\njhw5wrRp0ygqKmLPnj1Mnz6dnj178vnnn1c6f2hoKCYmJvTo0QO4/8Fx7do1IiMjHzt2QVBXWVkZ\n5/53jq/PfU1UehRyhRxJQ6KsWQmtHdrjXRCMjc7TP3W8Wnf+EyZMICYmhjVr1rB27VpVuSRJDB8+\nnJkzZ9ZbgM+K2i7g/sCyZcsYMmQI69atY/ny5Y8VQ2FhYaVvcZqamtWuzPb3WV3Nzc2ZP38+8+fP\n5+7du5w7d47PPvuMpUuX0rx5c3r37o1cLufEiRP069dPtSDMoEGDWLVqFV9++aVYmlF4IrKysvj5\n3M9cvXuV0opSABQ6CmT2Mqb7TMfNtD1ffhnL8OEumJvrNXC09Uut5K+pqcnatWuZMmUKFy5cID8/\nHxMTE3x9fat8tW9MhrUZ9lhNMSGeIVWaguqLugu4/52dnR0LFixgyZIlDB48+JHrLykp4ebNm1XW\nWHiw8lZNdu3aRcuWLRk4cCAAzZs3Z/To0QwfPpxBgwZx5swZevfuzc8//0xubi7Hjx+v1M6vVCo5\nefIkb775pnjwK9SrckU5317/liu3r1BRrqSouBxdR4l2bdsR4hmCse79VeImTXJv4EifjFoN8nJ1\ndW3Uyb4pU3cB9+qMGTOGkydPsnjx4keu/9ChQyiVylp/gERGRvLNN98QEBBQaeZXHR0d9PX1VfOb\nh4aGYmtry4cffljp+PDwcJYuXUpYWBjjx49/5PgF4WEUkoJrxddIkeciZWmQVJ7HuHZjmdF5RIOs\nodvQakz+AwcOZPPmzbRt25YBAwY89M357rvv6jy4Z4m6C7jXZMWKFQwbpt63nLy8PDIyMpAkifz8\nfM6ePcumTZuYNm2aah3fBzIyMqo9h76+PkZGRsyePZugoCCmTZvGlClTaNGiBffu3SM0NJS8vDzG\njh2r6ts/e/bsKus4ODs7s3v3bg4dOiSSv1DnKioqVE2melp6TO40mVdj/ktRsSmuxaO5cdaUsucV\n6OnV6j74qVDjFXt7e2NoaKh6/Sx+Mj5J6i7gXhMHBwfmz5/PO++889B9Z82apXptZmaGs7Mz77zz\nDiNGjKi0n0Kh4Lnnnqv2HMHBwSxZsoR27drx5Zdf8sEHH/DGG2+Qm5uLiYkJPXv25IsvvsDKyoqP\nPvoImUzGmDFjqpxHU1OTiRMnsnr1aq5evfqP33AEQV2SJBERFUF2Wja9evVCV1cXAFdLVzaNXcbB\nHRlo22gyebL7M5n4oZYLuDcUsYC7IAjqKikt4YsfviDudhytjF3wdHGne/eulW5g8/LKMDbWqbTw\nytPmkRdiboQmAAAgAElEQVRwT0tLq1VFtra2tY9OEAShDl27dY0jPx+hoKSAosJy/ncvkvJCE3x9\nfdDW/nOAlqmpbgNG2TjUmPx79+5dq6aemJiYOglIEAShthRKBYfPHibiWgRKSUlpaQX5BXJyyiUu\nXpWRlFSIi4t5Q4fZqNSY/FetWiXa+QVBaPRuZ95m//f7ycvJU5XpGWphomyBfkJbWjiaoq//bLbr\n/5Ma3xExalcQhMZMKSkJuxTGuQvnkBR/Pro0MjNiwoAJmGk14/ff7zJwYCs0NdWazOCZUmPyr80i\n6zKZjOnTp9dJQIIgCA+TVZzF7nO7yY7LpqionPJyJeZmenh28GRsr7Foad5PbYMHi8WmalJj8t+0\naZPaJxHJXxCEJ0lbU5tUeSrJWQXoy/VAqcOAzoMZ3ad3Q4fWZNSY/GNjY59kHIIgCGoz0TUhuGMw\nb8ZsQC+/BQaFPiTHGMHAho6s6RANYYIgNGpKSUlsRiwJCQkoFApVeefmndkzeSMtdfsyfGg7XnnF\nqwGjbHrE9A6CIDRaqYWp7Du/j4yEDFoo29GnezEdO96fAVYmk9HCsjnLltmhpSXuY2tLTO8gCEKj\no5SU/JD4AycvnUSWqkV+jpxseTQ6kj4ODvaqCQMBkfgfUY3J/6/LA65Zs+aJBCPUr4sXLxIcHKz2\nNBlHjx5l8eLFXLt27QlEJwj33S24y75L+0i/mY5ukS6FJXIqyiUMlWbEXtdGoXi659l/UtQe+aBU\nKjl16hTh4eEUFhZiaWlJly5dql3aURAEobYUSgXfJ37PyaiT6GTooFN+f9EfW3MLzEttyM9zYPDQ\nDlhZGTRwpE8HtZJ/ZmYmU6ZMITY2Fh0dHSwsLMjKymLHjh10796dbdu2YWAgfiGCIDya5Pxk9kXs\nIzUlFf0cfWTI0ECDFmYt8G3ji62NK9raWjRrJhb8qStqNZatWbOGjIwMdu/eTWRkJKdPn+bq1ats\n3bqV6OjoSks7Co+mTZs2HDp0iHHjxuHh4cHgwYO5fPkyn332Gb1798bb25vXX38duVyuOubixYuE\nhITg5eVFjx49WLFiBSUlJartsbGxhISE0LFjR4YOHUp0dHSlOpVKJTt27MDf359OnToxatQozpw5\n88SuWRAAfr/zOytPryQlNo3ieBkF+eUY6xjjY+/D0F5D6ezTmRYtzETir2Nq3fmfOnWKt99+m169\nelUqDwgIIDs7m/Xr17Ns2TK1Kz106BAffvgh9+7dw8XFhTfeeKNemo/i4uK4fv26Wvu2bNmyyjqy\nkZGRJCUlqXW8m5sbbdq0qXWMf7Vx40ZWrlxJq1atWLhwIdOmTcPDw4Pdu3dz8+ZN5s+fT+fOnQkK\nCuLKlStMnjyZCRMmsGzZMpKTk1m6dCnJycns2LGDvLw8Jk+eTLdu3Thy5Ai3bt3i7bffrlTfhg0b\n+OGHH1i+fDktWrTgl19+Yc6cOXz44Yd07dr1sa5FENTV2rw1xcUV5N+WYyzTR7/UkvZuPgzo1wtj\nY+OGDu+ppdadv46OTo2/hObNm9eqwtDQUJYtW8bUqVMJCwvD19eXWbNmkZycXKvzPI3GjBlD3759\ncXJyYsSIEeTl5bF06VLc3NwYOHAg7dq1Iz4+HoA9e/bg7u7OggULcHZ2pnfv3ixdupRTp04RHx/P\niRMnKC8vZ+XKlbi4uBAQEMCcOXNUdRUVFfHJJ5+waNEievXqRcuWLQkJCWHEiBHs2rWrod4C4Rlk\nZ2THeJ9RYGKEpdwNPbkzdnYeIvHXM7Xu/MePH8/mzZvp2LEjVlZWqvLi4mJ27dpFYGCgWpVJksTW\nrVuZOnUqo0ePBmDBggX873//IyIi4plfqOWvSyjq6+ujoaFR6T3R09NTNfvEx8fTu3floeydO3dW\nbYuPj6d169aq7roAnTp1Ur1OTExELpczd+5cNDT+vAcoLy+v9DsWhLp0M+cmaUVp+Nj6oKWlpepC\nPsBlAL5T/fh0/1XGjXPH1tbwIWcSHleNyf+ll15SvZYkicTERAICAvD29sbS0pL8/HwuXbpERUUF\nNjY2alV248YNUlJSKi0SrqGhwfHjxx/jEmrWpk2bx2qK8fT0rNIUVJ8erDX6gEwmq3F8hZ5e1e5u\nDxZle/BH9fdF2v66mIWOzv2eFFu3bqVly5aV9vvrh4Eg1IVyRTnH447z440fkWfLcM+LY+jA7qo1\nnTVkGlhaGDB3rmhufFJqTP7l5eWVfvb29laVp6amAtC2bVsA0tPT1ars1q1bAOTn5zNx4kTi4+Nx\ncnJi/vz5qvML6nF2diYiIqJSWXh4uGpbXl6eahF1U1NTAKKiolT7tmzZEm1tbdLS0vDz81OVb9u2\nDYVCwdy5c5/AVQjPgoTsBD6+/DFphWnkxSvQydHjmvIa5r8ZYGVlhYWFRUOH+EyqMfnv37+/zisr\nLCwEYOHChbz66qs4OTlx6NAhJk2axLFjx3B2dq7zOp9WU6dOZeTIkaxdu5bAwEBSUlJYtmwZvXv3\nxtnZGVtbW7Zv385//vMf5s+fT1paGlu2bFEdr6+vz+TJk9mwYQOGhoZ4eHhw6tQptm/fzsqVKxvw\nyoSnRVlFGcdij3Hq1ikoB6MsI2RlChRKXUwr7LlxowC5vPzhJxLqRY3JPzw8HB8fn1qf8OLFi6q2\n57970OwwY8YMhg0bBkD79u0JDw/n888/Z/HixbWu71nl5ubGjh072LRpE/v378fMzIwhQ4Ywb948\nAIyMjPj4449Zvnw5gYGB2NjYMHXqVJYvX646x7x589DW1mbdunVkZmbi6OjI8uXLxUI+wmO7nnWd\njy9/TGZxJlolWhhkGaAladGmZWvuxIKRiSkhIf2xsxN3/Q1FJv29Yfj/DR8+HGdnZ2bOnKlql/sn\nkZGR7N69m1u3bhEWFlbtPg+mFzh8+DAeHh6q8rlz51JWVlbjAjIPW4VeEITGoayijNDYUE7dPEVR\nYTkW5UboFehhoWeBq6Urulq62Nm1wNvbXTxbqmcPy5s13vkfOXKEbdu2MWrUKFq1asWAAQPw9PTE\nwcEBfX198vPzSUtLIzw8nLNnz3Lz5k1CQkLYsGFDjcF06NABAwMDrl69qkr+Dx4mi2kiBKHp++Di\nB0SnXePurSL00vXBTIc2jm2wMbRBT08PLy8v0Zuskagx+Wtra/Paa68RFBTEvn37OHjwINu3b6/U\n+0SSJJo3b87AgQPZuXMntra2/1iZvr4+kyZNYtOmTVhZWeHm5sZnn33G7du3K7VHC4LQNA1xHcKP\nly+gm66PhWSFbpY9xi0tsLGxoVOnTujq6jZ0iML/e2g/f1tbWxYsWMCCBQtITEwkOTmZgoICzM3N\nad68Oa1bt65VhXPnzkVfX59Vq1aRlZVFu3bt2LNnD05OYq1NQWjqXC1dmdI7kO8OpWJUCOZmuri5\ntaVjx7ZiWvhGRu1ZPeF+F8LH7ZHzYL1fseavIDRd5YpyjsUew9nCGe9mlbtpv9DuBTq/VEBExHWe\ne84Jc3PzBopS+Ce1Sv6CIAhJuUnsvbyXuwV3+fzsdwzWH8OggPaVHio6OBjj4FD73oLCkyOSvyAI\nalEoFZyMP8nJ+JOUlZcTczUH61ITLkn/w1C3mOHDzStNJyI0biL5C4LwUPcK7rH38l6Scu/PcqtX\noUM7mT0GSlsMlBYkJ+cRHx9faf4ooXETyV8QhBpJksSpW6c4GnOUckU5SKCXp4dNmQ2t3JyJuZqP\nvb0RvXp1pH37dg0drlALIvkLglCt3NJc9l3eR0xGDPkFZZjp62OUZYSTvhMOtvfb93v2NMPHx1vt\nyR2FxkOt5F9WVsbOnTs5ffo0xcXFVWaLBPjuu+/qPDhBEBqGUlLy7m/vkpqfTmJiLuWZMhybOeDj\n6IGB9v0lW62trfHy8hJ995sotZL/ypUrOXToEF26dMHV1VUMyxaEp5yGTIMX2r7AosPr0cnSpZ3M\nGc20Zmg56CKTyWjXrh1OTk6i734Tplby/+6773jttdeYNm1afccjCEIj4Wvvy0u9X+TXQ8UYlpdi\nZauPsbEhXbr4YmZm1tDhCY9JreQvl8uf6KImgiA8OUpJyYnrJ/Cw9aCVWatK28Z3GktnwxxiY2Nw\ncNDHw8OjyqJDQtOk1m/xueee4+zZs3Tr1q2+4xEE4QnKLM7ko0sfkZiTyBe/fE9wixl0921eaVSu\nq6s5Li7dRRPPU0at5D98+HAWL15MTk4O3t7e1S4h+GB+fkEQmoYLKRf4NPJTCkqKuBaTjaxAg68T\nj1JW5M3gwQGVHuSKxP/0USv5v/LKKwCEhoYSGhpaZbtMJhPJXxCaiLKKMr6I+oJzd84BoKmpgV2F\nGc1lrTBSWHHjRhaRkZH4+vo2bKBCvVIr+f/000/1HYcgCE/A7bzb7A7fTXrR/XW3NeQa2OZb083Z\nhYToEhxaGuHqai1m2X0GqJX87e3tVa+Li4spKirCzMxMtSyjIAiNmyRJ/HzzZ47EHKG4VI6utiY6\nBTq0qmiFs6UzmjJNLLqY4uhoj6enJzo6Og0dslDP1H5s/8cff7B+/Xqio6NVg7w8PT2ZN2+eWIVL\nEBoxSZLYFb6L8LvhJCXlk5pchF8rVzqZd8DG5P7IXE1NTTw9PWnRooVo339GqDVa68KFC7z88suU\nlpby6quvsnz5cubMmUNxcTFTp07l4sWL9R2nIAiPSCaT0cK0BYk3cslLrqCjpitG95yw1Lu/nKKp\nqSl+fn60bNlSJP5niFp3/ps3b6Z79+7s2rWr0j+OWbNmMW3aNLZu3crHH39cb0EKgvB4BrkM4nLH\na0Sk5mFbYYexkT5KJbi5OdO2bVsxav8ZpFbyj4qKYtOmTVXuCmQyGcHBwbz++uv1EpwgCLVXJC9C\nISkw0TVRlclkMv7Tex6RZplERV3G1laGl5cX1tbWDRip0JDUSv4mJiYUFxdXu62oqAhNTc06DUoQ\nhEdzK/cWu8J3ISvTZ1yLabi5mqn662tqaOLlZYu7e18kSRIPdZ9xaiX/bt26sXXrVnx8fLC1tVWV\np6WlsXXrVvHAVxAamCRJnEk6w8HogyTdySXlZiGpmkoC/XrSv79/pRs00UtPADWT//z58xk1ahQD\nBw7Ex8cHKysrMjMzCQ8Px8jIiDfeeKO+4xQEoQZlFWXsj9zPhZQLVFQoKUxR0EHLEUOFHleuJGNv\nfw0PD4+GDlNoZNRK/ra2toSGhrJnzx7Cw8NJTk7GxMSEoKAg/vWvf4l2Q0FoIGmFaey4uIO7BXdB\nCcZ5hvS0aUZZsiVmRkY4OZmhpaWFJEmiJ49Qidr9/K2trVmwYEF9xiIIQi1cSb3Cnog9lFaUolmm\niUGWAfZ69ji1dCLPVI6d3f1VtiwtLRs6VKERqjH579ixgxdffBEbGxt27NjxjyeRyWRMnz69zoMT\nBKEqpaQkLC6M0KiviL+ei4edHSalxrhauGJjeH/Qlru7Mx4eHqJ9X6hRjcl/06ZN9OjRAxsbGzZt\n2vSPJxHJXxCenB9v/MhnF45yIyYfR5klyjt6eHboiLGuEVpaWnh4eODg4NDQYQqNXI3JPzY2ttrX\ngiA0rD6t+vBd9BkyuYmFZIlpsSOKEm0sm1vSqVMnDAwMGjpEoQlQa1jftm3bSEtLq3ZbSkoKK1as\nqNOgBEGomY6mDm8GvEY/7wBsZR3w7tSc7t070b17d5H4BbWplfy3b99eY/K/fPkyX375ZZ0GJQjC\nfQqlggspF5DLK1AqlapyKwMr3hz1L15/fQSDB/fDxcVF9OYRaqXGZp/x48dz+fJl4P4AkrFjx9Z4\nEtGHWBDqXkFZATsv7uTH8HCcszozpm9X/Px6qpK8TCbD0tK0gaMUmqoak/+KFSv4/vvvkSSJLVu2\nMGbMGOzs7Crto6mpibGxMQEBAfUeqCA8S27n3eb9C+9z8cItLApNKJDd5NfzRjRvbourq2tDhyc8\nBWpM/s7OzsycORMApVJJYGBgpakdBEGoH38k/8H+K/vRyNagnXZz8mRlGClskJXrkJubJwZsCXVC\nrUFec+bMASAnJ4fy8nLVYi6SJFFcXEx4eDiBgYFqVZiQkMCQIUOqlB84cIDOnTurG7cgPHWUkpIj\n147wc9zPGGQZoCnXRMtQCxtaY2Vow9ChPXBwcBCJX6gTaiX/uLg4/v3vf5OQkFDtdplMpnbyv379\nOubm5oSFhVUqNzMzU+t4QXgaFcoL2fLb+9xJTsK4wBgkMNA2oL11exxsHUQXTqHOqZX8161bR25u\nLgsWLODUqVPo6Ojg7+/P2bNnOXv2LJ988onaFV6/fh0XFxcxH5Ag/L/bebdZefI9MmLysdQxBHOw\n1LeknU07OrTrgJOTk7jbF+qcWl09L1++zNy5c5k8eTKDBw+mpKSEoKAgduzYQUBAAPv371e7wvj4\neJycnB45YEF4miiUCjac2crNyAwMlXqUliowrLChm3M3+vj1wdnZWSR+oV6olfzlcjmtWrUCoFWr\nVpVG/L744ouqLqHqiI+P5+7du4wZM4aePXsyefJkIiMjaxe1IDwlNDU0eeW56cjsFMglJTa0pnu7\nXvTq1QsTE5OHn0AQHpFayb958+YkJycD95N/YWEhKSkpAOjq6pKXl6dWZaWlpdy5c4fCwkL+85//\n8MEHH2BjY0NISAiJiYmPeAmC0PQ86DQB4GLhwrIX59Hb9UVemRLMgAFdxZq6Qr1Tq80/ICCA9evX\nY2hoSP/+/XFycmLz5s1Mnz6dffv24ejoqFZlenp6XLhwAR0dHdUScmvWrCE6OprPPvuMt99++9Gv\nRBCagOh71zj1/WW6tHPF17ezqkmnm2NXuk1u2NiEZ4vaXT2TkpI4ePAg/fv3580332TOnDmEhYWh\nqanJxo0b1a7QyMio0s8aGhq4uLhw79692kUuCE2IJEkc+OUQ3586jaxcC3leKfb2zbG3t2/o0IRn\nlFrJX19fn23btiGXywHo1asXYWFhREdH06FDB1q0aKFWZVFRUUycOJFPPvkEd3d3ABQKBbGxsQwa\nNOgRL0EQGreisiJ2f7eb+JgkpHIZEgpiUq8TF9dBJH+hwai9khegaqoBaNGihdpJ/4G2bdtib2/P\nkiVL+O9//4uBgQG7d+8mJyeHiRMn1upcgtAURN+O5uCPBykpKcHQSJsyuYKKUh16ew3C379LQ4cn\nPMNqTP4DBgyoVRez77777uGVaWnx4Ycfsm7dOmbMmEFJSQne3t58+umnYqk54amiUCg49usxLkRf\nQCn9ORunR1s3+nu8SPu2zRswOkH4h+Tv7e1dL/2LbW1t2bBhQ52fVxAai7SMdDYc2EVecQamproA\naGhq4O/rzwDv2t1UCUJ9qTH5r1mz5knGIQhPhRuZSbz9wQY05AoAdHU1sbQ1ZfLAybS0btnA0QnC\nn9Rq87906dJD9/H29n7sYAShqcstzyJVPw0buTkaaFCuNOfNcQvQ0dJ5+MGC8ASplfyDgoIe+lU1\nJiamTgIShKZEkiSUSiWampoAeDfzJsR/CB9/9S3D249k3pjRaGiIZh6h8VEr+Vc3cVtxcTEXL17k\n+PHjbN26tc4DE4TGLj8/n2+++4UO7Vqqui4DhHiNp79zAA7m4qGu0Hiplfy7dKm+S1qfPn0wMDDg\ngw8+YOfOnXUamCA0VpIkEXn1Gp+dCCO9MI3sbB+aNWum6rGmraktEr/Q6D32BCKdO3fm/PnzdRGL\nIDR6BQUFfH/qez757nPuFt2hQiYn4vY17tzJaOjQBKFWajXIqzqnTp3C0NCwLmIRhEZLkiQSEhL4\nNeJXrmdeR0NfgXaxBrnyErAtp7WrQ0OHKAi1olbyf+mll6qUKRQKUlNTuX37NlOnTq3zwAShsSgo\nKOBC+AUu3bpEelE6ADIZaDtI9HPsy8z+49CQiVk4haZFreRfXl5epUwmk+Hs7MyUKVMYNWpUnQcm\nCA1NkiSuX4/nq+9PcackEb3//4Kr0FGg76DPwm4zaW3eumGDFIRHpFbyr81KXYLwtMgrKGbrwYPk\nl92fcdZCRw+lVTleHbwY7zEePS29Bo5QEB5drdr8z5w5Q3h4OHl5eVhZWdGtWzd8fX3rKzZBaFDX\n86O5qhGJA1aUSHKyyot5p98reDcTAxqFpk+t5J+Tk8PUqVOJiopCR0cHCwsLsrKyeP/99+nZsyfb\nt29HV1e3vmMVhHqVn5+PsbGxakCjr70vg3t0I/TH3+jo3J7V417HwsC8gaMUhLqhVvJfsWIFycnJ\n7Nixgz59+qjKf/rpJ9566y3Wr1/PW2+9VV8xCkK9UigUXL9+natXY/H29sDFxQW4/1xrZo8p+Dh4\n0c+lj5iQTXiqqJX8z549y6JFiyolfoB+/fqRnZ3Ne++9J5K/0CRlZWUREXGZ3yIjuZ11l+KSCuzs\n7FQrzpnomhDg6t/AUQpC3VMr+WtqamJsbFztNmtr62p7AwlCY1ZRUUFMTAzXE6/zR2Ik93IyQQa/\nxl1jYEEAf1ttVBCeOmpP7Pbee+/h4eGBra2tqrywsJBdu3YREhJSbwEKQl1LT0/nypUrJGUlkZid\niFKnAjQkkuTZGJpVoKOn3dAhCkK9Uyv5p6enk56eTv/+/fHx8cHGxobc3FwuXbpEUVEROjo6qoFg\nMpmMjz76qF6DFoRHIZfLiYqK4ubtm8RnxZNdmg2AwqCCslYl9Dbw4+3RU8T0y8IzQa3kn5SURNu2\nbYH7X5fv3r0LoCpTKBQoFIp6ClEQHl9+fj6nT//K+egY8jTvoW+ogaQhUWJegrm1Oau8ZuNi4dLQ\nYQrCEyMGeQnPhJupmYSeP00FRchkIJlpUmEjp69rX15o+wI6muJuX3i21GqQV0JCAufPn6ewsBBz\nc3N8fHxwcnKqr9gEoc6kEMdN7SRs5WYklWfhom3Hkl6v42bp1tChCUKDUCv5K5VKlixZwpEjR5Ak\nSVUuk8kYMWIEq1evFn2ghUajoKCA5ORk2rZtq/p3OdBlAKe8znH60lWC/Yczs08wulpiYKLw7FIr\n+e/atYtjx44xf/58hg0bhpWVFRkZGYSFhbFlyxacnZ3FzJ5Cg1MqlcTHxxN+KZqsnAJMTEywt7cH\nQFNDk9f8ZzKtRzGuVqJtXxDUSv6HDx9mxowZTJkyRVVmZ2fH1KlTKSsr4/DhwyL5Cw0qOzuby5cv\ncz4invjseJBk2J2zZNSoZmho3J9uublxc6h+uIogPHPUmoQ8IyMDHx+fard5e3tz7969Og1KENRV\nXl5OZGQkv/72K9dSrpFYcg25rIRsWQ4/x98SzZGCUAO17vwdHR2JiIige/fuVbZFRERgbW1d54EJ\nwj+RJIl79+4RFRVFZkEm17OuU1xejLGpNgnF6SiMFUx4vrVI/oJQA7WS/+jRo9m4cSMGBgYMHjwY\nKysrMjMzOXHiBDt37mT69On1HacgqBQXFxMZeZWr0Tco0k7jbsH9cSfl+uWUmJfQy60DM7q/RHMT\nsYi6INREreQ/YcIEYmJiWLNmDWvXrlWVS5LE8OHDmTlzZr0FKAh/9+uvV/j53P9ILU/CxEIDXQNN\nii2K0TTWZGy7sfRpJWbgFISHUXtit7Vr1zJlyhQuXrxIXl4eJiYm+Pr64urqWt8xCoKKJEkcu3Ga\nnIoktGSaJOYW0qyVDp4OHgR7BGNpYNnQIQpCk1CrQV7NmjXD0dERU1NTLCwscHR0rK+4BAH4c/1o\nbe37k63JZDK6dnHkw+TLyJUVOLY25+UuL9PNoau42xeEWlB7kNe7777Lp59+SkVFhWqgl76+PjNn\nzmTatGn1GqTw7HnwQPePPyJo3dqeTp06qbaN9RzNucSLtLNz4+UuEzDWFf03BaG21Er+W7du5ZNP\nPmHixIkMHDgQS0tLMjMz+fbbb9myZQuGhoYEBwfXuvLLly8TFBTE3r176dq1a62PF55OxcXFRERc\nITw8kYR7d0i+l0WLFi2wsLAAQE9Ljw0jVmCkIybdF4RHpfYgr1mzZjF79mxVmaOjI15eXhgaGvLx\nxx/XOvkXFxfzn//8R8wGKqgolUoSExOJj4/nxu0MIlOvUaZZyJWUAgZk9FElf0AkfkF4TGoN8ios\nLMTT07PabT4+PqSnp9e64jVr1lRaGEZ4tmVmZnLmzBliY2NJzksmWRmDUreYdEU+1/TjSJPSGjpE\nQXiqqJX8+/TpwxdffFHtthMnTuDn51erSs+cOcPp06dZvHhxrY4Tnj5lZWVcunSJc+d+JzM3k8i0\nSBKyEyjXKqeidSn6zjD3hTF0dan+5kMQhEejVrNP586d2bRpE8OGDWPIkCFYW1uTm5vL6dOnCQ8P\nZ/LkyezYsQO43xvjnwZ9ZWdn89Zbb7Fq1SpMTU3r5iqEJqmoqIgffjhFTEwGJVpZyA0zUaCg1KwU\nubGc1sbNmdhxIs4Wzg0dqiA8ddRK/u+88w5wf6rcTZs2Vdm+Z88e1euHJf///ve/9O3bFz8/P1JT\nU2sbr/AUKSyUOH0umQLtBMplJRgYakCzcmTaMp53eZ4hrkPQ1hTr6QpCfVAr+cfGxtZJZaGhoVy7\ndo2vvvqqTs4nNC2SJFXqi6/Qz+eq+RnMC41ILs/GUqZLN4t2TOw4kZZmLRswUkF4+tVqkNfjOnr0\nKGlpaTz33HMAqvECU6dO5YUXXmD58uVPMhzhCZEkiTt37nDnzh26d++ummK5mXEzBnXvyuFfzuDi\nYs54nxcZ5DIILY0n+s9SEJ5JT/SvbP369ZSWlqp+zsjIIDg4mBUrVtCzZ88nGYrwhOTl5XH16lWS\nk9PJyCjG2toaN7f7SyfKZDKmdpuMlq5EYIdAHEwcGjhaQXh2PNHk//eunbq6uqpyS0sxJ8vTRC6X\nExcXR1JSEklJeSTeSadQIwOz88a4urqqmn/M9Mx4rftrDRytIDx7xPdroU49aOKJiYlBLpcjIZFS\nfId0rdukKvLIvKZPkHIYmppiHh5BaEgNmvzt7OyIi4tryBCEOpSbm8vVq1fJzc0FoFBeeH+RFbMc\nriShUFIAAB/xSURBVOenIjOUaNXuLiWKYow0xQhdQWhINSb/tLTajagUo3WfbVFRUdy8eZOionL0\n9TW5nX+b28W3KTYrpkK/gnbm5rS3c2Nyp8liagZBaARqTP69e/eu1RS5MTExdRKQ0DRpaelw61Y+\niSmpyKwyUdgWUWZXBhqgo6nDOI9xYpEVQWhEakz+q1atUv2h5uXlsX79erp3787zzz+vGuH7888/\nc/r0aRYuXPjEAhYap1vJEhEpsWRqJHMnMwd3RwsMNLRpa9WWCR0nYGVg1dAhCoLwFzUm/xdffFH1\nevbs2bzwwgusWLGi0j7Dhg1jxYoVfPPNN4wdO7b+ohQajeLiYmJiYnBzc8PY+M959LVaJ3NNP5q8\nojLMzHQx0NEn2HMsvVr0Enf7gtAIqfXA97fffmP79u3VbvP39+fQoUN1GpTQ+FRUVJCYmEhiYiIK\nhQK5XE63bt1Uib2vkz99Op8lOjmB/p26MsFzAub65g0ctSAINVEr+ZubmxMZGVntQKzz58+Lh71P\nMUmSuHv3LjExMZSUlKBUSty6lUdCYjbt2rXDzMwMAA2ZBq/0msad/Dt0tRdLKgpCY6dW8g8MDGT7\n9u2UlpbSr18/zM3NycrK4ttv/6+9O49q6sz/B/5OCPsiYUcElCWggiyyQykqda9Ca21VtDqOS+kZ\n9ehhqpZy5jvd+LVaRFvb6nQU69LlN2pL+22nLbVYrCKbOCKryCohhH0NkDzfPxyupkiNIgnI53VO\nzpHnubn5fMjl4829T57ne3z66afYvXv3SMdJNKClpQUFBQVoamoCAPT1KZBz5RaqeytR09+CRZKn\n8d/aDwCwM7GDnYmdhqIlhDwIlYr/Sy+9hPb2dnzyySc4dOgQ166rq4utW7c+1BKOZPSSyWQoKipC\ndXU1N/8SALSxZhTo56C4pw7gAynpX+NN0VrNBUoIeWgqFX8ej4dXXnkFsbGxyMvLQ1tbG4RCIXx8\nfGBgYDDSMRI1qq2txdWrV9Hf38+19Sp6Uc7KUSYog6kI0MvXgqODCTwCdTUYKSFkOB7oG77GxsYP\nvGoXGVsMDQ3R39+P3l4F6iUdMHZUIEuRBZmWDACgq6OFeU9Mx4veazDVcqqGoyWEPKwhi//cuXMf\n6Kbdv//970cSENEsU1NTdHUZIjOvEPnyqzDR7YKV5e1PdzweD7OnzMZSt6XQFdBZPyFj2ZDF39fX\nl0ZsPMZ6enpQWFgIoVCIyZMnc+2MMWS3X8f3iu/BeAwNN/gwN9eD/YRJWOO1BlOEUzQXNCHkkRmy\n+CcmJnL//vbbbxEcHAwzMzO1BEVGzu/H60skEtjZ2UFb+/ZyiTweD14zzfFjBR98LR7cRRaInhqF\neS7zaJEVQh4jKv01x8fHIzExEfPmzRvpeMgIGZhqubi4WGlBHbG4DdXVtXBymsy1Pef5DDIrszHJ\n3BprvFfD1thWAxETQkaSSsXf2toa3d3dIx0LGSENDQ24fv062trauLbu7n6Ul/cgV1wLfaErnJzu\nbK8r0MX/zHsVQj0hXfoj5DGlUvFfsWIF3nrrLeTn58Pd3f2ewzuffvrpRx4cGZ729nZcv34dEolE\nqV1PTw9NMjnONHyDNh0xGs7XYk6oG8zN9bltzPTpEh8hjzOViv/bb78NADh16tQ9+3k8HhX/Uaa+\nvh5ZWVlKX9LS0tKCwxQHXO+/jouyn6GY0AheB6BlfwuVXaUwN5+hwYgJIeqkUvFPS0sb6TjII2Zu\nbg5dXV309PRAJpPD3n4Sei26kXIjBW2y25d/RCIhtHhaeMZrMTwmums4YkKIOqlU/O3s7szX0tXV\nhc7OTpiamnIjRIhmKRQK9Pf3Q0dHh2sTCARwdnbBL79cR8bVJnQ6/QrTKR1Kz5vp6IkVHivohi4h\n45DKY/cyMzOxZ88eFBQUcJcSZsyYgW3btiE4OHjEAiRDY4xBLBajsLAQxsbG8Pf3V+pvbAeOX/0V\nYp3/gNUA3haWMDHWhameKZ6d9iz8J/rTDV1CximVin9WVhbWr1+PKVOmYMuWLTA3N4dEIsH333+P\nDRs24OjRo/Dz8xvpWMldmpqacP36dTQ3NwMAOjs70dTUpPRdDGM7GXptS8EaASMjbWhrCTDPZR4W\nuS6ib+gSMs6pVPyTk5MRHByMQ4cOKZ0pxsbGYuPGjThw4ABSUlJGLEhyR3t7OwoLC1FfX6/UrqUl\ngFTaplT83S3csSTgCWSUZmHOjAC84PECrI1o7QVCiIrF/9q1a9i3b9+gSwQ8Hg+rVq3C9u3bRyQ4\nckdXVxdKSkpQU1OjNIKHz+dDR8cCX/1aDoPCS/h/2x2V3qe1ASuxYNoceFh50CUeQghHpeJvYmKC\nrq6ue/Z1dnZCS0vrkQZF7pDJZCgrK0NFRQUUCgXXzuPxYGdnB2aoh60fHYRUUA7dLkNEXQ5GSKAj\nt52VoRWsDK00ETohZBTjq7JRUFAQDhw4MOhSQ319PQ4cOEA3fEdQV1cXysvLlQq/tbU1vAK8UKBV\ngEMlydB1vP0lLrl2FzIlv2oqVELIGKLSmf+OHTvw7LPPYt68eZg5cyYsLCwglUqRk5MDIyMjxMXF\njXSc45ZQKISNjQ3EYjGEQiEmOtohpy0bx7KPoU/eBwCY7GgCpmCICpiNFT7zNRwxIWQsUHlunzNn\nzuCf//wncnJyUFNTAxMTE6xcuRLr1q2DpaXlSMf52BuYeI3P52PSpElKfe7u7jCaIMThn7/DhZ+S\nMcNXCP5d1+89bKYjYdYzcJjgoO6wCSFj1JDF//Lly/Dx8eG+yGVpaYlXXnlFbYGNF4wx3Lp1C8XF\nxejs7ISuri5sbGwgENx5a+p7JXjx+G6093QCAGprtWE/yRiOpo6Ido+mFbUIIQ9syOK/Zs0a6Ovr\nw9/fH6GhoQgJCYGrq6s6Y3usMcZQX1+P4uJipdk2ZTIZqqqq4HTXNJuTJtjBwd4EBaW3i7+g2xSb\n/TbA28abRvAQQh7KkMX//fffR05ODnJycvDuu+9CLpfDwsICISEh3IMu9zw4xhikUimKiorQ0tKi\n1KetrQ0zCxuIm+RKUyzrCfSwPmIZ9rf8f8T4P4cVTz4FPk+le/WEEHJPQxb/yMhIREZGAgC6u7tx\n5coV5OTkICsrC3/729/Q09MDFxcX7lOBqgu7i8VivPXWW7h06RIUCgWeeOIJ7Ny5E9bWj/+Xjxob\nG1FcXIzGxkaldoFAgIn2djj47c+4KD0Mc+aAr0SJMDG58y3cSKc5mLvjKWjxaVgtIWT4VLrhq6+v\nj+DgYG5IZ39/P7KysvD555/j+PHjSElJQWFh4X33wxjDxo0bYWZmhmPHjgEA3njjDbz00ks4ffr0\nMNIY/WpqapCXl6fUxufzMdF+Iqq0qnC0+gj+o6hEH08GMa8En/3vZWx84QluW20tmkSPEPLoqDyx\nm0wmQ2ZmJi5evIjMzEwUFxeDx+PB09MToaGhKu1DKpXC2dkZO3bs4Ea0rF27Fi+//DJaW1sxYcKE\nh8tiDLCxsYG2tjYaGzshkXRj0hQb8B1bcbT2KHr6by+raGVpgJZmGezMrGE+UbPxEkIeb39Y/EtK\nSpCRkYGMjAzk5ORAJpPBwcEBoaGhiI2NRVBQEIyMjFR+MUtLSyQlJXE/i8VifP755/D09HysCn9L\nSwu0tbVhaGjItQkEAjQ1GeFidi1usJvo6EnFNC1Tpee5Ozrg5bA/Y7boCbq8QwgZUUMW//DwcDQ0\nNMDExASBgYHYvXs3QkNDB41Bf1ixsbFIS0vDhAkTuEtAY11LSwtKSkpQX18PW1vbQTOdGnt045cr\nX0EOOXjNgKzXGLo6WrA2ssZC14UIsAugG7mEELUYsvhLJBIIhUIsW7YMISEh8PPze6SLt2zduhWb\nN2/GwYMHsW7dOpw9e3bM3vS9u+gDgEwmx2+/FcHJyQVmZnfO7qdOmgIrWz2AAVbWBnCycMBC14Xw\ntfWlok8IUashi/+RI0eQkZGB8+fP4x//+Af09PS4Mf9hYWFwdnYe1gu7ubkBAJKSkhAREYEzZ85g\n8+bNw9qnuv2+6APAzZutqKntQFt/H65crcfsiDvF38XMBQsC/KFgCixwXQBPK08ap08I0Yghi//A\n6J64uDhIpVJkZGTgwoULOHToEN5++23Y2NggJCQEYWFhCAkJgamp6VC74kilUmRmZmLRokVcm76+\nPuzt7QdNGjeaNTc3o6SkBBKJRLmDB/To9uKSPBcNWrXoTdfCrCdFSgX+5YCXoS/Qp6JPCNEolUb7\nWFhYICoqClFRUQCAwsJCXLhwAdnZ2di5cyfkcjkKCgruu59bt25h+/btcHBwgKenJ4Dbi5PcvHkT\n0dHRw0hDfYqKilBaWgoA6O9XQCDgg4GhS68LBf0FuGUlRnNFHUyNdKHjWgYFU0CLd+fmrYG2gaZC\nJ4QQjspDPQGgra0NeXl5yMvLw9WrV3Ht2jXI5XJMnz5dped7eHjAz88P8fHxeP311yEQCLB3716Y\nmZlx/7GMdpaWlsjLK0BVVTuaWzvhHKyHYhSivacdACAQ8DHTzwaGeroItvdFr7wX+nx9DUdNCCHK\n/rD4V1RUIC8vD7m5ucjLy+PmlXdxcUFQUBBWrVqFwMBAlYd78vl8HDhwAO+88w42bdoEmUyGsLAw\nHD9+XGlY5GjAGENDQwMsLCzA59+5GWtmZoYrhU2o6ilHCa8YV2v0YD/JmOs30DbAAtcnMXvKbJjo\nmmgidEIIua8hi39QUBBaW1vBGMPEiRMRFBSETZs2ISgoaFhz+piZmSExMfGhnz/SGGOoq6tDaWkp\n2traMGPGDDg63lkZS87kqJycjfyiGoABPT23f4Vm+maIdIpEqEMo9AR6mgqfEEJUMmTxDwwMREhI\nCIKDg+Hg8PjPE69QKFBbW4uysjJ0dHRAoWAQiztRU5OFTZvsubN/AV+A5YHz0dB2Cra2RvCwE+Ep\np6fgY+tDwzUJIWPGkMU/OTlZnXFojFwuR1VVFW7cuIHu7m4AQF+fApeyK9HCGtAi78WyxvmwtLxz\naSvSZQ4ae6SY4zQHTkKnoXZNCCGj1gPd8H2c9PX1oaKiAuXl5ejt7eXaG7saUddVhyL9Ytxsb4Qc\nCvxvegFeXBbIbWOia4INMzdoImxCCHkkxmXxZ4whPT0dnZ1dkEq7wddWoIvfhLruOrTpt0FmJoMO\nXwHtcj4m25nAdJrk/jslhJAxZFwWfx6PB4XCBOcv56ONSdGr3wYTZz56rXuB/373ytxcH7OnBWP2\nlFlwM3fTbMCEEPKIPfbFv7m5Gc3NzUrLIgJAlWExKlCIekUbmto74Sewhj5PG8a6xnjC4QmEO4ZD\nqC/UUNSEEDKyHsviP7A+bllZGaqr69HQ0I3Vq80hFN6ZNjpiajCOZpxFZ2cfJttOgLuVCE+5zoGP\nrQ8E/Mfy10IIIZzHqsrJ5XLU1tbixo0b6OjoQEGhBNVNdejRaoF1mg2eXxbJbessdMY8/5lwspiM\nWVMiMNGYVk8hhIwfj0Xx7+3txc2bN1FZWQmZTIY2WRvEHWLUoBatgh40Kjrxa2kJnsed4s/j8RA/\naxdNsEYIGZfGdPGXSFrw44+5KC+vhLaOAmYOctS116GzrxOMx6Cw6MP15lqYWOjAwLlh0POp8BNC\nxqsxXfybm9uRfTUfXVpN6JG1wKpRD0zA0GvaC5mRDOADUU5+iJjyJALsAjQdLiGEjBpjuvj3TGiC\n2KAIgj4BulkvGvR7oWsJ6Ah0EGoXinDHcDhOcKQzfEII+Z0xXfynWU6Dtp0WZP1dmGAlgL2ZLZ50\nfBJBk4Kgr03TKBNCyFDGdPHX1tJGdOhTkHZJ8eTkJ+Fq5kpn+YQQooIxXfwBIMo9igo+IYQ8oDE/\nBzEVfkIIeXBj4sxfLpcDAMRisYYjIYSQsWGgXg7Uz98bE8W/oeH2GP1Vq1ZpOBJCCBlbGhoalFYj\nHMBjjDENxPNAenp6cO3aNVhaWkJLS0vT4RBCyKgnl8vR0NAADw8P6OkNXlp2TBR/Qgghj9aYv+FL\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": [ + "system.alpha = 0.025\n", + "system.beta = -0.0018\n", + "\n", + "run_simulation(system, update_func2)\n", + "plot_results(system, 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": 66, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pop_array = linspace(0.001, 15, 100)\n", + "net_growth_array = system.alpha * pop_array + system.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": 67, + "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": 68, + "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": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.88888888888889" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-system.alpha / system.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": 70, + "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": "code", + "execution_count": 71, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def update_func2(pop, t, system):\n", + " r = system.alpha\n", + " K = -(system.alpha/system.beta)\n", + " net_growth = r*pop*(1-(pop/K))\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n44ZiOblcLi1cuFCxTHR0tCSXyyU3NzeleCdPniw5Ojoq9rvkXM2dO1exTGFhoeTr6yu5urpKqamp\n5cZXlvv370tyuVxasWKFYtquXbskuVwubdmyRWnZDRs2SHK5XPrxxx8r3N6XX34pJSUlKf7Fx8dL\nFy9elIYPHy7J5XLp4MGDlT5ulS3z1q1b0v79+6UWLVpIbm5uis/ounXrJEdHR+nmzZtK21myZIkk\nl8ulsLAwSZL+d95nzpyptFxl1//iiy8Uy6Snp0tOTk5SvXr1pKioKMX0pUuXSnK5XLp9+3aljklZ\n56+k3LNnzyqt+9NPP0lyuVz67bffnrt/FX12kpKSpHbt2kkdO3aU0tPTldbZvXu30rK///67JJfL\npa1bt5baTpcuXSRfX98yyyjx1rRsl3VbWxFNTU3OnTvHnDlzlKanpKRgYGCg6IIbHh5OUlISffr0\nUboC6dWrF9WqVSu13Ro1amBpaVnpclR1+vRpnJyclK5AtbW1Wb9+PStWrKhw/ZLqHYBatWoB0KZN\nG8XVOYCtra2iJ1xiYiJXrlyhV69eWFlZKZU5YsQIcnNzOXfuHElJSYSHh9OtWzcMDAwUyzVv3lzp\n1jglJYV//vmHtm3bkpubS3JyMsnJyaSnp9OxY0cSExMr1YZx//599PT0MDU1LTXvyJEjpfa5vOot\nVZ04cQK5XE716tUVsScnJyvuBIODg5WWf/oOseR4N27cWCleW1tbJEkiMTFRaV1/f3/Fz+rq6gwZ\nMkRxvF/WqVOnMDAwUNxNlii58zx16lSF2zh69CgtWrRQ/GvTpg0+Pj48ePCApUuXKjXmVva4qVpm\nly5dmDZtGqampqxfv17xGR09ejR//vkn9vb2inVzc3MV3xXP/t0923upsus/fZ4NDQ0xNTWlVq1a\nSjULtra2AIq/rZc5JidOnMDU1BQnJyelddu2bYu6ujqnT59+7v49T2FhIRMnTiQ5OZmVK1cq7ipP\nnDiBTCajbdu2SmU2aNCA6tWrlyoTnnSCqKjb8mut2rKwsABQqWtvQkICGhoaGBsbV6oMTU1NTp8+\nzcmTJ7l9+zZ3794lLS0N+F/dblxcHPAkQTxNXV2dmjVrltqmmZnZC5Wjqri4uDKfrahdu7ZK6z8d\nn7q6epkxq6url9r/srZf8kf24MGDco8TQJ06dbh69Srw5IsfnjSQP12V87SHDx+qtC/wpApIX1+/\n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\nDyVXBilTRMQQAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "system.alpha = 0.025\n", + "system.beta = -0.0018\n", + "\n", + "run_simulation(system, update_func2)\n", + "plot_results(system, title='Quadratic model (Attempt to Re-Parameterize)')" + ] + }, + { + "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": 73, + "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": 73, + "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": 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": 74, + "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": 75, + "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": 76, + "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": 77, + "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": 78, + "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": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nmjZtKrVr105tf3t7e+nGjRtyWXh4uGRvby+NHTtWLuvRo4fUqFEj+XX16tWlqVOnqsW+YMECyd3d\nXYqLi5MkSZLOnTsn2dnZSTt27JDrzJkzR7Kzs5OOHDmitu+UKVMkOzs76cSJE5IkSdLixYslOzs7\naeXKlWr1duzYIdnZ2Unnzp2TJEmSTpw4IdnZ2UnLly9Xqzd69Gjp888/l2JiYqSVK1dK9vb20t27\nd9XqzJ07V7Kzs5PPPXPb2mTU6dixo5SUlCSXz58/X7Kzs5NOnTolSZIk/fLLL5KdnZ30888/q+2/\nevVqyc7OTtq0aVO22ssqtszlmV/reu6SJEl2dnbSuHHj5NdhYWGSnZ2dtHjxYkmSJCk0NFSyt7eX\nhgwZIqWlpcn1rl69Ktnb20vDhw9X269BgwZSfHy8XG/fvn2SnZ2dtHXr1ix/vg8fPpQcHBykuXPn\nqpX/9ddf0ueffy7NmDFDra1r167JdZKSkqQOHTqo7Zvx+/SmzO/lHj16SHZ2dtKxY8fksk2bNkl2\ndnZS586d5bK0tDSpfv36UpcuXSRJkiSVSiW5uLhIPj4+au2/evVKcnR0lLy9veWyjPdzWFiY2nGb\nNGmi9jNKTk6WunfvLtWrV09+P+jyu1aQidt9+VSHDh2oW7cudevWxdXVlS5duhAcHIynpyejR49W\nq1u+fHlKliwpv/7zzz8JCwujSZMmxMTEEB0dTXR0NK9fv6ZRo0bcunVLbVi4jY0Nn3/+ufy6TJky\nmJub8/z58yzjK1WqFPv37ycwMFDuEB45ciQ7duzA2Ng4y/2OHTuGra2txhXa4MGDAQgODlYrr127\ndpZtAZw4cQI9PT169OihVj5u3Dh27dqFsbExAwYM4MyZM2pXn69fv0ZPL/3t/z7Dgvv06aM2cMXL\nywtIP7+Mf01MTPDw8FDbr2fPnpiYmMj1dG3vfX3Mcz9+/DiSJDFgwAD5tjNAjRo1+Oqrrzh58iQp\nKSlyeYMGDdRGsjk4OADw7NmzLI9x5MgR0tLScHNzk9+30dHRWFhYULVqVU6cOAGkv/8A5s2bx8WL\nF0lNTUWpVBIYGKjx+6ELAwMDvv76a/l1xYoVgfTbcxkUCgVlypSR49fX1+fs2bNMmzZNra0XL15g\nYmLy1p/tixcvuHDhAg0aNOD169fyecbGxtK0aVOeP3/O9evX5XN9n9+1gkLc7sun5syZg4WFBQB6\nenqYmppia2uLgYGBRt0SJUqovX748CEAs2fPZvbs2Vrbf/TokZzYMu8P6YM0kpOTs4xvypQpjBw5\nkgkTJjB58mScnJxo2rQpHTt2pGjRolnuFx4ervZhkMHS0hJTU1MiIiLeem6ZRUREUKJECUxMTDTa\ns7S0lF8nJyezYMECbt68ycOHDwkPD5f7rNLS0t56DG0yD4E3MzPDzMxMjj88PJxy5cpp3EZUKpWU\nK1dO4zzf1d6H+FjnntHvlPEB/iZbW1tOnz7Nixcv5DJzc3O1OhlJ+G3HzHjvdu3aVev2jJ+ni4sL\nPXv2ZOPGjfz++++YmZnh6upK27Ztadiwoc7nlMHMzIzChf/9OCxUqBCg+f4rVKiQ3NeUEc+JEycI\nDg7m/v37PHjwQO4rkt6yClLGs1sbN25k48aNWutERkYC7/+7VlCIJJVPubi4aAxBz0rGL1SGjA+B\nESNG4OTkpHWfSpUqyd9n/FWdHXXr1uX48ePy15kzZ5g5cybr1q0jMDBQ4wMqw9t+cdPS0jQ+1N8V\n25uDI7Jy8eJF+vbti5GREfXq1aNjx4589tlnPHz4UOOvYF1p68NKTU2V483ueb6rvay86/w/5rm/\n65wg/Twyhny/z/sqo53ly5dTpEiRt9adOHEinp6eHDp0iFOnTnHo0CH27t1Lly5dsn1ubyaoN715\nxZiZJEkMHjyY48ePU7NmTZydnenSpQu1a9emV69ebz1exv+bh4dHlv2+lStXBt7/d62gEEmqACpT\npgyA/MH0pmvXrhETE/POD4C3UalU3Lp1i1KlStG6dWtat25NWloaP//8M7Nnz2bfvn1ZzmJRpkwZ\n7t+/r1H+7Nkz4uLisLa2zlYspUuX5uzZs8THx6vd+rh58yZr165l0KBBLF68mCJFirBv3z61X+gV\nK1Zk61hvCgsLU0v00dHRvHr1ChsbGyD9PK9evUpycrJaAlKpVISHh6sNXNGlvYwPfJVKpbbf227J\nAh/13DP+aPq///s/atSoobbt/v37GBkZUaxYMeLi4rLddoaM9661tTVVq1ZV23by5En5ivn58+eE\nhoZSt25d+vfvT//+/Xnx4gVDhgxh27ZtjB07NsevMi5evMjx48cZPHgwI0aMkMtTUlJ4+fLlW5/n\nyzjPQoUKafyO3r17l/DwcAwNDT/od62gEH1SBZCjoyOWlpZs3LiR+Ph4uTwuLk6+bZD56is7Xrx4\nQZcuXVi5cqVcpqenR7Vq1eTv4d8rvDdv7zRq1Ih79+5x9OhRtTZXrVoFkO1bNQ0aNCAtLY3t27er\nlW/ZsoUDBw5gYWHBy5cvMTc3V/uQfvXqlTw8WZerscw2bdqkdmWRMQqvadOmAPLzbJs3b1bb75df\nfiE+Pl7jPN/VXsaty1u3bsl1UlJSOHz48FvjzM656+npvfVWXKNGjQBYvXq1Wqw3b97k7NmzNGjQ\n4K1XHrrIOMbKlSvVjnHr1i0GDRrE+vXrgfQh6r1795b7bQCKFy9OhQoVUCgU8nsw49/3uaX7Li9f\nvgT+veLJsG3bNhITE9X65zJfYVtZWeHo6EhQUJBa/3BycjLff/89w4cPJyUlRefftYJMXEkVQPr6\n+kyaNAkfHx/c3d359ttvMTAwYPv27Tx69Ii5c+dmeXtDFyVLlqRt27b88ssvJCYm4uzszMuXL9m0\naRMWFha0bNkSQB5mvHv3biRJokOHDnh7e3P48GFGjhxJt27dsLGx4dy5cxw+fJhmzZrRoEGDbMXi\n5uaGq6srfn5+hIaGUq1aNa5cucLOnTsZMmQIZmZm1K9fn9WrVzNixAhcXV159uwZv/32m3wV8mYi\n19X58+fp378/jRo14o8//mDXrl20b99eHmqfMc+in58fd+7cwdHRkRs3bhAYGIiTkxOdOnXKVnt1\n6tTB0tKSZcuWkZSURIkSJdi1a9c7Bz5k59zNzc25cOEC27Ztw9XVVaOtKlWq4OnpycaNG/Hy8qJJ\nkyY8e/aMjRs3Ympq+l4DFjKzs7OTj/Hy5UuaNGkiv7eMjY3lK5b27dvz888/M3DgQLp160bJkiW5\nceMGO3fupEOHDvJVdUZyXrx4MV988QV169b94BgzODs7Y2JiwsyZM4mIiKBYsWKcP3+e/fv3Y2Bg\noPGzBQgICKB+/fo0btyYSZMm0atXLzp27Ei3bt0wMzNj3759/PHHH4wePVr+/dHld60gE0mqgGrR\nogXFihVj+fLlLFu2DD09PapUqcLy5cvlv1Y/xPTp0ylXrhz79u1j3759GBoaUrduXXx8fORfSFtb\nWzw9PQkMDOT69et88cUXlC9fnq1bt7Jw4UL2799PbGws5cqV47vvvqN3797ZjkNPT49ly5axdOlS\n9uzZw+7duylfvjy+vr5069YNgGHDhpGamsr+/fs5fvw4VlZW1KtXjz59+tC6dWvOnTsnX7Ho6qef\n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\nyMhQ5s2bp8TGxip5eXlKenq60qNHD2XlypVKZmamsmLFCqVXr162oa1Wq1WZOHGi8uCDDyqpqam2\n+RRXD01tLiZPnlxtyLQzrt3HH3+s9OnTR/nqq6+UX375RXnyySeVkSNHNovh/ddez40bNyo9e/ZU\ndu7cqZw+fVr5/PPPlZiYGOXzzz9XFEWu59XS0tKUbt26KS+++KLd/Eej0djon81mn6QuXbqkvPHG\nG8rAgQOVfv36Kc8884ySn5/f2GG5rPPnzytz585V4uLilJiYGGXatGnKL7/8Ytv+zTffKHfffbfS\ns2dP5d5771X27dtXbf+cnBxl5syZSkxMjDJkyBDl7bffViwWS0OfRqO79ktVUZxz7davX6/Ex8cr\nffr0UX73u9/VOk+oqbn2elqtVuW9995TRo4cqfTs2VMZOXKk8umnn1bbR65nlbffflvp2rVrjT9r\n165VFKVxP5tS9FAIIYTLatbPpIQQQrg2SVJCCCFcliQpIYQQLkuSlBBCCJclSUoIIYTLkiQlhBDC\nZUmSEqKeLVy4kKioKLtqppft2bOHqKgo1q1b18CRCeH6ZJ6UEPWstLSUe+65B41Gw1dffYWPj49t\nW0lJCXfffTft2rXj008/pUWLFo0YqRCuR+6khKhnrVq14tVXX+XcuXMsX7682ra33nqLoqIilixZ\nIglKiBpIkhKiAQwbNoz77ruPjz76iCNHjgCg1+vZvn07c+fOJSIiwvbeTz75hISEBHr27Mntt9/O\npk2buLbD4+OPP+a+++4jJiaG3r17M378eP75z3/atm/fvp2+ffvy0UcfMXjwYAYNGsTZs2cb5mSF\ncCLp7hOigRQVFTF69GjatWvHxx9/zPjx4wkICGDr1q22VafXrl3LmjVrmDp1KvHx8Rw5coR169Yx\ndepUW32f999/n2XLlvHMM88QExNDYWEhGzduJCMjgz179hASEsL27dtZuHAhERERzJs3j4sXLzJu\n3LjGPH0hfpNmXfRQiIbk5+fHokWLmDVrFr/73e84d+4c69evtyWooqIiNmzYwKOPPsoLL7wAwNCh\nQ/Hy8uLtt99mypQptG3bluzsbKZPn84TTzxhO7ZOp+OBBx7gyJEj3HnnnQBYrVb+93//l9tuu63h\nT1YIJ5HuPiEa0B133MHo0aPR6/XMnz+f9u3b27YdOnQIk8nEiBEjqKystP38z//8D5WVlfz4448A\nvPzyy8yePZuioiJ++ukn/u///o9PPvkEwK6Cardu3Rru5ISoB3InJUQDGzp0KLt372bYsGHV2gsL\nCwGYOnVqjftdrnZ66tQpFi5cyP79+9FqtXTu3JnIyEgAu2dX3t7eTo5eiIYlSUoIF9G6dWsAVq5c\nSVhYmN32tm3bYrFYeOKJJ2jVqhU7duwgKioKd3d30tPT2bVrV0OHLES9k+4+IVxEnz59aNmyJXl5\nefTq1cv2YzKZWLFiBXl5eeTl5XH69GkmTpxIjx49cHev+j1z7969QNVzKCGaErmTEsJFtGnThilT\nprBs2TKKioro168f2dnZLF++HH9/f7p06ULLli3R6XRs2bKFoKAgWrVqxd69e/nwww8BKC8vb+Sz\nEMK55E5KCBcyb948Zs+eza5du5g+fTorVqxg+PDhbNmyBa1Wi0ajYd26dQQFBfH8888ze/Zsjh49\nyoYNG+jYsSMHDx5s7FMQwqlknpQQQgiXJXdSQgghXJYkKSGEEC5LkpQQQgiXJUlKCCGEy5IkJYQQ\nwmVJkhJCCOGyJEkJIYRwWZKkhBBCuKz/ByMlQGdaI70dAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_prehistory(table1)\n", + "decorate(xlim=[0, 2000], 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": 80, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Year\n", + "-10000 NaN\n", + "-9000 NaN\n", + "-8000 NaN\n", + "-7000 NaN\n", + "-6000 NaN\n", + "-5000 NaN\n", + "-4000 NaN\n", + "-3000 NaN\n", + "-2000 NaN\n", + "-1000 NaN\n", + "-200 NaN\n", + " 1 300.0\n", + " 100 NaN\n", + " 200 NaN\n", + " 300 NaN\n", + " 350 NaN\n", + " 400 NaN\n", + " 500 NaN\n", + " 600 NaN\n", + " 700 NaN\n", + " 800 NaN\n", + " 900 NaN\n", + " 1000 310.0\n", + " 1100 NaN\n", + " 1200 NaN\n", + " 1250 400.0\n", + " 1300 NaN\n", + " 1340 NaN\n", + " 1400 NaN\n", + " 1500 500.0\n", + " 1600 NaN\n", + " 1650 NaN\n", + " 1700 NaN\n", + " 1750 791.0\n", + " 1800 978.0\n", + " 1820 NaN\n", + " 1850 1262.0\n", + " 1870 NaN\n", + " 1875 NaN\n", + " 1900 1650.0\n", + " 1910 1750.0\n", + " 1913 NaN\n", + " 1920 1860.0\n", + " 1925 NaN\n", + " 1930 2070.0\n", + " 1940 2300.0\n", + "Name: un, dtype: float64" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "un = table1.un\n", + "un" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "first_year=un.index[11]\n", + "last_year=un.index[-1]\n", + "total_growth=un[last_year]-un[first_year]\n", + "time_elapsed=last_year-first_year\n", + "avg_growth = total_growth/time_elapsed\n" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "results1=TimeSeries()\n", + "results1[1]=un[1]\n", + "for i in linrange(1,1940):\n", + " results1[i+1]=results1[i]+avg_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nW0lJidS9e3dp2LBhUnFxsdyem5sr9ezZU3r55Zc13u/t7S1dunRJbouPj5e8vb2l9957T24bNWqU\nFBgYKL9u3bq19Mknn2jEvmLFCmnAgAFSTk6OJEmSdOLECcnLy0vauXOnvM+SJUskLy8v6cCBAxrv\nnTt3ruTl5SUdPnxYkiRJWr16teTl5SVt2LBBY7+dO3dKXl5e0okTJyRJkqTDhw9LXl5e0rp16zT2\nmzZtmtSyZUspMzNT2rBhg+Tt7S3FxMRo7LN06VLJy8tLvva7j12Z8n0GDhwoFRYWyu3Lly+XvLy8\npKNHj0qSJEn//ve/JS8vL+nbb7/VeP/GjRslLy8vafv27Q90vKpiu7v97te6XrskSZKXl5c0Y8YM\n+XVcXJzk5eUlrV69WpIkSYqOjpa8vb2lyZMnS6WlpfJ+58+fl7y9vaV33nlH431du3aVcnNz5f32\n7NkjeXl5Sd9//32Vf783b96UfHx8pKVLl2q0X758WWrZsqW0YMECjWNduHBB3qewsFDq37+/xnvL\nv08V3f1ZHjVqlOTl5SX98ccfctv27dslLy8vaciQIXJbaWmp1KVLF2no0KGSJEmSWq2W/P39palT\np2ocPzs7W/Lz85MmTJggt5V/nuPi4jTO26NHD42/o6KiImnEiBHSs88+K38edPmu1Weiu6+O6t+/\nP506daJTp04EBAQwdOhQDh48yOjRo5k2bZrGvk2aNMHBwUF+HRERQVxcHD169CAzM5O0tDTS0tIo\nKCggMDCQyMhIjWnhbm5utGzZUn7t7OyMra0tKSkpVcbXuHFjQkND2bVrlzwgPGXKFHbu3ImFhUWV\n7/vjjz/w8PDQukObNGkSAAcPHtRo79ChQ5XHAjh8+DAGBgaMGjVKo33GjBn8/PPPWFhYMH78eI4d\nO6Zx91lQUICBQdnH/2GmBY8dO1Zj4kpwcDBQdn3l/7e0tGTkyJEa73v11VextLSU99P1eA+rOq/9\n0KFDSJLE+PHj5W5ngKeeeorOnTtz5MgRiouL5fauXbtqzGTz8fEB4M6dO1We48CBA5SWlhIUFCR/\nbtPS0rCzs6NFixYcPnwYKPv8ASxbtowzZ85QUlKCUqlk165dWt8PXZiYmPDcc8/Jr93d3YGy7rly\nCoUCZ2dnOX5jY2OOHz/OvHnzNI6Vnp6OpaXlPf9u09PTOXXqFF27dqWgoEC+zqysLHr27ElKSgoX\n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\ng4zZJxAIBALTo1KR6tatGz179qRHjx56q8sFAoFAIKgrKhWp999/vy7tEAgEAoHAgAYZU0StVrN6\n9Wp69+5Nx44dmTFjBpmZVVucKxAIBIL6p0GK1IYNGzhw4ADLly/nk08+4ebNm7zyyiv1bZZAIBAI\nqkiDEymlUsmePXuYM2cOvXr1ol27dqxZs4YzZ85w5syZ+jZPIBAIBFWgwYlUXFwchYWFdO3aVVfW\nsmVLPD09OXXqVD1aJhAIBIKq0uBE6ubNmwC4uemnl3B1ddXtEwgEAsHDQYMTqeLiYszMzAwitsvl\nckpLS+vJKoFAIBD8HRqcSFlZWaHRaFCp9KOYK5VKrK2NyzArEAgEAtOgwYmUh4cHABkZGXrl6enp\nBkOAAoFAIDBtqhRg9mEgMDAQW1tbTp48yfDhwwFtKPm0tDTCwiqPbK5WqwHEvJVAIBBUgfJnZvkz\ntKZpcCIll8sZM2YMK1aswNHREWdnZ9566y26du1KaGhopfXKe15jx46tK1MFAoGgwZCRkYG3t3eN\nn9eopIcPGyqVilWrVnHgwAFUKhV9+vRh8eLFODk5VVqnpKSE2NhYXFxcaNKkSR1aKxAIBA8varWa\njIwM2rdvj5WVVY2fv0GKlEAgEAgaBg3OcUIgEAgEDQchUgKBQCAwWYRICQQCgcBkESIlEAgEApNF\niJRAIBAITJZGL1IiQWLVSExMJCAgwOBTHmH+2LFjDB8+nODgYIYNG8bPP/+sVz8rK4uZM2fSpUsX\nevTowcqVKw1CWDUGFi9ezMKFC/XKaqLtPvroI/r160dISAiTJk3i+vXrtX0pJkFF7fnMM88Y3Kd3\nHyPa8w6ZmZm8/vrr9O7dmy5duvDiiy8SHx+v21+v96bUyFm7dq3Uq1cv6dixY1JsbKw0atQo6bnn\nnqtvs0yWb7/9VurWrZuUnp6u91EqlVJCQoLUvn17afPmzVJiYqK0du1aqV27dlJ8fLyu/vPPPy+N\nGTNGunz5svTTTz9J3bt3l9asWVOPV1S3aDQaad26dZK/v7/0xhtv6Mprou327dsndezYUYqKipLi\n4uKkl156SRowYIBUWlpap9dYl1TWnhqNRgoJCZEOHjyod5/m5+frjhHtqUWtVkvPPvusNHr0aOnc\nuXNSQkKCNGPGDKlHjx5SdnZ2vd+bjVqkSktLpY4dO0pfffWVriwlJUXy9/eXTp8+XY+WmS5r166V\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot_prehistory(table1)\n", + "plot(results1, '--', color='gray', label='model')\n", + "decorate(xlim=[0, 2000], xlabel='Year', \n", + " ylabel='World population (millions)',\n", + " title='Prehistorical population estimates')" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEjCAYAAACIB/7lAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcV9X/wPHXh71EBEFZCqJAhgsnhgsnmj/LmSvFTL9q\nDrIcaeQoZ05MM80c2ZAcOUBNTQ1NxUGONMFEAREVlA0fxv39QVz8wAf8oCzxPB+PHnnPvffc90X8\nvD/3nHPPUUiSJCEIgiAIlZBWRQcgCIIgCEURSUoQBEGotESSEgRBECotkaQEQRCESkskKUEQBKHS\nEklKEARBqLREkqoiZsyYgYuLi8p/r732Gu7u7gwYMIDdu3eX6vW8vLwYPnz4M48bPnw4Xl5eJa5f\nqVQSGxv7PKGptWvXLlxcXDh79myp1VkedZeXF72HyMhI+c9RUVG4uLjg7+9fWuFVamfPnsXFxYVd\nu3aVy3mvGp2KDkAoXTNnzqRGjRoASJJEcnIye/fuZcaMGTx+/JhRo0aVazz/+9//SEtLK9E50dHR\njBo1irFjx9K3b99SiaNly5YsWbIEJyenUqlPyPfee+9haWnJokWLADA3N2fJkiW4uLhUcGRCVSCS\nVBXTpUsX7OzsVMr69+9Pz549+eqrrxg2bBh6enrlFs8bb7xR4nOioqKIiIgo1Tjs7e2xt7cv1TqF\nXMHBwbz99tvytpGREX369KnAiISqRDT3vQIMDAzw8vIiOTmZsLCwig5HEARBYyJJvSIUCgUA2dnZ\nQG6f0uzZs/nkk09o3Lgx7du3Jz4+HoBLly7h4+NDs2bNaNasGaNGjeLy5ctq6927dy+9evXCzc2N\n7t278+OPP6rsL9gnpVQq+eKLL+jcuTNubm506NCBuXPnkpCQAOT2jbz77rtAbtPl001Gjx8/Zs6c\nObRr106+3jfffCPfE4C/vz+NGjXit99+44033qBZs2YEBASo7XNRKpX4+/vTrVs3GjdurLa+O3fu\nMH36dNq3b4+bmxutWrXif//7X4mTfd71L1++zLhx42jatCmenp4sXLiQ9PR0lWPT0tJYtmwZXl5e\nuLm54eXlxZdffqnSbKppfUX1NWnSB/Wse8/rewLYvXu3XF9RfVIBAQH06dOHRo0a0aZNG6ZOnUpU\nVJS8P++8PXv2sGLFCtq3b0+jRo0YMGAAZ86cKfbnm3fu3r17Wbx4MW3btqVZs2aMHz+e+Ph4Ll++\nzDvvvEOTJk3o3r07gYGBKudnZ2ezceNGunfvjpubG56ennz22Wfyv4k8qampfPHFF3h6etK0aVMm\nTJjAgwcPCsWTk5PDpk2b6NGjB25ubrRr147PP/+c5OTkYu9DKEw0970CcnJyOHfuHHp6eip9MgcO\nHKBevXp88sknPHr0CHNzc06dOsXYsWNxdXVl8uTJKJVKdu3axdChQ/nuu+9o0aKFfP6VK1e4efMm\nw4YNw9zcnJ9++ok5c+ZgaWlJly5d1MYyb9489u/fz7vvvou9vT1hYWFs376dO3fusGnTJlq2bMn/\n/vc/vv76awYNGkTz5s0BSEhI4J133iE6Opp33nkHR0dHTp06xbJly/j7779ZuXKlfI2srCz8/Pzw\n8fFBqVTSvHlzQkNDC8UyYcIETp48Se/evfHx8eHy5cssW7aMuLg4Zs6cyaNHjxg4cCAmJiYMGzaM\nGjVqcP36dXbs2MG1a9c4duwYurq6Jfq7mDx5MlZWVkydOpXr16+zefNmwsPD+fbbb4HcxOnj40No\naCh9+/bFzc2Ny5cvs2HDBi5cuMDWrVtVrvms+p6XJvee1/c0bdo0WrRowcCBA3FyciqUdAEWL17M\npk2b8PDwYNq0aTx48IDvv/+e06dPExAQoNJEvWrVKgwNDRk1ahSZmZls2rSJsWPHcvz4cbm/tShf\nfvkllpaWfPDBB4SHh7N9+3YeP37Mv//+S9++fenduzdbt25l2rRpvP7669StWxcAX19fDh06RLdu\n3Xj33Xe5ffs2P/74I2fOnCEgIABTU1MkSeJ///sfISEhDBw4kAYNGnDw4EH8/PwKxTFr1ix+/fVX\n3nrrLUaOHMmtW7f48ccfuXjxIj/++CP6+vov9PfzSpGEKmH69OmSs7OzdO3aNSkuLk6Ki4uTHjx4\nIF26dEmaPHmy5OzsLC1YsEA+vlOnTpKrq6t0//59uSw7O1vq3Lmz9M4770hZWVlyeUpKitS1a1ep\nT58+Kue7uLhIV69elcuioqIkFxcX6eOPP5bLhg0bJnXq1Enebty4sTR37lyV2FesWCH17dtXSk5O\nliRJks6cOSM5OztLO3fulI9ZunSp5OzsLP32228q586ZM0dydnaWjh8/LkmSJK1evVpydnaW1q9f\nr3Lczp07JWdnZ+nMmTOSJEnS8ePHJWdnZ2ndunUqx02dOlV6/fXXpYSEBGn9+vWSi4uLFB4ernLM\n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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p0 = table1.biraben[1]\n", + "sys5 = System(t0=1, t_end=2015, p0 =p0,alpha=0.0011)\n", + "run_simulation(sys5, update_func1b)\n", + "newfig()\n", + "plot_prehistory(table1)\n", + "plot(sys5.results, label='model')\n", + "decorate(xlim=[0, 2000], xlabel='Year', \n", + " ylabel='World population (millions)',\n", + " title='Prehistorical population model')" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#not a good model at all, I just have no idea how to go about doing this exponentially" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Disfunctions" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13.8888888889\n" + ] + } + ], + "source": [ + "def carrying_capacity(system):\n", + " K = -system.alpha / system.beta\n", + " return K\n", + " \n", + "sys1 = System(alpha=0.025, beta=-0.0018)\n", + "pop = carrying_capacity(sys1)\n", + "print(pop)" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13.8888888889\n" + ] + } + ], + "source": [ + "def carrying_capacity():\n", + " K = -system.alpha / system.beta\n", + " return K\n", + " \n", + "system = System(alpha=0.025, beta=-0.0018)\n", + "pop = carrying_capacity()\n", + "print(pop)" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13.8888888889\n" + ] + } + ], + "source": [ + "def carrying_capacity(system):\n", + " system = System(alpha=0.025, beta=-0.0018)\n", + " K = -system.alpha / system.beta\n", + " return K\n", + " \n", + "sys1 = System(alpha=0.025, beta=-0.0018)\n", + "pop = carrying_capacity(sys1)\n", + "print(pop)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n" + ] + } + ], + "source": [ + "def carrying_capacity(system):\n", + " K = -system.alpha / system.beta\n", + " \n", + "sys1 = System(alpha=0.025, beta=-0.0018)\n", + "pop = carrying_capacity(sys1)\n", + "print(pop)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'K' 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 5\u001b[0m \u001b[0msys1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSystem\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0malpha\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.025\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbeta\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m0.0018\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mcarrying_capacity\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msys1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 7\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mK\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'K' is not defined" + ] + } + ], + "source": [ + "def carrying_capacity(system):\n", + " K = -system.alpha / system.beta\n", + " return K\n", + " \n", + "sys1 = System(alpha=0.025, beta=-0.0018)\n", + "carrying_capacity(sys1)\n", + "print(K)" + ] + }, + { + "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 +} From f5c47c40936a8c2442e6c37feea6f74ab8f17609 Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 26 Sep 2017 15:46:20 -0400 Subject: [PATCH 04/11] Chapter 4 Notebook and SimPy --- code/chap04mine.ipynb | 1083 +++++++++++++++++++++++++++++++ code/chap04sympymine.ipynb | 1243 ++++++++++++++++++++++++++++++++++++ 2 files changed, 2326 insertions(+) create mode 100644 code/chap04mine.ipynb create mode 100644 code/chap04sympymine.ipynb diff --git a/code/chap04mine.ipynb b/code/chap04mine.ipynb new file mode 100644 index 00000000..7edebb7a --- /dev/null +++ b/code/chap04mine.ipynb @@ -0,0 +1,1083 @@ +{ + "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 inline\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": {}, + "outputs": [ + { + "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\n7NnDkCFDMDQ0fLbKqxkDAwPUavUTl6nVagwMiv5XBQQEEBAQQFZWFiEhIezfv5/g4GD09PRYunRp\nsW3Y2NgAkJqa+tRawsPDCQ8P14T8f7t+/bqm/dEnhUcsLS3Jz88HYPr06cyaNYtff/2Vdu3a4e/v\nz8CBA7UKfoA333yTRYsWsW3bNnx9fenatSsDBgzQal0hKov03HQ2X9xc5DJP7N0cXJNfwCmvJZs3\nX+HjjztibFzxve7/do8//fQTixcvJi8vj27dutG3b1/q1q2LmZkZqampxMbGcuHCBb788ktWrlzJ\nG2+8wbBhw56606tXrxIdHV3uf8wDB7oxcKBbicuHDWvCsGFNSlw+cmRzRo5sXuLyiRNbM3Fi6+eq\n8RErKysyMjKeuCw1NRVra2vgYXfZI0eOaM7KzczM6NKlC126dMHe3p5vvvnmidto2bIlBgYGXLx4\nkdati9e8d+9eDh06xKJFizA0NKRTp05F7gE8Ymv7+OPok97sH4082LdvXzp27MjRo0c5deoUq1ev\nZu3atezevRt7e/ti6xUUFBT5efTo0fTv35/Dhw9z6tQpFixYwMaNG9m9e/czf9oUoiKFxYex5eIW\n0nIf3ytzsXJh5sj3WPPFTRQDGDLEHSOjJ8+xW95KDP8pU6bw4MEDPv74Y/z9/Uv8gxs7dix5eXkc\nOHCATZs28euvv/LVV1/97U7Pnz+Pg4MDbm4lB3NN06JFC0JDQ4u1R0REkJWVRatWrYCHvX02btzI\niy++SIsWLYq81tLSssRr/rVq1aJXr15s2bKFoUOHYm5urlmWm5vLV199ha2tLcbGxjRu3Ji9e/fi\n7Oys+WR2584d5s2bx8yZM594Wem/FRQUsHjxYgICAhg4cCADBw4kKSmJjh07cvbsWfr374+hoWGR\nN7vo6GjN98nJyaxcuZJJkyYxbNgwhg0bxqVLlxg2bBgRERFPfPMSorLIL8znx/AfOXzzsOaBLRUq\nejbqyeBmgzHQM2DqVCscHMywsXm+IRqeR4mfwfv168eOHTvo2bPnU8+0jIyMCAgI4KeffqJ///5P\n3Wl4eDgeHh6lr7YaGzVqFH/99Rdz584lIiKC27dv8/vvv/OPf/yDbt260axZM+DhdfZ27doxZcoU\nduzYQXR0NJGRkXz//fesXbv2b3tOzZ49G0VRCAoK4o8//uDOnTucPn2aiRMnEhcXx9y5cwEYOXIk\naWlpzJ49m8jISC5fvszbb7/NrVu3il3qeRIDAwOuXLnC3Llz+fPPP7lz5w4//PADhoaGmjestm3b\nsn37diIiIrhy5Qoffvih5vesVq1aHDt2TPNvER0dzU8//YSVlRUNGzZ8zn9pIcqPoigsOb2EwzcP\nk5mVT2hoPJkP9HmjwxsMazEMA72H59seHrY6DX74m/AfNGhQqTemUqkYPHjwU18XHx9PrVq1Sr39\n6qxx48Z8++23xMbGMmbMGAYMGMCiRYvo3bs3y5cv17xOT0+PdevWMXz4cDZv3kxAQACvvPIKu3bt\nYv78+X/77+/k5MQPP/yAj48P8+fPZ8CAAcyePZs6deqwY8cOGjVqBICDgwObNm0iMTGR4cOHM3Hi\nROrUqcOmTZu0vuSyePFiXFxcmDJlCv379+f3339n1apV1K//sPvaRx99hKWlJcOGDeONN95g+PDh\nODk5aY5x7dq1wMM3xYCAAK5du8aGDRue+qlDCF1SqVT41/cnOSWH0NB4jJNdqBU6AGfDyneVQ6WU\nYtbfyMhIsrOzn3hj0svLq0wL+28xMTH06NGDQ4cO4eLiUm77EUKI56UoChtDNnN4VwZmCR4YGugz\ncWIrPD0dK7SOp+WmVreYw8LCePPNN7l3716xZYqioFKpijzAI4QQNcGluEtYm1hTr1Y9TZtKpWKC\nzzj8ayXz449RjBnTgjp1ym5MnrKiVfj/61//Qk9PjwULFuDk5KR1dz0hhKiO8grz2HFlB8eij1HL\nwI6Xa0+jvXfRSdTd3W2YNat9hfXbLy2twv/KlSt8+eWX9OzZs7zrEUKISi06JZoNoRuIy4gjITGL\n/1y9x6Wc9ax3fAcXl6L3pCpr8IOWwzvY2tqir6+bvqhCCFEZqBU1+6/uZ+GJhcRlxKGgEBOTTq3s\nRjhnebN5cxiluIWqc1qF/4gRI1i3bh3Z2dnlXY8QQlQ6SVlJfPmfL9kVsQu18rDDi4mBCXMGvkbr\n/BdxtLFm+PAmlfpM/39pddnn7t27XLt2jc6dO+Ph4VFsIDaVSsWGDRvKpUAhhNAVRVE4e/cs2y5v\nI7sgGxUPw72RTSPGe47HwdwB9xlJNGhghalp1RqqRqvwv3nzJk2bNtX8/Gj8FiGEqK4URWHzxc2c\njjlNekYekZEPcG9sy8j2Q+nv3h891cMLJ82aPfmp+spOq/AvabwYIYSorlQqFU4WTiQkZhER8QCT\nwlpYX+lD9yF9NMFflZVqKLlr165x9uxZMjIysLGxwdvbW/NUqBBCVDd9Gvfh/O2LZEWkUTe9E0bG\npty5k06TJuU/3n550yr81Wo1c+fO5ccffyxyN1ulUvHSSy+xYMGCKnWjozLq3r07L7/8MtOnT//b\nZY+e2uvfvz9Lliwp9tomTZrw2Wef8dJLLxVb9mjd/2ZiYkKDBg0YPnw4gYGBmv/Hn376iffee6/E\nepctW0bfvn2Bh8M8L1++nDNnzpCRkUGdOnXo1asX06dPLzZrGDwcNPDIkSNs3769xMllhKhod1Lv\nYGpoir3Z41Fn9VR6zO76DpdtHvDbb7cYP74VDg5mOqyy7GgV/uvWrWPXrl3MnDmTgQMHYm9vT0JC\nAnv37mX58uW4ubnJBOwV7JdffmHAgAHP9OzF6tWrad26NYqikJ6ezuHDh1m4cCExMTFFJnDR19fn\n6NGjT9zGo7GZEhISCAwMpGfPnmzatAlLS0siIyNZsGABYWFhfP3110XWS0hI4MSJEzRo0IAffvhB\nwl/onFpRc/DaQfZE7sHJxIVhdSfTvJmDZrmhviFeXo54etauVie5WoX/zp07mTp1KhMnTtS0OTk5\nMWnSJHJzc9m5c6eEfwVzdXXlo48+ol27dqUeJK9WrVo4ODz85a5duzZubm4YGBiwaNEihg4dSuPG\njTWvffS6khw4cAB4+BT4Iy4uLpibmzNmzBgiIiKKdBbYs2cPtWvXJigoiCVLlvD+++8/8dOBEBUh\nITOBjaEbuZ58nYT4bE5cP83FfEM2vv9GsVE3q1Pwg5b9/BMSEvD29n7iMi8vL+7fr5j5a8Vj7777\nLvn5+SxYsKBMtjds2DCMjIzYv39/qdbT09MjPT2dkJCQIu3t2rXj559/LjYE865du/D19aVXr15k\nZ2ezZ8+e565diNJSFIXj0cf59Nin3Ei+gaKGW9GpmOXWxjKjAd9885euSyx3Wp35u7q6Ehoaip+f\nX7FloaGhTz071JW9kXv5OepnrV7bpX4XRrYeWaRt66WtHI8+rtX6L3q8yMAmA0td47Oys7Pjvffe\nY9asWfTv3x9/f//n2p65uTkuLi5ERUWVar0BAwawYcMGAgMDadGiBR06dKBDhw74+vri7u5e5LWX\nL18mKiqKmTNnUqdOHdq2bcuOHTsIDAx8rtqFKI2UnBS++fObIlMrGujrM737SM5/Xwt7OzP69av+\n80ZoFf4vv/wyX375JWZmZvTv3x97e3sSExPZt28fa9euZcqUKeVdp3iCQYMGsX//fubOncvPP//8\n3JdP/ncqycLCwifO42tjY8Mff/wBgLW1NT/++CMbN27k119/ZePGjWzcuBELCwveeecdRowYoVkv\nODgYKysrOnbsCDx845g3bx6XLl2S2blEhTh39xzbLm8jMz9T88BWHcs6jGs7jvrW9fGpFUfz5nY6\nmVO3oml1hKNGjSI8PJyFCxeyaNEiTbuiKAQEBDBt2rRyK7CmKO0E7o98/PHHDBgwgM8++4xPPvnk\nuWrIyMgo8ilOX1+fXbt2FXvd/47qamNjw8yZM5k5cyb37t3j1KlTbNu2jY8++ghnZ2deeOEF8vLy\n2LdvHz169NBMCNO3b1/mz5/PDz/8IOEvypWiKGwI3cC5u+dITsnh2tUUWrSwJ6BlXwY1HYSh/sOn\ncyt6zH1d0ir89fX1WbRoERMnTuTcuXOkpaVhZWVFu3btin20r0wGNhn4XJdiRrYeWexSUHnRdgL3\n/+Xk5MSsWbOYO3euVlNoliQ7O5ubN28yYMCAIu2PZt4qybp166hfvz59+vQBwNnZmZdffpmAgAD6\n9u3L0aNHeeGFF/jjjz9ISUlh9+7dRa7zq9VqfvnlF9577z258SvKjUqlwsLIgrt307l+IxUTtSV2\nUb0ZPHQoBvpV/4GtZ1Gqzzbu7u6VOuyrMm0ncH+S4cOH88svvzBnzpxn3v+OHTtQq9WlfgO5dOkS\n+/fvp2fPnkVGfjUyMsLU1FQzoXxwcDCOjo6sX7++yPohISF89NFH7N27t8glIiHK2pBmQzh78yI5\nVxXqZ3RBXzEnPj4LZ+eaedJRYvj36dOHZcuW0bRpU3r37v3Ubk4HDx4s8+JqklGjRjF48GDmzp1L\nYGAgZmZmREVFsXjx4iITuJdk3rx5DByo3aec1NRUEhISUBSFtLQ0jh07xtKlS5k8eTL16tUr8tqE\nhIQnbsPU1BQLCwtmzJhBYGAgkydPZuLEidSrV4/79+8THBxMamoqr7zyiqZv/4wZM/Dw8CiyHTc3\nN7766it27Ngh4S/KTGRiJM6WzlgaPx5f30jfiPn9PuKEaRzXriUTFNQcS0vt5qSujkoMfy8vL8zN\nzTXfV7c+rpXNowncV65cyZgxY8jKysLJyYn+/fszY8aMp67v4uLCzJkz+fTTT5/62v9+itja2ho3\nNzc+/fTTYk8FFxYW0rlz5yduIygoiLlz59KsWTN++OEH/v3vf/Puu++SkpKClZUVnTp14vvvv8fe\n3p4NGzagUqkYPnx4se3o6+szevRoFixYwOXLl//2E44QT5NbkEtwRDCHbx7G1aApw93G4OHxeCgG\nEwMTevSoR48e9Wp8ppVqAnddkQnchRBPc/3BdTZf3ExsehzR0WnExKTT3iCANXMnYGJS/Xvv/K9n\nnsA9Li6uVDtydKw5d8mFEJVHfmE+uyN38/uN31EUhcJCNbGxmdjkN0CVVpvg4KuMGPH3l01rohLD\n/4UXXijVx6Lw8PAyKUgIIbR1K+UWm0I3EZsRq2mzNDXnza6TOfOjEc2b2dOnTwPdFViJlRj+8+fP\nr/HXxIQQlVOBuoC9kXs5eP0gBQWF6P//7prNHZozus1obExt8K2bSPPmdpJjJSgx/IcMGVKRdQgh\nhFay8rP4/OTnxKTd5fbtNO7fy8SvvStBnq/SpV4XTdi3aGH/lC3VbCWG/5o1a7TeiEqlkiEehBAV\nwtTAFCcLJ34/e5nExGysC1yof2soXV7qImf5pVBi+C9dulTrjUj4CyEqikqlIrBVIKE3I7kX44xT\nbiuMCqzIySmocpOo61KJ4R8REVGRdQghRDEF6gIO3zyMf31/jA2MNe2WxpasHPoZPxvexMrKmG7d\nXOWsv5RqXudXIUSVcCf1DpsvbuZO6h0OnQrntW7jcHF5/MSugZ4BgwbJcDPPSoZ3EEJUKgXqAvZf\n3c8vV38hIyuXiIgHZGQcpOCWC4veH6Tp2SOejwzvIISoNB6d7cekxQCgAnKzFNyy/UlLNefkybv4\n+7vqtshqosTw/+/pARcuXFimO92xYwfr16/n/v37NG7cmHffffeJs4QJIWqGAnUBB64dYF/UPtTK\n43ktWtZtykCL7hzZl8JLQxvTubMM71JWtL7mr1arOXz4MCEhIWRkZGBnZ0f79u1LHdrBwcF8/PHH\nmsnHt23bxvTp09m7d6+M2yNEDRSTFsOm0E3cSbtDTk4hpiYGGOobMqjpILo37A6Kihd8sqhd21zX\npVYrWoV/YmIiEydOJCIiAiMjI2xtbUlKSmLNmjX4+fmxcuVKzMzMnrodRVFYsWIFkyZN4uWXXwZg\n1qxZnD59mtDQUAl/IWqYG8k3+Pzk52Rk5RIVmUxuXiHDevgx0Wc8jhb/f7wwFRL85UCrOycLFy4k\nISGBr776ikuXLnHkyBEuX77MihUruHLlSpGpHf/OjRs3uHv3bpEJQ/T09Ni9e7fWY9ELIaqPBtYN\nqF+rAZcvJ5KRXkjdlI643H7xcfCLcqNV+B8+fJh3332XLl26FGnv2bMnM2fOZP/+/Vrt7NatWwCk\npaUxevRo/Pz8CAoK4sKFC6WrWghRLeip9BjnOZburbzxSg+ifqE3tR3MqQIjzVd5WoW/kZERlpaW\nT1zm7Oys9c4ezVE7e/Zshg0bxvr163F3d2fMmDFcv35d6+0IIaqemLQYvvnzmyI3dAEcLRz5cviH\nDOvnzQcf+NKvXyPpXVgBtLrmP2LECJYtW0abNm2wt388WFJWVhbr1q1j2LBhWu3M0PDho9dTp07V\nXOZp3rw5ISEhfPfdd881B60QonIqVBc+7MlzdR8ZWbmc+SOdT8eOx8bGpMjrAgIa66jCmqnE8B8/\nfrzme0VRuH79Oj179sTLyws7OzvS0tK4cOECBQUF1K5dW6udPXrdf8/jqlKpaNSoETExMc96DEKI\nSupu2l02X9zM7dTbJCRkERWVjKrwdzZ+7cnbb/jKGb4OlRj++fn5RX728vLStMfGPpw4oWnTpgDE\nx8drtbMWLVpgZmZWZK7WR28s0s9fiOpDrag5eO0ge6P2UqguBMDIWB+LfCfcs3pxLSKD27fTqF+/\nlo4rrblKDP9vvvmmzHdmamrKmDFjWLp0Kfb29nh4eLBt2zZu377N8uXLy3x/QoiKF5cRx6aLm7iZ\nfFPTZqBnwHjfoSQbuhL+1wPGjWspwa9jJYZ/SEgI3t7epd7g+fPn8fHxKXH5m2++iampKfPnzycp\nKYlmzZqxceNGGjVqVOp9CSEqD0VR+OPmHwRHBJOZnUOhWo2piSENrBswtu1Y6ljWIb9eIQwGQ0N9\nXZdb45UY/h9//DFubm5MmzatyDX6kly6dImvvvqKW7dusXfv3hJf92jsfxn/X4jq5fCtw2y/sp2E\nxCyuXU3B1MSQ/xs+gf5N+qGnetixUEK/8igx/H/88UdWrlzJ0KFDadCgAb1796Z169a4uLhgampK\nWloacXFxhISEcOzYMW7evMnIkSNZvHhxRdYvhKgkOtfrzP6I3zgReRezfDsaJ/emMLIJek1lFM7K\nqMTwNzQ05B//+AeBgYFs3ryZ7du3s2rVqiJ35xVFwdnZmT59+rB27VocHeWpPCFqKiN9I6b5TsIy\n7RB3/nDB3tacJk1sdF2WKMFT+/k7Ojoya9YsZs2axfXr14mJiSE9PR0bGxucnZ1p2LBhRdQphKhE\nLsVd4kr8FV5t+WqRE8JGNo34v+EN+dX6Fv7+LjKtYiVWqpm83NzccHNzK69ahBCVXG5BLjv/2smx\n6GNkZuZz4VABn04dgYnJ4yhRqVT06SMnhZWdTOMohNBKdEo0G0I3EJcRx737Gdy4kUp4wa80/74N\n48a21nV5opQk/IUQf+vRA1t7IvdoxuUxNNDDNtcN9+wehJyPJ2BgNnZ2pjquVJSGhL8QokQPsh+w\nMXQjV5OuatqMDYx5t9dYrqjNiY/PYsKEVhL8VZCEvxDiic7fO8/WS1tJz8lEUSsYGurTyKYR4z3H\n42DugNeoAgwM9GRC9SpKwl8IUczhm4f5Pux7UtNyiYx8gLmZEbMGj2GAxwDNA1vGxhIfVZlW/3u5\nubmsXbuWI0eOkJWV9cSJFg4ePFjmxQkhdMPb2Zudl3Zx6VIMxoWWuCb2w/J+G/SayFl+daFV+P/r\nX/9ix44dtG/fHnd3d/T05BdAiOrMytiKaX6TUMftJi+kNVZmFlhZGeu6LFGGtAr/gwcP8o9//IPJ\nkyeXdz1CiAqWnptORGIE7eq2K9LesnZLlo9rxg6LKPr1a1hs8hVRtWkV/nl5ebRuLf14hahuIhMj\n2RC6gaSMZM7kPGDa8F5FbuAaGuoTGNhMhxWK8qJV+Hfu3Jljx47h6+tb3vUIISqAWlHzc9TP/HL1\nFx4kZxMZmUxIzgaczeox5CUJ+5pAq/APCAhgzpw5JCcn4+XlhYlJ8Y9/j+bkFUJUbqk5qay/sJ6o\npCgAMjLyUXIN8cjuyW8HYvDvVB97ezMdVynKm1bh//rrrwMQHBxMcHBwseUqlUrCX4gqIDwhnA2h\nG0jPTde09WzjQ3aWJ8n3VYwd20KCv4bQKvwPHTpU3nUIIcqRWlGzL2of+67uQ62oUaFCpVLxoseL\n9HfvT1rzPPT0VNKjpwbRKvzr1q2r+T4rK4vMzEysra0xNJThWoWo7NJy09hwYQNX4sO5fj0FPT3w\nal6fCV4TaGrfFABra+nJU9No/YjemTNn+OKLL7hy5YrmIa/WrVvz1ltv4efnV24FCiGeT1puGhHx\nUYSGxpGVVYB1gQsD/abQ1L6xrksTOqTV01rnzp1jwoQJ5OTk8MYbb/DJJ5/w2muvkZWVxaRJkzh/\n/nx51ymEeEYuVi6MahuEuZkR9XM60CpzMHeu5em6LKFjWp35L1u2DD8/P9atW1dk1p7p06czefJk\nVqxYwZbif/BpAAAgAElEQVQtW8qtSCGE9hRFKfJ3CtC5fmc2jXVl67/v0rNnfTp2dNZRdaKy0OrM\nPywsjKCgoGK/UCqViqCgIC5fvlwuxQkhSud++n0WnFhA6NVrxcbgcqtdn//7Pz86dapb7G9Z1Dxa\nhb+VlRVZWVlPXJaZmYm+vn6ZFiWEKL3Q+6HMPz6fY39eYtLaj/nj2I1ir9HTk9AXD2kV/r6+vqxY\nsYK4uLgi7XFxcaxYsUJu+AqhQ2pFza6IXaw5v4br0UlE304nR5XGph9PcP9+hq7LE5WUVtf8Z86c\nydChQ+nTpw/e3t7Y29uTmJhISEgIFhYWvPvuu+VdpxDiCTLzMtkQuoEr8VcAcHY2JyPeENfY3ni5\nN8HUVMbcF0+m1W+Go6MjwcHBbNy4kZCQEGJiYrCysiIwMJBx48bh4OBQ3nUKIf7H3bS7rD63msSs\nRE1ba6dWvD/hVSIuZdC3b0O5zCNKpPVpgYODA7NmzSrPWoQQWgq5F8L68xtJSE7Hzvbh/Ln93PsR\n0CQAPZUejVxq67hCUdmVGP5r1qxhyJAh1K5dmzVr1vztRlQqFVOmTCnz4oQQRSmKwu7I3WwP3U14\neBK5uYW083ThrRem4lnHU9fliSqkxPBfunQpHTt2pHbt2ixduvRvNyLhL0TFUKlUFKoLuXEjlZyc\nQkzV1lhc7EOLITLfhiidEsM/IiLiid8LIXRrcLPBRMXe4teDt2iW348Jgd4YGUl3a1E6WnX1XLly\nZbFuno/cvXuXefPmlWlRQojH/vdhLT2VHm/7v8bqcR/y0Qcv4OXlqKPKRFWmVfivWrWqxPC/ePEi\nP/zwQ5kWJYR4GPq/XP2Ff+5YwF/hCUWWGRsY06ypPbVrm+uoOlHVlXjZZ8SIEVy8eBF4+Ev4yiuv\nlLiRVq1aab3Da9euMWDAgGLt3377LT4+PlpvR4jqLLcgl40XNrHj5B/cv59J1IVCtsx+V4ZeFmWm\nxPCfN28ev/76K4qisHz5coYPH46Tk1OR1+jr62NpaUnPnj213mFUVBQ2Njbs3bu3SLu1tXUpSxei\nekrKSmL1udXcSIomKSkbgPi8GH4KjmT8uDY6rk5UFyWGv5ubG9OmTQNArVYzbNgwHB2f/9piVFQU\njRs3lgfDhHiCiMQI1oWsIzMvEyNDfZo1tSPxvDPDmg8jcEQLXZcnqhGtHvJ67bXXAEhOTiY/P19z\nA0pRFLKysggJCWHYsGFa7fDq1as0atToGcsVonpSFIU/bv7Bzr92olbUAOjr6TOjywTq+7fB1dVS\nRuIUZUqr8I+MjOSdd97h2rVrT1yuUqlKFf65ubkMHz6cu3fv4u7uzttvv03r1tJPWdRM+YX5rD29\nie+OH8TNzRpTEwNqmdRiqs9UGtnIiZIoH1qF/2effUZKSgqzZs3i8OHDGBkZ0a1bN44dO8axY8f4\n+uuvtdpZTk4Od+7cwdbWln/+858YGRmxdetWRo4cSXBwMG5ubs91MEJUNSk5KXz8yxccOv8n+QVq\n8vKSGPRCe2Z0mI61idwHE+VHq66eFy9e5M0332Ts2LH079+f7OxsAgMDWbNmDT179uSbb77Ramcm\nJiacO3eOr7/+Gh8fH1q3bs3ChQtxdXVl27Ztz3UgQlRFJgYmKPoFFKofXkq1TPZgoN14CX5R7rQK\n/7y8PBo0aABAgwYNijzxO2TIEE2XUG1YWFhgZGT0uAA9PRo3bsz9+/e13oYQ1YWJgQmze7xFs8ZO\ntNXvxdrps2nd0unpKwrxnLQKf2dnZ2JiYoCH4Z+RkcHdu3cBMDY2JjU1VaudhYWF4eXlRVhYmKat\nsLCQiIgI3N3dS1u7EFVOfmE+OTkFRdqcLJz4ZswKNvzfDNzdbXVUmahptAr/nj178sUXX/Dbb7/h\n6OhIo0aNWLZsGdevX2fz5s24urpqtbOmTZtSt25d5s6dy59//snVq1d57733SE5OZvTo0c91IEJU\ndjcSoxm+6g2mz99Q7A3A1NAUMzNDHVUmaiKtwv+1116jbdu2bN++HYD33nuPgwcP8uKLL3Ly5Ele\nf/11rXZmYGDA+vXradiwIVOnTmXYsGEkJiaydetW7Ozsnv0ohKjkTt4+SdC/3yEi5jZncvax6pvD\nui5J1HBa9fYxNTVl5cqV5OXlAdClSxf27t3LlStXaNGiBfXq1dN6h46OjixevPjZqhWiiskvzOe7\nsO84efskTnVNSInIQqXokZqfQkGBGgMDrc6/hChzpZrg879v1NarV69UoS9ETROfGc/a82uJSXt4\nv6y2gxmqDCvGtprAwK6e8tCW0KkSw793796l+uU8ePBgmRQkRHWw9Y8DHE/bA/qFmrYOLh0I6heE\nsYGxDisT4qESw9/Ly0vOTIQopZT0TN7ZvIyTd05ia2tCixZ2GOoZ8mrLV+lcr7P8TYlKo8TwX7hw\nYUXWIUS18PmR5Zy8cxKABw9yyEs2Y85Lb1OvllwiFZWLVtf8L1y48NTXeHl5PXcxQlR1YzoO5ezN\nP4mJScfXtR2LB83E1spS12UJUYxW4R8YGPjUj6vh4eFlUpAQVYmiKEX+NjzsPHiz9yiS7qsZ3fVF\nucwjKi2twv9JA7dlZWVx/vx5du/ezYoVK8q8MCEqM0VR2LrvOJf+imXhzJfR13/cZfPFpgOgqQ6L\nE0ILWoV/+/btn9jetWtXzMzM+Pe//83atWvLtDAhKqtCdSGvLVvJ0fu/YaAY47nbncAhnrouS4hS\nee4nTHx8fDh79mxZ1CJEpZeUlcSS00uINjmDgkK+KoftV76noECt69KEKJVSPeT1JIcPH8bc3Lws\nahGi0lIUhbN3z7Lt8jZyCnJwcbEgOTkHdzt3vgh8V57UFVWOVuE/fvz4Ym2FhYXExsZy+/ZtJk2a\nVOaFCVFZ/HX1HkeT93Ix7nGvN32VPu8NGceLTQagp5LgF1WPVuGfn59frE2lUuHm5sbEiRMZOnRo\nmRcmhK6p1QrrfjzE2rPrsXFW497YBgAHcwfGe46XKRZFlaZV+Gs7U5cQ1cmqX7fx73PbUFRw/z7Y\n2poQ0LYnw1sMx8TARNflCfFcSnXN/+jRo4SEhJCamoq9vT2+vr60a9euvGoTQqf8WjVhx2VTEhKy\ncahVixkdptGtqZ+uyxKiTGgV/snJyUyaNImwsDCMjIywtbUlKSmJ1atX06lTJ1atWoWxsQxWJaoX\nn7o+jPDvQ1jkXT59+U1szWx0XZIQZUarO1Xz5s0jJiaGNWvWcOnSJY4cOcLly5dZuXIlYWFhfPHF\nF+VdpxDl6kRoBJ9/dRBFUYq0T/QZy8pRH0rwi2pHq/A/duwYs2bNomvXrkXae/TowcyZM9m3b195\n1CZEuVOr1by3dhNTvvsn2yI3c/j4jSLLDfUNZYgGUS1pFf76+vpYWj55cCoHB4cn9gYSorJLykpi\n6ZmlhOQdRE0hOXppLP/ta9Rq5ekrC1HFaT2w25IlS2jVqhWOjo6a9oyMDNatW8fIkSPLrUAhypqi\nKJy4fYKdf+0kpyCH+vWsSEzIxsW6LvNfGYWenpzpi+pPq/CPj48nPj6eXr164e3tTe3atUlJSeHC\nhQtkZmZiZGSkeRBMpVKxYcOGci1aiGehKAq/Hr9CmMFvRCVFaNr19fWYNXQUQ1sNwkDvuR96F6JK\n0Oo3PTo6mqZNHw5TWFBQwL179wA0bYWFhRQWFpa4vhC6FheXwcdbvuVYwn7q1jehQf1aADhaODKu\n7Tga2jTUcYVCVCx5yEtUe4qisOD3pRxO/A+o4M6dfGo7mDOoVX8CmgRgqG+o6xKFqHCl+ox77do1\nzp49S0ZGBjY2Nnh7e9OokTziLio3lUrFQD8/Tt8KIS0tj1YNGzKn25s0qe2u69KE0Bmtwl+tVjN3\n7lx+/PHHIv2gVSoVL730EgsWLJDucKLSyMkpoLBQjbm5kaate8Pu9G9/DkdjF8Z3ekXO9kWNp1X4\nr1u3jl27djFz5kwGDhyIvb09CQkJ7N27l+XLl+Pm5iYje4pKIfRiLAu2b6VDQ09mTuqhaVepVMzp\n+U8ZgVOI/0+r8N+5cydTp05l4sSJmjYnJycmTZpEbm4uO3fulPAXOnc2PILXvllEun48tyL+ou9f\nrWnR3EGzXIJfiMe0+mtISEjA29v7icu8vLy4f/9+mRYlRGkUqAvYG7mXzTeWY+qUDkCuSQLnYs/o\nuDIhKi+tzvxdXV0JDQ3Fz6/4iIahoaE4ODg8YS0hypdarXA7LZotF7dwL/1h9+NGbtYYGxoxrcer\nBLTop+MKhai8tAr/l19+mS+//BIzMzP69++Pvb09iYmJ7Nu3j7Vr1zJlypTyrlMIjdzcAnbtjWT/\n9X0Yt7gO/zUaQ9Pa7izoPQYnCyfdFShEFaBV+I8aNYrw8HAWLlzIokWLNO2KohAQEMC0adPKrUAh\n/ltBgZq35/3I6ew9ZOml4HHfBicnc4z0jRjUdBDdGnaTa/tCaEGr8NfX12fRokVMnDiR8+fPk5qa\nipWVFe3atcPdXfpKi4qTnp/KDcc9ZN1OAeBBcg5dW3ozqs0o7M3sdVydEFVHqU6R6tSpg6urK/Xq\n1aNRo0a4uro+184vXrxI8+bNOXNGbswJ7diY2jDuhcFYWhrRqlkd/jX8Dd7yfUuCX4hS0vohr88/\n/5ytW7dSUFCgedDL1NSUadOmMXny5FLvOCsri3/+858yJpAo0b17Gezff4PRo1tgaKivaR/c/CXy\nlBwGuA/AxlQmWRHiWWgV/itWrODrr79m9OjR9OnTBzs7OxITEzlw4ADLly/H3NycoKCgUu144cKF\nODo6Eh0d/UyFi+rtwIGbbNn3B9eMjmOy5w2ChnpplhnqGzKytQwjLsTz0Pohr+nTpzNjxgxNm6ur\nK56enpibm7Nly5ZShf/Ro0c5cuQIX331FQEBAaWvWlRrOQU5nEjby0XTgwCsO72Zl/q0wMJC5okW\noqxodc0/IyOD1q1bP3GZt7c38fHxWu/wwYMHfPDBB8ybN49atWppvZ6oGcITwvn4yMfEm4ZRq5Yx\nVlZGNPFVk6uXoevShKhWtDrz79q1K99//z1dunQptmzfvn34+/trvcMPP/yQ7t274+/vT2xsrPaV\nimorMvIB9k4G7I/ew/Ho4wCoUNG8uS3tXLwJah2ElbGVjqsUonrRKvx9fHxYunQpAwcOZMCAATg4\nOJCSksKRI0cICQlh7NixrFmzBng4gFZJD30FBwfz119/sWfPnrI7AlFl5eQUsHNnFHv+c4pMt9O4\nuD++qWtuZM4IrxH4OPvIiLFClAOV8t9jNJfg0YxdWm1QpSI8PPyJy0aNGkVoaCiGhg+H01UUhezs\nbIyNjRk0aBCffPLJE9eLiYmhR48eHDp0CBcXF61rEZVbyJ93eHfTSu4bhQHQsqUdtjameNbxJLBV\noJztC/EcnpabWp35R0REPP1FWvjiiy/IycnR/JyQkEBQUBDz5s2jU6dOZbIPUXUYOiWjdrkB8WBv\nb4qjjQ1jvUfhXcdbzvaFKGcVOlu1o6NjkZ+NjY017XZ2dhVZitCBggI1BgaP+xi0dmzNsE49OBRx\nkl4tO8q1fSEqUIWGv6iZsrLy2bEjkrikVN79R8ciZ/VjvUfRob6PnO0LUcF0Gv5OTk5ERkbqsgRR\nzvLyCvnw0yOEZP9OskE0bQ870Lu7h2a5uZE5Ps4+OqxQiJpJhj8U5ep6ahQ3XHdy3yiMHL10giN2\n6bokIQRy2UeUk5yCHHb+tZPj0cexratgnWKMs7MFbVpaoVbUMuyyEDpWYvjHxcWVakP/ezNX1Dy5\nuQX8/ns0Ll5ZfHflW5KzkwHQ01Ph61WfwFaB0m9fiEqixPB/4YUXSvVHWlLfflEzXLuWzLpN5zmX\n+StGN+7QoMHjoTuk374QlU+J4T9//nxN+KempvLFF1/g5+dHv379NE/4/vHHHxw5coTZs2dXWMGi\ncjoRFcKvuV+Ra5SJ6g7Urm1GbWsbRrQaIT15hKiESgz/IUOGaL6fMWMGgwYNYt68eUVeM3DgQObN\nm8f+/ft55ZVXyq9KUenVb6aPaWgBhZkq3Nys6dLYlxEtR2BpbKnr0oQQT6DVDd+TJ0+yatWqJy7r\n1q0bO3bsKNOiROWWm1tAYaGCmZmhpq1rg670bX+ahOw4xrcbjVcdr7/ZghBC17QKfxsbGy5duvTE\nIRjOnj0rN3trkPDwJNZ/cx7Xhsa8Namrpl2lUvF65ykY6RthYWShuwKFEFrRKvyHDRvGqlWryMnJ\noUePHtjY2JCUlMSBAwf45ptveP/998u7TlEJxMSk8f6qb7luehTjCEu6/tmMtm0ev/HbmtrqsDoh\nRGloFf7Tpk0jPT2dDRs2sG7dOk27sbExb775ZqmncBRVT3J2MrvufUtyw+Pkx+WAcR4n7v9B2zYj\ndF2aEOIZaBX+KpWKWbNmMX36dEJDQ0lLS8PGxgZPT0/MzMzKu0ahQ4qicOL2CXb+tZOcghwaNaqF\nSqXCs2l9unu30XV5QohnVKonfC0tLUs1a5eomhRF4dSpexy/EIGh90WikqI0ywwN9JncazCDmw3G\nxMBEh1UKIZ5HieHfu3fvUvXNPnjwYJkUJHRLURSWLjvHbzd+J9rkNG7GltSp8/AGbm3z2oxuMxp3\nO3cdVymEeF4lhr+Xl5c8mFMDKSiEmm3npsnDJ7bvx2bi7GxJb7feDPQYiKG+4VO2IISoCkoM/4UL\nF2q+37dvH35+ftjaSm+O6k5PpUdAx45cuXcVO1tTOrZsznjvsdSrVU/XpQkhypBWQyvOmTOHc+fO\nlXctooKlpOSwbVs4ubkFRdpfajaQgBe8eWfAeOZ2myPBL0Q1pNUNX0dHR7Kzs8u7FlGBjh+P4Zud\n54nUO0q+wauMGd5Bs8xQ35D/6zpHhl0WohrTKvxHjBjB/Pnz+fPPP2natOkTu3cOHDiwzIsT5aNQ\nXciFlBOcMvqeQlU+G85sJaBXa2xsTDWvkeAXonrTKvwXLFgAwHfffffE5SqVSsK/iohKiuK7y99x\nl7tYWOuRn2+Ac+N00lTx2FBf1+UJISqIVuF/6NCh8q5DlBNFUThz5j51Gurx+919nL17FgAVKpo1\ns8XVui6j2oykvrUEvxA1iVbhX7duXc33WVlZZGZmYm1tjaGhdPurzO7dy+DrrZc4HnOUnHqXadzk\n8fDKxgbGDGk2gB6NemCgJ7N5ClHTaP1Xf+bMGb744guuXLmCoigAtG7dmrfeegs/P79yK1A8u8v3\n/mJ7/CqyTVIgHuwcDbGxNsHH2YeXm7+MjamNrksUQuiIVuF/7tw5JkyYQMOGDXnjjTews7MjPj6e\nAwcOMGnSJDZv3oyPj0951ypKqVFDG6yc8shJABcXSzzq1Gdk20Ca2jfVdWlCCB3TKvyXLVuGn58f\n69atK/LU7/Tp05k8eTIrVqxgy5Yt5VakeLrExCwKCxUcHc01be527gzx60ZY7F+84jmYrg26oq+n\nr8MqhRCVhVbhHxYWxtKlS4sN96BSqQgKCuLtt98ul+LE0xUWqvnl1yjW/LaD+g5OrJo9scj/0xjv\nIPT19GWCFSFEEVqFv5WVFVlZWU9clpmZib6+nE3qglpRs/fSb3x0eD25BlnEPDDl9yNd6dXt8cBr\ntUxq6bBCIURlpVX4+/r6smLFCry9vYtM2RgXF8eKFSvkhm8FUxSFkPsh7IncQ1xGHE71DYiOBiOL\nAhJMwgEZdVMI8fe0Cv+ZM2cydOhQ+vTpg7e3N/b29iQmJhISEoKFhQXvvvtuedcpALVazalrFzgS\ne4A7qXc07a4ultiZ2TC9x0j8XH11WKEQoqrQemyf4OBgNm7cSEhICDExMVhZWREYGMi4ceNwcHAo\n7zprvMOXLvD53k3cz43G29sRfb2Hwy+YGZrRp3EfejTsIcMtCyG0VmL4nz17Fk9PT82DXA4ODsya\nNavCChOPnYk5w8yd88nOeTj65u3b6Xi42dOjYQ/6NO6DmaFMpSmEKJ0Sw3/06NGYmprSrl07OnXq\nRMeOHXF3l2vJutDWqS1NGtbhYvgd9FV6tKnly5zu4+RmrhDimZUY/itXriQkJISQkBA+//xzCgsL\nsbe3p2PHjpqvZ7ncExsby/z58zl9+jRqtZouXbowe/bsIjeSa6qUlBz2Hj9PRrLCtNFdNO3GBsaM\n6zKU4NzzvN43kOYNZBweIcTzUSmPxmr4G9nZ2Vy8eJGQkBDOnTvHpUuXyMnJoXHjxppPBdpM7K4o\nCi+99BK2trbMnj0bgHnz5pGVlcVPP/1U4noxMTH06NGDQ4cO4eLiUorDqzr+uhfFlMXLSdS/iUNB\nY/bMXYS1tUyQLoR4Nk/LTa1u+JqamuLn56fp0llQUMC5c+f44Ycf2Lp1K1u2bCE8PPyp20lMTMTN\nzY2ZM2dqihk7diwzZswgNTWVWrVqxmUMtVpBURT09fW4mXyTn6N+Jiw+jAK7BEiBBINr7DseStBA\n6UIrhCgfWg/slpuby5kzZ/jPf/7DmTNniIyMRKVS0apVKzp16qTVNhwcHFiyZInm59jYWH744Qda\ntWpVI4I/KSmbo0fvcObMfXx663PX/DzhCY/fNB0dzVCpVPi7dcC/UwPdFSqEqPb+NvyjoqI4ceIE\nJ06cICQkhNzcXOrVq0enTp2YPn06vr6+WFg827AB06dP59ChQ9SqVYuvv/76mbZR1fzxRzQ7jpzg\ntvEZjp9NolXLx/dMVCoVL3p2ZYD7AOpY1tFhlUKImqDE8Pf39ychIQErKys6dOjA+++/T6dOncrs\nmvubb77J1KlTWb16NePGjWPXrl3V/qZvRv0QwiyCURQwytSjUK3GQF+f9nXb069xPwl9IUSFKTH8\n4+PjsbGx4eWXX6Zjx474+PiU6eQtTZo0AWDJkiV07dqV4OBgpk6dWmbb1xVFUQgLS+TkybtMmtQa\nff3Hc+H6N/ZlZ8N9mJoaYG9rRsd6HenbuC+1zWvrsGIhRE1UYvhv2rSJEydOcOzYMdavX4+JiYmm\nz3/nzp1xc3Mr9c4SExM5c+YMAwYM0LSZmpri6upKXFzcsx1BJbNyZSh/ht0n3iiCZqeseaFLA80y\nN1s3+nj6Ym9mTx+3PtiZ2emuUCFEjVZi+D/q3fPuu++SmJjIiRMnOHnyJOvWrWPBggU4OTnRsWNH\nOnfuTMeOHbG2tn7qzu7du8fbb79NvXr1aNWqFQDp6encvHmTwYMHl91R6UhmXiYP7C9w1mo/+aoc\nNh0ywr/za0WGWH69/evFhsYWQoiKplVvH3t7ewYNGsSgQYMACA8P5+TJk5w/f57Zs2dTWFjIlStX\nnrqdli1b4uPjw5w5c/j0008xMDBg8eLF2NraarZdVSiKQmxsJnXqWJCUlcShm4c4Hn2cbNMc9Ezy\nqWtvgZ17DAoKKh6HvQS/EKIyKNXM3WlpaYSGhhIaGsqlS5cICwujsLCQFi1aaLW+np4eK1as4LPP\nPmPKlCnk5ubSuXNntm7dirm5+dM3UAkoisL587H88stNbqXcwmd4GmFJf6JW1ADo6+vRrp0T9mZ2\n9HLrhVpRo6fSe8pWhRCiYv1t+N+6dYvQ0FAuXLhAaGgoN27cQK1W07hxY3x9fQkKCqJDhw6l6u5p\na2vLwoULn7twXVEUhY2//Epo6glSDe9x/4IV9etZaZbXtapLH7c++Dj7yJSJQohKq8Tw9/X1JTU1\nFUVRcHZ2xtfXlylTpuDr61ujh3AuVApJrX+K1L/uoa+vQk/v4WWcpvZN6eXWixYOLeTSjhCi0isx\n/Dt06EDHjh3x8/OjXr16FVlTpfDgQTaHDt0mJzefUSNbatoN9Q0Z3qEfKdnbca5jQcf6vvRq1AvX\nWq46rFYIIUqnxPBftmxZRdZRqSQlZTHjw++IMbyInkqPfn0XYG//eMz8bg27UagU0r1hd2xMbXRY\nqRBCPJtS3fCt7nIKcjgdc5rDNw8T7XyZlJRcVMDB42EEDW6veV0tk1oMbT5Ud4UKIcRzqtHhn5GR\nx8mTdzG2yyTWJIz/3PkPOQU5wMN5cVHAxdUC57aZOq5UCCHKVo0N//MX7rFoyy5i9C+CXSKtWxe9\niV3HwZohXv3o1qAbjhbVe8whIUTNU2PD/0LuQa6Y7ENRgFTIzMrH3MwQJwsnujXshq+LLyYGMpmK\nEKJ6qtbhr1YrREQkce5cLK++2hRj48eH271JF7ba7SMntwCXulZ0bNCOHm7d8bDzkK6aQohqr1qH\n/xcrjnP4+nESDCNxbfgh3f0fD0bnZuPGS5064WHfmC71u2Bt8vSxiYQQorqoNuGfl1eIkZE+iqIQ\nmRTJsehjHDc5xi2TZAC+P/57kfBXqVTM7PQPXZUrhBA6VaXDPzU1l2PHYrhwIY5a9tCqXzZHo48S\nl/FweGh7BxPu3NHH3sEUJ48kHVcrhBCVR5UO/9zcAr7/5TT3jS+RmBVJ+0sORSZPMTLUZ0TfTnRt\n0BWvOl46rFQIISqXKh3+scp1opx2kJGZj55KRUZmPrWsjDExMMHXxRf/+v7Utaqr6zKFEKLSqdLh\n38y+GU0aOZFdkIWNrTH1rF3p2qArHep2wNjAWNflCSFEpVWlw99Q35CX2/UlITOBrg260ti2sXTT\nFEIILVTp8Ad4qclLEvhCCFFKVX6KKQl+IYQovSpx5l9YWAhAbGysjisRQoiq4VFePsrP/1Ulwj8h\nIQGAoKAgHVcihBBVS0JCAvXr1y/WrlIURdFBPaWSk5NDWFgYDg4O6OvLvLhCCPE0hYWFJCQk0LJl\nS0xMig9SWSXCXwghRNmq8jd8hRBClJ6EvxBC1EAS/kIIUQNJ+AshRA0k4S+EEDVQpQv/uXPn8sEH\nHxRp27VrFy+++CJt27Zl2LBhnDx5ssjyb7/9liZNmhT5at68eZHXbN68mW7dutGmTRvGjRvHrVu3\nKtUx5OXlsXDhQjp16oSnpyeTJ0/mzp07OjuGZzmOFStWFPt/ePS1cuXKKnMcAHfu3GHq1Kn4+PjQ\nuT9BqlwAAA4ZSURBVHNn5syZQ1paWpHXVPbfqVu3bjFp0iR8fHzw9/dn+fLlFBQUVOgxJCYmMmvW\nLDp37oyPjw8TJkwgKipKs/zEiRO89NJLtG7dmoEDB3L06NEi6yclJfHmm2/i4+ODn58fn3/+eYUf\nQ1kcxyN5eXkEBASwe/fuYssq+u8CpZJQq9XK0qVLFQ8PD+X999/XtO/du1dp0qSJsmbNGuXGjRvK\n1q1blVatWimnT5/WvGbu3LnK1KlTlfj4eM1XQkKCZvn27dsVT09PZf/+/UpERIQyZcoUpUePHkpu\nbm6lOYbZs2cr/v7+yqlTp5TIyEhl1KhRyosvvqio1eoKPYbnOY6MjIwi/wfx8fHK3LlzFT8/PyU2\nNrbKHEd+fr7St29fZfr06cq1a9eUkJAQpW/fvsrrr7+u2UZl/51KSUlROnbsqIwaNUq5cuWKcu7c\nOaVv377Ke++9V2HHUFhYqLzyyivK8OHDlT///FO5evWq8sYbbyh+fn7KgwcPlKtXryotW7ZUVq9e\nrVy7dk1ZsmSJ0qJFCyUqKkqzjREjRiiBgYFKeHi4cuTIEcXX11f58ssvK+wYyuo4FEVR0tPTlYkT\nJyoeHh7Krl27iiyryL+LRypF+N++fVsZOXKk0qFDB6Vr165FfskDAgKUmTNnFnn9Bx98oIwcOVLz\n84gRI5Rly5aVuP3evXsry5cv1/yckZGhtG3bVtmzZ0+lOIbbt28rHh4eyqlTpzTLr1+/rnTt2lW5\ndetWhR3D8x7H/7pw4YLStGlT5ejRo5q2qnAckZGRioeHhxIREaFZvnXrVsXT07NCj+N5jmHTpk2K\np6enkpycrFl+/vx5xcPDQ7lz506FHMOVK1cUDw8P5f+1d/8xUdd/HMCf6HEZ4AJRjsuI4mckyB0C\njmDMlDHFhmDNrCgpp23+Qaztmji4PzKXMwiuAlPmCI3DyaLV2WrqRTAdIjfslgsxLCAJIu68SwnO\n8+71/YP4xAkmidyd33s9tvvn8777fD7PfT6fF+/73If3u7u7W1hmsVgoPj6ePv/8cyopKZly7uTl\n5VFxcTERjZ8/UVFR1NfXJ7Q3NjaSXC4XiqIzjsNscxARnTlzhtasWUO5ubnTFn9nXReTucVtn46O\nDkilUmg0GjzyyCMObb29vUhMTHRYFhMTg/Pnzwtf/7q7uxEeHo7pGAwG9PT0IDk5WVjm6+uL2NhY\n6HQ6t8hw+vRpLFq0CCkpKUJ7WFgYmpqaEBoa6rQMs80xGRFhz549yMzMRHp6OgDnHYvZ5njooYcw\nb948HDt2DBaLBUajEd988w1iY2OdmmM2GXp7exEZGQl/f3+hfeJWqE6nc0oGqVSKAwcO4PHHHxeW\nTQzEaDabodPpHLYPACtXrhS2r9PpsHTpUoSEhAjtycnJGBkZQWdnp9OOw2xzAMC3336LnJwcHD16\ndMr6nXldTOYWY/ts2LABGzZsmLYtKCgIAwMDDsv6+/thtVrx559/wmq1wmw2o6WlBR9++CFGR0eR\nlJQEhUIBiUQiDG4kkUimrPdeDhQ3mww9PT0ICQmBRqNBdXU1jEYjEhISsGvXLgQHBzstw2xzLFq0\nSFiu1Wrx448/oqysTFh2v+SQSCQoLi5GaWkp1Go17HY7wsPD8emnnzo1x2wyBAUFoampCXa7HfPm\nzRPagfFi44wMAQEBWLVqlcOyI0eOYGxsDGlpaVCpVP+6/d9//x1BQUFT2gFgYGAAIpFozjPcixwA\nUFxcfNv1O/O6mMwtev7/Jjs7G3V1dWhtbYXNZsPZs2fx2WefAQCsVit++uknAIBIJEJ5eTneffdd\n9PT0ID8/H2NjYxgdHQUAPPCA48xeYrEYFovFLTJcv34dP//8M2pqalBUVASVSgWDwYAtW7bAYrG4\nRYaZ5JistrYWa9eudRhQ6n7JYbfb8csvvyAlJQX19fU4dOgQ5s+fj8LCQthsNrfIcacM69atg8Fg\nwHvvvYfR0VEMDw/jnXfegUgkgtVqdUkGrVaL999/H6+++irCw8MxNjYGsVh82+2Pjo5O2T9vb294\neXm59Lr4rznuxFU53KLn/2+2b98Oo9GIbdu2wWazISIiAlu3bkVZWRkWLlyItLQ0tLa2OvQ6IyIi\nkJ6ejubmZixdOj6H740bNxzWe+PGDTz44INukUEkEuHatWtQqVTCV9wPPvgAaWlpaG5uxsMPP+zy\nDDPJMWFwcBDnzp1DbW2tw+cnBpdy9xxffvklNBoNmpqa4OPjAwAIDQ1FRkYGmpubhd6nO59TEokE\nKpUKSqUSn3zyCXx8fFBQUICuri4sXLjQ6ceisbERJSUlyMrKgkKhADBe7G7tNEze/oIFC6bsn9Vq\nBRHBx8fHJefT3eS4E1ddF27f8xeLxVAqlejo6EBLSws0Gg0WLFiAxYsXCxfm5MIPjH9dCggIwMDA\nAKRSKYB/hoWeMDQ0NOVrlqsySCQS+Pj4ONzbDAwMhL+/P65cueIWGWaSY4JWq8WSJUum3Ae9X3Lo\n9XqEhYU5ZAoJCUFAQAD6+vrcIsdMjsXq1atx+vRpNDc3o7W1Fc8++yyMRiNCQkKcmmH//v0oKirC\n5s2bsW/fPuE2lFQqxdDQ0G23HxwcPO3+AeO3SJx9HO42x5246nxy++JfXl6OgwcPQiwWY8mSJQCA\nU6dOITU1FQBw+PBhpKWlOfzl7e/vh9FoRGRkJAIDA/HYY4/h3LlzQvvIyAguXLiApKQkt8iQmJiI\nv/76C5cvXxY+88cff+Dq1at49NFH3SLDTHJMmPgBbOLimHC/5AgODkZPT49DT2xoaAgmkwmhoaFu\nkeNOGXQ6HbZs2QKbzYagoCCIxWKcOnUKPj4+SEhIcFqG6upqVFRUoKCgACUlJQ4z761YsQLt7e0O\n729raxN+yF6xYgV+/fVXh9822tra4OvriyeeeMKpx2E2Oe7EZefTnD1HdJfy8vIcHmk7duwYJSQk\n0HfffUd9fX20e/dukslkdPnyZSIi6u3tJZlMRgqFgrq7u0mn01Fubi698MILwjrUajXJZDI6fvw4\ndXV10euvv06ZmZlz9gztf81gt9vpxRdfpOzsbOro6KDOzk56+eWXae3atcI+OjvD3eSYkJmZSfv3\n7592nfdDjsHBQUpMTKSCggK6dOkS6fV62rx5M+Xk5JDVanVJjv+awWAwUGJiIu3du5f6+vroxIkT\nlJCQ4HBc5jpDZ2cnxcTEUFFR0ZT//xgZGaGLFy/SsmXLSKVSUXd3N1VUVFBcXJzwSKXdbqdNmzbR\n888/TxcuXBCe85/8SKQzjsNsc9xqukc9XXFduH3xJyKqrKyk9PR0kslklJeXR3q93qH9/PnzlJeX\nR3K5nJKTk2nnzp1kMpkc3vPxxx9TamoqyWQyeu211xyeHXaHDGazmXbt2kVJSUkkk8lox44dNDAw\n4LIMd5uDiEgul5Narb7teu+HHF1dXbR161ZKSkqi1NRUUigUZDAYXJbjbjK0t7fTc889R8uXL6eM\njAyqqamZst65zFBWVkZRUVHTviorK4mIqKmpibKysig2Npays7PpzJkzDusYGhqiHTt2UHx8PD31\n1FNUVlZGNpvNaRnuVY7Jpiv+zshxK57MhTHGPJDb3/NnjDF273HxZ4wxD8TFnzHGPBAXf8YY80Bc\n/BljzANx8WeMMQ/ExZ95NKVSiejo6NvOvKTVahEdHY2qqion7xljc4uf82ce7fr163jmmWfg5eWF\n48ePw9fXV2i7du0asrKyEBwcjKNHj2L+/Pku3FPG7i3u+TOP5ufnh7fffhu//fYbysvLHdr27dsH\ns9mMvXv3cuFn/3e4+DOPl56ejtzcXNTV1UGv1wMA2tvb0dDQgDfffNNhlrj6+nqsW7cOsbGxWLNm\nDaqrq3Hrl2e1Wo3c3FzEx8dj+fLl2LhxI06ePCm0NzQ0QC6Xo66uDikpKVi5ciWuXLninLCM/Y1v\n+zCG8en41q9fj+DgYKjVamzcuBEBAQE4fPiwMIJjZWUlPvroI+Tn5yM1NRV6vR5VVVXIz88Xxnav\nqalBaWkp3njjDcTHx8NkMuHgwYO4dOkStFotgoKC0NDQAKVSifDwcCgUCly9ehU5OTmujM880ZyO\nHMTYfeTkyZMUFRVFL730EsnlcmGicyIik8lEcXFxtGfPHofPHDp0iJ588kkaHBwkIqLdu3dTeXm5\nw3v0ej1FRUXRiRMniGh8RM6oqCj6+uuv5zgRY7fHt30Y+1tGRgbWr1+P9vZ27Ny502HS9I6ODlgs\nFjz99NO4efOm8Fq9ejVu3ryJs2fPAhifq7WwsBBmsxnff/89vvjiC9TX1wOYOtVlTEyM88Ixdgu3\nn8aRMWdKS0vDV199hfT0dIflJpMJAJCfnz/t5yZmcurp6YFSqURbWxvEYjHCwsIQGRkJAFN+G5g8\nUxhjzsbFn7EZmJijWKVSCfNCTyaRSGCz2bB9+3b4+fmhsbER0dHREIlEuHjxIjQajbN3mbF/xbd9\nGJsBmUwGb29vDA8PIy4uTnhZLBZUVFRgeHgYw8PD6O3txaZNm7Bs2TKIRON9q5aWFgCA3W53ZQTG\nHHDPn7EZWLx4MV555RWUlpbCbDYjISEB/f39KC8vh7+/PyIiIuDt7Q2pVIra2loEBgbCz88PLS0t\nOHLkCABgdHTUxSkY+wf3/BmbIYVCgcLCQmg0Gmzbtg0VFRVYtWoVamtrIRaL4eXlhaqqKgQGBuKt\nt95CYWEhfvjhBxw4cAChoaHQ6XSujsCYgJ/zZ4wxD8Q9f8YY80Bc/BljzANx8WeMMQ/ExZ8xxjwQ\nF3/GGPNAXPwZY8wDcfFnjDEPxMWfMcY80P8AWLod61MQsCYAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 11, + "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": 23, + "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": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = System(t0=t0, \n", + " t_end=t_end,\n", + " p0=p0,\n", + " alpha=0.025,\n", + " beta=-0.0018)\n", + "\n", + "system" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the model and plot results." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "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": [ + "run_simulation(system, update_func2)\n", + "plot_results(system)\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": 25, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap04-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nY4wZ7H8B2TFach6OdB4AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "system.t_end = 2250\n", + "run_simulation(system, update_func2)\n", + "plot_results(system)\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": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.891003052610698" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results[system.t_end]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.888888888888889" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "-system.alpha / system.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": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "p_array = linspace(1,20,10)\n", + "\n", + "for system.p0 in p_array:\n", + " run_simulation(system, update_func2)\n", + " plot(system.results)" + ] + }, + { + "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": 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", + " \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]
Year
20167.334772e+09NaN7.432663e+09
20177.412779e+09NaNNaN
20187.490428e+09NaNNaN
20197.567403e+09NaNNaN
20207.643402e+09NaN7.758157e+09
\n", + "
" + ], + "text/plain": [ + " United States Census Bureau (2015)[18] \\\n", + "Year \n", + "2016 7.334772e+09 \n", + "2017 7.412779e+09 \n", + "2018 7.490428e+09 \n", + "2019 7.567403e+09 \n", + "2020 7.643402e+09 \n", + "\n", + " Population Reference Bureau (1973-2015)[6] \\\n", + "Year \n", + "2016 NaN \n", + "2017 NaN \n", + "2018 NaN \n", + "2019 NaN \n", + "2020 NaN \n", + "\n", + " United Nations Department of Economic and Social Affairs (2015)[7] \n", + "Year \n", + "2016 7.432663e+09 \n", + "2017 NaN \n", + "2018 NaN \n", + "2019 NaN \n", + "2020 7.758157e+09 " + ] + }, + "execution_count": 30, + "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": 31, + "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": 35, + "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": 36, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system.p0 = census[t0]\n", + "system.t_end = 2100\n", + "run_simulation(system, update_func2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap04-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(system)\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": 56, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "p0 = 1000\n", + "years = linrange(11)\n", + "interest_rate = .03" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1000. , 1030. , 1060.9 , 1092.727 ,\n", + " 1125.50881 , 1159.2740743 , 1194.05229653, 1229.87386542,\n", + " 1266.77008139, 1304.77318383, 1343.91637934, 1384.23387072])" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fgb = p0 * (1 + interest_rate)**years\n", + "fgb" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1000. , 1030.45453395, 1061.83654655, 1094.17428371,\n", + " 1127.49685158, 1161.83424273, 1197.21736312, 1233.67805996,\n", + " 1271.24915032, 1309.96445073, 1349.85880758, 1390.96812846])" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "esl = p0 * exp(interest_rate*years)\n", + "esl" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.030454533953516938" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "interest_rate2 = exp(.03) - 1\n", + "interest_rate2" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1000. , 1030.45453395, 1061.83654655, 1094.17428371,\n", + " 1127.49685158, 1161.83424273, 1197.21736312, 1233.67805996,\n", + " 1271.24915032, 1309.96445073, 1349.85880758, 1390.96812846])" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fgb = p0 * (1 + interest_rate2)**years\n", + "fgb" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "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": 66, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1000. 1030.45453395 1061.83654655 1094.17428371\n", + " 1127.49685158 1161.83424273 1197.21736312 1233.67805996\n", + " 1271.24915032 1309.96445073 1349.85880758 1390.96812846\n", + " 1433.32941456 1476.98079388 1521.96155562 1568.31218549\n", + " 1616.07440219 1665.29119495 1716.00686218 1768.26705143\n", + " 1822.11880039 1877.61057926 1934.7923344 1993.71553324\n", + " 2054.43321064 2117.00001661 2181.4722655 2247.90798668\n", + " 2316.36697678 2386.91085352 2459.60311116 2534.50917762\n", + " 2611.69647342 2691.23447235 2773.19476396 2857.65111806\n", + " 2944.67955107 3034.35839444 3126.76836519 3221.99263853\n", + " 3320.11692274 3421.22953629 3525.42148737 3632.78655575\n", + " 3743.42137726 3857.4255307 3974.90162749 4095.95540407\n", + " 4220.695817 4349.23514106 4481.68907034 4618.1768223\n", + " 4758.82124514 4903.74892833 5053.09031656 5206.97982718\n", + " 5365.55597112 5528.96147762 5697.34342267 5870.85336138\n", + " 6049.64746441 6233.88665852 6423.73677143 6619.36868104\n", + " 6820.95846929 7028.68758059 7242.74298516 7463.31734732\n", + " 7690.60919888 7924.82311785 8166.16991257 8414.86681144\n", + " 8671.13765846 8935.2131147 9207.33086588 9487.73583636\n", + " 9776.68040953 10074.42465501 10381.23656273 10697.39228411\n", + " 11023.17638064 11358.88208 11704.81153998 12061.27612044\n", + " 12428.59666358 12807.10378266 13197.13815966 13599.05085183\n", + " 14013.20360773 14439.9691928 14879.73172487 15332.88701991\n", + " 15799.84294826 16281.01980179 16776.85067214 17287.78184057\n", + " 17814.27317961 18356.79856702 18915.84631226 19491.91959603\n", + " 20085.53692319 20697.23258939] [ 1000. 1030.45453395 1061.83654655 1094.17428371\n", + " 1127.49685158 1161.83424273 1197.21736312 1233.67805996\n", + " 1271.24915032 1309.96445073 1349.85880758 1390.96812846\n", + " 1433.32941456 1476.98079388 1521.96155562 1568.31218549\n", + " 1616.07440219 1665.29119495 1716.00686218 1768.26705143\n", + " 1822.11880039 1877.61057926 1934.7923344 1993.71553324\n", + " 2054.43321064 2117.00001661 2181.4722655 2247.90798668\n", + " 2316.36697678 2386.91085352 2459.60311116 2534.50917762\n", + " 2611.69647342 2691.23447235 2773.19476396 2857.65111806\n", + " 2944.67955107 3034.35839444 3126.76836519 3221.99263853\n", + " 3320.11692274 3421.22953629 3525.42148737 3632.78655575\n", + " 3743.42137726 3857.4255307 3974.90162749 4095.95540407\n", + " 4220.695817 4349.23514106 4481.68907034 4618.1768223\n", + " 4758.82124514 4903.74892833 5053.09031656 5206.97982718\n", + " 5365.55597112 5528.96147762 5697.34342267 5870.85336138\n", + " 6049.64746441 6233.88665852 6423.73677143 6619.36868104\n", + " 6820.95846929 7028.68758059 7242.74298516 7463.31734732\n", + " 7690.60919888 7924.82311785 8166.16991257 8414.86681144\n", + " 8671.13765846 8935.2131147 9207.33086588 9487.73583636\n", + " 9776.68040953 10074.42465501 10381.23656273 10697.39228411\n", + " 11023.17638064 11358.88208 11704.81153998 12061.27612044\n", + " 12428.59666358 12807.10378266 13197.13815966 13599.05085183\n", + " 14013.20360773 14439.9691928 14879.73172487 15332.88701991\n", + " 15799.84294826 16281.01980179 16776.85067214 17287.78184057\n", + " 17814.27317961 18356.79856702 18915.84631226 19491.91959603\n", + " 20085.53692319 20697.23258939]\n" + ] + } + ], + "source": [ + "years = linrange(101)\n", + "interest_rate2 = exp(.03)-1\n", + "interest_rate = .03\n", + "p0 = 1000\n", + "fgb = p0 * (1 + interest_rate2)**years\n", + "esl = p0 * exp(interest_rate*years)\n", + "print(fgb,esl)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1000. , 1030.5, 1062. , 1094.5, 1128. , 1162.5, 1198. ,\n", + " 1234.5, 1272. , 1310.5, 1350. , 1390.5, 1432. , 1474.5,\n", + " 1518. , 1562.5, 1608. , 1654.5, 1702. , 1750.5, 1800. ,\n", + " 1850.5, 1902. , 1954.5, 2008. , 2062.5, 2118. , 2174.5,\n", + " 2232. , 2290.5, 2350. , 2410.5, 2472. , 2534.5, 2598. ,\n", + " 2662.5, 2728. , 2794.5, 2862. , 2930.5, 3000. , 3070.5,\n", + " 3142. , 3214.5, 3288. , 3362.5, 3438. , 3514.5, 3592. ,\n", + " 3670.5, 3750. , 3830.5, 3912. , 3994.5, 4078. , 4162.5,\n", + " 4248. , 4334.5, 4422. , 4510.5, 4600. , 4690.5, 4782. ,\n", + " 4874.5, 4968. , 5062.5, 5158. , 5254.5, 5352. , 5450.5,\n", + " 5550. , 5650.5, 5752. , 5854.5, 5958. , 6062.5, 6168. ,\n", + " 6274.5, 6382. , 6490.5, 6600. , 6710.5, 6822. , 6934.5,\n", + " 7048. , 7162.5, 7278. , 7394.5, 7512. , 7630.5, 7750. ,\n", + " 7870.5, 7992. , 8114.5, 8238. , 8362.5, 8488. , 8614.5,\n", + " 8742. , 8870.5, 9000. , 9130.5])" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta1 = 30\n", + "beta2 = .5\n", + "pcu = p0 + (beta1*years) + (beta2*(years**2))\n", + "pcu" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "newfig()\n", + "plot(years, fgb, 's-', label='fgb')\n", + "plot(years, esl, 'r-', label='esl')\n", + "plot(years, pcu, 'b-', label='pcu')\n", + "decorate(xlabel='year', ylabel='value of account')" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "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/chap04sympymine.ipynb b/code/chap04sympymine.ipynb new file mode 100644 index 00000000..9906aa12 --- /dev/null +++ b/code/chap04sympymine.ipynb @@ -0,0 +1,1243 @@ +{ + "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": "markdown", + "metadata": {}, + "source": [ + "### Analysis with SymPy" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sympy import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following line sets up Jupyter notebook to display math." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "init_printing() " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And this function provides the option of showing results in LaTeX format." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sympy.printing import latex\n", + "\n", + "def show(expr, show_latex=False):\n", + " if show_latex:\n", + " print(latex(expr))\n", + " return expr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create a symbol for time." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAASCAYAAACNdSR1AAAABHNCSVQICAgIfAhkiAAAAKVJREFU\nKJHF0D0OQUEUxfGfj6AXhS2ohKjsRCKieZXGIiS2YR0alULioyK2QUE0FKaYyHtIFE4yuTc5/zn3\nzvCjxrij92rkU+B2qOtvkg84I/cOmobxaacPxQjeYIYBlphH3iItPQlJSZr5+sBWNOWjVrih/Aks\n4oJdFhCv0UDl3Qox3Ax1+w1cDfWUBReivoQhOqijixr2WZdHOOLq+d+TLPCPegAjHB6W3kZe8AAA\nAABJRU5ErkJggg==\n", + "text/latex": [ + "$$t$$" + ], + "text/plain": [ + "t" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t = symbols('t')\n", + "show(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you combine symbols and numbers, you get symbolic expressions." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAASCAYAAAAkAezhAAAABHNCSVQICAgIfAhkiAAAAUNJREFU\nSInt1D9KA0EUx/GPIthYCDZeQLRQETu79QRaWAliDmAjeACbgKVgZyEKqfQIFgqChWBMo0FscgCr\niKAWxmIHXIIsu5t/oP5geDPMvPf7DrwZfpG20cL6ALzXcIArNANHJWtyJSRM9wQtXbXg/YK6nOD1\nkDhUwLgUzKICubCMqeAdSQEfTsz3wsEZjOEzrFvYKAiSVxd4Cp6pGknMqzjBJq5xnti77CJcV5QE\nP8W4GPwEhwMhyqjhtvViiNV+g3SqG3xgNMPZhu83kGUc52SJpDzOkbb5HB7wnqHwvri1klrAirjV\nGm17tQw1C2lefMOjDmqUdPYdJhXJ+B0uhHjXBdOeKwk+EWJzECB5lezx2xDLmMUr7nHWR57VMGAy\nxCXfD/sZOz8lbuERb+L+Kuc0Lumsx3el/0yNgnX/9Xf1BZhzU20D5Q/tAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$t + 1$$" + ], + "text/plain": [ + "t + 1" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expr = t + 1\n", + "show(expr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is an Add object, which just represents the sum without trying to compute it." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.add.Add" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(expr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`subs` can be used to replace a symbol with a number, which allows the addition to proceed." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABHNCSVQICAgIfAhkiAAAAOhJREFU\nOI3N0r1KQ0EUBODPYCEkIGggkEZIYSUIYmEhpLESLHwI38DeNEHsxVexEDutBBWRQCqLQBD/wEqU\nSCx2F8Mlyr2QIgPLLmfPcGaGw4RwhHP08IE33OAAi6ONMxniF67RwRPK2MA6+vHdGzdx7g8lbQxx\nUtTCaiSepUIpJ3En3nepkPWYsI8K5gV/m5G0hef/JjxGaemcopZTHbF5F10h1bUiZFjCJ+6LEgmL\nMESV/KlCPd7f2Y9lIcUsSn4X4DIVZ0catnGICzzgVQiniYaQ9N44KSs4xi1eMMA7rtDCQk5L04Yf\nBeYtAc2H2hEAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$3$$" + ], + "text/plain": [ + "3" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "expr.subs(t, 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`f` is a special class of symbol that represents a function." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "f" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = Function('f')\n", + "show(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The type of `f` is `UndefinedFunction`" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.function.UndefinedFunction" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now SymPy understands that `f(t)` means `f` evaluated at `t`, but it doesn't try to evaluate it yet." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAB8AAAAVCAYAAAC+NTVfAAAABHNCSVQICAgIfAhkiAAAAgRJREFU\nSInt1c2LT1EcBvDPmImZBkNjp6yYYSJvkYWdYf4AOyUbZiEWrLBBURM7Sztlh9CkvCxIEWKIkJcF\nG7+M8pr34WdxzuU67v3dmWwsfOvX9/Y893mec87vnHP5B2syDuAJvqCObZE7hGG0j9JrcdSvH234\nYBScwh7sQg+W4Du2Fmi2RM2aAu44aphYFTw7mpwu4M7iNdoKuMNR113ALY3cjqrwjfHFDQneJcz6\nYInuPt6hqQH/FOOKyNUxtOg3BwPxeUWiG2igW5t7b2fE+jKgJUfWsFuY+VTsjXgdD9GLb7iShA8J\nm3AdLuNcjruQe74U+0qcKZi8ZnzA7QRvxwjuFInQHwfZX8JDR3znWgak698jbKahBJ8eB1YrMV4U\ne6rL1xt8woyy8DKTzthfNQj/qnxlsnqJaVXhNxP8Y+ytBYYtmId7+FwR3pbzKgyv41aCD8fe6c/q\niYNqtORZ1pSc12/hTZiPR8J5zVcNLxRfIAtiT1crre6Y8XNi+fAuTCoxqeOi8H/NTLhsNd5WhC+L\n/XwG5M951Y49JlxEfXicw2/Evhdz8R53cSTRrxLuiZNF5vuFGfaWhI/Hc1wt4DbhgXCU6n5dUFl1\nCBvtRIn3qGp7NF84Rt3mqFv+N+GtwsdhcAyaNjzD0ZRoHmP4iLAnJuC6cLFU1Szh/O8TPsf/yw/l\npn/unQRWlwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$f{\\left (t \\right )}$$" + ], + "text/plain": [ + "f(t)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f(t)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`diff` returns a `Derivative` object that represents the time derivative of `f`" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADAAAAAhCAYAAACfiCi5AAAABHNCSVQICAgIfAhkiAAAAzBJREFU\nWIXtl0tIVVEUhj9NTLGysEEJQZD5gvBRWoNskiX0cBJBD6JJSUQNalRBpJRg2aiBvSYF0aiokKBs\nYA8Ki7KHYFSDFCLLoJfU7X0brHW8h+05Z59746aUPxz2vWutf++1zz5r7bXgP8Mm4NlwO+FGapz2\npcCDZDiSKBLZwP1kOJIMlALtQAToAiqBT8CS4XQqLGYCH4AmIA9YCvQAUSA3BH8CcEg535S3Q3Un\ngX4gKw5/ZuscG8ISLgOnDdlx4HVIfqsueBHYB9QDxUAF8AvY7sPbprw1HrpzQB8wzrb4NJ2kwpC3\nIBuzoVD5lzx0bcB7INOHe0q5BR66StXtsjlQC/wA0g15B7DfRgY260IbDXk+8vaPBXAfAwNASoC+\nF0vyWa4OjHfJqlS2KoC3Qm28niIknqLAQg9uUwB3nctuj8pqHEGax2R3ga/AQeAA8km0qC7oDugD\nGpATmAQ0qjwKPAWqgZ/ISZroRIJ7PXALuOLSXXX9vqnjIiyf82rkqCI6YQOSQm33xhjgM/DIkGch\nn2VXALcO2WxdgE222tyx+JEwZukCJwx5vsrbArhH1GaOZY0I8Mr5E+9NbEO5jp2GPEfHdxbud4JP\nCeAtMNn5k6wNmOVGRMcMH14acnrdSPwFIdM132AQR8P76Akn7ZXrXGaw9+uYgzeKkc2ZJ2ciFZgI\nPHcEzgb88m48SAFKkHJ7wND1AW/wvqBA6i6wF4oFus7gCwrzCYXtAfKRu8PLiShwHfl28zz0zsl8\ntKwxT8d2RxBmA+4eoBn//OsXwA7O6ljjobunY6OuUQ+s9LBbjNwlF/zdHYoOYvXHNWCvj10z8qar\nffTpSDF420e/BXgCfNF5Gg19NhK854Oc9esBaomVxc7THTSRD3YqtywB7lblzvczsPUATk1eCUxB\nyoV4kYHc8K1x8jKBl8CZICNbD7AMCbI/zVgLkKIsnoamCImL6X4GYXqA3cCNOBb9K3CyUBkS3Q8N\nfTmxDDQiG3pnA1Gkkhzr0lUBc4k5XcLQKnPEYCqSvo4CM5AA7kU2Vqg2PUiPkItc5yMOth5gLfAC\naQsPD4eDoxjFKP5B/AbN08xssdXn7QAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\frac{d}{d t} f{\\left (t \\right )}$$" + ], + "text/plain": [ + "d \n", + "──(f(t))\n", + "dt " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfdt = diff(f(t), t)\n", + "show(dfdt)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.function.Derivative" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(dfdt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need a symbol for `alpha`" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAOFJREFU\nKJHV0s0qhVEUxvHfq3wOpYxMZGzGFXAD7sJEkptQdJKUMjIwVMpQKEOjM1HKRFFyppKTr2OwV3l7\nW8fIxDPb61n/3bP3WvyxBrGKNl7xgBaGMIYnHGbgOK7Qwwk2cB3ndazhHTMZfBqNK7XaBLo4wyP2\nM3AhwEtUDe8mvC6mMvggGpYSrx3edgbCHd6UT8ngF0xm4Ci+cJt40xH3vGkM1OAqLmiqhWF89Itc\n4RmfmK3Vl5W39pQR9tVONHWwi6NIcoyL8PYwl8Ej2MS9sggdbCkbN+9nXIu/JfgH+gZx0TiSWeAK\nDgAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\alpha$$" + ], + "text/plain": [ + "α" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alpha = symbols('alpha')\n", + "show(alpha)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write the differential equation for proportional growth." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHQAAAAhCAYAAAAI2Y9jAAAABHNCSVQICAgIfAhkiAAABM5JREFU\naIHtmluIVVUYx39jpjNZWSpdhGroMl7A1KmZekh7aCQo8yWCpoh66H6hKSIqiJQuWBZGkTn1ktDl\noSJBhXIe7IJiFGYF2pVGtKYmyMrq2G1OD9+3O5vlWnuvvc4+nhOtH2z2sNb69vrOf92+tdZA5H/N\n9cDnzXYi4mZcwfLzgO2NcCRSDiEN+kEjHIk0nnnAJqACfAz0Ar8CFzTTqUgYpwE/AcuBU4ELgWGg\nCkz3sD8SeEJt/lC7uzRvDTAKTCrgzxn6jasL2LQaZWpSWI83gBeNtGeB7zzt12mFG4AHgKXAbKAH\nGANud9jdpnaXWfJeA0aAwz19aDVCNClFjxP0Iz1G+iqkofOYqfavW/I2Aj8CHQ7b59V2hiWvV/Pu\n8fCh1QjVpBQ9lgB/AROM9K3Aw3nGwI1a0TVGehfSE5/JsN0J7APaMvJ3UTyYazahmpSix0Va+RGp\ntAWadmmG3cVaxvbMQtbjKnCexXZ5hu0VqXL3adr5WT+ggRwKDCBbtwqwB1iJdP7DkCXphVT5UE2C\n9Rhvcfp94HfgUeARZLpYpXlZe9ARYBnSG48GHtT0KvAZ0Af8jYx0k21IYHAlsAUYSuW9mfp7s74X\n4Tf9l8kUZMrsAdZr/YuRBv4aGWlTEJETQjUJ1sM1lPuRXnIMsu8cAu5ARu2Y+zdzCDJFfAGcnkqf\nhETNO4E5DttrgUHgOtxT0GRkvXkPWUOyGACOyimTZjuwNiN/CGmAW5FoFWAaMko3IwHOeg6cVkM1\nKVuPIOYgve85I71L0zdm2K7WMmfm1FEBvvXwZRj3tGV7TJ/T9GmZtzlwEHyiefuRgNIkVJMgPWxT\nbj1063ubkT5V33tzbP9EDjGy+AE41sOXTo8yviTr1uOIyGn263sQ2G2xDdUkSI+yo8XEefN4sKLv\ndofdeKQn70DW7yw6Ut87WJyLiGvbdgD8BjzkyAvRJFiPZISava4oyTTUrd8yg6dRfU/Fzmzkh5m9\n2GQcsi5+5eFTWWtoB3Ai8CXScGlORoLGLbgPXUI0CdYjaVBXcFSENmAucr22z8gbAb7HvkEGOTeG\n/IP/GVqPz43PAHCSR7mENbgbtA17MLgSmIjs222EahKsh8+U63sH2oVEwTYnkoBiGnI2bJL00p9z\n6jhb35s8/OlEfqzvc5XjO3uBX9TvdJR6A3IIA+6ZIFSTRujxL6uBl/XvFbj3f/3q5J05+TdZ8hZq\n3h6tYylwiaXcS8hosEWTjeRJxL9R4CngVWTErkXErCI6mceloZo0VI+t1M4L3wLud5RboU70OfIn\nIOvMu478m4FPkaixSm0TnjAZWfyz9oqNoh05aNmNBEejwGPIyVEvta3LIsOuHk1K0cN1B7qE2pVP\n8uzI+pCDu9V2foDtLWp7ToBtKxOqSa4eeXegyR1cL3AccpRVlHbkMHldQbsO4BvglYA6W50QTbz0\nyLsDXYws0vVGxAuR884iF9yzkHWks866W5WimuTq4XMHei/wTgEnI00g2bbMR079PzTyu6ntceI/\niP0HSBq0itwKTEzlLQDOotaIc4GPDp5rkXo4HgmPB4FTkIBoF9LQM7XMMBK6T6fYkVqkSfQjjVhB\nziaXIVuWZBRfjmx0x4Cnm+FgJBKJRCKRSCTixT9eG5SjC29YWAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\frac{d}{d t} f{\\left (t \\right )} = \\alpha f{\\left (t \\right )}$$" + ], + "text/plain": [ + "d \n", + "──(f(t)) = α⋅f(t)\n", + "dt " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eq1 = Eq(dfdt, alpha*f(t))\n", + "show(eq1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And use `dsolve` to solve it. The result is the general solution." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG0AAAAaCAYAAAC939IvAAAABHNCSVQICAgIfAhkiAAABLRJREFU\naIHt2FuolUUUwPGfmuYpzcQioQyFtLTsrkWZWUlR9FKCD0VlUQaVUEHQFYVuktFFIquXNLS7dJGo\npDAKH7pYppVa0gW6Hs3sppba6WHN5nx+59t7f0fPVqP9h2HYM2vWrG/PmrVmhiZNmnQpM/B6vrH7\nLjCkSXlG472ywvtgJr7G32jDjalvDlqxd0ldx6Xxl5ed/H/CcXgTG7EaYzERi9FL+/9eKZ/VU7gg\nCb6COzANIzAK/+D6gjHXpTEXFPS9gB/Qp/QnNZahuBtLsAabU/0GrsJeDZ5/FDbg1mTLXCzCxzhd\nRMCKs4/GQPSvpfCwJPxaQd9CrEdLQd/cNO7Qgr7Rqe/mel/TYLrhdu1evBizMB1P4efU/k6D7Xgb\nz2R+n4OtYuEqnIvfks11uUoYfkWufZjYZY9VGbcCv9eYZAW+sWvz6OPi2z7FUQX9LbglyTWKgcmG\ncZm28altTKbtNiWcZ4JtY2i2DBfe2IYzcuOm1xh3UUZuamo7q8SHNYJrteeGvnVkiyJJGSbgVawV\nu/kLEV16ZGROS3ZkU8XVWJnTNV+cK2pykshdrSLGT0tlapr0A2zR8QAyEbO1h5tpmTIoI1fxpnvr\nGdIABoocshlHNEB/DxFe28RCzcIDWJXa5mRkzxMRq+IYffE9PszpXK3K4S0fynqIELcaR2ba98av\nIsSNLNAzGY/iStXDZz+RD98XOa4W12LfOjJZluLFGv13i9PvbFzaCb1leUjslukirG1J7T3xltgQ\nh4tdPgRfitw6T9zFDsQhOF4sOnFyfx73CYdbX23ykcIzZufah6X2hVXGPZL6j6/zcRvxYx0ZwuBq\nIbeo5O3NszLJnVZi7s5ygtg51Zxmcpo76yw3i9PqJrFw/UWUWpORuRDfJt2zsgr3yE1wbKrzW3VA\nqn+pYtixIvQsr9JfYR0OqCMDg0vIlKWPONG24d0u1FthiohYG0RKyFMJx9kD2F2pZDk593teKnV5\nUHzcKbn2o1P7SwVj9hA7aGkJ/etE+N2ZDBG2Vw0vNRiLl/Fd0jGpQKZVuWgwfjvmL6Rop7XpuACt\nqR6gIyPQW8fdmae7yFNflbCrK3Pan6luETl7ayf09sEneCKVPL2xv7h3ndoJvV1GN3GZW1Wlr9W2\nMbfCxWKhp9TRPzzJzS9hy9e6NqdV9OWvK3lq3SH/0HGntWi/9+00skYOE8fPjwrk2oQ37SdOOVkq\nu++3OnOdmOpFNaWCwcJRypZJdfTdn+qHxYtPnm44G0+XsC3LRiwT0eb8KjJjbHtP22Gy4bHaIaTC\nfHF5PEtcCSosSfWdIun+KTzvudz4M0VoKsqLjWamuMJcJg5LC/G5ODwNEn/sQXhyO3TfIN5o54u3\ny2ViMxwo3g974uAdM786M9ROmL3wk+IT2DUirG5KOu7M9fcTXlnrLrUzOEc8Xn8nXizWCQd7Fpco\nztkVisJjhVHiTvWjcIS1wjkeVT8kN5ybxKIc08lxU3R8W/uvUWvRdmt6i0ffBZ0Y0yKeaZ5viEU7\nj91m0TqbILeInLeneIvcXGLMUPyFe2zfXWlX0kccMgaKd8Dl4jmvV6qb7IaMs31XjCZNmjRp0qRJ\nCf4FUE1JoodEkHYAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$f{\\left (t \\right )} = C_{1} e^{\\alpha t}$$" + ], + "text/plain": [ + " α⋅t\n", + "f(t) = C₁⋅ℯ " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution_eq = dsolve(eq1)\n", + "show(solution_eq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case, finding the particular solution is easy: we just replace `C1` with `p0`" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "C1, p0 = symbols('C1 p0')" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGwAAAAaCAYAAABSHbkRAAAABHNCSVQICAgIfAhkiAAABO5JREFU\naIHt2WmoVVUUB/Bf75kpWjaSGE3QpM05RJNliUEGUVFSkSGUwcsHFQUlDUKTYUU2YBZFQlKRNtJk\nRaMfzAptslLSBsopsyxtsOzD2pfOO/fed+71vWeD9w+Hfc+a9tr77L3W2vvSQAMNdAom4cU8sekf\ncKSB2jAEb9cqvA3uwBL8hg24IvGmYTl61WhrYNI/v9bONwMMxCtYh0UYijMxG939Peel5+Mig88k\nwWdxPSZgAAbjT1xaQeeSpHN2Bd4T+Ba9ax7S/xeDsRZXYW88hFcxH8eLqFda5EPQF9u1Z3C/JPxC\nBd4srEbPCryHkt6+FXhDEm980Wg2A7yBRzPvJ+EP8dFKOBk/YotaDLaIyb0gR99H7K57q+gtwJp2\nOlmAL2zeebOvmNvjMrThiXZ0hnY13iwydrq2cTP79MfE9PuEnN7EdvTOzchdm2gn1jCwrsARqf87\ncZaYkB/wq0juwzpo/3Q8j5UiBy0UEaU5IzMs+ZBNDRfhk5ytmaKGaBdHily1HL+n3xPERDfjHaxX\nXmyciQeTI7MzehOwa0autJJuKXKkizAu9b9AjOMp3IyXEn0ddtsIu814ONlYiCm4HZ8m2rSM7Kki\nSpVSytb4Bu/lbC5SpUjLh69mEdYW4aAMvZdYjQtwYAU7YzEVF6oeMvuI/DdX5LT2cDG2LZDJYh6e\nLJB5AGNEbhiJtzK8O9CKW3FZHf3CXWKXTBShbH2ib4nXxEbYX1R6e+JzXIfp4qy1C/bCIPHBiep8\nBm4TBcrqap0fKFbFgzn6Pok+q4rePYk/qGBw67C0QIZwuFqYrfTk/a2EeUl2dAXeQYn3XA12sjhc\n7Jhqi2VssjsmQxuPFfhFfLTtRGRakZE5B18n21OyBrvlOjgstfktukNqv6/i2GEijH5QhV/CKuxc\nIAN71CBTD7YSx5KvRDWbx3ep3bJOu60iSq0VKSCPA1KbLbRuTE8WR+Xep6enEJPFijgmRz8k0Z+q\noNNN7Jx5NdhfJULupsYg4f99VfhHJf79GVoLFoud8K7yOSHyfS0RYHiHR5BQaYdtUD75y1O7g3IM\nQA/luzKPJpGXFtfgV2fnsFLkWFKFPzK1pZA/SizeFpHrWkQFOABfJpke2Emcq46tw9dOwxYiIX9a\nhbdc2zhbwmjxkVsL7PdPcjNr8GWJzs1hpRw7qQJve1GKfyk+AsxRvhsX4qbMe89k86Pi4XQN9k0O\nPFKFPyPx98rRS1dS5xXYH5PkxnXAx43F3NT3Ym2PJb3Fjc4GnJZo3UWld0bOxt14PUebn9PN42ht\nz2EdRjYkVis4SpgpDocnirK/hHdTe4NIsj+LVfdYTn+EuIKplAe7Et1E9TtfHC3ex9OiEDkF/XAl\nHk/yO4pJXpazs0x5Lrpc3LfOxMvJdpMo1QeKImZjznY1YZL2E2R34fScCrxxIpT+kmzckOP3EYVJ\n0VmpK3Cw8GmKuGx9XoT+NWKSR+Tk+yX5oTn6NSqni8Ei+iwVlfJKUS1PVX4rtMlxpRjMoXXqtSq/\nL9tUKIXisTXK1xMS//XoIS5wn6lDp6e4fpnRJR4V407xwQbXoTNH+Y3NZ9oWHf8ZDBX3i7X+gdlf\nHCr36CJ/ijBbhKoeRYIZjBIXuOcL/yfjJ+ze6d410AZNYqI/3AjdFnG8+FUUVvmc1kADDTTQQAMN\n1IG/ABLIWZ2xHwFQAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$f{\\left (t \\right )} = p_{0} e^{\\alpha t}$$" + ], + "text/plain": [ + " α⋅t\n", + "f(t) = p₀⋅ℯ " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "particular = solution_eq.subs(C1, p0)\n", + "show(particular)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the next example, we'll have to work a little harder to find the particular solution." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Solving the quadratic growth equation \n", + "\n", + "We'll use the (r, K) parameterization, so we'll need two more symbols:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r, K = symbols('r K')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write the differential equation." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\frac{d}{d t} f{\\left (t \\right )} = r \\left(1 - \\frac{1}{K} f{\\left (t \\right )}\\right) f{\\left (t \\right )}$$" + ], + "text/plain": [ + "d ⎛ f(t)⎞ \n", + "──(f(t)) = r⋅⎜1 - ────⎟⋅f(t)\n", + "dt ⎝ K ⎠ " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eq2 = Eq(diff(f(t), t), r*f(t) * (1 - f(t)/K))\n", + "show(eq2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And solve it." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$$f{\\left (t \\right )} = \\frac{K e^{C_{1} K + r t}}{e^{C_{1} K + r t} - 1}$$" + ], + "text/plain": [ + " C₁⋅K + r⋅t \n", + " K⋅ℯ \n", + "f(t) = ───────────────\n", + " C₁⋅K + r⋅t \n", + " ℯ - 1" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution_eq = dsolve(eq2)\n", + "show(solution_eq)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`rhs` selects the right-hand side of the solution." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAmCAYAAABu+H0XAAAABHNCSVQICAgIfAhkiAAAA2dJREFU\naIHt2VloHWUUwPFfXeKDicYqCCoxaXySipWKiLjEDSlIXPBJBa9F8VGR+OCConUFERWUPmjRKiUo\nIvgiUqo+FHFBu6RQcGmLUH2QutSgUoT4cGbo5HrnzsxN0tubzB8+7nwzZ77vzJlzzvfNudT0BA18\nje3YiTty5O7H08nxADbj0XnSYQXGq950zDxNXoV7sBbXYRWuxLIc2ZXYhdOxBe/iiRzZRtLKcCzW\n4NyS8l3jFPyCM0rKf4mbhNFuLJBtaG+wD/AqvsJj+BXfYRtOLKlPZbZgU9O5u/EXHpbvKSlr8U7J\nuZZhGvtxWQn5hvYG24t7M/1PMVxSl475TeQVOAGv4YAIrzK8gIdyrg1jAyaT/gp8iy9wQ849fSIP\nbsePSUv7fRm5geRalj0lde6YUczgCgwJ196GkSa5M7FRGPJ3vCdyEKzDIwXzpAYbF944in3JnO1o\nyPewizPjwlnYWjBeS6ok/dXCYMvFCrcblwhXTxnBNyKMLsUYTsP65PqHuBWnJv2TcHvOfGnC/0EY\neRLHVdA3y3mYyvTPxs8djlWa5/Bv0iZyZD5yeBuQcg0OZvp3ia3EVPJ7Z5N86gmbcHPm/JuJDnk0\n5HvYy2ZvIU4WL33KAq6Um5O21/8TP/HWZsQCMJ1pf4vwLGJQeOL38l9IT3EAD4hQOYjHm66P4w+c\n06IV5Z9Fx4jwnquS/vUiNG/LyKxJzvUfWdWOTm4RBhvMnJvAPyK5c3hT+j4uEKvbtXhFd74ousoz\nYrVqZoMw0mjSvxAfi+3En9iBB4+EgjU1NTU1xaTVhZmuarHIaejRaul8UHV/VFdLK7DkqqVzZbFX\nSy8XL2a/yOkt9alSX1op8lYZRvCTqNAuz5HpE14oI3Nf8nsRDiXHAyIMX8rcOySKivNJv4iGjUkr\nRafV0mGzy8tHZbW0AtN5+mST/lyqpftEyKb0fLU0j6zB1uN18bG8W4TfOlydXP9M/InxiXiArTg+\nZ9zUYPC2SNBPdahjs8F2iW3FglZLi5hrtTRlslhkwXlSPEu7NlYwRm5IpmFyvqiirm4hc6jFuWYG\n8awo70zg+RL3LBQvCq9uR/NfbpWpq6WzKUz6n4stwFuWbrW0X3y9rBLPPJQc567wS71aOqZ1vnuj\neyrV1NTU1NT0Ev8Bkdjt5YeuIw8AAAAASUVORK5CYII=\n", + "text/latex": [ + "$$\\frac{K e^{C_{1} K + r t}}{e^{C_{1} K + r t} - 1}$$" + ], + "text/plain": [ + " C₁⋅K + r⋅t \n", + " K⋅ℯ \n", + "───────────────\n", + " C₁⋅K + r⋅t \n", + "ℯ - 1" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "general = solution_eq.rhs\n", + "show(general)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can evaluate the right-hand side at $t=0$" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAADgAAAAmCAYAAACRWlj1AAAABHNCSVQICAgIfAhkiAAAAqhJREFU\naIHt2EuIFFcUxvGfImQzyviAgAHjMFkKUWdWEsMguhBEVFxpwDH4WAaCLiQSEE1UcKELIQsZfCEi\niOBGRJJFcCFixCSCG0WR6CZIjG8kYBbnltPT093VlbY7ttYfLl23+lTdc+uce259RUlbGMYvuIbf\nsK6O3df4Ph1PxgV8227nWmUzfsaM1J8uJlyLEazBh7iMTe12rlWm4k/MbNL+MlbiOla0y6lKfsSJ\nqnMb8QzfYELO9V/iVJNjTcAT3MPCAj6OYWJB+/m4ko4/wCHsEU/5O7zKuX6OWHe1mC1S8mTq9+E+\n/sC0gn6+psgE+9ErisMsXMQABnG+wu4jHMUDPMRpsYbgaYMx74gIZ2QPYw0OpDELU2SCAyJC08Qk\nb2ABblfY9OGqSKvPMCSKyQ/p/3PJ4empPwVf1Blvjlh7t7BdRHZSAX8Lsxf/pLaljs15o2U9YzEe\nVfQ3iK3h9/S7vso+S9ETWFVx/kjyoW1cSO228YUGPhYRfiaKQ9aei3TNo1dE+qb6D7CtPMBWkTqP\nsKPq/+X4G5/UaP9p/XSSPhGdRam/TKTq2gqbpelcT2ddezOsFhPsrTi3BS9EMWF0Ez+DeaLqLsFB\nxbejjrNbVLNqRsSk+lN/ED+J7eExfsW2TjhYUlLydpK9/ee9JL9XDCvVOEo1/vbRcTWew+c4m8Z4\npU4mFXmFaqTGq3kjajyHHpEdXwnF0hSN1PhOITxrMdvYzw3LRbT7hVJvt5p4ookItqLG7xj/uaGj\narwZulmN141gRqtqPONkvsk4dqWxG7WhnHvUnWCWNp+KSA3UsHnZhJO94vPhoNCJ+5q4JmM/jufY\n3C1wv5p0tRrXRJG5hL9wTPeo8R7MTW2iqNRzNajY3abGh9Rer4f/P5dKSkpK3jX+BUgtvTKxn8gS\nAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$\\frac{K e^{C_{1} K}}{e^{C_{1} K} - 1}$$" + ], + "text/plain": [ + " C₁⋅K \n", + " K⋅ℯ \n", + "─────────\n", + " C₁⋅K \n", + "ℯ - 1" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "at0 = general.subs(t, 0)\n", + "show(at0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we want to find the value of `C1` that makes `f(0) = p0`.\n", + "\n", + "So we'll create the equation `at0 = p0` and solve for `C1`. Because this is just an algebraic identity, not a differential equation, we use `solve`, not `dsolve`.\n", + "\n", + "The result from `solve` is a sequence of solutions. In this case, [we have reason to expect only one solution](https://en.wikipedia.org/wiki/Picard%E2%80%93Lindel%C3%B6f_theorem), but we still get a sequence, so we have to use the bracket operator, `[0]`, to select the first one." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(list, 1)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solutions = solve(Eq(at0, p0), C1)\n", + "type(solutions), len(solutions)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAAjCAYAAABRqHLMAAAABHNCSVQICAgIfAhkiAAABo5JREFU\neJzt22usXFUVB/DfLbW9FixVKq3UmCmPYrQxKqg8LI9WwJgKPkitaIgfwMTEZwETQQGNMVYbI4gS\nfIFYxYgCiQ+iRtSKlIdaERFahValrVWrFGxVHo4f1p7MuWfOzJk7PffOXDv/5OTcWXudvdc5e+29\nHntdhhhiimFhvwXAXNTxHtyFf+N3eOUkjP0MzJqEcaYUXo/T+y0EXiEU414sxSJ8AztN/KSN4hPp\nPgRehtX9FiLhfDwhFKKBw4SyvCj9Xo6NYic5p+LxF+HKivuckhjFbTig34IkrMWNOdozNRVjOjZh\nAZ4mlOOgimX4EM6quM9xoSZe+Jo+ynAJ3tvH8fP4DS7O0c7Av4QpOc5YxbkMb6xYhtm4HwdW3G9H\nTJvMwUowG2/DF/otSMIojtT6jc7D17AHh2Brpu0hsXtUiUfwbbyrC955eBKfytC+Lxb8yW34f5Ta\nb5bZ7QZJMd6C9cKxGwQsxojYAZYIJfkyDsf7JlmWa4VilDmiZ4g5vSFDO0pM/C9yvEuwASfgUrxK\nm29f019TcifO7dPYRTgH92Gl2An2iJV7WIYnb0o+aeL8gT9gRQnPzfgb9ku/DxVzujHHdx4eT7yn\nlQ1c014xVmAddgn7eo9YNTMLeEeEdv9WxP1bcYWwkVvSlcchaeznlgk5ibgCXy/hmS4czgXCYd6o\neuezgS/i+g7ts/EfXJ2hrRDfdW2G54ZEuwPP6WbgmmLF+Eii/1WETh8XTlkdP8aMHP9nUttWXI41\nwnO/M9G2FIy9ErsNlmm7Fe/vgu908X6/x1snUJ534C8d2s8S3z2b//lYor0bLxBy1sU85uetLWpa\nFePYRPsj5mfo0/Gt1HZhhr5Ec+uak6HPEDtOXbFiNJRtUDAinL5BSLI1sFR8v3YZ4evxT2P9kFvS\nM58VpnA33jzegWtaFeNziVa0EhYJD/jBDO3zif/sAv7jtVeMm/C9ccq7r+FI8f1OKWgbxaPGmpoR\nPJyeqQulWdztYGVb94vT/ZaCtk3CKVuoGWM3soG3FvDfLrKIRViAv5fIskXzJbu51hb2MnWxI92f\nXdB2ivBxso7wEWJeNuGX2B+v6Xaw6SXtjQnf3qZ9u3Bg5gjHtMG/o4D3Se1D0QOEU9sJDwhntlts\nGwfvVEDj3Yuywq/DY/hOhnZ0uq8X5v4OkUV9EF8tG6xMMXal+3wxMXk8K8f3SLrPM9bEECHUQcYm\nhBqYIcKnTlhW0t4J9b14th8YKaA9lu75SHA/vFrs6rsy9IZi/FwskuViJ79a7PTrOglQZko2pPtJ\nBW2Hi21ts7BlWf6XF/Afo70i7lEc+laFkSl2FaHhVO7J0U8QCy5/ppNVDLgbbxCKdJPwWbpCTavz\neVyibRaHRw00Oq/jogz9RM2oJJvbn4GfaO98/kznGL0q/FDrNnqu+NgXaT8pg4BGbUg+qrhcmOl5\nGdo04Yw+jqfm+N+e+nkAB3czcE1xHmN1ou/Ap0VsfE+i/VRrPHxVantIHCqtEYrSyGPkTQx8RbHD\nWjX+gVXp75kiitqpi+zfAOD54rsen6GNiFRC/ts9L/He3aavy1L77VoVpwU17TOfK9Pgjwon6F6x\nwopy99NExdP9IhO3TSjUgen5XxU8czH+VCbgXqJRR3GicJjvEqav6kqxiar6OjX1m925X5Joq3K8\nZyd6uwPJaZp5qG/qc2LxiCTIdQVty1LbnIK2qrAC/8VrRRb3Wl2slh4wUVVfq4SCZdHISg9CGWQp\n5mvVwFkilKorPgiaJez8qRMo12qRR3lCVGZNFLqp+uoFa0UGM4v7FO/AA4mPipPAL6W/rxFmoo7v\nau/gXSf8l4nCD9K1WRdxPD6sPIl2UsFzZVVfjL8ccETkjPYmZO87lonj3+3Cx9gtbPkFeEqH505W\nnCupCjuTDItFvuWDJfxzxWlvp6vINJRVffVSDvhSsdgG6ZBxUnGbcA6rxkKxYpem38vFdv+miscZ\nFSHipTn6Os3j8F7KAa8SYeY+i2NFMUzVOFOrc3u+iBiKknG94mihcBuNrfrapnk6faao9WjgAp19\nnrn4tUn+N4JB25rWizzH0jLGceKo1O/DGdoa4WvcaGxV1t7ghcI0XCJ8pg14ulCSP/fY54WaSrxP\nY6YIJffvtyA9oJuqr/GUAx6DD1Qg1/8NDsY7+y1ED+im6qvbcsC54l8pBjlN3xeUnfwOGsZT9dVN\nOeBUe/8hhhhiiCGGGGKIIYboDf8DNG2kTcNHtAEAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$\\frac{1}{K} \\log{\\left (- \\frac{p_{0}}{K - p_{0}} \\right )}$$" + ], + "text/plain": [ + " ⎛ -p₀ ⎞\n", + "log⎜──────⎟\n", + " ⎝K - p₀⎠\n", + "───────────\n", + " K " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "value_of_C1 = solutions[0]\n", + "show(value_of_C1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now in the general solution, we want to replace `C1` with the value of `C1` we just figured out." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$$- \\frac{K p_{0} e^{r t}}{\\left(K - p_{0}\\right) \\left(- \\frac{p_{0} e^{r t}}{K - p_{0}} - 1\\right)}$$" + ], + "text/plain": [ + " r⋅t \n", + " -K⋅p₀⋅ℯ \n", + "────────────────────────\n", + " ⎛ r⋅t ⎞\n", + " ⎜ p₀⋅ℯ ⎟\n", + "(K - p₀)⋅⎜- ─────── - 1⎟\n", + " ⎝ K - p₀ ⎠" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "particular = general.subs(C1, value_of_C1)\n", + "particular" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is complicated, but SymPy provides a method that tries to simplify it." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAArCAYAAAAe/1QiAAAABHNCSVQICAgIfAhkiAAABAJJREFU\naIHt2n+IVFUUwPGPtZBYYvaDog1tUwrCYk2LWJQk+gli//SP9a/1b1Qr/SQLIhL6w8TAP4okMyMI\nIySIiCKWCEIrXJEtSYjVgjLNbAuV7I/zZn0zu7Mzu/Nm3szu+8Jl3px337333Hvfeee9cyi4Fmvy\n6Pi8PDptI87Hfbghj85n5dFpznyEYdyC3XgUR3ESK/B3fkNrPp/h3QrZwxjBs5q/IQ6JCS/xBa5p\ncp9twzE8nhxfgDfEzrunBX3Pxc8Vsp9a0G9bsAhncTsW4Bt8i55UncuSOo8l5//Fj7i3zj668bZY\n0OP4AFck527De6m6V2NgCnpkQqsfuMvExF6CPTiAPmEKSvQmv+vwJG7C99iBOTXa78FeHBb2e5VY\nzK3J+RuxL1V/IX6ZkiYdyEacSUp/lTr9yfnrUrLSHbO0Rvuf4OUK2Z04kRxvVu5WzhObYJ+cPJ5W\n8mlSDhn70C3xDnZVyC5XPvmrMSTM0bpEtjCpMyI8l1L5R5igGc9RrMcSsRtfHKfOIJ6vkN0vJnEO\nuvCDsO1zxQJcKnb0n1g8TlmQsR4dR4/YmXck/1cL8/JQqs5snMYLFdd+ibeS4z7ld8ZrWCtels7g\noiwHPV14QEz+xSlZv/BmViT/l4sJHMJKXI/tOIIrU+1sSbWxPmlnPn4TC7NUPCfuwuva9E2+lYNa\nJnzq4ynZq8L27xKT1SvMyAbsFG7ofLEQv9Zo/5jY/fPwOb5L2h/Gf1kpMZ3Zgvdr1Kk0O5vwYNNG\nNIMYwHM16nSJu6Nb2Pch8cAtaIBZwgOq5/PuGuHxHMQjzRxUQUFBQUFBFpQCF2dzHUXBtCa3IPlE\ntOVrd8bkGiSfiOkaQJ/RQfK86cgged6ZBVnQsUHyqWYWbDP2G3xetFWQfCLSD9xF4lv7HhH5GRCf\ngZeL2GhWNDM7gdYFyRvVo2zy68ksyIJmZicwdvIHhauZdZC8ET3GUE9mQTW2qd/s1JOdMF6AnNrZ\nCa2kET3GUE9mQYlnlGcInMapCtnKKtfWyk6oFiBvVnbCS0m7E5VVGeoxSlfq+Ga8ImzYVyKzYEOV\nAW9VHnHaKEzB5pTscJVre42NVvUJmzmEW7E/df3HuFv45ieEeazkVJW+6mGTmMiJqPSemLoeO0uV\nS5Pf45ytHxRhuQ/Fyu0Yp+M/klLir+T/wRpKzBZB8co36yeEhzKCq5Qv3LDYPftxoYjlnqzRz2T4\nPSmToRE9RildXNpNe5Pf3XgKbzqXWZAFS8S7wlrl2QmL8XSNa78WrvB2+WcnNKLHKOnJr5VZkAX1\nZCccUb5DuhNZO2UnNKJHbtSTndAJAfKO1KOe7ATaP0DecXpMJjuhnZkuehQUFBQUFMwM/gfQvEQb\ngmxzqgAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\frac{K p_{0} e^{r t}}{K + p_{0} e^{r t} - p_{0}}$$" + ], + "text/plain": [ + " r⋅t \n", + " K⋅p₀⋅ℯ \n", + "────────────────\n", + " r⋅t \n", + "K + p₀⋅ℯ - p₀" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "particular = simplify(particular)\n", + "show(particular)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Often simplicity is in the eye of the beholder, but that's about as simple as this expression gets.\n", + "\n", + "Just to double-check, we can evaluate it at `t=0` and confirm that we get `p0`" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAABcAAAATCAYAAAB7u5a2AAAABHNCSVQICAgIfAhkiAAAAWpJREFU\nOI3t1D1I1lEUx/EPKiYoJNUgCTk1NGSQNZQv0OLaUjy0BIE5iENrtBdBS0kEiY6Ogg0G6hLRYCCo\nBEEOhk2OpqClUMM9D/y5/B/ieQSnznI453fu976dezlBu4E/mMA9fMQOfuEzbh0HPh7wrzjCHJ5j\nMfL7uNAofDogOxjItFehvWgUvhqA+yVab2jzjYBP4Te20FSidwd8sZAbwyYOsILBWvBrMXiyht4f\n+lTEFRziIS5JTbCnxp2MxuAnNeBPQ69EvFyykA08qwbF7V8N31kCPhOT/5A6qBV9WMjqFnCzDN4X\n/g7aC/kOzOAsHknnew7N2M7g2+iqBi0FfxlrOI11vJMu+TbO4zFmS3b1T7sinecbXMR7/MQuljCc\n1bdKj+xuln+NDzn8QcBH61jQMt5muW8KF1q1iYBfrwNekd7FiNSKL6VW7MkLP0k921YHnPSIvksf\n2wqG8oKmmPFLneD/1pj9BdhdUN1tWQwxAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$p_{0}$$" + ], + "text/plain": [ + "p₀" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "particular.subs(t, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[In some places](https://en.wikipedia.org/wiki/Population_growth#Logistic_equation) you'll see this solution, which is called the \"logistic function\" written in a different form:\n", + "\n", + "$f(t) = \\frac{K}{1 + A e^{-rt}}$\n", + "\n", + "where $A = (K - p_0) / p_0$.\n", + "\n", + "We can use SymPy to confirm that these two forms are equivalent. First we represent the alternative version of the logistic function:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGkAAAAXCAYAAAAIqmGLAAAABHNCSVQICAgIfAhkiAAAA/dJREFU\naIHt2VuIlVUUB/DfjGaKolDRQNCVNJRSooyCEqQb9BAhlBQhBOKDGUS9dIGMHrpTqHTBqAikHrIs\npKYsisqosQtGgTQxWUZ21bIsMyt7WPtwPr/Z38ycOXPOKMwfDt+c9V97rf/Z376svYcxHLJ4Cj9i\n8mgLGSWcgf1YPNpCqjAX/+GGDLdBiJ+f4brwZuK7cWSrBLYJ6/Adpgzi14V/sarligrYgF8xKcPt\nEC9wasl+HrYLscvR0UqBbcJZYsDdMojfEtUDtyWYIV7C6gx3UhLzecl+I/bhZ1zcUnXtxxZ8jc4B\nfLrFbx/XFkW4W7yI8zPcFYlbk75PxfPJ1oPj2iEwg3OShlW4Eu9gF/Zik+ZG+PIUu2rwTU15nmyj\nJh/iH/mC4d6U+HrMRm/6/ggmNJO0SSxLOrYI7S/iHryW7HsMfwBdkGLcX8FflfhL26Vpcgr4aQX/\nRkqwGn/iD1w9nEQjjCeErl04t8StNHAnD4Zpqf2mCv5Z7MbEdmmakRpvyHAdopjYnz67cepwkrQA\nm4WmRRluduJebiL+HnyfsU/E7+JFtVRTcUOslcy/ZPymi1HVi4/FrLtsqEkK+Er9RQ/lsyYbpY7D\nMQvfVPjuSM/DSval2Iq/8JGoTquwE0dl7BeK8nzdCGgaUM/4wt970rM8deHM9HxPlKQ9uANf4umM\nfxX6kpChYvsg/Gnix74qqtIyTkjPbQXbQqwQHbMxPbtFxxb9apik3jdFLMDfeKlJTQ3pOUaM3o2Z\nwA8kbln6PkdM9b2Yl/FvF2pnlFsr+DsTv7Bg68FjJb8vcFemfafo6L6SfZwou7tHQFMjenSIq6Cf\nMtzbKfDZBdslotDYiVMqBLUajwpd92W4I0RHblNfHSYIzZeXfB/CW5kYM1P850r2+cm+pElNjeoB\na1OCkwu2TjFr9ul/C1ErNftwdFXQFuKDlH+rA48NU/BK4hYU7LXVojz7b9P/kA7XOHAFqWGluF3p\nalJTo3oQB6/9uLZgm5Vsn1S0WZH49+WvklqF8WJ/2yw6pA8P4mF8mzTdVGrTaKc8I0b6sQVbh5gJ\nuW2hUU3DekkT8INYJ2tYlAI9XtGmE+vVl4WBrlBGEnPUD9PTxf7wm5j1r+OiTJtGlpdpomB4oWSf\nm/LmLqAb1TSs5Q5uTolOH8jpIEBtKcrtCwOhR/+7yV79N+rrUvzyYbS28Z84QpqGqucATBSXiusb\nSDQaWCU6ZG6D7RaK0nmxKAxWiMP58QWfSaL8X5tpv0UsZyOlaSh6spgnLhcP5n/6vSuKmdy5bjAs\nFQfrveLwWN4TZuJ29TNNqzUNpueQRKcYbZ+NtpACDkZNYxjDGMZwKOF/3QNUWQ7MkekAAAAASUVO\nRK5CYII=\n", + "text/latex": [ + "$$\\frac{1}{p_{0}} \\left(K - p_{0}\\right)$$" + ], + "text/plain": [ + "K - p₀\n", + "──────\n", + " p₀ " + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A = (K - p0) / p0\n", + "show(A)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAkCAYAAACg9OUnAAAABHNCSVQICAgIfAhkiAAABE9JREFU\neJzt2muIVVUUwPGfOZBlYpkSZFmTlRSjmEaFaEn0sBCT8EOPLxHmF6EozZ5kQVTSF5EKgx6WvTCi\nd2DR44NU9NBCJcYsobISHz2sSSywD+tc58yZ63jvzL3nMM75w+beve4+e69199lrrX3OpqRkgPE+\nXsjIbkAH7sKg3DUqyY3fcEvy/XA8gZ24tDCNSnJhLPbhAozB51iH1iKVKoLDilagACaLyR+BL/EN\npmBLkUqV5MMS/JeUhQXrUigDceVPwof4MfleMoDYiVvRhj9xX7HqlORFq4j3Fyb1mcL9X1uYRiW5\nMUdM/tEp2ULswdRCNCrJjQfxXRX5U9gutoElJSUlJSWHIpUXGPsK1aKkpKSkJDgFs5o5wEB8vNsf\nGIzLcGbRijSDY7BN/9tXv4wFTer7DTwmXjEvxi58K143D23SmPs5P1Fgq0gAr2viWA/j6YysP5yu\nGS8mZXgT+t6Cm1L1j3BylXbLsbTRg1+OB8Qj0A71Tf4K3Ftj2yPFSZrs49T+crrmC8zvxXVfYUOV\ncjyG4YdM+++r9DEIP2N6L8avmb80b/LniNWTXsl5na4ZmYxzczLGHuFaZ9TRxz1Yk5GNxrPiZv0d\nr+C4Ovo8Dy+l6idUGQPOScZoSep9sqeIhG+aOEGTfraQ1+maicnnXNyGCfgazwuPVAufiUk4Iqm3\nYq0Il1PFqhwp3HOtjMf6VP0k/FKl3Wy8Ld5E0hh7utHMlf8ansnI8jpdszAZ4/SUrOJ1zkrqM9Eu\nVtDcKn1MSNpXktXVIlymuUicFaiVZbpu64aLRbBe14x/I65M1RthTzcONvl3Jm0q5V/szcimHeDa\n1Xg8I3svKVt0T/qqcb8wsKcyvcp1z+HVjGyUzj+rBZuEGx8m/rBjM+1PS9q3iRW6T+RIadv/Ee65\nkZya9JvO/PtkT4vesRyrUvUlwu0tS8m2HuDaHWKrl2YSHhKx62NxumZxD+MvFYb3RDaBItzkqoxs\nioiV7cKdb9Sp+zu4BC+m2o9IPrfjXLHCJ1cZa+9B9KuX2WJH9HdK1id7ejv5u5JSYXdS31zDtet0\n9SqtOmP9BlwjQsMmEbuqsSMp9TAE43TPcxaIZKtDZN7pm/YnsWrStCVttgmPNxS/ihXfTK7QNVz2\n2Z70hUeJO2liIh+TfB/TGN33sxpn6HQ/lVWzNvl8C7fjSY09XdMmdhhXi5A0DiuFO72jjn6mCRvg\nU7FFXSnc7FhcjEc1NpkeJXYEb6ZkjbIHESOrxc4VNVy7Qu0JH3yic6+c1+mauWIXcZVYAR3iRkv3\nP0XXGLpUeKIKQ/CHmIgKZ+MDscXbLbLtuv/8g3C9CIdpGmFPIcwQMWlwjmM+ont8zNIikqLRwhO2\n65rwzce7TdGuZ17HooysEfYUxo0iW86LNbi7hnazRL6xGfMyv80T7jVvFuHEjKwR9gwIBomsvKmv\nSHPkULOnpKSkpKSkpIn8D+ZxKyFedbmOAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$\\frac{K}{1 + \\frac{1}{p_{0}} \\left(K - p_{0}\\right) e^{- r t}}$$" + ], + "text/plain": [ + " K \n", + "──────────────────\n", + " -r⋅t\n", + " (K - p₀)⋅ℯ \n", + "1 + ──────────────\n", + " p₀ " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logistic = K / (1 + A * exp(-r*t))\n", + "show(logistic)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see whether two expressions are equivalent, we can check whether their difference simplifies to 0." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABHNCSVQICAgIfAhkiAAAAMRJREFU\nOI3N0r1OgkEQheEnlhqDxlYrA9wCLRfkdWhlLK30FmixsOMe+CnQRmOnUQstxGa+8GVgCRgLpjnZ\ns/PuZHcP/1jHuMETvvCAKxyugk7xghl6uMB9rIc4KoH9aDpL/mX416VpM0yxk/b28YFP7EkN3dA7\n/CTwHQPsopPBdui4cI1JaCuDjdC3Alj5BxncqOpgdWJjWWPNf83gKLRVAJuhC2+w0Xfk+lMAqqn1\nyJ2bR25kReTgBLd4xjcerRHyLa5fD28wqzSkqLgAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$0$$" + ], + "text/plain": [ + "0" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simplify(particular - logistic)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This test only works one way: if SymPy says the difference reduces to 0, the expressions are definitely equivalent (and not just numerically close).\n", + "\n", + "But if SymPy can't find a way to simplify the result to 0, that doesn't necessarily mean there isn't one. Testing whether two expressions is a surprisingly hard problem; in fact, there is no algorithm that can solve it in general." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Solve the quadratic growth equation using the alternative parameterization\n", + "\n", + "$\\frac{df(t)}{dt} = \\alpha f(t) + \\beta f^2(t) $" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution\n", + "\n", + "alpha, beta = symbols('alpha beta')" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nSUVORK5CYII=\n", + "text/latex": [ + "$$\\frac{d}{d t} f{\\left (t \\right )} = \\alpha f{\\left (t \\right )} + \\beta f^{2}{\\left (t \\right )}$$" + ], + "text/plain": [ + "d 2 \n", + "──(f(t)) = α⋅f(t) + β⋅f (t)\n", + "dt " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "eq3 = Eq(diff(f(t), t), alpha*f(t) + beta*f(t)**2)\n", + "eq3" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/latex": [ + "$$f{\\left (t \\right )} = - \\frac{\\alpha e^{\\alpha \\left(C_{1} + t\\right)}}{\\beta \\left(e^{\\alpha \\left(C_{1} + t\\right)} - 1\\right)}$$" + ], + "text/plain": [ + " α⋅(C₁ + t) \n", + " -α⋅ℯ \n", + "f(t) = ───────────────────\n", + " ⎛ α⋅(C₁ + t) ⎞\n", + " β⋅⎝ℯ - 1⎠" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "solution_eq = dsolve(eq3)\n", + "solution_eq" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$$- \\frac{\\alpha e^{\\alpha \\left(C_{1} + t\\right)}}{\\beta \\left(e^{\\alpha \\left(C_{1} + t\\right)} - 1\\right)}$$" + ], + "text/plain": [ + " α⋅(C₁ + t) \n", + " -α⋅ℯ \n", + "───────────────────\n", + " ⎛ α⋅(C₁ + t) ⎞\n", + "β⋅⎝ℯ - 1⎠" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "general = solution_eq.rhs\n", + "general" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAF0AAAApCAYAAABXwiUUAAAABHNCSVQICAgIfAhkiAAABBdJREFU\naIHt2V2MXVMUwPFfOx6oYqoSDVJTTQmZGa2qeKhmHiqaiScRor5GIzSZ8KIvCAlKxIgIkRBBCYlv\nUsFUUpoyUU2pjxeiZCKptFpVVCttajysczNn7tyZubdzzsy9nH9ycs/ed52911ln7b3X3ouCghzo\nwuf4El/j+knV5n/AzdiIk5LyTPERCnJiBnbhlCrlF2ADtmEF3sDJuWj2H2YFXq1S9lh8izMwCz/h\n8Zz0MjWvhuuAVjGPV6IFz+LlpHwJPsaP2CkM35OXYvVq9IVYjwNiuC/BFehLyZyKF/Ar9ho+Hfxl\n5PfrFyOhRDu+Su7bsEl4ey7Uo9EXCa/7SBhjE+7BnbgrkZmDL7Adi9EhFssnU+28j+Vi8YTjcc0I\nfR4Uc/9U3IejMnmTBmIjXkmVO3FYfIQS6/BA2XNL8UdZ3Y0iTPwm+b2h7P/S9DJbTEXf4Sbx0W89\nMvUbj1kYEJ5bYmlStzgpn56U92Nf6jogpppqaBajYhtWjVfpWqm3YXR28rslVXeW8MBPkvK5wqMX\nVnj+YJX97MXKI1EwC+rN6M3Ciw8n5ePEXL4jJXNIhHg7hIcXjJM5wuj3Cg9fK7bwv2NeIlPa9Lwl\nNjRzcTGeUJ+BQUNwhzDq33hJGLkvqStxPj4U08SfIty7fWLVLGho+sXwrvZ6cVK0bHDKF9IfxLCu\nlp8z1KWgID+mZNTOQEbtFNQhXYos0IRSZIFGYbk4YNqP78WRbJoZ4sx6bg1tNmIW6DXcNhEdXSoO\nnq4TWZjVYjfZlJLpwXM1tltvWaAlYre8XaxnXRVk2rAHJ2Tc9zA24KFUeRH+MbhgT8NvBk8Mq+UR\nsVOthsvwdHI/RRyCza6xv7HoFEfLl4sR3TWC3BZ0l1dmeVYxTRjz3VTdMrFFL0U3ncl9n+GMlgka\nLQvUYmjqbSKyQO8JJ3hdONVIrMVV5ZVZGr09aW8rjsG1iWLpXONFIvooDzHHygSNlgXqNzT1Vk9Z\noM24QNgjF1aKhfM88fUH0GvoS7+N5ys8W00mqF6zQPuMPL20CzvUEjTUxFMizTZdfN1uMU08lpJZ\nl8ilySITxKDRa2G1sc+XOsZoYzSjz0vaaE1XZjn05uPNRInNydViqNK7RfiXZryZoGY8KI57V+Hh\nGnR+1NiHduNZD05MftPH0pkZvUksWveX1beL4V1iq+FeMd5M0HhSb7uTKy9axTq1M4/GzxHD6DPh\nsWeKD7BHxMsl2kQqbmaqrhEzQdPFyJ4vpsW7k/vy0HQNnslLiauFp/aKTM4vIlxqryD7qeGxa6Nl\ngjpUnv/XpGSOFhvDC/NSogfvVCm7TEQWTWMJNjjd+KDSH1kN3wUijKuGXjF1nJZR3/XKIdySZwe7\ncGWeHRQUFBQUFBQUFEwW/wIiBxhbrB7n6wAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$- \\frac{\\alpha e^{C_{1} \\alpha}}{\\beta \\left(e^{C_{1} \\alpha} - 1\\right)}$$" + ], + "text/plain": [ + " C₁⋅α \n", + " -α⋅ℯ \n", + "─────────────\n", + " ⎛ C₁⋅α ⎞\n", + "β⋅⎝ℯ - 1⎠" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "at0 = general.subs(t, 0)\n", + "at0" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$$\\frac{1}{\\alpha} \\log{\\left (\\frac{\\beta p_{0}}{\\alpha + \\beta p_{0}} \\right )}$$" + ], + "text/plain": [ + " ⎛ β⋅p₀ ⎞\n", + "log⎜────────⎟\n", + " ⎝α + β⋅p₀⎠\n", + "─────────────\n", + " α " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "solutions = solve(Eq(at0, p0), C1)\n", + "value_of_C1 = solutions[0]\n", + "value_of_C1" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHMAAAArCAYAAABLnrd8AAAABHNCSVQICAgIfAhkiAAABMJJREFU\neJzt212IFWUcx/HP5l6UWhYVSRtmWUpRtpushGhZWFiIF10YCXURIUURREGURkVWZBHSCxjdSClW\n9HIRRV1EW21hb6aUkCkFkmZUWmkapm0X/znu7PHsObPbmXPO5nxhODPP2zz/+T9vM8/vUDBUzsT8\nZleiEkc1uwIjkCtxbrMrUZCdLvRgC27AqzgFl2AnNuNLjGlS/QoyMgbfiOF0PLbiqVR8DyY2vFYF\nw+JqPJect2E/JqTiv2t4jTLSqnPmNLyLfWKouxgL8FESfxL6cDs+w19i6JubsfwOPI9f8Zv+YRSm\nYkNyfj7Wit4Jp2H7cAxqBK3ozG58iPfEg12LB7AY9yZpOpPfG3GXfgesxuga5Z+BddiGmZgtGseK\nJH4/ThXP5kG0p/Kejh+HZdURygd4KXV9FQ4K55a4EwcwORU2SfTWrhrlv4OHy8Lm4I/kfALWYxMW\niYZ1WxI3Dl/gK8WKtibjhUNmp8LmJGEzU2Gr8HpZ3pMNdOY84ZDNogcTPasPe7EndewTQ+6Ipr12\nkoZyTvL7eSpsinBKbyqsEy+X5Z0h5s5Nwq4ncKnoceuE8y9IrqdVuPf+/1j3ptNqzjxe9JyDyfWx\nYq7ckUpztHBw+Xx/B14UvW4GNop5Ed7CFWKxMyYpb0/9q99cWm0BtF68DtwtHLZaLDgm4ewkzXlJ\nmmsxK0n3As5K8hELmG36+UGsYNdiV5K+Kyn3cjyj9Z7FkGk1A74XPfFmsTrdLebMr/FxkqZTzIP3\nYY34EnOCcOwO1dklPseNEwuq9XhcOPufOtpRkJGnHT5fljPDwAXScizMrUYFw6YXS2qkaRe9twNj\nxaLoxJzrVTBE2sRqNMsW1Hx8K74gLcqzUgUFBQUFBQUji7bkt6+ptSgoyImWFWzVotW+ALUChWBr\nBFJJtFUItobJQrHJu1c8vAUNvHc10VaP/ARbzbQ5N+aJDeHrxQNdit8xqkH3rybaykuw1Wybc6MH\ny1LX3WLXoq1i6vpzP25NzqcKqQoh2OqtlGEQViZlZaFHzjaXL4BqqeLqwWghAXkzFTZXbHmVXpHy\nVN8xuGgrL8FWI2weQLcYy5eIjeBVYs9vAy4bToGDcJFokcfhGFwnGk96i6qk+9mY3HsyXhHOyaK+\n+wmPCBlKJ943cEtsMNHWUAVbK2XrmXnbfBhZVHH14CbR4i4UBvbhbQMlLFnUd5UEW9RW39WTlbI5\nM2+bB5BVFVdiaRJX7ZhdIR88KxrNWEzHLWIofDKVppb6rl1sb3UIndBmsV+Zt/runrJy/xZDdjps\nVoV8edp8iFLLyKqKK7E8uXk1tg4S3onXhOGfJsdEA51fS303XWXB1p/yVd+tKKvXo0kd0k7Z5nDy\ntHlNKXHJmVlUcWl+SY6hMkpI/h8qC58q5i2yqe8GE2xtlK/6bmdylNidXG+pkidvmw9RypxFFVcP\npogFwGLReyYLI7uFtods6rvBaEX1Xd42H6JkYBZVXD3oEivNXeK9q1e02tn6X9azqO+2G9gqO5Kw\nVlTf5W1z03gMb9RIk0V9N5IEWw2zudGK9i58UiNNp1i2V+OAmE/eE6PLMq37X5H/rc0/45oq8UNR\n340UjkSbCwoKCgoKCgoaw7/T9KBs8RsWMAAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$\\frac{\\alpha p_{0} e^{\\alpha t}}{\\alpha - \\beta p_{0} e^{\\alpha t} + \\beta p_{0}}$$" + ], + "text/plain": [ + " α⋅t \n", + " α⋅p₀⋅ℯ \n", + "────────────────────\n", + " α⋅t \n", + "α - β⋅p₀⋅ℯ + β⋅p₀" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution\n", + "\n", + "particular = general.subs(C1, value_of_C1)\n", + "particular.simplify()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise:** Use [WolframAlpha](https://www.wolframalpha.com/) to solve the quadratic growth model, using either or both forms of parameterization:\n", + "\n", + " df(t) / dt = alpha f(t) + beta f(t)^2\n", + "\n", + "or\n", + "\n", + " df(t) / dt = alpha f(t) (1 - f(t)/K)\n", + "\n", + "Find the general solution and also the particular solution where `f(0) = p0`." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/latex": [ + "$$f{\\left (t \\right )} = - \\frac{\\alpha e^{\\alpha \\left(C_{1} + t\\right)}}{\\beta \\left(e^{\\alpha \\left(C_{1} + t\\right)} - 1\\right)}$$" + ], + "text/plain": [ + " α⋅(C₁ + t) \n", + " -α⋅ℯ \n", + "f(t) = ───────────────────\n", + " ⎛ α⋅(C₁ + t) ⎞\n", + " β⋅⎝ℯ - 1⎠" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "alpha, beta = symbols('alpha beta')\n", + "equation2 = Eq(diff(f(t),t), alpha*f(t)+beta*f(t)**2)\n", + "solution = dsolve(equation2)\n", + "solution.simplify()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nyWQyQ5BvADtQ0Igv7ZkuAAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$p_{0} = - \\frac{\\alpha e^{C_{1} \\alpha}}{\\beta \\left(e^{C_{1} \\alpha} - 1\\right)}$$" + ], + "text/plain": [ + " C₁⋅α \n", + " -α⋅ℯ \n", + "p₀ = ─────────────\n", + " ⎛ C₁⋅α ⎞\n", + " β⋅⎝ℯ - 1⎠" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "particular = solution.subs(f(t), p0)\n", + "particular2 = particular.subs(t, 0)\n", + "particular2.simplify()" + ] + }, + { + "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 +} From af804f3254348f3ca8936293c436065621b61c8b Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Thu, 5 Oct 2017 19:27:25 -0400 Subject: [PATCH 05/11] Chapter 5 Bryce Mann --- code/chap05mine.ipynb | 2056 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2056 insertions(+) create mode 100644 code/chap05mine.ipynb diff --git a/code/chap05mine.ipynb b/code/chap05mine.ipynb new file mode 100644 index 00000000..082d5db7 --- /dev/null +++ b/code/chap05mine.ipynb @@ -0,0 +1,2056 @@ +{ + "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": 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": [ + "### 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": 5, + "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", + "system = 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": 6, + "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": 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", + "
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": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = update1(init, system)\n", + "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": 8, + "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": 9, + "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": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(system, 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": 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
S0.609458
I0.004450
R0.386091
\n", + "
" + ], + "text/plain": [ + "S 0.609458\n", + "I 0.004450\n", + "R 0.386091\n", + "dtype: float64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta2 = 1/4\n", + "gamma2 = 1/5\n", + "\n", + "system1 = make_system(beta2, gamma2)\n", + "run_simulation(system1, update1)" + ] + }, + { + "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": 12, + "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": 13, + "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", + "system = make_system(beta, gamma)\n", + "run_simulation(system, update1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And then we can plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(system.S, system.I, system.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": 16, + "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": 18, + "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": 18, + "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", + "system = make_system(beta, gamma)\n", + "run_simulation(system, update1)\n", + "system.results.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can extract the results and plot them." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\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": [ + "**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": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def make_system2(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": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nyZMn4+npiaWlJf7+/vj7+xMYGMjYsWM5V3iv2P/RFln/In/48a5du9i3bx8LFy7k448/5ptvvrnt\nKKz8Pwxef/31YlexLvzeotfR6/VYmLm5RtHz8jv2i/5hcjflEUKUnbvaNufChQt88cUXrF27ls2b\nN/P333/f1c3q/W8zhcTERKPjCQkJJk1ioDaT+fn5YVko1DZt2hSAuNutRlcD2NrasmXLFr4rpgPI\n2dkZjUaDu7s71tbW3Co01fjSpUuG56mpqbz11ltotVqGDRvGihUr+OSTT/j77785e/Ysfn5+pKSk\nGP1bx8TE0KVLF9LT06lTpw6xsbE0bNjQkPbt28dHH31kFAxOnTpleP7PP/+QlpbGAw88AHDHzd/S\n0tKIj483vD5y5Agajcbwc5DPycnJ7PIIIcqOWX++6fV65s2bx9dff200BFSj0TB48GAWLlx4xy8H\nUJvLHB0dOXjwoGE0UmxsLHFxccXOzA8MDOSrr74iLy/P8JdodHQ0lpaWNGjQwKwPWF3Vrl2bsWPH\nsmzZMm7dukX//v2xs7MjOjqalStX8vjjj1O/fn3at2/PV199RceOHdHpdCxcuNDQDOTi4sKePXu4\ncuUKU6dOxd7enq1bt+Ls7Ezjxo1xdHSkVatWzJgxg5kzZ2JlZcX8+fPx8/PD29ubiRMnsmjRIurX\nr0/Xrl05fvw4ixYtYty4cUZlDQ0NJTQ0FGtra+bPn0/btm0NtQlHR0fDz0Bx/6cajYZXXnmFOXPm\nkJmZyfz58xk0aFCx55pbHiFEGVLM8MEHHyitW7dW1q1bp1y7dk3RarVKfHy8snbtWqVNmzbK2rVr\nzbmMoiiKsmTJEqVbt27K7t27lVOnTinDhg1TRo4cqSiKouTk5CgJCQlKTk6OoiiKkpiYqAQFBSmv\nvPKKcuHCBeWPP/5QevfurcycOfO297hy5YrSvHlz5cqVK2aXq6r6+uuvlaeeekoJCAhQWrdurQwc\nOFBZu3atkpubqyiKopw/f14ZMWKE0qZNG6VPnz7KN998o/Tt21fZtm2boiiKEhMTo4wfP14JDAxU\n/P39lREjRijHjx83XD8+Pl6ZMmWK0r59eyUoKEiZOnWqkpSUZMj/5JNPlH79+imtW7dW+vTpo6xZ\ns0bR6/WKoijKn3/+qTRv3lxZv369EhwcrHTo0EGZOnWqkpycbHj/vn37lG7duin+/v5KQkKCMnLk\n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\nISo5s4LK0qVLadKkCRERETg4OBiOZ2Zm8swzz7BixQo++OCDMiukEEKIqsGsPpVDhw7x/PPPGwUU\nAAcHB8aNG8ehQ4fKpHBCCCGqFrOCir29fYl5Go1GVpoVQggBmBlU2rdvz7p168gpstBidnY269ev\nL3YRQSGEEDWPWX0q06ZNY+jQoYSEhNCnTx88PDxISkri119/JSMjg88//7ysyymEEKIKMCuo+Pn5\nsWnTJt5//3127txJeno6zs7OdOrUicmTJ9/VyC+dTsfKlSuJjIwkIyOD4OBg5s2bZ9ae6RMmTCAz\nM5PPPvvM7PtVZ3369DFZTdjOzo769evz1FNP8cwzz1RMwSpIv379eOyxx3jhhRcquihC1FhmL33f\nokUL3nvvvfu+YXh4OJGRkYSFheHq6kpoaCgvvPACGzduvO37Nm3axG+//UZQUNB9l6E6GT9+PP/5\nz38Mr9PS0ti0aRMLFy7Ey8uLhx9+uAJLJ4Soacp1idjc3FwiIiKYOnUq3bt3p3Xr1ixfvpwjR45w\n5MiREt936dIlVqxYIX03xXBwcMDT09OQmjVrxuuvv46vry87duyo6OIJIWqYcg0qZ8+eJSMjw6i2\n4e3tTYMGDUoclqzT6ZgxYwbjxo2TpWLugrW1NZaWlgDEx8fz4osvEhAQQLdu3XjllVcM2xqAunHW\nJ598Qv/+/WnXrh2DBw9m9+7dhvzo6GjGjx9Pp06dCAoK4rXXXjPs/Dhz5kxGjRpldO8TJ07QokUL\nLl68CMAvv/zCY489Rtu2bXnooYf46KOP0Ov1gLqAXYsWLVizZg1du3Zl4MCB5Obm3rHMOTk5zJ8/\nn86dOxMUFMTatWvL5N9RCHF3yjWoXLt2DYA6deoYHffy8jLkFfXhhx8CMHbs2LIt3P9sP7edCdsn\nMGH7BLaf226Sv/n0ZkP+zzE/m+RvOLHBkL/30l6T/PVH1hvyD8YdLPXyZ2VlsX79emJiYnjsscfI\nzMxk1KhR2NrasmnTJj766CPy8vL4z3/+Q25uLgDr1q3jvffeY9KkSWzfvp2HHnqIyZMnc/78eWJj\nY3n66adxcXHh888/Z/Xq1Zw9e5Znn30WnU7HkCFDOHTokNEX/vbt2+nQoQONGjVi9+7dTJ8+ndGj\nR/P999/z6quvEhERwerVq43K/f3337NhwwaWLl2KVqu9Y5lDQ0PZuXMny5cv57PPPuPgwYNcvny5\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "beta2=1/4\n", + "gamma2=1/5\n", + "\n", + "def make_system2(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)\n", + "\n", + "system2=make_system2(beta2, gamma2)\n", + "run_simulation(system2, update1)\n", + "results = system2.results\n", + "plot_results(results.S, results.I, results.R)\n" + ] + }, + { + "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": 22, + "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": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.333 0.25 0.467162931836\n" + ] + } + ], + "source": [ + "system.beta = 0.333\n", + "system.gamma = 0.25\n", + "run_simulation(system, update1)\n", + "print(system.beta, system.gamma, calc_total_infected(system))" + ] + }, + { + "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": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_sick_students(system):\n", + " infected = system.results\n", + " return infected.I.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.04375143379921393" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system=make_system(beta, gamma)\n", + "run_simulation(system, update1)\n", + "results = system.results\n", + "calc_sick_students(system)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_peak_sick(system):\n", + " day = system.results\n", + " return day.I.idxmax()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "30" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calc_peak_sick(system)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def calc_sick_at_end(system):\n", + " sick_end = system.results\n", + " return sick_end.I[system.t_end]" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.00066581546730605859" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "calc_sick_at_end(system)" + ] + }, + { + "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": 55, + "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": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.3333333333333333, 0.25)" + ] + }, + "execution_count": 56, + "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", + "system = make_system(beta, gamma)\n", + "system.beta, system.gamma" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And run the model without immunization." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.46832081102878098" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_simulation(system, update1)\n", + "calc_total_infected(system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now with 10% immunization." + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.30650802853979753" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system2 = make_system(beta, gamma)\n", + "add_immunization(system2, 0.1)\n", + "run_simulation(system2, update1)\n", + "calc_total_infected(system2)" + ] + }, + { + "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": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system.results.S, '-', label='No immunization')\n", + "plot(system2.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": 60, + "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", + " system = make_system(beta, gamma)\n", + " add_immunization(system, fraction)\n", + " run_simulation(system, update1)\n", + " print(fraction, calc_total_infected(system))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This function does the same thing and stores the results in a `Sweep` object." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "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": 62, + "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": 63, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEjCAYAAAAc4VcXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4lFX68PHvzCSTHtILhBpSICEQAgFpSrMjroBSBOEn\nLiyKFEVAWV1WVxcWESlrw1UiiKKA676AFKWICKEHhNAhBAjpvUxm5nn/GDJkUmCA9Nyf68qVPP2e\nyczcc855zjkqRVEUhBBCiDukru0AhBBC1E+SQIQQQtwVSSBCCCHuiiQQIYQQd0USiBBCiLsiCUQI\nIcRdkQRSxpIlSwgJCbnlz8mTJ2s0prS0NPLz883Ls2bNIiQkpEZjKHleEhMT7/jYPXv28MgjjxAe\nHs7IkSOrPDaj0XhXcVVm3bp1hISEsG/fvio7571KTEwkJCSEJUuW1HYoVWrfvn2EhISwbt26arvG\n5cuXLZZDQkKYNWtWtV2vupR9HHWBTW0HUFdNnDiRNm3aVLitadOmNRbHzp07efXVV1m/fj2Ojo4A\nPPPMM9x33301FgPAwIEDadGiBR4eHnd0nNFo5JVXXkGj0TB79mz8/PyqNK7c3FzGjh3L/fffz+TJ\nk6v03HWJh4cH8+fPr/EvDtUtMDCQ+fPn07lz52o5/5tvvsmFCxf46quvzOvmz59PixYtquV61WXt\n2rXMnTuXuLi42g7FgiSQSvTo0YNu3brVdhjExcWRnZ1tsS4yMpLIyMgajSM0NJTQ0NA7Pi4lJYX0\n9HTGjRvHqFGjqjyuzMxMjh07xv3331/l565LHB0dGTx4cG2HUeW8vLyq9XHt3r2bZs2aWayrj8/j\n/v37KSoqqu0wypEqLFGtiouLAXBycqrlSIQQVU0SyD3o168fc+bM4fXXXyciIoI+ffqQnp6Ooiis\nXr2aoUOHEhkZSYcOHXj44Yf59NNPKTtyzNGjR3nhhRfo0qUL3bp1489//jOnTp0CTG0dS5cuBaB/\n//6MHj3avL5sVcaVK1eYMWMG3bt3p0OHDjzxxBOsWbPGYp9Zs2bx8MMPExcXx7PPPkvHjh3p0aMH\n77zzDoWFhbd8rGXbQJYsWUKHDh24ePEiEyZMIDIykq5duzJz5kwyMjLM+/Tv3x+ApUuXWrQrZGVl\n8fbbb9O7d2/Cw8N55JFHWLFiRbnnJzc3l3fffZcHHniAjh07MmjQIL777jvAVH9e9vwl8RUVFfHB\nBx/Qr18/wsPD6d+/Px9++CE6nc7i/GlpacyePZvu3bsTFRXF7NmzycnJueVzkZycTLt27XjnnXcq\nfJ5CQ0O5cuUKAJs3b2bIkCFERkYSFRXFuHHjOHjw4C3PX5GybSAlyz/++CPz5s2jR48eREZGMmnS\nJNLT04mLi2P48OF07NiRhx56iI0bN5rPVdLusGfPHt544w26du1qfuz5+fns3LmTwYMH07FjRwYP\nHszvv/9uPray9qGy60uW4+PjeeWVV+jatas5vtLtVWXbQEpe25X9lEhJSWHu3Ln079+f8PBwoqKi\nGDNmjMVzGxISwpUrV4iNjbW4RkVtINu2bWP48OFERETQpUsXJk6cSHx8vMU+ISEhfPrpp3zxxRcM\nGDCA8PBwBg0axKZNm277/wsJCWHRokVMnDiR8PBwHnvsMfR6PcXFxXzyySc88cQTdOzYkYiICJ54\n4gm+//5787GjR49m/fr1FcZ++PBhxo0bZ66V+L//+78areaSKqxK5OTkkJ6eXm69i4sLtra25uUN\nGzbQpk0bXn/9dVJTU/Hw8OCDDz7g448/5k9/+hNPP/00eXl5/PDDD7z//vs4OTmZq3IOHDjA2LFj\n8fHxYfz48djb2xMTE8OYMWNYu3YtzzzzDLm5uWzdupXZs2cTFBRUYayXL1/m6aefpqioiGeffRZv\nb2+2bNnCX//6Vy5evMhrr71m3jc9PZ3nn3+eRx55hCeeeIJdu3bx1VdfodVqLfazhtFoZMyYMXTp\n0oWZM2dy7Ngxvv/+ewoLC/nwww8ZOHAgLi4uvPfeewwcOJCBAwcSGBhIfn4+zz77LNeuXWPkyJH4\n+fmxd+9e3n33XS5evMhbb70FgE6nY9SoUZw5c4ann36a0NBQdu7cyZw5cygoKODRRx9l9uzZFuf3\n8PDAYDAwYcIEDh06xNNPP01gYCDHjx/n448/5uTJk3z00UeoVCrz85WYmMiYMWPw9vZm/fr1/PTT\nT7d83D4+PnTr1o3Nmzfz+uuvo1bf/B62ceNGOnfuTLNmzYiNjWXatGn06dOHYcOGUVBQwMqVKxk3\nbhwbNmygefPmd/R8V2TBggV4e3vz0ksvcfbsWVatWkVGRgbnz5/nqaeeYtCgQcTExPDaa68RFhZG\ny5YtzcfOmjWLtm3b8sorrxAbG8u6detISkrixIkTjB49GhcXFz799FOmTJnCtm3bcHV1veP4/vKX\nvxAYGMi0adO4fPkyK1asIDk52eIDsrSK2vfi4+P5z3/+Q9++fQEoLCxk1KhR5OTkMGrUKHx9fbl4\n8SKrV69m/PjxbNu2DU9PT+bPn897772Hu7s7EydOrLSdZdWqVfz9738nPDyc6dOnk5uby9dff82I\nESNYsWIFERER5n1Xr16N0Whk1KhR2Nvbs2LFCqZNm0ZgYCDBwcG3fC5WrFhB586dmTNnDoWFhdjY\n2PDqq6+yadMmRowYwejRo8nIyGDNmjW88cYbeHt7c//99zNx4kSMRiMHDhywaL/57bffmDBhAqGh\noUyZMgWdTse6desYNWoUX3zxBV26dLH6/3TXFGFh8eLFSnBwcKU/e/fuNe/bt29fJTQ0VElKSjKv\n0+l0SufOnZVp06ZZnDcnJ0cJDw9XJkyYYF43dOhQpWfPnkp6erp53fnz55XQ0FBl3rx5FvFcvnzZ\nvM/MmTOV4OBg8/LUqVOV0NBQ5fjx4+Z1BoNBmTBhghISEqKcPn3a4riYmBiL2B555BGlV69eVj0v\nJXGULL/33nsW+z3//PNK+/btlfz8fEVRFOXy5ctKcHCwsnjxYotzhYWFKfHx8RbHvv/++0pwcLBy\n8uRJRVEUZdWqVUpwcLDy448/mvcxGo3KyJEjlZ49eyoGg6HC869du1YJDg5Wdu3aZXH+b775RgkO\nDla2bt2qKIqifPXVVxbLiqIoeXl5yqOPPlruf13W999/rwQHByv79+83rzt58qQSHBysfP3114qi\nKMpbb72lREZGKkaj0bxPfHy88uCDDyqbNm2q9NwVKfs4S5b79OmjFBQUmPcbMmSIRQyKoii//fab\nEhwcrHz77beKoijK3r17leDgYGXIkCGKwWBQFMX0eunZs6cSHBys7Ny503zsmjVrlODgYGX37t2K\notx8bss+N2XXlyy/9NJLFvu9+eabSnBwsHLhwgWLWNauXVvh405LS1P69u2rDBw4UMnOzlYURVE2\nbNhQ4f939erVSnBwsLJ582bzur59+yrPPvusxX7BwcHKzJkzFUVRlPT0dKVjx47K0KFDlaKiIovn\nu2PHjsqQIUMsjuvUqZOSnJxsXnfkyBElODhYWbhwYYXxlz62S5cuFv+r5ORkJSQkRFmwYIHFvufO\nnVOCg4OVt99+27yu7HveYDAo/fv3V4YPH67o9Xrz+ry8PGXgwIHK4MGDbxlPVZESSCVmzpxZYaNx\n2XUtWrTA19fXvGxra8uePXvMdf8lMjIycHZ2Nt+Om5aWRlxcHP/3f/+Hu7u7eb/WrVuzdu1a/P39\nrYrTYDCwY8cOevXqRVhYmHm9Wq1m4sSJbN++nV9++cWi9PLII4+Ue0zWFMMrUvZc7dq149dffyUz\nMxMHB4cKj9myZQvBwcF4e3tblPIGDBjAJ598wvbt2wkNDWXHjh14eHjw+OOPm/dRqVTMnz8fvV6P\nSqWq9PweHh6EhYVZnP/+++9Ho9GwY8cOBgwYwK5du/Dy8mLAgAHmfRwdHRk2bBjvvffeLR/3Qw89\nxNy5c9m0aZP5m97GjRuxtbXl4YcfBsDPz4+8vDzeeecdRo4cSWBgICEhIWzevPmW574TvXv3xt7e\n3rzcqlUrjh07xsCBA83rAgICAFPVW2n9+/c3l57UajXNmzcnJyeHPn36lDs2JSXlruKr6PUBkJqa\nSqtWrW55rF6vZ8qUKaSnp/Ptt9/i4uICwKOPPkr37t0t3jelqyZL3/J+O7///jsFBQWMGzcOrVZr\nXh8QEMATTzzBt99+S3JyMj4+PgBERUXh7e1d7vFY8/xERERY/K+8vb05ePCgRQlWURT0ej0AeXl5\nlZ7rxIkTXL58mREjRpCVlWWxrW/fvnz55Zdcv37d4rOpOkgCqURYWJhVd2F5enqWW2dra8uOHTv4\n+eefuXDhApcuXTL/k5UbdfwldeSlqxRKtG/f3uo4MzIyyM/Pp3Xr1uW2BQYGWlyrRNlbcbVaLUaj\n0epr3u5cYEpslUlISKCwsLDSW5GvXbsGmOJu0aJFuURR9q6ais6fnp5u1fkrqkaq6Lksy9nZmQce\neIDNmzfzxhtvoFar2bRpE7169TJ/sD377LPs3r2blStXsnLlSgICAujbty9Dhw69qzvaKlL29Wdj\nY1NufckHlFKmfcnLy6vcsWX/nyXH3u3ro/SHPFj3+ijx7rvvEhsby4IFC8q1+alUKj799FMOHz5M\nQkICCQkJ5i9tdxJrSXtMRbfsl7x/rl69ak4glb3erblmRbfAa7VafvzxR3bv3s3Fixe5dOmSOXGU\n/X+VlpCQAJhuSZ4/f36F+1y9elUSSF2n0WgslhVFYdKkSWzfvp2oqCgiIyN55pln6Nq1K88995x5\nv5IXXGXfoq11qxdZyTVKf7MCLL7x3Ku7id9gMBAVFcVLL71U4faSN6vBYLjr87dq1crcllJWSV2+\nSqWq8OaBWz2npQ0aNIjNmzdz8OBB7O3tSUhIYOrUqebtzs7OrFy5kiNHjrBt2zZze9OqVauYP38+\ngwYNuuPHVlZJwijLmuet7GvX2uMqUllCuNvX2nfffceqVasYPXp0uefp/PnzjBgxguLiYnr16sWj\njz5Ku3btUBSFF1988a6uV5GS10HpNs97ee+Ufb6LiooYOXIkJ0+epFu3btx3332MHTuW6OhoHnjg\ngVueq+S9PWXKFDp16lThPpX1Y6tKkkCq2IEDB9i+fTuTJk1iypQp5vV6vZ7MzEzzN96SKqqSbxKl\n/etf/6JJkyb8+c9/vu31PDw8cHR05Pz58+W2XbhwAaDKO+/dq2bNmpGXl0ePHj0s1mdlZfH777+b\nS2VNmzY135FW2s6dO9m4cSMzZsyo8PwBAQEcP36c7t27W7zhi4uL2bp1q/n5CAgI4MCBA+j1eosP\nYmt7/N5///24urqybds2NBoNjo6O9OvXz7z9woUL5OTk0KlTJzp16sSrr77K2bNnzY2cVZFAalrJ\n81n2brbU1NQqu8ahQ4eYO3cuUVFRzJw5s9z2zz77jOzsbDZt2mRRDfa///3vjq9VUpo9f/58uVJh\nyXuqut4/mzZt4vjx4/zjH/9g6NCh5vXXr1+/7bElcTs6OpZ7H8XFxZGVlWVRXVZd5DbeKpaZmQlA\n27ZtLdavWbOGgoICc/2mr68voaGhbNiwgdzcXPN+ly9fJiYmxvyGrKz6oYRGo6F379789ttv/PHH\nH+b1iqLw2WefoVKpbvttpqb169eP+Ph4du7cabH+o48+YsqUKZw5cwaAPn36kJqaytatWy32W7Fi\nBTt27MDd3d38ra50FUK/fv3IzMxk9erVFsd98803TJs2zXxb6oMPPkhOTo75tmAwJZmytz9XRqvV\n8tBDD5mrKwcOHGjR7vPOO+8wadIki7rsNm3a4OrqWqWlwJpUUv9fejgfvV7Pli1bquT8169f5+WX\nX8bd3Z1FixZZfPsvUdK+VnpECJ1OxzfffANYlobUavUtq5d69OiBnZ0dX3zxhUVSTEpK4n//+x8R\nEREVVlNXhco+K2JiYgDMnxVQvioxPDwcb29vvvrqK4vXV25uLlOnTmX27NkVljCrmpRAqlhkZCTO\nzs689957XLlyhSZNmrBv3z42btyInZ2dxT979uzZjB8/niFDhjBs2DDUajUrV67E1dWVF154AbhZ\nb7p8+XL69Olj7vdQ2quvvsq+ffsYPXo0o0ePxtvbm61bt7J3717GjRtX7gVa2yZMmMCWLVt48cUX\nGT58OEFBQRw8eJD//ve/9OnTx9yIO3z4cNauXcu0adMYNWoUrVu3ZseOHfz222+8++67aDQa3Nzc\nUKvV/PzzzzRt2pQHH3yQYcOGsX79et5++23++OMPIiIiOH36NN9++y1hYWE89dRTgKlH8po1a3j7\n7bc5d+4crVq14scff7yjBuPS/VLmzJljsW3cuHG88MILjBo1iieffBI7Ozu2bdtGQkIC8+bNM+/3\n22+/kZqaWi96SEdHR+Pt7c2///1vioqK8PT05L///e8dNVzfyosvvkhKSgqTJ0/mwIED5W5G6dmz\nJ3369OGXX35hwoQJPPzww+Tk5PDDDz+YS/Ol32MeHh7Ex8fz9ddfEx0dXe694O7uzvTp03nvvfcY\nMWIEgwYNIi8vz3y7btn/aVXq0aMHNjY2vPbaa4waNQobGxu2b9/O7t27sbW1Lfc4ABYvXmyu7poz\nZw7Tpk3jqaeeYujQodjZ2fHdd99x9epVFixYUGn1ZlWSBFLFvLy8+PTTT1mwYAEfffQRWq2W1q1b\ns3DhQuLi4sylCy8vL7p3786KFStYvHgxy5Ytw87Ojq5duzJjxgzzN73HHnuMLVu2sG7dOmJjYytM\nIC1atGDNmjUsWrSIb775hsLCQgIDA8sVjesKNzc3vv32WxYvXsxPP/3Et99+S9OmTZk0aRJ//vOf\nzd+27O3t+eqrr1i0aBEbNmwgJyeHwMBAFi1aZL67x8HBgWnTpvH555/zzjvv0KJFC7p168aXX37J\nsmXL2Lx5Mz/++CM+Pj6MGDGCF1980VxK0Gg0fP755yxcuJBNmzaRn59Pnz59GDt2LNOmTbPqsXTt\n2hU/Pz+Ki4vLVSX06tWLjz76iE8++cT8gRsUFMTChQt57LHHzPt9/PHHxMbG1osEYmtry/Lly/nn\nP//J8uXLcXR05PHHH+fBBx/k2WefvefzHzt2DKDSQSNjYmIYPnw42dnZfPfdd7zzzjt4eXnRqVMn\nli5dyvDhw9m7dy9jx44FYPLkybz11lu8++67vPjiixV+mSrpi/Wf//yHhQsX4uDgQHR0NC+99FK1\njj0WHBzM4sWLWbp0KQsXLsTJyYmgoCC++OILvv76a2JjYykuLsbW1pYRI0awd+9eli9fzrFjx7jv\nvvt4+OGHadKkCR999BH//ve/UavVBAUF8dFHH5n7zFQ3lWJti6EQQghRSv2siBVCCFHrJIEIIYS4\nK5JAhBBC3JUG2YheWFjI8ePH8fb2rpFb2YQQoiEwGAykpKQQHh5uVT+SBplAjh8/Xi2TFwkhRGOw\natUqq0bzbZAJpOQW2FWrVtW5XthCCFFXJSUlMWrUKIsBI2+lQSaQkmorPz8/82iiQgghrGNt1X+D\nTCCVOXYulaNnUujQxouOwdZlWCGEEBVrVHdhHYpPJjOniN1xV8nMqXsT1AshRH3SqBKIVxPTXQWK\nonD0zN1NkCOEEMKkUSWQiKCb1VbxF9MpLNLfYm8hhBC30qgSSICPM15upoH0ig1G/riQVssRCSFE\n/dWoEohKpaJTqcbzY2dTMRjubqpOIYRo7BpVAgEICnDDyd40SU1uQTFnEzNrOSIhhKifGl0C0WjU\ndGjrZV4+cjrF6jmwhRBC3NToEghAeBtPbDSmh56SWcDV1LzbHCGEEKKsRplA7O1sCG3lYV4+ciq5\nFqMRQoj6qVEmEICOQTersS5cyyYjp7AWoxFCiPqn0SYQdxd7Wvu7mpePnkmtxWiEEKL+abQJBLAY\nD0s6FgohxJ1p1Amkmbcz3jc6FuoNRo6fl46FQghhrUadQFQqlUUpJE46FgohhNUadQIBy46F+YXF\nnJGOhUIIYZVGn0CkY6EQQtydRp9AwNSx0PZGx8LUzAISk3NrOSIhhKj7JIFQvmOhzBUihBC3Jwnk\nhoggL1QqFQAXr2WTkS0dC4UQ4lYkgdzg7mJPK4uOhVIKEUKIW5EEUkrpuULiL2VQIB0LhRCiUpJA\nSmnq5YS3+82OhX9Ix0IhhKiUJJBSVCoVnYKkY6EQQlhDEkgZbQPccHYo1bHwsnQsFEKIikgCKaNc\nx8Iz0rFQCCEqIgmkAmGtpWOhEELcTo0nEIPBwPvvv0+vXr2IjIzk5ZdfJjXVurk4JkyYwOjRo6s5\nwgpmLDwtt/QKIURZNZ5AlixZwvr165k3bx4rV64kKSmJyZMn3/a4b775hh07dlR/gDd0DPI2dyy8\nlJRNunQsFEIICzaVbfjb3/52RyeyZn+dTkdMTAxz5syhZ8+eACxcuJD+/ftz6NAhOnfuXOFxly5d\n4oMPPiAyMvKOYroXbi52tPJ35cLVLMDUsbBvVPMau74QQtR1lSaQ7du3WyynpaWh1+vx8fHB29ub\nzMxMrl69ip2dHW3btrXqYvHx8eTl5REdHW1eFxAQQLNmzThw4ECFCcRgMDBz5kzGjx/PxYsXSUhI\nsPax3bPIYG9zAjl1KYNuYX443hj6XQghGrtKq7B27txp/pk5cyYeHh58/fXX7Nq1i7Vr1/Lzzz+z\nfv16vLy8ePLJJ626WFJSEgC+vr4W6318fMzbyvrkk08AeP755626RlXy93LCx90RkI6FQghRllVt\nIO+//z7Tp08vV0IIDQ1l6tSpfPrpp1ZdrKCgALVaja2t5bd4rVZLUVFRuf2PHz/OF198wbx581Cr\na/6GMZVKZTG8SdzZVPTSsVAIIQArE0h6ejpubm4VbrO3tycvL8+qi9nb22M0GtHrLceY0ul0ODg4\nWKwrKiritddeY+rUqbRs2dKq81eHwFIdCwuK9JxJkI6FQggBViaQjh078vHHH5Oba9kfIj09naVL\nl9K1a1erLubv7w9ASorlbbHJycnlqrWOHj3KuXPnWLBgAZGRkURGRvLDDz9w4MABIiMjuXr1qlXX\nvFcatYqItjdLIUdOJ0vHQiGE4BaN6KXNnDmTZ599lgceeIAuXbrg4eFBWloasbGxODk5sWTJEqsu\nFhoaipOTE7GxsQwePBiAxMRErly5Ui4JRUREsGXLFot1Cxcu5OrVqyxYsAAfHx+rrlkV2rfxYP/J\nJIr1RtKyC0lMzqW5r0uNXV8IIeoiqxJIu3bt+H//7//xxRdfcPDgQc6ePYu7uzujR49m7NixeHh4\n3P4kmNo6Ro4cyfz583F3d8fT05O5c+cSHR1Np06d0Ol0ZGVl0aRJE+zt7ctVXTk7O1e4vrrZa21o\n18qDuLOmDo+HTydLAhFCNHpWJRAwVT+9/vrr93zBqVOnotfrmTFjBnq9nt69e/Pmm28CcPjwYcaM\nGUNMTAzdunW752tVpY5B3hw7l4aiKCQk5ZCWVYBnE4fbHyiEEA2USrGyQl9RFH766Sf27NlDSkoK\ns2fPJi4ujrCwMNq0aVPdcd6RxMRE+vfvz88//0xAQECVnXfjngucv2LqF9K+tSf9ukjHQiFEw3Gn\nn51WNaLn5uYyatQopk2bxu7du9m5cye5ubn88MMPPP3008THx99z4PVB6Vt6T11KJ7+wuBajEUKI\n2mVVApk/fz4JCQmsW7eOrVu3mu9CWrRoEa1atWLRokXVGmRd4e/phK+HqWOhwahw/Jx0LBRCNF5W\nJZCtW7cyffp02rdvbx5gEMDFxYWJEydy+PDhaguwLlGpVHQsNWPhsXPSsVAI0XhZlUDy8/Px9PSs\ncJudnV2FvcgbqrYBbrg4agFTx8JTlzJqOSIhhKgdViWQsLAw1qxZU+G2TZs20b59+yoNqi5Tq1VE\nlJqx8KjMWCiEaKSsSiBTpkxh586dDB06lI8++giVSsWWLVuYMmUK//3vf5k0aVJ1x1mntG/jia2N\n6alLzy4kISmnliMSQoiaZ1UC6datG8uXL0elUrFs2TIUReGTTz7h4sWLLFu2jF69elV3nHWKna2G\n9q1vVukdOSMzFgohGh+rOxJ2796d7777jry8PLKysnBxccHFpfH2xu4Y5E3c2VQUReHy9RxSMwvw\ncpOOhUKIxsOqEshDDz1k7uvh5ORE06ZNzckjLi6OHj16VF+EdZSrk5bAZk3MyzJvuhCisam0BLJx\n40YMBgNgmlL2l19+4cyZM+X227NnD4WFjXO+8E7B3pxNNA3vfvpyBvd18MfJQWYsFEI0DpUmkCNH\njhATEwOY+j8sXry40pOMHTu2ygOrD/w8nfD3dOJaWh5Go0Lc2VTu6+Bf22EJIUSNqDSBvPrqqzz3\n3HMoisKAAQNYunQp7dq1s9hHo9Hg7OyMs7NztQdaV3UM9uba76YJtf44n0aXdj7Y2mhqOSohhKh+\nlSYQrVZLs2bNANiyZQv+/v6kpKTQtGlTADIyMkhISMDPz69mIq2j2jRtgquTluw8HYU6PfGXMugQ\n6HX7A4UQop6zqhHd2dmZMWPGMG7cOPO6uLg4nnnmGZ5//vlyMxU2Jmq15fAmR09Lx0IhRONgVQL5\n17/+RVJSEn/961/N63r37s2XX37JhQsX+OCDD6otwPqgXSsP7GxN1VaZuUVcvJZdyxEJIUT1syqB\n7Nq1i9dee82iw6BaraZ79+5Mnz6drVu3VluA9YHWVkP7NqU6FsotvUKIRsCqBFJQUICDQ8Wd5Fxc\nXMjOlm/cHdt6ob4xUvGVlFyS0/NrOSIhhKheViWQjh078tVXX6HX6y3WG41GVq1aRXh4eLUEV584\nO2pp29zNvCzDmwghGjqrhjKZPHkyY8aM4aGHHuKBBx7Aw8ODjIwMdu3axbVr1/jyyy+rOcz6oVOQ\nN6cTTMO7n72cSY8O/jjfGPpdCCEaGqtKIJ07d2b16tWEhISwYcMGli5dyn//+1/atGnDqlWriIqK\nqu446wUfD0eaepn6xBgVU8dCIYRoqKweTLFDhw78+9//rs5YGoTIEG+upppuazZ1LPRFaysdC4UQ\nDY/VCQRv/4hQAAAgAElEQVRMfT/27NlDSkoK48eP58KFC4SGhuLh4VFd8dU7rfxdcXO2IzO3iKJi\nAycvplv0ExFCiIbCqgRSXFzMzJkz2bhxIzY2NhgMBp566ik+++wzzp07x6pVq2jevHl1x1ovlMyb\nvvNwImCasbBDoBdqteo2RwohRP1iVRvIhx9+yI4dO1iyZAn79+8397SeO3cuDg4Ojb4jYVmhrdyx\n15pyc3aejgtXs2o5IiGEqHpWJZAff/yR6dOnM3DgQLTam3cVtWjRgpdffpl9+/ZVW4D1ka2NhjDp\nWCiEaOCsSiCZmZm0bt26wm3u7u6NeiysynRoe7Pa6lpaHklpebUckRBCVC2rEkjbtm3ZuHFjhdt+\n/fVXAgMDqzSohsDZwZbgUh0Lj0rHQiFEA2NVI/qECROYMmUKOTk59O3bF5VKxZEjR9iwYQNfffUV\n//znP6s7znqpU7AP8ZdudCxMzOK+PB2uTtKxUAjRMFg9J/o///lPDh8+zOzZs1EUhbfffpt169bx\n+uuv8/jjj1d3nPWSl5sDAT6mueMVRSHurJRChBANR6UlkC+++ILHHnsMHx8fAJ588kkGDx7M2bNn\nyczMxMXFhbZt22Jjc0ddSRqdyGBvEpNzADhxIZ2u7f3MQ78LIUR9VmkJ5MMPP+Ty5csAhIeHc+zY\nMVQqFUFBQXTt2pXQ0FBJHlZo4eeCh6s9ALpiAycvpNVyREIIUTUqzQDOzs6sWLGCK1euoNfr2bVr\nFxcvXqz0RIMGDaqO+Oq9ko6F2w+akvHRM6lEtPWWjoVCiHqv0gQyfvx45s+fz5YtW1CpVCxZsqTS\nk6hUKkkgtxDS0p29x69RUKQnJ1/HuSuZBDV3r+2whBDinlSaQMaOHcvQoUPJysqif//+LF26lHbt\n2t3zBQ0GA4sWLWL9+vXk5eXRu3dv3nzzTby8vCrc//vvv+fzzz8nMTGR5s2b8/zzzzNkyJB7jqMm\n2WjUdAj0IvZEEmDqWNg2wA2VSkohQoj665aNGM7Ozjg7O/P2228TFRWFu/u9f2tesmQJ69evZ968\nebi5uTF37lwmT57M6tWry+27efNm/va3v/H3v/+drl27snfvXv7617/i5uZG//797zmWmhQe6MnB\n+OsYjArX0/O5lppHU2/n2g5LCCHumlWt4MOGDSM/P5+dO3dSUFCA0Wgst8+jjz562/PodDpiYmKY\nM2cOPXv2BGDhwoX079+fQ4cO0blzZ4v9MzIyePnll3nqqacAaN68OatWreL333+vdwnE0d6WkJYe\nnLjRiH4wPlkSiBCiXrMqgezZs4eXX36ZvLw880CKpalUKqsSSHx8PHl5eURHR5vXBQQE0KxZMw4c\nOFAugQwfPtz8t16vZ+vWrZw7d44pU6ZYE3adExnizcmL6SiKwqWkbFIzC/Byq3iueSGEqOusSiD/\n+te/aNGiBa+99hp+fn6o1Vb1PywnKcnUBuDr62ux3sfHx7ytIseOHeOZZ57BYDAwdOhQHnjggbu6\nfm1zd7GnTbMmnEvMBODwqWQGdmtZy1EJIcTdsSqBnD17lmXLltG9e/d7ulhBQQFqtRpbW1uL9Vqt\nlqKiokqPCwgIYO3atZw4cYJ//OMfeHl5MW3atHuKpbZ0DvExJ5AzlzPpFu4vw5sIIeolq4oS/v7+\n5Ofn3/PF7O3tMRqN6PV6i/U6nQ4Hh8qrctzd3WnXrh1Dhgxh4sSJfPnllxgMhnuOpzb4ejiahzcx\nKgpHTifXckRCCHF3rEog48ePZ9myZVy/fv2eLubv7w9ASorlmFDJycnlqrUAYmNjOXnypMW6kJAQ\nCgsLycqqv5M0dQ65OcXtiQvp5BcW12I0Qghxd6yqwvrll19ISkqib9+++Pn5YW9vb7FdpVKxYcOG\n254nNDQUJycnYmNjGTx4MACJiYlcuXKFrl27ltv/s88+Q61W88knn5jXxcXF4enpWSW3FNeW5r4u\neLs5kJJZgN5g5NjZVLqF+9d2WEIIcUesSiAuLi5V0nCt1WoZOXIk8+fPx93dHU9PT+bOnUt0dDSd\nOnVCp9ORlZVFkyZN0Gq1PPfcc4wfP57PP/+cAQMGEBsby/Lly5k1a1a97oSnUqnoHOrD5r2XAIg7\nl0rnUB9sbWSQRSFE/WH1XVhVZerUqej1embMmIFerzf3RAc4fPgwY8aMISYmhm7dutGrVy8WL17M\n0qVL+fDDD/H392fOnDkMGzasyuKpLYHN3GjinERWbhFFOgN/nE+jU7BPbYclhBBWUykVdewA0tLS\ncHNzQ6PRkJZ2+xFkPT09b7tPTUlMTKR///78/PPPBAQE1HY4lTp+LpUdhxIB0wyGox9ph0Zzd7dI\nCyHEvbrTz85KSyC9evXi22+/JSIigp49e962yqhsY7e4vdBWHsSeuE5+YTG5BcWcTsikXWuP2g5L\nCCGsUmkC+fvf/07z5s0BePvtt2ssoMbERqMmoq0Xe49fA+Dw6WRCW7nX6/YdIUTjUWkCKd3O0BDa\nHOqq8EBPDp1KRldsID27kIvXsmndtElthyWEELclFe61zF5rQ1ibm+1HB+OTKxxvTAgh6hpJIHVA\nxyBvNDdmKExKy+Naal4tRySEELcnCaQOcHYwDfVe4mC8DG8ihKj7JIHUEZEh3ubG85Kh3oUQoi6T\nBFJHlAz1XuLwKSmFCCHqNqt6ogP88MMP7Nixo8IZCVUqFZ9++mmVB9fYyFDvQoj6xKoE8sEHH/DJ\nJ5/g7++Pr6/vXU8oJW6tZKj3xOQc81DvfSLrbk96IUTjZlUCWbt2LWPGjOH111+v7ngavahQHxKT\ncwDTUO9d2vniaG97m6OEEKLmWVWUyMnJYcCAAdUdiwACfJzxvjFPeslQ70IIURdZlUA6derEkSNH\nqjsWwc2h3kvEnUulWF8/Z18UQjRsVlVhvfTSS0yfPh2j0UhkZGSF089GRERUeXCNlQz1LoSoD6xK\nIKNHjwZg0aJF5Qb6UxQFlUolo/FWIbVaRWSwt3mo9yOnU+gQ6CVDvQsh6hSrEsgXX3xR3XGIMmSo\ndyFEXWdVArnvvvuqOw5Rho1GTccgL34/Zhrq/dApGepdCFG3WF0ncvHiRV555RV69+5NZGQk/fr1\nY8aMGZw/f74642vUwtp4orU1zZOekWMa6l0IIeoKq0ogZ86cYfjw4dja2tK3b1+8vLxISUlhx44d\nbNu2jTVr1hAUFFTdsTY69lobwtuY5gsB0yCLrfxdpRQihKgTrEogCxYsoGXLlsTExODs7Gxen5ub\ny3PPPccHH3zAv//972oLsjHrGOTN0TMpGIyKeaj3pt7Otz9QCCGqmVVVWPv37+cvf/mLRfIAcHZ2\nZsKECRw4cKBaghPg5GBLaCsZ6l0IUfdYlUDs7OwqHf9KrVZTXFxcpUEJS52CZah3IUTdY3VP9OXL\nl6PT6SzWFxUVsXz5cjp37lwtwQkTGepdCFEXWdUGMn36dJ5++mkGDBhA//798fLyIjU1lZ9//pns\n7GxWrlxZ3XE2elFlhnqPDvOjibNdLUclhGjMrCqBBAUFsXr1ajp06MDGjRtZunQpGzduJCIigm++\n+Ybw8PDqjrPR87kx1DuAUVHYfyKpliMSQjR2Vk8oFRoayrJly6ozFnEb0WG+5qHeTyVk0inYBy+3\n8uOSCSFETag0gWzcuJGePXvSpEkTNm7ceNsTPfroo1UamCivqZczrf1duXAtG0VR2Hf8Go/1alPb\nYQkhGqlKE8j06dNZs2YNERERTJ8+/ZYnUalUkkBqSLdwfy4m5aAoCheuZXM1NZemXtIvRAhR8ypN\nIFu2bMHPz8/8t6gbvNwcCG7uxqmEDAB+j7vGU33bSu90IUSNq7QRvUWLFmi1WgCOHj2Kq6srLVq0\nKPfj6OjI9u3bayxgAdFhfqjVpoRxLS2PS0k5tRyREKIxsuourNdee42EhIQKt508eZIFCxZUaVDi\n1po42xHextO8/PuxayiKUosRCSEao0qrsCZOnMiFCxcA06RRU6ZMMZdISktOTqZ58+bVF6GoUJd2\nvpy8mE6x3khaVgGnEzIIaSnzhQghak6lCeSFF17g+++/B+DSpUsEBwfj4WH5AaVWq3F1deVPf/pT\n9UYpynG0t6VTkDf7T14HYN8fSbQNcJNZC4UQNabSBBIVFUVUVBQAer2el19+uUpKGgaDgUWLFrF+\n/Xry8vLo3bs3b775Jl5eXhXuv3HjRj755BMuXbqEt7c3w4YN4/nnn0ej0dxzLPVdpxAfjp1Lo1Cn\nJztPx4kL6XRoW/HzKIQQVc2qr6v/+te/uHTpEu+//755XVxcHOPHj2f//v13dMElS5awfv165s2b\nx8qVK0lKSmLy5MkV7rtz505effVVhg0bxo8//sgrr7zCZ599xscff3xH12yo7Gw1dGnnY17ef/I6\nxXpDLUYkhGhMrEogP/30Ey+88AInTpwwr7O3t6ewsJBx48bx22+/WXUxnU5HTEwM06dPp2fPnoSF\nhbFw4UIOHTrEoUOHyu3/zTff8OCDD/Lss8/SokULHn74YcaOHcu6deusfHgNX3igF84OtgDkFxZz\n9ExqLUckhGgsrEogH330EcOHD+fzzz83rwsODmblypUMHTqURYsWWXWx+Ph48vLyiI6ONq8LCAig\nWbNmFc4p8pe//IWXXnrJMmC1muxsmdq1hI1GTXSYn3n50KlkCov0tRiREKKxsCqBXLp0iYceeqjC\nbQ899BBnz5616mJJSaYBAH19fS3W+/j4mLeVFhERQdu2bc3Lubm5rF69mt69e1t1vcYitKUH7i72\nAOiKDRyU4d6FEDXAqgTi4eHByZMnK9x25swZXF1drbpYQUEBarUaW1tbi/VarZaioqLbHjtp0iSK\niop45ZVXrLpeY6FWq+gefrMUEncmhdx83S2OEEKIe2dVAhk0aBBLlizhu+++IyPDNIRGZmYm69ev\nZ/HixTz++ONWXcze3h6j0Yheb1nFotPpcHCofFTZ9PR0xo0bx4kTJ/jss89o1qyZVddrTNo0a4Kv\nhyMABqNC7InrtRyREKKhs2o49xdffJGzZ8/y17/+lTfffBO1Wo3RaERRFPr168eUKVOsupi/vz8A\nKSkp5r/B1BmxbLVWicTERJ5//nny8vJYuXIloaGhVl2rsVGpVHQP9+e/u84BcPJiOpHB3ri72tdy\nZEKIhsqqBKLValm2bBknT57k4MGDZGZm4uLiQlRU1B1NJhUaGoqTkxOxsbEMHjwYMCWIK1eu0LVr\n13L7p6WlMWbMGDQaDatXr5Ye77fR3NeF5r4uXL5uGq137x9JPHJfq9oOSwjRQFk9oRRAu3btaNeu\nXbn1BQUFt6yCKqHVahk5ciTz58/H3d0dT09P5s6dS3R0NJ06dUKn05GVlUWTJk3QarXMnTuXjIwM\nVqxYgb29PSkpKYDp23ZlHQ8bu/vC/bl83TS44rnETK6n55urtoQQoipZlUCKi4tZtWoV+/fvp7i4\n2Dxwn9FopKCggJMnT3L48GGrLjh16lT0ej0zZsxAr9ebe6IDHD58mDFjxhATE0PHjh3ZunUrRqOR\nYcOGWZxDo9FY9EkRN/l4ONI2wI2zN+ZP33v8GoP7BNZyVEKIhsiqBPL+++/z5ZdfEhgYSEZGBvb2\n9ri5uXHmzBkMBgOTJk2y/oI2NsyaNYtZs2aV29atWzdOnTplXq7szi9xa93C/Th/JQujonD5eg6X\nr+fQ3NeltsMSQjQwVvdEf+6559iwYQOjR48mIiKCdevWsXnzZvz9/VGrZQC/usTdxZ52rW8OfCnD\nvQshqoNVn/ypqak88MADgKkHelxcHABNmzZlwoQJbNiwodoCFHenaztfbG6MzJuckc+5K1m1HJEQ\noqGxKoE4OztTXFwMQKtWrbh27Rp5eXkAtG7dmqtXr1ZfhOKuODtqLUbm3Xv8GkajlEKEEFXHqgQS\nFRXF119/jU6no2XLltjb2/PLL78AcPz4cZycnKo1SHF3okJ8sLM1DXufmVPEyYvptRyREKIhsSqB\nTJo0iX379jF+/HhsbGwYPnw4c+bMYfjw4bz//vs8+OCD1R2nuAv2djZEhpQa7v1EEnqDsRYjEkI0\nJFbdhRUWFsamTZvMd0i99tprODk5cfjwYcaPH89f/vKXag1S3L2OQV7EnU0lv7CY3IJi4s6m0rlU\nUhFCiLtlVQJ59913GTx4MPfffz9g6shXdph1UTfZ2mjo2s6XnYcTATgYf532rT2w195RH1IhhCjH\nqiqsb7/9lszMzOqORVST9q09cHXSAlCkM3DkdEotRySEaAisSiARERFW9zQXdY9Go6Z7+M3BK4+e\nTiG3oLgWIxJCNARW1WN06NCBjz/+mM2bN9OuXTscHS3HVlKpVLz11lvVEqCoGkHN3Th0KpnUzAKK\nDUZ2HrzMoz1bo1Kpajs0IUQ9ZVUC2bBhA56enmRnZ7Nv375y2yWB1H0qlYpeHZvyw07TcO8XrmUT\nfzHDose6EELciUoTyKZNm+jRowdNmjRh586dNRmTqCYBPi5EtDXdlQXw69ErNPNxNrePCCHEnai0\nDeT11183z3X+0EMPER8fX2NBiepzX4emuLnYAab503/enyDjZAkh7kqlJRCtVmse4+rSpUscO3aM\n/Pz8Sk/UuXPnqo9OVDlbGzUDurZg7fazKIrClZRc4s6k0jHYu7ZDE0LUM5UmkKFDh/L555+zevVq\nVCqVec6OshRFQaVSydDr9YifpxNRoT4cOGmaN33Psas093PBQ6a/FULcgUoTyIwZM3jyySfJyMhg\nzJgxvPnmm7Rt27YmYxPVqGs7Xy5dyyYlswCDUWFbbAJD+gWhUctdWUII69zyLqygoCAAJk6cSP/+\n/fH19a2RoET102jUDIhuwZptpzEYFZIz8jkYf53o9n61HZoQop6wqiPh1KlTJXk0QJ5NHOhWqoPh\ngRPXSU6vvJ1LCCFKk6kEG7lOQd409TINx29UFLbtT5ARe4UQVpEE0sip1Sr6d22BrY3ppZCeXcje\n49dqOSohRH0gCUTQxNmOXh2bmZePnE7hSkpuLUYkhKgPJIEIwDRib0s/V/Pyz/sT0BUbajEiIURd\nV+ldWH/729+sPomMhVX/qVQq+nZpzuot8RTpDGTn6dh99Ar9urSo7dCEEHVUpQlk+/btVp9EEkjD\n4OxgywOdA9i89xIAJy6k07ppE1o3bVLLkQkh6qJKE4gMoNg4BTV35/yVLM5cNk0g9suBy4x40BFH\ne9tajkwIUdfccxuIwWCocIh3UX/dHxmA042EUVCkZ+fhKzLgohCiHKvmA0lKSuLvf/87+/fvp7i4\n2PxhYjQa0ev1ADIWVgNib2dDvy7N+d/u8wCcS8zkdIIrIS1l7hAhxE1WlUDeffdd9u7dy+OPP07r\n1q1p3749I0aMoFWrVqhUKpYsWVLdcYoa1tLflbA2nublXYevkJuvq8WIhBB1jVUJZN++fUydOpW3\n3nqLp556CkdHR2bNmsX69euJiopix44d1RymqA29OjY1TzZVVGzg5wOXpSpLCGFmVQLJy8ujXbt2\nALRp04YTJ04AYGNjw6hRo9izZ0/1RShqja2NhgFdW5jnTb98PYfj59JqOSohRF1hVQLx9vYmLc30\nwdGyZUsyMzNJSUkBwN3d3bxNNDxNvZ3pVGqyqd/irpKZU1SLEQkh6gqrEkjv3r1ZsmQJx44dIyAg\nAF9fX2JiYtDpdPz4448yUm8D1y3MD88bk03pDUa27U/AaJSqLCEaO6sSyJQpU7C1tWXBggWAaXj3\n5cuX06lTJ9atW8dzzz1n9QUNBgPvv/8+vXr1IjIykpdffpnU1NTbHpeQkEBkZCRJSUlWX0tUDRuN\nmgHRLVHfqMpKSstj+0FpDxGisbPqNl5PT0/Wr19v/vB+8skn8ff358iRI0RERHDfffdZfcElS5aw\nfv165s2bh5ubG3PnzmXy5MmsXr260mMuXLjACy+8cMs52UX18nZ3IDrMzzxS78mL6QD069Lc3EYi\nhGhcrCqBfPzxx6SkpODvf3PyoW7dujFhwgRatGjBe++9Z9XFdDodMTExTJ8+nZ49exIWFsbChQs5\ndOgQhw4dqvCYFStWMGTIEFxdXSvcLmpOVKgP7Vrd7Aty8mI6v8idWUI0WlYlkA8//LDSqqO4uDi+\n/vprqy4WHx9PXl4e0dHR5nUBAQE0a9aMAwcOVHjMzz//zNtvv83MmTOtuoaoPiqVin5dmtO+dfkk\nIm0iQjQ+lVZhjRo1iqNHjwKgKAojR46scD+DwUBYWJhVFytJQmUb3X18fCpNUDExMQAyXEodoVKp\n6BvVHDANtgimJKIopuostVqqs4RoLCpNIHPnzuWnn35CURSWLVvGk08+iZ+fn8U+arUaV1dXBg4c\naNXFCgoKUKvV2NpaDsyn1WopKpJbQ+uLipJI/KWbbSKSRIRoHCpNIG3btuWll14CTKWMESNG3PPt\nuvb29ubxs2xsbl5ap9Ph4OBwT+cWNetmElFx4oKpH5ApiSj069JCkogQjYBVd2FNnToVgN9++43Y\n2FhycnJwd3enS5cud3QHVkkjfNkG+eTkZOlLUg+ZkkgAQKkkkgEgSUSIRsCqBKLT6XjxxRf59ddf\nsbGxwc3NjYyMDIxGI/fddx8ff/wxWq32tucJDQ3FycmJ2NhYBg8eDEBiYiJXrlyha9eu9/ZIRK0o\nSSIqFfxxXpKIEI2J1XdhHThwgAULFhAXF8fu3buJi4tj/vz5HDlyhGXLlll1Ma1Wy8iRI5k/fz67\ndu3ijz/+YPr06URHR9OpUyd0Oh0pKSnodDLqa32iUql4oHOAxei98Zcy+OWA9FgXoiGzKoFs2LCB\nKVOm8Pjjj6NWmw7RaDQMGjSIl19+mf/9739WX3Dq1KkMGjSIGTNmMGbMGJo2bcqHH34IwOHDh+nV\nqxeHDx++i4cialNlSeRnGfZEiAbLqiqszMxMgoODK9wWHBxsHljRqgva2DBr1ixmzZpVblu3bt04\ndepUhcfdapuoG0qSiAo4fqM661SCqTqrf1epzhKiobGqBNK6dWt2795d4bZff/2VgICAKg1K1F8q\nlYr7OwcQXqokcipBSiJCNERWlUDGjBnDG2+8gdFo5NFHH8Xb25uUlBQ2bNjAypUrKyxNiMarJImA\nZUlEAQZISUSIBsOqBPKnP/2Jixcv8vnnn7NixQrzeo1Gw/PPP8/o0aOrLUBRP5mTiErF8XOm0ZZP\n36jOkiQiRMNgVQIBmDZtGs899xxHjx4lKysLV1dXOnXqhIeHx+0PFo2SSqXi/shmABZJRFFgQHQL\nNJJEhKjXKk0gY8aM4a233iIwMNC8zsPDg759+9ZIYKJhqCiJnLmcQUZOIX2jmuPr4Vib4Qkh7kGl\njeixsbHk5eXVZCyigSpJIuGBXuZ1qZkFfP/LGX49cgVdsaEWoxNC3C2r7sIS4l6VJJGeEU2x0Zhe\ndoqicPRMCl9vjufC1axajlAIcackgYgao1KpiAzxYcSDIbTwdTGvzy0oZsNvF9i89yL5hcW1GKEQ\n4k7cshH9nXfewdnZ+bYnUalUfP7551UWlGjYmjjbMah3G04nZLD76FUKivQAnLmcScL1HHp0aEr7\n1h4yVa4QddwtE4her6e4WL4RiqqnUqkIaelBSz9Xdh+9ap5PpEhnYPvBy5y6lEHfqADcXe1rOVIh\nRGVumUD+9re/ERERUVOxiEbI3s6GAdEtCGnpzo5DiWTlmiYWu5qayzdbT9GlnS+dQ3zQaKS2VYi6\nRt6Vok5o7uvCiAdDiAr1QX2j6spgVNj3RxLfbjvNtVS5I1CIukYSiKgzbDRq7uvQlKcHBFv0D0nP\nLmTt9jPsOJRIkdzyK0SdUWkC+dOf/oS7u3tNxiIEAF5uDgzpG0TvTs2wtbn5Ej1+LpWvf4rnbGIm\niiIDMwpR2yptA3nvvfdqMg4hLKjVKjoGedOmWRN2Hkrk4rVsAPIKi/np94t4uNoT1tqTkJbu2NtZ\nPSKPEKIKyTtP1Gkujloe69mac4lZ7DpyxdxPJD27kF+PXuH349doG9CE9m088fd0klt/hahBkkBE\nnadSqWjb3I0AX2di/0ji5MV0ivVGAPQGI/GXMoi/lCGlEiFqmLzLRL1hr7WhT2QA3cP9OXM5k+Pn\nU0nJKDBvLymV7Dl2lbYBboQFSqlEiOokCUTUO1pbDWFtPAlr40lyej5/XEjjdEKGuVRiMCqcSsjg\nVIKUSoSoTvKOEvWaj4cjPh6O9IxoypnLmfxxPo3kjHzz9nKlkjae+HtJqUSIqiAJRDQId1IqcXex\np1VTVwJ8nGnq5YStjaaWoxeifpIEIhqc25VKMnIKyThVyOFTyajVKvw8HAnwcSHAxxlfD0cZNkUI\nK0kCEQ3W7UolAEajwtXUPK6m5hF7Amw1avy9ncwJxauJg8zfLkQlJIGIRqGkVNKrY1MSk3PNP2lZ\nBRb7FRuMJCTlkJCUA4CdVkOAt7Mpofg64+ZsJ+0nQtwgCUQ0KrY2Glo3bULrpk0AyC8s5kqKKZlc\nvp5Ddp7OYv8inYFzV7I4d8U0Y6Kzgy3NvJ3xcXfEo4k9nk3scbS3rfHHIURdIAlENGqO9rYENXcn\nqLlp3LfsPB2JyTnmEkrZGRJzC4rNjfGlz+HVxB7PJg54utnj6eqAh6udtKWIBk8SiBCluDppad/a\nk/atPVEUhfTsQnMyuZqSW+FowPmFxSQUFpNwPce8Tq1S4eZiZ0oqN0oqXm4OODvYShWYaDAkgQhR\nCZVKdSMBONAxyBujUSEls4Ck1DzSsgtIyyokLasQvcFY7ljjjeSTnl3Imcs319vZavBwtaeJsx2u\nzlpcnbS4Opp+O9rbSoO9qFckgQhhJbVaha+Ho8VcJUajQnaejtSsAtKzCknLKiA1q9A8s2JZRcUG\nrqXlcS2t/ARZarUKV0ctLk6mhOJyI7GU/DjY2UjpRdQpkkCEuAdqtamqys3FDgJuri/WG8wllLQs\nU8DI3l4AABYqSURBVGklNauAIl3lE2IZjQqZuUVkVpJ8bDVqXG4kFmdHWxztbHB0MP12crDF0d4W\nR3sbbKTtRdQQSSBCVANbGw1+nk74eTqZ1ymKQl5BMenZhWTn6cjO05GTrzP/XVCkv+U5iw1Gc7XY\nrdhpNTjdSCaOpX47lVp2sLPBTmuDRqrMxD2QBCJEDVGpVDg7anF21Fa4vVhvqDCxlPzorJzOt0hn\noEhnID379vtqbTXYazXYa22wt7vxW6vB3s7m5nrzdtPftjZqqUoTgCQQIeoMWxuNudG+LEVRKCo2\nJZicPB35hXryCovJLywmv1B/48f0t/EOpvvVFRvQ3TivtTRqFVpbDXa2GrQ3fuxs1aX+1qAtt2xa\nV/K3Rq2SJNQA1HgCMRgMLFq0iPXr15OXl0fv3r1588038fLyqnD/Y8eO8Y9//IOTJ0/i6+vLpEmT\nePLJJ2s4aiFql0qlulEasMHH3bHS/RRFoaBIb04wBeZEY0oweQWm34U6A0XFhruaW95gNF3jdlVu\nt6JWqbC1VWOrMSUaWxu16UejxrbUstZGg42NGm3Jdpub22w0N35s1NhoVNhq1KglMdWoGk8gS5Ys\nYf369cybNw83Nzfmzp3L5MmTWb16dbl909PTGT9+PI8//jj/+Mc/2LNnD2+88QZeXl706tWrpkMX\nos5TqVQ32jls8aJ8SaY0o1FBV2ygQKenSGegoMj0u1Cnp6DIQJFOT6HOcONHT2GRabmi25bvlFFR\nTFVtGKCg+PYHWEmtUt1IKDeTik2ZZGOrUWGjUaO5sU6jUWGjVmNjo0KjNh1n3qZW3dynkuXGnLBq\nNIHodDpiYmKYM2cOPXv2BGDhwoX079+fQ4cO0blzZ4v9v/vuO5ydnXnjjTdQq9UEBgZy4sQJ/vOf\n/0gCEeIeqdUqU7vGHU60pTcYKdKZqr6KblSB6YqNpf4utawvvZ/R/LfReOclH2sYFcUcQ01Rq1Ro\nNDeTj1p9M7mo1aWSklqFWqPGRm3aX60uvU/Jjxq1mhu/b+ynurFNY7m/WmX627ysvrmvutRydfYt\nqtEEEh8fT15eHtHR0eZ1AQEBNGvWjAMHDpRLIAcOHKBr166o1TdvS4yOjmbu3LkoitKoM78QtcVG\no8bGQY2Tw92PAWYwGCnWG9HpjRTrDRTrjaV+DOZter0RXentxQbTeoNpW7HBiN6gmJfvpP2nqhgV\nBaNeoZh7L5lVB5VKhVqFOZmp1SoctBq6hfvTplmTezp3jSaQpKQkAHx9fS3W+/j4mLeV3b99+/bl\n9i0oKCAjIwMPD4/qC1YIUW00N6qQ7O2q9rwG481kojeYforNfyumpKM3ojcaMZRKPgajaZvBaFpX\nsq30crHBiNGoUKw37W+4cVxdpygKBsX03JQkufzCYvYdv1a/EkhBQQFqtRpbW8tvLlqtlqKi8p2n\nCgsL0Wq15fYFU3WYEEKUZqoGMt35VRMURcFoVMyJy2hUzInHYFRuLJf/22AoOc6I0Yh5/5L9TL+N\npv0U5eYxium3wWgqbRkNCoYbMRiNCkaFG+e8uVzRjRJqlYqgFu73/PhrNIHY29tjNBrR6/XY2Ny8\ntE6nw8GhfIOfvb19uURRslzR/kIIUZNUJe0fGlOfmrrIlEhKJyYFjcZ0V9+9qtEE4u/vD0BKSor5\nb4Dk5ORy1VoAfn5+pKSkWKxLTk7G0dERFxeX6g1WCPH/27v/aKjy/w/gTzNFVie/qqW2n8ogZgyh\n1LYRTvujZNOvRSGl2KitE2kr/U5RflVElOpYZ2dld61Oy6ZtrVJUTs4JaQ9id1uxKZGf9/OHr/k2\nUbnDjB/7epwzf8z1vnNfr8t5v2be19wXGQQ4HAVwoADIoL7JtYDo6elBRUUFN2/ehL29PQCgoqIC\nlZWVMDMz6zTe1NQUycnJEhfMc3JyYGJiInFh/XWtre3/gdHVdRVCCCFd65gzO+bQd5FrAVFUVMQX\nX3yBw4cPQ11dHZqamti9ezfMzc1hbGyMpqYm1NbWQlVVFYqKinB0dERsbCx27dqFVatWITs7G6mp\nqYiJiXnrcTo+tTg5OckjLUIIGVSqqqowYcKEd45TYKT5KmoPtLS0IDg4GBcvXkRLS4v4m+gaGhrI\nycnBypUrkZCQAAsLCwDA3bt3sW/fPhQVFWHMmDHw8fHBp59++tZjvHz5EgUFBRg1ahS43P65LkkI\nIf1Na2srqqqqYGhoiGHDhr1zvNwLCCGEkMGBGgcQQgiRChUQQgghUqECQgghRCpUQAghhEiFCggh\nhBCpDLoC0traipCQEMyePRtCoRA+Pj548uTJG8ffu3cPy5cvh0AggJ2dHVJSUuQYbe9jm39aWhrs\n7e1hbGwMW1tbnDp1qttfIuqP2Ob/Kk9PT7i4uMg4Qtljew7+/vtv+Pj4QCgUYubMmQgMDERDQ4Mc\nI+5dbPO/fv06HB0dYWxsDBsbG8TExEjVaKu/2rlzJ7Zv3/7WMVLPg8wgc+zYMWbWrFlMVlYWU1BQ\nwCxZsoRZvnx5l2Orq6sZc3NzZs+ePUxJSQmTkJDAGBgYML/99puco+49bPK/evUqo6+vz5w7d44p\nKytjLl26xEyfPp2JjIyUc9S9h03+r0pMTGR0dXUZZ2dnOUQpW2zOQWNjIzN//nzGxcWFuX//PnP9\n+nXmo48+Ynbv3i3nqHsPm/xLS0sZPp/PREREMOXl5cylS5cYgUDAnD9/Xs5R9762tjYmNDSU0dXV\nZQICAt44rifz4KAqII2NjYxQKGS+++478bZHjx4xurq6TF5eXqfxUVFRjLW1NdPa2ire5u/vz7i5\nuckl3t7GNv9169Yxvr6+EtsiIyMZa2trmccqC2zz71BaWsqYm5szy5YtG/AFhO05EIlEjKmpKfP0\n6VOJbYsXL5ZLvL2Nbf7nzp1jzM3NJbb5+Pgwnp6eMo9VlsrLyxlnZ2fGwsKCmTt37lsLSE/mwUG1\nhPWuhlWve1PDqtu3bw/Ij7Bs81+/fj2+/PJLiW0cDgfPnj2TeayywDZ/oH25w8/PDx4eHtDR0ZFX\nqDLD9hxkZWXB0tISqqr/3xdi8eLFEIlEcom3t7HNX0NDA0+fPkVqaira2tpQXFyM3NxcGBoayjPs\nXnf79m1oa2vjxx9/xAcffPDWsT2ZBwdVAZGmYVVXYzsaVg00bPPn8/mYMmWK+HldXR0SExPx4Ycf\nyjZQGWGbPwBER0cDAFavXi3b4OSE7TkoLS3F2LFjERoaCmtra8ybNw9BQUFd9ucZCNjmb2dnB0dH\nR2zZsgWGhoZYsGABzMzM4OXlJZd4ZcXe3h6HDx/GqFGj3jm2J/PgoCog//WGVWzzf31fLy8vNDY2\nYvPmzbIMU2bY5l9QUID4+HgEBQW99e7OAwnbc1BXVweRSIRHjx4hLCwM27ZtQ1paGnbs2CGvkHsV\n2/yfPXuGyspKeHh4QCQSISgoCNnZ2YiMjJRXyH2uJ/OgXO/GK2v/9YZVbPPvUFNTAy8vL5SUlCAu\nLg5jx46VR7i9jk3+jY2N2Lp1KzZu3Nitu44OFGz/BoYMGQJVVVUcPnwYXC4XRkZGaGlpga+vL7Zt\n2wZ19Z53rZMntvkHBweDy+Viy5YtAAADAwO0tLQgMDAQLi4uAy5/afRkHhwcb7v+z6sNq171X2lY\nxTZ/oL0fy4oVK1BRUYHz58+Dz+fLPE5ZYZN/fn4+Hj58iODgYAiFQgiFQqSkpCA3NxdCoRB//vmn\n3OLuTWz/Bt5//33o6OhI3LW6Y1mzsrJShpHKBtv88/PzO13vEAgEaG5uxl9//SW7QPuRnsyDg6qA\nvNqwqsO7Glbl5uZKXCjqTsOq/opt/tXV1Vi5ciXa2tqQmJgIPT09eYbb69jkz+fz8fPPPyMlJUX8\nsLGxgaGhIVJSUjB69Gh5h98r2P4NTJ8+Hffv30dzc7N4W3FxMbhc7oD8JMo2fy0tLRQVFUlse/Dg\nATgcDsaPHy/zePuDnsyD3MDAwEAZxyc3XC4Xz58/x+nTpzF16lTU1dUhICAAEyZMgJeXF5qamlBT\nU4OhQ4eCy+Vi4sSJiImJQWVlJcaPH4+ffvoJ8fHxCAwMxLhx4/o6HdbY5u/v74+ioiKcPHkS6urq\nqK+vR319PRoaGvDee+/1dTqssclfSUkJampqEo+srCy8ePECbm5uA/INBMD+b2Dy5MlISEhAUVER\npkyZgsLCQuzduxc2Njb47LPP+jod1tjmr6amhsjISHA4HGhpaeH27dvYu3cvFi1aBFtb275Op1dc\nvHgRqqqqmDdvHgD07jzY43847meam5uZgwcPMubm5oyJiQnj6+vLVFdXMwzDMDdu3GB0dXWZGzdu\niMffuXOHWbx4MWNoaMjY2dkxqampfRV6r+hu/g0NDYyenh6jq6vb6aGvr9/HWUiP7e//VQEBAQP+\neyAMw/4cPHjwgHF3d2f4fD4zY8YM5sCBA0xjY2Nfhd9jbPNPT09nHBwcGGNjY8bGxoaJiIhgmpqa\n+ir8Xufs7CzxPZDenAepoRQhhBCpDMzP6YQQQvocFRBCCCFSoQJCCCFEKlRACCGESIUKCCGEEKlQ\nASGDGv2TISGyQwWEyIS/vz94PN4bH9nZ2TKP4c6dO/D09BQ/r6ioAI/Hw/fffy/zYycnJ4PH473x\nLsADhYuLC1xdXeVyLGtr63d2ziP9y6C6mSLpX7S0tBAWFtblz169jbysiEQilJSUiJ+PHj0aSUlJ\ncrlFxdy5c5GUlAQNDQ2ZH0uWdu3aBQUFhb4Og/RTVECIzCgqKsLY2LivwxCTZzwaGhoDvngA8in0\nZOCiJSzSp6ytrXHo0CG4uLiAz+dj9+7dAID79+/D29sbM2bMwLRp0zBnzhzs379foqdDU1OTuBGS\nQCDAggULkJaWBqB9CU0kEqGyshI8Hg/JycldLmE9fPgQXl5emDlzJoRCITw8PFBYWCj+eU5ODng8\nHm7cuAFXV1cIBALMmjULwcHBaG1tfWNery9h+fv7w9PTExcuXICVlRUEAgFWr16NqqoqiEQi2NjY\nQCgUwtXVFRUVFRLn58SJE9i7dy/Mzc1hamqKPXv2oKGhAUFBQbCwsICFhQW2b98uPjcdMb/ege/1\n5Sgej4dvvvkG27Ztg5mZGYRCIXx9fVFdXd3lPh05dfXw9/cX73Pr1i04OTlBIBDAwsICX3/9dacu\nl4WFhXBzc4NQKISVlRV++OGHN55L0n/RJxAiUy0tLZ22cblciWWRc+fOwcPDA2vXroWqqioeP34M\nJycnmJiYICgoCEOHDsW1a9cQHx+P0aNHY82aNQCALVu24Nq1a/Dy8oKRkRHS09Px1VdfQVlZGV5e\nXqitrcW9e/cQGRmJ8ePHo76+XiKOoqIiLF++HFOmTBEXrujoaKxYsQLffvutxLvvzZs3w8nJCevW\nrUNmZiZiYmIwYcIELFmypNvn4tatW6iqqsLOnTtRU1Mj7jmhpKQEf39/vHz5Ejt27MC+ffsQFRUl\n3i82NhZWVlYICwtDVlYWYmNjkZ2dDT09PYSEhODu3buIiIiAjo4O3N3dux0P0N4Pw9bWFqGhoSgr\nK8OhQ4egqKiII0eOdBrbsSz3qvj4eGRkZMDBwUGco5ubGywtLREWFobq6mocO3YMRUVFSExMxJAh\nQ/D48WM4Oztj4sSJOHLkCOrq6hAcHCxRuMjAQAWEyEx5eTmmTZvWaXtgYCBWrFghfj5u3Dhs2rRJ\n/PzatWuYNm0awsLCoKKiAgCwtLTE77//jlu3bmHNmjUoLi7G5cuXsXPnTjg5OQEAZs6cifLycuTk\n5MDKygoaGhoSy1avF5Djx49DWVkZZ8+eFd99eNasWbC1tUV4eDjCw8PFY5ctWyZuczpjxgxkZGTg\n6tWrrArIixcvEBYWJr7DaXp6OjIzM5GRkSHedufOHaSmpkrsp66ujiNHjoDD4cDCwgJJSUlobm5G\ncHAwhgwZgtmzZ+Py5cu4e/dut2PpoKenh4MHD4pzv3fvHjIyMroc+/qyXHp6Oi5fvoyAgABYWFgA\nAEJCQqCjo4OoqCjxHY0NDAzg4OCAtLQ0LFy4EGfOnEFraytiYmLEDZsmTZqEpUuXso6f9C0qIERm\ntLS0umwN+nqfCX19fYnnc+bMwZw5c9Dc3IySkhKUlZWhuLgYNTU1GDlyJAAgLy8PADrdcjs2Nrbb\n8eXm5sLa2lri1vUqKiqwtrbuNImamJh0yq2hoaHbxwIATU1Nidtja2pqQl1dXWKbmpoanj9/LrGf\nkZGReDLmcDhQV1eHvr6+RMc9NTW1TstE3SFtXoWFhdi6dSsWLVqElStXAmhvJ5ufn4+1a9eira0N\nbW1tAICpU6dizJgxyM7OxsKFC5GXlwcTExOJbn8CgQBjxoxhHT/pW1RAiMwoKirCyMjoneNe7z3S\n1taGo0eP4sKFC6ivr4e2tjb4fD6UlJTE3+t4+vQpgPZJWFq1tbXigvQqTU1N1NXVSWwbNmyYxHMO\nhyOeILur49PUq7rTd0Xa/bpDmryqq6uxfv16TJ48Wbz0B7T3F29ra0NUVJTEElyHf/75B0D7ee+q\njfCoUaOkSYH0ISogpN85deoUzpw5gz179sDW1lbcVtPR0VE8pmNbTU2NxMRTXFyMhoYGCASCdx5n\nxIgRePLkSaftVVVVUFNT62kafabj+tLrheDFixcYMWJEj167qakJ3t7eaGxsxPHjx6GkpCT+mYqK\nChQUFODu7o6PP/64074dhVBdXb3L6x0dbwrIwEH/hUX6nby8PPB4PHz++efiQvH48WMUFxeLJ0VT\nU1MAQGZmpsS++/fvx9GjRwFAos93V8zMzJCZmSlxbaS+vh6ZmZni1x+Ihg8fDgASPb1ra2vx8OHD\nHr/2rl27UFBQgPDwcGhpaXU6roGBAUpLS2FkZCR+TJo0CaGhocjPzwfQfg0pLy9Pog93SUkJHj16\n1OP4iHzRJxDS7/D5fJw4cQIxMTEQCAQoKytDdHQ0mpqaxOvz+vr6sLOzw8GDB1FfXw8ej4eMjAzc\nvHkTp0+fBtD+KeXJkyf49ddfO11nAQBvb28sXboUrq6u8PDwANB+DaW+vl58wXwg4vF40NbWRkRE\nhPhdf3R0NJSVlXv0umfOnEFycjLc3d2hrKwscdFeUVERBgYG8PX1xbp16+Dv749PPvkETU1NiImJ\nQXFxMfz8/AAAq1atgkgkgru7OzZs2ICWlhYcO3YMQ4cO7VF8RP6ogJB+x9PTE//++y/Onj2L58+f\nQ1tbG/b29lBQUMCpU6dQV1eH4cOHIyQkBGFhYYiLi0NtbS10dHRw8uRJWFpaAgAcHBxw5coVeHt7\nY+PGjZg/f77EcXg8Hi5cuICjR4/Cz88PHA4H06dPR1JSEng8Xl+k3iu4XC7Cw8Nx4MABbNq0CSNH\njsSqVavwxx9/oLy8XOrX/eWXXwAAcXFxiIuLk/jZ2LFjceXKFXz00UeIjY1FZGQkNmzYACUlJRgZ\nGSEhIQG6uroA2pewEhMTsX//fvj5+UFFRQUeHh7i7/CQgYNa2hJCCJEKXQMhhBAiFSoghBBCpEIF\nhBBCiFSogBBCCJEKFRBCCCFSoQJCCCFEKlRACCGESIUKCCGEEKn8DxDxPWMnMJ36AAAAAElFTkSu\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 64, + "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": 65, + "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": 65, + "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": 66, + "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.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 68, + "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": 69, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.3333333333333333, 0.25)" + ] + }, + "execution_count": 69, + "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": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0.332887143272 0.466770231236\n", + "100.0 0.332134252669 0.464141650401\n", + "200.0 0.330171608455 0.457217006313\n", + "300.0 0.325386471865 0.439887202912\n", + "400.0 0.315403905242 0.401630646271\n", + "500.0 0.3 0.33703425949\n", + "600.0 0.284596094758 0.267317030568\n", + "700.0 0.274613528135 0.22184699046\n", + "800.0 0.269828391545 0.200791598416\n", + "900.0 0.267865747331 0.192392183393\n", + "1000.0 0.267112856728 0.189213207818\n", + "1100.0 0.26683150821 0.18803175228\n", + "1200.0 0.266727403413 0.187595503995\n" + ] + } + ], + "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": 71, + "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": 72, + "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": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig05.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "num_students = 90\n", + "budget = 1200\n", + "price_per_dose = 100\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": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 0.988888888889 0.266727403413 0.187595503995\n", + "1.0 0.977777777778 0.26683150821 0.174580718826\n", + "2.0 0.966666666667 0.267112856728 0.162909838349\n", + "3.0 0.955555555556 0.267865747331 0.153508349478\n", + "4.0 0.944444444444 0.269828391545 0.148565092315\n", + "5.0 0.933333333333 0.274613528135 0.152945950611\n", + "6.0 0.922222222222 0.284596094758 0.174964415024\n", + "7.0 0.911111111111 0.3 0.217343161684\n", + "8.0 0.9 0.315403905242 0.259071044488\n", + "9.0 0.888888888889 0.325386471865 0.278402884103\n", + "10.0 0.877777777778 0.330171608455 0.277914534623\n", + "11.0 0.866666666667 0.332134252669 0.267357496693\n", + "12.0 0.855555555556 0.332887143272 0.252796945636\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": 76, + "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": 77, + "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": 78, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap05-fig06.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n4uPjo7z//vvGMoPBoEyePFnx8fFRvvjiC0VRFCU+Pl7x8fFRJk+ebHJ+bGys4uPjo0yfPl1RFEVZ\nu3at4uPjoxw7dsx4zPXr15UePXoY65+VlaX4+/srb7zxhsm1UlJSlMDAQOM9bl5769atJnUbMmSI\nMmvWrDI9p1AUaQoTZjt48CCXLl1iyJAh2NnZGcudnZ0ZMGAAycnJJCQklHr+xo0bWbx4sUlZZmYm\nDg4OXLt2rVzq+Mwzzxi/VqvVNG3alEuXLpV6vE6nY+vWrbRr185Yn8zMTLKysujatSt5eXns2bMH\ngO3btxMQEGDyV7qtrS1fffUVCxYsMLuOW7duxcnJqVjngeHDh2NtbU1MTEypzwTg6+sLYHwud3d3\nsrKymDdvHmfOnAGgVatWbNq0iSeffLLUenTs2BFnZ2c2btxoLNu0aRMGg4EePXoYrw0wZ84cjh49\nCoCrqyu//PIL/fv3N/uZAWPzWb9+/YxlKpXK+EZ4083nf/XVV03K27ZtS3BwMFu3bkVRFNzc3ACY\nP38++/fvx2AwYG1tzfr16xk/frzxnnl5eYSFhRl/tpmZmWg0GoKDg9m+fbvJtT777DN2795NQUEB\nKpWKiIgI5s6dW6bnFNIUJsogKSkJoMQuuo899hgAFy5coHnz5iWer9Fo+PPPP9m4cSNnzpwhMTGR\nzMzMUq9ZVlZWVtSsWbPYPfV6fann3BxrEx0dXWJOBQrzKoqikJKSQtu2bYvtv9nUZ66kpCTq16+P\nhYWFSbmNjQ2enp5cuHDBpNzZ2dlkW6PRAGAwGAB4+eWX+eOPP/jmm2/45ptv8Pb2JjQ0lN69e+Pj\n41NqPSwtLXn22Wf58ccfjc1h0dHRtGzZ0tiL7fnnnycmJob169ezfv163Nzc6Ny5My+88EKpTX2l\nSU5ORq1W4+XlZVJ++/cvOTkZlUpV4u9Eo0aNiI2N5erVq7Rv357+/fuzcuVKdu3ahZOTE506deL5\n55/niSeeADDmUcaOHVtqvbKzs/H29mbSpEksWrSIYcOGUaNGDTp27MgzzzzD008/jVotf4OXhQQW\nYTblDknMmx9yVlZWpR4za9YsfvjhB1q2bIm/vz8vvvgirVu35s033yQnJ+e+66dSqcp8zs2g0717\nd1566aUSj6lfvz6KotwxQJUXg8FQ7Ht4tw+1WrVqsXLlSvbt28evv/7Kb7/9xrfffst3333HwoUL\njbmGknTv3p3IyEi2bdtGYGAgBw4cMBkMq9Fo+Pzzzzl69CibN29m165drF69mlWrVvHmm2/y8ssv\nm/1sKpUKRVHQarVYW1ubPHNRd/o9u7nPysoKlUrFnDlzGDZsGJs3b2bnzp1s3LiRn376ifDwcP75\nz38arz1v3jzjW8ntbuaXRo8ezYsvvsjmzZvZsWMHO3bsYPPmzfz888989tlnZj+nkMAiysDT0xOA\n06dPExISYrLvZhPMzaaT2505c4YffviBvn37FmtayMjIMPmgqUyurq5YWVlhMBh4/PHHTfadP3+e\nY8eOYWtri1qtxt3dnfPnzxe7xg8//MDff//N22+/bdY9PT09OXHiBHq93uSt5fr166SkpNzxLaMk\np0+f5tq1awQFBREUFMTrr79OQkICgwcP5ptvvrljYAkMDKRevXrExMRw8eJF1Gq1cWAnFL5dpaWl\n0bp1a5o1a8bEiRNJTk5myJAhfPXVV2UKLPXq1UNRFBITE02e8fbvqaenJ4qicObMGWOz301nzpzB\n0dERW1tb0tLSOH36NO3bt+fVV1/l1VdfJTMzk9dee40VK1YwdepU4++si4tLsZ/vH3/8gUqlQqPR\nkJWVRUJCAm3btiU8PJzw8HBycnKYPn06MTExnD17VsYilYG83wmzBQYG4uTkRGRkpElO5MqVK6xa\ntQpPT0/jB8bND8ybfzFevnwZuNVkdtOWLVu4cOFCpbwNlMTa2ppOnTqxZcsWTp06ZSxXFIV///vf\njBs3jqtXrwLwxBNPsH//fo4dO2Y8Lj8/ny+//JJjx45hYWFR7LlLEhoaSlZWFqtXrzYpj4iIID8/\nn86dO5fpGd5++23GjRtHXl6esaxx48bY29sXa24rSffu3dm1axe//PIL7du3p06dOsZ9n376Ka+8\n8opJnsrT0xNXV1ezrl1Uly5dUKlUfP311yblN3u33RQaGgpQbIqXuLg4YmNjjd+fVatWMXToUJOf\nh7OzM/Xq1UOlUqFWqwkJCcHKyoovv/wSnU5nPC4pKYnRo0fzySefALBt2zZefvlldu3aZTzG3t6e\nxo0bA5T5WR918sYizKbRaJg5cyYzZsygd+/evPTSS+j1elavXk1WVhafffaZsTnKyckJgGXLltGp\nUyfatWuHq6srixcvJjc3lzp16nDgwAHWrVuHtbV1hY7Sv5vp06ezd+9e+vfvz6BBg3BzcyMmJoZd\nu3YRHh5O/fr1gcJ2+piYGAYPHsyQIUNwcXFh/fr1JCUl8e9//xu4lQ9Zu3Yt169fp3fv3sXuN3Dg\nQNavX8+//vUv4uPjadasGQcPHmTdunW0bduWF154oUz1HzZsGGPGjGHw4MH07NkTS0tLNm/eTEpK\nCq+//vpdz+/Roweff/45cXFxzJs3z2Tf4MGD2bBhA4MGDaJv377Y29vz+++/ExcXx/Tp043H7d27\nl+TkZJ5++ulS3z4bN27M4MGD+e6778jJyaFDhw7s2bOH2NhYk+NatmxJv379WLVqFVeuXOHJJ58k\nJSWFFStW4OLiwuTJkwF46aWXiIyMZMSIEQwYMIA6depw8OBBoqOjGTBgABqNBldXV8aPH8+HH37I\nwIEDee6558jPz2fFihUYDAbjM3Tt2pXPPvuMGTNmMHDgQLy8vDh58iQrVqzgH//4B/Xq1SvTz+SR\nV0W90UQ1dafuxjft2LFDGTBggOLv768EBQUpI0aMUPbv329yTEZGhjJ48GClRYsWSs+ePRVFUZSj\nR48qQ4cOVYKCgpQ2bdooL774orJ69Wpl6dKlio+Pj3L8+HFFUe69u3HR7dLKS+oOrCiKcurUKWXC\nhAlKcHCw4ufnp3Tv3l357rvvjN2nbzp//rwyefJkpW3btkpgYKAyaNAgJTY21rjfYDAob731lhIQ\nEKAEBAQoKSkpxbobK4qiZGdnK++++67yxBNPKC1atFCeeuop5eOPP1by8/ONx5R0XmnlW7ZsUfr1\n66e0adNG8ff3V/r27ats2rTpjt/Dol588UWlVatWJt2Kb4qNjVWGDh2qtGvXTmnVqpXy/PPPF+tq\nfLO7d9Hu5SUxGAzKl19+qYSFhSktW7ZU+vfvr8TFxZl0N7553PLly5Vnn31WadGihdKxY0flzTff\nVFJTU02ud/ToUWX06NFKx44dlRYtWijdunVTlixZomi1WpPj/ve//ym9evVSWrVqpQQHByvDhw9X\nDhw4YHLMuXPnlGnTphl/JqGhocr8+fOVnJwcs76H4haVosiwUiGEEOVHcixCCCHKVaUHFr1ez4IF\nC+jUqZNx3qM7DWC7Of1DQEAATz31FEuXLjVJ9GZmZjJ9+nTat29Pu3btmDhxIqmpqZXxKEIIIUpQ\n6YFl0aJFrF27lvfee4/IyEhSU1ONo2Rvt2PHDqZNm0afPn1Yv349U6dOZdmyZSxZssR4zJQpU0hK\nSuLrr79m+fLlpKWl3XEwlBBCiIpVqTkWrVZL+/btmTVrFr169QIKu/2FhYURFRVVbCTv6NGjsba2\nZuHChcayxYsXs2bNGmJiYsjJyaFNmzZ89tlnxqkrduzYwauvvsqePXtwdHQssR7Xr1/n8OHD1KlT\nR7oRCiGEmfR6Penp6bRs2fKOC/hVanfjhIQEcnNzCQ4ONpZ5eXnh6enJ3r17SwwsReekgsJRyNnZ\n2UDhGAQ7OzvWrVtHcHAwKpWKdevWUb9+fRwcHEqtx+HDhxk0aFA5PpkQQjw6VqxYccfF9io1sNzM\nfdw+tYKrq2uJeZHbp+TOyckhKirKOOrbysqKefPm8dZbb9GmTRtUKhUuLi6sWLHijtNg3BwAtmLF\nilJHigshhDCVmprKoEGDTAbRlqRSA0teXh5qtbrYXEgajcZkgaPSzh0zZgz5+fkm6zecPn0aHx8f\nxo8fj1qt5uOPP2bcuHFERUVhb29f4rVuNn+5u7sXmxBPCCHEnd0thVCpgcXGxgaDwYBOpzNZyEir\n1ZosNHS7zMxMxowZw8mTJ/n666+N8//s3buXjz/+mO3btxvfghYvXkxoaChr164tNh23EOLhptcb\n2Lr3PGdSslGrVFioVVhYqLBQq7G0UKFWq7C0UN8oL/x/YXnhfgu1+sbxRferTa5j3H/ja3tbK+xs\nSp989VFUqYHl5kp26enpJqvapaWllTrzaFJSEsOHDyc3N5fIyEiTSekOHDhAnTp1TM51cHCgQYMG\nJS53KoR4eCmKwvb9SRw7l1Wp91WpVDRv6EyHVh7YaGSWLKjk7sa+vr7UqFHDZG6gpKQkkpOTS1zn\nIiMjg/DwcAwGA1FRUcVmOnV3dycjI4OMjAxjWV5eHklJSTITqRCPmH0JaRw9m1np91UUhSOnM/j+\nl2OcTLp8x2n/HxWVGl41Gg0DBw5k/vz5ODk54eLiwpw5cwgODiYgIACtVsuVK1eoVasWGo2GOXPm\nkJWVxbfffouNjQ3p6elA4V8ItWvXJjQ0FHd3dyZNmsTrr7+OlZUVn3zyCdbW1mWeyE8I8eA6fi6L\nPw+nGLebNXDmcb+66A0Ker0BvUFBpzdguPH/wnIFvcFw4/9Fy0336/RKYRP+jeOKXk9bYCDr6nUA\nrl0vYNMfZ2no4cA/Wnthb6epou9G1av097ZJkyah0+mYPn06Op2OkJAQZs+eDRROix0eHk5ERAT+\n/v5s2bIFg8FAnz59TK5hYWFBfHw8NWrUICIigvnz5/Pqq6+i1+sJCgpixYoVpSbuhRAPlwuXcoj5\n65xx28u1Jp1be2FhUfENMoqicDr5Cjvjksm9XgDAmZRskn5JoH1LD1o9Vhu1uuwL0D3oHslJKG8O\nyoyJiZFeYUI8wC5fzee/W09wXVu41oqzgw29QhtXeq4jv0DPH3+ncPiU6fRUbs52hAbVo7Zj6Z2T\nHiTmfnbKJJRCiAfS9XwdP/922hhUbK0tea5jwypJoFtbWdC5tRcvhTbB2eHWiPSLmddY/etx/vj7\nAjp96Yu/PWwksAghHjh6vYHo3We4nFM4/s3SQs1zHRtSy75qlri+yaN2Dfp18aFdC3csbjSBGRSF\nfQlpRG0+xvmLV6u0fpVFAosQ4oGiKAoxe89z4VLhqqMqlYouwd64u9So4poVsrBQ07a5O/27NqVu\n7Vu53is5+fxv5yl+jT1HXr7uDld48ElgEUI8UPYcSeV4kbEqHVp50Nir5Alnq5JTTRte7PwYoUH1\nsNbcGqmekJjJ978kcCwx86HtmiyBRQjxwDh6JpO9Ry8at1s2ciHQ587zVlUllUpFi0YuDOrmS5N6\nt4JfXr6OLbHn+GnXaa7k3Hk6qweRBBYhxAPh/MWrbNt33rjt7V6TJwK9UKmqf3deOxsrurVvQPdO\njahZZHzLuYtXidp8jP3H0jAYHp63FwksQohqLzP7Opv+OIvhRtNRbUdbnm7f4IEbI9LAw4GB3Zri\n36SOMSDq9AZ2H7rADzHHScu8VsU1LB8SWIQQ1dq16wX8/Ntp8gsKlyS3t7Wie8eGaKwezEX6rCwt\nCAnwpPeTTUzGt6RfzuOHrSfYdSCZAp3+Dleo/iSwCCGqrQKdgQ2/nyE7VwuAlaWa5zo2eiimS3Fz\ntqNPmA+P+9XF8sYsAYqicPBEOt//cozElOwqruG9k8AihKiWFEXh19hELt5oHlKpVHRr34A6Tg/H\nKHYAC7WK1k1dGdC1KfXcahrLr17T8tNvp/nlz7NcuzFVzINEAosQolra/XcKp5KvGLefCPCkgUfp\nS44/yGrZW/N8SCOeCvbG1vrWzAEnzl9mxS8JxJ/JeKC6JktgEUJUO4dPXSLuWJpx279JHVo1rl2F\nNap4KpWKpvWdGdjNF9/6zsbyfK2erXvPs27HKeNMytWdBBYhRLWSmJLNjrhk43bDurXo6Fe3CmtU\nuWytLekS7E3PJx4zmaImOT2HlZuPmQwOra4ksAghqo1Ll/PY9OdZY7OPq5MdXdt5P3DdistDPbea\nDOjalCBfV9Q3uibrDQqb9ySyPyGtWjeNSWARQlQLOXmF3YoLdIWzANe009C9U0OsLB/MbsXlwdJC\nTYdWdenbxcdk1uTdf19gx/6kajuoUgKLEKLKFej0bPjtNDl5hT2gNFYWdO/UEDsbqyquWfVQ29GW\nXqGN8axza1LLw6cz2PD7mWo55kUCixCiShkMCr/8mUj65TwA1CoVz3RogEuth6dbcXmw0VjyfEgj\nmno7GcsSU7NZs/0kuXnVq0uyBBYhRJVRFIVdB5I5W2Qw4D9ae5mM6RC3WFio6RLsTZtmbsay9Kw8\n/rv1BJnZ1afHmAQWIUSVOXTiEn8XWc43yNeVFo1cqrBG1Z9KpaJ9Sw9Cg+oZk/pXr2n5cesJktNz\nqrh2hSSwCCGqxOnkK/x26IJxu0k9R9q39KjCGj1YWjRy4bmODbGyLPwYzy/Q87+dp6pFd2QJLEKI\nSpeWeY3NexKNXWY9XGoQ1tb7gZgCvzqp7+FAr85NqHGjk4PhRnfkvUcvVml35EoPLHq9ngULFtCp\nUycCAwOZMGECly5dKvX46OhoevbsSUBAAE899RRLly5Fr7/VC0JRFL744gtCQ0MJCAhg0KBBHD16\ntDIeRQhxD7Jztfz8+xl0+sJuxQ41NDzzeAPjRIyibOo42dI7rAkuRboj/3k4he1V2B250n+SixYt\nYu3atbz33ntERkaSmprK+PHjSzx2x44dTJs2jT59+rB+/XqmTp3KsmXLWLJkifGYxYsXs2zZMv75\nz3+yZs0a3NzcGDlyJDk51aOtUQhxS35BYbfimxMrWmss6BHSSLoV36eadhpeDG2Ml+ut7shHbnRH\n1hZUfndky9J2vPPOO2W6kDnHa7VaIiIimDVrFh07dgTgww8/JCwsjP3799O6dWuT41euXEnXrl0Z\nPHgwAN7e3pw6dYo1a9YwduxYcnNz+fLLL5k1axZdunQB4F//+hfPP/888fHxBAcHl+kZhBAVR29Q\n2PTHWTJu9F5Sq1U8+3hDnGra3PlEYRYbjSU9OjVi277zJCQW5lkSU7NZu/0kz3VqhL1t5QXvUgPL\ntm3bTLYzMjLQ6XS4urpSp04dLl++zIULF7C2tqZx48Zm3SwhIYHc3FyTD3wvLy88PT3Zu3dvscAy\nevRo7OzsTMrUajXZ2YVdE/ft20d+fj5PP/20cb+9vT1bt241qz5CiMqhKAo79p/n/MWrxrKwNvVM\nBvyJ+2dhoSasrTc17TT8dfQiULiA2H9jjtMjpFGljQ0qNbDs2LHD+HV0dDTz5s1j4cKFJh/+CQkJ\njBs3jhdeeMGsm6WmpgLg5uZmUu7q6mrcV5Sfn5/Jdk5ODlFRUYSEhABw9uxZnJ2dOXjwIB9//DFJ\nSUk0a9aMN9980+xgJ4SoeHHH04k/k2ncDm7hTtMiM/iK8qNSqWjX0oOaNTRs35eEQVHIyStgzbaT\nPN2hQaWMETIrx7JgwQKmTJlS7I3C19eXSZMmsXTpUrNulpeXh1qtxsrK9JVMo9GQn59/13PHjBlD\nfn4+U6dOBQoDTW5uLnPnzmXUqFEsWbIEOzs7Bg0aRGZm5h2vJ4SoHHn5OvYcTjFu+9Z3om0ztzuc\nIcpD84YuPNfJtDvyT7+d5lhixX82mhVYMjMzcXR0LHGfjY0Nubm5Zt3MxsYGg8GATqczKddqtdja\nlv6KlpmZybBhw4iPj2fZsmV4enoCYGlpSV5eHu+88w5PPvkkfn5+fPDBB6hUKv73v/+ZVSchRMU6\nlpiJ/kbvpNqOtoQG1ZNuxZWkvnthd+Sb+RWDQWFL7LkK745sVmDx9/dnyZIlxXpaZWZm8umnn9K2\nbVuzbubhUTj4KT093aQ8LS2tWPPYTUlJSQwYMICkpCQiIyNNmsdunuPj42Mss7a2xsvLi6SkJLPq\nJISoOIqicPh0hnHbr3FtLKRbcaWq42RL7yeLd0feti/JGPDLm1k/4ddff50TJ07QuXNnRo0axcyZ\nM3nttdcICwvj0qVL/POf/zTrZr6+vtSoUYPY2FhjWVJSEsnJySUGp4yMDMLDwzEYDERFReHr62uy\nPygoCIC///7bWHb9+nXOnz9PvXr1zKqTEKLipFzK5fLVwmZujZUFTeqV3PIhKpa9nYZeTzbBy/VW\nfiX+TAYbfj9dId2RzQoszZo14+eff6ZXr16kp6cTGxtLZmYmQ4YMYf369WZ/iGs0GgYOHMj8+fPZ\nuXMnR44cYcqUKQQHBxMQEIBWqyU9PR2tVgvAnDlzyMrKYsGCBdjY2JCenk56erpxQKWXlxfPP/88\nc+bMYffu3Zw6dYqZM2eiVqt5/vnn7/FbIoQoL0XfVnzqOT7Sa6tUNWsrC3p0amiy7PG51Kus3X7S\nuFxBeSm1V9jtPDw8mDlz5n3fcNKkSeh0OqZPn45OpyMkJITZs2cDEBcXR3h4OBEREfj7+7NlyxYM\nBgN9+vT9rYp9AAAgAElEQVQxuYaFhQXx8fEA/Pvf/+ajjz5i+vTp5OTkEBAQQEREBM7O0uNEiKp0\nPV/HqaTLxu0WjR7uNesfBIXdkevhUENDbHxhT9yK6I6sUszM4CiKwqZNm9i9ezfp6em8+eabHDp0\niBYtWtCoUaNyqUxlSUpKIiwsjJiYGLy8vKq6OkI8lA4cT+O3g4WTTLo62dG3i89dzhCV6eiZTLbt\nO4/hRgjQWFnwzF26I5v72WlWU1hOTg6DBg1i8uTJ/Pbbb+zYsYOcnBzWrVtH3759SUhIKOMjCSEe\nZoqicOT0rW6tMhV+9dOsoTM9QhqhsSpsntQW6Plp12kSyqE7slmBZf78+Zw7d441a9awZcsWYze1\nhQsX0qBBAxYuXHjfFRFCPDxSLuWSdbVw6hYrSzU+3pK0r47qudWkV+fGt7ojKwq/xp4jNj71vroj\nmxVYtmzZwpQpU2jevLlJ//OaNWsyatQo4uLi7rkCQoiHz5EiSfum3k6StK/Gajve6I5cJL8SeySV\nHfvvfciGWYHl2rVruLiU/CprbW1911HzQohHx/V8HSeLJO2bSzNYtWdvp6FXaGOT/Mrh0xlcupx3\nT9czK7C0aNGC1atXl7hv48aNNG/e/J5uLoR4+BxLzDIOvHN1ssPVye4uZ4jqwNrKgu6dGtG8YWGP\nWhuNJTVraO7pWmZ1N544cSLDhw+nd+/edO7cGZVKxebNm1m6dCm//vorX3zxxT3dXAjxcFEUhSNn\nbjWDSdL+wWKhVvFkG2+CfN2wtbY0JvbLyqw3lnbt2vHll1+iUqlYvHixcdXGs2fPsnjxYjp16nRP\nNxdCPFxSMnLJzL6VtJeR9g+mWvbW9xxUoAwDJNu3b88PP/xAbm4uV65coWbNmtSsWfHTLwshHhxH\nThUZae/tdF8fTuLBZdYbS7du3YxjVWrUqEHdunWNQeXQoUM8/vjjFVdDIcQD4fakfYuG0gz2qCr1\njSU6Ohq9vnByssTERLZu3cqJEyeKHbd7926uX79ecTUUQjwQiiXtnSVp/6gqNbAcOHCAiIgIoHBF\nsk8++aTUi7z88svlXjEhxINDkvaiqFIDy7Rp0xg6dCiKotClSxc+/fRTmjVrZnKMhYUF9vb22NvL\nutVCPMokaS+KKjWwaDQa40qNmzdvxsPDg/T0dOrWrQtAVlYW586dw93dvXJqKoSotuJPS9Je3GJW\n8t7e3p7w8HCGDRtmLDt06BD9+vVj+PDhxVaWFEI8Oq7n6zhxXpL24hazAsv7779Pamoqb731lrEs\nJCSE5cuXc+bMGT766KMKq6AQono7du5W0r6Ok60k7YV5gWXnzp3MmDHDZCCkWq2mffv2TJkyhS1b\ntlRYBYUQ1ZeiKCbNYPK2IsDMwJKXl4etbckri9WsWZPs7OxyrZQQ4sGQmnGNjOyi0+M7VXGNRHVg\nVmDx9/fnu+++Q6fTmZQbDAZWrFhBy5YtK6RyQojq7cjpS8avm9STpL0oZNaULuPHjyc8PJxu3brR\nuXNnnJ2dycrKYufOnaSkpLB8+fIKrqYQorq5rtVxMumKcbuljF0RN5gVWFq3bk1UVBSff/45GzZs\n4MqVK9jb2xMUFMQHH3yAn59fRddTCFHNHD+XhU5vAKCOoy11nEpuLhePHrMnoWzVqhWfffbZfd9Q\nr9ezcOFC1q5dS25uLiEhIcyePZvatWuXeHx0dDRffPEFiYmJ1KlThz59+jB8+HAsLIq/cm/atImJ\nEycSExODl5fXfddVCFEyRVFMJpxs0cjFZHVZ8WgzK8dy06FDh1iyZAlz584lJSWF3bt3k5mZWaYb\nLlq0iLVr1/Lee+8RGRlJamoq48ePL/HYHTt2MG3aNPr06cP69euZOnUqy5YtY8mSJcWOTUtL4+23\n3y5TXYQQ98YkaW8hSXthyqw3loKCAl5//XWio6OxtLREr9fTq1cvli1bxqlTp1ixYgX16tW763W0\nWi0RERHMmjWLjh07AvDhhx8SFhbG/v37ad26tcnxK1eupGvXrgwePBgAb29vTp06xZo1axg7dqzJ\nsTNnzsTHx4fY2FizHlwIce+KrmnfxNtRkvbChFlvLB9//DHbt29n0aJF/PXXXyhK4WCoOXPmYGtr\na/YAyYSEBHJzcwkODjaWeXl54enpyd69e4sdP3r0aMaNG2daYbW6WPfmFStWkJ6ezpgxY8yqhxDi\n3hUm7YuMtG9UcjO2eHSZFVjWr1/PlClTeOqpp9Bobq2B7O3tzYQJE9izZ49ZN0tNTQXAzc3NpNzV\n1dW4ryg/Pz8aN25s3M7JySEqKoqQkBBj2ZkzZ1i4cCHvvfceVlZWZtVDCHHvbk/au0rSXtzGrMBy\n+fJlGjZsWOI+Jycns+cKy8vLQ61WFwsAGo2G/Pz8u547ZswY8vPzmTp1KgA6nY4ZM2YwYsQIfH19\nzaqDEOLeKYrCkdO38qrNJWkvSmBWYGncuDHR0dEl7tu1axePPfaYWTezsbHBYDAUG2ip1WpLHdkP\nkJmZybBhw4iPj2fZsmXGWZeXLFmCWq1mxIgRZt1fCHF/LmZeI+NKHiBJe1E6s5L3r732GhMnTuTq\n1auEhoaiUqk4cOAAGzZs4LvvvmPevHlm3czDwwOA9PR049dQ2KPr9uaxm5KSkhg+fDi5ublERkaa\nvJmsWbOGtLQ02rRpAxTOBADQvXt3Ro0axahRo8yqlxDCPLcn7a0laS9KYFZg6datG/PmzWPBggVs\n3rwZgLlz5+Lo6MjMmTPp3r27WTfz9fWlRo0axMbG0rNnT6AwcCQnJ9O2bdtix2dkZBAeHo6FhQVR\nUVHFep7dPs3MkSNHmDx5MkuXLsXHx8esOgkhzHNde9v0+JK0F6UoNbB88803PPfcc7i6ugLwwgsv\n0LNnT06ePMnly5epWbMmjRs3xtLS7DGWaDQaBg4cyPz583FycsLFxYU5c+YQHBxMQEAAWq2WK1eu\nUKtWLTQaDXPmzCErK4tvv/0WGxsb0tPTgcKlkmvXrm1sErvp5v66devi6Cgr2AlRnk6cu2xM2teW\npL24g1Kjwscff4yfnx+urq60bNmSqKgoWrVqRZMmTe7rhpMmTUKn0zF9+nR0Op1x5D1AXFwc4eHh\nRERE4O/vz5YtWzAYDPTp08fkGhYWFsTHx99XPYQQ5lMUhcO3TY8vSXtRmlIDi729Pd9++y3Jycno\ndDp27tzJ2bNnS71Qjx49zLuhpSVvvPEGb7zxRrF97dq149ixY8bto0ePmnXNm9q0aWNyvhCifBRL\n2teXpL0oXamBZcSIEcyfP5/NmzejUqlYtGhRqRdRqVRmBxYhxINHkvaiLEoNLC+//DK9e/fmypUr\nhIWF8emnn9KsWbPKrJsQohrIL9CbJO2byyqR4i7umHm3t7fH3t6euXPnEhQUhJOTvP4K8ag5nphl\nkrR3kzXtxV2Y1aWrT58+XLt2jR07dpCXl2ccL1LUs88+W+6VE0JULUVROHJGkvaibMwKLLt372bC\nhAnk5uYaJ6AsSqVSSWAR4iF0MfMaly4XJu0tLdQ08ZZu/OLuzAos77//Pt7e3syYMQN3d3fU6jIt\n4yKEeEDFF3lbaVLPERuN+ePWxKPLrN+SkydPsnjxYtq3b1/R9RFCVBP5BXpOnCs60l6S9sI8Zr16\neHh4cO3atYquixCiGjl+LouCG0l7l1qStBfmMyuwjBgxgsWLF3Px4sWKro8QohoonB6/6Jr2zpK0\nF2Yzqyls69atpKamEhoairu7OzY2Nib7VSoVGzZsqJAKCiEqX1pWnknSXqbHF2VhVmCpWbMmnTt3\nruCqCCGqiyOnLxm/lqS9KCuze4UJIR4NWknai/tUamDJyMjA0dERCwsLMjIySjvMyMVFfvmEeBiY\nJO0dbCRpL8qs1MDSqVMnVq1ahZ+fHx07drxr4q6sMxELIaqfYkn7x2SkvSi7UgPLv/71L+OKjXPn\nzq20Cgkhqk5aVh7pkrQX96nUwFJ0ca3bF9oSQjycir6tNPaSpL24NzI3ixACuJG0P59l3JakvbhX\nEliEEMCNpL3uVtLe3UWS9uLeSGARQhRL2jdvJEl7ce8ksAghSL8tad9U1rQX96HSA4ter2fBggV0\n6tSJwMBAJkyYwKVLl0o9Pjo6mp49exIQEMBTTz3F0qVL0ev1xv2JiYmMGTOGdu3a0b59eyZMmMCF\nCxcq41GEeGgUXcyrsVctSdqL+2L2b8+6devYvn17iStIqlQqli5datZ1Fi1axNq1a3nvvfdwdHRk\nzpw5jB8/nqioqGLH7tixg2nTpjFz5kyeeOIJ4uPjeeuttygoKGDs2LFcu3aN4cOH07hxY7799lv0\nej3z5s1j5MiRrF27Fo1GY+7jCfHI0hboOX6uaNK+dhXWRjwMzAosH330EV988QUeHh64ubnd80Jf\nWq2WiIgIZs2aRceOHQH48MMPCQsLY//+/bRu3drk+JUrV9K1a1cGDx4MgLe3N6dOnWLNmjWMHTuW\n33//nZSUFNatW4e9vT0A8+fPp3Pnzhw8eJC2bdveUz2FeJQUTdo7S9JelAOzAsuPP/5IeHg4M2fO\nvK+bJSQkkJubS3BwsLHMy8sLT09P9u7dWyywjB49Gjs7019ytVpNdnY2AH5+fixdutQYVG7uB7hy\n5cp91VWIR4WsaS/Km1mB5erVq3Tp0uW+b5aamgqAm5ubSbmrq6txX1F+fn4m2zk5OURFRRESEmK8\nzu3XWrp0KXZ2drRp0+a+6yvEwy4t8xrpWZK0F+XLrDatgIAADhw4cN83y8vLQ61WY2VlZVKu0WjI\nz8+/67ljxowhPz+fqVOnlnjM999/T2RkJFOnTsXR0fG+6yvEw65Y0t5akvbi/pn1WzRu3DimTJmC\nwWAgMDAQW1vbYsfc/nZREhsbGwwGAzqdDkvLW7fWarUlXvOmzMxMxowZw8mTJ/n666/x9PQsdszn\nn3/OwoULee2114w5GSFE6W5P2jeXkfainJgVWIYMGQLAwoULi7W/KoqCSqUya3ZjDw8PANLT041f\nA6SlpRVr0ropKSmJ4cOHk5ubS2RkJL6+vib7DQYD77zzDqtWrWLatGmMHDnSnEcS4pF34vxlk6S9\nh0uNKq6ReFiYFVi++eabcrmZr68vNWrUIDY2lp49ewKFgSM5ObnEHlwZGRmEh4djYWFBVFSUcbbl\nov71r3/x3//+l//85z/06tWrXOopxKPAZHp8SdqLcmRWYOnQoUO53Eyj0TBw4EDmz5+Pk5MTLi4u\nzJkzh+DgYAICAtBqtVy5coVatWqh0WiYM2cOWVlZfPvtt9jY2JCeng4UjpupXbs227dvJyoqinHj\nxhESEmLcD+Dg4IC1tXW51FuIh016Vh5pWdcAsFCrJGkvypXZmbqzZ8+yaNEiYmNjycnJwcnJiaCg\nIEaPHk2jRo3MvuGkSZPQ6XRMnz4dnU5HSEgIs2fPBiAuLo7w8HAiIiLw9/dny5YtGAyGYtP2W1hY\nEB8fz08//QTAp59+yqeffmpyzPz5841vRUIIU/FFkvaPeTlK0l6UK5WiKMrdDjpx4gT9+/fHysqK\n0NBQateuTXp6Otu3byc/P5/Vq1fTpEmTyqhvuUhKSiIsLIyYmBi8vLyqujpCVKoCnYHlPx8hv6Bw\naqQXOzfGs479Xc4SwvzPTrP+TPnggw+oX78+ERERJoMRc3JyGDp0KB999BGfffbZ/ddaCFHhTiVf\nNgYVR3tr6taWpL0oX2aNY/nrr78YPXq0SVABsLe357XXXmPv3r0VUjkhRPmLLzo9viTtRQUwK7BY\nW1uXOj+YWq2moKCgXCslhKgYWdnXuXApFwC1SoVvA0nai/Jn9sj7L7/8Eq1Wa1Ken5/Pl19+WWyO\nLyFE9RR/JtP4dcO6DtjZWN3haCHujVk5lilTptC3b1+6dOlCWFgYtWvX5tKlS8TExJCdnU1kZGRF\n11MIcZ/0egMJibcCS/OGMtJeVAyzAkuTJk2Iiopi0aJFREdHk52djYODA23btmXcuHHFRsMLIaqf\nMxeyycvXAWBva0U9t5pVXCPxsDK787qvry+LFy+uyLoIISpQ0Qknmzd0Qa2WpL2oGKUGlujoaDp2\n7EitWrWIjo6+64WeffbZcq2YEKL8XMnJ5/zFq0DhzBXNGjpXcY3Ew6zUwDJlyhRWr16Nn58fU6ZM\nueNFVCqVBBYhqrGjZ2/lVuq52VPTTpbtFhWn1MCyefNm3N3djV8LIR5MBoNCQpHA0kKS9qKCldrd\n2NvbG42m8K+agwcP4uDggLe3d7H/7Ozs2LZtW6VVWAhRNomp2eTkFY41s7W2pEHdWlVcI/GwM2sc\ny4wZMzh37lyJ+44ePcoHH3xQrpUSQpSfomNXmjVwxkKS9qKCldoUNmrUKM6cOQMULuY1ceJE4xtM\nUWlpaSWukyKEqHo5eQUkpmQbt2XsiqgMpQaWkSNH8t///heAxMREfHx8cHY27UmiVqtxcHDgxRdf\nrNhaCiHuScLZTAw3JjD3rGOPY01Zo0hUvFIDS1BQEEFBQQDodDomTJggbyZCPEAURTFZd6W5dDEW\nlcSsHMv7779PYmIiCxYsMJYdOnSIESNG8Ndff1VY5YQQ9y4pLYfs3ML5/aw1Fjzm5VjFNRKPCrMC\ny6ZNmxg5ciTx8fHGMhsbG65fv86wYcP4/fffK6yCQoh7U/Rtpam3E5YWZv1zF+K+mfWb9vnnn9O/\nf3+++uorY5mPjw+RkZH07t2bhQsXVlgFhRBll5ev43TyFeN2i0aStBeVx6zAkpiYSLdu3Urc161b\nN06ePFmulRJC3J9jiZnoDYVJezdnO1xq2VZxjcSjxKzA4uzszNGjR0vcd+LECRwcHMq1UkKIe1eY\ntJfp8UXVMSuw9OjRg0WLFvHDDz+QlZUFwOXLl1m7di2ffPIJ3bt3N/uGer2eBQsW0KlTJwIDA5kw\nYQKXLl0q9fjo6Gh69uxJQEAATz31FEuXLkWv1xv35+Xl8dZbb9GuXTvatGnDrFmzyM3NNbs+Qjxs\nUjOukZl9HQArSzU+3pK0F5XLrMAyduxYOnTowFtvvcXjjz9OixYt6NChA2+++SbBwcFMnDjR7Bsu\nWrSItWvX8t577xEZGUlqairjx48v8dgdO3Ywbdo0+vTpw/r165k6dSrLli1jyZIlxmNmz57Nvn37\n+OKLL1iyZAmxsbHMnj3b7PoI8bApmrT38XbCytKiCmsjHkVmrcei0WhYvHgxR48eZd++fVy+fJma\nNWsSFBREy5Ytzb6ZVqslIiKCWbNm0bFjRwA+/PBDwsLC2L9/f7EljleuXEnXrl0ZPHgwUDh/2alT\np1izZg1jx44lNTWVn3/+meXLlxMQEADAu+++S3h4ODNmzMDNzc3sugnxMMgv0HPi/GXjtjSDiapg\n9kJfAM2aNaNZs2bFyvPy8rC1vXtyMCEhgdzcXIKDg41lXl5eeHp6snfv3mKBZfTo0djZ2ZmUqdVq\nsrMLp6jYv38/arXa5LzWrVtjYWHBvn37ZCp/8cg5fi4Lnd4AQG1HW1ydJGkvKp9ZgaWgoIAVK1bw\n119/UVBQgHJjigiDwUBeXh5Hjx4lLi7urtdJTU0FKPYm4erqatxXlJ+fn8l2Tk4OUVFRhISEAHDx\n4kWcnZ2xsrK69UCWljg7O5OSkmLOownxULl9pL1KJRNOispnVmBZsGABy5cv57HHHiMrKwsbGxsc\nHR05ceIEer2eMWPGmHWzvLw81Gq1SSCAwqa2/Pz8u547ZswY8vPzmTp1qrHM2rr43EfmXE+Ih01a\n1jXSs/IAsLRQ4+PtVMU1Eo8qs0feDx06lA0bNjBkyBD8/PxYs2YNv/zyCx4eHqjV5o3otbGxwWAw\noNPpTMq1Wu0dm9IyMzMZNmwY8fHxLFu2DE9PT+P1tFptseO1Wm2xJjQhHnZFuxg/5lkLG02ZWrqF\nKDdmRYRLly7RuXNnoHDE/aFDhwCoW7cur732Ghs2bDDrZh4eHgCkp6eblKelpZWaaE9KSmLAgAEk\nJSURGRlp0jzm7u5OZmamSfdjnU5HZmYmrq6uZtVJiIdBgU7P8XNZxu3mMtJeVCGzAou9vT0FBYUr\n0DVo0ICUlBTjWJGGDRty4cIFs27m6+tLjRo1iI2NNZYlJSWRnJxM27Ztix2fkZFBeHg4BoOBqKgo\nfH19TfYHBQWh0+lM8jv79u3DYDAYZ2YW4lFw8vwVtAWFf2A51rSmbu0aVVwj8SgzK7AEBQXx/fff\no9VqqV+/PjY2NmzduhWAw4cPU6OGeb/EGo2GgQMHMn/+fHbu3MmRI0eYMmUKwcHBBAQEoNVqSU9P\nNzZvzZkzh6ysLBYsWICNjQ3p6emkp6cbB1S6ubnxzDPP8M9//pN9+/axd+9e3nrrLXr27CldjcUj\nxTRp7yJJe1GlzGqEHTNmDIMHD2bEiBFERETQv39/Zs2axYoVKzh8+DB9+/Y1+4aTJk1Cp9Mxffp0\ndDodISEhxgGNcXFxhIeHExERgb+/P1u2bMFgMNCnTx+Ta1hYWBhnWn733Xd59913efXVV7G0tKRb\nt27MnDnT7PoI8aDLzL5OSkZhC4JapcK3viTtRdVSKTf7Dt9Famoqx44d4x//+AeKorB48WLi4uJo\n1aoVo0ePLrF3VnWVlJREWFgYMTExeHl5VXV1hLgvvx1M5sDxwrzlY16OPNOhQdVWSDy0zP3sNOuN\n5f/+7//o2bMn//jHPwBQqVSMGzeufGoqhLhner2BhLNFkvaySqSoBszKsaxatYrLly/f/UAhRKU6\nfeEK17WF3fdr2mmo51qzimskhJmBxc/Pz6yR9UKIylV07Eqzhs6o1ZK0F1XPrKawVq1asWTJEn75\n5ReaNWtWbPChSqXi7bffrpAKCiFKdiUnn/MXrwKF/wabN5BmMFE9mBVYNmzYgIuLC9nZ2ezZs6fY\nfgksQlS+om8r3m41sbfTVGFthLil1MCyceNGHn/8cWrVqsWOHTsqs05CiLswGBQSzt4KLLKmvahO\nSs2xzJw507iWfbdu3UhISKi0Sgkh7iwxNZvc64WzYdjZWFHfQ5YHF9VHqW8sGo3GOAdYYmIif//9\nN9euXSv1QrevpSKEqDjxp2+NtG/WwAkLSdqLaqTUwNK7d2+++uoroqKiUKlUpS73qygKKpWKo0eP\nVlglhRC35OQVcDb1qnG7WQNpBhPVS6mBZfr06bzwwgtkZWURHh7O7Nmzady4cWXWTQhRgoSzmcbF\n9rxc7XGs+eDMeiEeDXfsFdakSRMARo0aRVhYmEzsKEQVUxSl2ISTQlQ3ZnU3njRpUkXXo1q4nq8j\nNj4VG2tLAn3qYGVpUdVVEsJEUloO2bmFs3/baCxp5FmrimskRHGyxFwRh09ncOhk4ZT8J89f5pnH\nG+BU06aKayXELUeKJO2b1nfC0sK81VuFqEzyW1lEbcdbyyNnZl/nh5gTnEqSOdJE9XDtegGnL1wx\nbsuEk6K6ksBSRAMPB7q09Tb+Fagt0LPxj7PsPnQBg8Gs1QWEqDDHErOMv4fuLjVwqWV7lzOEqBoS\nWG7j28CZl0Kb4FDj1vQY+4+lsX7XKa7dGJAmRGVTFIUjJkl7eVsR1VepOZZ33nnH7Is8bHOF1XGy\npW8XH7bsOUdiajZQmDRd/etxnu7QAHcXWU9cVK6UjFwuX80HQGNlQZN6jlVcIyFKV2pg2bZtm9kX\nedgCCxT2uOneqSF/Hb3IX/EXURSFnLwC1mw/SUiAJy0bybriovIUHWnfpJ6j9FgU1VqpgUUmniwM\nmMHN3XFzsmNzbCL5Wj0Gg8KO/UlczMjlH63rYWUprYmiYl3X6jiZdCtp30LGrohq7r4/FfV6fYlT\n6T9M6ns40DfMhzpFeo0lJGbx47YTXMnJr8KaiUfBiXOX0ekNANRxtKWOkyTtRfVmVmBJTU1lzJgx\ntG3bloCAAPz9/fH396dVq1a0bNmSl19+2ewb6vV6FixYQKdOnQgMDGTChAlcunTpruedO3eOwMBA\nUlNTTcozMzOZPn067du3p127dkycOLHYMeWhlr01Lz3ZhGZFFlO6dDmP1THHOZuSXe73EwJKHmkv\nTbCiujMrsPzf//0ff/75J927d6dhw4Y0b96cAQMG0KBBA1QqFYsWLTL7hosWLWLt2rW89957REZG\nkpqayvjx4+94zpkzZ3jllVdKnF15ypQpJCUl8fXXX7N8+XLS0tIYO3as2fUpC0sLNU+2qUdoUD3j\nbLL5Wj0//3aa2COp0iVZlLv0rDzSL+cBhb9/TbwlaS+qP7MCy549e5g0aRJvv/02vXr1ws7Ojjfe\neIO1a9cSFBTE9u3bzbqZVqslIiKCKVOm0LFjR1q0aMGHH37I/v372b9/f4nnfPvtt7z00ks4OBRf\nbyInJ4c///yTkSNH0rx5c5o1a8aoUaM4fPgwly9XzMBGlUpFi0Yu9Aptgr2tlbE8Nj6Vn38/zfV8\nXYXcVzyair6tNPaqhY1GJssQ1Z9ZgSU3N5dmzZoB0KhRI+Lj4wGwtLRk0KBB7N6926ybJSQkkJub\nS3BwsLHMy8sLT09P9u7dW+I5MTExzJ07l9dff73YPmtra+zs7Fi3bh05OTnk5uaybt066tevX2Ig\nKk9uznb07eKDl2tNY9m51KusjjlOWlbp69YIYa4CnZ7j52/9gSQTTooHhVmBpU6dOmRkFP7lVL9+\nfS5fvkx6ejoATk5Oxn13czP3cfssya6urqXmRSIiInjuuedK3GdlZcW8efPYs2cPbdq0oU2bNvz1\n118sW7YMtbrie2vZ2VjxfEgjgnxvPU92rpYft57gaJH1yIW4FyfPX0FboAfAsaY1HrVl/JR4MJj1\n6RsSEsKiRYv4+++/8fLyws3NjYiICLRaLevXrzd7Ov28vDzUajVWVlYm5RqNhvz8e+tddfr0aXx8\nfIiIiOC7776jYcOGjBs3jpycnHu6Xlmp1So6tPLg2ccborEqHFugNyjE7D3Htn3n0d/ozSNEWR2R\npJkZQL4AACAASURBVL14QJkVWCZOnIiVlRUffPABUDiN/pdffklAQABr1qxh6NChZt3MxsYGg8GA\nTmeah9Bqtdjalr0L5d69e/n444/54IMPCA4Opk2bNixevJgLFy6wdu3aMl/vfjTyrEWfsCa4ONya\nDfnI6QzWbD/J1WvaSq2LePBlXMkjNSMXKPzjxbe+UxXXSAjzmZUJdHFxYe3atcbmqhdeeAEPDw8O\nHDiAn58fHTp0MOtmHh4eAKSnpxu/BkhLS7unRcQOHDhAnTp1TM51cHCgQYMGJCYmlvl698uppg29\nw5qwdW8SJ85nAXAx8xqrthynW/v61HOreZcrCFEovkhTaqO6tbCzsbrD0UJUL2a9sSxZsqRYMGjX\nrh2vvfYa3t7e/Oc//zHrZr6+vtSoUYPY2FhjWVJSEsnJybRt27aMVQd3d3cyMjJMcjx5eXkkJSXR\noEGDMl+vPFhZWtC1nTchAZ6obzRdXNfqWL/rNHuPXjQuKStEaXR6A8cSs4zbMuGkeNCYFVg+/vjj\nUpPrhw4d4vvvvzfrZhqNhoEDBzJ//nx27tzJkSNHmDJlCsHBwQQEBKDVaklPT0erNa/pKDQ0FHd3\ndyZNmsThw4c5duwY06ZNw9ramhdeeMGsa1QElUqFf5M6vND5MeNfmoqi8OfhFKJ3nyX/RkJWiJKc\nTr7CdW1hc7FDDY286YoHTqlNYYMGDeLgwYNA4YfiwIEDSzxOr9fTokULs284adIkdDod06dPR6fT\nERISwuzZswGIi4sjPDyciIgI2rVrd9dr1ahRg4iICObPn8+rr76KXq8nKCiIFStWYG9vb3adKkrd\n2vb06+LDL38mcuFSYWeCMxeu8MOvx3nm8QaynoYoUdFmMEnaiweRSimlbebkyZNs2rQJRVFYvHgx\nvXv3xt3d3eQYtVqNg4MDTz311D3lSKpKUlISYWFhxMTE4OXlVeH30xsU/vj7AgeOpxvLrCzUhLap\nh4+3JGXFLVdy8vlu41Gg8M136LPNsLfT3OUsISqHuZ+dpb6xNG7cmHHjxgGFbyUDBgx4oIJHdWKh\nVtHJ3xM3Zzu27j1Pgc5Agd7A5j2JpGbk8rhfXVm7XACFi8rd1MC9pgQV8UAyq1fYpEmTAPj999+J\njY3l6tWrODk50aZNG7N7hAloUs8JZwcbNv5x1rho06GTl0hOy+GpdvWp7ShNY4+yk+cvc6TIuivN\nG8lIe/FgMiuwaLVaxo4dy65du7C0tMTR0ZGsrCwMBgMdOnRgyZIlaDTyl5U5XGrZ0jfMh5i/znEq\nuXCNjYzs6/wQc5x2LT0IaFIHtVra1B81l6/ms3XfeeP2Y561aOBRsdMSCVFRzO4VtnfvXj744AMO\nHTrEb7/9xqFDh5g/fz4HDhxg8eLFFV3Ph4rGyoKnOzSgc2svYxOY3qCw+9AF/rfzlAyofMTo9AZ+\n+fOscfoWhxoanmzrLUl78cAyK7Bs2LCBiRMn0r17d+McXBYWFvTo0YMJEybw008/VWglH0YqlYqW\nj9Wm31M+uDr9f3t3HhZV2f4B/DvDDgPKLpsCySCyCAi4kQuRCwqm/soF3ACL1NzeLFNzSSuXNM18\nNTF6NUt7U9HK7BVJzR0FdwUVZRn2RYEBhmFmnt8fyLEJQdSRYeD+XBfX5Txnzpn7jHDuc87znOc2\n5NpzisTYcyQNaZml9MxLO3Hycg43Nb4Wn4ehfRyhp0Olh4nmalZiefjwIYRC4ROXCYVCbkJK8uxM\njfUxJsgF/m7W3BlqTa0cCUlZOHI+k3uegbRNaZmlSv0qr3rbKZ1oEKKJmpVYnJyccOrUqScuO3ny\nZIsM2W3LtPg89PKwweiBXWFi9Liv6k72Q+w5kobsggo1RkdeltJyCY4ni7jXLg6mcKcOe9IGNKvz\nftKkSVi0aBEUCgVCQkJgaWmJoqIiHDp0CLt27cKCBQtedpztgo2FEca97opTV3K4h+TE1bU4+Fc6\nvIWW6O1hQ8OS24hamRz/O5uB2kezX3c01sOgnvbUr0LahGYlllGjRiEjIwPffvstduzYwbVraWkh\nKioKEydOfGkBtje6OloI8usMR5sOOJacjepHFSkv3y5Cdn4FDUtuAxhjOJEiQkm5BEBdyeFhfRy5\nsguEaLpm1zmdO3cuJk+ejCtXrqCsrAwmJibw9vaGmRlNkPcyONt1QCdzQyReyEZmfjkA5WHJPkJL\nOrvVULcySpH6t0kmB/jY0/Q+pE1p9L7KpEmTkJ6ertRmZmaGQYMG4Y033kBQUBAllZfMUF8HIwKd\nMMDnycOSxTQsWeMUP6zGX5dyuNdujmZwo9mLSRvTaGJJSkpCZWVlS8ZCnoDH48Gza8NhyaJCMXYf\nScPtrAdNrE1aE2mtHH+cy4DsUb+KuYk++vvQwBfS9lBPsIaoH5bs949hyUfOZ+J/52hYcmvHGMOx\nZBE3lY+ONh9D+jhCR5v+BEnbQ7/VGkSLz0PvJw5LfoA9R9IgKqRhya3VjXslXFVRABjU0wFmfytj\nTUhb0mTn/cqVK5tV14TH4+Hbb79VWVCkaY0PS74HbxdL9PboBC0altxqFD6owsnLj/tV3J3NqVwC\nadOaTCwymQy1tbUtFQt5BvXDkrt0MsGxZBEkUhkYY7h0uxBZBRUY3KszjTRqBSRSGf44mwG5om56\nHsuOBnjV2069QRHykjWZWJYtWwYvL6+WioU8h1fsO6KTuRESL2YhK7/uVlhJWTX+e/Q2+njaoIcL\nDUtWF8YYjl3MRnll3eg9XR0tDOntSA+5kjaPfsPbACMDHYQGOjcYlnzqSi4O/nWPhiWrydU7xVxp\nBAAI8nNAR2M9NUZESMugxNJGcMOSg/85LLkCuxNoWHJLyy+pxOmrudxrr64W6GrfUY0REdJyGk0s\no0aNgqkpdTBqGlMTfYwZ1FV5WLK0bljy4bMZKBPXqDfAdkBSI8P/zmVC8ajsgbWZIfp52ao5KkJa\nTqN9LJ9//nlLxkFUSEuLj94eNujSyQQJSZncPf500UNk5Jahh4slerpZU82Pl4AxhsQLWVyxNj3d\nun4VGqVH2pMW/22Xy+VYt24dAgMD4ePjg1mzZqG4uPip62VlZcHHxwf5+flK7YwxfPPNNxg0aBC8\nvb0RHh6OW7duvazwNUr9sOTuf5syRK5gSEkrxK7Dt3A9vRgKBRUTU6VLaUW4n1fOvQ7276z0zBEh\n7UGLJ5ZNmzYhPj4eq1evxq5du5Cfn4/33nuvyXXu37+PyMhIVFVVNVi2efNmxMbGYtGiRdi/fz+s\nra0xbdo0iMXil7ULGqV+WPL/BbnA2uxx30t1jQzHU0T4KSGNm+SSvJjcYjHOXc/jXvu4WsHJtoMa\nIyJEPVo0sUilUuzcuRPz5s1Dv3794O7ujvXr1yMlJQUpKSlPXGfHjh0YM2YMTExMGiyrrKzE9u3b\nsWDBAgQHB8PZ2RmffPIJdHV1cfPmzZe9Oxqlk7kR/i/IBYN7dYGx4eMz6JJyCX49eQ+/nExH6aNp\n3Mmzq5LU4sjf+lVszI3Q28NGzVERoh7NnjZfFVJTU1FZWYmAgACuzd7eHnZ2drh48SJ8fX0brJOY\nmIgVK1bAwsICkyZNUlqWnJyMmpoaDB06lGsTCAT4888/X95OaDAejwdhZ1M423XA5dtFSE4tQK2s\nbkLErPwK7ClIQ3dncwR0t4ahvo6ao9UcCgXD0aQsiKvrHibW19XGkN5doMWn54dI+9SiVyz1/SPW\n1tZK7VZWVg36Turt3LkTw4cPf+KyjIwMmJmZ4cqVK3jrrbfQt29fREVF4e7du6oNvI3R1uLDz80a\nE4e5wd3ZnBs9pmAM19OLseuPVKSkFUL+aBZe0rTk1AJk/a189Ou9OkNgSP0qpP1q0cRSXV0NPp8P\nHR3ls2FdXV3U1Dz7MFixWIzKykqsWLECMTEx2Lp1KwwNDREeHo7S0lJVhd1mGerrYFBPB4wNFsLe\nyphrl9bKceZqLn74Xyruih6CMergb0x2QQWSbhZwr/3crNGlU8PbtoS0Jy2aWPT19aFQKCCTKU/x\nLpVKYWDw7PNaaWtro7q6GsuWLUNQUBC8vLzwxRdfgMfj4eDBg6oKu82z6GiAkf2dMbyfk9KT4eWV\nUvxxNgPxx++ioLThwIn2rrK6FglJWVzitbMUIKB7JzVHRYj6tWhisbGp68wsKipSai8sLGxwe6w5\n6tcRCoVcm56eHuzt7SESiV4g0vaHx+PBybYDxg/uhv4+dtDXfdz9lltciZ8Tb+NoUiZND/OIQsFw\n5HwmqiR1/SoGetoY3KsL+NSvQkjLJpZu3brByMgISUlJXJtIJEJOTg78/f2feXs9e/YEAFy7do1r\nk0gkyM7OhoODw4sH3A5p8Xnw6mqJiGHd4C20VDpQpmY+wK4/UpF0Ix+1Mrkao1S/pJv5yCmqG9LO\n4/EwuFcXGBnQgAdCgBZOLLq6upgwYQLWrFmDv/76Czdu3MC8efMQEBAAb29vSKVSFBUVQSpt3lmx\nvb09wsLCsHz5cpw5cwbp6elYuHAh+Hw+wsLCXvLetG36utoI7GGHCYO74RW7x89iyOQKJN3Mx67D\nqbh1v7Rd9r9k5pfj4q3H/SoB3a3hYG3cxBqEtC8t/oDknDlzEBoaivnz52PSpEmwtbXFxo0bAQCX\nLl1CYGAgLl261OztffrppxgyZAjmz5+P0aNHo6SkBDt37oSZmdnTVyZP1dFYD8P6OmHUwK6w7Pi4\nH6xSUovEi1n479Hb3Jl7eyCukiLhfBb32sHaGD27PfttXELaMh5rh6ecIpEIr732GhITE2Fvb6/u\ncDSGQsGQlvkA567noVKiXADO2a4D+nratulp4eUKhgPH7yKvpBIAIDDQwVvBQnrmh7QbzT12tugD\nkkSz8fk8uDmZoatDB1xKK0JKWiFkj551uZdThoy8cnh1tYCfm7VS539bce56HpdU+I/6VSipENJQ\n2/vrJy+djrYWAtw7obuTGc5dz0NqZl2tF4WC4fLtIqRmPICwc0c42pjAzlLQJmb2vZ9bhktphdzr\n3h42sLUUqDEiQlovSizkuQkMdREc0AVeXS1x6koOcovrzuYlUhmu3i3G1bvF0NHmo7O1MbrYmMDR\nxkSjzvAlNTKIisQQFVTgdvZDrt3RxgQ+rpZqjIyQ1o0SC3lhVmaGGDWwK9JzynDmai5X/wUAamUK\npOeUcSV6rc0MuSRj2dGAm06mNaiVKZBXLEZ2oRiiwgoUP5Q0GPVmbKiLYP/OrSpuQlobSixEJXg8\nHrrad4STbQfkFomRkVeOjLzyBhUrC0qrUFBahaQb+RAY6HBJxt5KAB3tli08plAwFD6ogqhQjOyC\nCuSXVELeRH0agYEOhvVxhL4e/dkQ0hT6CyEqpcXnwcHaGA7WxgjsYYuH4hpk5NYlmbziSm5aeQAQ\nV9fixr0S3LhXAi0+D3ZWAjjZdEAXG5OXUhyLMYbScglEBXVXJDnFlZDWNv6gJ4/Hg7WZIeytBLC3\nEqCTuRG020B/ESEvGyUW8tLweDyYGuvD1FUfPq5WkEhlyC6oQEZuOTLzKyCRPp4zTq5gyMqvQFZ+\nBXAJMDfRh6OtCRxtOsDazPC5p0opr5RCVFgBUaEYokIxNwVLY8xM9OFgZQx7awFsLQVUvpmQ50CJ\nhbQYfV1tuDiYwsXBFAoFQ0FpFXfLrKSsWum9JeUSlJRLkJxaCH1dbXTpZAxHWxM4WBs3OZT57x3u\nokIxHoqbnjVbYKADB2vjR1clxjQtCyEqQImFqAWfz4ONhRFsLIzQx9MG5ZVSZD5KMqLCCqW+DolU\nhrSsB0jLegA+r249RxsTONqaQGCgg9ziyrorkoIKFJc17HD/O31dbdg9urXlYGWMDgJd6ognRMUo\nsZBWwcRIF55dLeDZ1QK1MjlEhY8GAOSWKz3lr2AMOUVi5BSJcfpqLng8XpOJRFuLD1sLI9hb1V2V\nWHQ0oBmICXnJKLGQVkdHWwtOth3gZNsBzJeh6GE1MvLKkZlX3qAuzD+TCp/Hg9WjDncHa2N0MjNs\nEw9oEqJJKLGQVo3H48HK1BBWpoYI6N4JVZJaZOZVICOvDFkFFaiVKWBuog/7R/0kdpYC6FKHOyFq\nRYmFaBRDfR24OZnBzckMcgWDQqFo8edfCCFNo8RCNJYWnwctPiUVQlqbdplY5PK6h+Ly8/PVHAkh\nhGiO+mNm/TG0Me0ysRQVFQEAwsPD1RwJIYRonqKiInTp0qXR5e2y0JdEIsH169dhaWkJLS26lUII\nIc0hl8tRVFQEDw8P6OvrN/q+dplYCCGEvDw0wJ8QQohKUWIhhBCiUpRYCCGEqBQlFkIIISpFiYUQ\nQohKUWJ5RC6XY926dQgMDISPjw9mzZqF4uJidYf1woqLi/Hhhx8iMDAQfn5+iIqKwu3bt9Udlspc\nvnwZ3bt3x/nz59Udikr8/PPPGDJkCLy8vDB69GicPXtW3SG9sKqqKqxYsYL7HYyOjsbdu3fVHdZz\nW7JkCRYtWqTUdurUKYwcORJeXl4IDQ3FiRMn1BTd83vSfu3atQtDhw6Ft7c3QkJC8PPPPzdrW5RY\nHtm0aRPi4+OxevVq7Nq1C/n5+XjvvffUHdYLUSgUmDlzJjIyMvDvf/8be/bsgUAgwJQpU/DgwQN1\nh/fCqqqq8MEHHzz1KWBNER8fj+XLl2PatGn49ddf4e/vj+nTp0MkEqk7tBfy6aef4syZM9i4cSN+\n+ukn6OnpITo6GjU1TRdha20YY9w+/N3du3fx7rvvYujQoYiPj8drr72GGTNm4M6dO2qK9Nk0tl8/\n/vgj1q1bh3fffRe//PILpk6diuXLl+PAgQPN2mi7V1NTw3x8fNi+ffu4tuzsbCYUCllycrIaI3sx\nN27cYEKhkN29e5drq6mpYT169GDx8fFqjEw1Pv74YxYREcGEQiE7d+6cusN5IQqFgg0aNIht2LCB\na5PL5SwsLIz98ssvaozsxQUEBLCdO3dyr+/cucOEQiG7fv26GqN6NllZWSwiIoL16tWLDRw4kC1c\nuJBbVv97+HcRERFs8eLFLR3mM2tqv0JDQ9maNWuU3v/RRx+xiRMnPnW7dMUCIDU1FZWVlQgICODa\n7O3tYWdnh4sXL6oxshdjY2ODb775Bk5OTlxbfbXEsrIydYWlEidOnMDx48exePFidYeiEvfu3UNO\nTg5CQkK4Nj6fj4MHDyI0NFSNkb04MzMz/P777ygpKYFUKsXevXvRoUMHODg4qDu0ZktJSYGNjQ1+\n/fVX2NvbKy27ePGi0rEDAHr16qURx46m9mvx4sUYN26cUhufz0d5eflTt9su5wr7p/qJ1aytrZXa\nraysNHqiSlNTUwwcOFCp7fvvv4dEIkFgYKB6glKB0tJSLFq0CJ999hk6dOig7nBUIiMjAwBQXl6O\nSZMm4c6dO3B2dsa//vUv+Pr6qje4F7RixQrMnz8fffv2hZaWFvT19REXFwcTExN1h9ZsI0eOxMiR\nI5+4LD8/X2OPHU3t1z+TZW5uLg4dOoSIiIinbpeuWABUV1eDz+dDR0dHqV1XV1fj7gM3JTExEevX\nr8fUqVPxyiuvqDuc57Z06VIEBQWhf//+6g5FZcRiMQBgwYIFePPNN7F9+3a4uLhg8uTJSE9PV3N0\nLyYzMxMWFhbYtm0bdu/ejcDAQMyaNUsjDrzNIZFIoKurq9TW1o4dpaWleOedd2BhYYG33377qe+n\nxAJAX18fCoUCMplMqV0qlcLAwEBNUanW/v37MWvWLAwbNgzz589XdzjPLT4+Hjdv3sSHH36o7lBU\nqv6kJiYmBqGhoXB3d8fSpUvh6OiI3bt3qzm655ednY2PP/4YixYtwoABA9CjRw+sW7cOenp6+M9/\n/qPu8FRCT08PtbW1Sm1t6diRnZ2N8ePHo7y8HHFxcTA2Nn7qOpRYUNcXATyeTr9eYWFhg0tcTbRl\nyxZ89NFHGDduHNasWQM+X3P/2/fv34+CggJuWPjQoUMBANOmTcOSJUvUHN3zs7KyAgAIhUKujcfj\nwdnZWaNHhV2/fh1yuRweHh5cm46ODtzc3JCZmanGyFTHxsYGhYWFSm1t5dhx48YNjB07Fnw+H3v2\n7Gl2vxj1sQDo1q0bjIyMkJSUxN1vFIlEyMnJgb+/v5qjezGxsbHYsGEDZs2ahRkzZqg7nBf2xRdf\nQCKRcK+LiooQHh6OlStXol+/fmqM7MW4u7vD0NAQ165dg6enJ4C6YaDp6eno06ePmqN7fp06dQIA\npKWlwd3dHcDj/WortzJ79uyJCxcuKLWdP38efn5+aopINdLT0xEZGYnOnTtj27ZtMDU1bfa6lFhQ\ndz90woQJWLNmDUxNTWFubo7ly5cjICAA3t7e6g7vuaWmpuLLL7/EmDFj8NZbbyldkRkZGcHQ0FCN\n0T2ff54F6unpce3m5ubqCEklDAwMMHnyZGzYsAEWFhYQCoX48ccfkZWVha+++krd4T03Ly8veHt7\nY8GCBVi6dClMTU2xY8cO5ObmNqsTWBNERERgzJgx+OqrrzB8+HD89ttvuHLlCpYtW6bu0F7Ihx9+\nCF1dXaxZswYymYw7fmhpacHMzKzJdSmxPDJnzhzIZDLMnz8fMpkMr776qkbfWgGA33//HXK5HPv2\n7cO+ffuUls2ePRvTp09XU2TkSWbPng0DAwN89tlnKCkpgZubG+Li4uDs7Kzu0J6blpYWtmzZgvXr\n12PevHmoqqqCh4cHfvzxR9jZ2ak7PJVwdXXF119/jbVr1yI2NhbOzs7YunWrRg+QuX//Pq5duwYA\n3O3mep07d0ZCQkKT61OhL0IIISqlub24hBBCWiVKLIQQQlSKEgshhBCVosRCCCFEpSixEEIIUSlK\nLIQQQlSKEgtp1SZOnAhXV1fux83NDT179sTYsWOxd+9etMXR8t9//z0CAwPh5eWFbdu2qTucRolE\nIri6uuLgwYPqDoW0MvQcC2nVJk6ciOrqaq7uikwmw8OHD5GQkIADBw5g4sSJbaYmC1BXFdPPzw8D\nBgxAZGQkHBwcuGlRWhupVIqbN2+ic+fOT30Sm7Qv9OQ9afUEAkGDqXWCg4NhaWmJ2NhYDB06VOPn\nZapXUVEBuVyO4ODgVj9Pna6urkZPeUReHroVRjRWTEwM9PX1lWp1SyQSbNy4EUOGDIGnpydCQkIa\n1PK+fv06Jk+ejJ49e8LHxwdTpkzB5cuXld5z4cIFhIeHo0ePHujVqxcWL16sVDlPoVDgyy+/RFBQ\nEDw8PBAUFIT169c3mD79ny5fvoypU6fC398f/v7+mD17Njd78f79+7mJGRcuXAhXV9cnbiM4OBjz\n5s1r0D548GCunEBVVRXWrl2LwYMHw8PDA76+voiKikJqaqrSOidOnMC4cePg7e2NV199FStXrkRl\nZSW3/N69e5gxYwb8/f0REBCA6dOnIysrC0DDW2H79++Hp6cnUlJS8Oabb8LT0xODBg1CXFyc0mdK\nJBKsXr0a/fv3h6enJ9544w0kJiY2+b0RzUKJhWgsgUAALy8vJCcnA6ibNXfatGnYsWMHxo8fjy1b\ntqBv375YunQpNm/eDKCuoFZ0dDRMTU2xadMmfPnll6iurkZ0dDRXbOvChQuYOnUqjIyMsHHjRnzw\nwQc4fvw4oqKiuJo9sbGx2L17N2bOnIm4uDiMHz8e27dvxzfffNNovKdPn8aECROgra2N1atXY8mS\nJbh16xbGjRuH4uJiDBw4EFu2bAEAvPvuuw0SYr2wsDAcO3YM1dXVXNvVq1eRmZmJsLAwAMAHH3yA\nAwcO4J133kFcXBw++ugjpKWl4f333+f6pY4dO4Z33nkHVlZW2LhxI+bMmYNffvkFCxcuBAAUFBRg\n7NixyM7OxieffIJVq1ZBJBJhypQpqKqqemJsMpkM8+bNQ2hoKGJjY+Hr64vVq1fj7Nmz3P/RzJkz\n8d///hdRUVHYvHkz3NzcMGPGDBw9erQZ/+tEIzBCWrGIiAg2efLkRpfPnj2beXp6MsYYO3bsGBMK\nhezw4cNK71m6dCnz8PBgpaWl7NKlS0woFLLk5GRueWZmJluzZg3Lz89njDE2duxYFhYWxuRyOfee\nmzdvMldXV3bw4EHGGGORkZFs6tSpSp/z/fffswMHDjQa6+jRo9mIESOUtpuTk8M8PDzYqlWrGGOM\n5eXlMaFQyPbt29fodu7fv8+EQiE7dOgQ1/b555+zwMBAJpfLmUQiYZGRkQ2+h7i4OCYUCllJSQlj\njLFRo0axMWPGKL1n7969LCQkhFVUVLBVq1Yxb29vVlxcrPTZAwcOZBcuXGDZ2dlMKBRy+7xv3z4m\nFArZ3r17uffX1NQwT09P9umnnzLGGDt16hQTCoXsjz/+UPrc6dOns8GDBze6z0Sz0BULaTMuXLgA\nHR0dDB48WKk9NDQUUqkUV65cgYuLC8zMzBATE4MlS5YgISEBFhYWmD9/PqytrVFdXY0rV65g4MCB\nXFVRmUwGFxcX2Nra4syZMwCAXr16cVcg27dvx927dxEREdFo/fCqqircuHEDISEhSoXWbG1t4efn\nh6SkpGbvp6OjI7y9vXHo0CEAdVcBhw8fxogRI8Dn86Gnp4dvv/0WQ4cORUFBAc6dO4c9e/bg2LFj\nAIDa2lpIJBLcvHkTr7/+utK2x4wZg0OHDkEgECA5ORm+vr5K5QgcHR1x7NixJvu0fH19uX/r6urC\nzMyMu7o6e/YstLS00L9/f+67lclkCAoKQkZGhkYXNSOPUec90WgFBQVcjZaysjKYm5s3qJBpYWEB\noK5j3MjICD/88AO2bNmCw4cP46effoK+vj5GjhzJ9aMoFAps3boVW7dubfB59ZUCo6OjYWRkhH37\n9uGLL77A2rVr4eLigsWLF6N3794N1quoqABjjIvl78zNzZGbm/tM+x0WFoZVq1ZBLBbj1q1byM/P\nV0pqJ0+exGeffYZ79+7ByMgI3bp14+rvMMZQVlYGxliTo7kePnyILl26PFNcABqU5OXz+VAo6YJz\nyAAABK9JREFUFNw25XJ5o53+hYWFsLe3f+bPJK0LJRaisSoqKnDjxg0MHz4cAGBiYoKSkhIoFAql\n5FJfoKi+Ap6zszPWrl0LuVyOq1ev4uDBg9i9ezccHR3x1ltvgcfjITIyEsOGDWvwmUZGRgDqDpbh\n4eEIDw9HSUkJTpw4ga1bt2LWrFk4ffo0V8O+nkAgAI/HQ3FxcYNtFhUVPVN1PgAICQnB559/jsTE\nRFy+fBlCoRDdunUDAGRlZWHGjBl4/fXXsW3bNtjb24PH4+GHH37AyZMnuXgA4MGDB0rbFYvFuHTp\nEry9vSEQCFBaWtrgs0+dOvXctUaMjY1hbGyM77777onLnZycnmu7pHWhW2FEY23btg01NTUYN24c\nACAgIAC1tbU4cuSI0vt+++036OjowMvLCwkJCejduzeKioqgpaUFHx8fLFu2DCYmJsjLy4NAIED3\n7t2RkZEBT09P7sfJyQkbNmzAlStXAAATJkzAypUrAdRdcYwePRrh4eEoKytT6lSvZ2RkBHd3d/z+\n++/c2TsA5OXlISUlRen2UXOYmpqif//+SExMxJEjR7hOe6Bu1FtNTQ1iYmLg4OAAHo8HAFxSUSgU\n3FXMn3/+qbTdo0ePIjo6GhUVFejZsycuXbqEhw8fcstzcnIQHR2N8+fPP1O89fz9/VFRUQFtbW2l\n7/fq1avYsmULFyvRbHTFQlo9sVjMDQeWy+V48OABjh49ivj4eEybNg09evQAAPTv3x/+/v5YtGgR\n8vPz4eLighMnTmDPnj2IiYmBiYkJfH19wRjDjBkz8Pbbb8PIyAiHDx+GWCzm+mZmz56NmJgYLFiw\nACEhIZBKpYiNjcXt27e54bwBAQGIjY2FhYUFfHx8UFBQgO+++w59+vSBiYnJE/dj7ty5mDZtGmJi\nYjB+/HhUVlZi06ZNEAgEmDJlyjN/LyNHjsTcuXPBGENoaCjX7u7uDm1tbaxduxZTpkxBTU0N9u/f\nj+PHjwMAl/hmzZqFGTNm4P3338fIkSORn5+PdevW4Y033oCtrS2mTp2KgwcPIioqCjExMeDxePj6\n66/h7OyMwYMHP/Fq5mkGDhwIX19fxMTEYPr06XB0dERKSgo2b96MESNGcFeERMOpc+QAIU8TERHB\nhEIh9+Pq6sr8/PxYRESE0qioemKxmK1cuZL169ePeXh4sBEjRrA9e/YovefatWssMjKSBQQEME9P\nTzZ69GiWkJCg9J5Tp06xcePGMS8vL+bv788iIyPZ1atXueUymYxt2rSJBQcHMw8PD9anTx+2ePFi\n9uDBgyb35/Tp02zs2LHM09OTBQQEsDlz5jCRSMQtb86osHo1NTXMz8+PTZw4scGyw4cPs+HDhzNP\nT08WGBjIZs6cyZKSkpirq6vS95GYmMhGjRrFPDw82IABA9i6deuYRCLhlt++fZtNmzaNeXt7s169\nerG5c+eyvLw8xhhrdFRY/fJ6gwYNYgsXLuReV1RUsJUrV7LAwEDm7u7OgoOD2aZNm5hUKn3qPhPN\nQFO6EEIIUSnqYyGEEKJSlFgIIYSoFCUWQgghKkWJhRBCiEpRYiGEEKJSlFgIIYSoFCUWQgghKkWJ\nhRBCiEr9P+AKxQwmJbnhAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "24" + ] + }, + "execution_count": 81, + "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": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEjCAYAAAAVCvdtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYVGX7B/DvDMyw7/u+CAPILosimBqWlZqa5i6WS2m5\nUpr1azN738qyNLXM7K1QM22xLNFQXNMEkc0FFJR9Z9i3GZg5vz9GDk6AHhQYlvtzXV6XZ78HdO5z\nzvM898NjGIYBIYQQ8pD4qg6AEELIwEAJhRBCSLeghEIIIaRbUEIhhBDSLSihEEII6RaUUAghhHQL\nSiiD3Pr16+Hm5nbfP+vXr+/yuUtLS9HU1NTl42bMmIEnnnjinvusWbMG3t7eXT43ABw6dAhjxoyB\nt7c3Xn/99Qc6x71IJBKUlJSwy/v374ebmxuSk5O7/VoDwa1bt+Dm5oZdu3apOhTykNRVHQBRrZkz\nZyIkJIRdvnz5Mg4cOICZM2ciICCAXW9vb9+l8544cQLr1q3DX3/9BU1NzW6Lt9XcuXMRHh7e5eNK\nS0vx5ptvwsnJCS+99BKcnJy6Na6cnBwsXrwYq1evxoQJEwAAISEh2LRpU5d/hoT0N5RQBjl/f3/4\n+/uzyzKZDAcOHICfnx8mT578wOdNTk5GfX19d4TYocDAwAc67tatW2hpaUFERARmzJjRzVEpEkpu\nbq7SOkdHRzg6Onb7tQjpa+iVFxlUmpubAQA6OjoqjoSQgYcSCumyf/75B/Pnz4efnx/8/f2xcOFC\nJCYmstvXrFmDr7/+GgAQFhaGRYsWsdv+/PNPzJkzBwEBAfDy8sK4cePw2WefsV/0XP27DWXNmjWY\nPHkykpKSMHv2bPj6+iI0NBQffPABpFIpu8+SJUsAAJGRkXBzc0NZWRkAID8/H6+88gqGDx8OHx8f\nPPPMM4iOjm533aKiIqxfvx6hoaHw9/fHjBkzcPr0aQCKtpK7z98aX0dtKPX19fjoo48wduxYeHl5\nITw8HJ999hkkEgm7T+txmZmZWL16NQIDA+Hv74+VK1eiqKhIKa4jR47gmWeegb+/PwIDA7Fo0SKk\npKR0+vNrbGyEv78/Vq1a1W5b63VTU1MBABcuXMCsWbMQEBAAf39/zJkzB2fPnu303PfS3NyMLVu2\nYOzYsfD19cXChQuRk5PTbj+GYfDjjz9i0qRJ8PLyQkhICF577bV2n/v69et4/vnnMXz4cPj6+uKZ\nZ57B77//3u58J06cwLPPPgtfX18EBwdj1apV7Z4k8/Ly8NJLLyE0NBQ+Pj6YOHEivvvuO1B1Ku7o\nlRfpkqNHj2LNmjVwdnbG8uXL2VdkERER+OKLL/DII49g7ty5aGxsxKlTp/D222/D2dkZALB3715s\n3LgRjz/+ONauXQuJRIJjx45h586d4PP5HX65dUVJSQmWLFmCSZMmYerUqTh58iS+++47aGtrY9Wq\nVZg7dy6srKzwzTffYO7cufD19YW+vj4KCwsxY8YMCAQCPPfcc9DV1UVMTAzWrFkDsViM+fPnAwDE\nYjGeffZZ1NfXY968ebCyssLhw4exbNkyfPXVVwgJCcGiRYvY8w8bNqzDOCUSCRYsWIBr165h+vTp\ncHd3R1JSEnbu3ImkpCT873//g7p623/NJUuWwM3NDa+88gpu376NvXv3QiwWY9++fQCA8+fP49VX\nX0V4eDhmzpyJuro67N27FwsWLMDRo0dhZWXVLgYtLS2Eh4fjxIkTaGxshJaWFrstOjoaDg4O8PHx\nwc2bN7Fs2TL4+PjglVdeYX/fS5cuxY8//ggfH58u/Y7WrVuH6OhoTJ48Gb6+vjh9+jReeeWVdvu9\n//772Lt3L8LCwjBz5kwUFhZi3759OH/+PH755RdYWFigrKwMCxcuhKWlJV5++WUIBAIcPnwY69at\ng6amJsaPHw9AkSDfffddjBo1CuvWrUNlZSV++OEHPPvss/j5559hZ2cHiUSCRYsWQS6XY+HChdDV\n1cWpU6fwwQcfgGEYPP/88136nIMWQ8hdfvnlF0YkEjG//PJLu20SiYQZOXIkM27cOKa+vp5dLxaL\nmZCQEGbs2LGMTCZjGIZhPv74Y0YkEjGlpaXsfo8++igzb968ducMCQlhpk2bxq579tlnmfHjx98z\nztWrVzNeXl5KyyKRiDlw4AC7TiaTMeHh4Ux4eDi77syZM4xIJGL+/PNPpWNDQkIYsVjMrpPL5czy\n5csZX19fprKykmEYhtm4cSPj7u7OpKSksPs1NDQwY8aMYebMmdPp+X/44QdGJBIxSUlJDMMwzLff\nfsuIRCLmhx9+UPpM27dvZ0QiEfPTTz8pHRcZGam03/r16xmRSMQUFBSwy8OHD1faJzU1lRk/fjwT\nGxvb6c/w9OnTjEgkYqKjo9l1JSUljLu7O/P5558zDMMw27ZtY0QiEVNbW6u0z+OPP87s37+/03N3\nJDU1lRGJRMzHH3/MrpPL5cyaNWsYkUjEfPXVVwzDMMz169cZkUjErFmzRun4+Ph4RiQSMWvXrmUY\nhmEOHTrEiEQi5saNG+w+TU1NzKRJk9j4KysrGV9fX2b9+vVK5yoqKmL8/f3Za7Se++TJk0qxzZ8/\nn3nzzTe79DkHM3rlRThLSUlBeXk55s+fD21tbXa9sbExZs+ejYKCAqSnp3d6/NGjR7Fjxw6ldRUV\nFdDX10dDQ0O3xPjkk0+yf+fz+XBzc0N5eXmn+7e0tODkyZMYPnw4G09FRQUqKyvx+OOPo7GxEXFx\ncQCA06dPw8/PT+muXEtLC9988w02b97MOcaTJ0/CyMioXaeARYsWQUNDA7GxsZ1+JgBwd3cHAPZz\nWVpaorKyEh9++CGysrIAAN7e3jh27BgeffTRTuMIDQ2FsbExjh49yq47duwY5HI5Jk2axJ4bADZs\n2IC0tDQAgLm5Of766y/MmjWL82cGwL4mmzlzJruOx+OxT4CtWj//Cy+8oLQ+KCgIwcHBOHnyJBiG\ngYWFBQBg06ZNSExMhFwuh4aGBg4fPowVK1aw12xsbER4eDj7u62oqIBQKERwcDBOnz6tdK4vvvgC\nFy5cQHNzM3g8HqKiorBx48Yufc7BjF55Ec7y8/MBoMOutkOGDAEAFBYWYujQoR0eLxQKcfHiRRw9\nehRZWVnIyclBRUVFp+fsKoFAAD09vXbXlMlknR7TOlYmOjq6wzYTQNFuwjAMioqKEBQU1G576ys9\nrvLz8+Hg4AA1NTWl9ZqamrCxsUFhYaHSemNjY6VloVAIAJDL5QCA5557Dv/88w++/fZbfPvtt7C3\nt8fYsWMxffp0iESiTuNQV1fHU089hV9++YV97RUdHQ0vLy+2V9rTTz+N2NhYHD58GIcPH4aFhQXG\njBmDKVOmdPpKrzMFBQXg8/mwtbVVWv/vn19BQQF4PF6H/yacnZ0RHx+P2tpajBgxArNmzcKPP/6I\nc+fOwcjICGFhYXj66afxyCOPAADbTvLyyy93GldNTQ3s7e2xevVqbNu2Dc8//zx0dHQQGhqKJ598\nEk888QT4fLr35oISCuGMuUfjZOuXm0Ag6HSfN998Ez/99BO8vLzg6+uLqVOnYtiwYXj99ddRV1f3\n0PHxeLwuH9OabCZOnIhp06Z1uI+DgwMYhrlnYuoucrm83c/wfl9mBgYG+PHHH3H58mWcOHECf//9\nN77//nvs2bMHW7ZsYdsSOjJx4kTs3bsXp06dgr+/P5KTk5UGsQqFQnz55ZdIS0tDTEwMzp07h4MH\nD+LAgQN4/fXX8dxzz3H+bDweDwzDQCqVQkNDQ+kz3+1e/85atwkEAvB4PGzYsAHPP/88YmJicPbs\nWRw9ehR//PEHIiIi8H//93/suT/88EP2KeTfWtuPli1bhqlTpyImJgZnzpzBmTNnEBMTgz///BNf\nfPEF5885mFFCIZzZ2NgAAG7fvo1Ro0YpbWt91dL6iuTfsrKy8NNPP2HGjBntXiGIxWKlL5jeZG5u\nDoFAALlcjpEjRypty8vLw40bN6ClpQU+nw9LS0vk5eW1O8dPP/2EK1eu4J133uF0TRsbG2RkZEAm\nkyk9pTQ1NaGoqOieTxUduX37NhoaGhAQEICAgAC89tprSE9Px7x58/Dtt9/eM6H4+/vDzs4OsbGx\nKCkpAZ/PZwdkAoqnqdLSUgwbNgweHh5YtWoVCgoKMH/+fHzzzTddSih2dnZgGAY5OTlKn/HfP1Mb\nGxswDIOsrCz29V6rrKwsGBoaQktLC6Wlpbh9+zZGjBiBF154AS+88AIqKirw4osvYt++fXjllVfY\nf7MmJibtfr///PMPeDwehEIhKisrkZ6ejqCgIERERCAiIgJ1dXVYu3YtYmNjkZ2dTWOJOKDnOMKZ\nv78/jIyMsHfvXqU2j+rqahw4cAA2NjbsF0XrF2XrHWJVVRWAtldjrY4fP47CwsJeufvviIaGBsLC\nwnD8+HHcunWLXc8wDP7zn/9g+fLlqK2tBQA88sgjSExMxI0bN9j9JBIJdu/ejRs3bkBNTa3d5+7I\n2LFjUVlZiYMHDyqtj4qKgkQiwZgxY7r0Gd555x0sX74cjY2N7DoXFxfo6uq2e63WkYkTJ+LcuXP4\n66+/MGLECJiZmbHbtm/fjoULFyq1Q9nY2MDc3JzTue82btw48Hg8/O9//1Na39pbrdXYsWMBoF0p\nlqSkJMTHx7M/nwMHDmDBggVKvw9jY2PY2dmBx+OBz+dj1KhREAgE2L17N1paWtj98vPzsWzZMnz+\n+ecAgFOnTuG5557DuXPn2H10dXXh4uICAF3+rIMVPaEQzoRCId544w2sW7cO06dPx7Rp0yCTyXDw\n4EFUVlbiiy++YF87GRkZAQC+/vprhIWFYfjw4TA3N8eOHTtQX18PMzMzJCcn47fffoOGhkaPjqq/\nn7Vr1yIhIQGzZs3C3LlzYWFhgdjYWJw7dw4RERFwcHAAoHgPHxsbi3nz5mH+/PkwMTHB4cOHkZ+f\nj//85z8A2to7Dh06hKamJkyfPr3d9ebMmYPDhw/jvffew/Xr1+Hh4YGUlBT89ttvCAoKwpQpU7oU\n//PPP4+XXnoJ8+bNw+TJk6Guro6YmBgUFRXhtddeu+/xkyZNwpdffomkpCR8+OGHStvmzZuHI0eO\nYO7cuZgxYwZ0dXVx/vx5JCUlYe3atex+CQkJKCgowBNPPNHp06aLiwvmzZuHPXv2oK6uDiEhIYiL\ni0N8fLzSfl5eXpg5cyYOHDiA6upqPProoygqKsK+fftgYmKCNWvWAACmTZuGvXv3YvHixZg9ezbM\nzMyQkpKC6OhozJ49G0KhEObm5lixYgU+/fRTzJkzBxMmTIBEIsG+ffsgl8vZz/D444/jiy++wLp1\n6zBnzhzY2toiMzMT+/btw+jRo2FnZ9el38mgpaLeZaSPule34VZnzpxhZs+ezfj6+jIBAQHM4sWL\nmcTERKV9xGIxM2/ePMbT05OZPHkywzAMk5aWxixYsIAJCAhgAgMDmalTpzIHDx5kdu3axYhEIubm\nzZsMwzx4t+G7lztb31G3XoZhmFu3bjErV65kgoODGR8fH2bixInMnj172G7QrfLy8pg1a9YwQUFB\njL+/PzN37lwmPj6e3S6Xy5m33nqL8fPzY/z8/JiioqJ23YYZhmFqamqY999/n3nkkUcYT09P5rHH\nHmO2bt3KSCQSdp+Ojuts/fHjx5mZM2cygYGBjK+vLzNjxgzm2LFj9/wZ3m3q1KmMt7e3UvfgVvHx\n8cyCBQuY4cOHM97e3szTTz/drstwa7ftu7uJd0QulzO7d+9mwsPDGS8vL2bWrFlMUlKSUrfh1v2+\n++475qmnnmI8PT2Z0NBQ5vXXX2eKi4uVzpeWlsYsW7aMCQ0NZTw9PZnx48czO3fuZKRSqdJ+v//+\nO/PMM88w3t7eTHBwMLNo0SImOTlZaZ/c3Fzm1VdfZX8nY8eOZTZt2sTU1dVx+hkShuExDA0DJYQQ\n8vCoDYUQQki3oIRCCCGkW1BCIYQQ0i0GZS+vpqYmXL16FWZmZtQdkBBCOJLJZCgrK4OXl1eHE+cN\nyoRy9epVzJ07V9VhEEJIv7Rv374OJ7kblAmldeDWvn37Oh3ZTQghRFlxcTHmzp2rNPj1boMyobS+\n5rK0tGxXqI4QQsi9ddZUMCgTSmeqaiWIicuBjqY6HhvuAKGA2lcIIYQr6uV1l5u5lSitbEBWUQ0S\nb5SqOhxCCOlXKKHcxdigrdfC1VtiNLeopmAhIYT0R5RQ7uJsbQB9HcXkRU3SFqRnV6o4IkII6T8o\nodyFz+fBT9TWeyE5owxyOZU6I4QQLiih/IuHozE0hIrG+Oo6CbIKq1UcESGE9A+UUP5FoK4GL2cT\ndjn5ZpkKoyGEkP6DEkoHvF3MwOcrJooqEtejWKy6yZ8IIaS/oITSAV0tAUR2RuxyEj2lEELIfVFC\n6cTdjfO3C6pRXSdRYTSEENL3UULphKmhFuwt9AAADMMgJYOeUggh5F4oodzD3U8padkVaJK0qDAa\nQgjp2yih3IOdhR5MDLQAAM0tcly9LVZxRIQQ0ndRQrkHHo8H/7ueUq5klkMmk6swIkII6bt6PaHI\nZDJs3rwZYWFh8Pf3x8qVK1FeXn7f43Jzc+Hv74/i4mKl9RUVFVi7di1GjBiB4cOHY9WqVe32eRiu\ndobQ0RQAAOqbmnEzt6rbzk0IIQNJryeUbdu24dChQ/joo4+wd+9eFBcXY8WKFfc8JisrCwsXLkRD\nQ0O7bZGRkcjPz8f//vc/fPfddygtLcXLL7/cbfGqqfHh42rKLidnlIFhqBwLIYT8W68mFKlUiqio\nKERGRiI0NBSenp749NNPkZiYiMTExA6P+f777zFt2jTo6+u321ZXV4eLFy9iyZIlGDp0KDw8PLB0\n6VJcvXoVVVXd9yTh6WwCgbriRyWubkReSW23nZsQQgaKXk0o6enpqK+vR3BwMLvO1tYWNjY2SEhI\n6PCY2NhYbNy4Ea+99lq7bRoaGtDW1sZvv/2Guro61NfX47fffoODg0OHCehBaQrV4eFozC7TQEdC\nCGmvVxNKa9uGhYWF0npzc/NO2z2ioqIwYcKEDrcJBAJ8+OGHiIuLQ2BgIAIDA3Hp0iV8/fXX4PO7\n96P5upqBx1OUY8krqUV5VWO3np8QQvq7Xk0ojY2N4PP5EAgESuuFQiEkkgcbiX779m2IRCJERUVh\nz549cHJywvLly1FXV9cdIbMMdDXgbGPALlPRSEIIUdarCUVTUxNyuRwtLcoDBKVSKbS0tLp8voSE\nBGzduhWffPIJgoODERgYiB07dqCwsBCHDh3qrrBZd3chvplXibrG5m6/BiGE9Fe9mlCsrKwAAGVl\nynf3paWl7V6DcZGcnAwzMzOlY/X19eHo6IicnJyHC7YDliY6sDLRAQDI5QyuZNJTCiGEtOrVhOLu\n7g4dHR3Ex8ez6/Lz81FQUICgoKAun8/S0hJisRhicdsI9sbGRuTn58PR0bE7Qm7n7nIsV2/TvPOE\nENKqVxOKUCjEnDlzsGnTJpw9exbXrl1DZGQkgoOD4efnB6lUirKyMkilUk7nGzt2LCwtLbF69Wpc\nvXoVN27cwKuvvgoNDQ1MmTKlRz6Dk7UBDHU1AAASqQzXsyp65DqEENLf9PrAxtWrV2PSpElYu3Yt\nIiIiYG1tja1btwIAkpKSEBYWhqSkJE7n0tHRQVRUFIyNjfHCCy8gIiICDMNg37590NXV7ZH4+Xwe\nfF3bnlJSaN55QggBAPCYQTjsOz8/H+Hh4YiNjYWtrW2Xj29ukeP7I9fRJFV0LngixBEutobdHSYh\nhPQp9/vupOKQD0CgzofXkLZ555NulFI5FkLIoEcJ5QH5uJhC7c688yUVDSgWt68zRgghgwkllAek\nrSmAm0PbvPPJN0tVGA0hhKieemcb3n333S6dqKv7DwR+InO2l9ftwhpU1UpgqKeh4qgIIUQ1Ok0o\np06dUloWi8VoaWmBubk5zMzMUFVVhcLCQmhoaMDFxaXHA+2LjPU14WCpj5ziGjAMg+SMMowZ1vVG\nfkIIGQg6TShnzpxh/x4dHY0PP/wQW7ZswbBhw9j16enpWL58eY+N+egP/ERmyCmuAQCkZYkRPNQC\n2pqC+xxFCCEDD6c2lM2bNyMyMlIpmQCKke+rV6/Grl27eiS4/sDWXBfmRtoAAJmcodL2hJBBi1NC\nqaiogKFhx+MsNDU1UV9f361B9Sc8Hg+BHm21xK7eKkeTpOUeRxBCyMDEKaH4+vpi586d7UrCV1RU\nYPv27Q9Uh2sgcbLWh4m+JgDFoMfUW+UqjogQQnpfp20od3vttdcwb948jBkzBoGBgTA2NoZYLEZ8\nfDx0dHSwbdu2no6zT+PxeAjwsEBMnKLCcUpGGfxczSAUqKk4MkII6T2cnlA8PDzw559/4plnnkFZ\nWRni4+NRUVGB+fPn4/Dhw7Czs+vpOPs8F1tDGNxVNPLqbfF9jiCEkIGF0xMKoJjL5I033ujJWPo1\nPp+HYW7mOHU5D4BiRkcfF1Ooq9HYUULI4MD5245hGBw9ehRvvfUWli5dipycHPzxxx+4fft2T8bX\nr7g7GEFXS9FluKGpGWlU2p4QMohwSih1dXWYO3cu1qxZg7///htnzpxBXV0dfvvtN8yYMQPp6ek9\nHWe/oKbGh7/InF1OvFEKGZW2J4QMEpwSyqZNm5Cbm4tff/0Vx48fZyvrbtmyBY6OjtiyZUuPBtmf\nDHU2gZaG4k1ibYMUN3MqVRwRIYT0Dk4J5fjx44iMjMTQoUPB4/HY9Xp6eli6dCnnCbEGA4E6X2kC\nrsvpJTQBFyFkUOCUUBoaGmBiYtLhNg0NDUgkkm4Nqr/zdjGFxp0uw1V1EtwqqFJxRIQQ0vM4JRRP\nT08cPHiww21Hjx7F0KFDuzWo/k5DoAZvF1N2+XI6TcBFCBn4OCWUVatW4cyZM5g+fTq+/PJL8Hg8\nxMTEYNWqVfj999/x0ksv9XSc/Y6vqxkEd7oMl1c1IruoRsUREUJIz+KUUIYPH47du3eDx+Nhx44d\nYBgGX331FbKzs7Fjxw6EhYX1dJz9jpaGOjzvmiY4Ia2EnlIIIQMa54GNI0aMwE8//YT6+npUV1dD\nT08Penp6PRlbv+cnMseVzHLI5AxKKhqQX1oHOwv6mRFCBiZOTyjjx49nx5ro6OjA2tqaTSapqakY\nOXJkz0XYj+lqCeDhaMwuX06naYIJIQNXp08o0dHRkMlkAICcnBycPHkSGRkZ7fa7cOECmpqaei7C\nfs7fTTFNsJxhkF9ai2JxPSxNdFQdFiGEdLtOE0pycjKioqIAKKrpfv75552e5Lnnnuv2wAYKA10N\niOwNkX5ngOPltBJMCHNWcVSEENL9Ok0or776KhYsWACGYTBu3Dhs374dHh4eSvuoqalBV1cXurq6\nPR5ofzbM3QI3cqvAMAyyimpQXtUIU0MtVYdFCCHdqtM2FKFQCBsbG9ja2iImJgajR48Gj8eDjY0N\nbGxsoK2tjZKSEkomHBjra8LZxoBdvpxeosJoCCGkZ3BqlNfV1UVERASef/55dl1qaipmzpyJRYsW\ntZvJkbQX6N42TXBmfjUqa6ndiRAysHBKKB9//DGKi4vx1ltvsetGjRqF7777DllZWfjss896LMCB\nwsxICw6W+gAUUwEkUo8vQsgAwymhnD17FuvWrVMawMjn8zFixAhERkbi+PHjPRbgQBLo0faUciOn\nEjX1UhVGQwgh3YtTQmlsbISWVseNyHp6eqipobIiXFiZ6sDGTNHmJGcYJN2gpxRCyMDBKaH4+vpi\nz549aGlpUVovl8uxb98+eHl59UhwA9HdTynXs8Sob2xWYTSEENJ9OJVeWbFiBSIiIjB+/HiMGTMG\nxsbGqKysxNmzZ1FUVITvvvuuh8McOGzNdWFupI3SygbI5AySM8oQ6mOt6rAIIeShcXpCGTZsGPbv\n3w83NzccOXIE27dvx++//w5nZ2fs27cPAQEBPR3ngMHj8ZSeUq7eKkeTpOUeRxBCSP/AuTikt7c3\nvvjii4e+oEwmw5YtW3Do0CHU19dj1KhRePvtt2FqanrP43JzczF58mQcPXoUlpaW7HqGYbBr1y78\n+OOPqKyshKenJ9588812gzD7EidrfZjoa0Jc04TmFjkSb5RiJD2lEEL6OU5PKK1SU1Oxc+dObNy4\nEUVFRbhw4QIqKiq6dMFt27bh0KFD+Oijj7B3714UFxdjxYoV9zwmKysLCxcuRENDQ7ttO3bswNdf\nf43/+7//w6+//goLCwssWbKkT4+N4fF4CPJsS4qpmeVoaKK2FEJI/8YpoTQ3NyMyMhIzZszA9u3b\n8cMPP6CiogJff/01pkyZgry8PE4Xk0qliIqKQmRkJEJDQ+Hp6YlPP/0UiYmJSExM7PCY77//HtOm\nTYO+vn67bfX19di9ezfWr1+PcePGwdnZGe+99x6EQiGuX7/OKSZVGWJjALM75VdaZHKqREwI6fc4\nJZStW7fi9OnT2LZtGy5dusROFLVhwwZoaWlxHtiYnp6O+vp6BAcHs+tsbW1hY2ODhISEDo+JjY3F\nxo0b8dprr7XbdvnyZUgkEjzxxBPsOl1dXZw8eVLpGn0Rj8dD8F1PKVdvlaOugcalEEL6L04J5fDh\nw4iMjMRjjz0GoVDIrre3t8fKlSsRFxfH6WLFxcUAAAsLC6X15ubm7LZ/i4qKwoQJEzrclp2dDWNj\nY6SkpGDGjBkYOXIkFi1ahMzMTE7xqJqjlT4sjLUBADI5g0tpVOOLENJ/cUooVVVVcHJy6nCbkZER\n5/aKxsZG8Pl8CAQCpfVCoRASiYTTOe5WV1eH+vp6bNy4EUuXLsXOnTuhra2NuXPndrltRxV4PB5G\neFmxy2lZFaiu6/rPgRBC+gJOCcXFxQXR0dEdbjt37hyGDBnC6WKampqQy+XtBkhKpdJOR+Lfi7q6\nOhobG/Huu+/i0UcfhY+PDz755BPweDz8/vvvXT6fKtia6yqNnr90veMnNUII6es4JZQXX3wRv/zy\nC1auXInDhw+Dx+MhOTkZmzZtwp49e7Bw4UJOF7OyUtyNl5WVKa0vLS1t9xqMi9ZjRCIRu05DQwO2\ntrbIz8+reOdFAAAgAElEQVTv8vlUgcfjYbhXW1vKjdwqVNRQJWJCSP/DeU75Dz/8EElJSXj99dfB\nMAw2btyIX3/9FW+88QYmTpzI6WLu7u7Q0dFBfHw8uy4/Px8FBQUICgrqcvCtAyqvXLnCrmtqakJe\nXh7s7Oy6fD5VsTbVhb2lHgDFuBp6SiGE9EedDmz89ttvMWHCBJibmwMApkyZgsmTJyMzMxNVVVXQ\n09ODi4sL1NU5j42EUCjEnDlzsGnTJhgZGcHExAQbNmxAcHAw/Pz8IJVKUV1dDQMDA6XG/87Y2tri\n6aefxoYNG/D+++/DwsICO3bsAJ/Px9NPP805rr5ghKcVcotrAQAZeVUIcKdZHQkh/UunTyhbt25l\nx5d4eXnhypUr4PF4cHV1RVBQENzd3buUTFqtXr0akyZNwtq1axEREQFra2ts3boVAJCUlISwsDAk\nJSVxPt9//vMfjB8/HmvXrsUzzzwDsViMqKgoGBsbdzk2VTI31laa1THuGj2lEEL6Fx7TOqjkX8LC\nwjBs2DCMGzcO69atw4oVK2Bvb9/piSZNmtRjQXa3/Px8hIeHIzY2Fra2tqoOhyWubsSPx2+y43ye\nDRex3YoJIUTV7vfd2ekjxuLFi7Fp0ybExMSAx+Nh27ZtnV6Ex+P1q4TSV5kYaMHF1hAZeZUAgLir\nRXj6EW496AghRNU6TSjPPfccpk+fjurqaoSHh2P79u19uuDiQBHsaYHM/CowDIPckloUltXB+k63\nYkII6cvu2Qiiq6sLXV1dbNy4EQEBATAyMuqtuAYtIz1NuDsYIS1bMTDz4tViTB0zBDweT8WREULI\nvXFqVX/22WfR0NCAM2fOoLGxEXK5vN0+Tz31VLcHN1gFeljgRk4l5AyDwvI65JXUwt6yfXFMQgjp\nSzgllAsXLmDlypWor69HR234PB6PEko3MtDVwFAnY1y9LQag6PFlZ6FHTymEkD6NU0L5+OOPYW9v\nj3Xr1sHS0hJ8fpemUSEPIHCoJdKyKyCTMyipaEB2UQ2crA3ufyAhhKgIp4SSmZmJHTt2YMSIET0d\nD7lDV0sAbxdTJN9UlKmJu1YMRyt9ekohhPRZnB41rKysOpwtkfSsYW7mEKgpfkXlVY3IzK9ScUSE\nENI5Tgll8eLF2LFjB0pKaL6O3qStKYCPqxm7HHetGHJ5h+NQCSFE5Ti98jp58iSKi4sxduxYWFpa\nQlNTU2k7j8fDkSNHeiTAwc5fZIYrt8ohbZahqlaCm3mVcHfoX2VlCCGDA6eEoqenhzFjxvRwKKQj\nmhrq8BOZIf5Oba/4a8VwtTOCGp/aUgghfQvnXl5EdfxczZCaUY4maQtq6qVIz66Ap7OJqsMihBAl\nnSYUsVgMQ0NDqKmpQSwW3/dEJib0BddThAI1DHMzx4UrhQCAS9eL4eZgBHU16r5NCOk7Ok0oYWFh\nOHDgAHx8fBAaGnrf7qppaWndHhxp4+1iguSMMjQ0NaOusRnXbonhKzK7/4GEENJLOk0o7733Hjvr\n4caNG3stINIxgboaAj3McTapAABwKa0Ebo5G0BR2fU4aQgjpCZ1+Gz377LMd/p2ojqeTCZJvlqGm\nXoomaQsS0koQ5muj6rAIIQQAx3EopG9QU+NjpI81u5yaWY6qWokKIyKEkDaUUPqZITYGsDLRAQDI\n5Qz+udNQTwghqkYJpZ/h8XgI82t7zXWroBqFZXUqjIgQQhQoofRDFsbaENm3TXb2d0phh9MKEEJI\nb6KE0k+FeFux41BKKxtwM7dSxRERQgY7zn1Of/vtN5w+fbrDGRt5PB527drV7cGRzulpC+HraobL\n6YqCnf9cKYKzjSEE6nSPQAhRDU4J5bPPPsNXX30FKysrWFhY0ARbfUSAuzmuZ4nRKGlBXWMzUjLK\nEOhhoeqwCCGDFKeE8ssvvyAiIgJvvPFGT8dDukAoUMMILyucupwHALicXoKhTsbQ1hSoODJCyGDE\n6VGjtrYW48aN6+lYyAPwcDSGib5iOoHmFjni7lQlJoSQ3sYpofj5+SE5ObmnYyEPgM/nYaRv22DH\n61kVKK9qVGFEhJDBitMrr+XLlyMyMhJyuRz+/v7Q0tJqt4+Pj0+3B0e4cbDUh72lHnKLa8EwDM6n\nFuLpUc40/zwhpFdxSijz588HAGzZsqXdlxTDMODxeFRtWMVCfayRV3ITDMMgr6QWucW1cLDSV3VY\nhJBBhFNC+fbbb3s6DvKQTAy04OlkjKu3FXPXnE8thJ2FHvg0syPpp2QyOfLL6sADYG2mS/P/9AOc\nEkpISEhPx0G6QbCnJW7kVqK5RY6KmiZcyxLDe4ipqsMipEuqaiW4liVGenYFGiUtAACBGh+2Fnpw\nstaHo5U+9WTsozgPbMzOzsa2bdsQHx+Puro6GBkZISAgAMuWLYOzs3NPxkg40tYUIMDdAhevFgFQ\nzD8vsjeChkBNxZERcm9yOYOswmpcuy1Gbkltu+3NMjmyCquRVVgNHo8HcyMtOFkbwMlaH8b6mtRe\n2EdwSigZGRmYNWsWBAIBxo4dC1NTU5SVleH06dM4ceIEDh48CFdX156OlXDgJzLDtdti1DZI0Shp\nweW0EqWS94T0JXUNUlzPqsD1LDHqGpvbbdfTFkJdjY/K2iZ2HcMwKKloQElFAy5eLYK+jhCOVvpw\nsjaAtakO1OjVmMpwSiiffPIJHBwcEBUVBV1dXXZ9XV0dFixYgM8++wxffPFFjwVJuFNX4yPE2wox\ncTkAgJSMMngNMYW+jlDFkRGiwDAMcktqcfWWGNlFNe0Km/J4PDha6sFziCns77QDVtVKkF1UjazC\nGhSV10N+1zE19VKkZpYjNbMcQoEa7O+8GnOxNaTk0ss4/bQvXbqEZcuWKSUTANDV1cWLL76IhIQE\nzheUyWTYvHkzwsLC4O/vj5UrV6K8vPy+x+Xm5sLf3x/FxZ0P3Dt27Bjc3NyQn5/POZ6ByNXOEBbG\n2gAAmZzBP1eKVBwRIUBDUzMS00ux52ga/jh3G1mF1UrJRFtTgEAPC8x/0gMTwpzhaKXPdiox1NOA\nn8gcU8e4YOEkTzwWbA9XO0MI//U6V9osQ2Z+FY7H5+LX05loaGr/1EN6DqcnFA0NjU7rd/H5fDQ3\nc/+lbdu2DYcOHcJHH30EQ0NDbNiwAStWrMD+/fs7PSYrKwtLlixBQ0NDp/uUlpbinXfe4RzHQMbj\n8RDma4NfTmUAADLyKuHragrLOxNzEdKbGIZBQloJLqWVQC5vP82CrbkevJxN4GStz+mJQlNDHW4O\nxnBzMIZMJkdheT2yi2qQVViNmnopu19JRQN+PpmBiWHOML5TTYL0LM4j5Xfv3g2pVKq0XiKRYPfu\n3Rg2bBini0mlUkRFRSEyMhKhoaHw9PTEp59+isTERCQmJnZ4zPfff49p06ZBX//eYyreeOMNiEQi\nTnEMBlamOhhia8gu05wpRFWSbpQh7lqxUjLREKrBT2SGuU+4Y8roIXCxe7DXU2pqfNhZ6GGUnw3m\nP+mB2Y+7IcDdgm2kr6mX4pdTGSigSeh6BacnlMjISMyYMQPjxo1DeHg4TE1NUV5ejtjYWNTU1GDv\n3r2cLpaeno76+noEBwez62xtbWFjY4OEhIQOE1NsbCw2btwIU1NTREREdHjeffv2oaysDOvXr0d8\nfDynWAaDkd5WyC6shkzOoFhcj8z8KrjaGd3/QEK6SVpWBS7cNU21mZEWfF3N4GJr2O3jSng8HkwM\ntBDirQVLE23EXMxBs0wOiVSG38/ewqOBdnB3MO7WaxJlnBKKq6sr9u/fj23btiE6Oho1NTXQ19dH\nUFAQli9fDnd3d04Xa23/sLBQLrFubm7eadtIVFQUACAuLq7D7VlZWdiyZQv27NmDujq6C7mbga4G\nfFzMkHSzFIBizhRHKwOaM4X0iuyiGrYSNgDYmOli0ijnXhmg6GRtgKljXPDn+Sw0NDVDLmdwIj4X\nNXVSBA21oG7GPYTzOBR3d3fs2LHjoS7W2NgIPp8PgUB5UJJQKIREIuny+VpaWrBu3TosXrwY7u7u\nXeocMFgEeJgjLbsCTdIW1NRLkZBWghBvK1WHRQa4YnE9jv2TzfbGMjXUwlOhTr062t3cWBvPhrvi\nz7+zIK5WFEyNv16MmnoJxgbYUQ+wHtBpQomOjkZoaCgMDAwQHR193xM99dRT991HU1MTcrkcLS0t\nUFdvu7RUKu2w4OT97Ny5E3w+H4sXL+7ysYOFplAdId5tc6Yk3SiFyN4QJgZd/3kTwkVFTRP+/DsL\nLTLFzK76OkJMCnNWyQBbPW0hpo11wbF/stkBk+k5lahtaMaTIx2hKeR8T0046PSnGRkZiYMHD8LH\nxweRkZH3PAmPx+OUUKysFHfGZWVl7N8BRQ+tf78G4+LXX39FaWkpAgMDAYCdmnjixIlYunQpli5d\n2uVzDkRDnYyRnl2BIrGi//6ZxHxMHeNCj/2k29U1NuPw2VtokipKpmhpqGPSKGfoaKmuVIpQoIYJ\nYc44m5SPa3dq3RWU1eHnkxmYFOYMA10NlcU20HSaUGJiYmBpacn+vTu4u7tDR0cH8fHxmDx5MgAg\nPz8fBQUFCAoK6vL59uzZg5aWFnb52rVrWLNmDXbt2kU9vu7C4/EwJsAWB47fhJxhUFhej7TsCgx1\nMlF1aGQAaZK24I+zt9gR7wJ1PiaGOcNIT/VddtX4PIwZZgsDHQ22k0BVrQQ/n8zAhFAn6lLfTTp9\niWhvbw+hUDG6OiUlBfr6+rC3t2/3R1tbG6dOneJ0MaFQiDlz5mDTpk04e/Ysrl27hsjISAQHB8PP\nzw9SqRRlZWXtuid3xsbGBg4ODuwfc3NzAIC1tTUMDQ3vc/TgYmKgBT+RGbt8IbWIBn2RbtMikyP6\nfBbENYoSKXweD0+EOLIDbPsCHo+HYe7mGD/CAWp3Bkw2Slrw25lbyMyvUnF0AwOnVql169YhNze3\nw21paWn45JNPOF9w9erVmDRpEtauXYuIiAhYW1tj69atAICkpCSEhYUhKSmJ8/kId0FDLdkSLE3S\nFlxIpRH05OHJ5Qxi4nJQWF7PrgsPsoODZd+cj8fVzghTRruw7SctMjmO/ZONxBulNFbrIfGYTn6C\nS5cuRVZWFgAgJycHVlZW7BPL3UpLS2FlZcWp4b6vyM/PR3h4OGJjY2Fra6vqcHpVTlEN/vj7Nrs8\ndYwLbMx073EEIZ1jGAanE9vaJgAgzNcafiJzFUbFTVWtBH+ev42q2rYepl5DTDHa34baFztxv+/O\nTttQlixZgp9//hmAIqGIRCIYGysPCuLz+dDX18fUqVO7OWzSUxys9DHE1hC37jzin76cj1mPiagL\nJXkgl66XKCUTfzfzfpFMAEV9sOljXRF9IRuF5YoxbFdvlUNXS1FTjHRdpwklICAAAQEBABTjPVau\nXAk7O7teC4z0nFF+NsgrqYW0WYbK2iYk3Syj/0Cky67cKkf89bYBye4ORhjZz8Y4aWqoY/Ijzjhx\nKQ8ZeZUAgItXi2BioAknawMVR9f/cLot/fjjj5GTk4PNmzez61JTU7F48WJcunSpx4IjPUNXS4Dh\nnpbs8qXrxUqP/YTcT2Z+Fc4mFbDL9pZ6GBto3y9fFamp8TEu2B625m2vfmPictjBkIQ7Tgnl2LFj\nWLJkCa5fv86u09TURFNTE55//nmcP3++xwIkPcN7iCnMjdpK3J9NyqcGScJJQVkdjsflsP9eLIy1\n8WSII9tzqj9S4/PwxAhHttNKc4sc0Rey0SRpuc+R5G6cEsqXX36JWbNm4ZtvvmHXiUQi7N27F9On\nT8eWLVt6LEDSM/h3+uW33lHmltQiI4+6TpJ7q6xtwpHzWZDdqRxsqKeBCaFOEKj3/2mmNTXU73wW\nxddidZ0Ef8XldFhyn3SMU0LJycnB+PHjO9w2fvx4ZGZmdmtQpHeYG2vDe0jb4Ma/UwrZEc6E/BvD\nMDiVkAdpswwAoKMpwNOjhkBbU3Wj4LubiYEWxgXZs8t5JbU4n1p4jyPI3TglFGNjY6SlpXW4LSMj\n475zlZC+a4SXFXTufCE0NDUj7mrnM2KSwe3qbTE71oTP42FCqNOAnFp6iK0hgu9qY0zJKENaVoUK\nI+o/OCWUSZMmYdu2bfjpp59QWanoCVFVVYVDhw7h888/x8SJE3s0SNJzhAI1jPKzYZev3hajpKLz\nmTHJ4FTXIFWaStrfzRzmfWgUfHcL8rDAEJu2Xl6nE/NQLK6/xxEE4JhQXn75ZYSEhOCtt97CyJEj\n4enpiZCQELz++usIDg7GqlWrejpO0oOG2Bqwo5oZhsHpy3n03piwmDsFRVtfdRnqaSBo6MDuZs7j\n8TAu2B4md6YOlskZRF/IZuuUkY5xqt0sFAqxY8cOpKWl4fLly6iqqoKenh4CAgLg5eXV0zGSHsbj\n8fCIvw32x9ShRSZHWVUjUjPL+s0ANdKzMvKqkFVUwy4/GmDXq/OaqIpAXQ1PhTrhp9gMNElb0NDU\njKMXsjB1jMug+PwPokuTAXh4eMDDw6Pd+sbGxgeaz4T0HQa6irvO1tcacdeK4WJrCF3tgfeOnHDX\nJGnBueS28SZeQ0xhPYhK9RjoamD8CAf8ce425AyDkooGnErIw7jg/jnmpqdxSijNzc3Yt28fLl26\nhObmZrb/uVwuR2NjI9LS0qig4wDg52qGGzmVqKhpQnOLHOeSC/DkSCdVh0VU6O+UAjTeGYuhqyXo\ndyPhu4OdhR7C/KzZgZw3cithaqgFfzd6gv83Tgll8+bN+O677zBkyBBUVlZCU1MThoaGyMjIgEwm\nw0svvdTTcZJeoKbGx5gAW/x6StEN/FZBNbIKq6kExSCVU1yD9JxKdnn0MFsIVTDrYl/gPcQU5VWN\nuH6nt9eFK0UwNtDssxWVVYXzSPkFCxbgyJEjmD9/Pnx8fPDrr7/ir7/+gpWVFfh8ep84UFib6mKo\nU1sR0LNJBWhukakwIqIK0mYZTl/OZ5dd7YwG9Y0Fj8fDaH9bWN2ZiIthGMRczEFlbZOKI+tbOGWC\n8vJyjBkzBoBihHxqaioAxURWL774Io4cOdJjAZLeN9LbGloaiofX2gYpztO8KYPOxatFqG1QTHSn\nKVTHKD9rFUekempqfDw50hG6d6YzljTLEH0+G5JmuuFqxSmh6OrqorlZ0V3O0dERRUVFqK9X9Ml2\ncnJCYSGNJB1INDXUEerb9gVy9VY5cu7q5UMGtmJxPa7cumt+Ez/rATUa/mFoawrw1EgntpdXZW0T\njlN5FhanhBIQEIAffvgBUqkUDg4O0NTUxMmTJwEAV69ehY4Ozcc80LjZGykN7IpNyKMpgwcBmUyO\nkwl5bMcbe0s9uNkbqTiqvsXcWBuPBrZN5ZFdVIOE9BIVRtR3cEooL730EuLi4rB48WKoq6tj1qxZ\nePPNNzFr1ixs3rwZjz/+eE/HSXoZj8fDmAA79s60oakZpy5TReKB7nJ6KSruzAsvUOdjzDA76h7b\nAZG9EYbd1csr4XoJjaQHx4Ti6emJo0ePYtGiRQAUc8wvWbIEOjo6WLx4MV577bUeDZKohpaGOsKD\n2u7Esgqr2V4uZOARVzcq3WmHeFsNyFpd3WWElxWsTRVjcuQMg5i4HLaawGDFKaH897//hVgsxujR\nowEo7l6XL1+Ob775BqtXr4aGhkaPBklUx8FSHz4upuzy3ykFNBnXACSXMziZ0FZyx9JEB17Opvc5\nanDj8xXlWVq7UtfUS/F3SsF9jhrYOCWUAwcOoKqK5soYrEK8rWF8p6ZRc4scx+OpEXKguZJZzhYF\nVePz8GigHfj9eMKs3qKvI8Ro/7biqtezKnArf/B+V3JKKD4+PjQSfhATqCumSOXfeZdeUtFAjZAD\nSHWdBBevtnUND/CwYG8gyP25ORjD1a6t48Kpy/mDtogkp5Hy3t7e2LlzJ/766y94eHhAW1u5bDWP\nx8M777zTIwGSvsHcSBvDvSzZWl8J10tgb6EHSxPq4defMQyD04n5aJbJAQAm+poIoJIiXTZ6mA2K\nyutQ19iMJmkLYi/l4ulRzoOuQwOnhHLkyBGYmJigpqYGcXFx7bZTQhkc/EXmyCmqRWF5HeQMgxPx\nuZj5mGhATP86WN3IqUReSS0Axf/jsYF2UKNKul2mKVTHY8Md8NuZW2AYBnkltUjNKIevyEzVofWq\nThPK0aNHMXLkSBgYGODMmTO9GRPpo1obIX88fgPSZhmq6iT4O6UQYwPs7n8w6XMamppx7q5GZF9X\nU3rifAg2ZrrwF5kh8UYpAODClULYWujCxGDwVGLv9FbkjTfeYOeKHz9+PNLT03stKNJ36esI8chd\njZDXbouRVVitwojIgzqXXACJVNHNVV9HiOF3TXtLHsxwT0uYGSoSiEzO4Hh8LmR3XicOBp0+oQiF\nQrZGV05ODq5cuYKGhs6nhh02bFj3R0f6JDd7I2QX1iDzTm+Wkwl5mP24NpXn6EeyCquRkdfWG2ls\ngB29uuwGamp8PDbcAQdP3ESLTI7yqkZcvFqsVMpoIOs0oUyfPh3ffPMN9u/fDx6Ph7fffrvD/RiG\nAY/HQ1paWo8FSfoWHo+HMcNsUSyuR11jMxolLTiVkIenQp0GXSNkfyRtluFMYlslYXcHI9hZ6Kkw\nooHFWF8TI32s2PlTkm6Wwt5Sb1D8jDtNKGvXrsWUKVNQWVmJiIgIvP3223BxcenN2EgfpqmhjvAg\ne/x+9hYAIKuoBtdui+E1hAbD9XVx14rZbq1aGuoI9bW5zxGkq7yHmCK7qAa5xYoOD7GXcjHrMTdo\nanRpktx+556fztXVFQCwdOlShIeHw8LColeCIv2DnYUefF3NkJJRBgA4n1IIG3NdGOnRGIa+qqSi\nAamZ5exymG/bVAWk+/B4PIwLssf+mBtolLSgrrEZpxPzMX6Ew4B+iufUP3D16tWUTEiHQrytYNI6\nil4mx4n4XMhoFH2fJJMzOHVZuZKwiCoJ9xhtTYFSVeLM/CrcyK28xxH9H3U4Jw9F/U4jZGuZjpKK\nBlxOo1H0fVHyzVKUVzUCUPzeRvvbDui75b7AydoAns4m7PLZpAJU1w3cWni9nlBkMhk2b96MsLAw\n+Pv7Y+XKlSgvL7/vcbm5ufD390dxcbHS+pycHLz00ksYPnw4RowYgZUrV9KEX73M1FALI7ys2OVL\naVTKu6+pqpXg0vW2RB/saQkDXSrq2hvCfK1heOdnLW2W4UR87oCthdfrCWXbtm04dOgQPvroI+zd\nuxfFxcVYsWLFPY/JysrCwoUL23VbbmhowKJFiyCXy/H999/jm2++QWVlJZYsWQKpVNqTH4P8i5+r\nGWzMFKW8GYbBsX+yaUKuPqK1vErLnfEQZoZa8HMdXCO4VUmgrqZ4ir/zNFgkrmcHPw40vZpQpFIp\noqKiEBkZidDQUHh6euLTTz9FYmIiEhMTOzzm+++/x7Rp06Cvr99u2/nz51FUVIRPPvkE7u7u8PT0\nxKZNm5CZmYmUlJSe/jjkLq2j6DXulPKua2zG0QvZg2pQV191I6cS+aV3lVcJoErCvc3CWBtBQ9va\noeOvFbPVnQeSTrt3vPvuu5xPwrWWV3p6Ourr6xEcHMyus7W1hY2NDRISEjocHBkbG4uNGzfC1NQU\nERERStt8fHywa9cu6Orqsuv4fEWOrK6m0du9TU9biMdHOODPv7PAMAyKxPU4nZiPRwNp1j9VaWhq\nxt8pba+AfV1NYW6sfY8jSE8JcLdAbnEtisT1kDMMjsfnYOY4NwjUB05TdqcJ5dSpU5xPwjWhtLZ/\n/LvHmLm5ebu2kVZRUVEA0GFRSgsLi3bn2rVrF7S1tREYGMgpdtK9HCz1EepjxX6JpWVXwMRAE34i\nqmCrCudTCtEkbQFA5VVUrfUp/sCJm4paeLWKaQNG+Q2ccUCdJpSeKAjZ2NgIPp8PgUC5RIdQKIRE\n8vA9H3744Qfs3bsXb731FgwNDR/6fOTB+LqaQVzdhLRsxXTB51OLYKSvCQfL9q8tSc/JKa5R6qY6\n2t+WyquomIGuBsJ8rXEyIQ8AkJpZjiE2BrA2073Pkf3DQz9ryWSyDp8eOqKpqQm5XI6Wlhal9VKp\nFFpaD1eR88svv8SGDRvw4osvYt68eQ91LvJwWkuzWN2pXMswDGIu5qCypknFkQ0ezS3K5VVc7Yzg\nYEUJvS/wcDRmb64YhsGJS7lobhkYc9FzGiJbXFyM9957D5cuXUJzczM7MOru5MCllpeVlaJraVlZ\nGft3ACgtLX3ggZNyuRzvvvsuDhw4gFdffRVLlix5oPOQ7qWmxseTIx1x8MRN1DU2Q9Isw5HzWZge\n7gpNIY3M7mnx10tQU6/o6aghVMMov8FRnLA/aJ13Zn9MOiRSGWrqpbiQWoTRw2xVHdpD4/SE8t//\n/hcXL17ExIkT4eTkhKFDh2L27NlwdHQEj8fDtm3bOF3M3d0dOjo6iI+PZ9fl5+ejoKAAQUFBD/QB\n3nvvPfz888/44IMPKJn0MdqaAkwIdYbgzoRNVXUS/HWR5qPvaaWVDUi+WcYuh/nYUCXoPkZXS6DU\ndnLlVjk70Vl/ximhxMXFYfXq1XjnnXfwzDPPQFtbG+vXr8ehQ4cQEBCA06dPc7qYUCjEnDlzsGnT\nJpw9exbXrl1DZGQkgoOD4efnB6lUirKyMs5jSE6fPo39+/dj2bJlGDVqFMrKytg/3dEmQx6emZEW\nwoPt2eW8klqcT6GBpz1F/q/yKrbmunB3pPIqfZGbvRGcrA3Y5ZMJeZA29+9XX5wSSn19PTw8PAAA\nzs7OuH79OgBAXV0dc+fOxYULFzhfcPXq1Zg0aRLWrl2LiIgIWFtbY+vWrQCApKQkhIWFISkpidO5\n/vjjDwDA9u3bERYWpvTn2LFjnGMiPcvF1hDBQ9t6F6VkluHabbEKIxq4UjPLUFapKK+ixudhzDDq\nst1XKcYE2bKvgGsbpDif2r9vtji9zDYzM4NYrPgCcHBwQFVVFcrKymBmZgYjIyN2G6cLqqtj/fr1\nWA6Ls0sAACAASURBVL9+fbttw4cPx40bNzo8rqNtmzdvxubNmzlfm6hO0FALiGuacOvOpFxnkvJh\npKcxYHq39AXVdRLEXW3rfh801BKGelRepS/T1hTgEX8bxMTlAFDMgOpsY9Bve0RyekIZNWoUtm3b\nhitXrsDW1hYWFhaIioqCVCrF4cOHqRIxuS9FOW87dnpUuZzB0X+y2YZj8nAYhsGZpHw036lMYKKv\nCX83GvvTH7jaGWKIbdswh1MJeezYof6GU0JZtWoVBAIBPvnkEwCK11a7d++Gn58ffv31VyxYsKBH\ngyQDg0BdDU+FOrHzbzRKWhB9IWvAdJlUpYy8KnYyp9ZeRGpUXqVf4PF4GO1vw/6/qGtsxt/J/fPV\nF6dXXiYmJjh06BA7mn3KlCmwsrJCcnIyfHx8EBIS0qNBkoFDT1uIp0Y64dCZTMjlDMqrGnE8PhdP\nhjjSu/4HVN/YjHPJBeyy9xATWN4ZA0T6B21NAUYPs8Wxf7IBAOk5FRhia6DUaN8fcHpC2blzZ7ux\nI8OHD8eLL74Ie3t7fPDBBz0WIBl4rEx1MHZY28RDtwuqEXet49I75N5kMjmO/pONRoniFYmulkBp\nKgHSf7jYGsLVrq1H3qnL+WiS9K9XX5wSytatWzuttZWamooffvihW4MiA5+HkzH8RG0l1BPSSnBz\ngM9m191ay9K3zj3D4/EQHmQPoYDKq/RXo/3bxgw1NDXjTFLBfY7oWzp95TV37ly2BDzDMJgzZ06H\n+8lkMnh6evZMdGRAG+ltjYqaJvbd/8mEPGgI1fptD5feduVWOVsvDQDCfKxhZ6GnwojIw9LUUMfY\nAFscOZ8FAMjIq8QQWwO42PaP2oSdJpQNGzbg2LFjYBgGO3bswJQpU2BpqVyplM/nQ19fH4899liP\nB0oGHj6fh8eHO+DnkxmoqpWgRSZH9PksPBHi2O/eHfe2vJJapYZbdwdj+LiaqjAi0l2crA3g7mCM\n9BzFzcKZxHxYm+r0i2oHnSYUFxcXLF++HIDiKWT27NnUPZh0O02hOiaFOeO3M7dQ2yCFTM7g6IVs\nPDbcXul9MmlT3VrC5s5oeAtjbYwJoPnhB5IwP2vkl9airrEZjZIWnEkqwBMjHPr875hTL6/Vq1cD\nUMyQGB8fj9raWhgZGSEwMJB6eJGHZqCrgaljXPD72VuorpNAzjCIicuFTM7A3cFY1eH1Kc0tMkRf\nyGbHKWhrCvDkSCeoqw2cSZqI4kZrbKAd/jh3GwBwK78KGXkGENn37ZssTglFKpXi5Zdfxrlz56Cu\nrg5DQ0NUVlZCLpcjJCQEO3fuhFAo7OlYyQCmryNUJJUzt1BZ26Qo6x2fi5YWObyG0KscoLXUeR7E\n1W2lVZ4a6Qhdrb7/KoR0nYOlPjydTdgyRWeTCmBrrtunX31x7uWVkJCATz75BKmpqfj777+RmpqK\nTZs2ITk5GTt27OjpOMkgoKslwNQxQ2Bq2DY3zunEfKTcVTl3MLucXsqWrgGAMcPsaLzJABfqYw09\nbcXNepO0Bacu57OFP/siTgnlyJEjWLVqFSZOnMjO2a6mpoZJkyZh5cqVbJFGQh6WtqYAUx4ZAnOj\ntnnPz6UUICGtRIVRqV5WYTUuXi1il31dzODhRK8DBzqhQA2PBraN2coqrMaNnL7bvZ5TQqmqqoJI\nJOpwm0gkQlkZ3UGS7qOpoY7Jo4ewMz4CwMWrRbh4tahP3531FHF1I1s8EABszfUw0pcmzBos7Cz0\n4H3Xa99zyQWoa+ibNfD+v707D2vqSv8A/k0IEA1gWWQXQSXYshjCphUVFanFBZep4q6oLdXW7ant\naJX2mTJ1m7rUdrB16dS2U51Rq50q8xMpda+sgju4ssgOYgIJIcn5/YFcTBFcJhCW9/M8eR45N7l5\nE2/y5txz7nueKaG4ubnhzJkzT9x2+vRpODt3/JXGSPtiamyE8UP7wNm28bqK1GvFOJfVtZKKslaN\nY+fuok5dX/TRQmSC0QN7U52uLuZVHwf0MKuvHF1bp0Fial67/Bw8U0KZPXs2/vGPf2D9+vXIyspC\nYWEhsrKysG7dOuzdu7fZix4J+V8YC4wwNthN50LHjOwSnMooaJcfJn3TahmOX7iHKnn9YnHGAj7G\nDHaD0JSWUO5qjAVGGBnQuLZNXrEMl9vhmkLPdGROnDgRd+/exe7du/Htt99y7UZGRpg/fz5mzZrV\nagGSrk1gxEf4q644fuEebhVUAai/Qlyj1SJE2gv8TvxL/fzlQuQ+tizsyAAXWPfo1sIjSGfmaGMG\nibgnMm6UAADOZd5HL1vzdrXmzTP/1Fm+fDnmzJmDzMxMVFVVwcLCAhKJBFZWNDBIWpeRER9hA11x\nIjkXOXn1A5JX71SgTs0QGujSKU//3LhXwX1xAEDAy3YdpvwGaT1Bnva4V/gQFQ+VqNNokZiSi4kh\n/drND6tmT3nNnj0bt27d0mmzsrLC8OHDMWHCBIwYMYKSCWkzRnweRgW64GXXxmMuJ68Sx3+/C82j\nRaU6i5KKGvyamsf97ebYA4Ge9i08gnQVAiM+QgNcwH906quwvBoXc9rPpKhmE0pycjKqq6vbMhZC\nWsTn8zDCv5fOjJdbBVX4V2IOSipqDBiZ/shrVDh27g402voxIisLIUYFurT7khuk7dhadYf/K41l\nsC5cLuQudjU0qtdAOhQej4ehvk7wFTcub1tepcCBX3Nw/tJ9qDtwb+VW/gPsS8iGXFEHADA1MUL4\nq25Ujp404dffjrtWS6NlOJGSy/0IMSRKKKTD4fF4eNXHAUN9nbgaVlrGkHa9BPsTsrn1QTqKOrUG\nv6bmIv58Y40uPo+H14J6t6sBV9J+GPF5GBnQuMxzaaUCae3g4t8WB+VjY2NhZmb21J3weDzs3r1b\nb0ER8jQ8Hg8+/Xqit70Ffk3NQ0GpHABQKVPiYNJNDHC3QZCnA4wF7fs3U3FFDRIu3MODR1ODgfoS\nNKOCesOp59M/e6Trsu7RDUFeDjiXVb+MQeq1Yrg6WMDWqvtTHtl6Wvy0qdVq1NXVPfWmUrXPqzZJ\n59fDzBQThvXFMKkzlzwYY7iYXYr9CTdw/1GiaW+0WobUa8U4+GuOTjJx72WJyDAPSibkmUjce8LR\npr6ihJbVn/oy5GnfFnsoH3/8MXx8fNoqFkJeCI/Hg3dfG/S2t0BSWh7yHl278UBei0O/3YRPPxsM\n8naAsaB9jEVUyWtxIjkXhY+dmjMxNsIwXyeIXSxpAJ48Mz6/ftnnfQk3UKfWouKhEhcuF2GwgUrz\ntO/zAYQ8BwuRCcYP6YMR/r1g+thAdtbNMvx4/AaXaAyFMYYb9yqw/0S2TjJxsBZhaqgYHr2tKJmQ\n59bDzBSDfRoTyMWcUoP1zCmhkE6Fx+PhFTdrTHutP1wdGku2PKxW4cipW0hKy4OqTtPmcSlVahy/\nkIuE5Fzu+fk8HoI87TExpB9Xp4mQF+HZxxoudvV179ijU1916rY/zptNKBMnToSlZfteHYyQ5ph1\nM8aYwW4IDXSBqUljb+XK7XL88/+u48rtclQ/mp7b2gpK5dh3/AZ3lT9Q/6ty0vB+CHjFvt1c5Uw6\nLh6Pp9Mzf1itwtnM+20eR7NjKOvWrWvLOAjROx6Ph/69reBiZ46T6flcLTC5og5JafVXotu81A29\n7c3hYm8Be2uRXsu4qDVapFwtQvqNUp1ilq+4WWGIxKndjOmQzsGsuwmG+DrhRHIuAODy7XK4OfXQ\nKa7a2qhsKen0uguNMXqQK27mP8CpjAIoatXctrIHCpQ9UCDteglMjI3Qy9YMLvYW6G1vDrPuz7as\nNWMMckUdyquUKHugQHmVEhVVClTKaqF9LJGYmhhhuF8vqslFWo2HiyXuFFRxP56SUvMQGeYBoUnb\nfNVTQiFdAo/Hg3svSzjbmuPa3QrkFj3E/bJqaB+7ulhVp8Gtxz6M1hZCuDhYwMXOHI42IhgZ8VFb\np0F5VX3SaEgc5VVK1D5lXMbZ1hyhgS60/jtpVTweD8OkzrhfVg1FrRpyRR1OZxRgVFDvNnl+Siik\nS+lmKoDUwxZSD1uo6jQoKJXjXuFD3CuSQfaHVfDKHypR/lCJjBslMBbwITQRNLnP01iITDCgX0/4\nuNvQDC7SJroLjREidUb8+bsAgBu5lejj1AN926BnTAmFdFkmxkZwc+wBN8ceYIyhUlaL3KL65HK/\nVK5TG6lOrUWduvlkYmpiBGuLbrDuIYR1DyFsXuoGKwsh1eEiBtHX+SV4uFjiRm79RJDf0vNhby2C\nqJV7yJRQCEH9qQIrCyGsLISQiG1Rp9agoLT6Ue/lIR5W1ycTPr/+ftYWQlj3aEwgom7G1AMh7coQ\nXycUlMohV9RBUavGiZRcjB/Sp1WP0zZPKBqNBlu3bsVPP/2E6upqDBkyBDExMbCxsWnxcbm5uYiI\niEB8fDzs7RvXhlAoFPj0009x/PhxaDQajB49GqtWrYJIJGrtl0I6MWOBEVwdLLhrWarktdBoGXqY\nmXbKBb1I5yM0ESA00AVHTt0GYwx5xTJk5pRC8lilbn1r8wsbt2/fjp9++gkbNmzA999/j6KiIrz7\n7rstPubOnTuIiopCTU3TNS9iYmKQlpaGr776Cjt27EBycjJiYmJaK3zSRfUwM4WVhZCSCelQnG3N\n4Svuyf19/lIhSitbb+2UNk0oKpUKe/fuxYoVKzB48GB4enpi8+bNSE9PR3p6+hMf8+2332Ly5Mmw\nsGg6l7qoqAi//PILPvroI0gkEvj7+yM2NhZHjx5FcbHhSzkTQoihBXna66ydkpB8D3Xq1ikg2aYJ\n5fr166iurkZgYCDX5uzsDCcnJ6Smpj7xMYmJifjkk0/wwQcfNNmWnp4OPp8PqVTKtUmlUhgZGSEt\nLU3/L4AQQjoYIyM+RgW5wPjR2kEVD5VcyXt9a9OEUlRUBACws7PTabe1teW2/dHevXsxZsyYJ24r\nLi6GlZUVjI0bZy4IBAJYWVmhsLBQT1ETQkjHZmkuRLDEifv70q0y3LlfpffnadOEolAowOfzdRIA\nAJiYmKC2traZR7W8P1PTpkX1XnR/hBDSWb3iZoW+Tj24v39NzUONUr/17No0oQiFQmi1WqjVap12\nlUqFbt26vdD+nrS4l0qlQvfuhlu1jBBC2hsej4fhfr24ag0NU4kfrzP3v2rThOLg4AAAKC0t1Wkv\nKSlpchrsWdjb26OiogIaTWPZC7VajYqKCtjatt7UOEII6YiEpgKMDHDhrkXJLZIhK6dMb/tv04TS\nv39/iEQiJCcnc235+fkoKChAQEDAc+/Pz88ParUaGRkZXFtaWhq0Wi38/Pz0EjMhhHQmvezMIXls\nKvG5S/dR9kA/U4nbNKGYmJhg+vTp2LhxI06dOoUrV65gxYoVCAwMhEQigUqlQmlp6TOvUW9nZ4fX\nX38dH374IdLS0pCamoq1a9ciIiLihXo8hBDSFQz0tEdPy/phBo2W4fiFe3pZi77NL2xctmwZxo0b\nh5UrV2L27NlwdHTEtm3bAAAZGRkIDg7W6XE8TWxsLKRSKd58800sXrwYAwcOxMcff9xK0RNCSMdn\nZMRHWGBvCPQ8lZjH9Dki00Hk5+dj5MiRSExMhLOzs6HDIYQQg7hyu5xbbA4Axgb30Vk6+4+e9t1J\na8oTQkgX9YqbFdwcG6cSJ6bk/k9TiSmhEEJIF9WwFr1I2DiVODEl74WnElNCIYSQLqybaX1V4gb3\nih4i6+aLTSWmhEIIIV1cLztz+D5W1v5c1n2UVz3/VGJKKIQQQjDQyx49X3psKvHv96DVPt+pL0oo\nhBBCHlUlbpxKXP5QibLn7KVQQiGEEAIAsLIQYmRALxgL+LB5qRusLITP9XhaU54QQgjHvZcl3Bx7\ncD2V50E9FEIIITpeJJkAXbSH0lCduLlFvQghhDTV8J35eIX3x3XJhNJQPn/GjBkGjoQQQjqe0tJS\n9O7du0l7l6zlpVQqcfnyZfTs2RNGRkaGDocQQjoEjUaD0tJSeHl5QShsOmDfJRMKIYQQ/aNBeUII\nIXpBCYUQQoheUEIhhBCiF5RQCCGE6AUlFEIIIXpBCeURjUaDzz77DMHBwfD19cWSJUtQVvZiawJ0\ndDdv3oSHh0eTW2pqqqFDa1MxMTH48MMPddrOnDmDiIgI+Pj4YNy4cTh58qSBomtbT3ov/vSnPzU5\nRv54n86irKwMH3zwAYKDg+Hv74/58+cjOzub295Vj4smGGGMMbZlyxY2ePBgdubMGXb58mX2xhtv\nsMjISEOHZRBHjx5lQUFBrKSkROemUqkMHVqb0Gq1bOvWrUwsFrPVq1dz7Tk5OczLy4v9/e9/Zzdv\n3mRbtmxhnp6eLDs724DRtq7m3gutVssGDBjAfv75Z51jRCaTGTDa1qHRaNjUqVPZlClTWGZmJsvJ\nyWFLlixhgwYNYhUVFV3yuGhOl7xS/o9UKhX27t2LNWvWYPDgwQCAzZs3Y+TIkUhPT4dUKjVwhG0r\nOzsb/fr1Q8+ePQ0dSpvLy8vD6tWrkZOTA0dHR51te/fuhUQiwdtvvw0AWLZsGdLS0rB371588skn\nhgi3VbX0XuTl5UGhUEAikXT64+T69evIyMjAsWPH0LdvXwDApk2bEBgYiJMnTyI9Pb1LHRctoVNe\nqD9gqqurERgYyLU5OzvDycmpy53mAYCcnBz06dPH0GEYRHp6OhwcHPCf//wHzs7OOttSU1N1jhEA\nCAoK6rTHSEvvRXZ2NoRCIZycnAwUXdtxcHDAV199BTc3N66Nx+MBAKqqqrrccdES6qGgseCZnZ2d\nTrutrW2XLCCZk5OD2tpaTJkyBQUFBXB3d8eKFSvg4+Nj6NBaXUREBCIiIp64raioqEsdIy29Fzk5\nOTA3N8d7772H5ORkWFpaYtKkSZgzZw74/M71O9XS0hIhISE6bd999x2USiWCg4Oxbdu2LnVctKRz\n/c+/IIVCAT6fD2NjY512ExMT1NbWGigqw1AqlcjLy4NcLsf777+PuLg42NraYubMmbh165ahwzMo\npVIJExMTnbaueIwA9RM3ampqEBwcjN27d2P69On4/PPP8cUXXxg6tFaXmJiIzZs3Y968eejbty8d\nF4+hHgoAoVAIrVYLtVoNgaDxLVGpVOjWrZsBI2t7QqEQKSkpMDEx4T4k69evx5UrV/DPf/4Ta9eu\nNXCEhmNqaoq6ujqdtq54jADAhg0bUFNTAwsLCwCAh4cHZDIZduzYgXfffZc7JdTZHDp0CGvXrkV4\neDhWrlwJgI6Lx1EPBfXnSIHGsvYNSkpKmnRluwIzMzOdX1x8Ph/9+vVDYWGhAaMyPAcHB5SUlOi0\nddVjRCAQcMmkgYeHB6qrqyGTyQwUVeuKi4vDqlWrEBkZiY0bN3Kn9ui4aEQJBUD//v0hEomQnJzM\nteXn56OgoAABAQEGjKztXb58GVKpFJcvX+baNBoNrl+/Dnd3dwNGZnh+fn5ISUnRabtw4QL8/f0N\nFJHhTJkyBbGxsTptly5dgq2tbZNE0xns3LkTW7duxZIlS7B27VqdHhgdF40ooaD+fOf06dOxceNG\nnDp1CleuXMGKFSsQGBgIiURi6PDaVP/+/eHk5ISYmBhkZmYiJycHq1atQmVlJWbPnm3o8Axq5syZ\nSE1Nxeeff45bt25h27ZtyMzMxJw5cwwdWpsbNWoU9u/fj8OHDyM3Nxf//ve/sWvXLixZssTQoend\n9evXsWXLFkyePBlTpkxBaWkpd6upqaHj4jE0hvLIsmXLoFarsXLlSqjVagwZMgQxMTGGDqvNCQQC\n7Nq1Cxs3bkR0dDQUCgWkUim+//57WFtbGzo8g/Lw8MAXX3yBTZs2YefOnejTpw927NjBXZvQlSxY\nsAACgQBxcXG4f/8+HB0dsWrVKrzxxhuGDk3vjh07Bo1Gg4MHD+LgwYM625YuXYpFixbRcfEILbBF\nCCFEL+iUFyGEEL2ghEIIIUQvKKEQQgjRC0oohBBC9IISCiGEEL2ghEIIIUQvKKGQdm3WrFk6KwK+\n/PLL8PPzw9SpU3HgwAF0xlnv3333HYKDg+Hj44Ovv/7a0OE0Kz8/Hx4eHjhy5IihQyHtBF2HQtq1\nWbNmQaFQYM2aNQAAtVqNBw8eICEhAYcPH8asWbO4bZ1BTU0N/P39MWzYMERFRaFXr16wt7c3dFhP\npFKpcPXqVbi4uMDKysrQ4ZB2gK6UJ+2emZlZkxI4oaGh6NmzJ3bu3InRo0d3mrpJMpkMGo0GoaGh\n7b6OnImJSZcrTURaRqe8SIcVHR0NoVCI/fv3c21KpRLbtm3Da6+9Bm9vb4SHh+tsB+oLYM6ZMwd+\nfn7w9fXF3LlzcfHiRZ37pKSkYMaMGRgwYACCgoKwZs0aPHz4kNuu1WqxZcsWjBgxAl5eXhgxYgQ2\nb97cpIz5H128eBHz5s1DQEAAAgICsHTpUuTn5wOoL40+dOhQAMDq1avh4eHxxH2EhoZixYoVTdrD\nwsLwwQcfAKjv6WzatAlhYWHw8vKCVCrF/Pnzcf36dZ3HnDx5EpGRkZBIJBgyZAhiY2NRXV3Nbb99\n+zYWL16MgIAABAYGYtGiRcjNzQXQ9JTXoUOH4O3tjfT0dLzxxhvw9vbG8OHDsWfPHp3nVCqV2LBh\nA4YOHQpvb29MmDABiYmJLb5vpGOghEI6LDMzM/j4+CAtLQ0AwBjDwoUL8e2332LatGmIi4vDq6++\nio8++ghffvklAEAul2PBggWwtLTE9u3bsWXLFigUCixYsAByuRxAfTKZN28eRCIRtm3bhvfffx+/\n/fYb5s+fD7VaDaC++uyPP/6Id955B3v27MG0adOwa9cufPXVV83Ge/bsWUyfPh0CgQAbNmxATEwM\nrl27hsjISJSVlSEkJARxcXEAgLfffrtJImwwfvx4JCUlQaFQcG1ZWVm4d+8exo8fDwB4//33cfjw\nYbz11lvYs2cPVq1ahRs3buC9997jxp2SkpLw1ltvwdbWFtu2bcOyZcvw888/Y/Xq1QCA4uJiTJ06\nFXl5efjLX/6C9evXIz8/H3PnzkVNTc0TY1Or1VixYgXGjRuHnTt3QiqVYsOGDTh//jz3f/TOO+/g\nX//6F+bPn48vv/wSL7/8MhYvXowTJ048w/86adcYIe3YzJkz2Zw5c5rdvnTpUubt7c0YYywpKYmJ\nxWIWHx+vc5+PPvqIeXl5sYqKCpaRkcHEYjFLS0vjtt+7d49t3LiRFRUVMcYYmzp1Khs/fjzTaDTc\nfa5evco8PDzYkSNHGGOMRUVFsXnz5uk8z3fffccOHz7cbKyTJk1iY8eO1dlvQUEB8/LyYuvXr2eM\nMVZYWMjEYjE7ePBgs/u5c+cOE4vF7OjRo1zbunXrWHBwMNNoNEypVLKoqKgm78OePXuYWCxm5eXl\njDHGJk6cyCZPnqxznwMHDrDw8HAmk8nY+vXrmUQiYWVlZTrPHRISwlJSUlheXh4Ti8Xcaz548CAT\ni8XswIED3P1ra2uZt7c3++tf/8oYY+zMmTNMLBaz//73vzrPu2jRIhYWFtbsayYdA/VQSKeRkpIC\nY2NjhIWF6bSPGzcOKpUKmZmZcHd3h5WVFaKjoxETE4OEhATY2Nhg5cqVsLOzg0KhQGZmJkJCQrhV\nPNVqNdzd3eHo6Ihz584BAIKCgrgex65du3Dz5k3MnDmz2TXYa2pqcOXKFYSHh+usue7o6Ah/f3+d\ntXiextXVFRKJBEePHgVQ/6s/Pj4eY8eOBZ/Ph6mpKXbv3o3Ro0ejuLgYv//+O/bt24ekpCQAQF1d\nHZRKJa5evYpRo0bp7Hvy5Mk4evQozMzMkJaWBqlUqlNl2tXVFUlJSS2OWUmlUu7fJiYmsLKy4npT\n58+fh5GREYYOHcq9t2q1GiNGjMDdu3e503+kY6JBedKhFRcXcyvjVVVVwdraWucLGwBsbGwA1A94\ni0Qi/PDDD4iLi0N8fDz2798PoVCIiIgIbpxEq9Vix44d2LFjR5Pna1iZb8GCBRCJRDh48CD+9re/\nYdOmTXB3d8eaNWswcODAJo+TyWRgjHGxPM7a2hr3799/rtc9fvx4rF+/HnK5HNeuXUNRUZFOMjt9\n+jQ+/fRT3L59GyKRCP3790f37t0B1CegqqoqMMZanJ314MED9O7d+7niAtBk6Vs+nw+tVsvtU6PR\nNDuYX1JSAmdn5+d+TtI+UEIhHZZMJsOVK1cwZswYAICFhQXKy8uh1Wp1kkrD0s6WlpYAgD59+mDT\npk3QaDTIysrCkSNH8OOPP8LV1RVTpkwBj8dDVFQUXn/99SbPKRKJANR/Sc6YMQMzZsxAeXk5Tp48\niR07dmDJkiU4e/YsjI2NdR5nZmYGHo+HsrKyJvssLS3lYntW4eHhWLduHRITE3Hx4kWIxWL0798f\nAJCbm4vFixdj1KhR+Prrr+Hs7Awej4cffvgBp0+f5uIBgMrKSp39yuVyZGRkQCKRwMzMDBUVFU2e\n+8yZMy+81oe5uTnMzc3xzTffPHG7m5vbC+2XtA90yot0WF9//TVqa2sRGRkJAAgMDERdXR2OHz+u\nc79ffvkFxsbG8PHxQUJCAgYOHIjS0lIYGRnB19cXH3/8MSwsLFBYWAgzMzO88soruHv3Lry9vbmb\nm5sbtm7diszMTADA9OnTuSVwra2tMWnSJMyYMQNVVVU6g+UNRCIRPD09cezYMe7XOgAUFhYiPT1d\n5zTRs7C0tMTQoUORmJiI48ePc4PxQP0sttraWkRHR6NXr17ccrUNyUSr1XK9ll9//VVnvydOnMCC\nBQsgk8ng5+eHjIwMPHjwgNteUFCABQsW4MKFC88Vb4OAgADIZDIIBAKd9zcrKwtxcXE6S+uSjod6\nKKTdk8vl3LRejUaDyspKnDhxAj/99BMWLlyIAQMGAACGDh2KgIAAfPjhhygqKoK7uztOnjyJffv2\nITo6GhYWFpBKpWCMYfHixXjzzTchEokQHx8PuVzOjb0sXboU0dHR+POf/4zw8HCoVCrs3LkTWR6i\neQAAAjZJREFU2dnZ3LTcwMBA7Ny5EzY2NvD19UVxcTG++eYbDBo0qNk11ZcvX46FCxciOjoa06ZN\nQ3V1NbZv3w4zMzPMnTv3ud+XiIgILF++HIwxjBs3jmv39PSEQCDApk2bMHfuXNTW1uLQoUP47bff\nAIBLeEuWLMHixYvx3nvvISIiAkVFRfjss88wYcIEODo6Yt68eThy5Ajmz5+P6Oho8Hg8fPHFF+jT\npw/CwsKe2Ht5mpCQEEilUkRHR2PRokVwdXVFeno6vvzyS4wdO5brAZIOypAzAgh5mpkzZzKxWMzd\nPDw8mL+/P5s5c6bOLKcGcrmcxcbGssGDBzMvLy82duxYtm/fPp37XLp0iUVFRbHAwEDm7e3NJk2a\nxBISEnTuc+bMGRYZGcl8fHxYQEAAi4qKYllZWdx2tVrNtm/fzkJDQ5mXlxcbNGgQW7NmDausrGzx\n9Zw9e5ZNnTqVeXt7s8DAQLZs2TKWn5/PbX+WWV4Namtrmb+/P5s1a1aTbfHx8WzMmDHM29ubBQcH\ns3feeYclJyczDw8PnfcjMTGRTZw4kXl5ebFhw4axzz77jCmVSm57dnY2W7hwIZNIJCwoKIgtX76c\nFRYWMsZYs7O8GrY3GD58OFu9ejX3t0wmY7GxsSw4OJh5enqy0NBQtn37dqZSqZ76mkn7RqVXCCGE\n6AWNoRBCCNELSiiEEEL0ghIKIYQQvaCEQgghRC8ooRBCCNELSiiEEEL0ghIKIYQQvaCEQgghRC/+\nHyvSSQOB3mBYAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "infected_sweep2 = sweep_doses(dose_array)\n", + "plot(infected_sweep2)\n", + "decorate(xlabel='Doses of vaccine',\n", + " ylabel='Total fraction infected',\n", + " title='Total infections vs. doses',\n", + " legend = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mod_gamma(system, percent):\n", + " \"\"\"percent is average percent of people that are recognized to be sick, during the 4 days they are sick;\n", + " must be put in as a decimal value\"\"\"\n", + " max_q = 4\n", + " min_q = 1\n", + " new_gamma = 1 / (max_q-(percent(max_q-min_q)))\n", + " system.gamma = new_gamma" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "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 +} From d66e22a76605a44dad76c459c72951cd27fa7c31 Mon Sep 17 00:00:00 2001 From: Bryce Mann Date: Tue, 10 Oct 2017 16:33:00 -0400 Subject: [PATCH 06/11] Chapter 7 Notebook --- code/chap07mine.ipynb | 2023 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2023 insertions(+) create mode 100644 code/chap07mine.ipynb diff --git a/code/chap07mine.ipynb b/code/chap07mine.ipynb new file mode 100644 index 00000000..aa5e1c82 --- /dev/null +++ b/code/chap07mine.ipynb @@ -0,0 +1,2023 @@ +{ + "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 inline\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": 4, + "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": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
value
temp89.32
\n", + "
" + ], + "text/plain": [ + "temp 89.32\n", + "dtype: float64" + ] + }, + "execution_count": 5, + "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": 6, + "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": 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", + "
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": 7, + "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": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nMHpId4yv6WY6k3qJ9buSyL10/Q6HQoiOTZKEaHXdXSx5NMaPHq5X96ooKa9h8/4Ufj2Tg1J2wBOi\n05AkIdqEiZE+Iwd1IyrEAwP9xm4mlUpFXEIBG/Ykc6lEdsATojOQJCHajEKhoFd3Gx6N8cPNwVzd\nXnSlig17kog9ny874AnRwd12ksjPz+fMmTNUVVVRU1PTFjGJLsbcxIAHh/VgWJArerqNf+UaGlQc\njs/lm33JFJdV3+IMQght0ThJHDhwgNGjRxMREcEjjzzChQsXmDt3Lv/85z9lvwdxSwqFgkBvex75\n3Q54TWU9TqcUSlkPITogjZLEgQMHmD59Oh4eHrzxxhvqpDBgwAA2b97Mp59+2qZBiq7D2tyIh0f4\nMDDAWV09tl7ZwE8nsvnupwuUVdZqOUIhxLU0ShLLli3jwQcfZOXKlYwdO1bd/sQTTzB9+nQ2b97c\nZgGKrkdHR0FIL0cmRPlia2msbs8qKOOrnYmcSyuSpwohOgiNkkRKSgqjR4++4bEBAwaQm5vbqkGJ\ne4OdlTETonwI7umgLvdSW6dkb2wm235Oo6KqTssRCiE0ShJWVlakp6ff8Fh6ejrW1lLMTdwZXV0d\nBvVxYWxE8321L+aWsm5nAkkZxfJUIYQWaZQkRo0axbJly9i3bx9KpRJoHIhMSUlh5cqVxMTEtGmQ\noutztjPlkWg/+nrbq9tqapXsPJLOj4fTqayWpwohtEGj2k2zZs0iMTGR6dOno6/fuFfAn//8Z65c\nuULfvn2ZNWtWmwYp7g36ejoMDXKlu6sFe2Mz1cUCU7NKyCksJ6K/G15uVlqOUoh7i0ZJwsjIiC++\n+IIDBw5w+PBhSkpKMDc3JzQ0lMjISHR0ZE2eaD1uDuZMjPbj59M5nL1QBEBVTT0//HoRPw9rhvZz\nlRLkQrQTjf6lzZgxgyeeeILhw4czfPjwto5JCAz0dRkR7E4PV0v2xWZS/tsgdmJGMVkF5USGuOPp\nLCXIhWhrGj0CHDx4UD0WIUR78nSyYGKMHz09r06OqKiuY+uhC+yNzaCmTv5eCtGWNEoSgwcP5ocf\nfpBEIbTCyECP+0I9rytBfi7tMl/tSCAjr1SL0QnRtWnU3WRlZcU333zDjz/+iLe3NyYmJs2OKxQK\nVq1a1SYBCtGku4slj91vyk8nskjOLAEaNzb6/uAF/HvYMiTQRV1xVgjROjRKEhcvXiQwMBBoLPdc\n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\nD/dBZUkAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 9, + "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": 10, + "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": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "72.299625390403094" + ] + }, + "execution_count": 11, + "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": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.3790079710980949" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "milk = make_system(T_init=5, r=.01, volume=50, t_end=15)\n", + "run_simulation(milk, update)\n", + "final_temp(milk)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 14, + "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": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1.])" + ] + }, + "execution_count": 15, + "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": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, 1.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3.])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsolve(func, 2.9)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But not always." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3.])" + ] + }, + "execution_count": 18, + "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": 19, + "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", + " 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": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.2996253904030937" + ] + }, + "execution_count": 20, + "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": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.011543084583978345" + ] + }, + "execution_count": 21, + "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": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 22, + "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": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.01\n", + "[ 0.01]\n", + "[ 0.01]\n", + "[ 0.01]\n", + "[ 0.01]\n", + "[ 0.01150871]\n", + "[ 0.01154231]\n", + "[ 0.01154308]\n", + "[ 0.01154308]\n", + "[ 0.01154308]\n" + ] + }, + { + "data": { + "text/plain": [ + "0.011543084583978345" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def error_func2(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", + " run_simulation(system, update)\n", + " print(r)\n", + " return final_temp(system) - 70\n", + "\n", + "solution2 = fsolve(error_func2, .01, xtol=1e-8)\n", + "r_coffee = solution2[0]\n", + "r_coffee" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "18.499850754390966" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_milk = 0.1\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": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "17.86886101606212" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_milk = .09\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": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "19.039950177213015" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_milk = .11\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": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "19.501444483698084" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r_milk = .12\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": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def error_func3(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(T_init=5, t_end=15, r=r)\n", + " run_simulation(system, update)\n", + "\n", + " return final_temp(system) - 20" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.13296078935466457" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "solution3 = fsolve(error_func3, .1, xtol=1e-8)\n", + "r_milk = solution3[0]\n", + "r_milk" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "20.0" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "milk = make_system(T_init=5, t_end=15, r=r_milk)\n", + "run_simulation(milk, update)\n", + "final_temp(milk)" + ] + }, + { + "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": 43, + "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": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 44, + "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": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "21.764705882352942" + ] + }, + "execution_count": 45, + "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": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap07-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nBCGEEIf+H0W9gvkl+IxjAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "63.109243697478988" + ] + }, + "execution_count": 47, + "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": 48, + "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": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61.428571428571438" + ] + }, + "execution_count": 49, + "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": 50, + "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": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61.428571428571438" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "62.90280912845234" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix(15)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "63.109243697478988" + ] + }, + "execution_count": 53, + "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": 54, + "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": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap07-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nMdGkZRzHsYSEBP5zX18f4ziOvf7663yZwWBgEomE5efnM8YYq66uZiKRiF2+fJmvMzo6yjZt2sSS\nkpKmjKumpoa9+eabzGAwGK0XHBzMcnNzGWP3H7LIcRxramri6wwNDbG1a9ey9evXM8YYGxgYYP7+\n/qy4uNho+9u3b2ccx7Fbt24xxhh79dVX2caNG9no6Chf55dffmEikYjV1tYyxhjLz89na9asYX19\nfXydixcvMo7jJjxYdbxjx44xkUjEtFqtUfls+vPHH39kHMcxtVrNGGOstLSUcRzHLly4wK/T0dHB\nOI5jn332mVF7v/76K+M4jp07d27KWMnCR0c85D8nMDCQf+/q6gqBQGBUZmNjA2dnZ/4U1YULF7Bs\n2TI8++yz0Ov10Ov1MBgMiIyMhFqthk6nm7SdTZs24eDBg9DpdNBoNKivr0dpaSlGR0f5mRt//vln\n2NnZ4YUXXuDXc3R0RHh4OP/54sWLGBkZ4adDGPPyyy/z7//++29cunQJERER/Ey5er0efn5+8PDw\nwA8//AAAaGlpgUQigaurK79uUFAQPDw8pu2zmzdvwsXFhb9pYy79ORWJRMK/f+qpp/j9Gm/58uUA\ngI6Ojmm3RRY2urmA/OcIhcIJZdPNPdTf34+urq4pL2jfuXNn0lkX//nnH3z00Ueora2FXq+Hp6cn\nxGIxbG1t+esdAwMDRklgzNKlS/n3Y9dyHpzjZHydu3fvwmAwoKKiAhUVFRO2NzZT5MDAAHx8fKZt\nbzKDg4NT9tHD9udkBALBhJlwAUy41jU2rfJCnbWTmIYSDyEzePzxx/HMM8+goKBg0uWTJQ4AyMvL\n4yf8kkql/JexVCo1Wrevrw+MMaPbvvv7+ydsv6enx+huvvF1hEIhbGxsIJfLjY6Exi8f21Zvb++E\n5eO3NdU+LoTf0IzFMFWfE+tAp9oImUFISAg6Ozvh5uaG1atX86+GhgYcPXrU6C6v8VpaWiCVShEV\nFcUnnba2NvT19fH/yUulUuh0OjQ0NPDr6XQ6nD9/nv8sFothb2/P35Aw5syZM/x7JycnrFq1Cu3t\n7UYxrlixAkqlEpcuXQIAhIWFoaWlBX/99Re/7rVr13Dz5s1p+8DDwwNarRaDg4OmdNm/ZuzHsjOd\nGiQLGx3xEDKDzZs344svvoBMJsOOHTuwbNkyNDY24vDhw3jnnXem/IFqYGAg6urqUF1djRUrVkCj\n0aC8vBw2Njb8tQupVIrnn38eu3btQk9PD9zd3XHkyBH09fXBzc0NwP2jlZSUFCiVStjb2yM0NBSN\njY1GiQcA0tLS8NZbbyEjIwNxcXHQ6XQ4dOgQfv/9dygUCgBAYmIijh8/DrlcjtTUVOj1euzdu3fK\n5Dlm3bp1AIDW1la8+OKLc+rPuWhtbYWjo6PR9SBifSjxEDIDoVCIY8eOoaSkBPn5+RgaGoKXlxey\ns7ORkJAw5XoZGRkYGRnBxx9/DJ1OB09PT7z99tu4du0azp49C4PBgEWLFkGlUqG4uBhKpRL37t1D\nXFwc4uPj0djYyG9rx44dcHR0xOeff47Dhw9DLBZDoVAgNzeXrxMeHo7KykqoVCqkpqbCzs4Oq1ev\nxpEjR8BxHID7p6i++uor5OXlQaFQQCgUIjk5ecLt2w/y8vKCv78/mpqaLJp4mpqaEB4eDjs7O4vF\nQOaOpr4mhJjk9OnTyMnJwblz5yzyxd/Z2Yn169fj+PHjWLVqldnbJ/OHrvEQQkwSGxsLb29vVFdX\nW6T9qqoqxMbGUtJ5BNARDyHEZNevX4dMJsPJkyfn9KDQh9Xe3g65XI6amhq4uLiYrV3y76DEQwgh\nxKzoVBshhBCzosRDCCHErCjxEEIIMStKPIQQQsyKEg8hhBCz+h8L96aNgHvdaQAAAABJRU5ErkJg\ngg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "61.428571428571438" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#mix immediately\n", + "mix_first = mix(coffee, milk)\n", + "mix_first.t_end = 30\n", + "run_simulation(mix_first, update)\n", + "final_temp(mix_first)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def run_and_mix2(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", + " #removed run_simulation for milk to show that milk will be at initial temperature when added to coffee, instead of warmed up\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": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "60.714285714285715" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_and_mix2(30)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sweep = SweepSeries()\n", + "for t_add in linrange(0, 30, 2):\n", + " temp = run_and_mix2(t_add)\n", + " sweep[t_add] = temp" + ] + }, + { + "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(sweep, color='purple')\n", + "decorate(xlabel='Time added (min)',\n", + " ylabel='Final temperature (C)',\n", + " legend=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#coffee will be hotter if you add cold milk immediately instead of cold milk later" + ] + }, + { + "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": 61, + "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": 62, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r_coffee2 = 0.011610223142273859" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 63, + "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": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "70.0" + ] + }, + "execution_count": 64, + "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": 65, + "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": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "coffee.results - coffee2.results" + ] + }, + { + "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 +} From 3cf09e47f5572d10429282d8d42a7e07732122ca Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Mon, 16 Oct 2017 16:10:01 -0400 Subject: [PATCH 07/11] Chapter 6 Notebook --- code/chap06mine.ipynb | 1247 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1247 insertions(+) create mode 100644 code/chap06mine.ipynb diff --git a/code/chap06mine.ipynb b/code/chap06mine.ipynb new file mode 100644 index 00000000..1415548f --- /dev/null +++ b/code/chap06mine.ipynb @@ -0,0 +1,1247 @@ +{ + "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": 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": [ + "### 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": 2, + "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": 3, + "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": 4, + "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": 5, + "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", + " unpack(system)\n", + " s, i, r = state\n", + "\n", + " infected = beta * i * s \n", + " recovered = 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": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test the updated code with this example." + ] + }, + { + "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.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": 8, + "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": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAETCAYAAAD+spv+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8Tff/wPHXzR4yZCHDij0isWu0iFFao1btUlFb1Sit\n1mj1p0FRq2i1GnzN0lYpWqU6FGnsLSoVgkQGmTe59/7+OM1Nbm7CRbb38/E4j9x8Puee806q953z\nmSqdTqdDCCGEyAdmRR2AEEKI0kOSihBCiHwjSUUIIUS+kaQihBAi30hSEUIIkW8kqQghhMg3RZpU\nZs6cyYwZMx56zpkzZ+jXrx8NGjSgY8eOfPvtt4UUnRBCiMdVJElFp9Px6aefsmXLloeeFxsbS1BQ\nEHXr1mXHjh0MHjyYGTNm8PvvvxdSpEIIIR6HRWHf8MaNG7z77rtcuXIFT0/Ph567bds2ypQpw4wZ\nMzAzM8PX15fz58/z5Zdf0qpVqzzfl5qaytmzZ3F3d8fc3Dy/fwQhhCiVNBoN0dHR1KtXDxsbmye6\nRqEnlbCwMCpUqMCiRYuYNGnSQ88NDQ2lSZMmmJllPVA1bdqUOXPmoNPpUKlUub7v7NmzDBw4MF/j\nFkKIZ8XGjRtp3LjxE7230JNK9+7d6d69u0nn3r59mzp16hiUeXh4kJKSQlxcHC4uLrm+z93dHVB+\nMeXLl3+6gIUQ4hlx+/ZtBg4cqP8MfRKFnlQeR2pqKlZWVgZlmd+r1eo835fZ5FW+fHm8vb0LLkAh\nhCiFnqbboFgnFRsbG6Pkkfm9ra3tE10zKgrWrYNq1aB6deWwt3/aSIUQQkAxTyrly5cnOjraoOzu\n3bvY2dnh4ODwRNe8cgWuX1eOn39Wyry9oWZNqFULatSAJ+yfEkKIZ16xTiqNGjVix44dBp3yR48e\npWHDhgad94/j6lXjsshI5ThwAMzNwdcX6tSBBg3gEQPUhBBCZFOsZtSr1Wqio6P1TVy9e/cmNjaW\nWbNmER4ezvr16/nhhx8ICgp64nv06wdjx0KnTlC1KuTMTRoNXL4M334Lv/76ND+NEEI8e4rVk8qJ\nEycYMmQIISEhNGvWDDc3N7744gvmzp1Ljx498PT0JDg4mOeee+6J72FnB35+ygGQmqo8vVy8CBcu\nKE8smerXN37//v3g4qLUWVs/cRhCCFEqFWlSWb9+vcH3zZo149KlSwZl/v7+bN++vcBisLGBevWU\nAyAhQUku588r/SzZpaXB999DejpYWiqJpUkT5aulZYGFKIQQJUaxelIpDpycoHlz5cjp3DkloYDy\nNSxMOWxsoGFDaNZMSUR5zMkUQohST5LKY6hUCbp1g9BQuHUrqzw1Ff78UzlcXKBFC+VwdS26WIUQ\noihIUnkMrq7w0kvKERWlJJdjx+Du3axzYmPhhx+UocuPWIVGCCFKHUkqT6hCBejaFV5+GSIi4K+/\nlASTlKTUt2xp/B6NRhmyLIQQpZUklaekUkHlysrRuzecPq0kl4AAw/N0Opg7F7y8IDAQqlQpimiF\nEKJgFat5KiWdhYXSYT9qFORYsozz55V+mOPH4eOPYf58OHlSSTZCCNN8++239O7dG39/fwICAujX\nrx979uwp6rBMFhUVxe7du/XfZ+4RBbBjxw6jBXRzqlmzJt99912Bxvi05EmlkOQYKU14OHz2GZQr\nBx07KqPNLOS/hhB52rJlC8HBwbz33ns0atSI9PR0fvrpJyZNmkRaWhqvvPJKUYf4SO+++y7lypXj\npZdeAmDZsmVYlLL/8UvXT1OM9eypzGk5cEBpHtNolPI7d2D9eqVzv0MHaN3a+ClHCKEklb59+9Kz\nZ099WbVq1bh+/TohISElIqnocjRNODs7F1EkBUeavwqRjw8MHQr/93/w4ouQfaHluDjYuhVmzFAm\nXwohDJmZmREWFsaDBw8MyqdNm8ayZcuA3JuHspddu3aN119/nYYNG9KoUSPGjBlDZLZlNGJiYpg8\neTJNmzalSZMmTJgwgbvZhndu3bqVTp064efnR9euXdm5c6e+7ujRo9SpU4e9e/fSrl07AgICGDly\nJFFRUQBMnz6dI0eOsHPnTmr+N7M6e/NXpo0bN9KqVSsCAgKYOHEisbGxef5OHhZPUZGkUgScneGV\nV5S+lV69wNExqy4xEZ5ifxwhSq3hw4dz+vRpWrduzahRo1i7di0XLlzAxcXF5H2TpkyZgqenJzt3\n7mTjxo3ExcXx7rvvApCRkcHrr79OZGQka9asYcOGDcTExDBhwgQA/ve//7F48WLeeust/RqEH330\nkcEHuUaj4ZNPPmHu3Lls3LiRhIQEgoKCyMjIYMaMGTRu3JjOnTvz+++/5xqfRqPhm2++YeXKlaxd\nu5YrV67wzjvv5HquKfEUBWn+KkI2Nkp/Stu28McfsHcv1K0Lbm6G56WnK0ORn3BhZiHytGuX0vRq\nitatYdAgw7ING+C330x7/8svK8Pwn1Tnzp0pV64cX3/9NX/88QcHDx4EoE6dOsyfP5/q1as/8hoR\nERG0bNkSLy8vLCwsWLBgATExMQAcOXKES5cu8fPPP+Pj4wPA3Llz2bFjB2lpaaxatYpx48bx4osv\nAlCxYkVu3brFqlWrDJre3nnnHVq0aAHA/Pnz6dChA0eOHKF169ZYWlpiY2Pz0J0VFyxYgK+vLwCz\nZs1i8ODBREREUKlSJYPzTI2nsElSKQYsLaFNG2jVCnLb0PLHH5XlYHr2VNYZk2VgxLOqYcOGNGzY\nEI1Gw7lz5/jll1/YsGEDI0aMYP/+/Y98/5tvvklwcDD/+9//aN68OW3atNF3ml++fBkXFxd9QgGo\nWrUqU6ZMITY2ljt37hAcHMzChQv19RkZGWg0GoPNBJs2bap/XbFiRVxcXLh8+TKtW7d+ZHxOTk76\nhAJQ779FCa9cuWKQVEyJJ+euuYVFkkoxYmFhPALs/n1lM7G0NFixQtlErHdvZckYIZ4VUVFRrF69\nmrFjx+Lu7o65uTl+fn74+fnRuHFjhg8fbrQYLSgfstkNGTKELl26cPDgQf7880/mzZvHl19+yXff\nfffQUViW/60Y+/777xskjUzZ35vzOlqt1uT9n3Kel9mxb5ljxdrHiaewSVIp5m7cMHwyuXxZ6ehv\n3lzplymFg0dEIera9emapAYNMm4SKwjW1tZs376dSpUqMWzYMIM6R0dHVCoVrq6uWFpakpiYqK+L\niIjQv46Li2P58uWMGDGCPn360KdPH06fPk2fPn24ePEivr6+xMbGcvPmTby8vAAIDw9n4MCBbN++\nnXLlyhEZGUmfPn3019y0aRMXLlzggw8+0JedPXuWxo0bA/DPP/8QHx9P7dq1AfSbDeYlPj6eqKgo\nKlSoAEBYWBgqlYpq1aoZnOfg4GByPIVNWumLubp1lZn4bdsa9qn89RfMnKk0jWWunCxEaeXi4sLw\n4cP55JNPWLZsGZcuXSIiIoKffvqJd955h1deeQVPT0/8/f3ZunUrFy9e5Ny5c8yaNUvfDOTk5MTh\nw4eZOXMmFy9eJCIigh07duDo6EiVKlVo0aIFderUYdq0aZw9e5aLFy/y/vvv4+vri7e3N6NHj2bd\nunVs2bKFf//9l127dvHxxx8b9Y/MmTOHsLAwzpw5w9tvv039+vX1TxP29vZERkZy8+bNXH9OlUrF\nW2+9xZkzZzh69CgffPABXbt21Se57EyNp7DJk0oJ4OCg7FjZti3s2KHMxAelSezbb+H33+HVV7M2\nHhOiNHrrrbeoVKkSW7duZd26daSlpVGxYkVeeeUVhg4dCsDs2bOZPXs2ffr0wcPDgzfffJM7d+4A\nStPS6tWr+fjjjxk8eDBqtZr69euzdu1aHBwcAPjss8/46KOPGDx4MFZWVrRq1Uo/Oqx///6o1WrW\nrl3Lhx9+SLly5RgzZgxvvPGGQZw9evRg4sSJJCYm0rZtW2bMmKFv1ho4cCBTpkyhS5cu/Pzzz0Y/\no7u7Ox06dNCPGOvcubP+/jmZGk9hU+lyzsYpBSIjIwkMDOTAgQMmDzUsSS5eVOa05PxjJyhImWAp\nhCh8R48eZciQIfz666+UL1++qMN5Ivnx2SnNXyVQrVrw3nswYADY2ytlHh7Gi1gKIURhk+avEsrM\nDF54ARo1UprAAgKMR47JUvtCiMImSaWEK1Mm99E3Oh2sXKlsj9y7N9jZFX5sQjxLmjVrluuw5meN\nJJVS6u+/4exZ5fWZM9C/v7IsvxBCFCTpUymlLl/Oen3/PqxeDatWKa+FEKKgSFIppQYMUDYLc3LK\nKjtxAmbPhqNHZXMwIUTBMKn5Ky0tjdWrV3Po0CGSk5ON9gQA2LdvX74HJ55OQADUrKnMbclc9C8p\nCb78EkJDlb6Y7ElHCCGelklJ5aOPPmLbtm00bdqU6tWrm7yOjSh6dnZK8mjcGEJC4N49pfz0aeWp\npX9/ZW6LLFIphMgPJiWVffv28dZbbxX5TE3x5GrVglmzlKeWQ4eUsuRkZXZ+LuvRCSHEEzHpkUOt\nVuMna4CUeNbWypPJpEng6qos/zJgQFFHJYQoTUxKKq1ateLw4cMFHYsoJDVrKotRjh+vzHPJLj0d\nUlOLJi4hHmb69On6Nb5MMXfuXAICAmjUqJF+I64npdPp+Pbbb7mX2X78hOrUqcOOHTue6hrFnUnN\nX926deO9994jLi6Ohg0bYmNjY3RO16dZP1sUOhub3Pdk2bkTTp2C11+HbHsFCVGiXL16lfXr1zNn\nzhxatWqFW87tVB9TWFgY06ZN48CBA/kUYellUlIZP348ADt37sx1/2OVSiVJpRS4eBEy/59ZsAC6\ndIGXXpKlXkTJk5CQAEDLli3zZVHZUrjuboExKankZ3bWaDQsWbKEnTt3kpSUROvWrZk5c2aef0kc\nOXKETz75hKtXr+Lm5sarr75KUFDQIze7EY8vNRVsbSElRZnHsns3nDsHw4crC1YKUVy0a9eOQYMG\ncezYMY4cOUKZMmXo378/48aNY8eOHbzzzjsAtG/fnldeeYWPP/6Yy5cvExwcTGhoKE5OTrRp04Yp\nU6bg6OgIQHp6OsuXL+fbb78lISGBWrVqMX36dNzc3Bg4cCAAgYGBjBs3jvHjxz/yevHx8Xz44Ycc\nOnQIW1tbJk+eXDS/rEJmUlLJvkFMcnIySUlJODs7G21xaYply5axc+dOgoODcXZ2Zs6cOYwfP55N\nmzYZnRsREcGoUaMYMWIEixcv5ty5c0yfPh07Ozv9f2SRf/z9lb6Wr77KmpF//bqySdirr0KLFjL0\nuFT56SfYtUvZmKewWVsrW0526PDEl/j000959913mTFjBnv37mXhwoU0b96cLl264OTkxJgxY9i2\nbRtVqlThzp07DB48mJ49ezJjxgzu37/P/PnzGTduHCEhIYDSB3PgwAFmz55N9erVWbduHUFBQezd\nu5eVK1fqr+fr62vS9d58801iY2P54osvMDc3Z86cOWg0mnz59RVnJk84OXr0KH369KFx48Y8//zz\n+Pn58eqrr3LkyBGTb6ZWqwkJCWHSpEm0bNmSunXrsmjRIsLCwggLCzM6/7fffsPGxoZx48bh4+PD\niy++yAsvvMBvmTP5RL5zcVFGh/XqldXslZamzHFZs0aZPClKiZ9+KpqEAsp9f/rpqS7Rtm1bXn31\nVXx8fBgxYgSOjo6cPHkSGxsbnP6b1evi4oKDgwP/+9//8Pb2Ztq0aVStWhV/f38WL17M0aNHOXHi\nBImJiXzzzTdMmjSJ9u3bU6lSJWbMmEGfPn24f/++wfXs7e0feb3w8HD++usvZs2aRUBAAH5+fgQH\nBz/1r60kMOlJ5fjx4wwfPpwqVaowYcIEXF1duXv3Lnv37mXEiBGsW7dOvyfzw1y8eJGkpCT91poA\n3t7eeHl5ERoaSsMcKx66uLgQHx/PDz/8QJcuXbh69SqhoaH079//MX9M8ThUKujYEWrXhi++gNu3\nlfKwMPjnH6UTv0aNoo1R5IMOHYr2SeUpnlIAKleubPC9g4MD6XnsrX3hwgUuXLhAQC6bDoWHh2Nh\nYUF6errB1AkLCwumTZsGQGxs7GNdz/6/jY7q1q2rL69WrZq+vDQzKal8+umnPPfcc6xZs8agLyNz\n68ply5bx9ddfP/I6t//7dCpXrpxBuYeHh74uu44dO9K7d2+mTJnC22+/jUajoXPnzowZM8aUsMVT\n8vGBGTNg2zbIHFEeF6eMEHv7bWkKK/E6dHjqD/ailLn3fHZ5dahbWlrSsmVL3nvvPaM6FxeXPPeM\nz8ujrvfHH3/kGs+TdBmUNCY1f509e5aBAwcadY6rVCoGDhzImTNnTLpZSkoKZmZmRr9YKysr0nL5\na+n+/fvcvHmToKAgtm/fTnBwMH/++SfLly836X7i6VlZwcCBMGaMssuktTUMGyYJRZQs1apVIzw8\nHE9PTypVqkSlSpUwMzPj//7v/4iKiqJixYpYWFhwNnO/CECr1dKpUyd2795t9Nn3qOvVqlULgBMn\nTujfExkZSXx8fOH8wEXIpKTi6OhIcnJyrnVJSUmYmzjm1MbGBq1WS0ZGhkG5Wq3G1tbW6PyFCxdi\nbm7OlClTqFOnDj169ODtt99mzZo1xMXFmXRPkT8aNFA68UeONB4JJqMtRXE3aNAg7t+/z/Tp07l0\n6RJnzpxh0qRJXL9+ncqVK2NnZ8eAAQNYvHgxv/76K9evX+eDDz4gISGBZs2a6ZutLly4wIMHDx55\nvcqVKxMYGMicOXM4duwYFy5cYNq0ac/Euokm/YTNmzdn2bJl3Llzx6D8zp07LFu2jOeee86km1Wo\nUAGA6Ohog/K7d+8aNYkBnDp1inr16hmUNWjQgPT0dKKioky6p8g/zs6QrYlY75dflJWPZSa+KK7c\n3d356quviImJoW/fvgQFBVGhQgW++uorfTPa1KlT6dy5M++++y49evQgPDyctWvX4ubmRrVq1ejU\nqRNvvfUWS5cuNel6CxcupFmzZowdO5ahQ4fStm1b3N3di/LXUChUOhNm9dy5c4devXqRmJhIo0aN\ncHNzIyYmhr///psyZcqwadMmfHx8HnkztVpN8+bNmTVrFt27dweUR8LAwEC2bNmCv7+/wfnDhw/H\n0tKSVatW6cv27NnD5MmTOX78OGVyrjHyn8xrHjhwIF8mPom83bgBH38MGRng5gYjRkCO/lMhRAmR\nH5+dJj2plCtXjp07d9K/f38ePHjAyZMnuX//PgMGDGDnzp0mJRRQ+k4GDBjA/PnzOXz4MOfOnWPS\npEk0bdoUf39/1Go10dHRqNVqAIYMGcKhQ4dYuXIlN27c4ODBg8ybN48BAwbkmVBE4Tp5UkkoADEx\nEBwMe/dKk5gQzyqTnlTyU0ZGBgsXLmTnzp1kZGToZ9S7uLhw9OhRhgwZQkhICM2aNQPg559/ZuXK\nlfzzzz+4ubnRvXt3Ro4c+dBRFPKkUriOH4cNGwybv2rVUjr0nZ2LLi4hxOPJj8/OPJPKqlWr6Nmz\nJx4eHgbNT7leRKVi5MiRTxRAQZCkUvhiYmDtWrh2LavM3h5ee03p5BdCFH/58dmZ5zyVJUuW0KJF\nCzw8PFiyZMlDL1LckooofG5uMGUK/PAD/Pij0vyVlAQrV0KbNtC7NzwDQ/SFeOblmVQuXryY62sh\n8mJuDt27KzPxv/xSmSgJyk6TsbEwdmyRhieEKAQmddQvX77caDhxpps3bzJ37tx8DUqUbDVqwPvv\nQ+YKFmZm0Llz0cYkhCgcJiWVFStW5JlUTp48yZYtW/I1KFHy2dsrEyUHD4ZXXoGqVYs6IiFEYciz\n+at///6cPHkSUNavefXVV/O8SP369fM/MlHiqVTQqlXudZmrV+SyHp8QogTLM6nMnTuX/fv3o9Pp\nWLp0KX379qV8+fIG55ibm+Pg4ED79u0LPFBResTGKkvpJydDy5bQt6+yvbEQouTLM6n4+voyevRo\nQFlYrU+fPrkupSLE49qxQ0koAH/8AZcuKcvp+/oWbVyieGvXrp3RasI2NjZ4enry6quvMnTo0Ke+\nR+ZcuV9//dXoj+icdDod3333Ha1bt8bV1fWp7w3Kors7duwo0ZsQmrT0/bhx4wCIi4sjPT1dv5yz\nTqcjOTmZv//+mz59+hRclKJUGTBA+Xr8uPI1JgYWLIBOnZTNAC1M+lcpnkUjRozgtdde038fHx/P\n5s2bmTdvHh4eHnTp0uWprh8QEMDvv/9uUpIICwtj2rRp+brd+rp169i2bVvpTyqXLl1iypQpXL16\nNdd6lUolSUWYzM4OgoLAzw/+9z9ISVHmtezdC2fPKjPxZc6qyI2dnZ3Boozu7u68//77HD58mD17\n9jx1UrGysjJ50ceCWIykkBc4KRAmjf6aP38+8fHxTJs2jaZNm9KqVSvef/99XnjhBVQqlX5PZiEe\nR9OmynL6/209AUBkJPzf/8GePaDVFl1somSxtLTUb8ERFRXFhAkTaNiwIS1atOCtt94yGL168uRJ\n+vXrh7+/P82aNWPq1Kn6fU6OHj1KzZo19ZsGHjp0iB49euDn50erVq348MMPSUtLIzIyUv80ERgY\nyLJlywDYt28fvXr1ws/PjwYNGtCvXz9Onz6tv3fNmjXZvn07AwcOpH79+rRp00Y/enbHjh18+umn\n3Lx5k5o1a3L06NGC/8UVAJOSysmTJ3nzzTcZOnQoXbp0ISUlhQEDBrBq1Srat2/P+vXrCzpOUUq5\nuMDEidCvX9aMe40GvvsOHrE6kBCkpKTwxRdfEB4eTrdu3UhOTmbw4MFYW1uzefNm1q5dS3p6Oq+9\n9hpqtRqNRsPo0aN57rnn+OGHH1izZg1nzpzJdf/42NhYxo0bR79+/fjxxx9ZsGABe/bs4fPPP6dC\nhQqsXLkSgG3btvH6669z+vRpJk6cSM+ePdmzZ4/+c/H99983uO7ChQsZOHAge/bsoUOHDsyePZub\nN2/SpUsXRowYQfny5fn9999z3aq4JDCp+UutVuv3g65cubLBDPuePXsya9asAglOPBtUKmjbVpmJ\nv24d/POPUp7XcGSRf3Zd2sUPl38A4OUaL9O1ZleD+m3ntvHztZ8B6F2nNx18Dbcf3nB6A79F/AbA\nIL9BtK7U2qD+i7AvOH5T6Twb3nA4Tb2aPlW8K1eu5PPPPweUpqK0tDRq1qzJokWLCAwMZNu2baSk\npPDxxx/rn1wWLVpEs2bN2L9/P61atSIuLg43Nze8vLzw9vZmxYoVue5tf/v2bdLT0ylfvjxeXl54\neXnxxRdfYGdnh7m5OU5OToCyfbC9vT2WlpbMmjWLfv36AeDt7U2fPn2Mthzu1auXvpluwoQJhISE\ncPr0aTp37qy/dkned8WkpOLp6UlkZCSNGzemcuXKJCYmcvPmTby8vLC2tiYhIaGg4xTPgPLl4e23\n4aefIDpa6XMRIruBAwcyYMAANBoNBw4cYOXKlfTs2ZOXXnoJgPPnzxMbG0vjxo0N3peSkkJ4eDgv\nv/wyw4YN44MPPmDZsmW0bNmStm3b0qlTJ6N71a5dm86dOzNy5EjKly9Py5Ytad++PW3bts01ttq1\na+Pg4MDq1au5evUqERERXLhwAW2OdtzK2TYccnBwAMg1qZVUJiWV9u3bs3DhQuzt7enQoQNVq1bl\n008/ZeTIkaxbt87k/VSEeBQzM2UUWG7OnVNWQe7cWUaIPaucnJyoVKkSAFWrVsXMzIyPPvoIFxcX\nXn75ZSwtLalWrRrLly83em/mB/i0adMYOHAgv/76K7///jvvvPMOW7duNeobVqlULFmyhHHjxunP\nHTduHN27d2fevHlG1z9y5AhvvPEGgYGBNGzYkF69enH9+nWjlpzMnSGzKw0d9Ho6EyQnJ+vGjh2r\nCwoK0ul0Ot3hw4d1fn5+ulq1aunq1q2r27dvnymXKTQ3btzQ1ahRQ3fjxo2iDkXkk5QUnW7aNJ3u\njTd0upkzdbqrV4s6IlHY2rZtq1uxYoVBmUaj0fXv31/XuHFj3d27d3Vbt27V+fv76+Lj4/XnPHjw\nQDdy5EjdkSNHdBEREbqZM2fqUlNT9fW7d+/W1ahRQxcTE6P766+/dDVq1NBFRUXpTp8+rfu///s/\ng/utWbNG5+fnp9PpdLrQ0FCDz5mRI0fqRo4caXD+woULdTVq1NBptVqdTqfT1ahRQ/ftt98anJO9\nbOXKlbq2bds+za/pqeTHZ6dJf+/Z2tqyfPly/Y6MrVu3ZteuXZw7d466detSsWLFAk18Qvz6a9aq\nx7dvw/z58PzzyrpidnZFG5soOmZmZnz44Yf06NGDuXPnEhwczGeffcbEiROZNGkS1tbWfPLJJ5w+\nfZrq1atjZWXFjz/+iFqtJigoCIAff/yRihUrUrZsWYNrOzg4sHHjRqytrenduzdJSUkcPHgQv//a\nZe3t7QG4cOECTk5OlC9fnkOHDnHy5ElcXV05dOgQX3/9NaD0S1tbWz/y57G3tychIYFr167puxdK\nGpNGf2XK/thWsWJFOnfuLAlFFIqOHaF/f8j+/9jhw8qQ5GPHZPviZ5mvry8jR45k7969/Pnnn3z1\n1VfY2Njw2muv0b9/fzIyMvj6669xdXXFwcGBzz//nBs3btC3b1969+6NWq1mzZo1mJkZfhxWrlyZ\nFStW8Mcff9CtWzeGDBlC+fLlWbRoEQDVqlWjU6dOvPXWWyxdupQJEyZQp04dhg8fTq9evdi/fz8f\nf/wxAGfOnDHpZ+nUqRNeXl5069aNQ4cO5evvqbDkufNjx44dUalUJl9o3759+RbU05KdH0uvuDhl\nwmS2of+AMtelf3+ls18I8WQKdOfHhg0bPlZSEaIwlC0LY8Yoqxxv2QL/zVnj4kX44ANo3x5eesnw\niUYIUXjyTCqZj21CFDcqFTRsCHXqwPffwy+/KM1fGg389ht06CBJRYiiYlJHfVhY2CPPadiw4VMH\nI8TjsLFRls1v0UJpEgsPV7Yz/m/kqBCiCJiUVAYMGPDIprALFy7kS0BCPC5vb5g6FU6ehAYNjOsP\nH4b69ZWmMyFEwTIpqeS2YGRycjKhoaF89913+sXUhCgqKlXuu0hevw4bNyrrinXooEyslA3BhCg4\nJiWVpk3JZEYUAAAgAElEQVRzX6+nTZs22NnZ8dlnn7F69ep8DUyIp6XTwfbtyuv0dGXl48OHoUsX\neOEFmZUvREF4rHkquWncuDHHjh3Lj1iEyFcqFXTrBtmnUiUmwtat8P778Oefsry+EPntqZPKwYMH\n9TNLhShuatSAd99VtivOvplfbCx8/TXMmgVHj0pyESK/mNQA8PrrrxuVaTQabt++zb///suIESPy\nPTAh8otKBc2aQaNGSvPXnj3w4IFSd/cufPmlUvbuuzIUWYinZVJSyW1ZZpVKha+vL0FBQfTq1Svf\nAxMiv1lYQLt2yhDkX35RlthPTlbqPDwkoQiRH0xKKrKzoyhNbGyUzvo2beDAAfj5Z2UWfk7h4eDp\nCba2hR6iECXWY41/+fXXX/n7779JSEjAzc2N5s2b06RJk4KKTYgCZWcHXbsqi1XmfEpJT4eVKyEj\nQ9mBsl07wz4ZIUTuTEoqcXFxjBgxgrNnz2JlZYWLiwv37t1j5cqVtGzZkhUrVpTIJZqFgNybvf74\nQxkpBsqTzIEDyjyYdu2gWjWln0YIYcyk0V9z584lMjKSVatWcfr0aQ4dOsSZM2dYvnw5Z8+eZeHC\nhSbfUKPR8Mknn9CqVSsCAgKYMGECMTExeZ5/+/ZtJkyYQEBAAM899xyzZ88mJSXF5PsJ8SScnAxX\nPNbpICwMFi6EDz9UOvxTU4suPiGKK5OSyuHDh5k2bRpt2rQxKA8MDGTy5Mns3r3b5BsuW7aMnTt3\nEhwczIYNG7h9+zbjx4/P9Vy1Ws2wYcOIj49n06ZNLF68mEOHDrFgwQKT7yfEkwgIgNmzYfx4qF3b\nsO7mTWWW/ttvw4YNyvdCCIVJzV/m5ub6/Z1zcnd3z3V0WG7UajUhISG89957tGzZEoBFixYRGBhI\nWFiY0aKUu3btIjo6ms2bN+Pk5ATA+PHj2bRpk0n3E+JpqFRQr55y3LqljBg7ehT+2wCVtDRlVWRf\nX/DyKtpYhSguTHpSGTBgAIsXL+bOnTsG5YmJiaxZs4ZBgwaZdLOLFy+SlJRksOyLt7c3Xl5ehIaG\nGp3/+++/06JFC31CAejVqxfbM9feEKKQeHrCoEHKNsb9+mU1jdnYKPNfstNo4O+/s5KPEM8Sk55U\n7t69y927d+nQoQONGjXCw8OD+Ph4wsLCSEpKwsrKSj9BUqVSsXbt2lyvc/v2bQDKlStnUO7h4aGv\ny+769es0b96cJUuW8P3336NSqejYsSMTJ06UgQGiSNjaQtu2ynDka9cgOhqy7bINKBuGrVmjDADw\n94fGjZW9X2StMfEsMOmfeUREBLVq1QIgIyODW7duAejLNBoNGo3mkddJSUnBzMwMS0tLg3IrKyvS\n0tKMzk9MTGT79u08//zzfPrpp9y5c4cPP/yQe/fuMX/+fFNCF6JAqFRKs5evr3Fd5lJ4aWlKc9nR\no8oTTYMGWZuL5UxEQpQWhTr50cbGBq1WS0ZGBhbZ/mxTq9XY5jLDzMLCAicnJ+bPn4+5uTn169cn\nIyODN998k3feeYeyskGGKIZ8fOCffyB7a3FqalaCsbRUOv/9/cHPTzYVE6XLYz2QX716lWPHjpGY\nmEjZsmVp1KgRVatWNfn9FSpUACA6Olr/GpTmtZxNYqA0k1lbW2Nubq4vq1atGgA3b96UpCKKpfbt\nITAQIiPh+HGlfyX7qPn0dDh9Wjlee01ZNkaI0sKkpKLVapk5cybffPMNOp1OX65SqejevTvz5s17\n5M6QoDSX2dvbc+zYMbp37w5AZGQkN2/ezHVmfuPGjdm6dSvp6en6JrPLly9jbm6Olwy3EcWYSqU8\nsfj4wCuvwI0byjyXkychKirrvHr1DN+n1SoLXPr6Qs2aUKGCTLQUJYtJSWXNmjV8++23TJ48ma5d\nu+Lm5kZ0dDS7du1i6dKl+Pr6mrRSsZWVFQMGDGD+/PmULVsWV1dX5syZQ9OmTfH390etVpOQkICT\nkxNWVlb069eP9evXM23aNMaOHcudO3dYsGAB3bt3l6cUUWKoVMqeLhUrQo8eysrIp04pXx0dDc/9\n91/l6eb4ceV7BwcluVSrBtWrK6PQzJ56wwohCo5JSWX79u2MGjWKoKAgfVn58uUZMWIEaWlpbN++\n3eTl7ydOnEhGRgZTp04lIyOD1q1bM3PmTABOnDjBkCFDCAkJoVmzZri5ubFx40bmzZtHz549sbOz\no1u3bkyePPkJflQhigcPD2Vr49ycP2/4/YMHEBqqHKCMPqtSBapWhVq1lEQjRHFiUlKJjo6mUc7B\n+P9p2LAha9asMf2GFhZMnz6d6dOnG9U1a9aMS5cuGZRVq1YtzyHKQpQ2TZsqiePSJbh8GZKSDOtT\nUpTEc/688lSTM6nExysjy+zsCi9mIbIzKan4+Phw4sQJnnvuOaO6EydO4O7unu+BCfEscnNT5sG0\nbausN3bzJly5knXcv591buXKxu//9ls4ckRZUdnbW5npn3l4eEC2MS9CFAiTkkrv3r1ZtGgRdnZ2\ndOnSBTc3N2JiYti9ezerV69m5MiRBR2nEM8clUpJDN7eWUnm3j1l0uW1a8ZrkoEyIACU8+7dU/pu\nMpmbQ7lyymoA5csru2FmXzRTiPxgUlIZPHgwFy5c4OOPPyY4OFhfrtPp6NatG6NHjy6wAIUQCpVK\neZJxc1OayXLS6ZRZ++bmylIxOWk0yhpm/81dpnp146SyaROUKZN1H1dXcHaWwQHCdCYvKBkcHExQ\nUBChoaEkJCTg6OhIkyZNqC49hUIUCyoVvPOOsrHYnTvKPJnISCWJ3LwJcXGG5+dMKGo1HDpkfF0z\nMyhbFlxclKNsWeVo2VKZyClEdo81+bFChQr4+Pjg5OSEi4sLPj4+BRWXEOIJWVhk9aM0a5ZVnpqq\nzJG5fVtJOjlH5ee1rZFWm9WclkmlUnbEzC4qCtauVYZJZx4ODllHmTJZh5WVzL8prUye/LhgwQI2\nbNhARkaGfgKkra0to0eP5o033ijQIIUQT8/GRhmOXKVK7vUODspKzDExWce9e8qw5tzOzblAZnx8\nVp/Oo1SooOxXk93168r8HDs75bC1NT5sbJRDFucsvkz6T7Ns2TJCQkIYMmQInTp1wtXVlZiYGPbu\n3cvSpUuxt7dn4MCBBR2rEKIAOThA69bG5Wq10nQWG6sccXG597EkJJh+r9wWGY+IULZuNkWDBjBm\njGHZX38pqxZYWSnXt7ZWXuc8LC2Vpr+ci3IkJipNh5aWStKytJS+pCdh8uTHMWPGMHbsWH2Zj48P\nAQEB2Nvb8/XXX0tSEaKUsrJSRo3lsjyfgQYN4N13leRy/77yhPPggfI6MVE5HjxQvpYpY/z+5OTH\niymnmzcNR7s9TGAg9O1rWLZ1q7LgZ3YqVVaCyRwEYWEBnTsrfUrZffON0gRobm54mJkZf9+smTKq\nL7s//lCaKDPPUamUr7kd1asb/w4vX86KOfP9OV9nHuXKFdzTnkmXTUxMxM/PL9e6Ro0a8eWXX+Zr\nUEKIksfWFipVevR5Ol3uo9Nq11Y+UJOTlSMlJetITTX8amNj/P7UVNNjzS0p5baBrU6nlOesy+1e\n4eHKYYrKlY2Typ49efdr5TR1qrJ0T3affqo8aZnio4+U0X0FwaSk0qZNGzZv3kzrXJ6Nd+/ezfPP\nP5/vgQkhSqfMv/5zqlw59wmdOel0ypFTmzbKXjVqtbKXjVqd95HberQ2NsrggowMJYlkZOR+H8g9\nfhO2lNLLrVntad+v1Zr+/oIcJGFSUmncuDFLliyha9euvPTSS7i7uxMfH8+hQ4f4+++/GTp0KKtW\nrfovWJVMhhRCFJjMJpycMke8PanXXjMu02qzEoxGo3zNyMi9+a5vX2VZHY0m90OrVQ6NRlkYNKdW\nrZSmwcwnOa1WeZ35nszXWi3Y2xu/v0aNrPMyz83tdeZ8poKi0unyysVZMnd4NOmCKhUXLlx4qqCe\nVmRkJIGBgRw4cADvnM+YQgghcpUfn50m5auLFy8+0cWFEEI8W2TAnBBCiHwjSUUIIUS+kaQihBAi\n30hSEUIIkW/y7Kj/4IMPGDZsGD4+Pty6dQt3d3csZUlSIYTIVZI6iZSMFDK0GTjbOGNjYThD82rs\nVeJT48nQZlDLrRbONs4G9b//+zv3ku+h0WloU7kNLrYuBvU7LuzQ1/et29eofnXoauJT49HqtIxp\nMgYnGyeD+o8Of0RSehJanZaZL8zEzrJgtgfNM6ls27aNLl264OPjQ2BgIFu2bMlzVr0QQhR3iepE\n4lPjSc1IpaxNWVztXA3qT0Sd4ErsFdQaNU08m1DTraZB/Tfnv+HvqL9J16Tzar1XaezZ2KA+5FQI\nJ2+fBGBU41EEVAgwqP/h8g9ciFamW0xoNsEoqfzx7x9ci7sGQINyDYySxtm7Z7l5/yYAL9d42aj+\n34R/iUlWpuSna42XB4hNiSVRnQiARvsYMy0fU55Jxd3dnYULF9KqVSt0Oh3btm3j8OHDuZ6rUqkM\n1gUTQoj8lpqRyr3keySlJ1HGqgyeDoYzCENvhfLHv3+QnJ5Mc+/mtK3S1qB+f/h+9l3dB0CPWj3o\nXL2zQf3le5f55Z9fAKhQpoJRUklKT+JesrL+f0p6ilF8luZZLTkZWuP1UizMsj5uNTrjD/VH1Zur\nsvaCzi0pmKmyejO0OuPp9Y+qzy95JpWpU6fy0UcfsWrVKlQqFTt27MjzIpJUhBBP6+b9m4TeCuWB\n+gHejt60qdzGoP7IjSNsPrsZgOcrPc9AP8NFbONT4zkffR4AXxdfo+tnb45K06QZ1VtbWD+03so8\na8Gw3J4EHK0dcbF1wdLc0iDBZKrmUg0rcysszCxwsnYyqm/h04JabrUwNzPH1dbVqL57re6kpKdg\nbmaOm53xwl1BDYPI0GZgbmZOWZuyRvXTW00HlM9rB2sHo/r8kmdS6dy5M507K5m8Vq1abNq0SZq/\nhBAm0el0qHKspRIRH8F3l74jLiWOik4VGRYwzKD+TtId9lzZA0CD8g2MkkoZq6y1UZLTjZc0zt5H\nkNuThLONM54OnthY2Bg1PQHU86hHGasyWJlbUcXZeNOZLtW7EFglEEtzS+wtjddJ6Vu3L33r9jUq\nz/RitRfzrAN4zue5h9bX86j30PpKzg9fzTNnc19BMWlGfUhICL6+xplfCCEy3U68zfpT64lJjqGs\nbVn9X8aZMrQZnLt7DiDXv+QdrR31rx+kGe8M5mzjTAWHCthb2lO+THmj+tputZnQbAK2lra5/qXe\nwqcFLXxa5Bl/NZdqVHOplme9o7Uj5LIPjDBkUlJp2rQp4eHhLFu2jGPHjvHgwQPKli1L48aNGT16\ntOxTL8QzIEmdxLbz27iTeIcMbQYznp9hUG9lbsXV2KtA7n0C2TuW41Pjjeo97D14ucbLOFg74G7n\nblRf3bU6s9vMzjO+srZlKWtrnExE4TIpqVy6dIn+/ftja2tLYGAgrq6uREdHc/DgQQ4ePMiWLVuo\nUaNGQccqhChAOp2OizEXibwfSVRiFIP9Bhs0YVmZW/FX5F/6pq10TbrBE4ezjTPmZuZotBqS1ElG\n9U42ToxpMoaytmVzbX5ytHaka82uBftDigJnUlJZuHAhVatWJSQkBDu7rHbL5ORkhg4dyuLFi/ns\ns88KLEghRP56kPYAeyt7gxFBAGv+XqPvr3ip+ksG7fCW5pa42bkRnRSNTqcjOjnaYASWmcqMSc9N\nwsnaCRdbF8zNzA2ubaYyo0H5BgX4U4niwKSkEhoayoIFCwwSCoCdnR1BQUHMmDEjj3cKIYqTLWe3\ncOrOKe4l3+Pd1u8adO6qVCq8Hb25fE/Zl/bmg5tGnbt96/bFytyKcvblcn3aeFifhHg2mJRUbG1t\n86xTqVRoHmfLMiFEgUrLSONa3DXc7d2Nhp7eT7uvn2vxT/w/RiOG/Mv7U65MObwcvPByMN7xyq+c\njAAVD2dSUvH39+fzzz+ndevWWFtnDX9ITU3liy++ICAg4CHvFkIUlj1X9rDr0i60Oi3da3WnS/Uu\nBvW+Lr6E3grF0tySJHWS0fsDqwYWVqiilDIpqUyePJnevXsTGBhIu3btcHNzIyYmhl9++YWkpCQ2\nbtxY0HEKIbKJSY4hUZ1IZefKBuUuti762dKX7102SiqNPRvjW9YXb0dvoz4PIfKDSUnF19eXzZs3\ns2LFCg4cOEBCQgKOjo40adKEsWPHPtbIL41Gw5IlS9i5cydJSUm0bt2amTNn4uZmPEM0p5EjR5Kc\nnMz69etNvp8Qpcm/Cf/y5YkviXoQRdWyVZnWappBfS03ZetvTwdPfBx9jN7vaO1oMB9EiPxmUlIB\nqFmzJkuXLn3qGy5btoydO3cSHByMs7Mzc+bMYfz48WzatOmh79u8eTOHDh2iadOmTx2DECWBVqc1\nGp1V1qYstxNvA0qfSHJ6ssFMcmcbZz7p9InB7HMhClOh7qeiVqsJCQlh0qRJtGzZkrp167Jo0SLC\nwsIICwvL830REREsXrxY+m5EqafT6Th1+xRrw9YyZf8Uo+VIHKwdqOJcBUtzS+p51Mu1X0QSiihK\nJj+p5IeLFy+SlJRk8LTh7e2Nl5cXoaGhNGzY0Og9Go2GadOmERQUxPXr1/n3338LM2QhCpVKpWLX\n5V3cSLgBwKnbp4zWhHo94HWcbJwMFjgUorgo1CeV27eVx/Zy5coZlHt4eOjrclq9ejUAw4cPL9jg\nhChkdxLvcCfxjlF5U6+sP7quxF4xqne3d5eEIoqtQn1SSUlJwczMzGgHSSsrK9LSjJeaPnv2LF99\n9RXbt2/HzEx2PhalQ3hsONvPb+da3DWaeTfj9YDXDeqbeDYhOT2ZRhUa4e3oXURRCvFkCvWT2sbG\nBq1WS0aG4QY2arXaaIJlWloab7/9NhMnTqRSpYcv6SxESWJhZqHf4S8sKozUjFSD+rK2ZelRqwc+\nTj5Gy8cLUdyZ9KSi0+nYsWMHhw4dIjk5GZ1OZ1CvUqlYu3btI69ToUIFAKKjo/WvAe7evWvUJHbq\n1CnCw8NZuHAhCxcuBJTko9VqCQgIYPfu3Xh6Gu78JkRxkqHN4OzdszQo18AgOVR0qoiPkw+3HtzS\nd7bn3M9ciJLKpKSyaNEiPv/8c7y9vSlfvvwT//VUq1Yt7O3tOXbsGN27dwcgMjKSmzdv0qRJE4Nz\n/fz82L9/v1Ect27dYuHChXh4eDxRDEIUhp+v/cz+8P0kpCbw1nNv6eePgPJH2GsNXsPZxrlAd+AT\noiiYlFR27tzJsGHDmDZt2qNPfggrKysGDBjA/PnzKVu2LK6ursyZM4emTZvi7++PWq0mISEBJycn\nbGxsjJq9ypQpk2u5EMXNncQ7JKQmAHDo+iGDpALg42Q8MVGI0sCkPpXExETatm2bLzecOHEiXbt2\nZerUqQwZMgRPT08+/fRTAE6cOEGrVq04ceJEvtxLiMKQ29a27aq0A5Q9RCo5yR9B4tmh0uXsIMnF\nsGHDaNasGaNGjSqMmJ5aZGQkgYGBHDhwAG9vGT0j8p9Op+NK7BV2X95NXGocs9vMNpr9fiH6AtVd\nq2NhVqiDLIV4Yvnx2WnSv/ZRo0YxefJkMjIyaNiwITY2xp2KuU1cFKK0UmvUrDy+kpT0FEAZxdXY\ns7HBObXdaxdFaEIUKZOSymuvvQbA8uXLAQw66jO3Fr1w4UIBhCdE8WRtYU3bym3Zc2UPZiozoh5E\nFXVIQhQLJiWVkJCQgo5DiGLrWtw1HqQ9MNoKN7BqIMnpyXTw7WC0GZYQzyqTkoqsDCyeRQmpCWw8\ns5FTt0/hYO1ALbdaWFtkbVJXxqoM/ev3L8IIhSh+TJ5RHx4ezsSJE2nRogX169fn+eefZ9KkSVy9\nerUg4xOiyNha2hIRHwHAg7QHHPjnQBFHJETxZ9KTyqVLl+jfvz+2trYEBgbi6upKdHQ0Bw8e5ODB\ng2zevJmaNWsWdKxCFCorcyu61+rO1ye/polXE6OOeCGEMZOSysKFC6latSohISHY2WVtCJScnMzQ\noUNZsmQJn332WYEFKURB0ul0/BX5F8npyUZ7tDf3bk5l58p4OsiSQEKYwqSkEhoayoIFCwwSCoCd\nnR1BQUHMmDGjQIIToqAlpCaw4vgKIuIjsDS3JKBCAC62Lvp6M5WZJBQhHoNJfSo5VxDOTqVSodFo\n8i0gIQqTg7UDWp0WgHRNOj9e+bGIIxKiZDMpqfj7+/P5558b7XmSmprKF198Idv8ihLLTGVG/3r9\nsTS3pEv1LvSu07uoQxKiRDOp+Wvy5Mn07t2bwMBA2rVrh5ubGzExMfzyyy8kJSWxcePGgo5TiKd2\nLe4aV+5doVO1Tgblvi6+BLcPxt7KvogiE6L0MCmp+Pr6snnzZlasWMGBAwdISEjA0dGRJk2aMHbs\nWGrUqFHQcQrxxDK0GWw+u5nfIn5DpVJR3bU6VctWNThHEooQ+cPkle5q1qzJ0qVLCzIWIQqEucqc\nuJQ4QBnptf38dt5u+XYRRyVE6ZRnUtm1axetW7fG2dmZXbt2PfJCXbt2zdfAhMgvKpWKAfUHMPvQ\nbGq71+bVuq8WdUhClFp5JpWpU6eydetWnJ2dmTp16kMvolKpJKmIYkGr03Lmzhn8yvkZLHzqaufK\nrDazZI0uIQpYnknlwIEDuLu7618LUdxFPYgi5FQI1+KuMbLxSBpWMNyOQRKKEAUvzyHFXl5eWFlZ\nAXD8+HHs7Ozw8vIyOqysrNi3b1+hBSxEXg78c4BrcdcA2HRmE0nqpCKOSIhnj0nzVN555x1u3LiR\na92FCxdYvHhxvgYlxJPoWbsnzjbOmJuZ80LlFwxWFBZCFI48m79GjhypX4FYp9MxduxY/ZNLdvfu\n3aNixYoFF6EQudDqtKhQGfSb2FnaEdQwCDtLO7wcvYowOiGeXXkmldGjR7N9+3YAtm/fTv369XFx\ncTE4x8zMDEdHR1555ZWCjVKIbG4n3mbdyXU08WxitABkddfqRRSVEAIeklT8/f3x9/cHQKPRMGbM\nGHx8fAotMCFyEx4bzuK/FpOuSSfyfiT1POpRrky5og5LCPEfk/pU5s2bx7Vr1wgODtaXnT59mmHD\nhvHXX38VWHBC5FTJuRLl7JUkotVpuR5/vWgDEkIYMCmp7Nmzh1GjRhEeHq4vs7W1RavVMnz4cA4f\nPlxgAQqRnYWZBcMChlHZuTLvtn6XZt7NijokIUQ2JiWVVatWMXDgQNasWaMvq169Ol9//TX9+vWT\n5VtEgUhUJ3L85nGjcm9Hb6a3mo63o3cRRCWEeBiTksq///5L+/btc61r3769wROMEPnh7N2zzDk0\nh7Un1hIea/zvK/uoLyFE8WFSUnF1deXcuXO51l26dAknJ6d8DUo823Q6HfvD93M/7T46nY6vTn5F\nhjajqMMSQpjApKTStWtXli9fzqZNm4iJiUGn03Hv3j22bdvGsmXLZN0vka9UKhVD/Ydia2mLo7Uj\n/er1w8LM5AW1hRBFyKT/U8eOHcu1a9eYM2cOH3zwgb5cp9PRsWNHJkyYUGABitJPp9MZNWe52Low\npskYPB08KWNVpogiE0I8LpOSiqWlJUuXLuXy5cv8/fffJCQk4ODgQKNGjahVq1ZBxyhKsXvJ9/jq\n5Fd0qNqBBuUbGNTVcJXN34QoaR6rTaFGjRq57vKYlJSEvb3snCcez5V7V1h+bDmpGalEPYhiVtlZ\nOFo7FnVYQoinYFJSUavVrF+/nuPHj5Oeno5OpwNAq9WSkpLCpUuXOHnypEk31Gg0LFmyhJ07d5KU\nlETr1q2ZOXMmbm65L0u+Z88eVq9eTUREBO7u7vTp04fhw4djbm5u4o8oiitPB09sLGxIzUglOT2Z\nSzGXaOLVpKjDEkI8BZM66hcuXMiCBQu4desWly5dIiIiggcPHnDixAnOnDnDG2+8YfINly1bxs6d\nOwkODmbDhg3cvn2b8ePH53rur7/+ypQpU+jTpw/ff/89kydP5vPPP2fVqlUm308UX/ZW9gwLGIaH\nvQdTW06VhCJEKWBSUtm3bx/Dhg3j+++/Z9CgQdSrV49t27axf/9+vLy80Gq1Jt1MrVYTEhLCpEmT\naNmyJXXr1mXRokWEhYURFhZmdP7mzZvp2LEjgwYNomLFirz44osMHTqUHTt2PN5PKYpchjYj1yVV\narnVYnab2VQtW7XwgxJC5DuTksq9e/d4/vnnAaVf5cyZMwCUK1eON954gz179ph0s4sXL5KUlETT\npk31Zd7e3nh5eREaGmp0/ujRoxk3bpxhwGZm3L9/36T7ieLhduJt5v8xn0/+/IQ7iXeM6s3NpClT\niNLCpKTi4OBAeno6AJUqVSIqKorExEQAKleuTFRUlEk3u337NqAko+w8PDz0ddn5+flRrVo1/feJ\niYls2rSJ1q1bm3Q/UfR0Oh1fnfiKiPgI1Bo1a0+sRaPVFHVYQogCYlJSadSoERs2bCA1NZVKlSph\na2vLzz//DMCpU6coU8a0eQQpKSmYmZlhaWlpUG5lZUVaWtoj3ztmzBjS0tKYPHmySfcTRU+lUjG4\nwWAszCywMLOgqVdTzFQm/bMTQpRAJk9+HDRoEG+88QYhISEMGDCAmTNnsnHjRs6fP0///v1NupmN\njQ1arZaMjAwsLLJurVarsbW1zfN9sbGxjBkzhqtXr/Lll1/i5SW7+pUk3o7eDG4wGG9Hb1kEUohS\nzqSkUrt2bfbs2cPly5cBmDx5MmXKlCEsLIzRo0ebPPqrQoUKAERHR+tfA9y9e9eoSSxTZGQkw4cP\nJykpiQ0bNshky2IsNSOV7ee308KnhVHHe3Pv5kUUlRCiMJmUVD788EN69Oih78tQqVSMGjXqsW9W\nq1Yt7O3tOXbsGN27dweUpHHz5k2aNDEeTnrv3j2GDBmCubk5mzZtkp0ni7EbCTdYFbqKmOQYLsVc\n4r3n38PawrqowxJCFDKTGre3b9+eLyOurKysGDBgAPPnz+fw4cOcO3eOSZMm0bRpU/z9/VGr1URH\nR3f0UC0AABtQSURBVKNWqwGYM2cOcXFxfPLJJ9jY2BAdHU10dDQxMTFPHYvIX3aWdiSqlcEbd5Pu\ncuzmsSKOSAhRFEx6UmnQoAGhoaG0bNnyqW84ceJEMjIymDp1KhkZGfoZ9QAnTpxgyJAhhISE0KBB\nA3766Se0Wi19+vQxuIa5uTnnz59/6lhE/nG1c6VfvX5sObeF/vX609Sr6aPfJIQodVS6zDVXHiI4\nOJj169dTsWJFateujZ2dneFFVCqD1YuLWmRkJIGBgRw4cABvb+kYzm9anZY7iXeo4FDBoFyn05Go\nTsTB2qGIIhNCPI38+Ow06Ull3759eHh4kJqayokTJ4zqZRe+Z0fUgyjWnVxHTHIMs9vMNkggKpVK\nEooQzziTksovv/xS0HGIEkCr0/JZ6Gf6WfEbTm9gVONR8keFEEIvz476I0eOkJSUVJixiGLOTGVG\n/3rKnCRzM3OqlK1SxBEJIYqbPJPK66+/Tnh4uEHZli1biIuLK/CgRPGQW3dbbffa9KrTixmtZ/Bi\ntRflKUUIYSDPpJLzA0Wj0TB79mxu3bpV4EGJohcRH8HHv39M1APjdd06+nbEy1FWNRBCGHusRZhM\nGCgmSoHDEYeZ9/s8rsdfJ+RUCFqdaVsbCCGErOwnjFRzqaZf9PHG/RtE3o8s4oiEECXFY+1RL54N\nng6evFjtRcJjwxnkNwh3e/eiDkkIUUI8dlKRjtnSQ6vTcvCfg5QvU566HnUN6l6u8TIqVPLfWwjx\nWB6aVN58802srKwMysaOHWtUBsoESVFyRD2I4ouwL4i8H4mbnRuz2szCyjzrv6vseSKEeBJ5JpVX\nXnnFqKxhw4YFGowoPI7WjsSlKsPDY5Jj+PX6r3Tw7VDEUQkhSro8k8q8efMKMw5RyOyt7OlRqwfb\nzm2jS/UutK3StqhDEkKUAtJRX8rpdDr+jvqbtIw0WlY0XGW6VcVW+JXzw9nGuYiiE0KUNpJUSrH4\n1HhWha7in7h/sLGwoX65+jhaO+rrzVRmklCEEPlKemNLMUdrR1IzUgFlq989V/YUcURCiNJOkkop\nknPFAzOVGT1r98TCzIKOvh3pVrNbEUUmhHhWSPNXKRCfGs/eq3vRaDUM9BtoUFffoz4fBX4kzVxC\niEIhSaWEi0uJ4/2D75OuSUelUtG2Sls8HTz19SqVShKKEKLQSPNXCVfWtiw1XWsCSvPX0cijRRyR\nEOJZJk8qJUjk/UgytBlUdq5sUN61ZlcS1Yl0q9mNOu51iiY4IYRAkkqJcCfxDlvObeHc3XNULVuV\nt1u+bbAmV2XnykxvNV3W6RJCFDlp/ioBbCxsuBRzCYBrcdcIjws3OkcSihCiOJCkUszcTbpLSnqK\nQZmTjRPNvJuhUqloWKEhdpZ2RRSdEEI8nDR/FROX713mxys/cj76PH3r9iWwaqBB/cs1XqZztc6y\nt4kQoliTpFJMRCdFcz76PKBs59uuSjuDJi0XW5eiCu3JaLWg0SiHVqscObejVqmyDnNz5TAzUw4h\nRIkkSaWQJaQmcDX2Ko08GxmUN/JsxJZzW1Br1Ljbu5OSkVK4zVwaDSQlKUdyctaRkpL1NTU160hL\nUw61WjnS07OOjAzjBPI4zMzAwkI5LC2Vw8pKOaytsw5bW7CxUQ5bW7Czy/qaedjbK++XPichCoUk\nlUKi1WlZenQpF2MuAuDr4mswKdHGwobXA17Hx9EHVzvXp7+hRgMPHijH/fuGXx88gMTErK+J/9/e\nmYdFcaR//DvDfcklICIxETMe3HIoCAr6i1cUXRZJjCRq4hqXx2CexE1UQNeomxjkiBqNho1Z3KzZ\nYAA168bdmOBqgkTgMYqigiYqRECRS+SYo35/TLpneoZLHCCZeT/PU09XV1V3V78w/e16q7rqvlIo\nfi0oFCqx0gXGxoC1tVJgrK2FwcZGteWCtTW1lgiij5Co9BOMMYH7iltJkZuf6/uq7zHDY4bgGL9h\nfj2dVNlqaGxUCkRjoyrO7XPblhbd3tDDou7SEomEbi2RSHkvXODcY5y7TNfIZEBDgzL0tu5WVsCQ\nIUqRGTJEGNfcmpjovs4E8RuFREWH1NyvQdHPRThfcx5hj4UhfGS4ID9weCAu372MJx2ehIuViypD\nKlW1ItSFQjPe1KR8QPYHIpHKXWRlJXQhWVioAuduMjNTuaM49xTnqjI27vubPicyMpkySKWqVktH\nh8rlpu6Ka21VBXXX3YMHSnF9WJsxpmrB9QZzc5Xw9CRAZmbkiiP0GhIVHVJ2twxHrhwBwGApMkG4\n5ViBCyqwsQ5ejUGwu60ACr4CGj9X5j14oPvKiEQqt47mw83aWhlXdwNZWv46HnbqLRwzs0c/H2NK\nEWppUYoEt9V0AXJ/p+bmh2/lceJWW9tzWWNj1d+iM/ebpmvOwuLX8XchiF5CotITag8lWXMjrlSX\n4kptGR48aEScdajqjfb+ffg01eBgRyEglaJc8S3aGy/DDEb8qcx/CY8E91Zsa6sMXFxzS/0CSkQi\nVce+Qy9H0CkUwv4o9T4pzf6ppiZl+d4ikwH19crQG8RiVeuR6xPiWpLcy4Bmy5IL9PcnBoEBFxW5\nXI6MjAzk5uaipaUF4eHh2LBhA4YOHdpp+QsXLmDr1q0oKyuDi4sL4uPjsWDBgr5XoKpK+YNWd5mo\nu03U49xIqF/8/B0iGXYOKQADgxgiLGysEYiGA4CZ5s5wl1vBU+YgyOsWsVjVitAUC/V9zn1C9C9i\nscruPcGY8v+kJ+HhtlLpw9VFXeAeFjMzbfelpitT3aXJuTU1t1y/GEH0ggEXlZ07dyI3Nxfbtm2D\nnZ0dNm3ahFdeeQUHDx7UKnvv3j0sX74cc+fOxdatW/Hdd98hMTERQ4cORVhY2MNfPDsb+Oqrbouc\nNq3GVaMGXDduxuv3fWDPVA9xS2YMN7kVKo3uQwGGcuNGeMmEb7/RbU8oIyYmQjeHpguKEwrO5UE/\n2t8mnJvR2rp35dvbha62ztxwaq3fRxqVxw377m2rqCvEYuFQbvWh3dxQby6o96+p97N1Frgh49zw\ncS6QiP2mGVBR6ejoQFZWFpKSkjB58mQAQFpaGqZPn46SkhJMmDBBUD47OxvW1tZITEyEWCyGh4cH\nLl26hI8++qhvolJRAQBoEUlRKW6Bk8IcDkzokDprUovLxspRQteNmxAgdVL+4//ifphoxiAxYxhr\n8zhG2z8J2NgLfeFc3NSUfhiENtzDuIuWuRYymbK1zIkM13rm+obUW9Sa3xc9yrdC6igUqhb9QMGJ\ni6bYcGlcvLsgFmt/VKuezqX1FNRHL6rvd7flgvo+Fwe0y2kGrgzQ9/3utup10TEDKiqXL19GS0sL\ngoOD+bQRI0bAzc0NRUVFWqJSVFSEoKAgiNV8w8HBwdi0aZPWkN1eERuLz468jRNtVwBjI8QOCcF0\nxyCBi+CJhjO4XFcIGBvh2qj/Q4DfYsGQ0RndnJ4gdI6xscr1+TAwpmzlcALTVWhvV42g4+Ka24fp\nM9IV3Oi/9vaBv7YhYGICzJ0LzJql81MPqKhUV1cDAFxcXATpzs7OfJ5m+fHjx2uVbW1tRX19PRx6\n2/HK4eEBx/mLgIufAQAq3ccDfjGCIv4NrrCt98Xjdo/D3dYdENNYBuI3iEik6jt5FBhTPty54dzq\nsyiox9VnVtCcZaGjQzU8nJtxQT3O7XPx/vhWiRAilSq7AmbO1HmLZUCfmK2trRCLxTDR+FjM1NQU\n7Z28kbS1tcHU1FSrLKB0pfUFd1t3mBiZYLjNcAy11HZBjLQbiZF2I/t0boLQO0QiVR+IldXAXJMT\nMrlcKDRdbTUD9yGt+ge16nPQqcfVg1wu/BhXfc66rtLUt1wc6LwMd2/q8+CpH8sF9XTuGPW8zuJd\n7XNpmseZmSlbKf3gAhtQUTE3N4dCoYBMJoOxserSHR0dsOjkjcrc3FxLPLj9zsr3htEOo7Fj9g7+\nC3eCIH5lqAsZ8ZtjQJ+srq6uAIA7d+4I0mtra7VcYgAwbNiwTstaWlrCxsamT3UQi8QkKARBEP3E\ngLZUxo4dCysrK3z//feYP38+AKCyshJVVVUICgrSKh8QEICcnBxBp3xhYSEmTJgg6LzXRP6LT7az\nfhqCIAiic7hnpvwR+rUGVFRMTU3x3HPP4d1334W9vT0cHR2xadMmBAcHw8/PDx0dHWhsbIStrS1M\nTU0RExODzMxMbNy4EUuWLMF3332HL774Ah9++GG31+FaN4sXLx6I2yIIgtAr7ty5g5Ej+9a3LGJM\nvUen/5HJZNi+fTtyc3Mhk8n4L+odHBxQWFiIF154AVlZWZg4cSIA4Ny5c9iyZQuuXLmC4cOHIyEh\nAU8//XS312hra0NpaSmcnJxgZNTLr9oJgiAMHLlcjjt37sDLywvm5n2bVGrARYUgCILQX6jHmiAI\ngtAZJCoEQRCEziBRIQiCIHQGiQpBEAShMwxGVORyOVJTUxEWFgZ/f38kJCTg7t27g12tfuXu3bt4\n8803ERYWhsDAQLz00ku4evUqn3/69GnMnz8fPj4+mDdvHk6ePDmIte1/zp07h/Hjx6OwsJBPMxQb\nZGdnY+bMmfDx8UF0dDQKCgr4PEOwwYMHD7B582b+t7B8+XJU/DJrOaD/NtiwYQMSExMFaT3dc11d\nHVavXo3AwECEhIQgJSUFst4szc0MhPT0dDZ58mR2+vRpVlpayhYuXMieffbZwa5WvyGXy9kzzzzD\nYmNj2Q8//MDKy8tZQkICCwkJYffu3WPl5eXMy8uL7d69m1VUVLD09HTm6enJrl69OthV7xdaWlrY\nU089xSQSCTtz5gxjjBmMDXJycpinpyfLzs5mP/30E/vLX/7C/Pz82K1btwzGBuvXr2ezZs1iRUVF\nrKKigsXHx7OpU6eytrY2vbaBQqFgGRkZTCKRsPXr1/PpvbnnRYsWseeee46VlZWx/Px8NmnSJJaW\nltbjNQ1CVNrb25m/vz/7/PPP+bRbt24xiUTCiouLB7Fm/cfFixeZRCJhFRUVfFp7ezvz9fVlubm5\nLDk5mcXFxQmOiYuLY0lJSQNd1QGBu191UTEEGygUChYZGckyMjL4NLlczqKiotiRI0cMwgaMMRYc\nHMyysrL4/fLyciaRSFhpaane2uDmzZssLi6OTZw4kUVERAhEpad7LikpYRKJhN28eZPPz8nJYf7+\n/qy9vb3b6xqE+6undVz0EVdXV+zduxdPPPEEn8ZNddPY2IiioiKBPQBg4sSJemmPkydPIj8/H0lJ\nSYJ0Q7DB9evXUVVVhTlz5vBpYrEYhw8fxrx58wzCBgDg4OCAY8eOoa6uDh0dHTh06BBsbW3h7u6u\ntzYoKSmBq6srjh49ihEjRgjyerrnoqIiuLm5wd3dnc8PDg5GS0sLysrKur2uQYjKw67jog/Y29sj\nIiJCMEfagQMH0NbWhrCwMFRXVxuEPe7du4fExERs2bIFthprzhuCDX766ScAQFNTE1544QWEhIRg\n8eLFKCkpAWAYNgCAzZs3o7q6GqGhofDz88Nnn32Gffv2YciQIXprg/nz5+Pdd9+Fk5OTVl5P91xT\nUwNnZ2etfAC4fft2t9c1CFF52HVc9JETJ04gLS0Ny5Ytg4eHR5dr1eibPTZu3Ihp06ZhypQpWnmG\nYIP79+8DANauXYuFCxciMzMTTz75JJYsWYJr164ZhA0A4MaNGxg6dCj27duHgwcPIiwsDAkJCaiu\nrjYYG6jT0z23trbCzMxMkG9iYgKRSNSjXQxiWcOHXcdF38jJyUFycjLmzJmDP/3pTwAAMzMzSKVS\nQTl9s0dubi4uXbqEI0eOdJpvCDbgXqRWrlyJefPmAQDGjx+P4uJiHDx40CBscOvWLSQnJ+Mf//gH\n/Pz8AACpqamYM2cOPv74Y4OwgSY93XNna1lJpVIwxmBpadntuQ1CVNTXceHiQNfruOgTe/bsQUZG\nBuLi4pCUlMT3q7i6uqK2tlZQVt/skZOTg5qaGoSFhQEA2C/T3P3hD3/AggULDMIGnMtCIpHwaSKR\nCKNGjUJlZaVB2KC0tBRyuRxeXl58momJCcaNG4cbN24YhA006emehw0bpjXEmCvfk10Mwv2lvo4L\nR3fruOgLH374ITIyMpCQkIDk5GReUADlWjVnz54VlC8sLERgYOBAV7Pf2L59O/71r38hLy8PeXl5\nyMzMBABs2bIFq1evNggbeHp6wtLSEhcuXODTGGO4du0a3N3dDcIGw4YNAwBcuXKFT+Ns8PjjjxuE\nDTTp6Z4DAgJw69YtQf9JYWEhrKysMHbs2O5PrqPRa796UlJSWGhoKDt58iT/nYrmkDp9oqysjI0b\nN46tW7eO1dbWCkJLSwu7fPky8/T0ZO+99x6rqKhgGRkZzNvbWzAEWd+4ffu2YEixodggPT2dBQUF\nsePHj7Mff/yRbd26lXl7e7Nr164ZhA1kMhmLjY1lc+fOZWfPnmUVFRUsOTmZ+fn5scrKSoOwQVxc\nnGBIcU/3rFAoWGxsLHvmmWdYaWkp/53Kjh07eryWwYiKVCplb7/9NgsODmYTJkxgq1evZnV1dYNd\nrX4jNTWVSSSSTsP777/PGGPsm2++YXPmzGFeXl4sKiqKffvtt4Nc6/5FU1QYMwwbKBQK9sEHH7Cp\nU6cyLy8vtnDhQnb27Fk+3xBsUFdXxxITE1l4eDgLCAhgS5YsYZcuXeLz9d0GmqLCWM/3XFtby+Lj\n45mvry8LDQ1lqampTC6X93gtWk+FIAiC0BkG0adCEARBDAwkKgRBEITOIFEhCIIgdAaJCkEQBKEz\nSFQIgiAInUGiQhAEQegMEhVCL1i7di3GjBnTbXj++ecBAM8//zyWLl06qPVtaGjAtGnTcOPGjS7L\n5OTkYMyYMQM+W+6SJUtw7NixAb0moT8YxNxfhP4THx+PZ599lt/ftGkTjIyMBGuoWFtbA1DOXKw+\nZc1gsHnzZsyaNQsjR44c1Hp0xrp16/Diiy9i4sSJcHR0HOzqEL8xSFQIveCxxx7DY489xu9bW1vD\nyMiIn5VWndGjRw9k1bQ4f/48jh8/jv/973+DWo+uGDt2LHx9fbFnzx6thc0IoifI/UUYHJrurzFj\nxuCf//wn1qxZA39/f0yaNAm7du3C/fv3sW7dOgQEBGDy5MlISUmB+gQU9fX1SEpKQkhICHx8fLBo\n0SIUFxf3eP3MzEyEhobCwcGBT1MoFNi9ezciIiLg6+uL+Ph4NDY2ah376aefIjo6Gn5+fvDx8cHv\nfvc7HD9+HIDSpebt7Y333ntPcExzczN8fHzwySefAAC++OILREVFwcfHByEhIVizZg1qamoEx8yb\nNw+HDh3CvXv3ejYoQahBokIQALZt2wZ7e3vs3r0bkZGR2LlzJ2JiYmBhYYFdu3bhqaeeQmZmJv7z\nn/8AANrb27F06VLk5+fjtddew44dO2Bra4ulS5fi/PnzXV6npaUFX3/9NWbMmCFIT0lJwfvvv4+Y\nmBjs2rULdnZ2SE1NFZTJysrCW2+9hRkzZmDv3r3Yvn07jI2N8frrr6OmpgZ2dnaYNm0ajh49Kjju\n2LFjYIzh6aefRnFxMd544w3MmDEDmZmZWLt2Lc6cOYM1a9YIjomIiIBcLsdXX331KGYlDBByfxEE\nlFPEJyYmAlC6f3JycuDo6IgNGzYAACZNmoSjR4/i3LlzmDlzJg4fPowrV64gOzsb3t7eAIApU6Yg\nJiYG6enp2L9/f6fXKSoqglQqhY+PD5/W1NSEAwcO4MUXX8SqVasAAOHh4aitrcWpU6f4cpWVlVi+\nfDlWrlzJp7m5uSE6OholJSWYPXs2fv/73+PLL79EcXExAgICAAB5eXmIjIyEnZ0diouLYW5ujhUr\nVvAr/9nZ2eHChQtgjPF9TZaWlvDw8EBhYSFiY2N1YmPCMCBRIQhA8JC3t7eHkZGRIE0kEsHW1hZN\nTU0AgIKCAri4uGDcuHGQyWR8ucjISOzduxcdHR1ay7UCSmEAgBEjRvBp586dg1QqxfTp0wVlZ8+e\nLRCV9evXA1CK0PXr13Hjxg0UFhYCAL+KX1hYGIYNG4YjR44gICAAN2/eRElJCfbu3QsACAoKQnp6\nOubOnYuZM2di6tSpCAsLw9SpU7Xq6ubmhqqqqt6YjyB4SFQIAoCVlZVWWnfLpjY0NKC6uhqenp6d\n5tfX13e6Ql5zczMACJaq5fpO1PtYAMDJyUmwf/PmTWzYsAEFBQUwMTHBqFGj+AWTuL4esViMBQsW\n4NNPP0ViYiLy8vLg5OSE8PBwAIC/vz/27duHjz/+GPv378e+ffswdOhQrFy5kh9yzWFhYcHXlyB6\nC4kKQfQBGxsbeHh4YNu2bZ3m29vbd5ve3NyMIUOGCNLu3r0rGMHW0NDAxxUKBVasWAEzMzMcOnQI\n48aNg7GxMSoqKnD48GHBNaKjo/HBBx+goKAA//73vxEVFQUjIyM+Pzw8HOHh4WhtbcWZM2eQlZWF\nLVu2wN/fX7DkblNTU5f3QRBdQR31BNEHgoKC8PPPP8PZ2Rne3t58OHHiBA4cOAATE5NOjxs+fDgA\nCD5o9Pf3h7m5Ob788ktB2W+++YaP19fX48cff0RsbCy8vb1hbKx8H+SGJauPShs5ciSCgoKQmZmJ\n69evIzo6ms9LSUlBTEwMGGOwsLBAZGQk3nzzTa06cfuurq4PbRvCsKGWCkH0gejoaPz973/HsmXL\n8PLLL8PFxQX5+fnYv38/Vq1a1eXHlYGBgTA3N0dxcTEkEgkApestPj4eGRkZMDc3R3BwMPLz8wWi\n4ujoCDc3N2RlZcHZ2RnW1tY4deoUsrKyAAAPHjzQqt+6devg7e0t+C4nNDQUf/3rX7F27VpERUVB\nKpUiMzMT9vb2CA4O5ss1NzejvLwcL730ks5sRhgG1FIhiD5gZWWFTz75BL6+vnjnnXewYsUKnDp1\nCsnJyXjllVe6PM7CwgJTpkzR+vDx5Zdfxvr163Hs2DH88Y9/xNWrV/kWBMfu3bvh7OyMN954A6++\n+ip++OEH7NmzB6NGjdL6PiYiIgIABK0UAJg8eTLS0tJQXl6OVatW4bXXXoOlpSWysrJ4dxwAnD59\nGiYmJvx5CKK30HLCBDHAnD9/HosWLcLXX3/daWe+LsjLy8PGjRtx+vRp2NjYPPTxy5Ytw+jRo/lh\n1gTRW6ilQhADjI+PD6ZPn46PPvpI5+f+73//i7S0NGzduhULFy7sk6BcvHgRly5dwooVK3ReP0L/\nIVEhiEHgz3/+M44fP97tLMV9oaqqCn/729/g5+eHV199tU/neOedd5CcnKw1pJkgegO5vwiCIAid\nQS0VgiAIQmeQqBAEQRA6g0SFIAiC0BkkKgRBEITOIFEhCIIgdAaJCkEQBKEz/h/8jwD5eWsMjAAA\nAABJRU5ErkJggg==\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": 10, + "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": 11, + "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": 12, + "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": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "infected_sweep = sweep_beta(beta_array, gamma)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEPCAYAAABRHfM8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcU9f/P/BXEhIIew9BsaIBFRkiqFW0ivqxw1pHP221\nztq66qjW1Y9ascMvSl3YaqWtFfWntnxqP2q17r0RHFgFRWUje5OEJOf3B3IlBjQoSRjv5+PhA3Jy\nk/vOBe+bc889581jjDEQQgghz8E3dACEEEKaBkoYhBBCtEIJgxBCiFYoYRBCCNGKkaED0AWpVIr4\n+Hg4ODhAIBAYOhxCCGkSlEolcnJy4O3tDRMTE43nm2XCiI+Px+jRow0dBiGENEk7duxAt27dNNqb\nZcJwcHAAUPWhnZ2dDRwNIYQ0DVlZWRg9ejR3Dn1as0wY1ZehnJ2d4ebmZuBoCCGk8aieesfj8erc\npq5L+c0yYRBCSEugUjFI5QrI5EpI5UpI5QpIZUpUyBWQyRVVbbKnvsoVEAj46OHtDJ/2tfck6kIJ\ngxBCDIwxBoVS9fjE/vjE//jkL336xC9/8lUmV77Q/pQqJeKT8ihhEEJIY8EYQ5lUgdJyOUrK5Sgp\nr0RpuRxlUgWXAGRyBSpkCihV+lulyURkhK6ejvV+HSUMQgh5QfJKJUrK5Sgtr1RLCCXllSitkKO0\nohIqHSYCHo8HkZAPscgIxiIBTERGEBsLYCwygti4uq2qveZzQqMXm4JHCYMQQmqhVDGUVVSq9w4q\naiSEcjlklS92Sag2Aj7v8UneqOokb2xU42T/+Kux+ldjoQB8ft2D1w2NEgYhpMVhjEEmV3I9AY3e\nwePLRg2xmLfY2AjmpkJYmIpgIRbB3FQIM7EQYmOjGid/AYwE/GfeudQYUMIghDRr5dJK5BVJkVNY\ngbzCCuQVS1FUIkOlUvXS720k4HPJwFz8+Kvpk6/mYtELX/5pjChhEEKaBaWKobBEitzCCuQWSZH3\n+Gu5tPKF39PMRKiWAKp7CNWPxcZGjb5X0JAoYRBCmhypTFHVYyiqQG6hFHlFFcgvltbrTiOhEV+t\nR6DWOxALYS4WQiBoPr2DhkAJgxDSaKlUDIWlMuQ+lRxKK7TvNRgJ+LCzMoG9tRj2VmLYWZvA1sIE\nxiJBi+odNARKGISQRkEqVyCvSKqWHPKLpVDUY6zBXCyEg7UYdjWSg5WZsV7vJGrOKGEQQvSKsape\nQ16hFLlFFdxYQ0m5XOv3EPB5sLMSw97a5PFXMeysTGAiolOaLtHRJc3G3r178f333yMzMxNeXl5Y\nvHgxfHx86tz+1q1bWLVqFeLj42FiYoK+ffti3rx5sLa2BgCUlZUhICBA49bKlStXYujQoTr9LM1N\nWUUlkrOKkZxVgtRHJZDXY/6CuViokRyszanXYAiUMEizcP78eXzxxRdYsmQJunXrhi1btuCjjz7C\noUOHYGtrq7H9o0ePMGHCBAwaNAhLlixBYWEhli1bhtmzZ+PXX38FANy7dw8AcPToUbViMpaWlnr5\nTE2ZSsXwKL+8KklkFiOnsOK5rxHwebC1NNFIDmJjOk01FvSTIM3Czz//jLfeegvvvfceAGD58uW4\nePEifvvtN0yZMkVj+4MHD0IkEiE0NJRbyvnLL7/E6NGjkZGRgVatWiExMREuLi5o3bq1Xj9LU1Uu\nrUTqoxI8zKzqRUjlijq3FRsb1RhrqBqQtrYwgYB6DY0aJYwmLDc3F6GhoTh37hxMTU0xfvx47N69\nG1OnTsXw4cMhk8mwevVqHD58GDk5OTA3N0e/fv2wdOlSiMVi/PHHH9i8eTPGjBmDyMhIFBQU4LXX\nXsMXX3yBlStX4tixY7CyssLs2bMxbNgwAMCYMWPg6+uLzMxMHDt2DObm5pg5cybatWuH5cuXIzk5\nGZ06dUJYWBjatGkDALh06RIiIiJw69YtVFZWwsPDA3PnzkWfPn1q/Vz9+/dHenp6rc9FRUWhe/fu\nam0qlQqxsbFYsmQJ18bn8xEYGIiYmJg69+Ht7a227n/1HTPFxcVo1aoV7t69i3bt2mn502h5GGPI\nKajAw8e9iOyCijpnRvN5PLRyMIe7swXcXSxhY2FMdyg1QZQwaohLyMblf7JQqXj5GaD1JTTiI6iT\nM/y1XEFSpVJh8uTJEAgE2Lp1KxQKBZYtW4bU1FRum7CwMJw9exarVq2Cs7Mzbty4gYULF8LT0xPj\nx48HAKSlpeHYsWPYvHkzMjMzMW3aNFy8eBHTpk3D9OnT8csvv2Dp0qXo378/rKysAAC//vor5syZ\ng9mzZ+Onn37C8uXL8corr2DJkiUQi8WYNWsWVq9ejbVr1yIzMxMff/wxJkyYgBUrVqCsrAxr167F\nggULcOrUKYhEIo3PFh0dDaWy9mvc1THUVFxcjPLycjg5Oam1Ozo64ubNm7W+T5s2bbiEVi0yMhJO\nTk7o0KEDAODu3buQSqUYM2YMkpKS0KZNG0ydOhV9+/at46fS/EnlCqQ+KkFyZgmSs4pRIau7F2Eu\nFqKNsyXcnS3Q2skCImHtRXlI00EJo4ZriTkGSRYAUKlQ4VpijtYJ4/Lly4iPj8fRo0e5SyarVq3C\nkCFDuG18fX3x5ptvIiAgAADg5uaG//f//h8SExOf7LeyEkuXLkXbtm0hkUjg5eUFsViMcePGAQAm\nTJiA33//HcnJydwAsre3NyZOnAgA+PDDD7Fr1y6MHz8eQUFBAIDXX38dJ0+e5N5/1qxZmDhxIvcX\n5fjx4zFu3Djk5eXBxcVF47PVNubwLFKpFABgbGys1i4UCiGTybR6j/DwcJw8eRLff/891+u4e/cu\nzM3NsXjxYtjY2GD//v2YPHkytmzZgp49e9YrxqaKMYa8IunjsYgSZOWVQVVHL4LH48HZ1hTuLpZw\nd7aEvbUJ9SKaGUoYNfhJHAzaw/CTaF/M5J9//oGdnZ3a9XWJRAILCwvu8dChQ3H27FmsXLkSDx8+\nxL1795CSkqJRtrbmX9qmpqZqz1efhOXyJ7c8uru7c9+LxWKN9zAxMeG2b9OmDd555x1s3boVCQkJ\nSE5Oxu3btwGgzl7Em2++iYyMjFqfi4yM1ChOX1uMQFWyqo6vLkqlEsuXL8fu3buxbNkyhISEcM8d\nOXJE7TN27twZd+/exdatW5t1wpBXKpGWXcoNWD9rkpzY2AjuzhZo42yJNk4WMKEB6maNfro1+Hs6\nav0XvqEJBAKoVM9ObP/5z39w7NgxDBs2DIMGDcJnn32G5cuXa7wPn6++/MHTj59mZKT5a1PXX5KJ\niYkYPXo0fH190bNnT7zxxhtQKBS1DkRX27x5MxSK2i91PH3ZCQCsra1hamqK7Oxstfbs7Oxat68m\nk8kwa9Ys7rJdzd4ZgFqTjUQiwblz5+p8z6aIMYbCEhmSs4rxMLMEGbmlz6zh4GRrCndnS7i7WMLR\nRky9iBaEEkYT5enpiYKCAqSkpHB/3d+/fx8lJSUAgIKCAkRHRyMiIgKDBg0CACgUCqSmpqJVq1Z6\ni3P37t1wcXHBTz/9xLXt2rULAOocIHV1da3XPng8Hvz9/XHlyhW88847AKrGeK5cuYJ///vftb5G\npVJh1qxZuHjxIjZu3Ijg4GC153NzczF48GB8++233PEDgPj4eLRv375e8TVGlQoVMnJK8TCzGMlZ\nxSguq3vSnLFIgDZOVYPVbZwsYGoi1GOkpDGhhNFE9ejRA97e3pg/fz4WL14MlUrF9R54PB7Mzc1h\nbm6OY8eOwcvLC6Wlpfjxxx+RmZmpcelGl5ydnZGeno5z586hbdu2iImJwZo1awBoXkJ6GePHj8fU\nqVPRqVMn9OjRA1u2bEFJSQlGjhzJbZOTkwNTU1OYmZlh586dOHHiBL7++mt4eXkhJyeH287a2hr2\n9vbw9/dHWFgYLCws4OTkhOjoaMTFxeGPP/5osLj1iTGGh5nFiE/KQ3pO6TOX3LC3Fj/uRVjA2daM\nJskRAJQwmrQNGzYgNDQUo0ePhoWFBT755BPEx8dDKBRCKBRi7dq1CAsLw1tvvQVbW1v06dMHEydO\nxNGjR/UW49ixY5GUlITPPvsMSqUSHh4eCA0NxaJFi3Dz5k14eHg0yH769OmD5cuX44cffkBYWBg6\ndeqEX375RW0AvXfv3vj0008xY8YM7Nu3DwCwePFijffasWMHunXrhu+++w6rV6/G/PnzUVhYiM6d\nO2PLli3cXVRNhVKpQmJKIWITslFQIq11G6ERH22cqsYi3F0sYS6mXgTRxGMNUVKqkUlLS0NISAiO\nHTumMcDbXOTn5+PGjRsIDg7m7urJyclB7969uRMeadnklUrcup+H63dzah24trU0gbuzJdo4W6CV\nvRkt5U2ee+6kHkYTJRAIMGvWLIwfPx4jR45EWVkZ1q1bB3d3d/j6+ho6PGJA5dJKXL+bi/j7uZDJ\n1e9EEwkF6NzODt7t7GBlblzHOxBSO0oYTZSVlRU2bdqEtWvXYuvWrRAKhejRowd++eUXCIV0OaEl\nKiqVIS4hG7cf5msUEjI1EcK3gz06t7OjFV3JC6PfnCasZ8+ezXo+ANFOdkE54hKycS+tSOPOM2tz\nY/h7OsLT3QZGdMmJvCRKGIQ0QYwxpGWXIjYhG6mPSjSed7QxRVcvR7RrZUV3OJEGQwmDkCZEpWJI\nSi9EXEIOsgvKNZ5v42QBf09HuDma04Q60uAoYRDSBCiUKtx5mI9riTkoLFVfH4vH46G9mzW6ejrC\nwebZS6EQ8jIoYRDSiEnlCsQn5eHGvVyUS9VvjTUS8OHV1hb+Ege644noBSUMQhqh0opKXL+bg1v3\n8zTKmRqLBOjiYQ+f9va0TAfRK0oYhDQiBcVSxCVm405ygcYCgOZiIfwkDuj0ih3VliAGQQmDkEYg\nK68MsQnZeJBRrHFrrK2lCfwljpC0sabZ2MSg9J4wlEol1q5diz179qCsrAzBwcFYunQp7O3ta93+\nwoUL+O6773Dv3j3Y29vjvffew6RJk+gOENLkMcaQklWCq3eykZFbqvG8i50Zuno5oq2LJf2+k0ZB\n7wkjIiICe/bsQVhYGKytrREaGooZM2Zg586dGtsmJydjypQp+Pjjj7FmzRrcunULCxcuhKmpKUaP\nHq3v0AlpECoVw93UAsQl5iC3sELj+VdcLOHv5YhW9uYGiI6Quuk1YcjlckRFRWHx4sXo1asXAGD1\n6tUICQlBbGwsunbtqrb9mTNnYGJigk8//RQA0Lp1axw8eBBnzpyhhEGapMSUAlyMz9SoP8Hn8SBp\nYw1/T0fYWdGtsaRx0usF0Tt37qCsrIyr/QxU1Zl2dXVFTEyMxva2trYoLCzE/v37oVKpkJiYiJiY\nGHh7e+szbEJemkKpwomrqTh8KVktWQgFfPh2cMCYNzpiQJA7JQvSqOm1h5GVlQVAs8ymo6Mj91xN\ngwYNwsiRI/H5559j/vz5UCqVeP311zFt2jS9xEtIQyguk+PvCw/VZmaLjY3Qpb09fDzsqQ42aTL0\n+ptaUVEBPp+vsZqqSCSCTCbT2L64uBjp6emYNGkS3njjDSQmJuLbb7/Fhg0bMHPmTH2FTcgLS84s\nxuHLyWrLjHdobYN+AW50ayxpcvSaMExMTKBSqaBQKGBk9GTXcrkcYrFmVzw8PBwCgQCff/45AKBT\np05QKBRYtmwZxowZAxsbG73FTkh9qFQMV/7JwpXbj7g2Pp+H3r6t0MXDnu56Ik2SXscwXFxcAECt\nfjIAZGdna1ymAoDr169rjFf4+vqisrISmZmZuguUkJdQLq3EvrP31ZKFuViI4a+1h097B0oWpMnS\na8Lw8vKCmZkZLl++zLWlpaUhPT0dgYGBGts7OzsjISFBre3u3bvg8/lo06aNzuMlpL6y8srw29FE\ntSXHWztZ4N8DJHC2MzNgZIS8PL1ekhKJRBg1ahRWrlwJGxsb2NnZITQ0FEFBQfDz84NcLkdRURGs\nrKwgEokwduxYTJ48GT/88AOGDBmCe/fuYcWKFRg1ahTMzekeddJ4MMZwMykXZ69nqC3p0a2jE4I6\nOVNNCtIs6P32jNmzZ0OhUGDevHlQKBTcTG8AiIuLw9ixYxEVFYXu3bujb9++2LBhA3744QdERkZy\nM70nT56s77AJqVOlQonjMWm4m1rAtRmLBBgY5I62LpYGjIyQhsVjTy9c0wykpaUhJCQEx44dg5ub\nm6HDIc1YfrEUf194iPxiKdfmaGOKwT3bwtJMZLjACHkBzzt30g3ghLygu6kFOB6TikqFimvr3M4O\nwX6uVD+bNEt1JowlS5bU642++uqrlw6GkKZAqVTh/M1MXL/75G4/IwEfr3V1g1dbWwNGRohu1Zkw\nzp07p/Y4OzsbCoUCrVq1goODAwoLC5GamgqRSAQvLy+dB0pIY1BaLsffF5ORlVfGtVmZG+P1nm1h\nb03LepDmrc6Ecfz4ce77ffv2ITw8HBEREfDx8eHa7927h2nTpuH111/XbZSENAKpj0pw+FIyKmQK\nrq2dqxX6d2sNExFd3SXNn1YXWtesWYM5c+aoJQsAaN++PWbPno2ffvpJJ8ER0hgwxhBz+xH2nrnP\nJQs+j4dXfVrh9Z5tKVmQFkOr3/SCggJYWtZ+e6BQKER5eXmtzxHS1EnlChy9nIKHmcVcm6mJEP/q\n4Q5XB5oLRFoWrXoYfn5+2LhxI4qLi9Xa8/LyEBERge7du+skOEIMKbugHL8dTVRLFq3szfHeAAkl\nC9IiadXDWLBgAcaMGYN+/fqha9eusLW1RW5uLmJjY2FhYYEffvhB13ESojeMMfzzIB+n49KgrDFr\n29/TET28XSCgWdukhdIqYXh5eWH//v349ddfERsbi5SUFNjY2GD8+PEYN24crK2tdR0nIXqhUKpw\nKjYNtx/mc20ioQAh3VrDw41+z0nLpvVonZOTExYsWKDLWAgxqMISGf6++FCtzradlRiDe7rDxsLE\ngJER0jhonTBUKhUOHDiAc+fOIScnB4sXL8a1a9fg7e2N9u3b6zJGQnTuQUYRjl5OgazySaEjL3cb\n9O3aGkIjmrVNCKBlwigpKcGkSZNw48YNtGrVChkZGSgrK8O+ffuwfPlybN++HZ06ddJ1rIQ0OJWK\n4WJ8JmITsrk2AZ+HYD9XdG5nR7UrCKlBqz+dVq5ciYyMDOzZsweHDh1C9XqF69atQ4cOHbB27Vqd\nBkmILpRLK/G/00lqycLSTIQR/TrAm6riEaJBq4Rx5MgRzJkzB15eXmr/iczNzfHxxx/j+vXrOguQ\nEF3IyC3F7iOJSM8p5drcnS3x7xAJHG1NDRgZIY2XVpekpFIpbG1rX1TN2NgYcrm8QYMiRFcYY7h+\nNwfnb2RC9binzOPxENTJCd06OlGvgpBn0KqH4e3tjZ07d9b63IEDB2j8gjQJKhXD4UspVVXxHicL\nE5ERhvR+BYGdnClZEPIcWvUwZs2ahQkTJmD48OHo27cveDweDh48iI0bN+LEiRO0lhRpEmJuP1Kr\niudkW1XoyMKUCh0Rog2tehiBgYHYsmULRCIRfvzxRzDG8PPPPyMjIwMbN25Ez549dR0nIS8l9VEJ\nrtx+xD3u9Iodhr/WnpIFIfWg9TyMwMBA7Nq1C1KpFEVFRTA3N4eZmRmAqjkafD7dq04ap3JpJY5c\nTuHu7nNzNMdrXd3ApyU+CKkXrc7yISEhuHPnDgDAxMQETk5OXLK4ceMGXn31Vd1FSMhLqB63KJdW\nAgDExkYYGOROyYKQF1BnD2P//v1QKKrW/k9PT8eRI0e4pFHThQsX6C4p0mhdvfMIadklAKruhhrU\n3R1mYqGBoyKkaaozYdy6dQtbtmwBUPUf7fvvv691Ox6Ph4kTJ+omOkJeQnpOKS7/82TcIsDLEa2d\nLAwYESFNW50JY86cORg/fjwYY3jttdewceNGjdtn+Xw+zM3NIRZTLWPSuJRLK3H4YjI3btHK3hxB\nnZwNHBUhTVudCUMoFMLJyQkAcOzYMTg6OiIrKwutW7cGAOTn5+PBgwcICAjQT6SEaIkxhqOXU1BW\nY9xiUA8atyDkZWk16C0Wi/Hhhx/io48+4tpu3ryJ0aNHY/z48SgpKdFZgITU19U72Uh59OR3ckBQ\nG5jTuAUhL02rhBEWFoacnByEhoZybX369MH27duRlpaG1atX6yxAQuojI6cUl25lcY8DvBzh7lx7\nPXpCSP1olTDOnDmD+fPnq03Q4/F46NatGz777DMcPXpUZwESoq0KmQKHLz0Zt3CxM0P3zi4GjoqQ\n5kOrhCGTyWBsbFzrc2ZmZnRJihhc9bhFaUXVuIWJyAj/onELQhqUVgnD19cXUVFR3LyMakqlEtu3\nb0eXLl10Ehwh2opLyEFyVjH3eEBQG5jTsh+ENCitlgaZOXMmxowZg4EDB6JPnz6ws7NDfn4+zpw5\ng5ycHGzdulXXcRJSp8zcMlyMz+Qe+3s6oq0LjVsQ0tC0Shh+fn7YvXs3Nm3ahGPHjqGwsBDm5uYI\nCAjA+vXr0blzZ13HSUitpDIFDl18yC1X7mxnhh7eNG5BiC5ovfhgp06dsH79el3GQki9MMZw7MqT\ncQtjkQD/6uEOAY1bEKIT9VpiNi4uDhs2bMCXX36JjIwMnDlzBnl5efXaoVKpxHfffYfevXvD398f\nM2fORG5ubp3bZ2VlYebMmfD390fPnj2xbNkyVFRU1GufpHm6lpiDB5k1xi0C29By5YTokFYJQy6X\nY+bMmfjggw/w448/4rfffkNBQQF+/vlnDB06FCkpKVrvMCIiAnv27EFYWBi2b9+OrKwszJgxo879\nTpgwAYWFhdi5cyfWrFmDkydPYtWqVVrvjzRPWXlluHDzybiFn8QBr7SyMmBEhDR/WiWMtWvX4ty5\nc/jhhx8QExPD3ef+9ddfw8LCAmvWrNFqZ3K5HFFRUZgzZw569eqFzp07Y/Xq1YiNjUVsbKzG9vv2\n7UNOTg4iIiLg5eWFHj16YMaMGbhx40Y9PiJpbqTyqvkW1eMWTram6EnjFoTonFYJY9++fZgzZw76\n9+8PI6Mnwx5ubm749NNPcfnyZa12dufOHZSVlSEoKEjtPVxdXRETE6Ox/dmzZ/Hqq6/CyurJX44j\nRoxAdHS0VvsjzU/VuEUqisuqltQ3FgowqLs7BAIq4EWIrmn1v6yoqAju7u61PmdjY4PS0lKtdpaV\nVbVkQ/WihtWqFzZ82sOHD+Hq6oq1a9eif//+CAkJQVhYGGQymVb7I83Pjbu5eJBRxD3u3601rMxr\nn1RKCGlYWiWM9u3b46+//qr1udOnT8PDw0OrnVVUVIDP50MoVF8ITiQS1ZoESktLER0djdTUVKxb\ntw6LFi3CgQMHsGTJEq32R5qXR/nlOHczg3vs294BHm7WBoyIkJZFq9tqp06dihkzZqCoqAj9+vUD\nj8dDbGws9u7dix07dmDlypVa7czExAQqlQoKhULt0pZcLq+1poaRkRGsrKywcuVKCAQCdOnSBQqF\nArNmzcKiRYtgY2Oj5cckTZ1U/ni+hapq3MLRxhSv+tC4BSH6pFXCGDhwIFatWoXvvvsOx48fBwB8\n8803sLW1xdKlS/HGG29otTMXl6r/4Dk5Odz3AJCdna1xmQqounRlbGwMgUDAtbVv3x5AVdlYShgt\nA2MMJ2KejFuIhI/nW9C4BSF6VWfCiIyMxNtvv82dyIcMGYIhQ4bg/v37KCwshIWFBTw8PMDna/+f\n1svLC2ZmZrh8+TKGDh0KAEhLS0N6ejoCAwM1tu/WrRt+++03VFZWcpexEhMTIRAI4OrqWq8PSpqu\nm0m5SEqncQtCDK3Os/3333+PtLQ0AEDHjh25W1nbtWuHrl27okOHDvVKFkDVWMWoUaOwcuVKnD59\nGrdu3cKcOXMQFBQEPz8/yOVy5OTkQC6v+kvy/fffh0wmw4IFC5CUlITz589j1apVGDp0KPUuWojs\ngnKcu/5k3KKLhz3a07gFIQZRZw/D3NwcW7ZsQUpKChhjOHnyJO7fv1/nG73zzjta7XD27NlQKBSY\nN28eFAoFgoODsXTpUgBVM8nHjh2LqKgodO/eHfb29tixYwdWrFiB4cOHw9TUFG+//Tbmzp1bz49J\nmiJ5pRKHLiZD+XjcwsFajF6+rQwcFSEtF49Vz8J7yrZt2/B///d/UCqV4PF4qGOzqjfh8XD79m2d\nBVlfaWlpCAkJwbFjx+Dm5mbocMgLYIzh8KVk3E0tBAAIjfh4b4AnrC3oUhQhuvK8c2edPYwxY8Zg\n5MiRKC4uRt++fbFp0yZ07NhRp8ESUu3W/TwuWQBAv4DWlCwIMbBn3iUlFoshFouxYsUK+Pr60rgB\n0YucggqcuZbOPfZuZwdJG/rdI8TQtLqtdtiwYSgtLcXx48dRUVEBlUqlsc2QIUMaPDjS8lSNWzzk\nxi3srcXo7Ud3xBHSGGiVMM6ePYuZM2eioqKi1rEMHo9HCYO8NMYYTlxNQ2Fp1ax/oREf/+rhDiOa\nb0FIo6BVwggPD8crr7yCRYsWwcnJqd630xKijX8e5ONuagH3+LWubrCxMDFgRISQmrRKGElJSfjh\nhx/QrVs3XcdDWqjcQvVxi06v2MLT3daAERFCnqZVV6FVq1Zar0hLSH1VKpT4++JDKJRVY2N2liYI\n9qPboQlpbLRKGB9//DG+//57ZGRkPH9jQuqBMYZTsWkoLHk8biHg418920JoRJc9CWlstLok9fff\nf+PRo0cICQmBg4NDrSvLHjp0qMGDI83fnYcFuJP8ZNyib4AbbC1p3IKQxkirhOHg4IABAwboOhbS\nwuQVVeBUXBr3uGNbW3jRuAUhjZZWCWPFihW6joO0MJWKqnWiqsctbC1N0Mef5lsQ0pjVmTAePXoE\nOzs7GBkZ4dGjR899o9rqWRBSl9Nx6cgvlgIAjARV8y2ERoLnvIoQYkh1JozXXnsNu3fvho+PD/r2\n7Qsej/fMN2pMiw+Sxu1Ocj5uP8znHvfxd4Wdlea4GCGkcakzYXz77bdo3bo19/3zEgYh2sgvluLU\n1SfjFp5tbNCxLY1bENIU1Jkwhg0bxn0/fPhwvQRDmjeFUoVDFx6i8vG4hbWFMV4LcKM/RghpIuhm\nd6I38UmY40KCAAAgAElEQVS5yKsxbjG4R1satyCkCaGEQfRCqWK4lpjDPe7p7QJ7axq3IKQpoYRB\n9CIprRClFZUAALGxETp72Bk4IkJIfVHCIDrHmHrvokt7e1qynJAmiP7XEp3LyC1DdkE5gKqxC+92\n1LsgpCnSaqY3Ywx//PEHTp48ifLyco0iSjweDz///LNOAiRN37WEbO57L3cbmJoIDRgNIeRFaZUw\nVq9ejcjISLi5ucHZ2ZlugyRaKyiW4kFmMffYV+JgwGgIIS9Dq4SxZ88eTJgwAQsWLNB1PKSZuXb3\nydjFKy6WVEGPkCZMqzGM0tJS9OvXT9exkGamXFqJhBpLl/t5OhowGkLIy9IqYfj7+yM2NlbXsZBm\nJv5+HrcaraONKVrZmxk4IkLIy9DqktSUKVMwd+5cKBQKdO3aFSYmmpcVunbt2uDBkaZLoVTh5r1c\n7rGfxIHGvghp4rRKGOPGjQMAbNiwAQDU/uMzxsDj8Wi1WqImIbkAFTIFAMDCVIT2btYGjogQ8rK0\nShhRUVG6joM0I09P1PPtYA8+n3oXhDR1WiWMoKAgXcdBmpGHmcUoKKlaZFAkFKDTKzRRj5DmQKuE\nAQBJSUmIiIjA5cuXUVJSAhsbG3Tr1g3Tpk1D+/btdRkjaWJq9i46v2IHkZBWpCWkOdAqYSQkJOCD\nDz6AWCxGSEgI7OzskJOTgxMnTuDEiRPYtWsXPD09dR0raQKyC8qRnlMKAODzePDpYG/giAghDUWr\nhBEeHo527dohKioKpqamXHt5eTnGjx+PtWvXYuPGjVrtUKlUYu3atdizZw/KysoQHByMpUuXwt7+\n+SeWyZMno7y8HNu2bdNqX0T/avYuPNysYWEqMmA0hJCGpNU8jJiYGEyZMkUtWQCAqakpJk2ahJiY\nGK13GBERgT179iAsLAzbt29HVlYWZsyY8dzX7dq1CydPntR6P0T/SsvluJdayD32p2VACGlWtEoY\nYnHdhW54PB6USqVWO5PL5YiKisKcOXPQq1cvdO7cGatXr0ZsbOwzJwYmJydjzZo18Pf312o/xDCu\n38uF6vHClK4O5nC0NX3OKwghTYlWCcPPzw+RkZGQyWRq7VKpFD/99JPWJ/I7d+6grKxM7a4rNzc3\nuLq61tlLUSqVWLBgASZNmgQPDw+t9kP0T16pxK37edxjP+pdENLsaDWGMXfuXIwcORIhISHo378/\n7O3tkZubi+PHj6OsrAw7duzQamdZWVkAACcnJ7V2R0dH7rmn/fjjjwCAjz76CEuWLNFqP0T//nmQ\nB3llVU/T2sIYbV0sDRwRIaShaZUwPDw8sGvXLnz//fc4duwYioqKYGlpicDAQEyfPh0SiUSrnVVU\nVIDP50MoVK+HIBKJNHovABAfH48tW7YgOjoafD7VemqsVCqG63efLAPiL3GkZUAIaYa0nofh6emJ\n9evXv9TOTExMoFKpoFAoYGT0ZNdyuVxjnEQmk2H+/PmYPXs23N3dX2q/RLfupRWipFwOoKpet6e7\njYEjIoToQp0JY9++fQgODoa1tTX27dv33DcaMmTIc7dxcXEBAOTk5HDfA0B2drbGZarr168jKSkJ\n4eHhCA8PB1CVWFQqFfz9/fHXX3+hVatWz90n0S2q101Iy1Fnwpg3bx5+++03WFtbY968ec98Ex6P\np1XC8PLygpmZGS5fvoyhQ4cCANLS0pCeno7AwEC1bX18fHD48GG1ttWrVyMjIwPh4eFwdKTaCo1B\nJtXrJqTFqDNhHDt2DA4ODtz3DUEkEmHUqFFYuXIlbGxsYGdnh9DQUAQFBcHPzw9yuRxFRUWwsrKC\niYmJxqUoc3PzWtuJ4cTV6F14Ur1uQpq1Oq8duLq6QiSqmqV75coVmJqawtXVVeOfSCTCoUOHtN7h\n7NmzMWTIEMybNw9jx45Fq1atsG7dOgBAXFwcevfujbi4uJf8WEQfCkqkeJBRxD3260C30hLSnPEY\nezzT6hk6duyI3bt3w8fHR+O506dPY/r06bh586ZOAnwRaWlpCAkJwbFjx+Dm5mbocJqtk1dTEf94\n7sUrLpZ4s3c7A0dECHkZzzt31nlJavLkybh37x6AqoHN6dOncz2OmvLy8tCmTZsGDJk0BeXSStyh\net2EtCh1JoypU6ciOjoaABAdHY0uXbrA1tZWbRs+nw9LS0sMGzZMt1GSRqdmvW4HGzHV6yakBagz\nYfj5+cHPzw9A1fIc06ZNQ+vWrfUWGGm8nq7XTRP1CGkZtLphfsWKFbh//z7CwsK4ths3bmDChAm4\nePGizoIjjVPNet3mYiE8qF43IS2CVgnjwIEDmDJlCpKSkrg2sVgMlUqFjz76CKdPn9ZZgKRxYYzh\n+t2a9bodIKB63YS0CFoljE2bNmH06NHYvHkz19ahQwds3boV77///ksvGUKajuSsEuQX16jXTRP1\nCGkxtEoYKSkpGDBgQK3PDRgwQK3nQZq3a4nZ3PedXrGFMdXrJqTF0Cph2NnZ4datW7U+l5CQACsr\nqwYNijROOQUVSMt+Uq/blybqEdKiaLVa7ZAhQ7BhwwaYmppi4MCBsLOzQ35+Po4fP46IiAiMGjVK\n13GSRqBm74LqdRPS8miVMKZPn4779+8jNDQUy5cv59oZYxg0aBBmzpypswBJ41BaLsddqtdNSIum\nVcIQCoVYv349EhMTcfXqVRQVFcHCwgIBAQHw8vLSdYykEaB63YQQrQsoAYBEIqm1ul5ZWRnMzGim\nb3NF9boJIYCWCUMul2Pbtm24cuUKKisrUb1eoUqlQkVFBRISEnDt2jWdBkoMh+p1E0IALRNGeHg4\noqKiIJFIkJ+fD2NjY9ja2iIxMRGVlZX49NNPdR0nMRCViuFGjWVA/Do40DIghLRQWt1We+jQIUyY\nMAF79+7Fhx9+CG9vb/z+++84fPgwXF1doVKpdB0nMZCk9EIUlz2p1+3V1vY5ryCENFdaJYy8vDz0\n6dMHQNU4RnXtCycnJ3zyySc4cOCA7iIkBqNRr9uD6nUT0pJp9b/fwsIClZWVAAB3d3dkZmaitLRq\nAlfbtm2RmZmpuwiJwWTmluFRflW9bgGfB28PWgaEkJZMq4QREBCA7du3QyqVwt3dHWKxGEePHgUA\nXL9+Hebm5joNkhhGzXrdXm1tqV43IS2cVglj+vTpuHr1Kj755BMYGRlh1KhRWLp0Kd59912sWbMG\n//rXv3QdJ9GzghIpHmYWc4+pXjchRKu7pDp27IgDBw4gMTERADB37lyYm5sjNjYWU6dOxSeffKLT\nIIn+XU/M4W6fbutiCRtLEwNHRAgxNK0SxldffYV33nkHwcHBAAAej4cpU6boNDBiOBUyhXq9bpqo\nRwiBlpekoqOjUVxc/PwNSbMQn5SrVq/b1YHGqAghWiYMX19fxMTE6DoW0ggolCq1iXpUr5sQUk2r\nS1KdO3dGZGQkDh06hI4dO8LUVH3hOR6Pp7aKLWm6ElOoXjchpHZaJYxDhw7B0dERUqkUcXFxGs/T\nX6DNw9MT9XyoXjchpAatEsbx48d1HQdpBFKeqtfdmep1E0JqqHMM48KFCygrK9NnLMTAak7Uo3rd\nhJCn1ZkwJk6ciKSkJLW23bt3o6CgoI5XkKasql53CYCqet0+7elWWkKIujoTRvWkrWpKpRLLli1D\nRkaGzoMi+vd0vW5LM6rXTQhRV6+lR59OIqR5oHrdhBBt0FrVBDdq1OtuZU/1ugkhtdN7wlAqlfju\nu+/Qu3dv+Pv7Y+bMmcjNza1z+wMHDmDo0KHw8/PDwIEDsXnzZiiVSj1G3Lw9Xa/b35N6F4SQ2tU7\nYbzsnIuIiAjs2bMHYWFh2L59O7KysjBjxoxatz116hQ+//xzvPvuu9i7dy/mzp2LyMhIbNq06aVi\nIE/cfpAPGdXrJoRo4ZnzMGbNmgWRSH3wc/r06RptQNXkvueRy+WIiorC4sWL0atXLwDA6tWrERIS\ngtjYWHTt2lVt+127dmHQoEH48MMPAQBt2rRBUlIS/vjjD0yfPv25+yPPplIxXL/35FZaqtdNCHmW\nOhPGsGHDNNqePqHX1507d1BWVoagoCCuzc3NDa6uroiJidF4/6lTp2osQ8Ln82khxAbydL1uT3eq\n100IqVudCWPFihUNvrOsrCwAVbXAa3J0dOSeq8nHx0ftcWlpKXbu3Mkts05eXG31uoVGdA8EIaRu\nej1DVFRUgM/nQyhUL/UpEokgk8me+9pp06ZBJpNh7ty5ugyzRcjMo3rdhJD60WvCMDExgUqlgkKh\nUGuXy+UQi8V1vi4/Px8TJkzAP//8g8jISLi6uuo61GavZu/C053qdRNCnk+vCcPFxQUAkJOTo9ae\nnZ2tcZmqWlpaGj744AOkpaVh+/btGpepSP0VlsjwIKNGvW6aqEcI0YJeE4aXlxfMzMxw+fJlri0t\nLQ3p6ekIDAzU2D4vLw9jx46FSqXCzp074eXlpc9wm61rd5/U63Z3toQt1esmhGhBq+XNG4pIJMKo\nUaOwcuVK2NjYwM7ODqGhoQgKCoKfnx/kcjmKiopgZWUFkUiE0NBQFBQUYOvWrTAxMeF6JjweD/b2\n9voMvdmQyhS48zCfe0y9C0KItvSaMABg9uzZUCgUmDdvHhQKBYKDg7F06VIAQFxcHMaOHYuoqCj4\n+vriyJEjUKlUePfdd9XeQyAQ4J9//tF36M1C/P28J/W6rcVwc6R63YQQ7eg9YRgZGWHhwoVYuHCh\nxnPdu3dHQkIC9/j27dv6DK3Ze7pet5+EJuoRQrRHN963ILEJ2SiXVgKoqtfdvrWNgSMihDQleu9h\nEP1jjOH8jUzE1ah5QfW6CSH1RQmjmVOqGI5fSUFCypNKia3szeHTnm4aIITUDyWMZqxSocTBCw+R\nklXCtbVztcKg7u4wEtDVSEJI/VDCaKbKpZX469wDbvkPAOjczg59/d3Ap0tRhJAXQAmjGSoqlWHf\nmfsoLH2yPldQJ2cEdnKiu6IIIS+MEkYzk1tYgb1n7nN3Q/F4PPT1d4W3B41ZEEJeDiWMZiQ9pxR/\nnXsA+eMKegI+D4O6u8PDzdrAkRFCmgNKGM3EvbRCHLmUDKWqao0okVCAN3u9AlcHmslNCGkYlDCa\ngZtJuTgdl84tKGhmIsSQ4Hawt657yXhCCKkvShhNGGMMl29l4crtR1ybtYUx3g72gKWZZt11Qgh5\nGZQwmiiViuFUXBpu3c/j2pxsTfFW73YQG9OPlRDS8OjM0gQplCocupiMBxlFXFsbZwu83rMthEYC\nA0ZGCGnOKGE0MVK5AgfOPUBGbhnX5uVug37d2tDaUIQQnaKE0YSUlsux78x95BVLuTZ/T0e82sWF\nJuQRQnSOEkYTkV8sxd7TSSitqOTaevu2gp/E0YBREUJaEkoYTUBWXhn2n30AqVwBAODzeAgJbA1P\nd1sDR0YIaUkoYTRyDzOL8feFh1xZVaERH6/3bIs2zpaGDYwQ0uJQwmjEbj/Ix4mrqVA9npAnNjbC\nW73bwcnW1MCREUJaIkoYjRBjDLEJ2bhwM5NrszQTYUhwO9hYmBgwMkJIS0YJo5FhjOHstQxcv5fD\ntdlbizGkdzuYiYUGjIwQ0tJRwmhElEoVjl5Jxd3UJ+VUXR3M8UavV2AspAl5hBDDooTRSMgrlThw\n/iHSsp+UU/Vws8agoDYQUDlVQkgjQAmjESiXVmLfmfvIKazg2rp42CPYz5XKqRJCGg1KGAZWVCrD\n3jP3UVSjnGoPbxcEeDnS7G1CSKNCCcOAsgvKse/MfVTIqibk8Xg8vNbVDZ3b2Rk4MkII0UQJw0BS\nH5XgwPkHqFRUTcgzEvDxrx7ueKWVlYEjI4SQ2lHCMIDElAIcvZIC1eNyqsaiqnKqreypnCohpPGi\nhKFHjDHcuJeLM9fSuTZzcVU5VTsrKqdKCGncKGE0MHmlEsVlcpSUy1FcKkdxmRzF5Y+/lsm4S1AA\nYGtpgiHB7WBhSuVUCSGNHyWMelIoVShRSwJV/0oef61eUfZ5nO3M8FavV2BC5VQJIU0Ena2eolKx\nqt5BdS+hRjIoLpOjTFr5/Dd5BqERHx1a2yDYzxVCI5qQRwhpOvSeMJRKJdauXYs9e/agrKwMwcHB\nWLp0Kezt7Wvd/ubNm/jmm29w+/ZtODk5Ydq0aXjnnXdeeP+MMZRJFY+TgEy9l1AuR2l5Jbc67IsQ\n8HmwMBPB0lQESzMRLM2MYWEmrPpqKoTY2IjmVxBCmiS9J4yIiAjs2bMHYWFhsLa2RmhoKGbMmIGd\nO3dqbJufn49JkybhrbfewjfffIPz58/jP//5D+zt7dG7d+967zs+KRfnb2ZCXql84fh5PB4sTIWw\n4BKCqCpBPE4OZiaUEAghzZNeE4ZcLkdUVBQWL16MXr16AQBWr16NkJAQxMbGomvXrmrb//777zA3\nN8d//vMf8Pl8eHh44J9//sEvv/zyQgkj5vYjrZKFmYnwqUQg4hKEuakIAlqugxDSAuk1Ydy5cwdl\nZWUICgri2tzc3ODq6oqYmBiNhBETE4PAwEDw+U+u9QcFBSE0NBSMsXr/Jd+lvT1ibj+CgM/XSAjV\nl5AszEQwosX+CCFEg14TRlZWFgDAyclJrd3R0ZF77untO3XqpLFtRUUFCgoKYGtbv5rWAV5O6OpJ\nazQRQsiL0Ouf0hUVFeDz+RAK1QsBiUQiyGQyje2lUilEIpHGtkDV5a0XQcmCEEJejF57GCYmJlCp\nVFAoFDAyerJruVwOsVhzprOJiYlGYqh+XNv21ZTKqnGK2nothBBCald9zqw+hz5NrwnDxcUFAJCT\nk8N9DwDZ2dkal6kAwNnZGTk5OWpt2dnZMDU1hYWFRZ37qX7N6NGjGyJsQghpUXJycuDu7q7RrteE\n4eXlBTMzM1y+fBlDhw4FAKSlpSE9PR2BgYEa2wcEBOCPP/5QG+C+dOkSunbtqjYQ/jRvb2/s2LED\nDg4OEAiotCkhhGhDqVQiJycH3t7etT7PY+wlZqm9gPDwcOzZswcrVqyAnZ0dQkNDYWxsjG3btkEu\nl6OoqAhWVlYQiUTIzc3F4MGD8cYbb2DcuHE4f/48wsLCEBkZiZ49e+ozbEIIafH0njAUCgWXNBQK\nBTfT29bWFpcuXcLYsWMRFRWF7t27AwCuXbuGr7/+GgkJCWjVqhVmzpyJN998U58hE0IIgQESBiGE\nkKaJZqgRQgjRCiUMQgghWqGEQQghRCuUMPRMqVTiu+++Q+/eveHv74+ZM2ciNze3zu0PHDiAoUOH\nws/PDwMHDsTmzZvrnFTTEtT3+NU0efJkjBkzRscRNn71PYZZWVmYOXMm/P390bNnTyxbtgwVFRV6\njLhxqe/xu3DhAkaOHAk/Pz8MGDAAkZGRaLJDx4zo1Zo1a1ivXr3Y2bNnWXx8PHv33XfZ+++/X+u2\nJ0+eZB07dmTbtm1jycnJ7ODBg6xbt25sw4YNeo668ajP8atp586dTCKRsA8//FAPUTZu9TmGMpmM\nDR48mI0ZM4bdvn2bXbhwgfXt25eFhobqOerGoz7H7+HDh8zHx4dFRESwlJQUdvDgQebr68u2b9+u\n56gbBiUMPZLJZMzf35/997//5dpSU1OZRCJhV69e1dh+ypQpbNasWWptGzZsYP3799d5rI1RfY9f\ntYcPH7KgoCD23nvvtfiEUd9jGB0dzQICAlhhYaFa24gRI/QSb2NT3+O3bds2FhQUpNY2c+ZMNnny\nZJ3Hqgt0SUqPnre8+9OmTp2KTz/9VK2Nz+ejuLhY57E2RvU9fkDV5YMFCxZg0qRJ8PDw0FeojVZ9\nj+HZs2fx6quvwsrKimsbMWIEoqOj9RJvY1Pf42dra4vCwkLs378fKpUKiYmJiImJqXMmdWNHCUOP\n6ru8u4+PD9q3b889Li0txc6dOxEcHKzbQBup+h4/APjxxx8BAB999JFug2si6nsMHz58CFdXV6xd\nuxb9+/dHSEgIwsLCal1duiWo7/EbNGgQRo4cic8//xze3t4YMmQIAgMDMW3aNL3E29AoYehRfZd3\nf/q106ZNg0wmw9y5c3UZZqNV3+MXHx+PLVu2ICws7Jlrj7Uk9T2GpaWliI6ORmpqKtatW4dFixbh\nwIEDWLJkib5CblTqe/yKi4uRnp6OSZMmITo6GmFhYTh//jw2bNigr5AblN5rerdk9V3evVp+fj6m\nTZuGe/fu4ZdffoGrq6s+wm106nP8ZDIZ5s+fj9mzZ9e66mZLVd/fQSMjI1hZWWHlypUQCATo0qUL\nFAoFZs2ahUWLFsHGxkaf4RtcfY9feHg4BAIBPv/8cwBAp06doFAosGzZMowZM6bJHT/6s0uPai7v\nXlNdy7sDVav5fvDBB0hLS8P27dvh4+Oj8zgbq/ocv+vXryMpKQnh4eHw9/eHv78//vzzT8TExMDf\n3x8ZGRl6i7sxqe/voJOTEzw8PNRWfa6+TJqenq7DSBun+h6/69eva4xX+Pr6orKyEpmZmboLVEco\nYehRzeXdqz1refe8vDyMHTsWKpUKO3fuhJeXlz7DbXTqc/x8fHxw+PBh/Pnnn9y/AQMGwNvbG3/+\n+SccHR31HX6jUN/fwW7duuH27duorKzk2hITEyEQCFpkT7e+x8/Z2RkJCQlqbXfv3gWfz0ebNm10\nHm9DEyxbtmyZoYNoKQQCAUpKSvDzzz+jQ4cOKC0txRdffAF3d3dMmzYNcrkc+fn5EAqFEAgEWLhw\nIRISErBx40bY2NigvLwc5eXlqKiogKmpqaE/jt7V5/gZGxvD2tpa7d/Zs2dRVlaGCRMmtNgxjfr+\nDrZr1w5RUVFISEhA+/btcefOHXz11VcYMGAA3nrrLUN/HL2r7/GztrbGhg0bwOfz4ezsjNjYWHz1\n1Vd45513MHDgQEN/nPoz9H29LU1lZSVbsWIFCwoKYl27dmWzZs1ieXl5jDHGLl68yCQSCbt48SKr\nqKhgXl5eTCKRaPzr2LGjgT+F4Wh7/GrzxRdftPh5GIzV/xjevXuXTZw4kfn4+LAePXqwb7/9lslk\nMkOFb3D1PX5Hjhxhw4YNY35+fmzAgAEsIiKCyeVyQ4X/Umh5c0IIIVppmf1yQggh9UYJgxBCiFYo\nYRBCCNEKJQxCCCFaoYRBCCFEK5QwSKOmq5v46ObAxod+Jo0fJQyilevXr2Pu3Lno27cvfHx8MHDg\nQCxfvhyPHj3Syf4ePXqEyZMnN/jyEyUlJVi4cGGdy6E3NWPGjMH48eP1tr9Nmzbhiy++AAD88ccf\n8PT0rHOl4Pr473//i7CwsHq9pqioCP3790dqaupL759ohxIGea6tW7figw8+QFFREebNm4fIyEhM\nmDABJ0+exIgRI/Dw4cMG3+fFixdx8uTJBn/fhIQE7NmzByqVqsHfu7lLTEzEli1bdLJa8qZNm1BY\nWFiv11hZWWHixIn44osvqHeiJ5QwyDNdvXoV//d//4dx48bhp59+wltvvYXu3btj1KhR2LlzJ7fy\nJmn+wsPDMXToUNjZ2Rk6FM6///1v3Lt3D0eOHDF0KC0CJQzyTD///DOsra0xe/ZsjeecnJywcOFC\n9OzZEwqFAgCgUCjw66+/4s0334SPjw9CQkKwceNGKJVK7nVjxozB0qVLsWnTJvTt2xddunTB+++/\nj5s3bwKoutQxf/58AEBISAgWLlwIACgvL8eqVaswaNAgeHt7o2vXrvjoo49w584dtbhOnTqF999/\nH35+fggODsbXX3+NsrIyXLp0CaNHjwYAjB07FmPGjAEApKSkYMqUKejevTt8fX3x3nvv4dSpU888\nLv3798e6deuwbNkydO3aFT169MCyZctQUVGhtt2RI0cwfPhwdOnSBb1790ZYWBjkcjn3fEREBAYP\nHoz169cjMDAQffr0QVlZWa37zMjIwKeffoqAgAD06tULW7Zs0dgmPz8fX375Jfr16wdvb28EBQVh\nxowZ3KW9HTt2wNPTU+Myzq5du9ClS5c6/8pPTEzEqVOnal0/6vLlyxgyZAi6dOmC4cOH4/Tp02rP\nFxQUYPHixejZsyd8fHzwwQcf4OrVq2rHMiUlBXv27IGnpyfS0tIAAJcuXcLEiRMRGBgIb29vhISE\nYMOGDWq9Q5FIhEGDBnGFsoiOGXJdEtK4qVQq1qVLF/bZZ59p/Zr58+ezzp07s4iICHb27Fm2fv16\n1rlzZ7Zo0SJumw8//JAFBASw9957jx05coQdPnyYhYSEsH79+jGlUsny8vJYREQEk0gk7PDhwyw5\nOZkxxtj06dPZq6++yqKjo9mlS5fYb7/9xnr16sXefPNNplKpGGOMHT9+nHl6erIZM2awkydPsujo\naBYYGMhmzpzJSkpK2K5du5hEImHbt29nd+/eZUqlkg0ePJiNHTuWnTx5kp09e5Z98sknrGPHjtx+\na9OvXz8WEBDA3n//fXbs2DH266+/Ml9fXzZ9+nRum7179zKJRMLmz5/PTp06xbZt28b8/f3Zp59+\nym2zfv161qlTJ/bvf/+bnT17lh04cKDW/ZWVlbF+/fqxgQMHsr/++osdPHiQvf7666xz585s3Lhx\n3M9r2LBhbNCgQWz//v3s4sWLbOvWrczf359NmjSJMcZYYWEh8/b2ZhEREWrv/95777EZM2bU+XnD\nw8PZa6+9ptb23//+l0kkEubn58ciIyPZyZMn2aRJk1jHjh25+tZSqZS9/fbbrFevXuy3335jJ06c\nYJMnT2be3t7s+vXrjDHGbt26xfr06cM+/vhjFhcXx2QyGYuPj2edOnVin3/+OTt79iw7ffo0mzdv\nHpNIJOyvv/5Si+P8+fNMIpGwBw8e1Bk/aRiUMEid8vLymEQiYatWrdJq+8TERCaRSNhPP/2k1r55\n82YmkUhYQkICY6wqYfj5+bGSkhJumz179jCJRMJu377NGGPszz//ZBKJhKWmpjLGqk48EydOZAcP\nHlR7719++YVJJBJu8bdhw4axESNGqG0THR3N3njjDVZSUsKuXLmitjhcdnY2k0gkbO/evdz2xcXF\n7LQHQkwAAAnRSURBVNtvv2WJiYl1ftZ+/fqx7t27s9LSUq5t27ZtTCKRsMTERKZSqVifPn3Y5MmT\n1V535MgRJpFIWExMDGOsKmFIJBIWFxdX574YY2z79u3My8uL3bt3j2vLyMhQSxiZmZnsww8/5E7W\n1b766ivm6+vLPZ49ezYbNGgQ9/jBgwdMIpGwEydO1Ln/kSNHaiSU6oSxZcsWrk0ul7O+ffuyqVOn\nMsYY2717N/P09GQ3btzgtlEqlWzYsGFs/PjxXNuAAQPYggULuMd//PEH++STT7g/BKpfFxAQwJYt\nW6YWR3FxMZNIJGzXrl11xk8aBl2SInWqLppT83LSs1y5cgUANC5bvP3222rPA4CnpyfMzc25x9XF\nZ8rLy2t9b2NjY/z8888YPHgwHj16hIsXL2LXrl04ceIEAKCyshJSqRT//POPxrLRI0aMwF9//aW2\nv2r29vZo3749lixZggULFmDfvn1QqVRYtGgROnTo8MzP279/f5iZmXGPBw0aBACIiYnB/fv3kZWV\nhf79+0OhUHD/goODIRQKcf78ebX36tix4zP3FRMTA3d3d3h4eHBtLi4u8PPz4x47Oztj27Zt8Pf3\nR1paGs6dO4dt27YhNjZWrZ5F9Y0K169fBwD8+eefcHBweGat+NTU1DrrXwwePJj7XigUok+fPtwl\npwsXLsDJyQkdO3bkjoFKpUK/fv1w5coVtctzNQ0bNgw//vgj5HI57ty5g8OHD2P9+vVQKpVqnwUA\nLCwsYGlp2SILOukblWgldbKysoKZmdkzq9OVlpYCAMzNzVFUVAQAGoOi1Y9LSkq4NhMTE7VtqutT\nPOvupTNnzuDbb7/F/fv3YWZmBi8vL64uCGMMRUVFYIzB1tZW248IHo+HX375BRs3bsSRI0fw559/\nQigUYsCAAQgNDYWVlVWdr326CFP1fouLi7mxgCVLltRa/zo7O5v7XiAQwNjY+JlxFhUV1fq5HBwc\nUFBQwD3eu3cvVq9ejczMTFhbW6Njx44wMTFRu4vo1VdfhYuLC/73v//Bx8cHe/fuxdtvv61WVe9p\npaWlddZgefrnbWtry/1eFBYWIisrC507d671tQUFBbVWqpNKpfjqq6/wv//9DwqFAm5ubvD394eR\nkVGtd0SJxWK13y+iG5QwyDP17t0bly5dgkwmq/Wk9uuvv+KHH37AwYMHYWlpCaCqUmDNk0B1OcuX\nqV+ckpKC6dOnY+DAgdi8eTPc3NzA4/GwY8cOnDlzBgC4HkTNEyhQdbKLi4tT+2u8JicnJyxbtgxf\nfvkl7ty5g7///huRkZGws7Or9WRf7ekB4ry8PABVJ0wLCwsAwKJFixAQEKDx2voeCxsbG8THxz8z\nhpiYGCxYsADjxo3DhAkTuJ/BypUrce3aNW47Pp+Pd955B7///juGDBmC9PR0DB8+/Jn7t7a2RnFx\nca3PFRcXqyWN3NxcLrlZWFjAw8OjzjkWdR2Hb775BocPH8a6devQs2dPLln17NmzzhiaWn3spogu\nSZFnmjBhAgoLC7Fu3TqN5zIyMrBjxw74+PjA3d2dK1G5f/9+te2qH9d24qzL03/txsfHQyaTYcqU\nKWjdujV4PB4AcMlCpVJxvY7jx4+rvfbo0aOYNGkSSkpKNN73xo0bePXVV3Hjxg3weDx07NgRn332\nGSQSyXNrLp85c4a7OwwADh06BB6Phx49esDDwwO2trZIT09Hly5duH82NjYIDw9HUlKS1scCAHr0\n6IHk5GTcvn2ba8vPz1dLBHFxcVCpVJgxYwaXLJRKJc6fP6/RcxsxYgTy8vKwevVqdOnShavTXRdX\nV9c6J2lW/wyAqp7ByZMnERQUBAAIDAxERkYGHB0d1Y7D/2/vjkKaasM4gP8bdSVoF44w2EUghp5z\nxgSNHaartSxoY1sxEERk6yJRN2tLsiAjCcEYY9kG24XDartZF11lBjEZFF0srJvK3STdBIZYG0pb\nNHm+i/DQ6CP39SHyfT6/y+09O895B+fZed9nPOl0GolEAvv27QOAXzogLiwsQJZlmM1mJVm8efMG\nnz9//uVaCoUCisWi0m+bbR9+wmC/1draiqGhIUQiESwtLcFut2P//v3I5XKIx+NQqVQIBAIAgKam\nJthsNoRCIRSLRbS2tuL169eIxWKw2Wxb3pR+tvkL/enTpzAajRAEAXv37kUgEIDL5cK3b9/w8OFD\n5c99m+Wsw8PDGBoawsjICOx2O5aXlxEMBuFwOHDw4EFlXCaTQV1dnbKsdfnyZXi9XtTX1+PFixdY\nXFyE2+3+bYwfP36Ex+NBT08P3r9/j9u3b8PpdEKj0QAALl68iPHxcahUKhiNRuTzeYTDYaytraGl\npeUffQ92ux3379/HwMAAfD4fampqEI1GK26eWq0WAJQWoIVCAclkErlcDkSEUqmkLAVqNBq0t7cj\nm83i+vXrW57fYDDgwYMHf/teMBhEuVyGWq1GPB7H+vo6BgcHAQBnz55FMpmE2+1Gf38/Dhw4gEwm\ng5mZGXg8HiXx19bW4t27d8hms9BqtdBqtXjy5AlSqRQOHTqEXC6HaDSKPXv2/FK6/OrVKwA/nobZ\nNtvRLXf2n5FOp+ncuXNkMBhIkiQ6efIk3bx5kz59+lQx7vv37xQOh8lkMpEgCNTV1UWxWIzK5bIy\npre3V6ns2bTZ2vLly5dERPT161dyu90kCIJSaTQ3N0cWi4UkSaKOjg7yeDyUzWbp8OHDFRUy6XSa\nzpw5Q6Io0tGjRykYDFKpVCKiH5U2fr+fJEkiq9VKREQfPnwgr9dLsiyTIAhksVgolUr9dj5MJhON\njIzQtWvXSKfTUUdHB01NTVVcJxHRo0ePyOFwkCiKpNfryev1VpR/3rlzp+qWu6urq3Tp0iVqa2uj\n9vZ2CgQCdOHChYq5TCaTZDabSRRFOnbsGI2OjiqVWc+ePav4vOnpaRJFkfL5/JbnXlxcpKamJnr7\n9q3y2maVVCaToVOnTpEgCNTd3a2Uy25aWVmhK1eukF6vJ0mS6PTp05RIJCrGzM7OkizLJIoiLSws\n0JcvX8jv99ORI0dIp9OR1Wqle/fu0djYGBmNRtrY2FCOvXHjBjmdzqrmkP073KKVsT9w/PhxyLKM\niYmJnQ7lj/X19UGtViMYDFY1/vz582hoaMD4+Pg2R1a9YrGIzs5OTE5O4sSJEzsdzv8e72EwtstE\nIhH4fD5ks9ktl91+5vP58Pjx44oKr52WSqXQ2NgIs9m806HsCpwwGNtl5ufn8fz5c1y9ehWiKFZ9\nXHNzM1wuF0Kh0DZGV718Po+7d+/i1q1byl4I2168JMUYY6wq/ITBGGOsKpwwGGOMVYUTBmOMsapw\nwmCMMVYVThiMMcaq8hdPP4CA9+7K2gAAAABJRU5ErkJggg==\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": 15, + "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": 15, + "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": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.1, 0.3, 0.5, 0.7])" + ] + }, + "execution_count": 16, + "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": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig02.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nFArFKP5/H1F/DqvcupYAAAAASUVORK5CYII=\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": 18, + "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": 19, + "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": 19, + "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": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nFArFKP5/H1F/DqvcupYAAAAASUVORK5CYII=\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": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(11, 4)" + ] + }, + "execution_count": 21, + "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": 22, + "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": 23, + "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": 24, + "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": 38, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def plot_sweep_frame_difference(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')" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_sweep_frame_difference(frame)\n", + "\n", + "decorate(xlabel='infections per day - recoveries per day (beta - gamma)',\n", + " ylabel='Fraction infected',\n", + " legend=False)\n", + "#when infections per day and recoveries per day are very different, the fraction of infected people trends towards extreme values\n", + "#there is a small slice in the middle when they are close where the fraction of infected isnt exremely high or low" + ] + }, + { + "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": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "s_inf_array = linspace(0.0001, 0.9999, 101)\n", + "#s_inf_array" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "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": 33, + "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": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap06-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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\ni6iF85fLm6PaBsrdhRDC/ExOGAAHDx7kl19+IT09ncmTJ3P27Fk6deqEp6enueITVShRa7l0Jc/w\n/JYANwtGI4RoLkxKGCqViueff55du3ZhY2ODWq3moYce4v333+fMmTN8+umntGrVytyxilJJV3JR\na7QAeLja4+Zc9Qg2IYSoSyaNklq+fDm//PILK1euJCEhwdB2Pn/+fFxcXHjzzTdNPqFGo2Hp0qX0\n6tWLrl27Mm3aNDIyMqqtn5qayrRp0+jatSu33347c+fOpbCw0OTzNUXnU64ZHrfxl+YoIUT9MClh\nbN++nRkzZtC/f3+srctvSoKCgnj66afZv3+/ySeMi4tj69atLFq0iPXr15OamsrUqVOrrKtSqZgw\nYQLZ2dls2LCBN998k7179/LGG2+YfL6mRqfTcaFiwpDRUUKIemJSk1ROTg6tW7eu8jV3d3fy8vKq\nfO16KpWK+Ph45syZQ8+ePQFYtmwZAwYMIDExkcjISKP627dvJz09nY0bN+Lmpm+nnzp1Khs2bDDp\nfE1RZk4ReYUlANjZWuHn4WThiIQQzYVJdxjt27fn66+/rvK1n376iXbt2pl0shMnTpCfn090dLSh\nLCgoiMDAQBISEirV37dvH3fccYchWQA88MADbN682aTzNUUXU8tn1bfydUGpVFgwGiFEc2LSHcaT\nTz7J1KlTycnJ4c4770ShUJCYmMi2bdv45JNPWLx4sUknS01NBTAsm16mbOn0650/f57bbruN5cuX\ns23bNhQKBQMHDmT69OnVLlXSZB04AN98w8V0O3D2hpYtadVdBhoIIeqPSQnj7rvv5o033mDp0qXs\n2bMHgAULFuDh4cErr7zC4MGDTTpZYWEhSqUSGxvjSWa2trYUFxdXqp+Xl8fmzZvp06cPb731Fmlp\nabz++utkZmaanKSahAMHYO1aSlBy2a4j5OfDiRO07OIKt/SwdHRCiGai2oSxZs0a7r//fsPdQGxs\nLLGxsZw7d47s7GxcXFxo164dSqVJrVoA2Nvbo9VqUavVRp3nKpWqyl37rK2tcXNzY/HixVhZWdG5\nc2fUajXPPPMML730Eu7u7rX5rI3XN98AcFnpiBZ9E5SntgjnPbugpyQMIUT9qPZq/84775CUlARA\nx44dOXz4MABt27YlMjKSW2+9tVbJAsDf3x+A9PR0o/IrV65UaqYCfdNVu3btsLKyMpS1b98egOTk\n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\nQmCC\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": 35, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "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" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frac_infected_series" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.158096819542062" + ] + }, + "execution_count": 36, + "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": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# c = 1.158132 frac_infected = 0.260048 from the printed statement\n", + "# c = 1.158096819542062 from np.interp" + ] + } + ], + "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 +} From 033be81142b291a2f2cf24cf1d163b9f217cc1a6 Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 24 Oct 2017 18:07:55 -0400 Subject: [PATCH 08/11] Chapter 8 Notebook --- code/chap08mine.ipynb | 3398 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3398 insertions(+) create mode 100644 code/chap08mine.ipynb diff --git a/code/chap08mine.ipynb b/code/chap08mine.ipynb new file mode 100644 index 00000000..e1d9a450 --- /dev/null +++ b/code/chap08mine.ipynb @@ -0,0 +1,3398 @@ +{ + "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": "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\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": "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\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\nCERERAQFAhEREUGBQERERLDDQLBw4ULmzZtn1rZ7925GjRpFz549GTlyJGlpaWb9p0+fZvr06URE\nRNC/f3/i4+M5f/68NcsWERFxaHYTCIxGIytWrOD99983a8/JySE2Npbhw4ezceNGhg4dSlxcHNnZ\n2abnTJ06leLiYlJTU1myZAkbNmwgMTHR2rsgIiLisOwiEOTm5vLQQw/x7rvv4ufnZ9aXkpJCWFgY\nsbGxBAUFMWPGDMLDw0lJSQEgKyuLPXv2sGTJEkJDQxk8eDCzZs1i3bp1VFZW2mJ3REREHI5dBIK9\ne/fi6+vL5s2bCQgIMOvLzMwkMjLSrK1v375kZmaa+v39/QkMDDT1R0ZGUlpayqFDh5q+eBERkWbA\n2dYFAIwaNYpRo0bV21dQUEDHjh3N2nx8fCgoKACgsLAQHx+fOv0A+fn53HrrrU1QsYiISPNiF2cI\nLqeiogJXV1ezNldXV86dOwdAeXk5bm5uZv0uLi4YDAbTc0REROTy7D4QuLm5UVVVZdZWWVlJy5Yt\nAXB3d68zV6Cqqgqj0YiHh4fV6hQREXFkdh8IfH19KSoqMmsrKioyDSN06tSJU6dO1ekH6gw1iIiI\nSP3sPhD07t2bjIwMs7b09HQiIiJM/bm5ueTn55v1e3p6EhoaatVaRUREHJXdB4IJEyaQmZnJypUr\nOXr0KCtWrGDfvn08/PDDAISHhxMWFsbMmTM5ePAgaWlpxMfHExMTU2fugYiIiNTP7gNBSEgISUlJ\nfPrpp4wePZqdO3eSnJxMUFAQAAaDgaSkJNq3b8/48eN59tlniY6OJi4uzsaVi4iIOA67uOzw19at\nW1enbciQIQwZMuSSr/H29ua1115rwqpERESaN7s/QyAiIiJNT4FAREREFAhEREREgUBERERQIBAR\nEREUCERERAQFAhEREUGBQERERFAgEBERERQIREREBAUCERERQYFAREREsMPFjRxdxskMtuZsJb8k\nH18vX0YEj6CPfx9blyUiInJZCgQWlHEyg9V7V5sen/zppOmxQoGIiNgzDRlY0NacrfW2b8vZZuVK\nREREGkaBwILyS/Lrbc8rybNyJSIiIg2jQGBBvl6+9bb7eflZuRIREZGGUSCwoBHBI+ptHx483MqV\niIiINIwmFVrQhYmD23K2kVeSh5+XH8ODh2tCoYiI2D2LBYKMjAy2b9/O3LlzLbVJh9THv48CgIiI\nOByLDRl8++23pKSkWGpzIiIiYkWaQyAiIiIKBCIiIqJAICIiIigQiIiICFdxlcEjjzxyVRvKy9Pd\n+ERERBzVFQNBVVXVVW3I29sbb2/vRhd0sfT0dB566KF6+/r27UtKSgpjxoxh//79Zn1jxozhxRdf\ntHg9IiIizdEVA8G6deusUcclhYeHs3v3brO2L7/8krlz5/LHP/4Ro9FITk4Oy5Yto1+/fqbntGzZ\n0tqlioiIOKwG3ZiosrKSd955h6ysLEpKSur0GwwG1qxZY7HiAFxdXc3OPJSUlLBs2TIeffRRBg4c\nyPHjxykvLycsLKxJzlCIiIhcDxoUCBYvXsyHH35It27daNOmTVPVdFmvv/46rq6uxMXFAXDkyBHc\n3d3x9/e3ST0iIiLNQYMCwWeffca0adOYMmVKU9VzWadPnyY1NZVFixaZhgSys7Px8vLi6aef5l//\n+hdt27bl3nvv5eGHH8bJSRdRiIiIXI0GBQKDwUBYWFhT1XJF7777Lu3bt+fuu+82teXk5FBWVkZU\nVBSTJ09m7969LF26lJKSEqZNm2azWkVERBxJgwLBPffcw4cffki/fv1s8tP3xx9/zL333ouLi4up\n7eWXX6asrIxWrVoBEBISQklJCcnJyUydOhWDwWD1OkVERBxNgwLB9OnTueeee7jjjju4+eab68zk\nNxgMvPTSSxYt8ILs7Gx++OEH7rrrLrN2Z2dnUxi4ICQkhNLSUkpKSur0iYiISF0NCgTLli3j2LFj\neHl58e2339bpb8qfxjMzM/H29iYoKMisfezYsfTs2ZP58+eb2vbv34+Pj4/CgIiIyFVqUCDYtGkT\nf/zjH3nyySetfir+0KFDdO/evU77sGHDWLlyJT169KBXr16kp6ezevVq5s2bZ9X6REREHFmDAkGL\nFi0YMGCATcbli4qKaN26dZ32SZMm4ezszKpVq8jLy8PPz4+5c+cSHR1t9RpFREQcVYMCwciRI02T\nCq0tOTm53naDwUBMTAwxMTFWrkhERKT5aFAgaN++PRs3bmTYsGHccssteHp6mvUbDAYWL15s0QJF\nRESk6TUoEHzwwQe0bt2a6upqvv766zr9usRPRETEMTUoEOzcubOp6hAREREbuuLdhdatW8fx48et\nUYuIiIjYyBXPEKSlpbFs2TJ8fHwYNGgQgwYNom/fvri7u1ujPhEREbGCKwaC1atXc+7cOb766iu+\n+OILXnzxRQoLC4mIiGDgwIEMHDiwzs2CRERExLFc1RwCNzc3Bg8ezODBgwH4/vvv+eKLL9i1axcJ\nCQm0b9+eQYMGMXDgQIYOHdqkBYuIiIjlNWhS4QU33ngjN954Iw8++CDnzp0jPT2dXbt2sXTpUgUC\nERERB3RNgeDX3NzcTHMLRERExDFdMRAkJSXV224wGPDw8KBDhw706dOHTp06Wbw4ERERsY4rBoJV\nq1Zdsq+6uhqoXePgkUce4amnnrJcZSIiImI1VwwEBw8evGRfTU0NhYWFfPrppyxbtoygoCBGjx5t\n0QJFRESk6V3xxkSXfbGTE76+vkycOJH777+fd99911J1iYiIiBU1KhD8Wr9+/Th27JilNiciIiJW\nZLFA0KpVK6qqqiy1OREREbEiiwWCQ4cO6UoDERERB2WRQHDw4EH+8pe/MGzYMEtsTkRERKzsilcZ\nPPLII5fsq6yspKioiNzcXH7zm98QGxtr0eJERETEOq4YCC41L8BgMHDDDTdw44038sQTT3DnnXfi\n7NzoGx+KiIiIDVzxG3zdunXWqENERERs6Kp/pJ82bRqhoaF0796dkJAQAgMDzfq/++47WrZsSefO\nnS1epIiIiDStqw4Ex48f5/PPP6eyshKDwYC7uzvdunUjJCSEbt26kZWVxf79+9m+fXtT1isiIiJN\n4KoDwaZNm6iurubYsWMcOXKE7777jsOHD7NlyxbKy8sB8PX1bbJCRUREpOk0aBZgixYtCA4OJjg4\nmDvvvBOovdLgzTffJCUlhTfeeKNJihQREZGm1ej7ELi6uhIXF0e/fv149dVXLVGTiIiIWJnF7lTY\nu3dvvvrqK0ttTkRERKzoqocMFixYYHaVQatWrcz6jx8/Tvv27S1eoIiIiDS9qw4EX3zxBR988AFQ\ne1Oijh07Ehoayk033cTp06f5f//v/7Fs2bImKTInJ4e77rqrTvv69euJiIhg9+7dxMfHc+zYMbp0\n6cLTTz/N4MGDm6SWa5FxMoOtOVvJL8nH18uXEcEj6OPfx9ZliYiImFx1IPj888/5+eefOXLkCNnZ\n2Rw5coQjR46wadMmfvzxRwDi4uLo0qULQUFBdO3aleDgYH7/+983usgjR47Qtm1bNm/ebNbepk0b\ncnJyiI2NZcqUKfzud79j8+bNxMXFsXHjRrp169bo926sjJMZrN672vT45E8nTY8VCkRExF406CqD\nG264gV69etGrVy+z9uLiYlNAuBAWvvjiCyoqKiwWCIKDg/H29q7Tl5KSQlhYmGkdhRkzZrBnzx5S\nUhrjo3oAABiRSURBVFJ4/vnnG/3ejbU1Z2u97dtytikQiIiI3bDI4gMdOnSgQ4cO3HbbbWbtubm5\nltg82dnZdO3atd6+zMxMRowYYdbWt29ftmzZYpH3bqz8kvw6bUWlRezN30teSZ6GEERExC5Y7CqD\n+lx8e+NrlZ2dTV5eHmPHjmXAgAFMnDiRb775BoCCggI6duxo9nwfHx8KCgos8t6N5etlfrOmotIi\nDp8+DECNscY0hJBxMsMW5YmIiABNHAgsoaKigtzcXH7++WdmzZrFqlWr8PHxYcKECRw9epSKigpc\nXV3NXuPq6sq5c+dsVLG5EcHmZy9yf6o9axLY2jwsbcvZZrWaRERELmb36xW7u7uTkZGBq6ur6Yt/\nyZIlHDx4kHfeeQc3N7c6SzRXVlbSsmVLW5Rbx4WhgG0528grycPJ4MRvOvwGbw/z+RB5JXm2KE9E\nRARwgEAAtZMZf83JyYng4GDy8/Px9fWlqKjIrL+oqKjOMIIt9fHvYwoGi9MWc/Knk3We4+flZ+2y\nRERETOx+yODAgQP06tWLAwcOmNqqq6s5fPgw3bp1o3fv3mRkmI+/p6enExERYe1Sr8rFQwgXDA8e\nbuVKREREfmH3ZwhCQ0Px9/dn4cKF/OlPf8LDw4M333yTH3/8kYceeoji4mLuu+8+Vq5cyf9v796D\nojrPMIA/rCsBCSihQleMSYSwtghyUcC6CpKaqBlqq0C8QAqtE3VSsCUaQ7lMYtKpQBQvDOhAaxsh\nrbGgxmgnzWgDTcdakEaFSgSnIoIKigLhKuzpHw6ryy4gsLtnz/L8ZpjR7+zlPbxnOe8532VfffVV\nfPbZZ7hw4QLeffddsUPXa2AXwjT7aZpiYHvxdi5eREREojD7gkAulyMvLw/p6enYuHEjOjs74efn\nh/z8fDg5OcHJyQlZWVnIyMhAbm4uZs6cif3798PNzU3s0Af1eBcCwMWLiIhIfGZfEACAi4sLdu7c\nOej2kJAQhISEmC4gA+PiRUREJDazH0MwHuhbvAjgzAMiIjIdFgRmYODiRf0484CIiEyFBYEZ4MwD\nIiISmyTGEFg6zjwgIiKxsSAwE5x5QEREYmKXgZkaauYBERGRobEgMFOceUBERKbEgsBMceYBERGZ\nEgsCM8WZB0REZEocVGimBpt5wAGFRERkDCwIzNjAmQdERETGwi4DIiIiYkFARERE7DKQnNL6Uvy1\n5q9cvZCIiAyKBYGEcPVCIiIyFnYZSAhXLyQiImNhQSAhXL2QiIiMhQWBhHD1QiIiMhYWBBLC1QuJ\niMhYOKhQQrh6IRERGQsLAokZavXCoaYkGnO6IqdCEhFJHwsCCzHUlEQARpuuyKmQRESWgWMILMRQ\nUxKNOV2RUyGJiCwD7xBYiNFMSTTEdEVOhSQisgy8Q2AhhpqSaMzpipwKSURkGVgQWIihpiSOZrpi\naX0pthdvx6bPNmF78XaU1peO+H2JiEg62GVgIZ5kSuKTTlccyUBBToUkIrIMkigI7ty5g4yMDPzz\nn/9EV1cX5syZg23btsHDwwMAEB4ejkuXLmk9Jzw8HL/5zW8MGoe5T68bakriUNsGGmqgoL7XGMlr\nExGReTL7gkCtVuMXv/gFBEFAdnY2Jk2ahH379iEmJgYnT57ElClTUFNTgw8//BBBQUGa59na2ho0\njvE0vY4DBYmIxh+zLwiqqqrwn//8B6dOnYKbmxsAICMjAwEBASguLoafnx86Ozvh4+ODqVOnGi2O\nkV41S5nCXoH61nqddg4UJCKyXGY/qFChUODAgQN44YUXNG1WVlYAgJaWFly5cgU2NjZwdXU1ahzj\n6aqZAwWJiMYfsy8IHB0dERISApnsUaiHDh1CV1cXVCoVqqurYW9vjy1btkClUiEsLAwHDx6EWq02\naBzjaXrdPNd5WO+3HtMdpkNmJcN0h+lY77fe4u6EEBHRI2bfZTDQ6dOnsWvXLsTGxsLNzQ01NTXo\n6OiASqXChg0bUF5ejvT0dLS1tSE+Pt5g77vMfZnWGIJ+lnrVzIGCRETji6QKgqKiIqSkpGD58uXY\nunUrACAtLQ0dHR1wcHAAACiVSrS1tWH//v2Ii4vTdC+MFafXicfcZ3cQEVkCyRQEOTk52L17N6Ki\nopCcnKw50cvlck0x0E+pVKK9vR1tbW0628aCV82mN55mdxARicnsxxAAQG5uLnbv3o34+HikpKRo\nXfVHRkbigw8+0Hr8pUuX4OzsbNBigMTBL08iIjINs79DUFVVhczMTKxatQqRkZFoamrSbLOzs8OS\nJUuwd+9ezJ49G35+fjh37hzy8vKQlJQkYtRkKONpdgcRkZjMviA4deoU+vr6UFhYiMLCQq1tmzdv\nxqZNmyCXy5GTk4OGhgZMmzYNiYmJiIiIECliMiSuiUBEZBpmXxAkJCQgISFhyMfExsYiNjbWRBGR\nKY232R1ERGIx+4KAxjfO7iAiMg0WBGT2OLuDiMj4JDHLgIiIiIyLBQERERGxICAiIiKOISAy6tLI\nXHaZiKSCBQGNa8ZcGpnLLhORlLDLgMY1Yy6NzGWXiUhKWBDQuGbMpZG57DIRSQkLAhrXFPYKve2G\nWBrZmK9NRGRoLAhoXFvmvkxvuyGWRjbmaxMRGRoHFQ6Co8PHB2MujWyKZZd5nOrH3wvRyLEg0IOj\nw8cXYy6NbMzXNvZxKtWTKj+/RKPDLgM9ODqcpMCYx2n/SbW+tR5qQa05qZbWl475tY2Nn1+i0WFB\noAdHh5MUGPM4lfJJlZ9fotFhl4EeCnsF6lvrddo5OpzMiTGPU1OcVI3VJcHPr7ik2tUESDt2Q+Ad\nAj04OpykwJjHqbGnTBqzS4KfX/FIuatJyrEbCu8Q6GGK0eFEY2XM43SZ+zKtgXn9DHVSHapLYqzx\nW8LnV6pXqsbMq7FJOXbAMMcMC4JBGHN0OJGhGOs4NfZJ1dhdElL+/Ep5loSUx29IOXZDHTMsCIhI\nL2OeVNnPPzgpX6lKOa9Sjt1QxwzHEBCRybGff3BSvlKVcl6lHLuhjhneISAik7OEfn5jkfKVqpTz\nKuXYDXXMsCAgIlFIuZ/fmIw9oNPYpJxXqcZuqGNm3BYEfX19AIBbt26JHAkR0SMKKLBi2goUXyvG\n7fbbcLFzQfDzwVAICty4cUPs8MgMjeSY6T/n9Z8DHzduC4KmpiYAwLp160SOhIhoaMdwTOwQSGKG\nO2aamprw3HPPabVZCYIgGDMoc9XV1YWKigpMnToVEyZMEDscIiIio+vr60NTUxNmz54NGxsbrW3j\ntiAgIiKiRzjtkIiIiFgQEBEREQsCIiIiAgsCIiIiAgsCIiIiAgsCvfr6+rBz506oVCr4+voiPj4e\nd+7cETssg7hz5w62bdsGlUqFuXPn4uc//zmuXLmi2R4eHg6lUqn1k5SUJGLEo1dTU6OzL0qlEmVl\nZQCAr776CitWrIC3tzfCwsJQXFwscsSjc+7cOb37qVQq8frrrwOwnLympqbqxD1cHu/evYvNmzdj\n7ty5mD9/PjIyMtDb22vKsEdF377m5+dj6dKl8PHxwfLly3HkyBGt7QUFBTp5/v73v2/KsEdF374O\nd8xaSl5DQ0MH/fw2NDz8LgKT5VUgHZmZmcKCBQuEr776SqioqBAiIiKE1atXix3WmPX19Qmvvfaa\nEBkZKVy4cEGorq4W4uPjhfnz5wvNzc2CWq0W5syZI3z66adCY2Oj5qetrU3s0Efl5MmTQmBgoNa+\nNDY2Cj09PUJ1dbUwe/ZsITs7W6ipqREyMzMFT09P4cqVK2KHPWLd3d06+3j06FFh1qxZQklJiUXk\nVa1WC7t37xY8PDyEX//615r2J8njmjVrhLVr1wqXL18WvvzySyEoKEjYtWuXGLvxRAbb14KCAsHH\nx0c4duyYUFtbK3zyySeCp6encPToUc1jUlNThY0bN2rluampSYzdeCKD7euTHLOWkte7d+9q7WNt\nba0QHBwsvPXWW5rHmCqvLAgG6O7uFnx9fYXCwkJNW11dneDh4SGcP39exMjGrrKyUvDw8BBqamo0\nbd3d3cKcOXOEo0ePCrW1tYKHh4dw/fp1EaM0nMzMTGHdunV6t6WkpAhRUVFabVFRUUJycrIpQjOq\n1tZWYcGCBUJGRoYgCILk83r9+nUhKipKCAwMFEJCQrT+mA6Xx/Lycp19LyoqEnx9fYXu7m7T7MAI\nDLWvYWFhQnp6utbjExMThejoaM3/16xZI+zZs8dk8Y7FUPs63DFrSXkdKDU1VQgNDRU6Ojo0babK\nK7sMBqiqqkJ7ezsCAgI0bdOnT4erq6vmVrNUKRQKHDhwAC+88IKmzcrKCgDQ0tKCK1euwMbGBq6u\nrmKFaFDV1dWYOXOm3m1lZWVaOQaAwMBAyecYALKzs2FtbY0333wTACSf1/LycigUCpw4cQLTp0/X\n2jZcHsvKyuDq6opnn31Wsz0gIADt7e24fPmy8YMfoaH2NTk5GatXr9Zqk8lkaG1t1fy/pqYGbm5u\nJol1rIba1+GOWUvK6+OqqqrwySefIDU1Fba2tpp2U+WVBcEA/V/84OLiotXu7Ows+S9CcnR0REhI\nCGSyR2k/dOgQurq6oFKpUF1dDXt7e2zZsgUqlQphYWE4ePAg1Gq1iFGPXnV1NRoaGhAZGYkFCxYg\nJiYGFy9eBPAwz5aY47t37yI/Px9vvvmm5g+K1PO6YsUKpKenY+rUqTrbhsvj7du34ezsrLMdAG7e\n1P8d8mIaal8DAgK0ToANDQ04efIkFi5cCODhvra0tKCkpARLly5FcHAwtmzZgtu3b5ss/pEYal+H\nO2YtKa+P27dvH/z9/REcHKxpM2VeWRAM0NnZCZlMhokTJ2q1W1tbo7u7W6SojOP06dPYtWsXYmNj\n4ebmhpqaGnR0dEClUuF3v/sd1q5di7179yIrK0vsUEesq6sLdXV1+Pbbb/H2228jJycHzs7OiIqK\nwtWrV9HV1QVra2ut51hCjv/0pz/ByckJP/rRjzRtlpTXgYbLY2dnJ5566imt7RMnToSVlZWkc93c\n3IwNGzbgO9/5Dt544w0AD0+iACCXy5GZmYnf/va3uHbtGmJiYtDV1SVmuCM23DFriXmtq6vDmTNn\nsGHDBq12U+Z13H7b4WBsbGygVqvR29sLufzRr6enp0frFo7UFRUVISUlBcuXL8fWrVsBAGlpaejo\n6ICDgwMAQKlUoq2tDfv370dcXJyme0EKbGxsUFpaCmtra80JY8eOHaisrMTHH3+Mp556Cg8ePNB6\njiXk+NNPP8XKlSu1ClpLyutAw+XRxsYGPT09WtsfPHgAQRAwadIkk8VpSHV1dVi/fj26urqQn58P\ne3t7AIBKpcLZs2fxzDPPaB7r7u6ORYsWobi4GK+88opYIY/YcMesJeb1xIkTUCgUUKlUWu2mzCvv\nEAygUCgAPPp65H6NjY06tyalKicnB4mJiVi9ejXS09M1XQhyuVzzAeynVCrR3t6OtrY2MUIdk6ef\nflrr6lEmk8Hd3R03b96EQqFAY2Oj1uOlnuPq6mrU1tbi1Vdf1Wq3tLw+brg8fve739X7WQZ0uwWl\noLKyEq+99hpkMhn+/Oc/a3UhANA6aQAPb6M7Ojqa5W30oQx3zFpaXoGHd2yXLVumt0A3VV5ZEAww\na9Ys2NnZ4d///rem7caNG6ivr8e8efNEjMwwcnNzsXv3bsTHxyMlJUXr4IuMjMQHH3yg9fhLly7B\n2dlZ58Np7ioqKuDn54eKigpNW19fH6qqqvDiiy/C398fpaWlWs85d+4c5s6da+pQDaasrAxTp07V\nGXxkSXkdaLg8+vv7o66uTusP57lz52BnZ4dZs2aZNNaxunr1Kn72s5/B1dUVH3/8sebipd9HH30E\nlUqldcekvr4ezc3NePHFF00d7pgMd8xaUl4BoKOjA5cvX0ZQUJDONlPmlQXBANbW1li7di3S09NR\nUlKCyspKJCQkICAgAD4+PmKHNyZVVVXIzMzEqlWrEBkZiaamJs1PR0cHlixZgsOHD+PYsWO4fv06\njhw5gry8PMTHx4sd+ojNmjULrq6uSE1NxYULF1BdXY3ExETcu3cPr7/+OqKiolBWVoa9e/fi6tWr\n2LNnDy5cuICf/vSnYoc+apcvX4aHh4dOuyXldaDh8ujr6wsfHx/86le/QmVlJYqLi5GRkYHY2Fid\nsQfmbtu2bbC2tkZ6ejp6e3s1n93m5mYAQEhICNrb25GUlISrV6/i/PnziIuLg7+/PxYsWCBy9CMz\n3DFrSXkFgG+++QZ9fX16P7+mzCvHEOjxy1/+Er29vdi6dSt6e3uxcOFCpKamih3WmJ06dQp9fX0o\nLCxEYWGh1rbNmzdj06ZNkMvlyMnJQUNDA6ZNm4bExERERESIFPHoyeVy5OXlIT09HRs3bkRnZyf8\n/PyQn58PJycnODk5ISsrCxkZGcjNzcXMmTOxf/9+yUzZ0qexsRGTJ0/WaV+/fr3F5HUgpVI5ZB6t\nrKyQlZWFd999F+vWrYOdnR0iIiI0UzKl4n//+x8uXboEAFi6dKnWthkzZuCLL77AjBkzcPDgQezc\nuRMRERGYOHEiQkND8c4774gR8pgMd8xaSl779Xd/TJkyRWebKfNqJQiCYPBXJSIiIklhlwERERGx\nICAiIiIWBERERAQWBERERAQWBERERAQWBERERAQWBEQW65133oFSqRzyJzo6GgAQHR2NmJgYUeO9\nf/8+QkNDUVtbO+rXuHHjBpRKJY4fP/7Ez2lpaUFoaCjq6upG/b5EloDrEBBZqOvXr2tWsQOA9957\nDxMmTEBycrKm7emnn4a7uztqampgZWUl6sJMb731FlxcXPD222+P+jV6enrw3//+FzNmzNBZ/30o\n+fn5+Pzzz/HRRx9J+sueiMaCBQHROBEdHY0JEybgD3/4g9ih6Lh48SLWrl2LkpKSEZ3IDaWnpwfB\nwcF477338PLLL5v8/YnMAbsMiEiny0CpVOLw4cPYsmULfH19ERQUhKysLHz77bdITEzUrKOekZGB\nx68p7t27h+TkZMyfPx/e3t5Ys2YNzp8/P+z75+Xl4Qc/+IFWMRAaGors7Gy8//77CAgIgL+/P7Zv\n347Ozk6kpaUhMDAQgYGBSEpKQnd3NwDdLoOioiJ4eXmhvLwcERER8PLywuLFi/H73/9e6/2tra3x\n8ssv48CBA2P5NRJJGgsCItIrLS0Njo6OyM7OxuLFi7Fv3z6Eh4fD1tYWWVlZWLJkCfLy8vC3v/0N\nANDd3Y2YmBh8+eWXSEhIwN69ezF58mTExMTg4sWLg75Pe3s7zpw5o/fKPC8vD/fv38eePXuwevVq\nFBQU4Cc/+Qlu3ryJnTt3Ijo6Gn/5y19QUFAw6Ov39vYiISEBYWFhyM3NhZ+fH9LS0nD27Fmtxy1d\nuhQVFRW4du3a6H5hRBLHLzciIr08PT2RlJQE4OG3RxYVFcHJyUnzRV9BQUE4ceIEvv76a7zyyis4\nfvw4vvnmGxw5cgReXl4AgEWLFiE8PByZmZk4ePCg3vcpKyvDgwcP4O3trbPN0dERGRkZkMlkCAwM\nxOHDh/HgwQN8+OGHkMvlUKlU+Pzzz/H1118Puh9qtRpxcXFYtWoVAMDPzw9ffPEF/v73v2P+/Pma\nx82ePRvAw6/Rff7550f+CyOSON4hICK9Hj9BOzo6YsKECVptVlZWmDx5MlpbWwEAZ8+ehYuLC773\nve+ht7cXvb29UKvVWLx4MUpLS9HT06P3fW7cuAEAmD59us42Ly8vyGQP/0zJZDI4OjrC09MTcvmj\na5kpU6ZoYhiMn5+f5t/W1tZ45pln0NnZqfUYe3t7ODg4oL6+fsjXIrJUvENARHrZ2dnptE2aNGnQ\nx9+/fx+3bt2Cp6en3u337t2Di4uLTntbWxsAwNbWdswxDGbga8tkMqjVar2P64+HaLxhQUBEBmFv\nbw83NzekpaXp3e7o6Dhke1tbGxwcHIwW35NobW0dNE4iS8cuAyIyiHnz5qGhoQHOzs7w8vLS/Jw+\nfRqHDh3CxIkT9T5v2rRpAIBbt26ZMlwdLS0t6OzshEKhEDUOIrGwICAig1i5ciVcXFwQGxuL48eP\n41//+hd27NiBnJwcPPvss4Mu+DN37lzY2Ng80fREYyovLwcAqFQqUeMgEgsLAiIyCDs7OxQUFGDO\nnDnYsWMH3njjDfzjH/9ASkoK4uLiBn2era0tFi1ahJKSEhNGq6ukpATe3t68Q0DjFlcqJCLRXbx4\nEWvWrMGZM2f0Djw0ts7OTixcuBA7duzAD3/4Q5O/P5E54B0CIhKdt7c3XnrpJZ0VBE3l8OHDcHd3\nx0svvSTK+xOZA94hICKz0NzcjJUrV+KPf/wjnnvuOZO97/379/HjH//Y5O9LZG5YEBARERG7DIiI\niIgFAREREYEFAREREYEFAREREYEFAREREQH4P03Ltvy5AvD7AAAAAElFTkSuQmCC\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": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "I = interpolate(data.insulin)" + ] + }, + { + "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": "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\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\nYWqhOa7rtAtJLEIYKUOsoWZsKiuxqh9W0HiVmDG9x8YUy5B2Q2qtoHT9Pd3XiUWpVAKQkZHRyJEI\ncX9wx51Qj1AOXTpE5o1MWtq2pH+b/rir3UlJSbn9DcRdcbvfU+VnZuVnaHX3dWLJzq5YHj8sLKyR\nIxHi/rWb3Y0dgtBBbb+n7OxsHnjggRrH7+t5LMXFxZw6dQoXFxdMTW/f2SeEEKKiUsnOzqZz585Y\nWdXs27mvE4sQQgjDM7n9JUIIIYTuJLEIIYQwKEksQgghDEoSixBCCIOSxCKEEMKgJLFUo1Qq+fDD\nD+nTpw/dunXj9ddfJydH9yXChbaEhAT8/Pxq/BMdHQ3A0aNHCQ0Nxd/fn5CQEA4dOtTIEd9b5syZ\nw7vvvqt17Hbv6ZUrV5g6dSqBgYE89NBDREREUF6uvSikqFDb+/vcc8/V+O+56jXy/gJqoWX58uXq\nRx55RH306FH1qVOn1MOHD1e/8MILjR3WPWvfvn3qoKAgdVZWltY/paWl6vj4eHXnzp3V//73v9UJ\nCQnq5cuXqzt16qQ+f/58Y4dt9FQqlXrFihXq9u3bq9955x3NcV3e0xEjRqhHjhypjouLU//666/q\n3r17q5ctW9YYP4bRquv9ValU6q5du6r37Nmj9d9zfn6+5hp5f9VqSSxVlJSUqLt166besWOH5lhy\ncrK6ffv26piYmEaM7N61fPlydVhYWK3nZs+erR41apTWsVGjRqlnzZp1N0K7ZyUlJalHjRqlDgoK\nUg8YMEDrg+927+nx48fV7du3VyclJWnO79y5U92tWzd1SUnJ3fkBjNyt3t/Lly/XeP+qkve3gjSF\nVXH27Flu3LhBr169NMdatWqFp6enpulG6Cc+Ph5vb+9az0VHR2u91//X3t3GNHWFARz/U6CUIWhZ\nUoZMZyIGDLRoUUBFDahsMXE4fIkQUPiyD0uYsRozozPxJZGOGSMSXzJ82QtG4mIkftJlOjHGF5Ao\nwjaHJpuAIImCIlYo9u6D2lFbxEEtVp5f0gTOueeehyfAw7nl3gOQmJgoue5HdXU14eHhnDhxwmn3\nvv5yWlVVRUREBGPGjLH3JyQk0NnZyR9//PHmg/cCr8rvX3/9hUajISIiwuVYye8zw/pZYS978WC1\nsLAwh3adTicPqhyg+vp6urq6WLp0KU1NTUyYMAGTyYTBYKClpUVyPQDp6emkp6e77Osvp3fv3kWn\n0zn1AzQ3NxMXF/cGIvYur8pvfX09wcHBrFmzhsuXL6PVasnIyGDFihWoVCrJ73OyYunFYrGgUqnw\n9/d3aFer1XR1dQ1RVN7ryZMnNDQ08OjRI9auXcuePXvQ6XRkZ2dz69Ytnjx5glrt+Ph0yfXg9JdT\ni8VCQECAQ7+/vz8+Pj6S99dw8+ZNHj9+THJyMvv37ycrK4uioiKKi4sBye8LsmLpRaPRYLPZ6Onp\nwc/vv9R0d3cTGOiZ/cXfJRqNhsrKStRqtf2XXUFBAXV1dRw+fJiAgACsVqvDGMn14PSXU41GQ3e3\n41a2VqsVRVF47733PBantzKbzTx+/JiQkBAAoqKi6OjoYO/eveTn50t+n5MVSy/h4eHAf4/Tf6G1\ntdXp8oJ4PSNGjHD4C1qlUhEZGUlzczPh4eG0trY6HC+5Hpz+cvrBBx+4/P4G50vAwpmfn5+9qLwQ\nFRVFZ2cnHR0dkt/npLD0Eh0dTVBQEJcvX7a3NTY20tTUxNSpb8fObt6ktrYWo9FIbW2tve3p06f8\n+eefTJgwgfj4eCorKx3GXLp0iSlTpng61HdGfzmNj4+noaGB5uZmh/6goCCio6M9Gqs3Wrp0KVu3\nbnVou379OjqdjpCQEMnvc1JYelGr1WRlZfHNN99QUVFBXV0dJpOJhIQEJk2aNNTheZ3o6GgiIiLY\nuHEj165do76+nnXr1tHW1sby5cvJzs6mqqqKoqIibt26xc6dO7l27RorVqwY6tC9Vn85nTx5MpMm\nTWLVqlXU1dVx9uxZCgsLycvLc3pvRjibN28eZWVlHD9+nNu3b3P06FFKSkr48ssvAcmv3VD/v/Pb\nxmq1Ktu2bVMSEhIUo9GorFy5Url3795Qh+W1WlpaFJPJpCQlJSlxcXFKXl6ecuPGDXv/mTNnlPnz\n5yuxsbHKp59+qpw/f34Io/U+2dnZDvdZKEr/OW1tbVW++OILJS4uTpk+fbqyfft25enTp54M22u8\nnF+bzaYcOHBASUtLU2JjY5W0tDTlyJEjDmMkv4oiG30JIYRwK7kUJoQQwq2ksAghhHArKSxCCCHc\nSgqLEEIIt5LCIoQQwq2ksAghhHArKSxiWPvqq69c7nDZ+5WTkwNATk4Oubm5Qxpve3s7qamp/PPP\nPwM+R2NjI1FRUZSXl7/2mAcPHpCamkpDQ8OA5xXDh9zHIoa127dvc//+ffvnmzZtwtfXlw0bNtjb\nRowYQWRkJDdv3sTHx4fx48cPRagArF69mrCwMNauXTvgc3R3d/P7778zduxYQkNDX3vcTz/9xMmT\nJ/nhhx/w8fEZ8Pzi3SeFRYhecnJy8PX15dChQ0MdipOamhqysrKoqKj4XwXBXbq7u5k9ezabNm0i\nLS3N4/ML7yGXwoR4TS9fCouKiqKsrIw1a9YwefJkkpKSKC4u5tGjR6xbt474+HhmzJhBYWEhvf9+\na2trY8OGDUybNg2DwUBmZiZXrlzpd/6SkhKmT5/uUFRSU1PZvXs3W7ZsISEhgfj4eDZv3ozFYsFs\nNpOYmEhiYiLr16+37wfy8qWwY8eOodfrqa6uZsmSJej1elJSUjhw4IDD/Gq1mrS0NPbt2zeYNIph\nQAqLEINgNpvRarXs3r2blJQUdu3axeLFiwkMDKS4uJh58+ZRUlLCqVOnAOjq6iI3N5fffvsNk8lE\nUVERI0eOJDc3l5qamj7n6ezs5PTp0y5XCiUlJbS3t7Nz506WLVtGaWkpn332Gc3NzWzfvp2cnBx+\n/vlnSktL+zx/T08PJpOJBQsW8N1332E0GjGbzVy4cMHhuE8++YTa2lr+/vvvgSVMDAuy0ZcQgxAT\nE8P69euBZ09zPnbsGO+//z4bN24EICkpiRMnTnD16lU+/vhjysvLuXHjBkePHkWv1wMwa9YsFi9e\nzI4dOzh48KDLeaqqqrBarRgMBqc+rVZLYWEhKpWKxMREysrKsFqtfPvtt/j5+ZGcnMzJkye5evVq\nn1+HzWYjPz+fRYsWAWA0Gvnll184c+YM06ZNsx8XGxsLPHsU/Lhx4/5/wsSwICsWIQah9y96rVaL\nr6+vQ5uPjw8jR47k4cOHAFy4cIGwsDAmTpxIT08PPT092Gw2UlJSqKysdNp98IXGxkYAPvzwQ6c+\nvV6PSvXsR1mlUqHVaomJiXHYBXXUqFH2GPpiNBrtH6vVakJDQ7FYLA7HBAcHExISQlNT0yvPJYY3\nWbEIMQhBQUFOba/agra9vZ2WlhZiYmJc9re1tbncabCjowPA5bbN/zeGvrx8bpVKhc1mc3nci3iE\ncEUKixAeFBwczPjx4zGbzS77tVrtK9s7Ojqctsb1tIcPH/YZpxAgl8KE8KipU6dy584ddDoder3e\n/vr111/58ccf8ff3dzlu9OjRALS0tHgyXCcPHjzAYrEQHh4+pHGIt5sUFiE8KCMjg7CwMPLy8igv\nL+fixYsUFBSwZ88exowZ0+eNh1OmTEGj0bzWvyW/SdXV1QAkJycPaRzi7SaFRQgPCgoKorS0lLi4\nOAoKCvj88885d+4cX3/9Nfn5+X2OCwwMZNasWVRUVHgwWmcVFRUYDAZZsYhXkjvvhfASNTU1ZGZm\ncvr0aZdv8L9pFouFmTNnUlBQwNy5cz0+v/AesmIRwksYDAbmzJnjdEe8p5SVlREZGcmcOXOGZH7h\nPWTFIoQXuX//PhkZGXz//fd89NFHHpu3vb2dhQsXenxe4Z2ksAghhHAruRQmhBDCraSwCCGEcCsp\nLEIIIdxKCosQQgi3ksIihBDCrf4FLBNQahkEzlsAAAAASUVORK5CYII=\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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(245.5)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "G = interpolate(data.glucose)\n", + "G(7)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ts = linrange(0, 182, 2)\n", + "\n", + "plot(data.glucose, ' bo', label='glucose data')\n", + "plot(ts, G(ts), color='blue', label='interpolated')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration ($\\mu$U/mL)')\n" + ] + }, + { + "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": 13, + "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": 14, + "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": 15, + "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": 16, + "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": 17, + "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": 18, + "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": 18, + "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": 19, + "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": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 150 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": 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": 21, + "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": 22, + "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": 23, + "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": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-5.9399999999999995, 0.0)" + ] + }, + "execution_count": 24, + "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": 25, + "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": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource run_odeint" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run it." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 99.7 ms\n" + ] + } + ], + "source": [ + "%time run_odeint(system2, slope_func)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here are the results." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "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": 28, + "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": 29, + "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": 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \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": 30, + "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": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system3 = System(init=init, \n", + " k1=k1, k2=k2, k3=k3,\n", + " I=I, Gb=Gb, Ib=Ib,\n", + " t0=0, t_end=182, dt=1)\n", + "run_simulation(system3, update_func)" + ] + }, + { + "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", + "
GX
2-0.051625-49.331789
4-0.014801-39.214438
60.113775-9.385110
80.139376-2.763359
100.109220-2.004115
120.069648-1.278311
140.019481-0.726602
16-0.040906-0.126634
19-0.1467940.311986
22-0.2545800.312622
27-0.4199900.516914
32-0.5572270.273386
42-0.7612570.751189
52-0.8944531.082737
62-0.9203890.881158
72-0.8671591.068144
82-0.7751620.981869
92-0.6643371.072775
102-0.5390650.271689
122-0.3354840.952389
142-0.194963-1.890950
162-0.0931302.248757
182-0.0387410.598199
\n", + "
" + ], + "text/plain": [ + " G X\n", + "2 -0.051625 -49.331789\n", + "4 -0.014801 -39.214438\n", + "6 0.113775 -9.385110\n", + "8 0.139376 -2.763359\n", + "10 0.109220 -2.004115\n", + "12 0.069648 -1.278311\n", + "14 0.019481 -0.726602\n", + "16 -0.040906 -0.126634\n", + "19 -0.146794 0.311986\n", + "22 -0.254580 0.312622\n", + "27 -0.419990 0.516914\n", + "32 -0.557227 0.273386\n", + "42 -0.761257 0.751189\n", + "52 -0.894453 1.082737\n", + "62 -0.920389 0.881158\n", + "72 -0.867159 1.068144\n", + "82 -0.775162 0.981869\n", + "92 -0.664337 1.072775\n", + "102 -0.539065 0.271689\n", + "122 -0.335484 0.952389\n", + "142 -0.194963 -1.890950\n", + "162 -0.093130 2.248757\n", + "182 -0.038741 0.598199" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff = system3.results - system2.results\n", + "percent_diff = diff / system2.results * 100\n", + "percent_diff.dropna()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#By decreasing dt to 1 instead of 2 in the original system (renamed to system3) the % errors seemed to decrease" + ] + }, + { + "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": 35, + "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": 36, + "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": 37, + "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": 38, + "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": 49, + "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": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(290, 0.03, 0.02, 1e-05)" + ] + }, + "execution_count": 41, + "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": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(290, 0.03, 0.02, 1e-05)\n" + ] + }, + { + "data": { + "text/plain": [ + "time\n", + "8 4.385049\n", + "10 17.385689\n", + "12 11.875391\n", + "14 7.883104\n", + "16 7.432604\n", + "19 -1.688894\n", + "22 6.430723\n", + "27 -1.858707\n", + "32 4.627308\n", + "42 0.272257\n", + "52 4.125928\n", + "62 7.310554\n", + "72 9.102455\n", + "82 12.434359\n", + "92 5.498085\n", + "102 5.712650\n", + "122 4.844866\n", + "142 6.356758\n", + "162 5.136930\n", + "182 1.795663\n", + "dtype: float64" + ] + }, + "execution_count": 42, + "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": 43, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%psource fit_leastsq" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000004e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000004e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000003e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000001e-05]\n", + "[ 2.78224727e+02 2.85801825e-02 1.61589429e-02 1.19289840e-05]\n", + "[ 2.78224731e+02 2.85801825e-02 1.61589429e-02 1.19289840e-05]\n", + "[ 2.78224727e+02 2.85801829e-02 1.61589429e-02 1.19289840e-05]\n", + "[ 2.78224727e+02 2.85801825e-02 1.61589432e-02 1.19289840e-05]\n", + "[ 2.78224727e+02 2.85801825e-02 1.61589429e-02 1.19289842e-05]\n", + "[ 2.71951893e+02 2.68943464e-02 1.28042303e-02 1.03928810e-05]\n", + "[ 2.71951897e+02 2.68943464e-02 1.28042303e-02 1.03928810e-05]\n", + "[ 2.71951893e+02 2.68943468e-02 1.28042303e-02 1.03928810e-05]\n", + "[ 2.71951893e+02 2.68943464e-02 1.28042305e-02 1.03928810e-05]\n", + "[ 2.71951893e+02 2.68943464e-02 1.28042303e-02 1.03928811e-05]\n", + "[ 2.71443394e+02 2.69030677e-02 1.26482637e-02 1.04193915e-05]\n", + "[ 2.71443398e+02 2.69030677e-02 1.26482637e-02 1.04193915e-05]\n", + "[ 2.71443394e+02 2.69030681e-02 1.26482637e-02 1.04193915e-05]\n", + "[ 2.71443394e+02 2.69030677e-02 1.26482639e-02 1.04193915e-05]\n", + "[ 2.71443394e+02 2.69030677e-02 1.26482637e-02 1.04193917e-05]\n", + "[ 2.71712741e+02 2.69019185e-02 1.24302337e-02 1.05307739e-05]\n", + "[ 2.71712745e+02 2.69019185e-02 1.24302337e-02 1.05307739e-05]\n", + "[ 2.71712741e+02 2.69019189e-02 1.24302337e-02 1.05307739e-05]\n", + "[ 2.71712741e+02 2.69019185e-02 1.24302339e-02 1.05307739e-05]\n", + "[ 2.71712741e+02 2.69019185e-02 1.24302337e-02 1.05307740e-05]\n", + "[ 2.71841622e+02 2.68015619e-02 1.21756047e-02 1.07056217e-05]\n", + "[ 2.71841626e+02 2.68015619e-02 1.21756047e-02 1.07056217e-05]\n", + "[ 2.71841622e+02 2.68015623e-02 1.21756047e-02 1.07056217e-05]\n", + "[ 2.71841622e+02 2.68015619e-02 1.21756049e-02 1.07056217e-05]\n", + "[ 2.71841622e+02 2.68015619e-02 1.21756047e-02 1.07056219e-05]\n", + "[ 2.71722563e+02 2.67317277e-02 1.18108500e-02 1.06903270e-05]\n", + "[ 2.71827386e+02 2.67803404e-02 1.19921543e-02 1.06990976e-05]\n", + "[ 2.71859602e+02 2.67976625e-02 1.20801103e-02 1.07032846e-05]\n", + "[ 2.71863092e+02 2.68026355e-02 1.21300274e-02 1.07056075e-05]\n", + "[ 2.71857182e+02 2.68027413e-02 1.21534664e-02 1.07066721e-05]\n", + "[ 2.71857186e+02 2.68027413e-02 1.21534664e-02 1.07066721e-05]\n", + "[ 2.71857182e+02 2.68027417e-02 1.21534664e-02 1.07066721e-05]\n", + "[ 2.71857182e+02 2.68027413e-02 1.21534666e-02 1.07066721e-05]\n", + "[ 2.71857182e+02 2.68027413e-02 1.21534664e-02 1.07066723e-05]\n", + "[ 2.71898905e+02 2.68013322e-02 1.21544446e-02 1.07084438e-05]\n", + "[ 2.71898909e+02 2.68013322e-02 1.21544446e-02 1.07084438e-05]\n", + "[ 2.71898905e+02 2.68013326e-02 1.21544446e-02 1.07084438e-05]\n", + "[ 2.71898905e+02 2.68013322e-02 1.21544448e-02 1.07084438e-05]\n", + "[ 2.71898905e+02 2.68013322e-02 1.21544446e-02 1.07084439e-05]\n", + "[ 2.71898433e+02 2.67985448e-02 1.21544443e-02 1.07084478e-05]\n", + "[ 2.71898437e+02 2.67985448e-02 1.21544443e-02 1.07084478e-05]\n", + "[ 2.71898433e+02 2.67985452e-02 1.21544443e-02 1.07084478e-05]\n", + "[ 2.71898433e+02 2.67985448e-02 1.21544444e-02 1.07084478e-05]\n", + "[ 2.71898433e+02 2.67985448e-02 1.21544443e-02 1.07084480e-05]\n", + "[ 2.71916930e+02 2.67987318e-02 1.21542838e-02 1.07088289e-05]\n", + "[ 2.71907097e+02 2.67986221e-02 1.21543757e-02 1.07086105e-05]\n", + "[ 2.71902239e+02 2.67985768e-02 1.21544154e-02 1.07085162e-05]\n", + "[ 2.71900248e+02 2.67985597e-02 1.21544307e-02 1.07084799e-05]\n", + "[ 2.71899292e+02 2.67985518e-02 1.21544379e-02 1.07084629e-05]\n", + "[ 2.71898837e+02 2.67985481e-02 1.21544413e-02 1.07084549e-05]\n", + "[ 2.71898624e+02 2.67985464e-02 1.21544429e-02 1.07084511e-05]\n", + "[ 2.71898523e+02 2.67985456e-02 1.21544436e-02 1.07084494e-05]\n", + "[ 2.71898476e+02 2.67985452e-02 1.21544440e-02 1.07084486e-05]\n", + "[ 2.71898453e+02 2.67985450e-02 1.21544441e-02 1.07084482e-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": 45, + "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": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap08-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nWrZsSWJiotGM5F988QWxsbFG1VLlHnjgAb7++mtycnKwt7cH4MyZM4byc+fOcfjwYXbu3Ennzp0N\n7y09Pd2QeG69R2/YsIEnn3ySefPmGbZt3bq1xnprVZlA3nrrLUNwOTk5LF++nJ49exIaGoqTkxPZ\n2dkcPHiQH374gblz55p0saSkJF588UVat25N165dAcjLyyM+Pp4RI0ZQWlrKsVu6dkRHRxseIwMD\nA1m+fDnJycm4uroaym1tbfHx8bnzdy+EMElQUM0njFv16NGDLl26MHv2bObNm4derzfciCv7cOvl\n5YWNjQ1r165lxowZXL58mY0bNxrKbWxseOqpp1ixYgUODg60adOGTZs2kZOTY2hnGDFiBJGRkYwZ\nM4Zr167x+uuv06dPHzw9PTl9+jSRkZE0bdqUwMBArl69yrlz5xg3bhwAYWFhLF26FDc3N3r27Mmv\nv/7K0qVLmTJlSqXvLzQ0lPfff5/Zs2fz0ksvkZqayqpVqwzlTk5OaDQa9u3bh729Penp6axYsYKS\nkhJDTUx59dfp06dp3749Li4unDhxgvPnz2NlZcU333zD3r17ad68efX8Um6lmGDatGnKq6++WmnZ\n4sWLlaefftqU0yg6nU556qmnlGHDhim//vqrcvbsWeWZZ55R+vfvr9y4cUM5f/680rlzZ+W9995T\n4uLilJUrVypdu3ZV4uLiFEVRFL1er4wdO1Z54oknlDNnzig//PCD0qNHD2XVqlV/ed2EhATFy8tL\nSUhIMClOIUT9kJSUpEydOlXp1q2b8vDDDyuffvqp4u3trezevVtRFEWZM2eO0f3nP//5j/LYY48p\nnTt3VkaNGqX85z//Uby8vJTk5GRFURSluLhYWbJkifLQQw8pvr6+yoQJE5QzZ84Yjv/xxx+VkSNH\nKp07d1Yefvhh5a233lIKCgoM5evXr1f69++vdO7cWendu7eyfPlyRavVGso3bdqkDBgwQOncubPy\n6KOPKmvXrlX0en2V7+/y5cvKM888o3Tr1k3p37+/snXrVqN71a5du5R+/fopXbp0Ufr166csX75c\nmTVrlvL3v/9dURRFycvLUyZMmKB07txZ+eSTT5QrV64oEydOVHx9fZUePXoozz33nLJt2zbF29tb\nuXbt2h3//G937zQpgfj6+iqHDx+utOzw4cNKt27dTA4oMzNTmTNnjtKjRw/F399fmT59upKSkmIo\n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\nFHIlJZcrKbkcAlo0s6atqx1tXe1o6WiDSiU9uYS41b3UxNRpAtmyZUuFbX379v3LubWcnJx4//33\n7wUQjkwAABIkSURBVPnaycmVb09KuudTixqUkqLC1toCW2sLFEWhsLiUvIISbuRXrLrKyC4kI7uQ\n47Gp2FiZ09a1KW1c7Gjt0lSquoTg3mti6tUTSG1ydS37Yd3qlsHxop65+femUqmwsTLHxsqcQA9b\n/j7YlsvJOVxOyuVa+g2jpXULirSci8/iXHwWZmoV7s5NaOdqT2uXptjZWsjTiWiU7rUmptEmkNBQ\n48xbbtCg2o9FmO6vfm92thZ06+BEtw5OlGh1JKTmcTk5l8vJuRQWlxr21ekVrqbkcTUlDwArCw0t\nmlnR3N6aFvbWtGhmjaOdpdGUK0JUl7rsvKMoCjq9QolWR4lWz+/xarQ6BUUBG0uN4W/e1JqYRptA\njEdGlz15DBok7R/1nam/NwtzMzw9ygYp6vUKadcLiE8qSyaZOYVcibPm3Ck7cq+bY+egpZNfLm06\n/NlFXK1S4WBnRQt7K1o0K0sqze2tZPyJuCf3UmWk0+kp/uPGX1KqQ1uqp0Sro1irQ6stL9NRUqpH\n+8f3xVo92lKd0XE3LzOdXtCSnKyyv2kztZqOrZthplabXBPTaBMIVDYyWjQEd/p7U6tVuDS3xaW5\nLT27uvL9j1oO7ShFV1iCSlVKTpY5Px9sDmTSpkMhAHpFITOnkMycQi5cvW44l62V+R8JpeyJxamZ\nNfZNLGWqFVEpRVEo1enRlpbd4LfvVJNfqEKv16PTK+j1CjpF4eNPdRSY5RgSQMlNyaD8+5urZKtL\nJ7/cP/72QafXo9MpmKlNr4lp1AlENE4//WCOo705jvbWKIqCtlRPUUkpuUmWePbJID270DDm5Fb5\nRVryU7RcSck1bNOYqbH//+3de1BU5f8H8Pc5e2GRW0sGIZimKDbc5CILihqaZP3GKEJ/ikvqzHf6\noxl1IsfJvMxYzQSRkeRX6xfZlUZG86s5zXesyQvZzxTkqwR5AX+TXOKmggLuspfz/P7Yi3vYRdYV\ndsH9vGbOsDzP2T3PfliezznPnnMefx/4+Urh7yuDn0IGP1/zopDBf5wMCrn0nknmYbwmaTS9p/tp\ny8BOXz9gj9+0h28uM/+0dPR6mw5fbxCgMwiii13/91wEHF372tkF/HH1+gi9ezGe5+Ajk0Am5ZGc\n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\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": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000004e+02 3.00000000e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000004e-02 2.00000000e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000003e-02 1.00000000e-05]\n", + "[ 2.90000000e+02 3.00000000e-02 2.00000000e-02 1.00000001e-05]\n", + "[ 2.62493674e+02 2.01273810e-02 2.45144666e-03 1.92369457e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162655e+02 2.74362052e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362056e-02 1.33003595e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003597e-02 1.34043117e-05]\n", + "[ 2.68162651e+02 2.74362052e-02 1.33003595e-02 1.34043119e-05]\n", + "[ 2.68130428e+02 2.67895726e-02 1.33400852e-02 1.32669041e-05]\n", + "[ 2.68130432e+02 2.67895726e-02 1.33400852e-02 1.32669041e-05]\n", + "[ 2.68130428e+02 2.67895730e-02 1.33400852e-02 1.32669041e-05]\n", + "[ 2.68130428e+02 2.67895726e-02 1.33400854e-02 1.32669041e-05]\n", + "[ 2.68130428e+02 2.67895726e-02 1.33400852e-02 1.32669043e-05]\n", + "[ 2.67997694e+02 2.67968711e-02 1.33402062e-02 1.32686682e-05]\n", + "[ 2.67997698e+02 2.67968711e-02 1.33402062e-02 1.32686682e-05]\n", + "[ 2.67997694e+02 2.67968715e-02 1.33402062e-02 1.32686682e-05]\n", + "[ 2.67997694e+02 2.67968711e-02 1.33402064e-02 1.32686682e-05]\n", + "[ 2.67997694e+02 2.67968711e-02 1.33402062e-02 1.32686684e-05]\n", + "[ 2.67672502e+02 2.67754695e-02 1.33462575e-02 1.30549489e-05]\n", + "[ 2.67672506e+02 2.67754695e-02 1.33462575e-02 1.30549489e-05]\n", + "[ 2.67672502e+02 2.67754699e-02 1.33462575e-02 1.30549489e-05]\n", + "[ 2.67672502e+02 2.67754695e-02 1.33462577e-02 1.30549489e-05]\n", + "[ 2.67672502e+02 2.67754695e-02 1.33462575e-02 1.30549491e-05]\n", + "[ 2.67217562e+02 2.67833180e-02 1.33475193e-02 1.30616267e-05]\n", + "[ 2.67217566e+02 2.67833180e-02 1.33475193e-02 1.30616267e-05]\n", + "[ 2.67217562e+02 2.67833184e-02 1.33475193e-02 1.30616267e-05]\n", + "[ 2.67217562e+02 2.67833180e-02 1.33475195e-02 1.30616267e-05]\n", + "[ 2.67217562e+02 2.67833180e-02 1.33475193e-02 1.30616269e-05]\n", + "[ 2.67287259e+02 2.67209458e-02 1.33503284e-02 1.30530005e-05]\n", + "[ 2.67287263e+02 2.67209458e-02 1.33503284e-02 1.30530005e-05]\n", + "[ 2.67287259e+02 2.67209462e-02 1.33503284e-02 1.30530005e-05]\n", + "[ 2.67287259e+02 2.67209458e-02 1.33503286e-02 1.30530005e-05]\n", + "[ 2.67287259e+02 2.67209458e-02 1.33503284e-02 1.30530007e-05]\n", + "[ 2.67150330e+02 2.67198062e-02 1.33530440e-02 1.30662792e-05]\n", + "[ 2.67150334e+02 2.67198062e-02 1.33530440e-02 1.30662792e-05]\n", + "[ 2.67150330e+02 2.67198066e-02 1.33530440e-02 1.30662792e-05]\n", + "[ 2.67150330e+02 2.67198062e-02 1.33530442e-02 1.30662792e-05]\n", + "[ 2.67150330e+02 2.67198062e-02 1.33530440e-02 1.30662794e-05]\n", + "[ 2.67031138e+02 2.67344531e-02 1.33552780e-02 1.30524942e-05]\n", + "[ 2.67031142e+02 2.67344531e-02 1.33552780e-02 1.30524942e-05]\n", + "[ 2.67031138e+02 2.67344535e-02 1.33552780e-02 1.30524942e-05]\n", + "[ 2.67031138e+02 2.67344531e-02 1.33552782e-02 1.30524942e-05]\n", + "[ 2.67031138e+02 2.67344531e-02 1.33552780e-02 1.30524944e-05]\n", + "[ 2.66888053e+02 2.67257875e-02 1.33549781e-02 1.30488748e-05]\n", + "[ 2.66888057e+02 2.67257875e-02 1.33549781e-02 1.30488748e-05]\n", + "[ 2.66888053e+02 2.67257879e-02 1.33549781e-02 1.30488748e-05]\n", + "[ 2.66888053e+02 2.67257875e-02 1.33549783e-02 1.30488748e-05]\n", + "[ 2.66888053e+02 2.67257875e-02 1.33549781e-02 1.30488750e-05]\n", + "[ 2.67051825e+02 2.67191080e-02 1.33461293e-02 1.30579252e-05]\n", + "[ 2.66963229e+02 2.67212042e-02 1.33508866e-02 1.30546038e-05]\n", + "[ 2.66905667e+02 2.67224599e-02 1.33542516e-02 1.30520001e-05]\n", + "[ 2.66883099e+02 2.67234411e-02 1.33554538e-02 1.30502048e-05]\n", + "[ 2.66883103e+02 2.67234411e-02 1.33554538e-02 1.30502048e-05]\n", + "[ 2.66883099e+02 2.67234415e-02 1.33554538e-02 1.30502048e-05]\n", + "[ 2.66883099e+02 2.67234411e-02 1.33554540e-02 1.30502048e-05]\n", + "[ 2.66883099e+02 2.67234411e-02 1.33554538e-02 1.30502050e-05]\n", + "[ 2.66864783e+02 2.67225047e-02 1.33553566e-02 1.30497446e-05]\n", + "[ 2.66864787e+02 2.67225047e-02 1.33553566e-02 1.30497446e-05]\n", + "[ 2.66864783e+02 2.67225051e-02 1.33553566e-02 1.30497446e-05]\n", + "[ 2.66864783e+02 2.67225047e-02 1.33553568e-02 1.30497446e-05]\n", + "[ 2.66864783e+02 2.67225047e-02 1.33553566e-02 1.30497448e-05]\n", + "[ 2.66873370e+02 2.67230918e-02 1.33554079e-02 1.30496018e-05]\n", + "[ 2.66869021e+02 2.67227906e-02 1.33553816e-02 1.30496750e-05]\n", + "[ 2.66866616e+02 2.67226275e-02 1.33553674e-02 1.30497147e-05]\n", + "[ 2.66865640e+02 2.67225620e-02 1.33553616e-02 1.30497307e-05]\n", + "[ 2.66865181e+02 2.67225313e-02 1.33553589e-02 1.30497381e-05]\n", + "[ 2.66864967e+02 2.67225170e-02 1.33553577e-02 1.30497416e-05]\n", + "[ 2.66864868e+02 2.67225104e-02 1.33553571e-02 1.30497432e-05]\n", + "[ 2.66864824e+02 2.67225075e-02 1.33553568e-02 1.30497439e-05]\n", + "[ 2.66864803e+02 2.67225061e-02 1.33553567e-02 1.30497443e-05]\n", + "[ 2.66864792e+02 2.67225053e-02 1.33553566e-02 1.30497445e-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": [ + "def error_func2(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\n", + "best_params2 = fit_leastsq(error_func2, params, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "system5 = make_system(*best_params2, data)\n", + "run_odeint(system5, slope_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nUAIhhBDilf8HLO/KBARK0JEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system5.results.G, label='simulation')\n", + "plot(data.glucose, style='bo', label='glucose data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration (mg/dL)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#I switched error_func back to including the first 8 values and it only produced a negligible difference" + ] + }, + { + "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": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(145.0, 0.013361252357258952, 0.0066776782993440021, 6.5248723035641002e-06)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "params3 = .5*G0, .5*k1, .5*k2, .5*k3\n", + "params3" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1.45000000e+02 1.33612524e-02 6.67767830e-03 6.52487230e-06]\n", + "[ 1.45000000e+02 1.33612524e-02 6.67767830e-03 6.52487230e-06]\n", + "[ 1.45000000e+02 1.33612524e-02 6.67767830e-03 6.52487230e-06]\n", + "[ 1.45000002e+02 1.33612524e-02 6.67767830e-03 6.52487230e-06]\n", + "[ 1.45000000e+02 1.33612526e-02 6.67767830e-03 6.52487230e-06]\n", + "[ 1.45000000e+02 1.33612524e-02 6.67767840e-03 6.52487230e-06]\n", + "[ 1.45000000e+02 1.33612524e-02 6.67767830e-03 6.52487240e-06]\n", + "[ 2.68662088e+02 5.59950963e-02 -6.21575142e-03 7.12287708e-06]\n", + "[ 2.68662092e+02 5.59950963e-02 -6.21575142e-03 7.12287708e-06]\n", + "[ 2.68662088e+02 5.59950971e-02 -6.21575142e-03 7.12287708e-06]\n", + "[ 2.68662088e+02 5.59950963e-02 -6.21575133e-03 7.12287708e-06]\n", + "[ 2.68662088e+02 5.59950963e-02 -6.21575142e-03 7.12287719e-06]\n", + "[ 2.74548589e+02 5.57917388e-02 -1.20724812e-02 6.42068559e-06]\n", + "[ 2.74548589e+02 5.57917388e-02 -1.20724812e-02 6.42068559e-06]\n", + "[ 2.74297474e+02 5.58555084e-02 -9.98500040e-03 6.77755123e-06]\n", + "[ 2.72187537e+02 5.60767180e-02 -6.90070715e-03 7.21463582e-06]\n", + "[ 2.72187541e+02 5.60767180e-02 -6.90070715e-03 7.21463582e-06]\n", + "[ 2.72187537e+02 5.60767188e-02 -6.90070715e-03 7.21463582e-06]\n", + "[ 2.72187537e+02 5.60767180e-02 -6.90070704e-03 7.21463582e-06]\n", + "[ 2.72187537e+02 5.60767180e-02 -6.90070715e-03 7.21463593e-06]\n", + "[ 2.72185027e+02 5.60472842e-02 -6.89442915e-03 7.21557815e-06]\n", + "[ 2.72185031e+02 5.60472842e-02 -6.89442915e-03 7.21557815e-06]\n", + "[ 2.72185027e+02 5.60472851e-02 -6.89442915e-03 7.21557815e-06]\n", + "[ 2.72185027e+02 5.60472842e-02 -6.89442905e-03 7.21557815e-06]\n", + "[ 2.72185027e+02 5.60472842e-02 -6.89442915e-03 7.21557826e-06]\n", + "[ 2.72300353e+02 5.60416777e-02 -6.89320249e-03 7.20846314e-06]\n", + "[ 2.72300357e+02 5.60416777e-02 -6.89320249e-03 7.20846314e-06]\n", + "[ 2.72300353e+02 5.60416785e-02 -6.89320249e-03 7.20846314e-06]\n", + "[ 2.72300353e+02 5.60416777e-02 -6.89320239e-03 7.20846314e-06]\n", + "[ 2.72300353e+02 5.60416777e-02 -6.89320249e-03 7.20846324e-06]\n", + "[ 2.72412900e+02 5.60358523e-02 -6.90325233e-03 7.18837261e-06]\n", + "[ 2.72412904e+02 5.60358523e-02 -6.90325233e-03 7.18837261e-06]\n", + "[ 2.72412900e+02 5.60358531e-02 -6.90325233e-03 7.18837261e-06]\n", + "[ 2.72412900e+02 5.60358523e-02 -6.90325222e-03 7.18837261e-06]\n", + "[ 2.72412900e+02 5.60358523e-02 -6.90325233e-03 7.18837272e-06]\n", + "[ 2.72653792e+02 5.60350358e-02 -6.90421283e-03 7.19216716e-06]\n", + "[ 2.72653796e+02 5.60350358e-02 -6.90421283e-03 7.19216716e-06]\n", + "[ 2.72653792e+02 5.60350367e-02 -6.90421283e-03 7.19216716e-06]\n", + "[ 2.72653792e+02 5.60350358e-02 -6.90421273e-03 7.19216716e-06]\n", + "[ 2.72653792e+02 5.60350358e-02 -6.90421283e-03 7.19216727e-06]\n", + "[ 2.72568473e+02 5.60338156e-02 -6.91117453e-03 7.19068123e-06]\n", + "[ 2.72605023e+02 5.60342388e-02 -6.90679723e-03 7.19140843e-06]\n", + "[ 2.72629246e+02 5.60346184e-02 -6.90529060e-03 7.19179864e-06]\n", + "[ 2.72640897e+02 5.60348135e-02 -6.90473779e-03 7.19197597e-06]\n", + "[ 2.72647998e+02 5.60349352e-02 -6.90443893e-03 7.19208181e-06]\n", + "[ 2.72650947e+02 5.60349863e-02 -6.90432201e-03 7.19212535e-06]\n", + "[ 2.72652408e+02 5.60350117e-02 -6.90426552e-03 7.19214684e-06]\n", + "[ 2.72653118e+02 5.60350241e-02 -6.90423840e-03 7.19215727e-06]\n", + "[ 2.72653460e+02 5.60350300e-02 -6.90422539e-03 7.19216229e-06]\n", + "[ 2.72653464e+02 5.60350300e-02 -6.90422539e-03 7.19216229e-06]\n", + "[ 2.72653460e+02 5.60350309e-02 -6.90422539e-03 7.19216229e-06]\n", + "[ 2.72653460e+02 5.60350300e-02 -6.90422528e-03 7.19216229e-06]\n", + "[ 2.72653460e+02 5.60350300e-02 -6.90422539e-03 7.19216240e-06]\n", + "[ 2.72653420e+02 5.60350331e-02 -6.90422755e-03 7.19216134e-06]\n", + "[ 2.72653441e+02 5.60350315e-02 -6.90422643e-03 7.19216184e-06]\n", + "[ 2.72653451e+02 5.60350307e-02 -6.90422588e-03 7.19216208e-06]\n", + "[ 2.72653455e+02 5.60350307e-02 -6.90422588e-03 7.19216208e-06]\n", + "[ 2.72653451e+02 5.60350316e-02 -6.90422588e-03 7.19216208e-06]\n", + "[ 2.72653451e+02 5.60350307e-02 -6.90422578e-03 7.19216208e-06]\n", + "[ 2.72653451e+02 5.60350307e-02 -6.90422588e-03 7.19216218e-06]\n", + "[ 2.72653451e+02 5.60350286e-02 -6.90422589e-03 7.19216208e-06]\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_params3 = fit_leastsq(error_func, params3, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "system6 = make_system(*best_params3, data)\n", + "run_odeint(system6, slope_func)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n365PyXKTAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(system6.results.G, label='simulation')\n", + "plot(data.glucose, style='bo', label='glucose data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration (mg/dL)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#The simulation is relatively sensitive to the starting guesses\n", + "#plot above is with every starting guess multiplied by .5, and it is obvious that the data still fits, but it is a much rougher\n", + "#fit" + ] + }, + { + "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": 64, + "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": 65, + "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": 65, + "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": 70, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "I0 = 360\n", + "k = 0.25\n", + "gamma = 0.004\n", + "G_T = 80" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def make_system2(I0, k, gamma, G_T, data):\n", + " init = State(I=I0)\n", + " system = System(init=init,\n", + " k=k,\n", + " gamma=gamma,\n", + " G_T=G_T,\n", + " I=interpolate(data.insulin),\n", + " ts=data.index)\n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "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
I<scipy.interpolate.interpolate.interp1d object...
tsInt64Index([ 0, 2, 4, 6, 8, 10, 12,...
\n", + "
" + ], + "text/plain": [ + "init I 360\n", + "dtype: int64\n", + "k 0.25\n", + "gamma 0.004\n", + "G_T 80\n", + "I " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "run_odeint(system10, slope_func10)\n", + "plot(system10.results, 'b-', label='simulation')\n", + "plot(data.insulin, 'bo', label='data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "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": 85, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "def error_func2(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_system2(*params, data)\n", + " \n", + " # solve the ODE\n", + " run_odeint(system, slope_func10)\n", + " \n", + " # compute the difference between the model\n", + " # results and actual data\n", + " error = system.results.I - data.insulin\n", + " return error.loc[8:]" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[360, 0.25, 0.004, 80]" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "params = [I0, k, gamma, G_T]\n", + "params" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[360, 0.25, 0.004, 80]\n" + ] + }, + { + "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": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "error_func2(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": 88, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 3.60000000e+02 2.50000000e-01 4.00000000e-03 8.00000000e+01]\n", + "[ 3.60000000e+02 2.50000000e-01 4.00000000e-03 8.00000000e+01]\n", + "[ 3.60000000e+02 2.50000000e-01 4.00000000e-03 8.00000000e+01]\n", + "[ 3.60000005e+02 2.50000000e-01 4.00000000e-03 8.00000000e+01]\n", + "[ 3.60000000e+02 2.50000004e-01 4.00000000e-03 8.00000000e+01]\n", + "[ 3.60000000e+02 2.50000000e-01 4.00000006e-03 8.00000000e+01]\n", + "[ 3.60000000e+02 2.50000000e-01 4.00000000e-03 8.00000012e+01]\n", + "[ 3.41214716e+02 2.48476650e-01 4.01573092e-03 8.05611945e+01]\n", + "[ 3.41214721e+02 2.48476650e-01 4.01573092e-03 8.05611945e+01]\n", + "[ 3.41214716e+02 2.48476654e-01 4.01573092e-03 8.05611945e+01]\n", + "[ 3.41214716e+02 2.48476650e-01 4.01573098e-03 8.05611945e+01]\n", + "[ 3.41214716e+02 2.48476650e-01 4.01573092e-03 8.05611957e+01]\n", + "[ 3.45910051e+02 2.47820998e-01 3.91185402e-03 8.05803504e+01]\n", + "[ 3.45910056e+02 2.47820998e-01 3.91185402e-03 8.05803504e+01]\n", + "[ 3.45910051e+02 2.47821001e-01 3.91185402e-03 8.05803504e+01]\n", + "[ 3.45910051e+02 2.47820998e-01 3.91185408e-03 8.05803504e+01]\n", + "[ 3.45910051e+02 2.47820998e-01 3.91185402e-03 8.05803516e+01]\n", + "[ 3.45007554e+02 2.48467106e-01 3.84686996e-03 8.04490675e+01]\n", + "[ 3.45007559e+02 2.48467106e-01 3.84686996e-03 8.04490675e+01]\n", + "[ 3.45007554e+02 2.48467109e-01 3.84686996e-03 8.04490675e+01]\n", + "[ 3.45007554e+02 2.48467106e-01 3.84687002e-03 8.04490675e+01]\n", + "[ 3.45007554e+02 2.48467106e-01 3.84686996e-03 8.04490687e+01]\n", + "[ 3.45051065e+02 2.48855798e-01 3.83011719e-03 8.03295605e+01]\n", + "[ 3.45051070e+02 2.48855798e-01 3.83011719e-03 8.03295605e+01]\n", + "[ 3.45051065e+02 2.48855802e-01 3.83011719e-03 8.03295605e+01]\n", + "[ 3.45051065e+02 2.48855798e-01 3.83011724e-03 8.03295605e+01]\n", + "[ 3.45051065e+02 2.48855798e-01 3.83011719e-03 8.03295617e+01]\n", + "[ 3.44987120e+02 2.49050258e-01 3.91079996e-03 8.04365681e+01]\n", + "[ 3.45068248e+02 2.49199738e-01 3.85963688e-03 8.03598764e+01]\n", + "[ 3.45059632e+02 2.49011266e-01 3.84132605e-03 8.03405939e+01]\n", + "[ 3.45054960e+02 2.48925498e-01 3.83491541e-03 8.03342302e+01]\n", + "[ 3.45052537e+02 2.48882019e-01 3.83188685e-03 8.03312744e+01]\n", + "[ 3.45051666e+02 2.48866487e-01 3.83083385e-03 8.03302535e+01]\n", + "[ 3.45051308e+02 2.48860112e-01 3.83040566e-03 8.03298393e+01]\n", + "[ 3.45051163e+02 2.48857532e-01 3.83023303e-03 8.03296724e+01]\n", + "[ 3.45051104e+02 2.48856494e-01 3.83016363e-03 8.03296054e+01]\n", + "[ 3.45051081e+02 2.48856077e-01 3.83013582e-03 8.03295785e+01]\n", + "[ 3.45051071e+02 2.48855910e-01 3.83012466e-03 8.03295677e+01]\n", + "[ 3.45051068e+02 2.48855843e-01 3.83012019e-03 8.03295634e+01]\n", + "[ 3.45051066e+02 2.48855816e-01 3.83011840e-03 8.03295617e+01]\n", + "[ 3.45051066e+02 2.48855806e-01 3.83011768e-03 8.03295610e+01]\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": [ + "# Solution goes here\n", + "best_params = fit_leastsq(error_func2, params, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "system11 = make_system2(*best_params, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "run_odeint(system11, slope_func10)" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEPCAYAAABsj5JaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlYVPX+B/D3sAu4oIKgkgsoqCCbgpZrpmldtWtqrrmk\ndpXUNLNrGrfMEqJccDdtcb3m2vVnZmW5dcvAHUQFLyooCC64IPuc3x9fZ2AYljPDDAPM+/U88zBz\nzsyZzxzH85nvrpAkSQIREZGOLEwdABER1UxMIEREpBcmECIi0gsTCBER6cXK1AFUhZycHMTGxsLZ\n2RmWlpamDoeIqEYoLCxERkYGfHx8YGdnp7XfLBJIbGwsRo8ebeowiIhqpK1bt6JTp05a280igTg7\nOwMQJ8HV1dXE0RAR1QxpaWkYPXq0+hpaklkkEFW1laurK5o3b27iaIiIapayqv7NIoGUJTER2LoV\naNkSeP11QKEwdURERDWHWffCOnwYuHUL+O9/gWvXTB0NEVHNYtYJpKCg6P7Dh6aLg4ioJjLrBGJj\nU3Q/N9d0cRAR1URmnUBsbYvuM4EQEemGCeSpvDzTxUFEVBMxgTzFEggRkW7MOoEUbwNhCYSISDdm\nnUBYAiEi0p9ZJxD2wiIi0p9ZJxCWQIiI9McE8hTbQIiIdMME8hRLIETmZcWKFejbt6/Rjp+SkgIv\nLy/ExMTIen5BQQG++eYb9eM9e/agffv2RorOMMw6gbANhMh8TZw4ETt27DB1GGo//PADFi9erH78\n0ksv4dixYyaMqGJmPRsvq7CIzJeDgwMcHBxMHYaaJEkaj+3s7EpdBbA6MesSCKuwiGq/PXv2YMCA\nAfDx8UHv3r0RFRUFpVKpUYWlqm764YcfMGjQIPj6+mLo0KFISkrCihUr0KVLFwQHB2PRokXq45ZW\nBVZetVhmZibmzZuHbt26oUOHDujWrRsiIiKgVCpx8uRJzJ07FwDg5eWFPXv2aFVh3b9/H2FhYeje\nvTv8/Pwwbtw4XLx4Ub1/7Nix+OKLL/Duu+8iMDAQwcHBWLhwIQqKzxprYCyBPMUEQiTPzz8D+/eb\n5v+MrS0wcCAgt+ni0qVLCAsLw5IlS+Dj44O4uDjMmTMHzzzzTKnPX7ZsGRYtWoR69erhrbfewmuv\nvYbevXtj27ZtOHnyJD788EN0794dPXv21Dn29957D/fv38eaNWvQoEEDHDt2DB9//DGCgoLQo0cP\nhIWFYeHChThx4gTq1q2LH374Qf3awsJCTJw4UR2jo6Mj1qxZgzFjxuA///mPeqG8r7/+GtOmTcO+\nfftw+vRpzJs3D35+fhg8eLDO8cph1iUQtoEQ6e7nn033/yU3V7y/XMnJyVAoFGjatCmaNm2Kvn37\n4uuvv0ZwcHCpz580aRKCg4Ph7e2Nvn37Ijs7GwsXLkTr1q0xcuRINGrUCAkJCXrF3r17d3zyySfw\n9fWFu7s7Ro8eDTc3N1y+fBk2NjZwdHQEIJbgLll1deLECVy8eBFLlixBUFAQvLy88Nlnn6FevXrY\nunWr+nnt2rXDtGnT8Mwzz+CVV16Bl5cXzp49q1e8cph1CaR4AsnPBySJqxISVaRvX9OWQHTpOKWq\n7nn11VfRokULdOvWDf3790fTpk1LfX7xkom9vT1cXFxgW6yqws7ODnl6NpiOHDkShw8fxs6dO3Ht\n2jVcvnwZaWlpUCqVFb72ypUraNCgAVq1aqXeZmNjg44dO2oktJYtW2q8rm7dusjPz9crXjnMOoEo\nFCKJqL4PeXma1VpEpK1vX90u4qZkZ2eHLVu24MKFCzh27BiOHz+OrVu3Yvr06aU+38pK85JoYaFb\nJU1Z7Q1KpRJTpkxBUlISBg4ciMGDB6Njx44YN26c7M9R1nGLx2xT/FfxUyUb5w3JrBMIIBKGKoHk\n5jKBENUmv//+O86ePYvQ0FD4+voiNDQUH374IX744QcMGDCgUse2trZGVlaWxrbr16+X+tyLFy/i\nxIkT2LNnDzp06AAAePz4MTIyMtQXeEU51R+enp7IzMzE//73P7Ru3RoAkJeXhwsXLmDgwIGV+hyV\nYdZtIADbQYhqM2tra6xatQqbNm1CcnIyzpw5g5MnT8LPz6/Sx/b398fdu3fxzTffICUlBdu2bStz\n3IazszOsrKxw8OBBpKSk4MyZM5g2bRry8vLUVWKqLsUXLlzQSkxdunRBQEAA5syZg1OnTuHKlSuY\nN28eHj58iNdee63Sn0VfZp9A2BOLqPYKDg7Gp59+iu+++w4vv/wyQkND0blzZ8yfP7/Sx+7SpQum\nT5+OL7/8Ei+//DL++OMPzJgxo9TnNmnSBJ9++il+/PFHDBgwAO+++y78/PwwaNAgXLhwAQAQEhKC\n4OBgjBw5Et99953G6xUKBVauXIlWrVrhzTffxGuvvYbMzExs27YN7u7ulf4s+lJIxqwgqyZSUlLQ\np08fHD58WN3dTSU8HEhKEvffew94WjokIjJ75V07AROUQNLS0jBjxgwEBwejU6dOmDVrFm7fvq3e\nf+LECXUD08CBA3H06FGN19+9exczZ85Ep06d0LVrV0RGRlZqoAxLIERE+qnSBCJJEqZMmYKHDx9i\n06ZN2LJlCzIyMjB16lQAQGJiIqZOnYr+/ftj79696NOnD0JDQzW6qU2fPh137tzBli1bEB4ejj17\n9mDFihV6x8RVCYmI9FOlCeTOnTvw8PDAokWL4O3tDW9vb4wfPx5xcXF48OABNm3aBH9/f0ydOhUe\nHh54++23ERAQgE2bNgEAzpw5g1OnTiE8PBze3t7o2bMn5s6di82bN+vdN5slECIi/VRpAnF2dsbS\npUvVdWlpaWnYsWMHfH19Ub9+fcTExGiNEA0JCVFPhxwTE4NmzZppNBoFBwcjKysL8fHxesXEXlhE\nRPox2TiQadOm4fDhw6hfv766hJGWloYmTZpoPM/FxQVpaWkAgNu3b8PFxUVrPwCkpqbq1TWv+Pgc\nJhAiIvlM1o135syZ2LlzJwIDAzFhwgTcvn0bOTk5WiMpbWxskPv0yp6dna0xrQAg+nkrFAr1c3TF\nNhAiIv2YLIF4eXmhY8eOWLp0KZRKJfbu3QtbW1uteVvy8vJQp04dAKXPQ5Ofnw9JkmBvb69XHGwD\nISLST5U3oh84cEBjW506deDu7o7bt2/Dzc0N6enpGvvT09PV1Vqurq7IyMjQ2g9Aq+pLLraBEBHp\np0oTyK1btzB79mz1yEsAePToEZKSkuDp6YmgoCBER0drvObkyZPo1KkTACAoKAjJyclITU3V2O/g\n4ABvb2+9YuKqhERE+qnSBOLj44NOnTphwYIFOH/+PC5evIi3334bDRs2xCuvvIIxY8YgJiYGUVFR\nuHr1KpYvX45z586pZ6wMCAiAv78/Zs2ahbi4OBw9ehSRkZGYMGFCqbNQysEqLCLzkpaWBi8vL5w8\nebLC50qShH379uHu3btVEFnNU6UJxMLCAitWrEC7du3w5ptvYsyYMXBwcMCWLVvg4OAALy8vrFy5\nEocOHcIrr7yCX3/9FWvXroWHhweAovlgGjVqhNGjR+P999/HsGHDEBoaqndMTCBEVJbTp0/jvffe\nQ3Z2tqlDqZaqvBtvw4YNER4eXub+Xr16oVevXmXud3Z2xqpVqwwWD9tAiKpGdDRw8CCQmgq4uQED\nBgCdO5s6qvKZwVSBlcLZeNkGQmR00dHAhg3AzZuAUin+btggthvbzZs3MWXKFAQEBOD555/H8ePH\n1ftyc3OxePFi9O7dGz4+PujSpQvmzZuH7OxspKSkYPTo0QCAPn36qKdMOnToEF599VV07NgRfn5+\nGDFiBM6fP2/8D1INMYGwCovI6A4eLH37jz8a933z8/MxadIkZGdnY/v27fj000+xfv169f6IiAj8\n9ttviIyMxI8//oiwsDAcOHAAO3bsgJubG1avXg0A2LlzJyZOnIjz58/j7bffxpAhQ/DDDz9g8+bN\nAIAPPvjAuB+kmjL7FQk5kJDI+Ip1nNRw65Zx3/e///0vkpKSsHHjRvU66AsWLMCUKVMAAH5+fnj5\n5ZcRFBQEAGjevDm2bduGK1euwNLSEvXr1wcgqt4dHBxgbW2Nf/3rXxgxYoT6+cOGDcOCBQuM+0Gq\nKbNPIMVLIDk5pouDqDZzcxPVViU9vaYbTUJCApycnNTJA4DGlEeDBw/GiRMn8Nlnn+HatWtITEzE\njRs3Sl37AgDatWuHunXrYt26dUhMTMT169cRHx8PpVJp3A9STbEKi20gREZX1vLj/fsb930VCoVW\nQ7i1tbX6/vz58zFnzhxIkoR+/fph1apV6FxOy/4ff/yBAQMGID4+Hr6+vpg9e7ZBVjesqcy+BGJt\nDSgUgCQB+fmigc/C7NMqkWGprsk//iiqrZo2FcnD2L2w2rVrh/v37+PatWto2bIlACA2NhYAkJmZ\niV27dmHFihXo168fAKCgoADJycnqEotCodA43rfffovnnnsOy5YtU2/7/fffAYgeWyWfX9uZfQJR\nKEQ7iKoBPS9Pc4ZeIjKMzp2rvttuSEgIOnTogHfffRdhYWHIz8/HokWLAACOjo5wdHTE4cOH4e3t\njcePH2PdunVITU1Vz7nn4OAAAIiPj0f9+vXh6uqKI0eO4OzZs2jUqBGOHDmCb7/9FoCYt6/kZK+1\nHX9rgw3pRLWVpaUlvvzyS7i5ueH111/HzJkzMX78eACAlZUVli1bhri4OPztb3/DtGnTUL9+fUyc\nOFFdSvH09MSLL76IWbNmISoqCjNmzED79u3xxhtv4NVXX8VPP/2kHtdWfIomc6GQzGCkTEULw8+f\nD9y5I+4vWgQ4O1dxgERE1VBF106WQMCxIERE+mACARMIEZE+mEDANhAiIn0wgYAlECIifTCBgDPy\nEhHpgwkEmuM+mECIiORhAgHbQIiI9MEEAraBEBHpgwkEbAMhItIHEwg4Iy8RkT6YQMAqLCIifTCB\ngAmEiEgfTCBgGwgRkT50Xg/k8uXLyM7OLnUJx8DAQIMEVdXYBkJEpDvZCSQ2NhYzZ87ErVu3tPap\nVuKKj483aHBVhVVYRES6k51APvnkE1hYWGDx4sVwdXWFRS1a95UDCYmIdCc7gcTFxWHJkiV44YUX\njBmPSbAEQkSkO9nFiIYNG8LS0tKYsZgMEwgRke5kJ5CRI0di/fr1yM7ONmY8JsEEQkSkO9lVWDdv\n3kRiYiK6deuGtm3bok6dOhr7FQoFNm7caPAAq4KVFaBQAJIEFBQASiVQi5p4iIiMQnYCSUpKgre3\nt/pxfn6+UQIyBYVCNKSrSh95eZpTvBMRkTbZCWTz5s3GjMPkbG2LEkhuLhMIEVFFdB5ImJiYiL/+\n+guPHz+Gk5MTgoKC0Lp1a2PEVqU4Gp2ISDeyE4hSqURYWBh2794NSZLU2xUKBQYPHozFixdDoVAY\nJciqwFUJiYh0IzuBrF+/Hvv27cM777yDgQMHonHjxsjIyMD+/fsRFRUFDw8PTJ482ZixGhUHExIR\n6UZ2Atm1axf+8Y9/YNKkSeptrq6umDx5MnJzc7Fr164anUDYlZeISDeyO6tmZGQgKCio1H2BgYFI\nTU01WFCmwDYQIiLdyE4g7u7uOHPmTKn7zpw5A2dnZ4MFZQqckZeISDeyq7CGDh2KJUuWwN7eHi+9\n9BIaN26MO3fu4MCBA1i3bh3efPNNY8ZpdKzCIiLSjewEMnbsWMTHxyM8PBwRERHq7ZIkYdCgQZg6\ndapRAqwqTCBERLqRnUAsLS0RERGBSZMmITo6Gg8fPkS9evXQuXNntGnTxpgxVgm2gRAR6UbngYRt\n2rSpFQmjJLaBEBHpptwE8uKLL2L58uXw9vZGv379KhwoeOjQIYMGV5VYhUVEpJtyE0hgYCAcHBzU\n92vySPOKcCAhEZFuyk0gixcvVt8PDw8v90BKpdIwEZkISyBERLqRPQ6kT58+uHTpUqn7zp8/j2ef\nfdZgQZkCEwgRkW7KLYH83//9HwoKCgCIBaV++umnUpPIH3/8gbwaXu/DBEJEpJtyE0hcXBy+/vpr\nAGLW3dWrV5f6PIVCgYkTJxo+uirEBEJEpJtyE8js2bMxfvx4SJKEXr16Yc2aNWjfvr3GcywsLODo\n6Ki1xG1NY29fdD8ry3RxEBHVFOUmEGtrazRp0gQAcPjwYbi4uMDa2rpKAqtqTzubAWACISKSQ/ZA\nwmbNmuHChQuIjo5Gfn6+elEppVKJ7OxsxMTEYPv27RUe586dO4iMjMTvv/+OnJwc+Pn54b333kPb\ntm0BACdOnEBkZCSSkpLQokULzJkzBz179lS//u7du1i4cCF+//13WFtbY8iQIZg1axasrHQeE6mh\nTh3AwgJQKoGcHKCgAKjkIYmIajXZl8jt27dj4cKFGqsRqlhYWKBbt24VHkOpVOKtt96CJElYvXo1\n7O3tsWLFCowfPx4HDhzA3bt3MXXqVEybNg39+vXD/v37ERoair1796pHv0+fPh0KhQJbtmzB7du3\n8c9//hNWVlaYNWuWDh9bm0IhSiGPHonHT54A9epV6pBERLWa7G68mzdvRo8ePXDy5ElMnDgRw4cP\nx9mzZ7F8+XLY2tpi0KBBFR7j0qVLOHPmDD799FN07NgRnp6eiIyMxJMnT3D06FFs2rQJ/v7+mDp1\nKjw8PPD2228jICAAmzZtAiCmjT916hTCw8Ph7e2Nnj17Yu7cudi8ebNBeoEVr8Z6/LjShyMiqtVk\nJ5Dk5GSMGjUK9evXh4+PD06dOgU7Ozu8+OKLmDJlivoiXx43NzesW7cOrVq1Um9TjW5/8OABYmJi\nEBwcrPGakJAQxMTEAABiYmLQrFkzuLu7q/cHBwcjKysL8fHxcj9KmZhAiIjkk51ArK2tYWdnBwBo\n0aIFrl+/jvz8fABAUFAQrl27VuExnJyc0KtXL1hYFL3t5s2bkZOTg27duiEtLU3daK/i4uKCtLQ0\nAMDt27fh4uKitR+AQVZEdHQsus+GdCKi8slOIN7e3jhy5AgAoFWrVlAqlTh37hwAcWHXx+HDh7Fk\nyRJMmDABHh4eyMnJgU3xSakA2NjYIPfpwIzs7GzYFh+wAZHYFAqF+jmVUTyBsARCRFQ+2Y3o48aN\nw8yZM/Ho0SMsWrQIffr0wdy5czFgwAB8//33Za6XXpY9e/bggw8+wEsvvYR3330XAGBra6su1ajk\n5eWpx5jY2dlptXWoeoTZFx/IoSd25SUikk92CeTFF1/EqlWr0KJFCwDAwoUL0bJlS2zduhWtWrVC\nWFiY7Ddds2YN5s2bhxEjRuCzzz5TV2m5ubkhPT1d47np6enqai1XV1dkZGRo7QegVfWlD1ZhERHJ\nJ7sEcuDAAXTt2hV9+vQBINozvvrqK53f8Msvv8SyZcswY8YMhIaGauwLCgpCdHS0xraTJ0+iU6dO\n6v2ff/45UlNT4ebmpt7v4OAAb29vnWMpiY3oRETyyS6BLFiwQOvirqtLly5h6dKlePXVVzF8+HBk\nZGSob0+ePMGYMWMQExODqKgoXL16FcuXL8e5c+cwbtw4AEBAQAD8/f0xa9YsxMXF4ejRo4iMjMSE\nCRO02k70wSosIiL5ZJdAmjRpguzs7Eq92Q8//IDCwkLs3r0bu3fv1tg3c+ZMTJs2DStXrkRkZCS+\n/PJLtG7dGmvXroWHhwcA0eV35cqV+PDDDzF69Gg4ODhg2LBhWiUZfbERnYhIPtkJZOTIkfj0009x\n7tw5eHt7l9poPXDgwHKPMXv2bMyePbvc5/Tq1Qu9evUqc7+zszNWrVolK2ZdsQqLiEg+2QlEtTph\nWfNdKRSKChNIdcdGdCIi+WQnkMOHDxszjmqh5JTukiTmyCIiIm2yG9Gjo6Nhb2+PZs2aad1sbGxw\n6NAhY8ZZJaysgKeD7SFJQCWbfIiIajXZCWTevHlITk4udV98fDyWLl1qsKBMiQ3pRETylFuF9eab\nbyIxMREAIEkSQkNDS+0ue/fuXTzzzDPGibCKOTgAd+6I+2wHISIqW7kJZOrUqdi1axcAYNeuXfD1\n9UXDhg01nmNhYYF69erh73//u/GirEJsSCcikqfcBOLv7w9/f38AQGFhIaZNm6YxlXptxK68RETy\n6NyNt7bjaHQiInlkJ5B79+4hIiICR44cwZMnT0pd2jY2NtagwZkCG9GJiOSRnUAWLlyI3377DS+/\n/DJcXV01FoWqTViFRUQkj+wEcuzYMfUU7LUZG9GJiOSRXYywsrJSrwVSm7ENhIhIHtkJ5IUXXsD+\n/fuNGUu1wDYQIiJ5ZFdh+fn54YsvvkBKSgoCAgLUy8yqKBQKvPnmmwYPsKqxBEJEJI/sBPKvf/0L\nAPDXX3/hr7/+0tpfWxIISyBERPLITiCXLl0yZhzVho2NmFSxoADIzwfy8sQ2IiLSpFdf3IKCAmRk\nZKCgoMDQ8ZicQsFqLCIiOXRKILGxsXjjjTcQGBiInj174vLly3jvvfeMtkKgqXAsCBFRxWQnkNOn\nT2PUqFHIzMzE5MmT1SPR3dzcsHLlSmzbts1oQVY1jgUhIqqY7ATy+eef49lnn8Xu3bsxdepUdQJ5\n++23MW7cuDKXuq2JWAIhIqqY7AQSFxeHkSNHAhA9rorr3bt3mYtN1UQsgRARVUx2AnFwcMDdu3dL\n3Xf79m04FP/ZXsMxgRARVUx2Ann++eexbNkyXLx4Ub1NoVAgIyMD69atQ8+ePY0SoCmwCouIqGKy\nx4HMmTMHFy5cwNChQ9GkSRMAwNy5c3Hz5k24uLhgzpw5RguyqrEbLxFRxWQnkAYNGmDnzp3Yt28f\n/vzzT7Rq1QqOjo4YMWIEhgwZAnt7e2PGWaU4Gp2IqGKyEwgA2NjYoGvXrhg+fDgAschUUlJSrUoe\nAKuwiIjkkN0Gcu/ePQwfPhxvvPGGetuFCxcwevRojB8/Ho8ePTJKgKbARnQioorJTiARERG4c+cO\nPvroI/W2Hj16YMuWLUhJScGSJUuMEqApsA2EiKhishPI8ePHMXfuXHTt2lW9TaFQoFOnTpg1axZ+\n+eUXowRoCvb2Yk4sAHjyBFAqTRsPEVF1JDuB5ObmwtbWttR9Dg4OtaoKy8ICKL7cCUshRETaZCcQ\nPz8/bNq0SWsG3sLCQmzZsgW+vr4GD86U2A5CRFQ+2b2wZsyYgbFjx6Jv377o0aMHGjVqhHv37uH4\n8ePIyMjAt99+a8w4q5yjI5CeLu4zgRARaZOdQPz9/bFjxw6sXbsWhw8fRmZmJhwdHREUFISoqCh0\n6NDBmHFWuTt3gFOnRBuIpSUwYQLQubOpoyIiqj50GgfSvn17REVFGSuWaiM6GoiJKSp5JCcDGzaI\n+0wiRESCTgkEAC5fvozs7GwoS+maFBgYaJCgTO3gQcDOruhxbq74++OPTCBERCqyE0hsbCxmzpyJ\nW7duAYB6PRCFQgFJkqBQKBAfH2+cKKtYaqpmAsnJEX+ffnQiIoIOCeSTTz6BhYUFFi9eDFdXV1hY\n6LWceo3g5gZkZhY9ViWQpk1NEw8RUXUkO4HExcVhyZIleOGFF4wZT7UwYADwv/8VPVYlkP79TRMP\nEVF1JLsY0bBhQ1haWhozlmqjc2dg2jSgXj0xIt3WFnj9dbZ/EBEVJ7sEMnLkSKxfvx5dunRBneLD\ntGup4GCgX7+isSCtWpk2HiKi6kZ2Arl58yYSExPRrVs3tG3bViuJKBQKbNy40eABmlKjRkUJ5M4d\ntoEQERUnO4EkJSXB29tb/Tg/P98oAVUnjRsX3S9jOXgiIrMlO4Fs3rzZmHFUS40aFd2/c8d0cRAR\nVUc6DyRMTEzEX3/9hcePH8PJyQlBQUFo3bq1MWIzOZZAiIjKJjuBKJVKhIWFYffu3epBhIBo+xg8\neDAWL14MhWoRjVqCJRAiorLJTiDr16/Hvn378M4772DgwIFo3LgxMjIysH//fkRFRcHDwwOTJ082\nZqxVjiUQIqKyyU4gu3btwj/+8Q9MmjRJvc3V1RWTJ09Gbm4udu3aVesSSN26gLU1kJ8vZuXNztZc\naIqIyJzJHkiYkZGBoKCgUvcFBgYiNTXVYEFVFwoF0LBh0WOWQoiIishOIO7u7jhz5kyp+86cOQNn\nZ2ed3zwsLAzz58/X2HbixAkMHjwYHTt2xMCBA3H06FGN/Xfv3sXMmTPRqVMndO3aFZGRkVqrJBoS\nq7GIiEonO4EMHToUa9euxTfffIP09HQolUqkp6fj66+/xrp16zBkyBDZbypJEpYvX44dO3ZobE9M\nTMTUqVPRv39/7N27F3369EFoaCgSEhLUz5k+fTru3LmDLVu2IDw8HHv27MGKFStkv7eu2JBORFQ6\n2W0gY8eORXx8PMLDwxEREaHeLkkSBg0ahKlTp8o6TnJyMt5//30kJCSgaYmh3Zs2bYK/v7/6WG+/\n/TZOnTqFTZs24eOPP8aZM2dw6tQp/PLLL3B3d4e3tzfmzp2Ljz/+GKGhobCxsZH7cWRjCYSIqHSy\nE4hCoUBERAQmT56M6OhoPHjwAI6OjggJCUGbNm1kv+Hp06fh5uaGJUuWYPbs2Rr7YmJiMGDAAI1t\nISEhOHDggHp/s2bN4O7urt4fHByMrKwsxMfHw8/PT3YccrEEQkRUugoTyI0bN/Dhhx+iS5cumDJl\nCjw9PeHp6YnHjx8jJCQE/v7+iIyM1CpNlGXw4MEYPHhwqfvS0tLQpEkTjW0uLi5IS0sDANy+fRsu\nLi5a+wEgNTXVKAmEJRAiotKV2wZy+/ZtjB49GvHx8VoXdgCYOnUqkpKS8Nprr+GOAX6e5+TkaFVD\n2djYIPfpmrLZ2dmwtbXV2G9tbQ2FQqF+jqGVLIEUG0NJRGTWyk0g69evh42NDfbt26dVanB0dMRb\nb72FXbt2QZIkrF+/vtLB2Nraak3SmJeXp575187ODnl5eRr78/PzIUkS7O3tK/3+pXF0BFQ5LSdH\njAUhIqIKEsjx48cxefLkUksfKk2bNsUbb7yBY8eOVToYNzc3pKvmT38qPT1d/f6urq7IyMjQ2g+g\n3BgrQ6FgOwgRUWkqrMLy8PCo8CDt2rVTt1NURlBQEKKjozW2nTx5Ep06dVLvT05O1hi0ePLkSTg4\nOGhMNW+4P6tHAAAZoUlEQVRoxRMI20GIiIRyE4iTk5PWL/7SZGZmol69epUOZsyYMYiJiUFUVBSu\nXr2K5cuX49y5cxg3bhwAICAgAP7+/pg1axbi4uJw9OhRREZGYsKECUbpwqvChnQiIm3lJpCgoCDs\n27evwoPs27cPXl5elQ7Gy8sLK1euxKFDh/DKK6/g119/xdq1a9WlIIVCgZUrV6JRo0YYPXo03n//\nfQwbNgyhoaGVfu/ysAqLiEhbud14X3/9dYwaNQqRkZGYOXOm1q/8vLw8REVF4ejRo1izZo3Ob17a\nIlW9evVCr169ynyNs7MzVq1apfN7Vcbt28CpU2JCxZs3AQ8PoHPnKg2BiKjaKTeB+Pn5Ye7cuYiI\niMC+ffvQpUsXNGvWDIWFhbh16xZOnjyJ+/fvIzQ0tNyLfk0WHQ0cPAhkZYnHqanAhg3iPpMIEZmz\nCgcSjhs3Dj4+Pti4cSN++eUX9XgLBwcHdOvWDRMmTIC/v7/RAzWVgwcBe3vRG0uSRDfewkLgxx+Z\nQIjIvMmayiQoKEg9lfu9e/dgZWVlkEbzmiA1FbC0FOuAPHkiksjjx8CtW6aOjIjItGTPxqvSsGFD\ns0keAODmJv4W/8gPHwIyZ24hIqq1dE4g5kY1t2PdukXbHj0C+vc3TTxERNWF7Nl4zZWqneO774DE\nRMDBAWjZEng6tpGIyGwxgcjQuTMQFATk5oobAGRmAk5Opo2LiMiUWIUlk4UF0KpV0eP//c90sRAR\nVQdMIDpgAiEiKsIEooPWrYvuJyWZLg4iouqACUQHxUsg168DBQWmi4WIyNSYQHRQt27RzLwFBUBK\nimnjISIyJSYQHRUvhbAai4jMGROIjtgOQkQkMIHoqHgCYU8sIjJnTCA6at4csHo6/DIjQ0xrQkRk\njphAdGRlBTzzTNFjlkKIyFwxgejB07Po/qlTpouDiMiUmED0UHwhqdOnxSJTRETmhglED2lpQEIC\ncPw48OefQClLuxMR1XpMIDqKjgY2bhTL3EqSWCt940axnYjInDCB6OjgQfHXxUXM0JudLRrSJ08G\nFi5kIiEi88EEoqPUVPHX2hqwsQEePBDTmty5A9y8CWzYwCRCROaBC0rpyM1NJAoAyMsr2l5QIKq0\nMjKA994DvLzEcwcM0Gx0JyKqLVgC0ZFqjXRAJAyLp2ewTh2x5O2lS6KRXalkiYSIajeWQHSkKk38\n+KNYH93JCSgsBOzsitZMd3Aoen56OkskRFQ7sQSih86dgQ8+AFavBp59ViQPQExrkpsLuLuLx+np\nLJEQUe3FBFIJnTsD06cD3t6AQiG69lpaAvXri/3JyeJv8RIJIEovREQ1HRNIJXXuDGzdCgwcCAQH\ni7myEhJE+8iTJ+I5qhKJyq1bVR8nEZGhMYEYgL09MH68GBvi7S2qsdLTAVdXoF07wNlZPC89Xcyd\ndeoUx4wQUc3HRnQDadcOeP554NdfRSKxtQV69AB+/lnsV7WHqJ6rag8B2KhORDUTSyAGNGSIKHUA\nohTy889Aixai91VKCuDoqFkiASrXHiJJYixKfr5opJekysVPRKQLlkAMyNoamDQJWLKkqP3j+nVR\nInF3Bxo0EM8p7uxZUZ2VmioSTf/+gI8PcOyYSC43b4rE4+sLNGkiRr4/eiT+PnwokkdxlpbiZmEh\nBjVevy6mW2nYEAgKEsepX1/c6tUTN9X9krEREZWHCcTA3N2Bf/1LzNAbGyu2pacDN24A8fEiGTg4\niBLDgwfAvXuidFJYKJLBv/8tEs7t25rH/fNP0b7i4lL++xcWilvxKjNAJKKbN4ErV8o+hr29ZlJR\nJRbV/YYNxWsVCv3PDxHVHkwgT0VHi4kSVSWBygz4a9AAeOst4L//Bb77DsjJEYnl0iXg8WNxA8T8\nWY6OoiRRXEKCuHCXlJKiefFPTxdJ4ckTMRK+efOi/aouxBUdo7gnT8QtLa3sz1anDtCypbi1aiX+\nqrotE5F5YQKBSB6qBm3AMA3cCgXw3HNA+/bA77+L0oeFhSiJZGWJUkhOTtEgxOJycsRF3samaNJG\na2vx3DffBOrWFTMA79wp2lNUJQJJEr3BAgNFAissFCUdpVKUbvLyxJxdL71UVAX28GHRfaWy4s+V\nnS0+S3x80TYnp6Jk0qqVWPK3tM9FRLULEwiKpmgv6ccfK99DyskJ+NvfxC0nR0x38vChSApffSVK\nIap2CysrkSiuXgXatNE+VvPmIjkAwPbt4jXFKRTAL78AXbuKEo9q0kdAlBxUxxg8WPvYkiRKRiWT\niupvZqYonT16pP3a+/fF7fTpojjc3DRLKc2aacdLRDUbEwiKpmgvydAD/uzsRAO5iiRplnxUxo0T\n1V8l9e9fdL+imAcMKP3YxY9RnEIhSjZ164qLfXGq6r3Hj0VCbNdOlKCuXRON9MVnJVZ9rlu3xE31\nOaytRcmkZUuRHNu1YymFyJTy8oCkJFFlnp4urk3BwbodgwkEmlO0F9e0qXHft/jEjLduiffr319s\nb9++9O1yYy7v2LooWb13/75ICpMmAUOHimqvW7fEF/HaNXG7eVO7S3F+vihZXb0KHD4sSiNt2ohe\nYT4+oocZG+eJjCcrS9SAJCaKpHH9uma1dXQ00KGD9tRL5WECge6/1g2pc+fSL+plbVeRE3NFx5Cj\nouo9CwtRLda8OdC9u9iXmyvaelQJJSkJuHtX8/WFhaJTwaVLoi2nceOiZOLlxS7FRJV1925RskhM\nLLvWQsXZuaiqWy4mEBju13pVqqqY9anes7UVpYvi7TiPHolkcvWq6N5cspfYnTvAb7+Jm7W16LLs\n4yOSSqNGlf4YRLWaJIn/qwkJRQnj/v2KX9e0KeDpKW7+/kXrG8nFBPKUIX6tV7WqiNlQ1Xt164pO\nBOfPiy96o0ZA69aiV9jFi6LUopKfD1y4IG7bt4sYfH3F7d494KefDNPdmqimKigQVVCqKqnExKLB\ny2WxsBBtkKqE4empW3VVaZhAqFyGqt4r2ZZy9664TZokbomJImHExmqPQ0lNFbctW8TznJzEoMbs\nbM4nRuYhJ0eU3lXJIilJexaKkmxtxY+0Nm1EsmjVSvT+NCQmECqXoarKKmpL8fYWt2HDRHWWKplc\nvlz0HyU5WfzyysgQN0CMnr93D5g/H2jbVjwmqukePixqv0hIEAOAK5rrrm5dkShUCcPdXfcqKV2Z\ndQIx5Ojz2swQVWW6tKU0bgz07i1ueXkiicTGlj79/ZMnQFwcsGaN6MXVooXoIuztDXh4lN0Yb6h/\n++r0HapOsZB8kiR+EKnaLhITRbfaijg7FyULT0/TTDNktgnEGKPPqWz6tqXY2BS1f1y5Iv5z3bsn\nbqrR86p6XEkq6vl18KBIHp6eRQlF9YvMUP/2hjxOZS/8/D6Xr7ok19xc0VHkwAHxPVUoxLRFFbVF\nKBSip2Px9osGDaok5HKZbQIx5uhz0maItpSXXhLHsLcX/5mUSpFEgoJEt+Dr1zWL+fn5mtOuODiI\nLsInT4qqMDs7zV9suv7bG+I7ZKgLf3X8PleXi3ZVJFdJEm1ymZlFMzOobsW3Xb+uOcmpSsmJUq2s\nRJuFqkqqdWvdu9jKVZl/J7NNIFU1+pwEQ7SllDxG8+aax8jKEqWUS5dE0ig5o3FWlphu5c8/xX94\nOzvxK87JSfzV9d/eEN8hQ134q9v3uTqViCp7jlXT/JRMDsUfZ2Zq9iQsS1mTnN6+DfTpU5QwWrQQ\nScTYKvvvZLYJxFSjz82ZIdpSyjuGgwMQECBugPiPHR9flFBUsx7b24tkkpMjenypen01bQrs2SNm\nASiv/UTFEN8hQ134q9v3uTqViMo7x0qlGKNUWlIovq2gwDCxqCZQtbUVf+vWFbNZOzqKCVCrWmX/\nnWpkAiksLMSyZcuwd+9eZGVloXv37ggLC0Pjxo1lH8OUo8+pajg5Ac8+K26qgVbx8eI/7MGD2heF\nevWAQ4fEzdq6aM6u9u3F/GAlGygN8R0y1IW/un2fS7toS5L4rKoVNIvPFm3ox8XvP3lS1GsvP1+U\nFHJzxUU8NFTeLNRy2NiI71zJm6qU6+QEfPFF6T8OSs4/V1Uq+wOmRiaQFStWYO/evYiIiECDBg3w\n0UcfYfr06di+fbvsY9TE0eekP4VC/Bs3bSqqCoYMAXbsED28CgrEL8Hivz/y88UAx4sXgd27RXJp\n167o1qCBYb5DhrjwK5Wik8GIESL53boleuh07y7ijI8vWmisoEDcij+uzL6y/p4/L0p8kqR5M8Uv\n7YcPxbiJkry95SePOnVKTwjFt9WpU3EvKFU7XkmmSvSV/QGjkKSatZJ2Xl4eunTpggULFmDIkCEA\ngJSUFPTp0wfbt29HoGq+82JU+w8fPozmzZtXdchUA2Rni/aTixdLbz8pyc1NlEzatxclFVvbon2S\nVHQxzc8v+lvW/XPnxASV6emidOTvL+rAVb+U8/I0/5bcZqjqFUMquSKmipxVNY0VT0pK0Vo8xRdf\nc3TUTgwl7xty5ujo6Orzw7VkG4jKpEkipoqunTWuBHLp0iVkZWUhuNi8w82bN0ezZs0QExNTagIh\nqkidOoCfn7gBoptwfHxRQsnK0ny+anS8amZhBwfN5KArCwvA1VXcv3xZ3Goy1cW55EXb1VV8VktL\n8Wvd0lL+YwuLops+jxUK0f5VsuRQ1RN3Vqdpkypbiq5xCSTtaYtnkyZNNLa7uLio9xFVVsOGYkXJ\n554TJQrVmvbx8WIsSvFf/YWF2ssSVyWFQtS/29iIkpC1tejBo1qkTHVf9bi8v+W9pjL7LCxEnJyy\nv/qpTEKrcQkkOzsbFhYWsC7xs8HGxga5cvrREelINcK9RQvx6ywvT4waVpVOSqtDLr7CpOqCXvJ+\naX9VScDWtuh+edtUyx3zwkymUOMSiJ2dHZRKJQoKCmBVrKN0Xl4e6hhrpA1RMTY2YuGdDh3E4ydP\nRLVV8QTBCzqZAyNPtWV4bm5uAIAMVb+8p9LT07WqtYiqgr29aPy2t2dpgMxLjSuBeHt7w8HBAX/9\n9RcGDx4MQPQUuHnzJjqXUZFXWFgIAGwjISLSgeqaqbqGllTjEoiNjQ1GjRqFzz77DE5OTmjUqBE+\n+ugjBAcHw9/fv9TXqEoro0ePrspQiYhqhYyMDLRo0UJre40bBwIABQUF+Pzzz7F3714UFBSoR6I3\nbNiw1Ofn5OQgNjYWzs7OsLS0rOJoiYhqpsLCQmRkZMDHxwd2pQyGqZEJhIiITK/GNaITEVH1wARC\nRER6YQIhIiK9MIEQEZFemECIiEgvZptACgsL8cUXX6Bbt24ICAjAjBkzcOfOHVOHVWMlJibCy8tL\n6xYTEwMAOHHiBAYPHoyOHTti4MCBOHr0qIkjrlnCwsIwf/58jW0VndO7d+9i5syZ6NSpE7p27YrI\nyEgUVMe536uB0s7v0KFDtb7PxZ/D8wtAMlNLly6VnnvuOenEiRNSbGysNGzYMGnEiBGmDqvGOnDg\ngBQSEiKlp6dr3PLy8qSEhATJx8dHWr16tZSYmCgtXbpU6tChg3TlyhVTh13tKZVKadmyZVLbtm2l\n999/X71dzjkdOXKkNGrUKCk+Pl46cuSI1KVLF2nJkiWm+BjVVlnnV6lUSn5+ftJ//vMfje/zo0eP\n1M/h+ZUks0wgubm5UkBAgLR79271tuTkZKlt27bSqVOnTBhZzbV06VJp9OjRpe774IMPpDFjxmhs\nGzNmjLRgwYKqCK3GunHjhjRmzBgpJCRE6tWrl8YFrqJzevr0aalt27bSjRs31Pv37NkjBQQESLm5\nuVXzAaq58s7v9evXtc5fcTy/gllWYVW0KBXpLiEhAa1bty51X0xMjMa5BoCQkBCe6wqcPn0abm5u\n2L9/v9ZqcBWd05iYGDRr1gzu7u7q/cHBwcjKykJ8fLzxg68Byju/V65cgZ2dHZqVsVg5z69Q4+bC\nMgQuSmV4CQkJyM3NxfDhw3Hz5k20adMGs2fPRseOHZGWlsZzrYfBgwerJwwtqaJzevv2bbiUWDtW\n9Tg1NRV+qqUXzVh55zchIQF169bFnDlz8Ndff8HJyQlDhgzBuHHjYGFhwfP7lFmWQLgolWHl5OQg\nOTkZjx8/xty5c7FmzRq4uLhgzJgxuHr1KnJycmBjY6PxGp7ryqnonGZnZ8O2+ELtAKytraFQKHje\nZUhMTMSTJ0/QrVs3bNy4EaNGjUJUVBRWrlwJgOdXxSxLIFyUyrDs7OwQHR0NGxsb9UUtPDwccXFx\n2LZtG2xtbZFfYqFwnuvKqeic2tnZIS8vT2N/fn4+JEmCvb19lcVZU0VERODJkyeoV68eAMDLywuP\nHj3C2rVrMX36dJ7fp8yyBMJFqQzP0dFR4xexhYUFPD09kZqaCjc3N6Snp2s8n+e6cio6p66urqV+\nvwHtqlvSZmVlpU4eKl5eXsjKysKjR494fp8yywRSfFEqlYoWpaKyxcbGIjAwELGxsepthYWFuHTp\nEtq0aYOgoCBER0drvObkyZPo1KlTVYdaa1R0ToOCgpCcnIzU1FSN/Q4ODvD29q7SWGui4cOHY9Gi\nRRrbLly4ABcXF9SrV4/n9ymzTCDFF6U6duwY4uLiMHv27HIXpaKyeXt7o1mzZggLC8O5c+eQkJCA\nefPm4f79+3j99dcxZswYxMTEICoqClevXsXy5ctx7tw5jBs3ztSh11gVndOAgAD4+/tj1qxZiIuL\nw9GjRxEZGYkJEyZotZ2Qtr59+2LHjh3Yt28fbty4gZ07d2LDhg2YMWMGAJ5fNVP3IzaV/Px8afHi\nxVJwcLAUGBgozZw5U7p7966pw6qx0tLSpNmzZ0tdunSR/Pz8pAkTJkiXL19W7//tt9+kl156SfLx\n8ZEGDRok/f777yaMtuYZM2aMxjgFSar4nKanp0vTpk2T/Pz8pGeffVb64osvpMLCwqoMu8YoeX6V\nSqX01VdfSf369ZN8fHykfv36Sf/+9781XsPzK0lcUIqIiPRillVYRERUeUwgRESkFyYQIiLSCxMI\nERHphQmEiIj0wgRCRER6YQIhs/DPf/6z1BUTi9/Gjh0LABg7dizGjx9v0ngzMzPx/PPP4/r163of\nIyUlBV5eXvj+++9lv+bBgwd4/vnnkZycrPf7kvngOBAyCzdu3MC9e/fUjz/66CNYWlpiwYIF6m2O\njo7w9PREYmIiFAoFPDw8TBEqAOCdd95BkyZNMHfuXL2PkZeXh4sXL+KZZ55Bw4YNZb9uy5YtOHTo\nEDZt2gSFQqH3+1PtxwRCZmns2LGwtLTEN998Y+pQtJw/fx6jRo3CsWPHdLrwG0peXh569uyJjz76\nCP369avy96eag1VYRCWUrMLy8vLCjh07MGfOHAQEBKBLly5YuXIlHj9+jHnz5iEoKAjPPfccIiMj\nUfz32P3797FgwQJ07doVHTt2xMiRI3Hq1KkK33/Dhg149tlnNZLH888/j9WrV+Pjjz9GcHAwgoKC\nsHDhQmRnZyMiIgIhISEICQnB/Pnz1etRlKzC2rNnD3x9fXH69GkMGzYMvr6+6N27N7766iuN97ex\nsUG/fv2wbt26ypxGMgNMIEQyREREwMnJCatXr0bv3r2xYsUKDB06FHXq1MHKlSvRt29fbNiwAT/9\n9BMAIDc3F+PHj8eRI0cwe/ZsREVFoX79+hg/fjzOnz9f5vtkZWXh119/LfWX/4YNG5CZmYnly5dj\nxIgR2Lp1K/7+978jNTUVX3zxBcaOHYtdu3Zh69atZR6/oKAAs2fPxsCBA/Hll18iMDAQERER+OOP\nPzSe179/f8TGxuLatWv6nTAyC2a5oBSRrjp06ID58+cDELMP79mzB40aNUJYWBgAoEuXLti/fz/O\nnj2LF198Ed9//z0uX76MnTt3wtfXFwDQo0cPDB06FEuXLsXXX39d6vvExMQgPz8fHTt21Nrn5OSE\nyMhIWFhYICQkBDt27EB+fj4+//xzWFlZoVu3bjh06BDOnj1b5udQKpWYPn06Xn31VQBAYGAgfv75\nZ/z222/o2rWr+nk+Pj4AxBTlLVu21P2EkVlgCYRIhuIXdCcnJ1haWmpsUygUqF+/Ph4+fAgA+OOP\nP9CkSRO0a9cOBQUFKCgogFKpRO/evREdHa21mp1KSkoKAKB58+Za+3x9fWFhIf7LWlhYwMnJCR06\ndNBYVbNBgwbqGMoSGBiovm9jY4OGDRsiOztb4zl169ZFvXr1cPPmzXKPReaNJRAiGRwcHLS2lbd0\naWZmJtLS0tChQ4dS99+/f7/UlesePXoEAKUu96trDGUpeWwLCwsolcpSn6eKh6g0TCBERlC3bl14\neHggIiKi1P1OTk7lbn/06JHWkqpV7eHDh2XGSQSwCovIKDp37oxbt27BxcUFvr6+6tvhw4exefNm\nWFtbl/q6pk2bAgDS0tKqMlwtDx48QHZ2Ntzc3EwaB1VvTCBERjBkyBA0adIEEyZMwPfff48///wT\n4eHhWLNmDdzd3cscoNepUyfY2dnJ6u5rTKdPnwYAdOvWzaRxUPXGBEJkBA4ODti6dSv8/PwQHh6O\nKVOm4Pjx4/jggw8wffr0Ml9Xp04d9OjRA8eOHavCaLUdO3YMHTt2ZAmEysWR6ETVzPnz5zFy5Ej8\n+uuvpTa0G1t2dja6d++O8PBwvPDCC1X+/lRzsARCVM107NgRffr00RohXlV27NgBT09P9OnTxyTv\nTzUHSyBE1dC9e/cwZMgQfPvtt2jRokWVvW9mZiZeeeWVKn9fqpmYQIiISC+swiIiIr0wgRARkV6Y\nQIiISC9MIEREpBcmECIi0sv/Axoq9SUWIYmgAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "plot(system11.results, 'b-', label='simulation')\n", + "plot(data.insulin, 'bo', label='data')\n", + "\n", + "decorate(xlabel='Time (min)',\n", + " ylabel='Concentration')" + ] + }, + { + "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": 99, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "I_m = data.insulin.max()\n", + "I_b = data.insulin[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "G0 = 290\n", + "G_b = data.glucose[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.4150938228741885" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p1 = (I_m - I_b)/(k*(G0-G_b))\n", + "p1" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "38.301171870899175" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "p2 = gamma * 10**4\n", + "p2" + ] + }, + { + "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 +} From 9bff479d12788c97c42042e1da891c972428bbe8 Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Tue, 31 Oct 2017 17:00:34 -0400 Subject: [PATCH 09/11] Chapter 9 Notebook --- code/chap09mine.ipynb | 1998 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1998 insertions(+) create mode 100644 code/chap09mine.ipynb diff --git a/code/chap09mine.ipynb b/code/chap09mine.ipynb new file mode 100644 index 00000000..31589524 --- /dev/null +++ b/code/chap09mine.ipynb @@ -0,0 +1,1998 @@ +{ + "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": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] second" + ], + "text/latex": [ + "$[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "duration = 10 * s\n", + "ts = linspace(0, duration, 11)\n", + "ts" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Now we make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "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": 21, + "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", + " \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": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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": 70, + "metadata": {}, + "outputs": [], + "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": 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", + "
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
\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" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system.results.head()" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
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", + "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": 11, + "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": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file chap09-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\nYBs/fryTKxFCiJbn113Cv6ayyBwugPVm0H379hEYGIhGo3F2OUII0SKYTCaKioro0aOHci/kpUjY\nCCGEsLsW1/oshBCi5ZGwEUIIYXcSNkIIIexOwkYIIYTdSdgIIYSwOwmbyzCZTLz66qsMHDiQxMRE\nZsyYQXFxsbPLcpji4mKeeOIJBg4cSFJSEn/+8585cuSIs8tyij179tCtWzcyMjKcXYrDffzxx4wY\nMYL4+HjGjh3LDz/84OySHKqmpobnn39e+XcwZcoUjh075uyyHGLevHnMmTPHZmzr1q2MHj2a+Ph4\nRo0aRXp6epOeS8LmMhYtWkRaWhovv/wyK1asID8/n4ceesjZZTmE2WzmwQcf5MSJE/zrX//io48+\nwtPTk0mTJlFaWurs8hyqpqaGxx9//Ip3SLdGaWlpPPvss9x7772sWbOG5ORkHnjgAfLy8pxdmsP8\n7W9/Y9u2bbzxxhusXLkSnU7HlClTlAUbWyOLxaJ8v7907Ngxpk2bxsiRI0lLS2PYsGFMnz6do0eP\nNulJxSXU19dbEhMTLZ988okylpuba4mJibHs3LnTiZU5xv79+y0xMTGWY8eOKWP19fWWXr16WdLS\n0pxYmeM9/fTTlgkTJlhiYmIsP/74o7PLcRiz2WwZMmSIZcGCBcqYyWSy3HrrrZbPP//ciZU5VkpK\nimXZsmXK46NHj1piYmIs+/btc2JV9nPy5EnLhAkTLH379rUMHjzY8tRTTynbzv9b+KUJEyZY5s6d\ne8XnlTObRhw6dIjq6mpSUlKUsYiICMLDw8nMzHRiZY4RGhrKW2+9RadOnZSx81OLl5eXO6ssh0tP\nT2fLli3MnTvX2aU43PHjxzl16hS33HKLMqZWq/nss88YNWqUEytzLD8/P9atW0dJSQkGg4FVq1bh\n7e1NZGSks0uzi127dhEaGsqaNWuIiIiw2ZaZmWnzngjQt2/fJr0nytxojTg/uVxwcLDNeFBQUJuY\nrNPX15fBgwfbjC1fvpy6ujoGDhzonKIc7OzZs8yZM4e///3veHt7O7schztx4gQAFRUV/OlPf+Lo\n0aNERUUxa9Ysevfu7dziHOj5559n9uzZ3HDDDWg0GvR6Pe+++y5eXl7OLs0uRo8ezejRoy+5LT8/\n/5rfE+XMphG1tbWo1Wq0Wq3NuKura6u+VtuYTZs28dprrzF58uTftLR3S/LMM88wdOhQUlNTnV2K\n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\n6wAAAABJRU5ErkJggg==\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": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t= [0.0 second]\n", + "t= [0.0]\n", + "t= [1.2391823754412774e-05]\n", + "t= [1.2391823754412774e-05]\n", + "t= [2.478364750882555e-05]\n", + "t= [2.478364750882555e-05]\n", + "t= [0.12394302119163657]\n", + "t= [0.2478612587357643]\n", + "t= [0.37177949627989204]\n", + "t= [1.6109618717211696]\n", + "t= [2.850144247162447]\n", + "t= [4.089326622603725]\n", + "t= [16.481150377016498]\n" + ] + } + ], + "source": [ + "def slope_func2(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= [' + str(t) + ']')\n", + " \n", + " return dydt, dvdt\n", + "\n", + "run_odeint(system, slope_func2)" + ] + }, + { + "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": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t= [0.0 second]\n", + "t= [0.0]\n", + "t= [1.2445807683639053e-05]\n", + "t= [1.2445807683639053e-05]\n", + "t= [2.4891615367278106e-05]\n", + "t= [2.4891615367278106e-05]\n", + "t= [0.12448296845175781]\n", + "t= [0.24894104528814834]\n", + "t= [0.37339912212453885]\n", + "t= [1.617979890488444]\n", + "t= [2.862560658852349]\n", + "t= [4.107141427216254]\n", + "t= [16.552949110855305]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "duration = 10 * s\n", + "ts2 = linspace(0, duration, 5)\n", + "system2 = System(init=init, g=g, ts=ts2)\n", + "run_odeint(system2, slope_func2)\n", + "plot_position(system2.results)\n", + "#decreasing dt causes the line to not be as smooth" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "t= [0.0 second]\n", + "t= [0.0]\n", + "t= [8.41951220586197e-05]\n", + "t= [8.41951220586197e-05]\n", + "t= [0.0001683902441172394]\n", + "t= [0.0001683902441172394]\n", + "t= [0.8421196108303142]\n", + "t= [1.6840708314165111]\n", + "t= [2.526022052002708]\n", + "t= [10.94553425786468]\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "duration = 10 * s\n", + "ts2 = linspace(0, duration, 15)\n", + "system2 = System(init=init, g=g, ts=ts2)\n", + "run_odeint(system2, slope_func2)\n", + "plot_position(system2.results)\n", + "#increasing dt causes the line to become smoother than the original" + ] + }, + { + "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": 73, + "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": 28, + "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", + "
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": 28, + "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": 29, + "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": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(8.81792826905006)" + ] + }, + "execution_count": 30, + "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": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "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": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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": 33, + "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": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-0.003708896250259386 meter" + ], + "text/latex": [ + "$-0.003708896250259386 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "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": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-86.41569703669059 meter/second" + ], + "text/latex": [ + "$-86.41569703669059 \\frac{meter}{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "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": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-311.0965093320861 kilometer/hour" + ], + "text/latex": [ + "$-311.0965093320861 \\frac{kilometer}{hour}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "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": 78, + "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": 80, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n", + " warnings.warn(\"No labelled objects found. \"\n", + "C:\\ProgramData\\Miniconda3\\lib\\site-packages\\scipy\\integrate\\odepack.py:218: ODEintWarning: Excess work done on this call (perhaps wrong Dfun type). Run with full_output = 1 to get quantitative information.\n", + " warnings.warn(warning_msg, ODEintWarning)\n" + ] + }, + { + "data": { + "image/png": "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\n/fr1PPPMM0yaNImLFy+qj+Li4rv+O3C7z9+Yv79cM7OwV199lYqKChYtWkRFRQWPPfYYUVFRlm5W\nk7C2tiY+Pp7Vq1fz0ksvUVJSgo+PDzt27MDV1dXSzWtyHh4exMbGsmbNGrZt20aPHj2Ii4ujZ8+e\nlm5akwkNDcXa2potW7bw66+/0rlzZ8LDw5k4caKlm2YSX375JZWVlezatYtdu3YZlC1YsICXX375\nrv4O3O7zz5kzp8F/f1mcUwghRIsn3YxCCCFaPAlmQgghWjwJZkIIIVo8CWZCCCFaPAlmQgghWjwJ\nZkI0ggwGNiTnQ1iKBDPRKg0fPvyOVy+u+Z6tW7fywQcfqK83bdpEnz597qjOJUuWMHLkyDt6T0M0\n5PPeTnBwMDNnzlRf79q1i5iYGJPU/dNPPzFs2DCuXr3a6Lry8vLo27cvv/322233PXbsGE8//XSt\n+RFF8yc3TYtWKTY2Fmdn50a9Z8OGDcyZM0d9PXHiRB5//HGTtbG5W758ucFURHFxcfj6+ja63qqq\nKsLDwwkNDeWee+5pdH3//ve/efjhh7n33ntvu6+/vz/du3dn8+bNLFiwoNHHFk1Hgplole40g6rP\ne9zd3XF3d29ok1qcXr16maXeAwcOcP78eSZNmmSS+g4fPkxgYGC993/ppZd49tlnmTJlCm5ubiZp\ngzA/6WYUrZJ+t9vPP/+Mh4cHf//733nllVcYMGAAAQEBREZGUlJSYvQ9Hh4eVFZWEhsbi4eHB1C7\nm7GyspKtW7fy5JNP0r9/f7y9vZkyZQpHjx6tVxtLSkoYMGAA69atM9heWlqKj48PGzduBHSZTFxc\nHL/73e/o168fY8aMITEx8ZZ1//bbb7z99tsMHz6chx9+mPHjx/P3v//dYJ/y8nLee+89hg8fjpeX\nF+PGjePLL79Uy/W7GYcPH86FCxfYs2cPHh4enDx5kocffpgNGzYY1FlYWEj//v355JNP6mxbfHw8\no0ePNljnz8PDg507d/LGG28wYMAAHnnkEWJjY7l27Rrh4eH4+voyePBg1qxZY3DdrrKykm+//VbN\nmPPz81m4cCGDBw+mf//+BAUFkZSUZHD8Pn360LVrVz766KNbnkPRvEgwE+KGZcuW0a1bNzZv3sys\nWbNITExk69atRvfduXMnVlZWTJgwgZ07dxrdZ/Xq1cTFxTFlyhTi4+N5++23uXLlCgsWLDAIknVx\n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\nMAMABO8DF39MYwq9a+AAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "duration = 10 * s\n", + "v_array = linrange(0, 25, 1)\n", + "\n", + "for v_i in v_array:\n", + " system = make_system(duration, v_i)\n", + " t_gnd = flight_time(system)\n", + " plot(v_i, t_gnd, 'r-')\n", + " decorate(xlabel='initial velocity (m/s)', ylabel='time to gnd(s)')" + ] + }, + { + "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": 43, + "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": 44, + "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": 45, + "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": 45, + "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": 46, + "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": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, )" + ] + }, + "execution_count": 47, + "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": 48, + "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": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 49, + "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": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(22.439794207078908)" + ] + }, + "execution_count": 50, + "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": 51, + "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": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 52, + "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": 53, + "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": 54, + "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": 55, + "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": 56, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here\n", + "condition.set(v_init = -100 * m/s)\n", + "system = make_system(condition)\n", + "run_odeint(system, slope_func)\n", + "#I predict that since we added drag to slopefunc that upward force will slow the penny down to its terminal velocity" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Solution goes here\n", + "plot_position(system.results)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "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": {}, + "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": 59, + "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": 60, + "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": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\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": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 62, + "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": 63, + "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": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-11.034779626277231 meter" + ], + "text/latex": [ + "$-11.034779626277231 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 64, + "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": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.42587017])" + ] + }, + "execution_count": 65, + "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": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " )" + ] + }, + "execution_count": 66, + "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." + ] + }, + { + "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 +} From b19a2baac27272b1ab93b306cbf1d813fc04822f Mon Sep 17 00:00:00 2001 From: brycemann8334 <31594623+brycemann8334@users.noreply.github.com> Date: Mon, 6 Nov 2017 15:55:26 -0500 Subject: [PATCH 10/11] Chapter 10 Notebook --- code/chap10mine.ipynb | 9351 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 9351 insertions(+) create mode 100644 code/chap10mine.ipynb diff --git a/code/chap10mine.ipynb b/code/chap10mine.ipynb new file mode 100644 index 00000000..c8230593 --- /dev/null +++ b/code/chap10mine.ipynb @@ -0,0 +1,9351 @@ +{ + "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": 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 notebook\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": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "m = UNITS.meter\n", + "s = UNITS.second\n", + "kg = UNITS.kilogram" + ] + }, + { + "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": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 0. -9.8] meter/second2" + ], + "text/latex": [ + "$[ 0. -9.8] \\frac{meter}{second^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "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": 16, + "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": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "45 degree" + ], + "text/latex": [ + "$45 degree$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "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": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "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": 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.to(radian)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also convert from radians to degrees." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "45.0 degree" + ], + "text/latex": [ + "$45.0 degree$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "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": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.7853981633974483 radian" + ], + "text/latex": [ + "$0.7853981633974483 radian$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "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": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 1.1785113 1.1785113] newton/kilogram" + ], + "text/latex": [ + "$[ 1.1785113 1.1785113] \\frac{newton}{kilogram}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "N = UNITS.newton\n", + "f_mag = .5 * N\n", + "f_angle = 45 * degree\n", + "f_rad = f_angle.to(radian)\n", + "mass = .3 * kg\n", + "x, y = pol2cart(f_angle, f_mag)\n", + "f_cart = Vector(x, y)\n", + "a_force = f_cart/mass\n", + "a_force" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "[ 1.1785113 -8.6214887] newton/kilogram" + ], + "text/latex": [ + "$[ 1.1785113 -8.6214887] \\frac{newton}{kilogram}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "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": 24, + "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": 25, + "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": 26, + "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": 26, + "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": 27, + "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": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(,\n", + " ,\n", + " ,\n", + " )" + ] + }, + "execution_count": 28, + "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": 29, + "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": 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", + " \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": 30, + "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": 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", + " \n", + " \n", + " \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": 31, + "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": 32, + "metadata": { + "collapsed": true + }, + "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": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "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": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "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": 38, + "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": 39, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "condition2 = 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 = 30 * degree,\n", + " velocity = 40 * m / s,\n", + " duration = 5.1 * s)\n", + "system2 = make_system(condition2)\n", + "run_odeint(system2, slope_func)\n", + "animate2d(system2.results.x, system2.results.y)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "condition2.set(angle = 90 * degree)\n", + "system2 = make_system(condition2)\n", + "run_odeint(system2, slope_func)\n", + "animate2d(system2.results.x, system2.results.y)\n" + ] + }, + { + "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": 46, + "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": 47, + "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": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(102.72237841710975)" + ] + }, + "execution_count": 48, + "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": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Hint: rather than modify `condition`, make a copy\n", + "\n", + "condition3 = Condition(condition)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(109.07212101030548)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Solution goes here\n", + "condition3.set(rho = 1 * kg/m**3)\n", + "system3 = make_system(condition3)\n", + "run_odeint(system3, slope_func)\n", + "interpolate_range(system3.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": 51, + "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", + " 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": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 287 ms\n" + ] + }, + { + "data": { + "text/plain": [ + "array(109.07212101030548)" + ] + }, + "execution_count": 52, + "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": 53, + "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": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " this.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('