diff --git a/code/Duck.ipynb b/code/Duck.ipynb
new file mode 100644
index 00000000..e6d13ab4
--- /dev/null
+++ b/code/Duck.ipynb
@@ -0,0 +1,236 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulating Ducks in Python\n",
+ "\n",
+ "Dieter Brehm's implementation of a duck model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " density_duck \n",
+ " 0.3 \n",
+ " \n",
+ " \n",
+ " density_water \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " r \n",
+ " 5.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "density_duck 0.3\n",
+ "density_water 1.0\n",
+ "r 5.0\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = System (\n",
+ "density_duck = 0.3, # g / cm^3\n",
+ "density_water = 1, # g / cm^3\n",
+ "r = 5, # cm\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "\n",
+ "def error_func(d, system):\n",
+ " volume_duck = 4 / 3 * np.pi * (system.r**3)\n",
+ " mass_duck = volume_duck * system.density_duck\n",
+ " volume_water = (np.pi / 3) * (3 * system.r * d**2 - d**3)\n",
+ " mass_water = system.density_water * volume_water\n",
+ " \n",
+ " #print(\"try with d value\", d)\n",
+ " return mass_duck - mass_water"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "150.73060482627858"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "error_func(0.65, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([3.63257491])"
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "res = fsolve(error_func, 3, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sweep_duck_density():\n",
+ " sweep = SweepSeries()\n",
+ " for density in linspace(0, 1, 100):\n",
+ " system[0] = density\n",
+ " res = fsolve(error_func, 3, system)\n",
+ " sweep[density] = res[0]\n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "C:\\Miniconda3\\lib\\site-packages\\scipy\\optimize\\minpack.py:163: RuntimeWarning: The number of calls to function has reached maxfev = 400.\n",
+ " warnings.warn(msg, RuntimeWarning)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 77,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "results = sweep_duck_density()\n",
+ "plot(results)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap01mine.ipynb b/code/chap01mine.ipynb
new file mode 100644
index 00000000..f3449739
--- /dev/null
+++ b/code/chap01mine.ipynb
@@ -0,0 +1,728 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 1\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.\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. \n",
+ "\n",
+ "* If you run a text cell, Jupyter typesets the text and displays 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",
+ "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, as 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, select \"Close and Halt\" from the File menu."
+ ]
+ },
+ {
+ "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 \n",
+ "\n",
+ "1. Read the chapter first to understand the concepts and vocabulary, \n",
+ "2. Run the notebook to review what you learned and see it in action, and then\n",
+ "3. Attempt the exercises.\n",
+ "\n",
+ "If you try to work through the notebooks without reading the book, you're gonna have a bad time. 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."
+ ]
+ },
+ {
+ "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 three 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 configures Jupyter to display some values that would otherwise be invisible. \n",
+ "\n",
+ "3. It imports everything defined in `modsim`.\n",
+ "\n",
+ "Select the following cell and press SHIFT-ENTER to run it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "If this cell runs successfully, it produces no output other than this message.\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim library\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 first time you run this on a new installation of Python, it might produce a warning message in pink. That's probably ok, but if you get a message that says `modsim.py depends on Python 3.7 features`, that means you have an older version of Python, and some features in `modsim.py` won't work correctly.\n",
+ "\n",
+ "If you need a newer version of Python, I recommend installing Anaconda. You'll find more information in the preface of the book."
+ ]
+ },
+ {
+ "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. It uses [Pint](https://pint.readthedocs.io/en/latest/), which is a Python library that provides tools for computing with units.\n",
+ "\n",
+ "The following lines create new variables named `meter` and `second`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "meter"
+ ],
+ "text/latex": [
+ "$meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "meter = UNITS.meter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "second"
+ ],
+ "text/latex": [
+ "$second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "second = UNITS.second"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "To find out what other units are defined, type `UNITS.` (including the period) 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": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Create a variable named `a` and give it the value of acceleration due to gravity."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "9.8 meter/second2 "
+ ],
+ "text/latex": [
+ "$9.8 \\frac{meter}{second^{2}}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "a = 9.8 * meter / second**2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Create `t` and give it the value 4 seconds."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "4 second"
+ ],
+ "text/latex": [
+ "$4 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t = 4 * second"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Compute the distance a penny would fall after `t` seconds with constant acceleration `a`. Notice that the units of the result are correct."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "78.4 meter"
+ ],
+ "text/latex": [
+ "$78.4 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "a * t**2 / 2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise**: Compute the velocity of the penny after `t` seconds. Check that the units of the result are correct."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "39.2 meter/second"
+ ],
+ "text/latex": [
+ "$39.2 \\frac{meter}{second}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "v = a * t"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise**: Why would it be nonsensical to add `a` and `t`? What happens if you try?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "DimensionalityError",
+ "evalue": "Cannot convert from 'meter / second ** 2' ([length] / [time] ** 2) to 'second' ([time])",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mDimensionalityError\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[0mblah\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32mC:\\Miniconda3\\lib\\site-packages\\pint\\quantity.py\u001b[0m in \u001b[0;36m__add__\u001b[1;34m(self, other)\u001b[0m\n\u001b[0;32m 585\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 586\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__add__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mother\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 587\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_add_sub\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mother\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0moperator\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 588\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 589\u001b[0m \u001b[0m__radd__\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m__add__\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mC:\\Miniconda3\\lib\\site-packages\\pint\\quantity.py\u001b[0m in \u001b[0;36m_add_sub\u001b[1;34m(self, other, op)\u001b[0m\n\u001b[0;32m 507\u001b[0m raise DimensionalityError(self._units, other._units,\n\u001b[0;32m 508\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdimensionality\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 509\u001b[1;33m other.dimensionality)\n\u001b[0m\u001b[0;32m 510\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 511\u001b[0m \u001b[1;31m# Next we define some variables to make if-clauses more readable.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;31mDimensionalityError\u001b[0m: Cannot convert from 'meter / second ** 2' ([length] / [time] ** 2) to 'second' ([time])"
+ ]
+ }
+ ],
+ "source": [
+ "blah = a + t"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The error messages you get from Python are big and scary, but if you read them carefully, they contain a lot of useful information.\n",
+ "\n",
+ "1. Start from the bottom and read up.\n",
+ "2. The last line usually tells you what type of error happened, and sometimes additional information.\n",
+ "3. The previous lines are a \"traceback\" of what was happening when the error occurred. The first section of the traceback shows the code you wrote. The following sections are often from Python libraries.\n",
+ "\n",
+ "In this example, you should get a `DimensionalityError`, which is defined by Pint to indicate that you have violated a rules of dimensional analysis: you cannot add quantities with different dimensions.\n",
+ "\n",
+ "Before you go on, you might want to delete the erroneous code so the notebook can run without errors."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Falling pennies\n",
+ "\n",
+ "Now let's solve the falling penny problem.\n",
+ "\n",
+ "Set `h` to the height of the Empire State Building:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "381 meter"
+ ],
+ "text/latex": [
+ "$381 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "h = 381 * meter"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Compute the time it would take a penny to fall, assuming constant acceleration.\n",
+ "\n",
+ "$ a t^2 / 2 = h $\n",
+ "\n",
+ "$ t = \\sqrt{2 h / a}$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "8.817885349720552 second"
+ ],
+ "text/latex": [
+ "$8.817885349720552 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t = sqrt(2 * h / a)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Given `t`, we can compute the velocity of the penny when it lands.\n",
+ "\n",
+ "$v = a t$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "86.41527642726142 meter/second"
+ ],
+ "text/latex": [
+ "$86.41527642726142 \\frac{meter}{second}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "v = a * t"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can convert from one set of units to another like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "hour"
+ ],
+ "text/latex": [
+ "$hour$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mile = UNITS.mile\n",
+ "hour= UNITS.hour"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "193.30546802805438 mile/hour"
+ ],
+ "text/latex": [
+ "$193.30546802805438 \\frac{mile}{hour}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "v.to(mile/hour)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Suppose you bring a 10 foot pole to the top of the Empire State Building and use it to drop the penny from `h` plus 10 feet.\n",
+ "\n",
+ "Define a variable named `foot` that contains the unit `foot` provided by `UNITS`. Define a variable named `pole_height` and give it the value 10 feet.\n",
+ "\n",
+ "What happens if you add `h`, which is in units of meters, to `pole_height`, which is in units of feet? What happens if you write the addition the other way around?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "10 foot"
+ ],
+ "text/latex": [
+ "$10 foot$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "foot = UNITS.foot\n",
+ "pole_height = 10 * foot"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "384.048 meter"
+ ],
+ "text/latex": [
+ "$384.048 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "totalHeight = h + pole_height"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** In reality, air resistance limits the velocity of the penny. At about 18 m/s, 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 18 m/s, and then 0 afterwards. What is the total time for the penny to fall 381 m?\n",
+ "\n",
+ "You can break this question into three parts:\n",
+ "\n",
+ "1. How long until the penny reaches 18 m/s with constant acceleration `a`.\n",
+ "2. How far would the penny fall during that time?\n",
+ "3. How long to fall the remaining distance with constant velocity 18 m/s?\n",
+ "\n",
+ "Suggestion: Assign each intermediate result to a variable with a meaningful name. And assign units to all quantities!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Restart and run all\n",
+ "\n",
+ "When you change the contents of a cell, you have to run it again for those changes to have an effect. If you forget to do that, the results can be confusing, because the code you are looking at is not the code you ran.\n",
+ "\n",
+ "If you ever lose track of which cells have run, and in what order, you should go to the Kernel menu and select \"Restart & Run All\". Restarting the kernel means that all of your variables get deleted, and running all the cells means all of your code will run again, in the right order.\n",
+ "\n",
+ "**Exercise:** Select \"Restart & Run All\" now and confirm that it does what you want."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap02mine.ipynb b/code/chap02mine.ipynb
new file mode 100644
index 00000000..9ed8b78c
--- /dev/null
+++ b/code/chap02mine.ipynb
@@ -0,0 +1,924 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 2\n",
+ "\n",
+ "Copyright 2017 Allen Downey\n",
+ "\n",
+ "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim library\n",
+ "from modsim import *\n",
+ "\n",
+ "# set the random number generator\n",
+ "np.random.seed(7)\n",
+ "\n",
+ "# If this cell runs successfully, it produces no output."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Modeling a bikeshare system"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We'll start with a `State` object that represents the number of bikes at each station.\n",
+ "\n",
+ "When you display a `State` object, it lists the state variables and their values:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can access the state variables using dot notation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare.olin"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "bikeshare.wellesley"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** What happens if you spell the name of a state 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 state variable. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Add a third attribute called `babson` with initial value 0, and display the state of `bikeshare` again."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Updating\n",
+ "\n",
+ "We can use the update operators `+=` and `-=` to change state variables."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare.olin -= 1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If we display `bikeshare`, we should see the change."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Of course, if we subtract a bike from `olin`, we should add it to `wellesley`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare.wellesley += 1\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Functions\n",
+ "\n",
+ "We can take the code we've written so far and encapsulate it in a function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "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. When you call the function, it runs the statements inside."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bike_to_wellesley()\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "One common error is to omit the parentheses, which has the effect of looking up the function, but not calling it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bike_to_wellesley"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The output indicates that `bike_to_wellesley` is a function defined in a \"namespace\" called `__main__`, but you don't have to understand what that means."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Define a function called `bike_to_olin` that moves a bike from Wellesley to Olin. Call the new function and display `bikeshare` to confirm that it works."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Conditionals"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`modsim.py` provides `flip`, which takes a probability and returns either `True` or `False`, which are special values defined by Python.\n",
+ "\n",
+ "The Python function `help` looks up a function and displays its documentation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "help(flip)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "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": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "flip(0.7)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "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": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if flip(0.7):\n",
+ " print('heads')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With an else clause, we can print heads or tails depending on whether `flip` returns `True` or `False`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if flip(0.7):\n",
+ " print('heads')\n",
+ "else:\n",
+ " print('tails')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Step\n",
+ "\n",
+ "Now let's get back to the bikeshare state. Again let's start with a new `State` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Suppose that in any given minute, there is a 50% 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": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if flip(0.5):\n",
+ " bike_to_wellesley()\n",
+ " print('Moving a bike to Wellesley')\n",
+ "\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And maybe at the same time, there is also a 40% chance that a student at Wellesley rides to Olin."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if flip(0.4):\n",
+ " bike_to_olin()\n",
+ " print('Moving a bike to Olin')\n",
+ "\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": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def step():\n",
+ " if flip(0.5):\n",
+ " bike_to_wellesley()\n",
+ " print('Moving a bike to Wellesley')\n",
+ " \n",
+ " if flip(0.4):\n",
+ " bike_to_olin()\n",
+ " print('Moving a bike to Olin')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Since this function takes no parameters, we call it like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "step()\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Parameters\n",
+ "\n",
+ "As defined in the previous section, `step` is not as useful as it could be, because the probabilities `0.5` and `0.4` are \"hard coded\".\n",
+ "\n",
+ "It would be better to generalize this function so it takes the probabilities `p1` and `p2` as parameters:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def step(p1, p2):\n",
+ " if flip(p1):\n",
+ " bike_to_wellesley()\n",
+ " print('Moving a bike to Wellesley')\n",
+ " \n",
+ " if flip(p2):\n",
+ " bike_to_olin()\n",
+ " print('Moving a bike to Olin')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can call it like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "step(0.5, 0.4)\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** At the beginning of `step`, add a print statement that displays the values of `p1` and `p2`. Call it again with values `0.3`, and `0.2`, and confirm that the values of the parameters are what you expect. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "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": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def step(p1, p2):\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 `State` object:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can use a `for` loop to move 4 bikes from Olin to Wellesley."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range(4):\n",
+ " bike_to_wellesley()\n",
+ " \n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Or we can simulate 4 random time steps."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range(4):\n",
+ " step(0.3, 0.2)\n",
+ " \n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If each step corresponds to a minute, we can simulate an entire hour like this."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range(60):\n",
+ " step(0.3, 0.2)\n",
+ "\n",
+ "bikeshare"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "After 60 minutes, you might see that the number of bike at Olin is negative. We'll fix that problem in the next notebook.\n",
+ "\n",
+ "But first, we want to plot the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## TimeSeries\n",
+ "\n",
+ "`modsim.py` provides an object called a `TimeSeries` that can contain a sequence of values changing over time.\n",
+ "\n",
+ "We can create a new, empty `TimeSeries` like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results = TimeSeries()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And we can add a value to the `TimeSeries` like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results[0] = bikeshare.olin\n",
+ "results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The `0` in brackets is an `index` that indicates that this value is associated with time step 0.\n",
+ "\n",
+ "Now we'll use a for loop to save the results of the simulation. I'll start one more time with a new `State` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's a for loop that runs 10 steps and stores the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for i in range(10):\n",
+ " step(0.3, 0.2)\n",
+ " results[i] = bikeshare.olin"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can display the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A `TimeSeries` is a specialized version of a Pandas `Series`, so we can use any of the functions provided by `Series`, including several that compute summary statistics:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results.mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You can read the documentation of `Series` [here](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Plotting\n",
+ "\n",
+ "We can also plot the results like this."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot(results, label='Olin')\n",
+ "\n",
+ "decorate(title='Olin-Wellesley Bikeshare',\n",
+ " xlabel='Time step (min)', \n",
+ " ylabel='Number of bikes')\n",
+ "\n",
+ "savefig('figs/chap01-fig01.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`decorate`, which is defined in the `modsim` library, adds a title and labels the axes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "help(decorate)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`savefig()` saves a figure in a file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "help(savefig)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The suffix of the filename indicates the format you want. This example saves the current figure in a PDF file named `chap01-fig01.pdf`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Wrap the code from this section in a function named `run_simulation` that takes three parameters, named `p1`, `p2`, and `num_steps`.\n",
+ "\n",
+ "It should:\n",
+ "\n",
+ "1. Create a `TimeSeries` object to hold the results.\n",
+ "2. Use a for loop to run `step` the number of times specified by `num_steps`, passing along the specified values of `p1` and `p2`.\n",
+ "3. After each step, it should save the number of bikes at Olin in the `TimeSeries`.\n",
+ "4. After the for loop, it should plot the results and\n",
+ "5. Decorate the axes.\n",
+ "\n",
+ "To test your function:\n",
+ "\n",
+ "1. Create a `State` object with the initial state of the system.\n",
+ "2. Call `run_simulation` with appropriate parameters.\n",
+ "3. Save the resulting figure.\n",
+ "\n",
+ "Optional:\n",
+ "\n",
+ "1. Extend your solution so it creates two `TimeSeries` objects, keeps track of the number of bikes at Olin *and* at Wellesley, and plots both series at the end."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Opening the hood\n",
+ "\n",
+ "The functions in `modsim.py` are built on top of several widely-used Python libraries, especially NumPy, SciPy, and Pandas. These libraries are powerful but can be hard to use. The intent of `modsim.py` is to give you the power of these libraries while making it easy to get started.\n",
+ "\n",
+ "In the future, you might want to use these libraries directly, rather than using `modsim.py`. So we will pause occasionally to open the hood and let you see how `modsim.py` works.\n",
+ "\n",
+ "You don't need to know anything in these sections, so if you are already feeling overwhelmed, you might want to skip them. But if you are curious, read on."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Pandas\n",
+ "\n",
+ "This chapter introduces two objects, `State` and `TimeSeries`. Both are based on the `Series` object defined by Pandas, which is a library primarily used for data science.\n",
+ "\n",
+ "You can read the documentation of the `Series` object [here](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html)\n",
+ "\n",
+ "The primary differences between `TimeSeries` and `Series` are:\n",
+ "\n",
+ "1. I made it easier to create a new, empty `Series` while avoiding a [confusing inconsistency](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html).\n",
+ "\n",
+ "2. I provide a function so the `Series` looks good when displayed in Jupyter.\n",
+ "\n",
+ "3. I provide a function called `set` that we'll use later.\n",
+ "\n",
+ "`State` has all of those capabilities; in addition, it provides an easier way to initialize state variables, and it provides functions called `T` and `dt`, which will help us avoid a confusing error later."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Pyplot\n",
+ "\n",
+ "The `plot` function in `modsim.py` is based on the `plot` function in Pyplot, which is part of Matplotlib. You can read the documentation of `plot` [here](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html).\n",
+ "\n",
+ "`decorate` provides a convenient way to call the `pyplot` functions `title`, `xlabel`, and `ylabel`, and `legend`. It also avoids an annoying warning message if you try to make a legend when you don't have any labelled lines."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "help(decorate)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### NumPy\n",
+ "\n",
+ "The `flip` function in `modsim.py` uses NumPy's `random` function to generate a random number between 0 and 1.\n",
+ "\n",
+ "You can get the source code for `flip` by running the following cell."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%psource flip"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap03mine.ipynb b/code/chap03mine.ipynb
new file mode 100644
index 00000000..6d06838a
--- /dev/null
+++ b/code/chap03mine.ipynb
@@ -0,0 +1,596 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 3\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim library\n",
+ "from modsim import *\n",
+ "\n",
+ "# set the random number generator\n",
+ "np.random.seed(7)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## More than one State 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 `state` to the functions so they work with whatever `State` object we give them, instead of always using `bikeshare`. That makes it possible to work with more than one `State` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def step(state, p1, p2):\n",
+ " \"\"\"Simulate one minute of time.\n",
+ " \n",
+ " state: bikeshare State 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(state)\n",
+ " \n",
+ " if flip(p2):\n",
+ " bike_to_olin(state)\n",
+ " \n",
+ "def bike_to_wellesley(state):\n",
+ " \"\"\"Move one bike from Olin to Wellesley.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " state.olin -= 1\n",
+ " state.wellesley += 1\n",
+ " \n",
+ "def bike_to_olin(state):\n",
+ " \"\"\"Move one bike from Wellesley to Olin.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " state.wellesley -= 1\n",
+ " state.olin += 1\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": [
+ "And here's `run_simulation`, which is a solution to the exercise at the end of the previous notebook."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(state, p1, p2, num_steps):\n",
+ " \"\"\"Simulate the given number of time steps.\n",
+ " \n",
+ " state: State object\n",
+ " p1: probability of an Olin->Wellesley customer arrival\n",
+ " p2: probability of a Wellesley->Olin customer arrival\n",
+ " num_steps: number of time steps\n",
+ " \"\"\"\n",
+ " results = TimeSeries() \n",
+ " for i in range(num_steps):\n",
+ " step(state, p1, p2)\n",
+ " results[i] = state.olin\n",
+ " \n",
+ " plot(results, label='Olin')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can create more than one `State` object:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare1 = State(olin=10, wellesley=2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare2 = State(olin=2, wellesley=10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Whenever we call a function, we indicate which `State` object to work with:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bike_to_olin(bikeshare1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bike_to_wellesley(bikeshare2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And you can confirm that the different objects are getting updated independently:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "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 often."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)\n",
+ "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
+ "decorate_bikeshare()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can fix this problem using the `return` statement to exit the function early if an update would cause negative bikes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def bike_to_wellesley(state):\n",
+ " \"\"\"Move one bike from Olin to Wellesley.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.olin == 0:\n",
+ " return\n",
+ " state.olin -= 1\n",
+ " state.wellesley += 1\n",
+ " \n",
+ "def bike_to_olin(state):\n",
+ " \"\"\"Move one bike from Wellesley to Olin.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.wellesley == 0:\n",
+ " return\n",
+ " state.wellesley -= 1\n",
+ " state.olin += 1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now if you run the simulation again, it should behave."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2)\n",
+ "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
+ "decorate_bikeshare()"
+ ]
+ },
+ {
+ "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": 13,
+ "metadata": {},
+ "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": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "x == 5"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You can use `==` in an `if` statement."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if x == 5:\n",
+ " print('yes, x is 5')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "But if you use `=` in an `if` statement, you get an error."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "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 `State` object that creates and initializes additional state variables to keep track of the metrics."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2, \n",
+ " olin_empty=0, wellesley_empty=0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next we need versions of `bike_to_wellesley` and `bike_to_olin` that update the metrics."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def bike_to_wellesley(state):\n",
+ " \"\"\"Move one bike from Olin to Wellesley.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.olin == 0:\n",
+ " state.olin_empty += 1\n",
+ " return\n",
+ " state.olin -= 1\n",
+ " state.wellesley += 1\n",
+ " \n",
+ "def bike_to_olin(state):\n",
+ " \"\"\"Move one bike from Wellesley to Olin.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.wellesley == 0:\n",
+ " state.wellesley_empty += 1\n",
+ " return\n",
+ " state.wellesley -= 1\n",
+ " state.olin += 1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now when we run a simulation, it keeps track of unhappy customers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
+ "decorate_bikeshare()\n",
+ "savefig('figs/chap02-fig01.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "After the simulation, we can print the number of unhappy customers at each location."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare.olin_empty"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare.wellesley_empty"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises\n",
+ "\n",
+ "**Exercise:** As another metric, we might be interested in the time until the first customer arrives and doesn't find a bike. To make that work, we have to add a \"clock\" to keep track of how many time steps have elapsed:\n",
+ "\n",
+ "1. Create a new `State` object with an additional state variable, `clock`, initialized to 0. \n",
+ "\n",
+ "2. Write a modified version of `step` that adds one to the clock each time it is invoked.\n",
+ "\n",
+ "Test your code by running the simulation and check the value of `clock` at the end."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bikeshare = State(olin=10, wellesley=2, \n",
+ " olin_empty=0, wellesley_empty=0,\n",
+ " clock=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Continuing the previous exercise, let's record the time when the first customer arrives and doesn't find a bike.\n",
+ "\n",
+ "1. Create a new `State` object with an additional state variable, `t_first_empty`, initialized to -1 as a special value to indicate that it has not been set. \n",
+ "\n",
+ "2. Write a modified version of `step` that checks whether`olin_empty` and `wellesley_empty` are 0. If not, it should set `t_first_empty` to `clock` (but only if `t_first_empty` has not already been set).\n",
+ "\n",
+ "Test your code by running the simulation and printing the values of `olin_empty`, `wellesley_empty`, and `t_first_empty` at the end."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap04mine.ipynb b/code/chap04mine.ipynb
new file mode 100644
index 00000000..9d68f02f
--- /dev/null
+++ b/code/chap04mine.ipynb
@@ -0,0 +1,1213 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 4\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim library\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "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": 2,
+ "metadata": {},
+ "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": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "8"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "y = add_five(3)"
+ ]
+ },
+ {
+ "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": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "add_five(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "add_five(3)\n",
+ "add_five(5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": 6,
+ "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_state` that creates a `State` object with the state variables `olin=10` and `wellesley=2`, and then returns the new `State` object.\n",
+ "\n",
+ "Write a line of code that calls `make_state` and assigns the result to a variable named `init`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_state():\n",
+ " state = State(olin=10, wellesley=2)\n",
+ " return state"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " olin \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " wellesley \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "olin 10\n",
+ "wellesley 2\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "init = make_state()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Running simulations"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's the code from the previous notebook."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def step(state, p1, p2):\n",
+ " \"\"\"Simulate one minute of time.\n",
+ " \n",
+ " state: bikeshare State 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(state)\n",
+ " \n",
+ " if flip(p2):\n",
+ " bike_to_olin(state)\n",
+ " \n",
+ "def bike_to_wellesley(state):\n",
+ " \"\"\"Move one bike from Olin to Wellesley.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.olin == 0:\n",
+ " state.olin_empty += 1\n",
+ " return\n",
+ " state.olin -= 1\n",
+ " state.wellesley += 1\n",
+ " \n",
+ "def bike_to_olin(state):\n",
+ " \"\"\"Move one bike from Wellesley to Olin.\n",
+ " \n",
+ " state: bikeshare State object\n",
+ " \"\"\"\n",
+ " if state.wellesley == 0:\n",
+ " state.wellesley_empty += 1\n",
+ " return\n",
+ " state.wellesley -= 1\n",
+ " state.olin += 1\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": [
+ "Here's a modified version of `run_simulation` that creates a `State` object, runs the simulation, and returns the `State` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(p1, p2, num_steps):\n",
+ " \"\"\"Simulate the given number of time steps.\n",
+ " \n",
+ " p1: probability of an Olin->Wellesley customer arrival\n",
+ " p2: probability of a Wellesley->Olin customer arrival\n",
+ " num_steps: number of time steps\n",
+ " \"\"\"\n",
+ " state = State(olin=10, wellesley=2, \n",
+ " olin_empty=0, wellesley_empty=0)\n",
+ " \n",
+ " for i in range(num_steps):\n",
+ " step(state, p1, p2)\n",
+ " \n",
+ " return state"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now `run_simulation` doesn't plot anything:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " olin \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " wellesley \n",
+ " 12 \n",
+ " \n",
+ " \n",
+ " olin_empty \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " wellesley_empty \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "olin 0\n",
+ "wellesley 12\n",
+ "olin_empty 6\n",
+ "wellesley_empty 0\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state = run_simulation(0.4, 0.2, 60)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "But after the simulation, we can read the metrics from the `State` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "6"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state.olin_empty"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can run simulations with different values for the parameters. When `p1` is small, we probably don't run out of bikes at Olin."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state = run_simulation(0.2, 0.2, 60)\n",
+ "state.olin_empty"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "When `p1` is large, we probably do."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state = run_simulation(0.6, 0.2, 60)\n",
+ "state.olin_empty"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## More for loops"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`linspace` creates a NumPy array of equally spaced numbers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0. , 0.25, 0.5 , 0.75, 1. ])"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "p1_array = linspace(0, 1, 5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can use an array in a `for` loop, like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "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.\n",
+ "\n",
+ "`linspace` is defined in `modsim.py`. You can get the documentation using `help`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Help on function linspace in module modsim:\n",
+ "\n",
+ "linspace(start, stop, num=50, **options)\n",
+ " Returns an array of evenly-spaced values in the interval [start, stop].\n",
+ " \n",
+ " start: first value\n",
+ " stop: last value\n",
+ " num: number of 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(linspace)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`linspace` is based on a NumPy function with the same name. [Click here](https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html) to read more about how to use it."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** \n",
+ "Use `linspace` to make an array of 10 equally spaced numbers from 1 to 10 (including both)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "exampleArray = linspace(1, 10, 10)"
+ ]
+ },
+ {
+ "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": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Help on function linrange in module modsim:\n",
+ "\n",
+ "linrange(start=0, stop=None, step=1, **options)\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-step`\n",
+ " (at least approximately).\n",
+ " If you provide the keyword argument `endpoint=True`,\n",
+ " the last value in the array is `stop`.\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": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([1., 3., 5., 7., 9.])"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "testArray = linrange(1,11, 2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Sweeping parameters"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`p1_array` contains a range of values for `p1`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "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": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "p2 = 0.2\n",
+ "num_steps = 60\n",
+ "p1_array = linspace(0, 1, 11)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The following loop runs a simulation for each value of `p1` in `p1_array`; after each simulation, it prints the number of unhappy customers at the Olin station:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.0 0\n",
+ "0.1 0\n",
+ "0.2 0\n",
+ "0.30000000000000004 0\n",
+ "0.4 0\n",
+ "0.5 2\n",
+ "0.6000000000000001 16\n",
+ "0.7000000000000001 26\n",
+ "0.8 20\n",
+ "0.9 26\n",
+ "1.0 36\n"
+ ]
+ }
+ ],
+ "source": [
+ "for p1 in p1_array:\n",
+ " state = run_simulation(p1, p2, num_steps)\n",
+ " print(p1, state.olin_empty)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can do the same thing, but storing the results in a `SweepSeries` instead of printing them.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sweep = SweepSeries()\n",
+ "\n",
+ "for p1 in p1_array:\n",
+ " state = run_simulation(p1, p2, num_steps)\n",
+ " sweep[p1] = state.olin_empty"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And then we can plot the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.0 0\n",
+ "0.1 0\n",
+ "0.2 0\n",
+ "0.3 0\n",
+ "0.4 2\n",
+ "0.5 5\n",
+ "0.6 22\n",
+ "0.7 27\n",
+ "0.8 23\n",
+ "0.9 28\n",
+ "1.0 36\n",
+ "dtype: int64\n",
+ "Saving figure to file figs/chap02-fig02.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "print(sweep)\n",
+ "plot(sweep, label='Olin')\n",
+ "\n",
+ "decorate(title='Olin-Wellesley Bikeshare',\n",
+ " xlabel='Arrival rate at Olin (p1 in customers/min)', \n",
+ " ylabel='Number of unhappy customers')\n",
+ "\n",
+ "savefig('figs/chap02-fig02.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises\n",
+ "\n",
+ "**Exercise:** Wrap this code in a function named `sweep_p1` that takes an array called `p1_array` as a parameter. It should create a new `SweepSeries`, run a simulation for each value of `p1` in `p1_array`, store the results in the `SweepSeries`, and return the `SweepSeries`.\n",
+ "\n",
+ "Use your function to plot the number of unhappy customers at Olin as a function of `p1`. Label the axes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sweep_p1(p1_array):\n",
+ " sweep = SweepSeries()\n",
+ " for p1 in p1_array:\n",
+ " state = run_simulation(p1, p2, num_steps)\n",
+ " sweep[p1] = state.olin_empty\n",
+ " \n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(sweep_p1(p1_array), label=\"olin\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Write a function called `sweep_p2` that runs simulations with `p1=0.5` and a range of values for `p2`. It should store the results in a `SweepSeries` and return the `SweepSeries`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "p1 = 0.2\n",
+ "num_steps = 60\n",
+ "p2_array = linspace(0, 1, 11)\n",
+ "\n",
+ "def sweep_p2(p2_array):\n",
+ " sweep = SweepSeries()\n",
+ " for p2 in p2_array:\n",
+ " state = run_simulation(p1, p2, num_steps)\n",
+ " sweep[p2] = state.wellesley_empty\n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(sweep_p2(p2_array), label=\"wellesley\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Optional exercises\n",
+ "\n",
+ "The following two exercises are a little more challenging. If you are comfortable with what you have learned so far, you should give them a try. If you feel like you have your hands full, you might want to skip them for now.\n",
+ "\n",
+ "**Exercise:** Because our simulations are random, the results vary from one run to another, and the results of a parameter sweep tend to be noisy. We can get a clearer picture of the relationship between a parameter and a metric by running multiple simulations with the same parameter and taking the average of the results.\n",
+ "\n",
+ "Write a function called `run_multiple_simulations` that takes as parameters `p1`, `p2`, `num_steps`, and `num_runs`.\n",
+ "\n",
+ "`num_runs` specifies how many times it should call `run_simulation`.\n",
+ "\n",
+ "After each run, it should store the total number of unhappy customers (at Olin or Wellesley) in a `TimeSeries`. At the end, it should return the `TimeSeries`.\n",
+ "\n",
+ "Test your function with parameters\n",
+ "\n",
+ "```\n",
+ "p1 = 0.3\n",
+ "p2 = 0.3\n",
+ "num_steps = 60\n",
+ "num_runs = 10\n",
+ "```\n",
+ "\n",
+ "Display the resulting `TimeSeries` and use the `mean` function provided by the `TimeSeries` object to compute the average number of unhappy customers."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(p1, p2, num_steps):\n",
+ " \"\"\"Simulate the given number of time steps.\n",
+ " \n",
+ " p1: probability of an Olin->Wellesley customer arrival\n",
+ " p2: probability of a Wellesley->Olin customer arrival\n",
+ " num_steps: number of time steps\n",
+ " \"\"\"\n",
+ " state = State(olin=10, wellesley=2, \n",
+ " olin_empty=0, wellesley_empty=0)\n",
+ " \n",
+ " for i in range(num_steps):\n",
+ " step(state, p1, p2)\n",
+ " \n",
+ " return state\n",
+ "\n",
+ "def run_multiple_simulations(p1, p2, num_steps, num_runs):\n",
+ " \"\"\"Run the simulation several times with chosen parameters\n",
+ " \n",
+ " p1: probability of an Olin->Wellesley customer arrival\n",
+ " p2: probability of a Wellesley->Olin customer arrival\n",
+ " num_steps: number of time steps\n",
+ " num_runs: how many times we want to run the simulation\n",
+ " \"\"\"\n",
+ " unhappyPeople = TimeSeries()\n",
+ " i = 0\n",
+ " \n",
+ " while i < num_runs:\n",
+ " \n",
+ " state = run_simulation(p1, p2, num_steps)\n",
+ " unhappyPeople[i] = state.olin_empty\n",
+ " i += 1\n",
+ " \n",
+ " return unhappyPeople"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 18 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 20 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 11 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 14 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " 12 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 13 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " 14 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " 18 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "0 18\n",
+ "1 20\n",
+ "2 11\n",
+ "3 14\n",
+ "4 10\n",
+ "5 12\n",
+ "6 13\n",
+ "7 14\n",
+ "8 18\n",
+ "9 9\n",
+ "dtype: int64"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "run_multiple_simulations(0.7, 0.3, 60, 10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Continuting the previous exercise, use `run_multiple_simulations` to run simulations with a range of values for `p1` and\n",
+ "\n",
+ "```\n",
+ "p2 = 0.3\n",
+ "num_steps = 60\n",
+ "num_runs = 20\n",
+ "```\n",
+ "\n",
+ "Store the results in a `SweepSeries`, then plot the average number of unhappy customers as a function of `p1`. Label the axes.\n",
+ "\n",
+ "What value of `p1` minimizes the average number of unhappy customers?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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K6+8kquuugpV5corr2Ty5MncdtttfPnll0yaNImrr76aJUuW8Ktf/YonnniC4cOH89Zbb3Hdddcxd+5c+vTpA8CCBQuYP38+Gzdu5LLLLmPChAnMmTOHzZs3c9lll3HRRRdx3HHHcf311zN8+HAWLVrEjh07uO6660hLS+Oiiy4CYMWKFbz22mukpKTw/vvvs2jRIhYsWEBycjJ33HEHTz31lD/BGhNNamrrWLg83/+zMS0lkbOG9w7rBB+3Pag/At8GEkTkQuB7wE+BSuCREMUWEp98tbPVkhNATW09n3y1Myjnmj59Ov369SMlJYXJkycf9tt6VlYW3/3ud/F4PEydOpXa2loKCwtJTEzk1VdfZerUqVRUVLBz5066du1KcfGhqaPnn38+Y8eOJSEhgZ///Ods3rzZ36tJSkrilltuITExkREjRnDOOecwf/58kpKSOPfcc3nzzTcBWLRoERkZGZx44onfiHvevHlcf/319OzZk+TkZH7zm99w9dVXH/H9pqSk8MEHH7BkyRJycnJYs2YNvXv3/sZ+c+bMYfr06YwePZq4uDjOP/98hg0b5k+yAD/84Q9JTk7m1FNPJTk5mSuuuIKUlBROOukk0tPT2bZtG59//jlbtmxh1qxZJCYmkpOTw/e//31efvll/3lGjhxJVlYWqamppKamUlxczJw5cygsLGT27NmWnExU8nq9fLB2GyWlVQDExcYwZUwOCfGxYY3LbYK6ELhSVb8ALgPeUdVngF8A54YquFA47fgexMe13shmfFwMpx3fIyjn6tatm//ruLg46uoOlVbp3Lmz/+uEhAQAamtriY2NZdGiRZx11llMnTqVP/3pT5SWlh42NHewlwHQoUMH0tLS2LnTSarp6el06NDB/3pmZia7du0C4MILL2ThwoXU1dUxb948pk+f3mjcu3btomfPnv7tHj16MGDAgCO+34cffphu3boxa9YsRowYwS9/+Uv/0GCgkpISsrOzD2vLzs4+bJZfWtqhhwtjY2NJTU31b8fExOD1etm+fTuVlZWMHj2a4cOHM3z4cO6///7Dknl6+qGe8NixY7njjjt48803mTx5Mueddx7vvffeEd+XMZHmi9zd6JY9/u0zhvSie1r4nx91Oy0jCSgSkRhgMvBrX7uXFhagCrchkh6U4bZgi411flMJfJhz7969x3zejz/+mIcf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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "p2 = 0.3\n",
+ "num_steps = 60\n",
+ "num_runs = 20\n",
+ "p1_array = linspace(0, 1, 11)\n",
+ "\n",
+ "results = SweepSeries()\n",
+ "for p1 in p1_array:\n",
+ " output = run_multiple_simulations(p1, p2, num_steps, num_runs)\n",
+ " results[p1] = output.mean()\n",
+ " \n",
+ "plot(results, label=\"unhappy customers\")\n",
+ "\n",
+ "decorate(title='OW Bikeshare',\n",
+ " xlabel='Arrival rate at Olin', \n",
+ " ylabel='Average unhappy customers')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap05mine.ipynb b/code/chap05mine.ipynb
new file mode 100644
index 00000000..cc5590b2
--- /dev/null
+++ b/code/chap05mine.ipynb
@@ -0,0 +1,1740 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 5\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Reading data\n",
+ "\n",
+ "Pandas is a library that provides tools for reading and processing data. `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": {},
+ "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\n",
+ "\n",
+ "The arguments of `read_html` specify the file to read and how to interpret the tables in the file. The result, `tables`, is a sequence of `DataFrame` objects; `len(tables)` reports the length of the sequence."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "6"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "len(tables)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can select the `DataFrame` we want using the bracket operator. The tables are numbered from 0, so `tables[2]` is actually the third table on the page.\n",
+ "\n",
+ "`head` selects the header and the first five rows."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " United States Census Bureau (2017)[28] \n",
+ " Population Reference Bureau (1973–2016)[15] \n",
+ " United Nations Department of Economic and Social Affairs (2015)[16] \n",
+ " Maddison (2008)[17] \n",
+ " HYDE (2007)[24] \n",
+ " Tanton (1994)[18] \n",
+ " Biraben (1980)[19] \n",
+ " McEvedy & Jones (1978)[20] \n",
+ " Thomlinson (1975)[21] \n",
+ " Durand (1974)[22] \n",
+ " Clark (1967)[23] \n",
+ " \n",
+ " \n",
+ " Year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1950 \n",
+ " 2557628654 \n",
+ " 2.516000e+09 \n",
+ " 2.525149e+09 \n",
+ " 2.544000e+09 \n",
+ " 2.527960e+09 \n",
+ " 2.400000e+09 \n",
+ " 2.527000e+09 \n",
+ " 2.500000e+09 \n",
+ " 2.400000e+09 \n",
+ " NaN \n",
+ " 2.486000e+09 \n",
+ " \n",
+ " \n",
+ " 1951 \n",
+ " 2594939877 \n",
+ " NaN \n",
+ " 2.572851e+09 \n",
+ " 2.571663e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1952 \n",
+ " 2636772306 \n",
+ " NaN \n",
+ " 2.619292e+09 \n",
+ " 2.617949e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1953 \n",
+ " 2682053389 \n",
+ " NaN \n",
+ " 2.665865e+09 \n",
+ " 2.665959e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1954 \n",
+ " 2730228104 \n",
+ " NaN \n",
+ " 2.713172e+09 \n",
+ " 2.716927e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " United States Census Bureau (2017)[28] \\\n",
+ "Year \n",
+ "1950 2557628654 \n",
+ "1951 2594939877 \n",
+ "1952 2636772306 \n",
+ "1953 2682053389 \n",
+ "1954 2730228104 \n",
+ "\n",
+ " Population Reference Bureau (1973–2016)[15] \\\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)[16] \\\n",
+ "Year \n",
+ "1950 2.525149e+09 \n",
+ "1951 2.572851e+09 \n",
+ "1952 2.619292e+09 \n",
+ "1953 2.665865e+09 \n",
+ "1954 2.713172e+09 \n",
+ "\n",
+ " Maddison (2008)[17] HYDE (2007)[24] Tanton (1994)[18] \\\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)[19] McEvedy & Jones (1978)[20] Thomlinson (1975)[21] \\\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)[22] Clark (1967)[23] \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": 5,
+ "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": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " United States Census Bureau (2017)[28] \n",
+ " Population Reference Bureau (1973–2016)[15] \n",
+ " United Nations Department of Economic and Social Affairs (2015)[16] \n",
+ " Maddison (2008)[17] \n",
+ " HYDE (2007)[24] \n",
+ " Tanton (1994)[18] \n",
+ " Biraben (1980)[19] \n",
+ " McEvedy & Jones (1978)[20] \n",
+ " Thomlinson (1975)[21] \n",
+ " Durand (1974)[22] \n",
+ " Clark (1967)[23] \n",
+ " \n",
+ " \n",
+ " Year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2012 \n",
+ " 7013871313 \n",
+ " 7.057075e+09 \n",
+ " 7.080072e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2013 \n",
+ " 7092128094 \n",
+ " 7.136796e+09 \n",
+ " 7.162119e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2014 \n",
+ " 7169968185 \n",
+ " 7.238184e+09 \n",
+ " 7.243784e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2015 \n",
+ " 7247892788 \n",
+ " 7.336435e+09 \n",
+ " 7.349472e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2016 \n",
+ " 7325996709 \n",
+ " 7.418152e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " United States Census Bureau (2017)[28] \\\n",
+ "Year \n",
+ "2012 7013871313 \n",
+ "2013 7092128094 \n",
+ "2014 7169968185 \n",
+ "2015 7247892788 \n",
+ "2016 7325996709 \n",
+ "\n",
+ " Population Reference Bureau (1973–2016)[15] \\\n",
+ "Year \n",
+ "2012 7.057075e+09 \n",
+ "2013 7.136796e+09 \n",
+ "2014 7.238184e+09 \n",
+ "2015 7.336435e+09 \n",
+ "2016 7.418152e+09 \n",
+ "\n",
+ " United Nations Department of Economic and Social Affairs (2015)[16] \\\n",
+ "Year \n",
+ "2012 7.080072e+09 \n",
+ "2013 7.162119e+09 \n",
+ "2014 7.243784e+09 \n",
+ "2015 7.349472e+09 \n",
+ "2016 NaN \n",
+ "\n",
+ " Maddison (2008)[17] HYDE (2007)[24] Tanton (1994)[18] \\\n",
+ "Year \n",
+ "2012 NaN NaN NaN \n",
+ "2013 NaN NaN NaN \n",
+ "2014 NaN NaN NaN \n",
+ "2015 NaN NaN NaN \n",
+ "2016 NaN NaN NaN \n",
+ "\n",
+ " Biraben (1980)[19] McEvedy & Jones (1978)[20] Thomlinson (1975)[21] \\\n",
+ "Year \n",
+ "2012 NaN NaN NaN \n",
+ "2013 NaN NaN NaN \n",
+ "2014 NaN NaN NaN \n",
+ "2015 NaN NaN NaN \n",
+ "2016 NaN NaN NaN \n",
+ "\n",
+ " Durand (1974)[22] Clark (1967)[23] \n",
+ "Year \n",
+ "2012 NaN NaN \n",
+ "2013 NaN NaN \n",
+ "2014 NaN NaN \n",
+ "2015 NaN NaN \n",
+ "2016 NaN NaN "
+ ]
+ },
+ "execution_count": 6,
+ "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": 7,
+ "metadata": {},
+ "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. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " census \n",
+ " prb \n",
+ " un \n",
+ " maddison \n",
+ " hyde \n",
+ " tanton \n",
+ " biraben \n",
+ " mj \n",
+ " thomlinson \n",
+ " durand \n",
+ " clark \n",
+ " \n",
+ " \n",
+ " Year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1950 \n",
+ " 2557628654 \n",
+ " 2.516000e+09 \n",
+ " 2.525149e+09 \n",
+ " 2.544000e+09 \n",
+ " 2.527960e+09 \n",
+ " 2.400000e+09 \n",
+ " 2.527000e+09 \n",
+ " 2.500000e+09 \n",
+ " 2.400000e+09 \n",
+ " NaN \n",
+ " 2.486000e+09 \n",
+ " \n",
+ " \n",
+ " 1951 \n",
+ " 2594939877 \n",
+ " NaN \n",
+ " 2.572851e+09 \n",
+ " 2.571663e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1952 \n",
+ " 2636772306 \n",
+ " NaN \n",
+ " 2.619292e+09 \n",
+ " 2.617949e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1953 \n",
+ " 2682053389 \n",
+ " NaN \n",
+ " 2.665865e+09 \n",
+ " 2.665959e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 1954 \n",
+ " 2730228104 \n",
+ " NaN \n",
+ " 2.713172e+09 \n",
+ " 2.716927e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " census prb un maddison hyde \\\n",
+ "Year \n",
+ "1950 2557628654 2.516000e+09 2.525149e+09 2.544000e+09 2.527960e+09 \n",
+ "1951 2594939877 NaN 2.572851e+09 2.571663e+09 NaN \n",
+ "1952 2636772306 NaN 2.619292e+09 2.617949e+09 NaN \n",
+ "1953 2682053389 NaN 2.665865e+09 2.665959e+09 NaN \n",
+ "1954 2730228104 NaN 2.713172e+09 2.716927e+09 NaN \n",
+ "\n",
+ " tanton biraben mj thomlinson durand \\\n",
+ "Year \n",
+ "1950 2.400000e+09 2.527000e+09 2.500000e+09 2.400000e+09 NaN \n",
+ "1951 NaN NaN NaN NaN NaN \n",
+ "1952 NaN NaN NaN NaN NaN \n",
+ "1953 NaN NaN NaN NaN NaN \n",
+ "1954 NaN NaN NaN NaN NaN \n",
+ "\n",
+ " clark \n",
+ "Year \n",
+ "1950 2.486000e+09 \n",
+ "1951 NaN \n",
+ "1952 NaN \n",
+ "1953 NaN \n",
+ "1954 NaN "
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "table2.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The first column, which is labeled `Year`, is special. It is the **index** for this `DataFrame`, which means it contains the labels for the rows.\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": "markdown",
+ "metadata": {},
+ "source": [
+ "### Series\n",
+ "\n",
+ "We can use dot notation to select a column from a `DataFrame`. The result is a `Series`, which is like a `DataFrame` with a single column."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 2557628654\n",
+ "1951 2594939877\n",
+ "1952 2636772306\n",
+ "1953 2682053389\n",
+ "1954 2730228104\n",
+ "Name: census, dtype: int64"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census = table2.census\n",
+ "census.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "2012 7013871313\n",
+ "2013 7092128094\n",
+ "2014 7169968185\n",
+ "2015 7247892788\n",
+ "2016 7325996709\n",
+ "Name: census, dtype: int64"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census.tail()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Like a `DataFrame`, a `Series` contains an index, which labels the rows.\n",
+ "\n",
+ "`1e9` is scientific notation for $1 \\cdot 10^9$ or 1 billion."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "From here on, we will work in units of billions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 2.525149\n",
+ "1951 2.572851\n",
+ "1952 2.619292\n",
+ "1953 2.665865\n",
+ "1954 2.713172\n",
+ "Name: un, dtype: float64"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "un.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 2.557629\n",
+ "1951 2.594940\n",
+ "1952 2.636772\n",
+ "1953 2.682053\n",
+ "1954 2.730228\n",
+ "Name: census, dtype: float64"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census = table2.census / 1e9\n",
+ "census.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what these estimates look like."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap03-fig01.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(census, ':', label='US Census')\n",
+ "plot(un, '--', label='UN DESA')\n",
+ " \n",
+ "decorate(xlabel='Year',\n",
+ " ylabel='World population (billion)')\n",
+ "savefig('figs/chap03-fig01.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The following expression computes the elementwise differences between the two series, then divides through by the UN value to produce [relative errors](https://en.wikipedia.org/wiki/Approximation_error), then finds the largest element.\n",
+ "\n",
+ "So the largest relative error between the estimates is about 1.3%."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.3821293828998855"
+ ]
+ },
+ "execution_count": 15,
+ "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",
+ "1. Compute the elementwise differences, `census - un`\n",
+ "2. Compute the absolute differences, `abs(census - un)`\n",
+ "3. Compute the relative differences, `abs(census - un) / un`\n",
+ "4. Compute the percent differences, `abs(census - un) / un * 100`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "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",
+ "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.057599\n",
+ "2011 -0.061999\n",
+ "2012 -0.066201\n",
+ "2013 -0.069991\n",
+ "2014 -0.073816\n",
+ "2015 -0.101579\n",
+ "2016 NaN\n",
+ "Length: 67, dtype: float64"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "diff = census - un"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "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",
+ "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.057599\n",
+ "2011 0.061999\n",
+ "2012 0.066201\n",
+ "2013 0.069991\n",
+ "2014 0.073816\n",
+ "2015 0.101579\n",
+ "2016 NaN\n",
+ "Length: 67, dtype: float64"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "absVal = abs(census - un)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 0.012862\n",
+ "1951 0.008585\n",
+ "1952 0.006674\n",
+ "1953 0.006072\n",
+ "1954 0.006286\n",
+ "1955 0.007404\n",
+ "1956 0.008439\n",
+ "1957 0.009887\n",
+ "1958 0.011011\n",
+ "1959 0.010208\n",
+ "1960 0.005617\n",
+ "1961 0.000369\n",
+ "1962 0.000311\n",
+ "1963 0.002702\n",
+ "1964 0.005350\n",
+ "1965 0.006399\n",
+ "1966 0.006829\n",
+ "1967 0.006289\n",
+ "1968 0.005827\n",
+ "1969 0.005821\n",
+ "1970 0.005832\n",
+ "1971 0.006258\n",
+ "1972 0.006166\n",
+ "1973 0.005847\n",
+ "1974 0.005332\n",
+ "1975 0.004437\n",
+ "1976 0.003388\n",
+ "1977 0.002670\n",
+ "1978 0.001965\n",
+ "1979 0.001712\n",
+ " ... \n",
+ "1987 0.003591\n",
+ "1988 0.004604\n",
+ "1989 0.005461\n",
+ "1990 0.005988\n",
+ "1991 0.006900\n",
+ "1992 0.007054\n",
+ "1993 0.007277\n",
+ "1994 0.007490\n",
+ "1995 0.007423\n",
+ "1996 0.007142\n",
+ "1997 0.006903\n",
+ "1998 0.006709\n",
+ "1999 0.006511\n",
+ "2000 0.006386\n",
+ "2001 0.006274\n",
+ "2002 0.006183\n",
+ "2003 0.006197\n",
+ "2004 0.006216\n",
+ "2005 0.006302\n",
+ "2006 0.006365\n",
+ "2007 0.006473\n",
+ "2008 0.006604\n",
+ "2009 0.006805\n",
+ "2010 0.008328\n",
+ "2011 0.008860\n",
+ "2012 0.009350\n",
+ "2013 0.009772\n",
+ "2014 0.010190\n",
+ "2015 0.013821\n",
+ "2016 NaN\n",
+ "Length: 67, dtype: float64"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "relDiff = abs(census - un) / un\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 1.286247\n",
+ "1951 0.858540\n",
+ "1952 0.667365\n",
+ "1953 0.607232\n",
+ "1954 0.628640\n",
+ "1955 0.740425\n",
+ "1956 0.843928\n",
+ "1957 0.988701\n",
+ "1958 1.101054\n",
+ "1959 1.020766\n",
+ "1960 0.561750\n",
+ "1961 0.036871\n",
+ "1962 0.031146\n",
+ "1963 0.270201\n",
+ "1964 0.535045\n",
+ "1965 0.639908\n",
+ "1966 0.682939\n",
+ "1967 0.628856\n",
+ "1968 0.582745\n",
+ "1969 0.582126\n",
+ "1970 0.583151\n",
+ "1971 0.625807\n",
+ "1972 0.616597\n",
+ "1973 0.584666\n",
+ "1974 0.533223\n",
+ "1975 0.443692\n",
+ "1976 0.338849\n",
+ "1977 0.266959\n",
+ "1978 0.196499\n",
+ "1979 0.171246\n",
+ " ... \n",
+ "1987 0.359053\n",
+ "1988 0.460423\n",
+ "1989 0.546078\n",
+ "1990 0.598794\n",
+ "1991 0.690025\n",
+ "1992 0.705441\n",
+ "1993 0.727689\n",
+ "1994 0.749047\n",
+ "1995 0.742263\n",
+ "1996 0.714242\n",
+ "1997 0.690252\n",
+ "1998 0.670935\n",
+ "1999 0.651132\n",
+ "2000 0.638560\n",
+ "2001 0.627448\n",
+ "2002 0.618347\n",
+ "2003 0.619705\n",
+ "2004 0.621627\n",
+ "2005 0.630170\n",
+ "2006 0.636478\n",
+ "2007 0.647257\n",
+ "2008 0.660376\n",
+ "2009 0.680460\n",
+ "2010 0.832811\n",
+ "2011 0.885957\n",
+ "2012 0.935034\n",
+ "2013 0.977243\n",
+ "2014 1.019023\n",
+ "2015 1.382129\n",
+ "2016 NaN\n",
+ "Length: 67, dtype: float64"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "percentDiff = abs(census - un) / un * 100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`max` and `abs` are built-in functions provided by Python, but NumPy also provides version that are a little more general. When you import `modsim`, you get the NumPy versions of these functions."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Constant growth"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can select a value from a `Series` using bracket notation. Here's the first element:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.557628654"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census[1950]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And the last value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "7.325996709"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census[2016]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "But rather than \"hard code\" those dates, we can get the first and last labels from the `Series`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1950"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_0 = get_first_label(census)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2016"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_end = get_last_label(census)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "66"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "elapsed_time = t_end - t_0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And we can get the first and last values:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.557628654"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "p_0 = get_first_value(census)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "7.325996709"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "p_end = get_last_value(census)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then we can compute the average annual growth in billions of people per year."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4.768368055"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "total_growth = p_end - p_0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.07224800083333333"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "annual_growth = total_growth / elapsed_time"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### TimeSeries"
+ ]
+ },
+ {
+ "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": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Series([], dtype: float64)"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results = TimeSeries()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Initially the `TimeSeries` 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": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1950 \n",
+ " 2.557629 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "1950 2.557629\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results[t_0] = census[t_0]\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": 40,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for t in linrange(t_0, t_end):\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": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap03-fig02.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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tSqTNSo16Pjr7zRRXtcFwHlrl1GWnxR0/E9v76e6qeeodZ+sc889l4cffpjt27ezdetW1q5dS3FxMXfddddRz9+7dy8ul4vNmzcfcez6668PvP6v//ovfv/73/PEE0+QmprKvffey1e+8hWeeuopAGpqati6dStvvvkmO3fu5Oqrr+bCCy8kISGB22+/nd/97ncUFhby61//mnvuuYc//elPk36O7u7uY14nkyKEmB2egR4GP9yBu6cVwzBoHXRT3+uky2OnwxyHgZnWrmHy85ZxSlnprM7SOx7pQc1DhYWF/Pa3v6W4uJhnn32WT37yk5x11ln89Kc/DUz3nKi7u5u4uLjjTrV/7rnn+NKXvkROTg52u52vf/3r7N69m4aGBsD/7emGG27AarWyadMmUlJS2L9/PzabjbCwMH7zm9+wb98+PvnJT4YUZE70OiHEyTN8Xoaq99D75q9x97TSPeLhnYNDVPX5ICmHxOxczJYwzNYI8tUqTj31tHkVnGAR96DmK5vNhsfjOaLc6/USHn6oO52bm8s3v/lNwB+AXnnlFe69914SEhK47LLLgq5NSUmht7cXt9t9RJAaGBggPDwcm81GS0sLt912G3fccUfgeFhYGAcOHCAsLIzo6OigNlitVnw+H9HR0Tz11FM8+uijbN++Hbvdzuc//3muu+66ST/rZNdJkBJi5vhcI/S+/Xu8gz0MubzUdI3S4/QSFptMeGwymEzY7XY2bSwgKyubnPT5uYLLog1Qp5dNPvS2aXUWm1ZnHfP4eWuXcd7aZcc8/rEzcvnYGblTbld6ejotLS2sXLkyUObxeGhpaQnsFvy5z32Oj370o1x11VUAJCYmctlll7Fv3z601kfUuWbNGux2Ozt27GDr1q1Bx+6//37279/PU089RWpqKnfccQdnn3124HhVVRV5eXns3bv3mG3u6+sLPL9yu938/e9/56abbmLdunVYLJagBFvDMOjr6zvudTJpQ4iZY7La8VojqOpsoaF7lH63mcjULBLj4rBYLBQUFJCfnz/reU1TNWtDfEqpy5VSg4f98SqlXpmtNswHF110EQ899BC1tbWAf3rnfffdR0pKCqtWrQLg4x//OI888givvvoqLpcLl8vFzp072bFjB+eff/4RddpsNm655RbuuOMOXnvtNTweD8PDwzzxxBP89re/5cYbbwTg0ksv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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(census, ':', label='US Census')\n",
+ "plot(un, '--', label='UN DESA')\n",
+ "plot(results, color='gray', label='model')\n",
+ "\n",
+ "decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title='Constant growth')\n",
+ "savefig('figs/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": [
+ "### Exercises\n",
+ "\n",
+ "**Optional Exercise:** Try fitting the model using data from 1970 to the present, and see if that does a better job.\n",
+ "\n",
+ "Hint: \n",
+ "\n",
+ "1. Copy the code from above and make a few changes. Test your code after each small change.\n",
+ "\n",
+ "2. Make sure your `TimeSeries` starts in 1950, even though the estimated annual growth is based on later data.\n",
+ "\n",
+ "3. You might want to add a constant to the starting value to match the data better."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.07854997754347826"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "newResults = TimeSeries()\n",
+ "newResults[t_0] = census[1950]\n",
+ "\n",
+ "p_0 = census[1970]\n",
+ "P_end = get_last_value(census)\n",
+ "\n",
+ "elapsed_time = t_end - 1970\n",
+ "\n",
+ "total_growth = p_end - p_0\n",
+ "annual_growth = total_growth / elapsed_time\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "for t in linrange(t_0, t_end):\n",
+ " results[t+1] = results[t] + annual_growth"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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mc98hrVr17J7927AnEzy8MMP84lPfILly5dz0003Dd1vw4YNXHDBBdxzzz0sX76cM844gwceeGDoGb/73e84++yzWbp0KZ/+9Kd57bXXht53aPI766yzeOmll0Z9nxBi4lnsToKhEDs7vbza2EvjgA1nXilWVxJWq5Xy8nIuuuBcrv7s6dSUZmG1Tu7Y8IxtQW2sbWPj9jYAllXnsaxmZJmON95vYUt9BwAr5xewUOWMOP/Ku/uobewCYPXiYmpKR/4k8de3m9i5r+ew9/64zjzzTB566CHWrFnD2WefzeLFi6msrOTOO+887PWbN28mEAiwatWqj5y79tprh77/5S9/yf/8z//w+OOPk5OTw7p16/jqV7/Kk08+CUBDQwNnn302b7zxBhs2bOCqq67ik5/8JOnp6dx2220899xzlJeX89///d/cfffd/PWvfx31c3R3dx/xfTIpQoiJZRgGbUEnW9ojtHUFGLRnEorEkRSCspJCKisrSUhImOwwR5AW1BRUXl7OH/7wByorK3nmmWe49NJLWblyJT/96U8xDOMj13d3d5OamnrUqfbr16/nhhtuoKSkBJfLxde//nU2bdrEnj17AHMm3XXXXYfD4eC0004jOzubpqYmnE4ndrud3/72t2zdupVLL700piRzvO8TQnw8RiiIe8fbBLpaAXMzg9dee42tW7diyywkkl5EyBqHzZlAWl4lixYtmnLJCWZwC2qqcjqdhEKhjxwPh8Mj1hfMmjWLb33rW4CZgF588UXWrVtHeno6l1122Yj3Zmdn09vbSzAY/EiSGhgYIC4uDqfTSWtrK7feeiu333770Hm73U5LSwt2u52kpKQRMTgcDiKRCElJSTz55JM88sgjrFmzBpfLxZe+9CXWrl076mcd7X2SpIQYe4Zh4N+/C/eOt4j43ASaG9mXVEpHR8eHF1ltlBRkRceZqikrSpu8gI9ixiaoZTWjd72dtqCQ0xYUHvH86sXFrF5cfMTz554yi3NPmXXMceXl5dHa2sq8efOGjoVCIVpbW4eqBX/+85/nnHPO4YorrgAgIyODyy67jK1bt6K1/sg9Fy5ciMvl4tVXX+Xss88ece7ee++lqamJJ598kpycHG6//XZOP/30ofP19fXMnj2bzZs3HzHmvr6+ofGrYDDIP/7xD2688UaWLFmCzWYbscDWMAz6+vqO+j6Z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HJjJ6g6t9ftjcc+Z6OSTT2bt2rV84xvfGOq6O1YH6y8NDg4OHbv55pux20f+0V9xxRXccIM5hPjYY4+xfv16/va3v/HLX/6SUCjEqlWruP3224eKKv7+979nxYoV5OfnA3DRRRfxq1/9inXr1h1XnELMJMG+dtzb38TTuZ+9fX6a+wO4vSGCFiceRzq+Hh8LF9RQVlb2kX+L4kOx/s68CHwC2DlGz70e8GJ2G55QYi35ftB1113HG2+8wZ133jli/CdW4XCY/v7+oUQC8IMf/OCIY1AHY/zCF77AF77wBQKBAO+++y73338/N910E8888wyGYbB+/Xra29tZuXIlYI6Z+f1+brnlFjIzM485TiFmgrDPjad+I959O2gdCLKn108wYmCx2kjKy6W9G1LSczh71RLmFmdPdrhTXqwJ6n3gh0qpi4B6YMRghNY65kESpZQTs1vvX7XW41aMKrFi6cfqekuet+oj3X5jIZaS78PZbDbuvfdeLr74YhISEo75eRs3bsQwDCoqKmK6/plnnuHpp5/m97//PWAmqxUrVuBwOLjqqqsAePvtt+nt7eUvf/nLiG1W1q5dy9NPPz1UwVeIE4ln12Y8De/R1uOm9sAgVrsdLBbsyZnYU7LIyMpi4elzmV2UK+NMMYp1E6dVwAbMSQ0LiK6Rin4dft7zkZ0HRDDXT51wYin5fqiSkhK+9a1vsX79+pifE4lE2LhxI7fddhtr164lKSm2jSRXrVrF3r17WbduHV1dXRiGwb59+3j88ceHys0/88wznHfeeeTm5pKdnT309c///M88/fTTMuVcnJD6e3v4R0Mnbzb10ucN4bO4iMsvJaVgNouXLuXUU0+ltCRPktMxiKkFpbVePYbPvBhYr7WOjOE9p41YSr4fzmc+8xleffVV3n777SNeU19fz8KFCwGw2+0UFhZy1VVXcdlll4247t///d+x2T468fIvf/kLeXl5/OY3v+GBBx7gwgsvxOv1kp6eznnnncdXvvIVurq6eOmll3jiiSc+8v4LL7yQdevW8de//pULL7wwxt8RIaa3QCBAfX09e1oG6A9B2OLA40xngCSWVs2jvHzuYf+9iaOLueS7UioXuAGowWx51QE/11o3HssDlVK1wG1a62eP4T2zkZLvM578OYrpIOwdxLNzE66yJexr66C+vn6o1yAc8NF4wEtyWi7n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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(census + .4, ':', label='US Census')\n",
+ "plot(un + .4, '--', label='UN DESA')\n",
+ "plot(results, color='gray', label='model')\n",
+ "\n",
+ "decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title='Constant growth')"
+ ]
+ }
+ ],
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap06mine.ipynb b/code/chap06mine.ipynb
new file mode 100644
index 00000000..20ac99f5
--- /dev/null
+++ b/code/chap06mine.ipynb
@@ -0,0 +1,536 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 6\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *\n",
+ "\n",
+ "from pandas import read_html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code from the previous chapter\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "table2 = tables[2]\n",
+ "table2.columns = ['census', 'prb', 'un', 'maddison', \n",
+ " 'hyde', 'tanton', 'biraben', 'mj', \n",
+ " 'thomlinson', 'durand', 'clark']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "un.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "census = table2.census / 1e9\n",
+ "census.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "t_0 = get_first_label(census)\n",
+ "t_end = get_last_label(census)\n",
+ "elapsed_time = t_end - t_0\n",
+ "\n",
+ "p_0 = get_first_value(census)\n",
+ "p_end = get_last_value(census)\n",
+ "total_growth = p_end - p_0\n",
+ "\n",
+ "annual_growth = total_growth / elapsed_time"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### System objects"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can rewrite the code from the previous chapter using system objects."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "system = System(t_0=t_0, \n",
+ " t_end=t_end,\n",
+ " p_0=p_0,\n",
+ " annual_growth=annual_growth)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And we can encapsulate the code that runs the model in a function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation1(system):\n",
+ " \"\"\"Runs the constant growth model.\n",
+ " \n",
+ " system: System object\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " results[system.t_0] = system.p_0\n",
+ " \n",
+ " for t in linrange(system.t_0, system.t_end):\n",
+ " results[t+1] = results[t] + system.annual_growth\n",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can also encapsulate the code that plots the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_results(census, un, timeseries, title):\n",
+ " \"\"\"Plot the estimates and the model.\n",
+ " \n",
+ " census: TimeSeries of population estimates\n",
+ " un: TimeSeries of population estimates\n",
+ " timeseries: TimeSeries of simulation results\n",
+ " title: string\n",
+ " \"\"\"\n",
+ " plot(census, ':', label='US Census')\n",
+ " plot(un, '--', label='UN DESA')\n",
+ " plot(timeseries, color='gray', label='model')\n",
+ " \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": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results = run_simulation1(system)\n",
+ "plot_results(census, un, results, 'Constant growth model')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Proportional growth"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's a more realistic model where the number of births and deaths is proportional to the current population."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation2(system):\n",
+ " \"\"\"Run a model with proportional birth and death.\n",
+ " \n",
+ " system: System object\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " results[system.t_0] = system.p_0\n",
+ " \n",
+ " for t in linrange(system.t_0, 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",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "I picked a death rate that seemed reasonable and then adjusted the birth rate to fit the data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "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": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results = run_simulation2(system)\n",
+ "plot_results(census, un, results, 'Proportional model')\n",
+ "savefig('figs/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": [
+ "### Factoring out the update function"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`run_simulation1` and `run_simulation2` are nearly identical except the body of the loop. So we can factor that part out into a function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "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",
+ " births = system.birth_rate * pop\n",
+ " deaths = system.death_rate * pop\n",
+ " return pop + births - deaths"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The name `update_func` refers to a function object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "update_func1"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Which we can confirm by checking its type."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "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": 16,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def run_simulation(system, update_func):\n",
+ " \"\"\"Simulate the system using any update function.\n",
+ " \n",
+ " system: System object\n",
+ " update_func: function that computes the population next year\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " results[system.t_0] = system.p_0\n",
+ " \n",
+ " for t in linrange(system.t_0, system.t_end):\n",
+ " results[t+1] = update_func(results[t], t, system)\n",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we use it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "t_0 = get_first_label(census)\n",
+ "t_end = get_last_label(census)\n",
+ "p_0 = census[t_0]\n",
+ "\n",
+ "system = System(t_0=t_0, \n",
+ " t_end=t_end,\n",
+ " p_0=p_0,\n",
+ " birth_rate=0.027,\n",
+ " death_rate=0.01)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "results = run_simulation(system, update_func1)\n",
+ "plot_results(census, un, results, 'Proportional model, factored')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Remember not to put parentheses after `update_func1`. What happens if you try?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** When you run `run_simulation`, it runs `update_func1` once for each year between `t_0` 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": 19,
+ "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\n",
+ " return pop + net_growth"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how it works:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "system.alpha = system.birth_rate - system.death_rate\n",
+ "\n",
+ "results = run_simulation(system, update_func2)\n",
+ "plot_results(census, un, results, 'Proportional model, combined birth and death')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Exercises\n",
+ "\n",
+ "**Exercise:** Maybe the reason the proportional model doesn't work very well is that the growth rate, `alpha`, is changing over time. So let's try a model with different growth rates before and after 1980 (as an arbitrary choice).\n",
+ "\n",
+ "Write an update function that takes `pop`, `t`, and `system` as parameters. The system object, `system`, should contain two parameters: the growth rate before 1980, `alpha1`, and the growth rate after 1980, `alpha2`. It should use `t` to determine which growth rate to use. Note: Don't forget the `return` statement.\n",
+ "\n",
+ "Test your function by calling it directly, then pass it to `run_simulation`. Plot the results. Adjust the parameters `alpha1` and `alpha2` to fit the data as well as you can.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "collapsed": true,
+ "scrolled": false
+ },
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap07mine.ipynb b/code/chap07mine.ipynb
new file mode 100644
index 00000000..aac8e88e
--- /dev/null
+++ b/code/chap07mine.ipynb
@@ -0,0 +1,815 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 7\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *\n",
+ "\n",
+ "from pandas import read_html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code from the previous chapter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "table2 = tables[2]\n",
+ "table2.columns = ['census', 'prb', 'un', 'maddison', \n",
+ " 'hyde', 'tanton', 'biraben', 'mj', \n",
+ " 'thomlinson', 'durand', 'clark']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 2.525149\n",
+ "1951 2.572851\n",
+ "1952 2.619292\n",
+ "1953 2.665865\n",
+ "1954 2.713172\n",
+ "Name: un, dtype: float64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "un.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Year\n",
+ "1950 2.557629\n",
+ "1951 2.594940\n",
+ "1952 2.636772\n",
+ "1953 2.682053\n",
+ "1954 2.730228\n",
+ "Name: census, dtype: float64"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "census = table2.census / 1e9\n",
+ "census.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_results(census, un, timeseries, title):\n",
+ " \"\"\"Plot the estimates and the model.\n",
+ " \n",
+ " census: TimeSeries of population estimates\n",
+ " un: TimeSeries of population estimates\n",
+ " timeseries: TimeSeries of simulation results\n",
+ " title: string\n",
+ " \"\"\"\n",
+ " plot(census, ':', label='US Census')\n",
+ " plot(un, '--', label='UN DESA')\n",
+ " plot(timeseries, color='gray', label='model')\n",
+ " \n",
+ " decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title=title)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(system, update_func):\n",
+ " \"\"\"Simulate the system using any update function.\n",
+ " \n",
+ " system: System object\n",
+ " update_func: function that computes the population next year\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " results[system.t_0] = system.p_0\n",
+ " \n",
+ " for t in linrange(system.t_0, system.t_end):\n",
+ " results[t+1] = update_func(results[t], t, system)\n",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "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": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func_quad(pop, t, system):\n",
+ " \"\"\"Compute the population next year with a quadratic model.\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": [
+ "Here's a `System` object with the parameters `alpha` and `beta`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 1950.000000 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 2016.000000 \n",
+ " \n",
+ " \n",
+ " p_0 \n",
+ " 2.557629 \n",
+ " \n",
+ " \n",
+ " alpha \n",
+ " 0.025000 \n",
+ " \n",
+ " \n",
+ " beta \n",
+ " -0.001800 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "t_0 1950.000000\n",
+ "t_end 2016.000000\n",
+ "p_0 2.557629\n",
+ "alpha 0.025000\n",
+ "beta -0.001800\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_0 = get_first_label(census)\n",
+ "t_end = get_last_label(census)\n",
+ "p_0 = census[t_0]\n",
+ "\n",
+ "system = System(t_0=t_0, \n",
+ " t_end=t_end,\n",
+ " p_0=p_0,\n",
+ " alpha=0.025,\n",
+ " beta=-0.0018)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And here are the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap03-fig04.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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/vOfSUlJAY6vqbd8+XKmTp3argEKIURXZDabSd+9k4P70rCbmjBbbei1avzcdMRH98E3ZSxaDx8mhjTi5WHAqHd6bW7xP079xP7whz9QXl7Ovffei91uR1EUtFots2bNarVKthBC9HS/LL/ecLQIS1MDTSYrit1OZLA3qeMnYgju63gkEuQrd5nOlVMJSq/Xs2zZMh588EEOHDiAwWAgIiICo9HY3vEJIUSXYTKZyMjIcKxLqfMKoLGmGhcVaHyjyHaLJ8U7AmMPX2W8o7SZoLZv387IkSPR6XRs3779pO2/XDj0bOpBCSFEd6MoCgf2pZF74DBW+89TR13c3EkZfwW7Cq2Umw0M6OePQSfPmS6UNhPUHXfcwbfffouvry933HFHmyc423pQQgjRnTTUVLLni48oLz2KVe+Bi38IGrWKiIgI4uPj0Wq1GIOb0OnUeHvIXaULqc0ElZOTc8rvRde0evVq9u3bx5o1a06734nZ3D/88INTBQyFuFjZbVbydn1FdnoaFouVphYrlrpjtOi8mTJ5PH5+fo59ZT5T+5BhJUII8StVB3PY8/U2auobAbDZ7FgsNgyu3pgMYSgaGfjQEdpMUMOHD3e6nPB33313wQLq6Q4fPsz06dO55557WLduHRaLhfnz56NWq1m3bh1ms5m5c+dyyy238N///pe///3vHDhwgJCQEO68804mTJjgOM/ChQtJT08nKirqpDlqmzZtYv369VRVVZGcnMyjjz7aIesmCtGdWeqrydrxCfsPFvOLR01493LHLSKeYosvcRHeuBrlb/uO0OZP+YEHHui29e73799PXl7eKQsDXmharZaYmBj69u3r9DH19fVkZmby5Zdf8vnnn7NgwQKmTZvGtm3b2LFjB/PnzycpKYk77riDFStWcOWVV/LDDz8wb948/P39SU1N5Z577iE+Pp5//OMf5ObmMmfOHAYPHgzAp59+yrPPPssLL7xAv379eOmll7jtttv44IMP2uvHIES3plgtlKZ/S9reH6luMqNSqdCoVajUamL6J5Iw6nLqm+2YzFYZNt6B2kxQ1157bUfGcUEVFhZ2SHKC4wtDFhYWnlWCguOVck8UA7TZbMyePRu9Xs9ll12GzWbjX//6F8OGDWPSpEkAjBgxgquvvpp33nmHgIAAMjMz+ec//4lerycpKYlp06Zx5MgR4Hjvafbs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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "results = run_simulation(system, update_func_quad)\n",
+ "plot_results(census, un, results, 'Quadratic model')\n",
+ "savefig('figs/chap03-fig04.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Can you find values for the parameters that make the model fit better?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Equilibrium\n",
+ "\n",
+ "To understand the quadratic model better, let's plot net growth as a function of population."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pop_array = linspace(0, 15, 100)\n",
+ "net_growth_array = system.alpha * pop_array + system.beta * pop_array**2\n",
+ "None"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what it looks like."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap03-fig05.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "sns.set_style('whitegrid')\n",
+ "\n",
+ "plot(pop_array, net_growth_array)\n",
+ "decorate(xlabel='Population (billions)',\n",
+ " ylabel='Net growth (billions)')\n",
+ "savefig('figs/chap03-fig05.pdf')\n",
+ "\n",
+ "sns.set_style('white')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what it looks like. Remember that the x axis is population now, not time."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It looks like the growth rate passes through 0 when the population is a little less than 14 billion.\n",
+ "\n",
+ "In the book we found that the net growth is 0 when the population is $-\\alpha/\\beta$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13.88888888888889"
+ ]
+ },
+ "execution_count": 38,
+ "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": [
+ "`sns` is a library called Seaborn which provides functions that control the appearance of plots. In this case I want a grid to make it easier to estimate the population where the growth rate crosses through 0."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Dysfunctions"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "When people first learn about functions, there are a few things they often find confusing. In this section I present and explain some common problems with functions.\n",
+ "\n",
+ "As an example, suppose you want a function that takes a `System` object, with variables `alpha` and `beta`, as a parameter and computes the carrying capacity, `-alpha/beta`. Here's a good solution:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "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": "markdown",
+ "metadata": {},
+ "source": [
+ "Now let's see all the ways that can go wrong.\n",
+ "\n",
+ "**Dysfunction #1:** Not using parameters. In the following version, the function doesn't take any parameters; when `sys1` appears inside the function, it refers to the object we created outside the function.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "13.88888888888889\n"
+ ]
+ }
+ ],
+ "source": [
+ "def carrying_capacity():\n",
+ " K = -sys1.alpha / sys1.beta\n",
+ " return K\n",
+ " \n",
+ "sys1 = System(alpha=0.025, beta=-0.0018)\n",
+ "pop = carrying_capacity()\n",
+ "print(pop)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This version actually works, but it is not as versatile as it could be. If there are several `System` objects, this function can only work with one of them, and only if it is named `system`.\n",
+ "\n",
+ "**Dysfunction #2:** Clobbering the parameters. When people first learn about parameters, they often write functions like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "13.88888888888889\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": "markdown",
+ "metadata": {},
+ "source": [
+ "In this example, we have a `System` object named `sys1` that gets passed as an argument to `carrying_capacity`. But when the function runs, it ignores the argument and immediately replaces it with a new `System` object. As a result, this function always returns the same value, no matter what argument is passed.\n",
+ "\n",
+ "When you write a function, you generally don't know what the values of the parameters will be. Your job is to write a function that works for any valid values. If you assign your own values to the parameters, you defeat the whole purpose of functions.\n",
+ "\n",
+ "\n",
+ "**Dysfunction #3:** No return value. Here's a version that computes the value of `K` but doesn't return it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "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": "markdown",
+ "metadata": {},
+ "source": [
+ "A function that doesn't have a return statement always returns a special value called `None`, so in this example the value of `pop` is `None`. If you are debugging a program and find that the value of a variable is `None` when it shouldn't be, a function without a return statement is a likely cause.\n",
+ "\n",
+ "**Dysfunction #4:** Ignoring the return value. Finally, here's a version where the function is correct, but the way it's used is not."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13.88888888888889"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def carrying_capacity(system):\n",
+ " K = -system.alpha / system.beta\n",
+ " return K\n",
+ " \n",
+ "sys2 = System(alpha=0.025, beta=-0.0018)\n",
+ "carrying_capacity(sys2)\n",
+ "\n",
+ "# print(K) This line won't work because K only exists inside the function."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In this example, `carrying_capacity` runs and returns `K`, but the return value is dropped.\n",
+ "\n",
+ "When you call a function that returns a value, you should do something with the result. Often you assign it to a variable, as in the previous examples, but you can also use it as part of an expression.\n",
+ "\n",
+ "For example, you could eliminate the temporary variable `pop` like this:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "13.88888888888889\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(carrying_capacity(sys1))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Or if you had more than one system, you could compute the total carrying capacity like this:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "27.77777777777778"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "total = carrying_capacity(sys1) + carrying_capacity(sys2)\n",
+ "total"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises\n",
+ "\n",
+ "**Exercise:** In the book, I present 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_func` that implements this version of the model. Test it by computing the values of `r` and `K` that correspond to `alpha=0.025, beta=-0.0018`, and confirm that you get the same results. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func_quad_alt(pop, t, system):\n",
+ " \"\"\"Compute the population next year with a quadratic model.\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 * (1 - pop / (-system.alpha / system.beta))\n",
+ " return pop + net_growth"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 1950.000000 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 2016.000000 \n",
+ " \n",
+ " \n",
+ " p_0 \n",
+ " 2.557629 \n",
+ " \n",
+ " \n",
+ " alpha \n",
+ " 0.025000 \n",
+ " \n",
+ " \n",
+ " beta \n",
+ " -0.001800 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "t_0 1950.000000\n",
+ "t_end 2016.000000\n",
+ "p_0 2.557629\n",
+ "alpha 0.025000\n",
+ "beta -0.001800\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_0 = get_first_label(census)\n",
+ "t_end = get_last_label(census)\n",
+ "p_0 = census[t_0]\n",
+ "\n",
+ "system = System(t_0=t_0, \n",
+ " t_end=t_end,\n",
+ " p_0=p_0,\n",
+ " alpha=0.025,\n",
+ " beta=-0.0018)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "results = run_simulation(system, update_func_quad_alt)\n",
+ "plot_results(census, un, results, 'Quadratic model, different equation form')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap08mine.ipynb b/code/chap08mine.ipynb
new file mode 100644
index 00000000..28f8cd4e
--- /dev/null
+++ b/code/chap08mine.ipynb
@@ -0,0 +1,857 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 8\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *\n",
+ "\n",
+ "from pandas import read_html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Functions from the previous chapter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_results(census, un, timeseries, title):\n",
+ " \"\"\"Plot the estimates and the model.\n",
+ " \n",
+ " census: TimeSeries of population estimates\n",
+ " un: TimeSeries of population estimates\n",
+ " timeseries: TimeSeries of simulation results\n",
+ " title: string\n",
+ " \"\"\"\n",
+ " plot(census, ':', label='US Census')\n",
+ " plot(un, '--', label='UN DESA')\n",
+ " plot(timeseries, color='gray', label='model')\n",
+ " \n",
+ " decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title=title)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(system, update_func):\n",
+ " \"\"\"Simulate the system using any update function.\n",
+ " \n",
+ " system: System object\n",
+ " update_func: function that computes the population next year\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " results[system.t_0] = system.p_0\n",
+ " \n",
+ " for t in linrange(system.t_0, system.t_end):\n",
+ " results[t+1] = update_func(results[t], t, system)\n",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Reading the data"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "table2 = tables[2]\n",
+ "table2.columns = ['census', 'prb', 'un', 'maddison', \n",
+ " 'hyde', 'tanton', 'biraben', 'mj', \n",
+ " 'thomlinson', 'durand', 'clark']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "census = table2.census / 1e9\n",
+ "plot(census, ':', label='US Census')\n",
+ "plot(un, '--', label='UN DESA')\n",
+ " \n",
+ "decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title='Estimated world population')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func_quad(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": [
+ "Extract the starting time and population."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.557628654"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_0 = get_first_label(census)\n",
+ "t_end = get_last_label(census)\n",
+ "p_0 = get_first_value(census)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Initialize the system object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 1950.000000 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 2016.000000 \n",
+ " \n",
+ " \n",
+ " p_0 \n",
+ " 2.557629 \n",
+ " \n",
+ " \n",
+ " alpha \n",
+ " 0.025000 \n",
+ " \n",
+ " \n",
+ " beta \n",
+ " -0.001800 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "t_0 1950.000000\n",
+ "t_end 2016.000000\n",
+ "p_0 2.557629\n",
+ "alpha 0.025000\n",
+ "beta -0.001800\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = System(t_0=t_0, \n",
+ " t_end=t_end,\n",
+ " p_0=p_0,\n",
+ " alpha=0.025,\n",
+ " beta=-0.0018)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Run the model and plot results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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338/3/nOd3j++ecBKCsrY+3atbz77rts2bKF6667josuuoiEhATuuusu/vSnPzFnzhz++7//m/vuu4+///3vQ34fzc3NxzxPBkUIMTba2trYsWMHLS0tAPjaGrFHxJA3bwFz5szpN13H5fHj9vr5tLSB/JmJJMSEj2qs0oIah+bMmcMf//hH5s6dy8aNG7n88stZvXo1TzzxBIZhHHV8c3MzcXFxxx1qv2nTJr75zW8yY8YMwsPD+f73v8+2bdvYv38/YDbtb7rpJhwOB2vWrCElJYXKykqcTid2u50XX3yRXbt2cfnll4eUZE72PCHE8AsEApSUlLB582YzOQUCeBqrCO9uYmFkB3NmzjhqLumivBTiosOIjXTi9ox+N58kqFHmdDr7Dd/s4ff7CQsL632fnZ3ND3/4Q/7yl7/wwQcf8O1vf5unn36ajRs3HnVuSkoKLS0tg84jam9v751kV1NTw5133snSpUtZunQpZ555Jna7vXcVh+jo6H4xOBwOAoEA0dHRPP/881RWVrJ+/XrWrFnDU089NWiy7OtkzxNCDK+WlhY2b96M1ppAIECgqw3voXKyw7wszogi3N9N8bubcXv7JyGbzcq6NTP5p/MV6UlRox73pO3iWz5v6K63NQszWbMw85j7z1kynXOWTD/m/s+uzOazK7NPOK709HRqampYsGBB7zafz0dNTU1vteCvfOUrnH/++VxzzTUAJCYmcuWVV7Jr1y601kddc9GiRYSHh/P222+zdu3afvsefPBBKisref7550lNTeXuu+/mjDPO6N1fUlJCTk4O27dvP2bMra2tvc+vvF4v7733HrfccgtLly7FZrP1S4yGYdDa2nrc8wY+txJCDD+/309paSllZWUYhoHh8+A9XEe04UKlhhPltNHZ7aXYnc6+zhTadh9i9cJp/a4x2t16fUkLapRdfPHFPProo5SXlwPm/2weeOABUlJSKCwsBODCCy/kySef5PXXX8fj8eDxeNiyZQtvv/0255133lHXdDqd3Hbbbdx999288cYb+Hw+urq6ePbZZ/njH//IzTffDMBll13GY489Rm1tLX6/n6effpqrrroKl8s1ZMzNzc1ce+21bN26FYfDQVpaGhaLhbi4OGbMmIHH4+HVV1/F7/fz/PPP9y7aO9R5QoiRdfjwYd555x1KS0sxjAC+tkZ8hyrIjfSxKD2SKKcNa1gEnllnss8xBywWdpQ2cLh96M+D0TRpW1Dj1c0334zNZmPDhg00NTURFhbGypUree6553qfIX31q18lPDycxx9/nNtvvx3DMJg1axZ33303a9asGfS6X/7yl4mJieGpp57ijjvuwDAMCgoKeOaZZ1i2bBkAN9xwAz6fj6uuuoqWlhby8vJ45plnjrv+3cyZM7n33nu56667qK+vJyEhgR/96EfMmTMHgB/96Ec8+OCD/PjHP+bSSy9l8eLFIZ0nhBh+fr+fvXv3sm/fPgzDIODuwttcS5zdj8qIIsJhBSxEZM8jMm8ZiXYnRYfLaWrrZuW8DOKiwo57j9FimQjPA5RSOcC+N954g6ysrKP279mzh/z8/FGPSwwv+XsU4tQ0NTWxY8eOI6WHjAC+2jJy4x1kRDlo7fQQnZJO8uJzcMQfGbnc2uHG6bARETZybZbq6uqeHqCZWuv9oZwjLSghhJjgfD4fu3fvprKyst/21LR05uRn01X8Lvvqu6iw5RIfVsiF8f2n1cRFj59WU1+SoIQQYgKrr69n586ddHd3Q8APVhsOh4N58+b19jh1tbaz3eXAZwunqaadqkPtTE+LGePIj2/UEpRS6irgqQGbI4A3tNbnj1YcQggxGXi9XoqLi6mqqgLDwNfWgK+9mekFSzhtxemEhx8ZfZe19AxmBw5QUnWYhXNSSEscvZpOp2LUEpTW+vfA73veK6UWAa8B3x+tGIQQYjKoq6tj586duN1uAq4OvM112A0fBcnhxLhqae3yET5gdPjphRksmZtKQuzYDRs/UWPSxaeUcmAmq3u01jvGIgYhhJho3G43xcXF5uR6vw9vyyH8XW2kRtnJiYvgcEs3Rc2tdBrlfOH8QqzWI6u2RIY7iAyfWIVdQ0pQSikbsARYCqQCfqAO2Ka1/vQk7nsz0A08fhLnCiHElGIYBrW1tRQVFeF2u/F3NONtacBpNZibEkFKlAMvdvbac2iMzIR2gz37m49aQ3SiGTJBKaUSgG8BNwJJQAXQBNiAZCBbKVULPAk8prVuOd4NlVJOzG69/6e1Hv9j3IUQYgy5XC6Kioqora3F8LjwHq4l4HGRHu1gVkI4DpuF8Mw8kuauIre8lcbiOmZlxk2IQRDHc8wEpZRaD/wL8AZwLfC61to94JhY4AzgKqBIKXWn1vr549zzAiAA/OVUAhdCiMnMMAyqq6spLi7G6/Xi7ziM93AdYTYLMxPDiHFYCY+NJ3reGTiTzdF6i1UYGUlRkyI5wdAtqGXAMq11w7EO0Fq3YSaavyilMoA7geMlqEuBTVrrwIkGK4QQU0F3dzc7d+6kvr6+d5s1LIr0aAdxBGhq6mJfguKCVetwOp29x9ht1kmTnGCItfi01rcMlZwGOb5Wa/3NEA5dCbwX6nUnm1BKvj/yyCMUFhZSVlbW75jBigP2eOmll8jPz2fRokUsWrSIhQsXcuGFF/LMM8/0Wz383HPPpbCwsPe4nq/PfvazvcdUVlZy8803s2zZMhYtWsS6dev4z//8z0Hve9FFF3HmmWcOupK6EOLEGIZBZWUlb731Vr/kFBkZyelnnkXh0pXU+WIpSTyTA45cPtZNYxjtyAt5FJ9SKhUoBBxAv4I+WutXT+CeOUDNCRw/Jbndbm677TY2bdrU739IQ8nLy+NPf/oTYP5D3759O7fddhttbW185zvf6T3uF7/4xVGrnvcIBAJcf/31rFu3jp///OeEh4fz6aefcvPNN+N0OvnSl77Ue2zPIrApKSm89tprXHzxxafwHQsxtXV1dbFjxw4aGxvwtTVhsVixxyaRk5PD3LlzsdvtGIkJzIjMo2RbFWmJkcycNvQ6mhNdqKP4rsUccTfYGEUDc9BESLTWo19UZAJatWoVNTU1PPzww9x+++0nfL7FYmHx4sXcd9993HDDDVx77bXHXRQWzBWQKysrWbduHREREYBZzuP222/vrSvVY+PGjXzmM58hKSmJ3/3ud5KghDgJhmGwb98+9u7di7ezDe/hOgyfB4fVQsrsxcyfP7/3WIvVhspOxOmwM3Na7KQv/hlqC+r7wK+BO7TW7SMYz7DpLNlGV9nHIR0bPj2fmAX9y6W373obV9XRXXEDRc5eQlTespOKccjrRkbywAMPcPXVV3PWWWexYsWKk7rOqlWrsFqtbN++fdCS8AMlJSWxfPlyvv71r3PJJZf0dvNddtll/Y5rbm7mjTfe4K9//SsxMTE88MAD7Nq1q1+dKyHE0Do6OtixYwfNjfV4D5tzmgzDIIoAEV4/B4uL6JiviI480otisVjIzZwaJWtCrQc1Hfj3iZKcJovTTjuNDRs28IMf/IC2traTukZP/aWOjo7ebbfddltv0cCer0cffbR3/zPPPMP111/Pzp07ueWWW1i5ciU33XQTdXV1vce8/PLLrFq1ioyMDKKjo7nkkkuO+ZxKCNGfYRiUlZXx9ttv03CgHFdNOf6uNqIcVhZnRJMQ5qAudj41UXPZurvu+BecpEJtQb0GnAeUjmAsU0KoJd973HTTTbz77rvce++9/Z7/hMrv99PW1kZGRkbvtp///OfHfAbVE+PVV1/N1Vdfjcfj4eOPP+bhhx/m1ltvZePGjRiGwaZNm6ivr2f16tWA+czM7XZz++23k5Q0sScHCjGS2trazFZTfR2+5loCXhcWIDs+jBlxTiKmzSFiRSHbP6hlTlY8i1XaWIc8ZkJNUDuAXyilLgFKgH4PI7TWJ/6QZIRF5S07pa63mAVnHdXtNxxCKfnel81m48EHH+TSSy8lMvLEF3jcunUrhmGQl5cX0vEbN27khRde4OWXXwbMZLVq1SocDgfXXXcdAB9++CEtLS387W9/w2o90gjfsGEDL7zwQm8FXyHEEYFAgLKyMkr0XjyHD+HvOEwgYOCwGCzKjCEuPpHo+eacpljg6gvixm0ZjNESahffWcAWzNXHFxKcIxX8GnzcsxhUKCXfB5oxYwY//OEP2bRpU8j3CQQCbN26lbvuuosNGzYQHR0d0nlnnXUWBw4c4P7776epqQnDMKiqquLZZ5/tLTe/ceNGLrjgAtLS0khJSen9+vznP88LL7wgQ86FGKClpYXNmzejtcYwINDdgdvjw+H1EG8EcM44jYQzruidcAvjt0bTaAqpBaW1PmekA5kqQin5PpgrrriCt99+mw8//PCYx5SUlLBo0SIA7HY7mZmZXHfddVx55ZX9jvvud7+LzXb0wMu//e1vpKen84c//IFHHnmEdevW0d3dTUJCAhdccAHf+ta3aGpq4vXXX+e555476vx169Zx//338/e//51169aF+BMRYvLy+/2UlJRQXl5+ZD6ixUJKTh72A0U0G8mUxcyj6XAKX7SGPBh6ygi55LtSKg34JjAPs+W1B/i11rpi5MLrvXcOUvJ90pO/RzGZNDc38+n2T2irr8EWnQCYXfZz585l5syZHK6pYuMHzSTFR3LW4qwJU6PpZI1YyXel1HLg/4Aq4H3MibrrgFuUUmdrrT86qYiFEGKS8fl87Nmzh4rdO/G2HCLg8+J2+ZmlFAsXLiQqypwKmpg5gy+cm0xyfES/shjiiFAHSTwE/BdwY98VyJVSjwIPAtIFKISY8hoaGvj0oy201ewn4O7C4/XjdvuI9daTknFxb3LqkTrJW02nKtQEtRS4bpDyGI8Aoc2GFUKIScrr9VK0ayf7i7fja2/u3R5phYTIcJri5vFeUT0505Nw2OVZU6hCTVC1mGvo6QHbcwGZvCuEmLLq6ur49IN36KivxvCbcxztVguzk8LJVAv5U0UMAauD0+dPw24LdeC0gNAT1O+Ap5VS3wZ6hpGtAn4Z3CeEEFOKx+Nh50dbqNyzg4CrC4/Pj9NuJTnKQcHsmSQtPAt7TCIXZnYSHxNGuDPktblFUKg/sZ8C04BNmCP4LIAXs4vvzpEJTQghxp++5dc7avfj7eqgy+XDCATIyUhgydoLCcuY1buQa3qSrI99skKdB+UBrldK3QYooBso01p3j2RwQggxnrhcLnbt2tW7LqUjPpXOlsNEWMCWlMvuqAIWJmQTPslXGR8tQ5V8vwj4P621N/h6oOlKKeCE60EJIcSEYhgG+/bsQO+rxhc4MlYsIiqahWs/w9YKH/WeME6bk0KYQ54zDZehWlCvAOlAffD1sZxQPSghhJhIOlqa+Pgfr1JfV4vPGUNESiY2q4Xs7GwKCgqw2+2EZ3ThcFhJiAkf63AnlWMmKK21dbDXYnx65JFH2LNnD48//viQx/XM5t62bVtIBQyFmKoCfh8lW99i984deL0+utw+vG0NuB0JrLt4LcnJyb3HynymkSHDSoQQYoDmyr18/M4btLR3AuD3B/B6/YRFJuAKm45hk4EPo2GoZ1ANmN13x6W1Th22iCa56upqLrvsMm699VaefPJJvF4vt9xyC1arlSeffBKPx8ONN97INddcw/vvv89DDz3Evn37yMzM5Oabb+aCCy7ovc6dd97Jzp07yc3NJTc3t999Nm3axDPPPENzczOFhYXcc889TJ8+fSy+ZSEmDG/7YYo3/43yyir6PGoiIS6aqOwCqrxJzM1OIDJc/m8/Gob6KX+fEBPUeFNeXk5JScmghQGHm91uJy8vj1mzZoV8Tnt7O0VFRbz55pu8/vrr3HbbbVx66aW88cYbbN68mVtuuYUFCxawYcMG7r//fs4//3y2bdvGTTfdREpKCkuWLOHWW2+loKCAX//612itufbaa1m61Kx88tprr/GrX/2Kp556ijlz5vDss89y/fXX88orQz1KFGLqMnxe6na+x47tn3C4y4PFYsFmtWCxWsnLn8+81efR3h3A5fHJsPFRNNQzqOdGMY5hVVFRMSrJCcyFISsqKk4oQYFZKbenGKDf72f9+vU4nU7OOecc/H4/v/3tb1mxYgUXXWQOoFy1ahWf+9znePnll0lNTaWoqIjf/OY3OJ1OFixYwKWXXsrBgwcBs/W0fv165s2bB8ANN9zA7373O7Zs2UJ2dvbw/gCEmOD8fj+7t73Hnk+20O3y4fb6sdutzMieztKzLyA+xaxoGx8DIDWaRtNQXXwhV8fTWp94LfIRlJubO6otqIHda6GIj48H6K3LFBMTA9BbodblcpGZmdnvnKysLLZs2UJDQwNhYWEkJCT029eToGpqanj88cd5+umne/d7vV5qamokQQnRR3NzMzt27KCjowPDHoHb24LfFoY3bg65p59LfEr8WIc4pQ3Vxdc5alEMs1mzZp1wi2a0WY4zkW/p0qV89FH/KiZVVVUkJyeTlpaG2+2mqamJpKQkAA4dOtR7XGpqKuvXr+9XqLC8vJxp06bR1NQ0jN+FEBNPwNWJp6ud0oMN7N+/v3d7RMo0/OFJNDpmkTsjlYRYGTI+1obq4vv6aAYi+luzZg1PPvkkr776Kp/97GfZunUrf/7zn3n00UfJzMxk+fLl3H///dx7771UVlby0ksvsXjxYgAuu+wynnjiCZYtW0Zubi6vvPIKd9xxB6+88gp2uzzcFVOTEfDTvW8nVTu3sKfJjSduBhHBwQ52u52CwkJS0qbRcLib7AyZgjEeDNXF9wBwr9a6M/j6WAyt9T8Pf2hTm91u5/HHH+ehhx7izjvvJC0tjXvvvZc1a9YA8Mtf/pI777yT008/nWnTprF27Vqam81l/i+77DLa2tq46aabqK+vZ8aMGTz22GPk5ORQXV09lt+WEKPOMAw89ZW0FL3L3qp69je7cHt8eDtrmJ47g/S0NBYsWEBERAQA2RmOMY5Y9Bjqv9PLAEef18cyIUf6jZWsrCy0PlK1JDY2tt97oN/71atXD3qd5ORknnrqqWPeZ/369axfv/649xdiMvO1N9Ox+z0OHthPaZMLtz+Ax+vHb3HgNpzEJs9k2bJ5x+1yF2NjqC6+cwZ7LYQQ413A46Kr9CNaKnZR2tRNY5c5YMpqs+NMTKQ1kMKMmXkUzM2R5DSOhfxAQikVBVwJzAM8QDGwMbjSuRBCjDnDCOCqLKajZBsHGtsob3ZhCY6MtUcnEJU2ndULFtIdiCA3M06S0zgXUoJSSi0A3sJMTDsxa0J9HfgXpdSFWuu9IV4nA3gCOAdwAU9rre86ibiFEOIoAVcXh3a+y/YDrTR2egAL8UkJhCWmkzM7r3dxVzExhLoI7K+BPwIztNaf1Vp/BrME/PvAsR+EHO1PmOXj04CVwNeUUl85gfOFEGJQgUCAfQfr+LQ9nKYuLz7stDmS6YqazuqzzqGwsFCS0wQT6t/WQmC91trbs0Fr3a2U+gmwPZQLKKVWALnA6uB19imlzsYsfnjKDMOQ5vqb25OoAAAgAElEQVQEFggExjoEMcEEvG58h+twpmbT2trKjh07aG1txRaTSESyn6Z2O4lp0zn37KUkJcWNdbjiJISaoD4BzgBKBmxfCuwO8RpLgF3APUqpazC7+B7XWj8U4vnHFB4e3jtpVZLUxGIYBl6vl0OHDhEVJWucieMzjADu6hI69RZcXV2URM+ns6sVwwgOKLZYmT47jwWpM5mfl4XVKp8JE9VQ86Bu6vN2K/CoUmop8CHgBwqBG4H7Q7xXImaSexuzJTUX+JtSqlZr/YeTiL1XVlYW1dXVNDQ0nMplxBix2+3ExcX1q68jxGC8zbV07H4Pb2sj+xs72V3fRScfkj4rD6fDis1m6128Wf6zOvEdbzXzvuqAC4JfPRqBbwD3hXAvN9Cmtb4n+H6HUuo3wOXAKSUoh8PBzJkzT+USQohxzN/dTufeLbhry/D6DcqbXZTUd+MNWHE7oqhr6mTx/JkUFhZKS3wSGWoe1HB/4u8FIpVSzj5D0+WJpRDimAy/j66KT+ku307A76Oxy0dpswtPAKKT09jfZscZFsaSJaexYlG+tJommaG6+L6mtX4+1AsppSzA17XWvz3GIf8HNAAPKaW+ByjgWsxuQiGE6GUYBp5D++jc8wHezjYa213Uuw0au3zYImMJi0vFYndw2ox41qxcQlSUlFyfjIZqwSwKJpIngZe11rWDHaSUSgW+AtwAvH6si2mtXUqps4BHMIeau4AHtNb/c7LBCyEmK4Ou0o9prm9kb10HdS4/UbExRKZmYw2LJDw8nPnz55ORkTHWgYoRNFQX37eDgyLuBh5WSu3GXD2iEbAAKZjDz/OAvwLXaK23DnUzrXUFcPEwxS6EmKQsFivkLOKTT0o57DLosifSQRyzwiLJzs4mPz8fh0MWdZ3shnwGpLX+CLhEKTUTuBBzWPlsIIA5aOJXwKta6wMjHagQYnLqWW3cmZqNxWIhEAhQWlpKWVkZtuQs2pr8WKw2ZqQnsWrVchntOYWENEhBa70PeHyEYxFCTDG+tiY6ijfjba6jM2sFMVkz2LVrF+3t7QA4YxOY4fRRkJ9HQf7c3grUYmqQUXRCiFEX8LrpKv2I7v1FuD0+qhvaqdB/w5+WS3zskQEPCQkJnFVYSGysFBCciiRBCSFGjWEYuGvL6dzzHgG3ucrZ/sYudLOXTlsMnuZuYqIjCHM6mDt3Ljk5Ug5jKpMEJYQYFb6OFrM7r+kgAG5fgNJmF02WCNoiE/EYdhJjw0lLTeW00xb2VrgVU5ckKCHEiDL8PrrKPqG74lPcHi92m4XaDh/72v1YY9MIi4wlw+UlMiKcpYtPIyMjQ1pNAjixgoWLMBd8dWAOM++ltZYBFEKIQXWVfkxn+Sc0tHRzsKmLdqsda1wy9rQUsJgVfwrUbBk6Lo4SasHCO4GfAM1A+4DdBjLCTwhxDBG5C6kq2s6eQ53U+5x0OROZGW0mp+joaAoLC0lKShrrMMU4FGoL6jrgLq31T0cyGCHExGYYBvh9WOxHWkLNbR0ccKZQ7zBos0UQEWZ+7OTl5TF79mwZOi6OKdQElQRsGslAhBATm6+9mY5db2OJiiei4EyMgI/du3dTXV0NFicpGelEuX3Myp7GwoWFxMTEjHXIYpwLNUG9CFwF3DNyoQghJqKeQRBdFdvp6vZwsH4vjft9hIUH8Hg8vcfFREewfFk+M2bMkEEQIiShJqhu4A6l1BVAKeDpu1Nr/aXhDkwIMf55mmro2PU2/q5WXG4furqVQ26Dxk7NtBmZRIabHzHTpk1j3rx5hIeHj3HEYiIJNUFFcopFBYUQk0fA66Zz7we4qvaa7w2Dum4/BwMRNDpiMWxOvD4/kZGxLFiwgNTU1DGOWExEoa7F9/WRDkQIMTG4D+2no3gzge5OsECLy0dJswdvVDJx2XG4mrtIT4pC5c0mLy8Pu12mW4qTcyLzoBYAtwPzACtmhdxfaa3fH6HYhBDjiOH30r7zLVw15TS2dNPe7cHjcNIQCMeePBObzY4NmJ+XRWFhIXFxcWMdspjgrKEcpJS6EPgEczTfi8B/AzHA20qp80cuPCHEuGG143d1UV59mNL6TnY2+6gMJOBIzsJis2O325k/fz5r1qyR5CSGRagtqJ8C92mt7+27USn1I8wJvK8Nd2BCiPHFYrFgnbWMmo/3UuNz0hWWQJTPQRyQkZHB/PnzZRCEGFahJqh8YLCRei8APxy+cIQQ40FvEcGU6VisNvx+P2VlZZSVlWHPnI2vrou0mHAy0xIoLFxAWlraWIcsJqFQE9QBYBFQNmD7EqB+WCMSQoypgLuLjqJ36DhYQXX4bLIXLqS4uJjOzk4ArHYnc6aHkZubK4MgxIgK9V/WY8CTSqks4MPgtlXAncADIxGYEGL0uWsr6Ch6m6amVqobO6lzbaX4YD3JyUeeKSUkJFAoRQTFKAh1mPmvlFIxwB1AcnBzDfBjrfWjIxWcEGJ0BLxuOorfxV1TimEY1HX6qOj0022LxtXuJT4hQER4GHPnziU7O1tWghCjIuS2eXCh2J8qpVKBbq31wFXNhRATkKehivZdbxFwddLu9lPS5KLdb8UVnYHPGs6M5GhysmdQUFBAWFjYWIcrppBjJiil1E3Ab7XWruDrgft7X0s9KCEmHsPnpVN/SEvpDrBaOdDq4WC7B1tUHOEp6WQGIDY2moULF5KcnHz8CwoxzIZqQX0f2Ai4gq+PRepBCTHB+Dtbadn2KnXVtVQ0dtFmWAmLCMOZnIU1Igar1cq8OXOYNWuWlMMQY+aYCUprPXOw1wMppaQzWogJxhoexaGWbrbXdtLlN/DYwkiKm05YRAQpKSksWLCAqKiosQ5TTHGhVtStAJZqrZsHbJ8GfArISpBCTBDmnKZyyo1YvNZDdNpisUbGER0Tw5LFC8nIyJBBEGJcGOoZ1CXAmuDbHOBflFJdAw6bPUJxCSGGiWEYeBursCVm0dTUyK5du+jq6gJ7GPG5c7F2+Vi0YC4FBfkyp0mMK0P9a9wBfBvo+a/UIvrXgTKADuBrIxOaEOJUBdxdtH76JhV79rLbSCc+uf/cpeTkZM6VhV3FODXUM6hK4FwApdSzwK1a67bRCkwIcWrch/bTsuNNtu6tpa7bR4B9YJ9FfHw0DoeD/HypbivGt5DrQSml7EqpTKBnSI8FCAOWaK3/K5TrKKW+ATwFuPtsvllr/fwJxCyEGILh89Kx531qS3ZR2uyi2WdgGOC2R+F3B1gwfTr5+fkyp0mMe6EOklgHPAskDrL7MBBSggIWAw9prX8Q4vFCiBPgPVxH48f/R8nBRuo7vQBERkbQ7owhIyuLc89YTlJS0hhHKURoQn0i+m+YJTV+AbwBXAKkA78EvncC91sC/PuJBCiEOD4j4Kd1z1a2f/Auh70GfsPcbouIITxlOhfm55ObmyvdeWJCCTVBzQG+qLXWSqlPgCit9SallBf4EWbZjSEppWxAIfBVpdQvgC7gN8D9Wmvj5MIXQvi72ih+7SV2lFXT7QsQHmYnItyJIzGd6bPzmTdvntRpEhNSqAmqGwgEX5cAC4G/Ah8DeSFeIwX4CHgeuByzxtSfgDZkJQohTorb7aZ4916KKw/R7TN/RTt8dlJmFLBsxXJZokhMaKEmqHeAu5RS38JMMtcrpR4CzsZMMMelta4Dzuqz6VOl1CPAF5AEJcQJCQQC7N+/H601Pp+PmIwZeCor6HLEU7h8NWtWLJAlisSEF2qC+h7wZ+AbwJOY86PaACdmTajjUkrNA76ktf5xn81OzLX+hBAhMAyDfXuKqKhtoLurs3e7LSKavBVnMK/wNBLjpU6TmBxCHWZeBuQrpSK01t1KqeXAOUCj1npLiPdqAb6nlKoGnsGc+Pst4JsnEbcQU057UwPv/Pklag4dgvgs0qelABAdHc38+fNJSUkZ4wiFGF5DLXUUeZztb/a811oPXALpKFrrg8Hlkx7AHP3XCPxEa/3iCUctxBTi9/vRW99m1ycf0dpudjgEWmrpTkxg8aIF5ObmYrVaxzhKIYbfUC2oDszljEIRUme31vofwNIQrynElFd3YD/b3/k7HW2tWC3gcNjwev1ExqawYuVqsqfLOs1i8hoqQZ0zalEIIfrp6Ohg++Y3qNtfCkagd3tKQgwxM5ey5syV2GzSahKT21Br8b09moEIIczuvO3btrHjw3exeF3ERDrBAjaLBVWQz9zTz8fmcI51mEKMilCXOtrGEN19WuvlwxaREFOQYRjU1dWx/YPNVJdqMMxfN4/PT056IgvPvpjotKwxjlKI0RXqMPNXBjkvF7gYuGc4AxJiqmlvb6eoqIjGxkYMq50wpx2320uY1ULOrAJOv2gdFqvMaRJTT6jDzO8dbHtwdfJLgIeHMyghpgKv18uePXs5cKASI9histgcJE6bjqOzjUWfuYS06dJqElPXqZbP/AfwyHAEIsRUYRgGFfv28d5bm+lo7yBr5gwsFrBYLOTk5JCXl4fDYcdikUEQYmoL9RnUYHOi4jAXiq0d1oiEmMSamprY9ekn6J07sbg7sWGhqSmWuXNnM2/ePGJjZRUIIXqE2oI61pwoF/D14QtHiMmpq6uLPbuLOVBSjK+1kSiLly7AYTVIxc2KFStksq0QA4SaoAbOiTIAD1CstW4f3pCEmDz8fj9lZWWUFu/E3VRDwGsWk45w2kiww8y5C1BnrpXkJMQgQh0k8TaAUioaUIDf3Ky7RzA2ISYswzCoqalh69aPqa+sIN7hxhosFpgaZScvK4OkRWfjTMwY40iFGL9CfQYVhlkS4yrMFcgBupVSvwa+p7X2j1B8Qkw4LS0tFBUVUVK8B2/LISxGgG6/jbS4MOakxDBtwUoicubL0HEhjiPULr5fYdZ++jKwFbACK4CfA27gn0ciOCEmEpfLxZ49e6iurgYgPNCBzwhgs0Ci3WDp/AISF56JLSJ6jCMVYmIINUF9Cfic1vrdPtteUko1A5uQBCWmML/fT0VFBWVlZfh8vt7tMenTiQ2UkRIbgzr7QuKn545hlEJMPCdS8t07yPbWYYxFiAml5zlTUXExNZVVxCQlEuYwf6XS09MpKCjA2lZPeOp0LLZTnXIoxNQT6m/NHcBvlFIbgA+11gGl1HzM51I/7TtPKpTaUEJMdC0tLRQXF3Ng3z5aa6ux+j00uD3kz89n/vz5JCcnmwdGzRzbQIWYwEJNUA8D0cBmwK+UCgAOwAIsB37R51h58ismre7ubvbu3UtV5X58LYewdLRi9XuwWSDZ10LWDHUkOQkhTkmoCeqyEY1CiHHO5/NRVlZGRXkZ7pYGfG2NYBjYrRamx4URaYGMwpXkzpDkJMRwOdF5UBHAHMxRfOUySVdMdoZhUFVVxc5dxdRUVRPta8VhNQsIJkfamZUQTkzmbKLyV+KMkmWKhBhOoc6DsgH/CtzKka49j1LqOeCbWmvfEKcLMSE1NDSwe/duaqoP0lJThc3vpstqITMhgtlJ4SSnpBE9bzWOxGljHaoQk1KoXXw/Ba4G1gPvYiao1ZjzoO4OfgkxKbS3t7N7927q6+sBcPq7sQeCz5kcFvKSY5i25AzCp8+VFceFGEGhJqj1wHVa61f7bNuklGoHnkYSlJgE3G43WmsqKw/Qd23kiKQ0cv0dRHhdTF+4nMzFp2N1hI1doEJMEaEmqGigbJDtFYA8FRYTWs9E2x279lBfU0tkTDRJibFYLBamT5+OUgpL+2nYIqKxR8ePdbhCTBmhJqhtwM2Yz6D6+ibw8bBGJMQoMQyD6upq9u7dS8OhelpqqrAHPHS52pk1ayYLC+cfqc8ULpVthRhtoSaofwbeUkqdDXwY3LYSyAEuGP6whBhZPQMgWpub8LXW4+hsw4kXuxUyHS6mJSZK8UAhxliow8w/UkotBm4ACjCXPvoz8JjWWirqigmjtbWVXUXFNNYfwuhoxtfRDIaB025hXmokTgOmL1pOcp6smyfEWAt5gTCtdQlwm1IqCfBrrVtGLiwhhld3dze7d++haG85rQ31xBrtRIVZsVlgenwY02OdRGbOJkqtwBYpLSchxoOQE5RS6i7gRiAt+L4KeFhr/fAIxSbEKfN6vZSWlrJv3z7aWlroOniA8IAXD5ATH8XspAiiktKJLjgdR0L6WIcrhOgj1Im6P8Xs3ruP/vWgfqSUcmitHxy5EIU4cX6/n/3791NaWorXay7EH+m0023xE2a3kBFhY2ZKAsmL1hA2bQ6WYLVbIcT4EWoL6jrgawPmQb2nlCoDHgNCTlBKqXhgJ3C31vq5UM8TIhQ9I/M+3VGMx+PC6TiydnFi+jRmx1qxtdSRedpKomefhsXmGMNohRBDCTVB2YGqQbaXATEneM8ngcwTPEeIIRmGQX19PTt3FVNeeYju1iYiwsPInJ5OVFQUc+fOJSMjg4CrEywWbOFRYx2yEOI4Qk1QDwKPK6W+orWuAlBKJQI/w1zuKCRKqa8BscCuEw1UiGM5fPgwe/bsoampie72NoymA0QFvFh8NlIzVrBs8XysVnNJIim3LsTEEWqC+jKQD1QEB0f4gBmAE1iplPpWz4Fa69TBLqCUmgn8GDgd+NupBC0EmGvm7d27l7q6OgyfB29LPZbudqLsASKxMCPOTk6Yqzc5CSEmlhMpWHjSgquh/ydwm9a6Til1KpcTU1x3dzdaa/aW7sNiBHC6W/B1NGMxDDJjnEzLiMRisZMyfxkRMxeOdbhCiJMU6kTd50/xPneZl9EvneJ1xBTmdrspKyujtKyCg/VteNpbiA60ER9hIzXazsz4cCIcVsIz84hUK+Q5kxATXMjzoE7RlcA0pdTlwfcxmM+0lmutbxqlGMQE5fP5qKiooLy8HJ/PR8DjwtpSRZTfQ4TNwuzYMLKSInHEpxFVsBpH/KC9zEKICWZUEpTWem7f90qpTzEn+T43GvcXE1PPXKaysjI8Hk/vdofTQVqUjXCvlWlx4aSnJhIzfzVh02bLfCYhJpHRakEJEbJAIEBVVRUlJSU0HW4nYBjERDoBiImJYe7cuUR15tJS9B6J+UuJzD0Ni13mMwkx2YxJgtJanzYW9xXjm2EYHDx4kJKSElrb2qlt7MTV1oLT4iN5fj4F+flkZmZisVgwjFQip83EFnGi0/CEEBPFMROUUuq3oV5Ea/2N4QlHTEWGYVBXV4fWmvb2dgAsPjfWlmri/C6SnBZiotPIyjpSk8lisUpyEmKSG6oF1fe33wl8DtiLWbzQAywGFgJ/GLHoxKRmGAYNDQ3s3buX1tZWc6Pfh7e1Hkt3GwWJVnydVhJjwphGFVA4pvEKIUbXMROU1vqKntdKqacxBzV8t+8xSqn7gLkDzxXieBobG9Fa09zcjMvjw+X2EW10YHQ0kxVtIyszGofVgssXSYJaROTsJWMdshBilIX6DOqfMFtMAz0PfDp84YjJrrm5mb1799LU1ETAgLqmDjpbDhPlbSE3LYKcaRE4bebKD87UHBLzV2GLihvjqIUQYyHUBFUHnAuUDti+Dqgc1ojEpNTS0oLWmvr6+t5tFiOAteUgWYFuEsMtRAZ8OG0R2KMTiSo4HWdy1hBXFEJMdqEmqH8BnlFKnQt8Algw60FdBFwx1IliamtpaaGkpIRDhw71226xWJiRk0N+uIuDpWVERzhITUsgev4qwqfnY7HI+nlCTHWhLnX0O6VUNbAB+Gpw807gTK31lpEKTkxcra2tlJSUUFdXB4Db46e920tKfASZmZnk5eURFRWFb2YW4a5mEvIWEjl7CVZH2BhHLoQYL0KeB6W1fhN4cwRjEZNAW1sbJSUl1NbW9m6rbeyg8/BhEiwu8s/4J2ZlZ/Tus8cmkXnhNVidEWMRrhBiHBtqHtQDoV5Ea3378IQjJqrBEhNAwNNNoquebHs7YVYL5R9/wqzsi/sdI8lJCDGYoVpQy0K8hjEcgYiJ6ViJyfB5STA6yLK145xmp6zaQlS4g4yoJgwjIM+YhBDHNdQ8qHN6Xiulvgr8VWvdOCpRiXFv4DMmgC6Xj5a2LuanOsi0NhPlALABMHt6EnF5pxE5e7EkJyFESEJ9BvUrYCUgCWqKO9aovKpDbVi6u8k2mkjrDicq+shgh7CM2SSqFdgiZWkiIUToQk1QW4DPAz8bwVjEOHb48GFKSkr6zWPqkZGRQWpnHd2uerBAw+Fu4qLCcCSkEZW/CkdC+hhELISY6EJNUAHgX5VSPwL2Ad19d2qtlw93YGJ8aGpqoqSkhMbG/o1ni8VCRkYGc+bMITY2lpYY2PWP14iJcJKemUbs/NNxpudKfSYhxEk7kRaUzHeaIgzDoLGxkdLSUpqamnq3BwIGja0uvH4HX7rsHBIT4nv3xc0+jbl1FUTNUERkz8ditY1F6EKISSTUibr39rxWSsUCVq11y4hFJcaEYRgcOnSI0tJSWlr6//VaLBbqWwLEu9pJ9h5i//6CfgnKYrOTfOYV0mISQgybkCfqKqVuBH4ITAu+rwf+XWstz6UmOMMwqKmpoaysjLa2tn77LBYLmempZFrbaekspiZYr6ljzxaM0/L6JSRJTkKI4RRSglJK3QbcBfwUeBdzLb7VwA+UUt1a638fuRDFSAkEAlRXV1NWVkZnZ2e/fV6fweycTDKsHVhqd2AE/MRHO2nrcBAXHUZqbjIE/GAbk6LMQogpINRPl5uB/6e1/q8+295TSlUC9wGSoCYQn8/HgQMHqKiooLu733gXuj0B2t1hxLgPk1LzCVj8vTOxLRaYXZBHZN5ynEnTRj9wIcSUEmqCSsGspDvQx4DURJggvF4v+/fvp6KiAo/H02+fw+EgOzub/Tt2k3x4D1bDT31jGNNSogGwxyYTlbccR8p06coTQoyKUBNUEWZZjX8bsP3LmGXgxTjmcrmoqKigsrISn8/Xb19YWBi5ubnk5ORgt9sJP1hMZaMfiwVsNiu26ASi8pbhTJspiUkIMapCTVB3A39RSq0CPghuWwVcAFw+EoGJU9fZ2Ul5eTlVVVUEAoF++2yOMCKikzlz1UJstiNDwjMXr8bdUEV8ahrx+csJy8iVpYmEEGMi1GHmrymlzgNuwawH1Q3sAZZprXeMYHziJLS0tFBWVkZdXR2G0X8t3+joaLo9DjzV5dg9RTTl55GaFN2735mYQe5nrsCRlCktJiHEmBqq3MYFwGatdSeA1vod4J3RCkycGMMwaGhooLy8/KhVHwASEhLISUsgpq2ash0f0d5tPoPa+f6HrP3c2n7HSql1IcR4MFQL6i+ATyn1EfCP4Nf7Wmv3qEQmQhIIBKipqaG8vPyoOUwAKSkpZCdEEN5Uga+0CA+QlhhJe5eHiDA7GQmeoy8qhBDjwFAJKhlzrtMqYA3wHcCqlPqQIwlri9baP+JRiqMMNVTcYrGQnpaGtasTf/mn2OPB16e3LsxpY3bhfFLnL8eZmIEQQoxHQ9WDOgy8EvxCKWUDFmMmrFXAN4BkpdRmrfXFx7qOGF4ul4t9+/ZRWVmJ1+vtt89mszFjxgyyEmMofvV/8LrMxNXujCEmygkWC+HT5hAxcyH22KSxCF8IIUIW8jIAWmu/UqoaqAXqgQNAKpA7QrGJPtra2qioqODgwYNHjcgLCwsjJyeHnJwcnE4nhs9LbKSDpmCCamz3kbZgOeHZ87FFRA92eSGEGHeGTFBKqWjgbGAt8BlgLlAFvAk8A3xFa10zwjFOWT2ripeXl9PQ0DBgH/ix4/AHiExKJy8vr3efxe4gfd4imrZ+THzeaeQvX05YRMRohy+EEKdkqFF8m4HlwGHgLczljP6htS472ZsppdYB/wrMxGyFPaC1fupkrzdZ+f3+3oEP7cHFWftKiIshNuCmrngXTsNNa0s9/pULsFmPPGhKnreCMxeswiplL4QQE9RQLajVQDXwW8wBER9orb1DHD8kpVQG8CLwea31X5VSizHX89umtf7kZK/7/9u79+i4quuAw7/RSDMjybJelixZWLYF9sYGDMG8kialiUvSEBMoAdIGSCC8ktK0ISXpAodAEgivlgWlJSSE0lBKWSQUtzgpjwWF8GizeAQHYtgBrNHoYVvGYHs0kmakmekf58oej21hyZLmjrS/tbQs3TP3ztmembvnnHvuOdNJMpmko6ODaDRKMukGSw6nM/T1D1FTFWFuzSyaS/sp3/4W2XSaeMkQQ2moSGyku2szra27Vq4NlJZhdzEZY4rZaAmqDde1txL4KlApIs8BT+IS1iuqmh1l/92o6kYRaVDVuIiUAPXAMLBnE2GGicfjbNiwga6urt2uL3X19hHvH6IqGOD4miS18S4AN3lrAGpnRxguCVF7yBE0N84uTOWNMWaSjDaKLwr8xPtBRI4EPoFLWFcBQyLyNPCkqt6xP0/mJacKYLv33Deq6lsHEkCxymaz9Pb20t7evsf1JYBIJMJB5X2EBjcRzgyR3BqB+sqd5aXVDbQdeQTh5oNt9VpjzLQ0llF864B1InIbsAI4Hzft0WnAfiUozyBQCSwHfikib6nq3WPYv6gNDw/T1dVFe3s7fX19ACQGhshmYVZFGTU1NbS1tdHc3Ez3s4/wzntDVIRLiYRKCZQECTW1Ub7gMEpr5tpURMaYae0DE5SIHAQcD5zg/Xs0rmvuBdxaUE+P5QlVNQOkgJdE5MfAqbgRgdNaf38/7e3txGKxnTOKJ1NpunrjpJJD1FZV8Mk/PpG6urqdiadx6Yco2dZFpGo25a3LiMxfSkm4opBhGGPMlBltFN9DuITUjLtO9DzwCHA58PJYZ5AQkROBW1R1Rc7mMLBtrJUuFtlslq1bt9Le3s7mzZv3mLg1TIr69A7mlmwjOFhGIlVCfU6rKNQwn4YPr/LWYLIZxY0xM8toLagwcCuuhfSK1/I5EK8CLSLyDdyQ9eOBC4A/PcDj+s5IN140Gt05TLxvYIhIKEiQDJH0AE0lCRrCw7w7e5D341BTFaQi0QPU7jxOIBAg1LigQOd/Tl4AAA02SURBVFEYY0xhjTZIYtVEPpGqbheRk4F/AK7G3fB7oao+M5HPU0iJRIJoNEpnZ+fOaYh2JFL0vpcgk0zQVh1gSfUwdZGg140XYE5tOQ11FUTqm6motpF4xhgzYr8HSUwE736nj07lc062kdF40WiU3t7ePcpLBncwd3Azc0qHqUwGqYvUMtKLFygLU7VwCZH5SymtqpvimhtjjL9NaYKaTlKpFJ2dnUSjUfr7+0lnsiQGhphdGQKgsrKSRYsWUZeJ89vH15LNljB7VohMNkukvoXI/EMJNy0iECwrcCTGGONPlqDGIJvNsn37dqLRKD09PaTTbpxId2+c/h07KE0P0HLccSw7dDENDQ0EAgEyQ0kWND9PpKKcytalROYfSrCyusCRGGOM/1mC2g/pdJru7m46OjrYtm3XoMPsUJJ0YjvlO7ZQnxmiJhSgIlRFY2PjzseUlIWZ9/EzCFbV2Q21xhgzBpagRhGPx4nFYnR2dpJMptiRSBEkTTkDZBLbqQgMsbAqRHlLOd29aSLhILWDXbh7kHcprW4oTADGGFPELEHlyWQybNy4kY6ODrZu3QpAX3+SzT2bKRtOUBFIMb+xknlzQlSFQgQCAbJZiCyaRW3bUiItUuAIjDFmerAE5UkkEsRiMWKxGKlUareyUGoH1UNbqS4NUF0WoK06RKgs6KYemruISMsSyhoOsptpjTFmAs3oBJXJZNi0aRMdHR20x3qIJ1L09/WxsLWR0mAJgUCApqYm5h91OLHHHmQ4k6WmKkJ4zkHMWiCEmtooKQ0VOgxjjJmWZmSC6uvrIxaL0dXVRTKZJJMaJL55I9mBOJXZNIODtaw4ejmtra1EIhEAwsccS2h2PeF5hxCMVH7AMxhjjDlQMyZBDQ0Ns16jrP/922RSCarCkE5sJ92/nezwEJWZNIFghurSEqoqyndbQh2g5qhPFKjmxhgzM82IBBWPx1n76P8Q69lCaLif2SWDhMJu4tZwMEBzTZg5kSCJ/hTVNdXULZ1X4BobY4yZEQmqu7ub0sH3qBnoIUCWTADqayqZVxWirryUkrIQ4aY2WuYtpqx+ng12MMYYH5gRCaqlpYWuDfWktnTRUF7G/NoI9bPLicxdQHjeEkKNrQSCM+K/whhjisaMOCtXVVWx8tOreL8iTkm4gnDLYsJNB1MSihS6asYYY/ZhRiQocGsr1X70TAKlNjmrMcYUgxl1scWSkzHGFI8ZlaCMMcYUD0tQxhhjfMkSlDHGGF+yBGWMMcaXLEEZY4zxpWIZZh4E2LRpU6HrYYwxZhxyzt/7vbR4sSSoZoCzzz670PUwxhhzYJqBd/bngcWSoF4EPgZsBNIFrosxxpixC+KS04v7u0Mgm81OXnWMMcaYcbJBEsYYY3zJEpQxxhhfsgRljDHGlyxBGWOM8SVLUMYYY3zJEpQxxhhfsgRljDHGlyxBGWOM8aVimUlin0TkOGCtqjZ6fzcAtwGfApLAPwNXq2raK78XOAsYzjnMclXdICKtwN3ACUAv8DVV/aWPY/mIV74U6AGuVNWfe2UFi2UscYjIncA5eYeoBFar6g+K8DU5H/g2MAd4E/gbVX3OKyu2WL4GXAbUAy8Al6rqhkLGIiInATcAi73nvVlVfyQiNcBPgJOAPuDbqnqPt08A+D5wMRAC7gG+qarDXvlZwA9wsxw8A5ynqr1+jCVn3xLgIeAZVb01Z/vHca/pwcA64FxV3a9phfyoaFtQIhIQkQuBx3FvuhE/BRpxJ+3DgeOA7+WUHw2cpqqzcn42eGUPAL/FfSAvAh4QkbZJDmVcsYhIM/AL4B+BKuBS4D7vxFGQWMYTh6p+Jfe1AL4JrPfiKkgc441FRJYDtwCnAjXAfcAa72RSbLGcBVwHnO/V97+AJ0QkUqhYRGQ+7qR8Le7/98+B60XkU8APcdOgNQOfAW4QkRO9XS8GTsd99hcDxwJXesdchku053mxvOXFNqkOIBZEZCHwCHBa3jHnAGuA73rHfBh4LOf9V3SKtuK4F+GruBcYABGpAP4EuExVe1X1PeAq4CLvQ1oOHAq8mn8wEVkCHAN8R1VTqvoU7kN5weSHMvZYgC8Cv1LVn6pqVlWfwJ1g3i9gLOOJg5zHHgzcBHxBVXcU4WuymF2fqQDuJDPg7VtssXwOuEtVn1HVYVX9IZACVhYwloXA/ar6sKpmVPVF4GlgJXAGcJWq9qvqq8BduMQE8CXgVlXtUtUtwDXAJV7ZOcAjqvqcqg4CVwB/ICKL/RiLiMwCXsa1jl7IO+bpwO9U9SFVHVLVm4Gwd8yiVMwJ6k5VXQG8lLNtJJ5EzrY00ID7RnEUrmvvLhHZIiKviMgq73HLgJiq5u77JnDEpNR+d+OJZQUQFZEHRORdEfkN0KSqcQoXy3jiyPX3uJPiOu/vYntNHgNeB17DncxvBD6vqhmKL5aSvLKR8iUUKBZVfVZVvzLyt4jUsWsS6Syu9bO3+izDtcpzy+Z5++9Wpqr9QCf+jWUQWKqqVwJDeYfNjxNAmZr32KQo2gSlqj172daH68a4SUTqRKQe+I5XXI7rCnsW941yHq4L40ERORKYBfTnHbIfqJicCHar93hiqcN1rdyH6wq4HnjYa4UUJJZxxgGAiByO63O/MWf3YntNIrgTwgm462h/i+via6L4YnkIuFhEjhGRMhG5CNf7UE4BYxkhItW4VtuvcS2KQVXNnfk6tz759R35vWIvZfn7TrqxxOK1Zvd1fazgsUy0ok1QozgX9+31DdwFzzXe9m2q+riqnqSqL3lN4IeAp4DP4r4tlucdqwJ3kbJQ9hkL7qL2o6q61ovlQeAV4NP4L5bR4hjxZWCNqm7O2ea3OGD0WK4BNqnqr1U1qap3AFHgTIosFlV9APel5wFci+Jw4AngfQoci9fF+H/AZlx3WByI5HUZ59Ynv74jJ+y+vZTl7zupxhHLaPz4Hjsg0zFBNQOXqOpcVT0c6AbeUNV+ETlFRL6U9/gQrtm8Hmj1rlONOJQ9m8xTaZ+x4Jr9tXmPHxmV6bdYRotjxKnseXHab3HA6LHMx/X55xrGdcUUVSzeIJxHVPUQVW0CvoFLUi9TwFhE5A9xLY01wBnedaO3cNf8Fu2jPusBySvbqKrb8su8a3Ot+DeW0eTHOZZ9fanoh5nvxS3A6yJyOe6NdiO7RoQFgdtE5A3cB+3zwEeAC1U1JiLrgOtE5Apv+6nAh6c6gByjxXIv8Jcicg5wP+5b+nLgLFXt9Fkso8UxMty5DXg+dydVVZ/FAaPHshbXZfYgblG2s4HDgF/48DWB0WNZCVwtIh8DduC6/3qAF1U1W4hYvO7rtbhbEG4f2a6qfSLyMG4U3AW4IdYX4UbmAfwrcLmIPIlrZVzjbQP32XlORP4I+F9cq/E3qvp7n8Yymodx77+zvN//GsjgBl8UpemYoC7CjXp5D9ftcrvX1YKqrhGR1cC/A024VsgqVY15+34O+DHunoR3gQtU9fUprn+u0WJZJyIn404qdwAx4HRV7fT29VMs+4zDsxBIeiPJ8vkpDhj9NbnLu55wP+4+qPXAyT59TWD01+XfcBfX1+F6GZ4EPptzbaQQsVyKu458vYhcn7P9n3Cj8u4AOnA9Itep6n975XcCc3Gj3iqAn+Fdb1PV10Tky95jWnAtmjMnOQ4Yfyz7pKq9InIK7j6ou4HfAaeoamqiKz9VbEVdY4wxvjQdr0EZY4yZBixBGWOM8SVLUMYYY3zJEpQxxhhfsgRljDHGlyxBGWOM8SVLUMZMIG/y3i3e5J/5ZatFpM9bLsEY8wEsQRkzsb6OuwE+9+ZLRGQRsBo3c0C0APUypuhYgjJmAqnqJtyaQheKyPE5Rbfj1iG7fa87GmP2YDNJGDPBvJmon8dNEXQsbrb8B4EPqep67zHn41Z1bcHNJr5aVR/1ykpxS5R/AbcszFbc9FyXq2paRO7DzbG2FDdX2+mq+vSUBWjMFLEWlDETzJuv7mLc5L3nA38HXJuTnD6Dm6h1tfeYu3FreR3nHeIK3BLg5+JW6b0C+CtgVc7TnIObc20lbrkGY6ad6ThZrDEFp6qvi8gtwI9wLaQbcoqvBG7w1vACeFtEjsEtafFnuBV5z1PVX3nl94jIt3Arpv6nt229qt432XEYU0iWoIyZPN/Frar7fVXNXZ57GbBCRK7K2VaGt26PN+v+ShG5GbfE+nLcjO/BnMe/M5kVN8YPrIvPmEmiqgPerwN5RaXAN4Gjcn4Ow62phIhci1sSosT795NA/lIW+cc0ZtqxFpQxU+9NYIGqvj2ywWtNDQI3A38BfF1V7/XKynELCgb2cixjpi1LUMZMvZuAe0VEgaeAk4CrcdefwC0guEpEXgCqcV2Fs9lzOXljpjXr4jNmiqnqz4DLgG/hrjtdBlyiqj/3HvJF3Oi914D/AN4G/gVYMeWVNaaA7D4oY4wxvmQtKGOMMb5kCcoYY4wvWYIyxhjjS5agjDHG+JIlKGOMMb5kCcoYY4wvWYIyxhjjS5agjDHG+NL/Ayaqs/yaqgOLAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "results = run_simulation(system, update_func_quad)\n",
+ "plot_results(census, un, results, '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": 10,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap04-fig01.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "system.t_end = 2250\n",
+ "results = run_simulation(system, update_func_quad)\n",
+ "plot_results(census, un, results, 'World population projection')\n",
+ "savefig('figs/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": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13.856665141368708"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results[system.t_end]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "13.88888888888889"
+ ]
+ },
+ "execution_count": 12,
+ "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? Run the model with initial populations between 1 and 20 billion, and plot the results on the same axes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "p_0_array = linspace(1, 20, 20)\n",
+ "\n",
+ "for system.p_0 in p_0_array:\n",
+ " results = run_simulation(system, update_func_quad)\n",
+ " plot(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": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " United States Census Bureau (2015)[28] \n",
+ " Population Reference Bureau (1973-2015)[15] \n",
+ " United Nations Department of Economic and Social Affairs (2015)[16] \n",
+ " \n",
+ " \n",
+ " Year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2016 \n",
+ " 7.334772e+09 \n",
+ " NaN \n",
+ " 7.432663e+09 \n",
+ " \n",
+ " \n",
+ " 2017 \n",
+ " 7.412779e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2018 \n",
+ " 7.490428e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2019 \n",
+ " 7.567403e+09 \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2020 \n",
+ " 7.643402e+09 \n",
+ " NaN \n",
+ " 7.758157e+09 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " United States Census Bureau (2015)[28] \\\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)[15] \\\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)[16] \n",
+ "Year \n",
+ "2016 7.432663e+09 \n",
+ "2017 NaN \n",
+ "2018 NaN \n",
+ "2019 NaN \n",
+ "2020 7.758157e+09 "
+ ]
+ },
+ "execution_count": 14,
+ "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": 15,
+ "metadata": {},
+ "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": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_projections(table):\n",
+ " \"\"\"Plot world population projections.\n",
+ " \n",
+ " table: DataFrame with columns 'un' and 'census'\n",
+ " \"\"\"\n",
+ " census_proj = table.census / 1e9\n",
+ " un_proj = table.un / 1e9\n",
+ " \n",
+ " plot(census_proj.dropna(), 'b:', label='US Census')\n",
+ " plot(un_proj.dropna(), 'g--', 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": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 1950.000000 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 2100.000000 \n",
+ " \n",
+ " \n",
+ " p_0 \n",
+ " 2.557629 \n",
+ " \n",
+ " \n",
+ " alpha \n",
+ " 0.025000 \n",
+ " \n",
+ " \n",
+ " beta \n",
+ " -0.001800 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "t_0 1950.000000\n",
+ "t_end 2100.000000\n",
+ "p_0 2.557629\n",
+ "alpha 0.025000\n",
+ "beta -0.001800\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = System(t_0=t_0, \n",
+ " t_end=2100,\n",
+ " p_0=p_0,\n",
+ " alpha=0.025,\n",
+ " beta=-0.0018)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap04-fig02.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "results = run_simulation(system, update_func_quad)\n",
+ "\n",
+ "plot_results(census, un, results, 'World population projections')\n",
+ "plot_projections(table3)\n",
+ "savefig('figs/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": [
+ "## Exercises\n",
+ "\n",
+ "**Optional exercise:** The net growth rate of world population has been declining for several decades. That observation suggests one more way to generate projections, by extrapolating observed changes in growth rate.\n",
+ "\n",
+ "The `modsim` library provides a function, `compute_rel_diff`, that computes relative differences of the elements in a sequence. It is a wrapper for the NumPy function `ediff1d`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%psource compute_rel_diff"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we can use it to compute the relative differences in the `census` and `un` estimates:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "alpha_census = compute_rel_diff(census)\n",
+ "plot(alpha_census)\n",
+ "\n",
+ "alpha_un = compute_rel_diff(un)\n",
+ "plot(alpha_un)\n",
+ "\n",
+ "decorate(xlabel='Year', label='Net growth rate')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Other than a bump around 1990, net growth rate has been declining roughly linearly since 1965. As an exercise, you can use this data to make a projection of world population until 2100.\n",
+ "\n",
+ "1. Define a function, `alpha_func`, that takes `t` as a parameter and returns an estimate of the net growth rate at time `t`, based on a linear function `alpha = intercept + slope * t`. Choose values of `slope` and `intercept` to fit the observed net growth rates since 1965.\n",
+ "\n",
+ "2. Call your function with a range of `ts` from 1960 to 2020 and plot the results.\n",
+ "\n",
+ "3. Create a `System` object that includes `alpha_func` as a system variable.\n",
+ "\n",
+ "4. Define an update function that uses `alpha_func` to compute the net growth rate at the given time `t`.\n",
+ "\n",
+ "5. Test your update function with `t_0 = 1960` and `p_0 = census[t_0]`.\n",
+ "\n",
+ "6. Run a simulation from 1960 to 2100 with your update function, and plot the results.\n",
+ "\n",
+ "7. Compare your projections with those from the US Census and UN."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def alpha_func(t):\n",
+ " b = 3\n",
+ " m = 2\n",
+ " alpha = b + m * t\n",
+ " return alpha"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "t_array = linspace(1960, 2020, 60)\n",
+ "results = SweepSeries()\n",
+ "\n",
+ "for t in t_array:\n",
+ " results[t] = alpha_func(t)\n",
+ " plot(results)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Related viewing:** You might be interested in this [video by Hans Rosling about the demographic changes we expect in this century](https://www.youtube.com/watch?v=ezVk1ahRF78)."
+ ]
+ }
+ ],
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap09mine.ipynb b/code/chap09mine.ipynb
new file mode 100644
index 00000000..b21fbd95
--- /dev/null
+++ b/code/chap09mine.ipynb
@@ -0,0 +1,1152 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 9\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import everything from SymPy.\n",
+ "from sympy import *\n",
+ "\n",
+ "# Set up Jupyter notebook to display math.\n",
+ "init_printing() "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The following displays SymPy expressions and provides the option of showing results in LaTeX format."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sympy.printing import latex\n",
+ "\n",
+ "def show(expr, show_latex=False):\n",
+ " \"\"\"Display a SymPy expression.\n",
+ " \n",
+ " expr: SymPy expression\n",
+ " show_latex: boolean\n",
+ " \"\"\"\n",
+ " if show_latex:\n",
+ " print(latex(expr))\n",
+ " return expr"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Analysis with SymPy"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Create a symbol for time."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAcAAAANBAMAAACX52mGAAAALVBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMA3SJUmc2JRLt2EDKrZmgETt4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAABBSURBVAgdY2BgEGJgYGB+ACRYAoAEYwIDQ0lfywQGBjsgj8EVRIgBMddzIMH+gGEBA1sA8wYGlgMrGRiYei8wAAARQQqn78uQggAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$t$$"
+ ],
+ "text/plain": [
+ "t"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t = symbols('t')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If you combine symbols and numbers, you get symbolic expressions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAACoAAAAQBAMAAACSDPCjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMA3SJUmc2JRLt2EDKrZu+DtOv5AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAgUlEQVQYGWNgwAGE0MSZXwEFmD9ARJknQOg1Ob+ADJYAVFEGXpAoYwIW0ZL+FohWmAkQtfYQpQyooq5YRcVAomyhoYFPQ0MPgNgg27i+g1hAgGIC+weGBZiibAHMGzBFWQ6sBAsiTOAEmsvUewFVlOXcV1+ICIiE24YQArK4FiC4ADBiJQxRIz2iAAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$t + 1$$"
+ ],
+ "text/plain": [
+ "t + 1"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "expr = t + 1"
+ ]
+ },
+ {
+ "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": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sympy.core.add.Add"
+ ]
+ },
+ "execution_count": 40,
+ "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": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAKlBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmU0mKAAAADXRSTlMAIom7VJlmdt1E780Q7do0IAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAE9JREFUCB1jYBBSMmFgYAxg8E1gYL/CwNvAwLmSgXcDAxAARRgYeJqABKNGDJBkYKiaACK51jAwCjAwAxXfAZFcBgwcdxjYEsDqp4ZaMgAAEagNutwMdEUAAAAASUVORK5CYII=\n",
+ "text/latex": [
+ "$$3$$"
+ ],
+ "text/plain": [
+ "3"
+ ]
+ },
+ "execution_count": 41,
+ "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": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "f"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f = Function('f')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The type of `f` is `UndefinedFunction`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sympy.core.function.UndefinedFunction"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(f)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "SymPy understands that `f(t)` means `f` evaluated at `t`, but it doesn't try to evaluate it yet."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAUBAMAAAAevyJ8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA7klEQVQYGS2QMUsDQRCFv1W5nJFLwMpKD0xsJCHkF2wdkDTBWuxsJI2FEDhbqxwi6QKHdhYi5A/kHyRF7FNapEiZJuDb4RbevDdvmNmdhfL0Ale8Zaddj1uaHFi8zYbUVDv2nAfD7c7gQyKDqCOubBXehbaKP+IohyOBifAH1eu3lMOUuLW/hHuZ9Q4kRdn6LaM/1wVDOFgreRY0nJMXmXcSC+FBCMaFYMavOLSMcfCqZCaEoY+MQEPdTkaUQtPpuiuItzLiHG6+JDYqLsX2dJHLeaoVwQjL6Wi5qW1M4s1Q8tkwVX7QyhIL9oVVzz/WoisRkU3E3gAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$f{\\left (t \\right )}$$"
+ ],
+ "text/plain": [
+ "f(t)"
+ ]
+ },
+ "execution_count": 44,
+ "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": 45,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAADYAAAArBAMAAADBI2arAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMrvvmVREEIndzSJ2Zqtw62vAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABt0lEQVQ4EXWSO0gDQRCGfy+PvSRGwdYiAQsLBUVsRIRDLIIGPUuxMGAhVgnYWZggWigWKQVBIoidcIitkoBYWaRIoyCk1hRRiLEQdGYvkntkh7udxze37M2/ANvQtHS9l1bvMlfDbTXTi2oWNVTs9iRhKlh4FhM5BdupYlGBsJLDqYpNQXwpmPhGqKliLQyU1hVwHM/1goLtPQ03Mk52x0nIcpYoFuklWpKy+u5hA4ckSJS+iFjY9bD8VgaoUXED0MtuSCXgjF4alJh0syNKY0VaeFBXLlabWQD6DYTnP9PAgYvhh1KtSj/QpODFxWIflEZMIFiiYM3FZHsgQ7xA9QR+/422kdeGWZ5eYk7T6pTxnlkIYNuJEChTymc5xqr3LHIr3QCWBXWlqLFrWQ7DReDmlYKLLqBoX2Y8MzJBPUDfiMEuVL9mJ2dNrjPrQZNFiYyWGEGzpOtolM2xKPEHu9jRdkx2gMbvvL3yTsTtRlzaotiNzjWWqrRsUZxVO960tLbi9oo5VoSeHhZssyJSFB8NJFkROUkfyxf436QofmbiLWRJUXxMK8fPdVsUHxONyv2jLYqX/QG0WWqAUITkAAAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$\\frac{d}{d t} f{\\left (t \\right )}$$"
+ ],
+ "text/plain": [
+ "d \n",
+ "──(f(t))\n",
+ "dt "
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dfdt = diff(f(t), t)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sympy.core.function.Derivative"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(dfdt)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We need a symbol for `alpha`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAAJBAMAAAAbVLtZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXaZRCLdEO9Uu81mqzIdlvb2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAS0lEQVQIHWNgYBBSdmAAgjAH9lb2CQwMiQwMi5kKGJi/MzBYMzIwcCxgYJAQZ2CoF2BgkAdK8x8A8oHKmS8w8MjzARmCZw4wCzEAAHKpCpUusOYOAAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$\\alpha$$"
+ ],
+ "text/plain": [
+ "α"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "alpha = symbols('alpha')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can write the differential equation for proportional growth."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIMAAAArBAMAAACp/CbWAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMrvvmVREEIndzSJ2Zqtw62vAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC10lEQVRIDaVVz2sTQRT+mjTdTWLa/AcGFDxItXgQBYWgIkFLjUcRbEBBPCVYFSxCgtSDRaGIiiBIhOJBUYI3D+oWil485NCDqIUcRT1EwdaDot97s2F3E0XY+WBm34/Zb+fNvjcPEAxtKurTZhor27yt71Zr1hRXrRmwaEmRLS19t6Q42Uqs21E4ezHctKMYXke6YUeRLKBesaOoNzBtx4B6GZ9SLSuShJe751oxwPmy9OJVmOK5KP/dV7Yty47LFMG55Racgpo+RxwRxZk8DJxV0+jACXycLiNDa7qF2chbEWX0CrP5EU134TQjHsBZuwCs0Mhf5Hp9zkCtn64gV2SwXeBaYFZJbKQGDpFuos8ZqJID3Kcm9UxgVsldALIcuMPxoM8ZqHI1POOQpM5UKATI7b9ZxIYiRvZ9mwTmAocvuW8OirSy+wCwDJzavtmDW/Sd/mPMAxJtEyTeqXH+oWBR5OxtzLTOU/jJMc4hAeWanEJ4mefuyiZIHAs5VOS+E8XXpPpK9RYHTwwpiTsEoU1WTJDYSCWCIzUeYMPf40665MSGuvjdQ5e6nFOyAlO5AxQ7+Kd31TjJh0nhrPFJigi2UZNAqnCAM+oyZ/GEsvODb8sNmehwYiAjXdQwInwh7KEsxzmPo/CPM+T9RYoJ6kmPE4/Tbaby/cepO5O/NOVwVYkLI5gC3nbzfphzPPTOJU6NyBrujNtbAJ6uUrgf8VFxr6+i5EmYBMPMjreZWuQMwS2IIglOOKT6Oy6LWRJccFHnXlM+kSGrKTM+XE+UQaQ6j8UoZSbwy4xNWUhvmPpOGP5/FXt6S1Pf3apzr9irNc3VD7xICP/KMUvUEplyvJUE5srxvycZJbnag158ObOwZxt8movvve9gEUmuxoY0ZVPdsSm0Ket1FZfCNGWrvmyaMq+C+EhqU7bqy3VtylrdcfdhmrJWd1wK05S1uuNSmKas1R2T4g9fkLOgechl2QAAAABJRU5ErkJggg==\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": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "eq1 = Eq(dfdt, alpha*f(t))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And use `dsolve` to solve it. The result is the general solution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHIAAAAYBAMAAADUnLRyAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACDklEQVQ4EZ1Uz0tUURg9d2aa95ye00NCAimHMsHMeuTOUB4uWgQyYdGiNmNB4EaHwIUQOFtxkYW0KwfduRCxRcsG/wFnkXsJooEiJsgSQeh89857b6YZwebAd9/5fpz7+z6gPaRL7emA3naFmG9H+fQZMP7ueii9K8zyQ/9E0lE44+XwVee7bvlQZU0ftBCo0clHiVyYGEKqUsAv7T9cyCPtAx0+LoUFEbldhDVYDP0PsLfhbImvDi8AayQLQNILKwJy8RXZTT9wOZrzE/F75xmwqmxWaDfYi+4rrBLyzWWzFIUq6K66MS6V4ywDCRre0Cq0BsT+iLsTxcY3vP68c78EpAZfZxDPwB46vgI8iUoMy0qfkLkR3cN9hpj2nAd0Fmuz3tSxmR+Cz8JnmRU4ZcBewR3jmTZb4rbmgdg+/aa7scos4VxeBnryKroADHJLcbZAdY5kl9aAj664LmwqH6+PaC8omCYRZS+tWbnKIKySVh4Ir8Meucz2JRSwqBNmnV+E65NMco0c87dORs17UtmhGbwAzA5FSWQ9OlNGyWOL16XUIZ1kBriqWNRfl9HUOgKeu0Y5BlV/KnaVFTKXiQ2S7/8q0bU3WahVxK9JSYhkWajcPkKxh9aQvhsxly5KYM1EW9x4k4DVpHxrHlanrytavTKdSAwceLU+gs+6WXPtZX8Kwv/x1X+TlH96xV8A7miRH6kVugAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$f{\\left (t \\right )} = C_{1} e^{\\alpha t}$$"
+ ],
+ "text/plain": [
+ " α⋅t\n",
+ "f(t) = C₁⋅ℯ "
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "solution_eq = dsolve(eq1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can tell it's a general solution because it contains an unspecified constant, `C1`.\n",
+ "\n",
+ "In this example, finding the particular solution is easy: we just replace `C1` with `p_0`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "C1, p_0 = symbols('C1 p_0')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAYBAMAAADpDtUUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACEElEQVQ4EZ1UQUsbQRT+Jhs3m2SzWVqRFqXmID20VpaUXjxIyKGHXhQKQvESCAi9lD3owZNLhV6VIuLFEmrpIb1UPXjxsNA/EEQvXgwFqaeygbR6kNL3ZtPsWLOF5oN58733zWPfvJlZoB9Yfj9ZwGh/aVj6/7zqPFB+N95NfCbZQtePIWlvwKngm1RvFUsQDUkHSjHr/4QfIXPuoS3d2WUXFiesQzRlJN7sw9iF+ZkXiMs7wHsiqQCoxqdIpQ2zBW1msLOcPgUkmsCwVOPNOYYCO0FbBPQ1IEkDafIsj8g/UK47913zuQ9kHr4tQCsAr08PHehEruHN0ZcndhgZejymSnkHyNUoskwj0ySDV98ZX5lWXrh6Q6tWAGMdTynQxbRPJbrkTtBIccEKku4ZMsFHLNLWXREdNy3hz2Q9Mhs0zICMAoEL6K1N5G3MbU/aioKX5HCeuCTydx6MFnI7V8i6+KEmET+mwXUaAWwYss5wf2e8kLo9Ot5Guoaf7CrYI8590Zspv9MXRbUK+DTSQtrhbWiKIMvj9idmbpOpKBLTfMM8MNvIOpiCUM+ByqMaqbzkSY3O3SdPxepKsSSukPegPairgt5gj+8Z4244RZa7BtnPKMZs0arxxPeaceNey8Mv8vldx9Y96edKcrrxjsQFx7X5gpQVsx3utfNuO+mRvvTLiZxeLPxPfOgl9Yr9BlsTc10FVjm0AAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$f{\\left (t \\right )} = p_{0} e^{\\alpha t}$$"
+ ],
+ "text/plain": [
+ " α⋅t\n",
+ "f(t) = p₀⋅ℯ "
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "particular = solution_eq.subs(C1, p_0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In the next example, we 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": 51,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "r, K = symbols('r K')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we can write the differential equation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPIAAAAyBAMAAACUrpsjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMrvvmVREEIndzSJ2Zqtw62vAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFLklEQVRYCZ1YXYgbVRQ+mWQy+c8i+OTDBiqIKBqKVMUfgoqUtXYjfRLBBnwQnxKolOLDJogKirih7IMouBHUB0Ec1FftFMSn0l2kPijKBnwRXeha3Lauu67nnHtn5s7MvZOJh8z5+c7PzczcuWfuAPw/eiNj2krGuMxhpVFa6NfktF3ixQlxM91yn9mn9VzWogi+/K0LTou9fzD/ibmZ7ZpdOo/d1qGE/Xa6CxU827ILr3CMNWJhYsUbJo8eP9PT4+BcPwtwBZ2nAUoeBTnHiBupNDa6tI7btSiC9g6y9/FYwjHbHHWKuYlVOiaPFreNl4hOoUqn8S4en3ByecRCy756e7GrdZjAcsfgqT++1oFaB4qPXTsB8BpH2f8YgnHiPwT3DoxenWPL1aGENT0Aa1NedTmt10zBcGaT7so8dN4YfGEBp3UXoDDBkGdF2NbAFL484Lticifx3PUkJhGc0pDv4egjAFjEA2nosdCwo/gsaGAzVGgbfW+iJ9/D0fDwR65MUNeRc1M8CzqfHstP9Tii9+BBV7sPDsBLIqxmmmLOLjQmzxlraRyLmxpQQA+joBn2FjwDIGdY9cAUfjf8OB2ZnDp8w9WhhPFtK3UATjoewHGCkB4VIslXLt223VNhpdWocKAfCbS4UtxBpDgG+OIXVD6U7jsjYfrqzomn8I+3OFK0mkiSNI7qQMZKLRK0eiI5+A+YVqVMq954HZtWpNXIJFU4fwnLvl9FSX++skmCOgaS6BiobC2wDWnVhy/2Yq1G5ER4bp/NlXcSq/d52RhdDhAGqose25BWnRaCWKsRSSq3ZTOvJ0b+Ge8Vkrxdd/lJw47Q0qrTQhBrNX56KOt/Cj05sh/Dk6guzhyx5lQ4UqpfefAJiLcavxrO2ctnL3lo+iuDeeQwh7Vmi0VqdbqD0VZT+pSpg46S9bHVJimvcuaR8xPMQkpWFzjyKl3HeKsJvLeWp0WapYW5Rx5zjXj1Q592ZFfN96KthrOIDYboQWpgJJE4Z0dcFPpLTb9UKDmw3GbBb0r5nrY6vcsA+XgM2eQQksRzMz6y70yRcuS06tYU86OtRt5ncvjvD3Nf7TKdEE6gKbJodYKZ8h6KeKsRLuIPCLUku968MyytOl/kRKvxh+YZgkZNPs+1xEriR8ak7Odp1fuUkmg1fh1yENXFG0zh172nBTCLNzscoameOyJc8CpHxFsNgwqz09+dalf3ptA49FskJg5HnK2r3uzSPsiefsYR8VbDoMJyB4qhUZsTfD6DRRsDuGPoq/cHtA8q34EpSJbLImg1bKlMdkkVUvX+COAHFcBNnqk6LuVLeP9wA0oUbzUMquw91Ujqqz04JypJ3ypZ+uofiX2QXyTWanw4kMuBplU+h9wo4rgascLq1eMXd8U+KBKQYpg3DZy057+U+CVMb08vuNaN+d640/d/xZu1v/0xWVb3I2ZgOI/QJgh/2UmuDIaE0r63TFMqIL+fB4BUcBXGTRD+slNhJy22cgAXJmqANVatUM+3qDPxyhaC6VoxdSnBNxBLrq+iTNPTl8MFBp9l3gfpAzTomgYLoL4HxX8DC5WNgWqF+rALv9su74NCcIaWOrlXFwDW1cFMmxvLq39QEvugGeOF7vwo1BPaOiIbSoDxa4WzffGb78Q+KFHEBJi/0ICzdLgNtfVrbpA759efIE+v4KKXmU6pVz5zlinwS7yXGWnGl7iMVYIwexyos5RGZ1bEfP6TmcO/zxyZLbDhZYub+ZU5Yxkl7ElFT1NXjPPrPyLUaWvp+/EeAAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$\\frac{d}{d t} f{\\left (t \\right )} = r \\left(1 - \\frac{f{\\left (t \\right )}}{K}\\right) f{\\left (t \\right )}$$"
+ ],
+ "text/plain": [
+ "d ⎛ f(t)⎞ \n",
+ "──(f(t)) = r⋅⎜1 - ────⎟⋅f(t)\n",
+ "dt ⎝ K ⎠ "
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "eq2 = Eq(diff(f(t), t), r * f(t) * (1 - f(t)/K))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And solve it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAK4AAAAwBAMAAAB6TlzuAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAECElEQVRYCa1WTWhcVRT+Xmby5ifJzJDa4g9NBhoEo5Vpa0BFzVNaF1mYqSkuDLYDtYtukoHahZQyYxfdlbRSxU30YRVFERKzFX0gduPCqShCNxkCIvgzGdPEDNIkPee8ee/Nzwu985ID99xzzv3Ox3333Z8DBJKvXs09xYnRxd+Q2EgF4vBJeiWD/XMS/xI4ZjQiElaj15kdrgHxkuS8gUiGjW6HYdAxAvSxHNArdFjA00LQ59C87Rhq/cjW78CpTUvQoylAo0a6tt+UEPPGXz934qUPnxBfWW0S8qJhw2ft7jgQqU2VxBHemeIH+MMeU9XR/2g++TqabJKb84D+f/SuOMz74vOkVsVVVnoN2psO+n0yHgauAYk03iPnZOWvSsXEBC37nANS6xNV3HSRB8nKCW8yj4LBcZ4vvgFC2QfYUpZkOZ4W8L4jQ4iZ2GcI708GeiTOvOEq0JXJkaUuM7nRq4yOXsfLwJlHD5F9DfpHQ7iwwnHmjZZoHSYsdpVl+kjXOoMfyWvuRqL1dUXWwfXUjWUzzDsNkzeeTdWzvl/Je/lBeTeARYto1jyqJivc5Ck70TvATJbg9tZVzrsfUKfdH/uXULR1Q/cDdzAeqxIfz/UFaEMd5AFjgn7LP6d/eS2DZ7Z+IfLhL/whPtH+wwa0kgx0Gz7jQUOvFfJIMOF1aOWgJO15Wu1B4GOKR2gRT7ePB40wHU2VznaZzlNQlvY8/SpdGdTAz0ui2A4IFok//m4aoTRwafHnDHQydkmSGbqOTCIrUIuXSWGqwrLEZnAZt2gJ8pT/JLUIL8juCE+zp0iKn5feKqndkbNEw7xajYw23uRWICGqX6nxOkSrSCEq62CvL1UMO5EFSub/ppcjVv2/7YTOyZXP5+3Vld1DKufEW3qngsSVjTyWb7WM+rj0+bQG9Pnh2yadC8sHQiGvgozPIXyiCfR3k+c4eoktPscsD9ldq26oILtLOCfD2TpI44m1yfmEyTG+d1i2uXf4iNcryJ5MqMhIyHyo99/yswMC6jOk2+6e9CpIDL5zW6DC++lnI0cfW7LsgKMj82TdsJ+V+r1ep3cQbu9VkChc/scO83w/r8WKibwLE2PvGX4IHRkT4xPHbentZ5grSEybM5aMEm94D6mkIa6n4o28XtjP4iNuV5BYQixLdX+l8m3lT3RngB9bExR5udI7SLk5qfSwjsiqMNFU0WMBI5ohvqvUeKXS8yrIXiL9WiiYd5zaAd1ltA01XrvScypInF0xIt+lmYB5r1D74Tn2GkSNt6HS4wrdE+b1ZECeAjl6arwNlV5TBemeC4+7bqnx2lusLRkwfGISUuOlLRbajsE/rsbbcaWHkNK56KTSk/l3TW4O+3/ILkTvAcXyJRZCpRbtAAAAAElFTkSuQmCC\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": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "solution_eq = dsolve(eq2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The result, `solution_eq`, contains `rhs`, which is the right-hand side of the solution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG0AAAAwBAMAAADpxulMAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdqvNMlS7IkSJZhCZ3e+HNtqwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACmUlEQVRIDe1Vz49LURT++tpOf7x2Xk1ELCaZNhISESqPjQjlD6D+ALxIxI4XGwuSdmUn7bCwM41kRBApCyImMYIIiRA22JRgw2aojBojde65776+tteMSsSCk9xzv/Od871333tNP0AXyX0PQq5oxA/tR3i2rpvRcLH1MA9K/jJwmK+gxjYooNlLZeCc5FcimhEoK0uYMx7QbS+I3CYbr7GcgSNLRJ94QG6hdc0sjLY8ROgbkTe5Ybau1Rg4lM9Ojhx5tLnAtUpWHogekFXa4d2oE9U6JQuRz7fS5XCRe36qVIFJr7IIA5EzdSAxF//MrAPErlCyXC79NFHGDUWlSWfWkCZdeBpPAcO239ibYGSAHb5Cgq2I0LSMlEM3AuusIva6giUKwwVgxOSSKhlNXGJgjo+6eAnztNTtdDE8LRoOrRKt23TBQMS/hr5zecKNVZFYM15nXaJxH3vmRcOhdZzW9qWUOpH4mHlcpNJ8h6mCR4vn88PxURcIz6GUJ8Z4v+Si14iM3QuMOAEcgJaDIfHCrWyADEI3WHRwJYP4Jyrlp+vwi6GJAtCg5xGfLrPYcKDfIDxGmlAeU26AXxiad9o5hBqzpBi9UFt49n/3334D7d+Kmb/10v6AA4ULP38YjQMZavqWAppd40BDamy3Av27zoGELrl616pjz+72CKIfFKFzINZVys+xUU15+9WTwuc4dA4kdEeXUfoiZzo56ev6HAgr7C22XUOO/OxVRyGR1Akn0TkQv5e39BeXvd4jlDp2Eo0DCV2MfoepTFWnk06icSChizt0zlxBpws4CTulP8Pn9CvT5uBL8DkDTtLtQN06/wIEpK739GoipkDfzrpBnUTdbzAn4Xvzr3JwJ0mtbT7sO/uvEj8AvmnketMDW0IAAAAASUVORK5CYII=\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": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "general = solution_eq.rhs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can evaluate the right-hand side at $t=0$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFIAAAAwBAMAAABwPjD5AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdqvNMlS7IkSJZhCZ3e+HNtqwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACXklEQVQ4Ee2UP2gTURzHv/nHJblcc9FB0Uoy6WCpVcFJyHXsZFwcbRBEULCHTk52EkQk1zo4ac+lQwUpDoVq0AxqaCdxUNTBOrioYG1sjBqIv/d7vfPu8oougoM/yPt9f9/fJ+9eXu49QBWzQ8429i+1KyifUSHSO29iYYVldgXans1BrQNkq9yPV3F0cxCGAyRNBgbM2GSY3NI7AOxrWewW5wGdPhQPr5zmHBhapI/Z0ngu015K45cPycIf099oaZWNkjTF2AcaZtyaJYpfkelAv+6VL0ncA15TOgyj5NkyJ1Yx5jtPSDmSXEfqq++zyI9kGywWC00YLhZpyTRnkrCPYbLmFJ8KJ/0CF4DppZ2kibzRtVOfGqLhx0whty6KBxX9kWeKdfZH2dXEPmH41o75je5ot9LPAW1gwqLGmqoZ9NKfgVqJHLmVwVZEZ74Axg8yaStjkV64NFaJEPNthd4Mt8JVvbxmYlfvFOHLc+HW/+of2IHen8bfXGv2xFLMFg9IT5xEou29+P2P1PZDPyvtO8A5/k4/JZyLk8CsbO1GypRKOdK7jlHZeYvtSkSaMXEy7rPWOwuuNANjStxRHEaVU5x+SKpzTRbsyOHutJiJI++IlLxJZOZ7mo5fJLI+KW5h3YVBZKKBZxGOLkwm9alBO1elyeggE5mvYNyOopK8amsOXvH1KcgjNgYaSlJ/h7qFzNAUUURm3jRxvKsk4+8Lt72GmNMP/SCHJQx+er4kJEey+NiTkSxJJ+KqSibFBpmqbtBjMjaCuh10VZr/bQzOuapm0MsNt5aD9W/0T3gPt+wd7/hbAAAAAElFTkSuQmCC\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": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "at_0 = general.subs(t, 0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we want to find the value of `C1` that makes `f(0) = p_0`.\n",
+ "\n",
+ "So we'll create the equation `at_0 = p_0` 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 list 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 list, so we have to use the bracket operator, `[0]`, to select the first one."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(list, 1)"
+ ]
+ },
+ "execution_count": 55,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "solutions = solve(Eq(at_0, p_0), C1)\n",
+ "type(solutions), len(solutions)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHkAAAA8BAMAAACwQQilAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1UmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADSElEQVRIDd1XTWgTQRR+m3ST3TRNYq8eGgXRImJEL/VgA/YklAYseuihqSBY8BACooeii6AXlQQtSAUx6MFjqyDoxeypHhvoRTzYgKIUFFrb2jbaxjezfzOTWWv2UvAVZr7ve9+bXWZnXiiAJBJ1ichJapqjHHnAMSl5JlWJGLvom3ITetqFAjiXEgQZPSUTibbfL8Hqt3Ms87Cy4WF/FErLc2EfnXcrazx3WMlwkDcnPi7u8xhFfQK36bxETkyn9gryF4HbdFwi37oPJRj+zO5UqYK+7hOCWVsWBEp7YRauqAUmFckiUS8wCoGJJUGgdAyOQB7/vAhlCC56AkVdM4JAqLahvNLy8IJJ6fQpYnVngbE4MN73OCdUx+mxEKuTNaeEmbuySJaAvQDKb5LH6uGpMwBPBxcfEp4sk1GIThMFftfUbeIpgvIaouXYGrzVCR+tk1GIhQMo8F8MNomnCJ1ZUJZDM3CYlpTqdNp5WCWWIvSYAKtdebuaMDh7nMQxgKY06HZvoQ+r5yoA69qyeplQuhYFOw12NXnaljY5aVC/8OaxGxMQXs+1LqXabx6pgdKIV2zDqLDneBtuGq3FoDl7PgbhbOzkHsuTzPLWgxAX1rPy9Ht3Nw/BvYEPAP3NnzWiR9JW1hnH4ZEDuTnWYGjUVO++ITyaYVS8RY3zdVdgm0SCbS7v0PKV2DryZHQj3jhdcAltEvah4XwjKYAJYouza+Ji2zHvwtMmYR9Yrv2pA1ODuAC+Kt1LgmiEa/ASwfOrGDkgTcK+5tITTY4PG0kT5gxXwCbhXFRGddMI+HbXYwCeBzvYJiFrnmgbNR0zzh3V9zBLzyQRSZNwrrl1rhmrBfVMi+QItElYu6bnHVGYxwTuUdokrC8WqXsyhz5xjCW0SViC7298tMxWyLF2Sa7jF2cbr49pxPRJANwxfFNO4roDWmeNHrpW3VPUiod3C0l75j+KS7v10v/vc/WjK2kINfHXLFAk8abHrwUqxaLpLMC3oMUwVIFhI3B1Pyj49KCxAt+DluL/CKv6r+DVHZvlBTNweXgbSvjNAkayAFHvF7DdRabLEPvRbpHrH0oBVHMubRNU0f8k22aRbVfnm72gV9eNv5T/ASu6DkyldjC+AAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$\\frac{\\log{\\left (- \\frac{p_{0}}{K - p_{0}} \\right )}}{K}$$"
+ ],
+ "text/plain": [
+ " ⎛ -p₀ ⎞\n",
+ "log⎜──────⎟\n",
+ " ⎝K - p₀⎠\n",
+ "───────────\n",
+ " K "
+ ]
+ },
+ "execution_count": 56,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "value_of_C1 = solutions[0]"
+ ]
+ },
+ {
+ "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": 57,
+ "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": 57,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "particular = general.subs(C1, value_of_C1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The result is complicated, but SymPy provides a method that tries to simplify it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIcAAAAyCAMAAABBPjj+AAAAM1BMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxgEwMAAAAEHRSTlMAdqvNMlS7IkSJZhCZ3e9AbzgrSwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAp9JREFUWAntmOu2oyAMhRPxBoiT93/aIcG7WNSia9as8qNHLe5sQ4L9DsCzQ5XP6p9Ut3Ry4sPTKpc7ABZEqmBVPkhl2xSmwuJP51SXmnrZKKlwS1U3yXtNSy24FlSVnHp1QktabjEnpBuLtUymtOWrPrR/QgCrzykXyPplfzVKer7i0i9DTtKzeykLLMCe851WHGdweZhuPINW102JWNjpCh9Yjdj5yE3o1w7hrPGVzIcTLg+kuQ01FM5XivZ1gBqHaK1jD/6kDeVRFpi7XTQhQkdjkTYVSBcbAuPjVtLRtvdf2/ydukyPIsPpHnoX/HKIJ03Wt6c/4fUpeoNo1iu11MhxTJLpmqY8txK67q1c4kwASVZyRDvUaEkasZ1Daa4VS10pe4Tz2YJhhzkUyfCFHhLhJAssqLh3TG9LueLYpgvlKo55ygPDDS9OnJ6ZF6r020TIR8/BkavHct8+M2yniGSHREcUXi/+BRK2ilAfstkCdsbwAr04pDwk3twvL4afQkl5yBn6Qgn7x/Tlewd22tF4P9Xzfv+eBY5UOVJPtsW7T/OL9svA2QzQvzHO2v3N+y8ykATPd57yJuZfY+gTj3Ib88ff4WcY+thHoPymuY35xwxdXXmrjpR/G/OPGfqKj4ny4S7mHzP0FR8epEL2bmP+hqEXFbDx8ZmuIVA+pDA/ruKpeMPQxz4+0/VA+ZDC/KiKD7ph6IUNWOcjQdcD5UMC86MqHHTD0MGHVjxcL38GcL1O11ZuHz4GNo6qcNAdQwcn/LnOBy8h4/y3dB1R8ap7hmYHYWx95KHriIoPt2fo0cU+H3noOqLiQ+4Z+thHHrqOqMQYeraxrY88dB1VWQSNHG7qIw9d31Cx6/925aHrr1Xy0PXXKnnoOqryF8E5IShY2jYxAAAAAElFTkSuQmCC\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": 58,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "particular = simplify(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 `p_0`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAANBAMAAAC5okgUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARIm7IjJ2qxDdVM1m75kH/PNjAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAhElEQVQIHWNgEDIJS29gAAOFygVMBmxqCgwMLAu2M/B8OMSwnIGBg+EXA9OPiQz8QEWMPxiYb3xl4F3AwMA0gaH/6RcGzgMMDNwPGM62/mDgTGBg4Ddgvcr6hYEXyJQXy3Pg+MrAL8DAoMkABBAT9oGYeWBzf4GYbEoPGBhW/k4AsYEAAKNUIJboVPEKAAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$p_{0}$$"
+ ],
+ "text/plain": [
+ "p₀"
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "particular.subs(t, 0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This solution is called the [logistic function](https://en.wikipedia.org/wiki/Population_growth#Logistic_equation).\n",
+ "\n",
+ "In some places you'll see it 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": 60,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEEAAAAuBAMAAACFe2n5AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdqvNMlS7IkSJZhCZ3e+HNtqwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABQklEQVQ4EWNgYBD6b8TAoP/ZgQE3+AyUCivALc/A8ZOBgSsAjwIGzh8M3NPxKWBg/sDgiVcBA78B1wF0FRzTSgS14YL9E+QvwDlQBifTVYZpDJKSEO58QZ6v6CpKmRUY1nNNYFUAS9gvYAf5Fwg2G4OACZC1gT+AYf7eBobfYPFvDAz5DmAWEtG/gSFvvwPDU5AQx0cGhn4FJEkwcy4D9x//AoZbIA7nFwYGXohpSMpsGLhe+29guAgS4v3AwMAIDFZU8I3BzwFoxkOg6B77TwIMsv/TURVw/BA8zgB0xw9UYSQeJyiEeGF+QZKAM5kPAJmMB6DhARdGYuwHx7XkHCQhVCbrfUNUgcHA+08AAEN8FNAyBFAzKzabUDMrNhWomRWbCtTMik0FA3JmxaqAATmzYleBnFmxq0DKrNgVDO7MCgD7N33HRdhLoQAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$\\frac{K - p_{0}}{p_{0}}$$"
+ ],
+ "text/plain": [
+ "K - p₀\n",
+ "──────\n",
+ " p₀ "
+ ]
+ },
+ "execution_count": 60,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A = (K - p_0) / p_0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIQAAAA5BAMAAAAFPp4/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdqvNMlS7IkSJZhCZ3e+HNtqwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACg0lEQVRIDe1Wv2sTURz/9MzlLr3cJSm4KNIMgujSYEAHCzlwchBSBXXSTAp28BBctTgI4pBCB0GRXjctBaODIBa8CoJihixOivQPEBr7S0Uhvsv1vfuVvEdyS8F+h3vfz4/3Iffu+F4Abo11jgMTGybXJBA3iH7BEpi4svobGK1yLSIx8wvaQ5GJr+9r4wzfIVRzpVFHaOIb6rPjLb5DqM4XsltCE99QsRX3sSapbeCGmSQA6g+gXkwUkdkE9D+JIvQ2MEJe0OFrubKex6HOteET9nb+xyfQSVy7+fCUPj/O7MP3oGeBe9tVVKYj2qUIxs0oQbFkkQ/QKpQjlKBrlgihWgihAHA/HVINUwHKa7VigFpaKGS+2gEi2B4mwMiPzAQ5rz8ZoKacW2gFcKh1hbcPrvvc0uKY2UUHgNeFvNZsNt9DMqGVumz8orgRV+6f8JWnm6mW9ugxcA7aKXo3OiA7tm8KdmqNoHm7blJSeVFU2unGK/KcIB1b3KFfAsqKRT3hVS0SPAmdLOpVUtOQ8vKqAQM4DWOGiNG63IgwqRohtiD/ZLxhSs5t6CbuImch6teOTlCKPkStBaTI/u8s4o51ttGNeIZ0lZ4FU4Hn0Qh8AZ78teQ1h7rOFz4hB6OBD9BWCpT113jEfl/0uo9k6R5nKap4OB6Rjho/E8J9qLJNmh4Vj1DtsC27vnOvy2GeoXgELjIx3BwMQ4a8iLly+Vu5TP6oAgONwra7o8evcOlBandEjMderUHuwfW+W5u0vT30BffQUFdOBJs5guA3/XU2c/pbBIo/cwRGjsxmDscjkNjMEfg4Mps5HI9AYjNH4OPIbOZwPAKJzhyBjSOzmdPL8w/W6gI+O3HorgAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$\\frac{K}{1 + \\frac{\\left(K - p_{0}\\right) e^{- r t}}{p_{0}}}$$"
+ ],
+ "text/plain": [
+ " K \n",
+ "──────────────────\n",
+ " -r⋅t\n",
+ " (K - p₀)⋅ℯ \n",
+ "1 + ──────────────\n",
+ " p₀ "
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "logistic = K / (1 + A * exp(-r*t))"
+ ]
+ },
+ {
+ "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": 62,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXZmMs1UEN0i77urRJlR0qN3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAUUlEQVQIHWNgYFQWYWBgCGOomMDAvICBMYCB+wAD23cG/gMMvN8Y6h8w8H5imC/AwAIkHzCwfISKAGXZvjFwb2Bg/g7VxdDGUOXAwFCodIQBAG3HFgUteuAKAAAAAElFTkSuQmCC\n",
+ "text/latex": [
+ "$$0$$"
+ ],
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 62,
+ "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 are equivalent is a surprisingly hard problem; in fact, there is no algorithm that can solve it in general."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Exercises\n",
+ "\n",
+ "**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": 75,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "alpha, beta = symbols(\"alpha beta\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAANcAAAArBAMAAAAZAwDkAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMrvvmVREEIndzSJ2Zqtw62vAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEG0lEQVRYCb1XS4hURxQ90z3d782ntbe6scGAi+AHF8GQiI0RHaJoR3ARIk6LgeBqmhiNCWI/wgTxB4PxE1CkBXExktBINlmoTxAVcTESF+IHZikqoRWiLhLGc29Vdb/32uBm+l2m6ta998w99XtVXYBI38Ky6nSquZV0eJRlrJYi2cEUuXA+NbKhkWv/pEa2o5l5nRaZtxL9jbTI+l9jIEiLLFtCvdobMn/1ukTieoDRhGu2zMN4mkhVr+Bprplwzo55GgsSiTNh4aw/O8mTWU7iajXu855fu3Ij6rosxnvHOjT1f7DLDzvZRnkOGuRXHadtfXe9Ca+kxrOuYNvhbVgPfGvMbthwZX+RMQXhDFsGOScxocCT0QoG6R1o4sd27q7GnJ954lyk+52wu8iXGFOQX2ZLkKfhNaii4r3aA9yjh9vTD6ORWLv+TRWFMl1R2FYL4aTlJtgWkOYSZK4FHLEAp8THTgCfcxqWOW+Xli+Fg4rDHNkwBzXNmIDyQb6oSDmidtERFX+Cy8mCX1kuRCOxtlxIf4onCouQ7ZCOCGj+ls01RcoRNVilpyOFz46XMVxGfvXLDcB4J2Bb/p210rr38RrgOvsdgzmy7X88OOVAq2ZmFPn10g9C6PrZTKLmhkBmykwxHmjg0KTIeWkPncSu5m42/mVZzKKzbmCAIwv3jn/CmIJEK1LmtNAQqyNXi1yMCswt8GXHb1qci0z5Jklf0D7BopeFgzmyALjNmIKoDZJ7wGwb9ZhKOpCtkjAAsIAlJptqTB/YAX3EUAfG8f8yOfm7wENgjEpHLTYEKYvb18KMkxZtWdRslduWpZtsOb+HFTVWE4xKihjMjozbD38xpiBqRXqvqEkWkyW0ZBrH4AE7NcQ+U6TP3humkN8PmWlWMo0RWHvN5JT9m0VB1IrMt1BDXvoYkU/Zlg1yCF/AbpBI9D+SLaOdDVnJBonB7MgGuVyyQRRErUi/kSsmN4iOVnboRi8ERgQZlY3A/VbRzt44IzGYJWNf51UZq0ulQmT/9D5WgZqu4mj59UwAlx6zcc65nfaPPsZIaNZfJzkGs2Tb7986IP8gm8QIl2No8RQ/avYzIn5JDDmuKB5J3y0/iXugaYJtmCULjBsK0rZD/qBW38Ky6m2D5DeHJ5UfitEtuenfxKkHMXUb9r2BBqosSNsOaQ9iPiuE/pi5VTKmz8YwGaL1wKKGmh8aZxIWqtuBIkivoQbGanpGP1qvpr08bTKDiNQF3q8i9vJMwOQzoziQGgZpxyDfspwnTvRnQcGkdL5ubS7798L4jwb50KbgMSvnSQoizwpzWaRAps+KzrHZU0bzrNDLoqc8mtw8K/Sy6D1ZtiTHGP/SkLo+K/Sy6D2deVboZdF7MvOs0Mui92TmWaGXRc/J3gLLVA3e3HNw5QAAAABJRU5ErkJggg==\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": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "eq = Eq(diff(f(t),t), alpha * f(t) + beta * f(t) ** 2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOIAAAA5BAMAAADZx+oIAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAElUlEQVRYCbVXXYgbVRT+Jr+TNJukBRdBaANt198tsaJCFTv0QXBBNoj2RcFpVwpaaAdtQVHovPggVhqlKChCsLIPq9ZFC/VJA9KCFLpB7JMv61ZhkSWkoNIX0XPu/E8mmzs7kwNz7znnnvN9mcn9O0AqkotC6UY50/LpQPnGTFYL4L0esNI18hpyN6H86kfdQEbz2+nqV4F5E/jKRm1RrwygcD8heQH4kKB/tOF71BfbwO8ToVs4RrBtZG9Rt91mIMbcvWtdHJgEY8nMN/VcGyV+LyBf55b1qgGcZiNtmUV53VR7qOmMXDnuMtY04D32pS2XoX4DtYWSTpOlg1Id+X7/+/6fuEZM19NmY7y/ULmFSg8Z+pIFMCMJ6XhY0fA2G+nIwn6TgKYf2oN1TA/qShv4GMpLfsbdxL+YDhuhPGUqlxRDPY8ncWipOWPgfXrBZxbo/bx3vPI4cE9qjLT2fs7W7zKUB2zIRx1oj5E9q447aZ+htbevgOcvHBD/GsFN2ZCVg3ezxv8jSbEjuhSabYR4/Aj+9qDUILZmjezwAhJqu3TgpIF/fDCnfLqrPuhqSZVah95R7KTZpFCS+ZkWyicreALKHsmMyLA59ha1yLGw89hSJ7OA7H1L4QFZe8d+DYo1v56VzUkWd/iMgapGy1fDzmRIktnK7TuBzyj4DO0cTcmkRGHFAaWfp2cfbf/LiaAkkwttOrLpEReHdcmkJGHl+z9oINuAOvvvbuBoEijZ3FqTNsYOLY0BZVwUWSf6LGuyCHHj5rs0TQ0gs0qZb8TN3ko8TVFsM4lVJ2WFnonLy8TAjLvoGWas/ZeyEMkNevirnoMCvEMGYP2Pfwh9As23hMkz5wTecmbOBFh8kMptMgoNYK9Ck3bGNzKkVswhFzlyUc5ulNM+3FReFGobeJqPgo2oSMd3xVECvS5dydG9lqXQ45Z3ORK+B46W36KG4lRyrzDA6WqHO97JSaJ38rnPxWCmKbpQczVGJSeuep9aB9SUJoAiT6uscUeXR+frIibUxKnkaDMFLlg3B/tE/iUEJ8wvQaUMydCeG6uSe5N+b27gw59jvaz5PI6a64jyE7jseOxeqpJ7zQpWDr/IX+ijEES0SXM636KhHF2MAyJVydmMwNfMOBsAGGUQ47saDZaXQxFSlVyQ8bEQRLR59tBFqmTss8UJ4bpKqpILMp7jFx0rzemjlzhoqueFirpKqpILMq50PYzRmg66DJNUW16MqKukKrkg47zpYYzWmnyskJQawE5xOdjw11WbVXJ0Bn3S71tnkJg54kQcTWWNqF3gC1arDW4t8dVVYyq5LbwjVdd4jnmmfF/VV1eNqeSCjCsaI42RKq1EMXPyvplDVbJ99ACnogDcSi7IKDVX6bD+yWTQ7LIHLV9XuYwH65Qu/h4PJlo7u/jIETGi+vYc+brKYdz7w1pHcs/R3R/ynavFUBxGK+WmTKbuBm16I3GjQsp2v634PpPfH9SbrnnN1baqlFsSmbwcbckbjrbVvtSNl6msxosfjl4cdm3ueXXz4bGjud7YkFBA0Qw5YpqZesyEdML/B2U6Y42RTPqwAAAAAElFTkSuQmCC\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": 67,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "soln = dsolve(eq)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKEAAAA5BAMAAACsSlarAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXaZRCLdEO9Uu81mqzIdlvb2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEXElEQVRYCe1XW4gbVRj+Mslkms1mdnZBULA47iJrsbbZYr3UteZBRMTLSKGICrvFFUFFZlnUeimNiEitD3moPinMo4iFxdaijErsi1JTCC1iVVrSolC8YERLEa//fy6TmWzIZoIvYn/I+S/n+79zmTM5/wADidkL1eoVHDTmAKP7Zwwvgd+X8NI5JQ/mO7DejGd9hGxygHjnqvZpYK4CHFHAJmmrDYv1kHIK2EGpZ1R6QLowD7yr/HRqYpzw8zDOk3pKpQaAee2BFtYrP5XKV0quY84jTywkJZ/bgH7FGvAGO2llC0YPVnIBxhzOtC+OGMc84Pa0bIzfg9wLyDWRJ0arjryPUhjuDT/AWer8fhjGc7DPww6QDYAMmJGEbFxtebiTnYEkM3kN4xYnN+MgFtu+NQ88BuuiOOMm4v94IDYCmQvY6T2N3EO4B9sa7kwND9MEj0/Q/Dpz/HEDIMYdhJX2bKQ8jZ01a6uCr9NpHUaOLOvwavpmH9llBycOrxe7RvARlWJvvIGtQLqFutSrty/TGp/38WcHmUvmerJnqQPob1k/E+NvAKlIXo2smDEds/ubfxBjVbzJRn/gwL030blot3AVrM0D5/QHZi5tYMaFMdvoj7vQe2EH/pc78Pe/LO3/3C5+03PG6v810WcnPO242tDabmorrunOw5HjzhXxGAqVhKucFbdt0e8F+xy438Uz1VhfsYWe/5yZugKZDbmwTbGkyLQdmL9SPRrISInVbmCXdLtauoWFrLOomqNrmsuvFVJqiQrFdmWPuBVfo0Kq1+5iSoJGW7IkypS76DKXO3TnAxt9qnnox8KM2x7dCqPOXkwKL5EzJwMPADQosKYm/ahdwLEMtgOPyMgXrMQc36eCtCmDBVfqXWt5hXlJQbGTHJ5T02CbhYqnz27h6ctr9jRPQjKeA3IBe8TsCkUbzYxcb5G4yL3I+lNuYkJzvq3M9dcOCj4HLn6+Dt8Lw7pdpUpyWSKTjAb10Gjfzh4Ss7tRYkRrTUx5VHP+5OM7YAuFHMEo52g0n+CSUkiSMScermGNX+9x71sSI9pbPdMpVqzLLDxJu1PHIiHE0Rih7qzrYJSGYEky2n9xjN4JY5mND7mRYu3BUsucPZy9RNR3a2emKR4x2sdayFYkMsnIJ5foaOFtNh6kMxIKaZVemfyEQyRGTeoYIweK3GTC8NDeMGyyLZ6MJRjvIq/KsQPcSBkTIGkHKnbmF+bmVbO8LlXXquUcHfqmEAT7FYiU/DKQ/h2dMFmm9KyyiiZXbdO5EoXqvR4bX3Ejhb8MXGUXRKdytDJ83esqQ6xaPuu3YS+I6JWqjxQ9qqVeRB2EtqI5io8ysX25HybG5YB363EJPdWo65z+WjNmT/w+q94ZOjxK1lS0lUJrRplSdEl3GLNOCiYN1f9J0t/Ny+wUxnZVw4bWRzmTjqOWL7UxtH68K/PZLj+1q1/2KLFQjszhjPtWpO1bEUkXuC4dfFD0PxaDJfly5SzIAAAAAElFTkSuQmCC\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": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gen_soln = soln.rhs"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH4AAAA0BAMAAAC+zpGxAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXaZRCLdEO9Uu81mqzIdlvb2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC7UlEQVRIDe2WTWgTQRTH/5tkM7bNVyOCgsXYIkUUmoAFlag5SBEPsl5EULBCSlA8bCloLAoVlOLHoRc95yJ4qBAEe8klFkSoOYg92IsSC94EKwoiKvpmNtOdSe1mE8FTH2Tf529mdmZ3X4AWsrCY2NWixCt9JoXJKa8C75z5FYiUvGu8suEEEEt5VXjnhmyA0Q8wdtJQbctFh3gD5PHaaBvHZ4G8n0awhJdH2+fPE3INKGDTDI6l2+cPEkL3XUDcwiexDz7GMPr38arx/mGEqxi3ON+TYzsYj7YWM4+idRWhMZwE+jKDRBRgZueD21qzvILOvDs9iOIMOyyBgjT86CM2guUElub3yhte/jLjB2zU3KGH5YaNX20gaimjMze+o3H0asan/ZP4KYCOPuCT0MsOAc9W6tgDNqwnfHrG9hoyKQSyNZ/ARtnGDnS8A7//TTqe9z+AkceZAH08OxXzCdgjP7BZE7OYVb34XA5Y0EO6d7/h7mbvuDWpZ/kHCMtNMc2NOjcXqeM4jz/Vkgh8I/+KiP2l93ZNU2Mui+xZ4AEZkbTwVi/hkjCjttp7u1JO/nofHz0pHAq9JSPsrEaE+CWe4NfYVuoGbu+VPCKcL/IKpBC6ReqUcNwL/+vBqgjbau/V+Z4clYc+ZOdojRhwUbDkgEWzwqBl2Wrv1XkjTUyA9e63SM8q/IhlJnAJbIvgld6r85EyMTRHgOsLLs9uY6IOYzFpC17pvTrfNUoMNZnQCumbdLsVIfXovf4XcjRavxSjUpm7W6m84r7YvxjnTpAzRZp4KXFRIrzY0AEZ5VqfX/AJIMrrlfU7R6dy0tb50CjFy8Bpi7Syf/zoUhRaKzov9m8WsTwv3OxW035O8CHXyiovnu4gzRP6mOy1eeGIUj1QqyqeYko+uPQjC/TUxfE5+ebnV6FcU/JO5DIpOn5Hmt8fGde0819Yhvj74/7HeCjDfrV4f+n4G9L8/ZDxdXW3vsfN3691OZl4TsYf5urLYMY1xW0AAAAASUVORK5CYII=\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": 69,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "part_soln = gen_soln.subs(t, 0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG8AAAA8BAMAAACa8fkKAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNiRDvuyJ2RN1UmWaBK2/dAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADf0lEQVRIDe1WTUhUURT+Zpw3vhnnL7ctnIqgiECyjS5qFhoYWY8Qwlo49gMtLGSiRVAwLRIqxYdJNQtpKGgXFRQVRAwEZW0cyAgKbBZBFORPaJlkds677737xnlTKriqM3rv933nfG+u917OE3CJMRfNlvbaqAQEakskhxAsn72pOepKYX+pJBSlQ2YCgwVJTFRRKomMN25W0NSEI5KYSC2VRKYmbdeG0i5GrLXzxWCLpD6EdMksVOO+B+qMVQD03LgCfBnrj0mJUIXLw0gO18qqIfhy+DzpuSMlQpFkEbWI3/E8HYG82hZXJ5TdTVYeUGcZV2+VioH6YlLQEU7Aq4eSldo+qeIwY+WgQ2E4Lrmiwx+jH2/eD7+Usc7AKYfC8J3kwTwagb70aq0bVY6FXDNKFhofSGPg/EAOeJp5jWLjcJprFhrnWBQRMKYRGqPwa6ZIU02OMRlbMzuB6y2f6NCAHzyIEMbHRIo3p73A+RQ8D1GpB6fxhAuVXyyKuMBT+Ct9V9FxIKpzIoWqBDyT3jvYxFR1GJm7RTTBaspY8lQ4KYyenyxG58uFkc3zmMJwFviuTiqdTIWRUfmImkbepDl1YCDNpa5LzYxyyo72BMMU/Hl4ZkNZJrQNjl0VCuDTnIdBV6LAGdrVDlQkgg2r0kwxZYzWEGcwVHSK5jlWz29Ab+NbYPv8N2PpxXe3i40JvODJjttZG9IR55SeR8xPCLGZbikFG9WX9V2R0U9rDIGHcc2GwHPCH5nvMMSqrFdPEGIjdZ5dkdux1Wj9IByixKgDDsSA04yHjeQbRBqyxNhIF2rwXD/6cFJhCmwxRnNQGjMt5AXERexE8Bi8dXWH6raxcQQb8QxJ+lA4byVzMyrjDGbgmeaZv6IN6KDPZjWJu6yFHO2MuRmiFTWgdUIjhY234EuoM577ltHZziwXzYpxWXvH9JEcMTZezexCqH5Qw4Roz35OuMQlp8ZGnX6pacHanMsE3YL6kwzLWJUjzTyO4zJdhCK1Dpqm888Sf7/eFsu/Pk/ZNa6gO+0qk8h3oXwo3IPcQ33orgu1slA+e7Z8Ctj/p+SK5sp1s7/oEyu6qP8P/zd3oHkwu6w//GJWOarklmG9B5wJaEs3hqmRv/It3Qd/F724HP8yLvoR/J7fk1t0uSyMFqxXpdQWhcJxRPZ4FlW6oKhxrBBuXqA56G/E7Q2ubQsLVAAAAABJRU5ErkJggg==\n",
+ "text/latex": [
+ "$$\\frac{\\log{\\left (\\frac{\\beta p_{0}}{\\alpha + \\beta p_{0}} \\right )}}{\\alpha}$$"
+ ],
+ "text/plain": [
+ " ⎛ β⋅p₀ ⎞\n",
+ "log⎜────────⎟\n",
+ " ⎝α + β⋅p₀⎠\n",
+ "─────────────\n",
+ " α "
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "solves = solve(Eq(part_soln, p_0), C1)\n",
+ "c1Val = solves[0]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAyBAMAAABfdX/dAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXaZRCLdEO9Uu81mqzIdlvb2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADVUlEQVRIDe2WTWgTQRzF324+tmk+Nk2hai/ZNMdaiUI9aClRRHpqIwVBEKlSEVFwS1G8aEQppSiyp96EgAgexRZBgpIWxEKDhh7Ui7B4kF6kFRtCFaszO9nNZJsEswaK4ByyM/P/vZfJ7JB5gIPm1x2IGkjSDWpOSrNORLU1kQ5g9NJg7WLzs95kUAnjefPCOopDCMwnUaxTbX56Bu47CN1qXlhHUUSoBLFwtU654XQkngTc3Wd63jNsoqcf85hYV11kC5tvJ5PSlKQJwYvoRixGnM/jBEbzyn4ttKI3b4ezwENRPeUv4G0g7Cvguib9zTFxlYDDAlRZQ/RaEiV8WNyrOliWKWnLALt3ASMqHqd1zOCnWXH2TJM9j2pAF6RvaylcxldnPqZKzpH1kcEcAtNrKs7R/RTNooOnq4BANAR8x6pO1ncbvZD6HfhYko58zhWBe4OcOrJ/GxAH8lbNeUcYI1ovfb+taf4E8RET5Py1pqXJKwZina1xg+/K0xY5/bfZmR341dq2Mz/iH/rWl87WevpVbZ20vm2+HsqDonZD58dW3zdmdcuduigPvoE7w49pX4iF4Tk4p9vma6E2BJ4cti9kHCsC/Mb/F+BTypqaqN2PXDxB+z+oK4PlY5BTjLX8aqF2O3qRDZWFVq1Nw1ACq+Ux72dDjdxjyYzO8OjyBT4KSZF4iqyM3Jt9Evsey89Ajzz61KeWLVjuqfZTJjqnUIlCOJ7yhP1JKSrhgMBIy89Aw+80ISNGwrTGck+1Hyn0ohKFpBlM6p6BRdcefNln86OoR3uBwPoCHpBaOfcAUtZoOuUVklu4KBS81/OaTptNyGaf3c1mC3SsEFTCJoTSOGQVMHOPydKnWweWuCgkG0qesM4LQ90ltE9vgbwymLmHp+kefeSikBzmq0bf3D+Gkls/PViENweYucegyh9+wDPFRSEv8VN4oHKeGUpu/aWbJXgJZOYeHm/P4XOSi0LiE0ymeKDix1A5E7ofKqKN+IHlnip6eCFGkmQlCiGez1UBFT+GjhyNp6QtyEkbVR6y7SKbUj8KmfvH0C4qZO+X9uyNQQ2jkKQyEUPn6CBunD+7Fx0rxuQfRSEDlTapQOxIGLptH/RMkR36kyjE0NkfClXQ9hucUiMTPAsb9AAAAABJRU5ErkJggg==\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": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "part = gen_soln.subs(C1, c1Val)\n",
+ "part.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 = r f(t) (1 - f(t)/K)\n",
+ "\n",
+ "Find the general solution and also the particular solution where `f(0) = p_0`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Wolfram Alpha Solution\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Found solution at \n",
+ "\n",
+ "[wolfram alpha](https://www.wolframalpha.com/input/?i=df(t)+%2F+dt+%3D+alpha+f(t)+%2B+beta+f(t)%5E2)\n",
+ "\n",
+ "f(t) = -(α e^(α c_1 + α t))/(β e^(α c_1 + α t) - 1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap10mine.ipynb b/code/chap10mine.ipynb
new file mode 100644
index 00000000..b4918c33
--- /dev/null
+++ b/code/chap10mine.ipynb
@@ -0,0 +1,496 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 10\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": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *\n",
+ "\n",
+ "from pandas import read_html"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Under the hood\n",
+ "\n",
+ "To get a `DataFrame` and a `Series`, I'll read the world population data and select a column.\n",
+ "\n",
+ "`DataFrame` and `Series` contain a variable called `shape` that indicates the number of rows and columns."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "table2 = tables[2]\n",
+ "table2.columns = ['census', 'prb', 'un', 'maddison', \n",
+ " 'hyde', 'tanton', 'biraben', 'mj', \n",
+ " 'thomlinson', 'durand', 'clark']\n",
+ "table2.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "census = table2.census / 1e9\n",
+ "census.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "un.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A `DataFrame` contains `index`, which labels the rows. It is an `Int64Index`, which is similar to a NumPy array."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "table2.index"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And `columns`, which labels the columns."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "table2.columns"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And `values`, which is an array of values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [],
+ "source": [
+ "table2.values"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A `Series` does not have `columns`, but it does have `name`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "census.name"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It contains `values`, which is an array."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "census.values"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And it contains `index`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "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. The result indicates what type the object is, and the module where that type is defined.\n",
+ "\n",
+ "`DataFrame`, `Int64Index`, `Index`, and `Series` are defined by Pandas.\n",
+ "\n",
+ "`ndarray` is defined by NumPy."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(table2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(table2.index)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(table2.columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(table2.values)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(census)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "type(census.index)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "type(census.values)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Optional exercise\n",
+ "\n",
+ "The following exercise provides a chance to practice what you have learned so far, and maybe develop a different growth model. If you feel comfortable with what we have done so far, you might want to give it a try.\n",
+ "\n",
+ "**Optional 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 `tables[1]`, which is the second table on the page."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "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": 19,
+ "metadata": {},
+ "outputs": [],
+ "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": 20,
+ "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": 21,
+ "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": 22,
+ "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": 23,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [],
+ "source": [
+ "plot_prehistory(table1)\n",
+ "decorate(xlabel='Year', \n",
+ " ylabel='World population (millions)',\n",
+ " title='Prehistoric population estimates')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can use `xlim` to zoom in on everything after Year 0."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_prehistory(table1)\n",
+ "decorate(xlim=[0, 2000], xlabel='Year', \n",
+ " ylabel='World population (millions)',\n",
+ " title='Prehistoric 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 1 to 1940.\n",
+ "\n",
+ "How well does your best model predict actual population growth from 1950 to the present?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap12mine.ipynb b/code/chap12mine.ipynb
new file mode 100644
index 00000000..0edafc26
--- /dev/null
+++ b/code/chap12mine.ipynb
@@ -0,0 +1,1653 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 12\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": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code\n",
+ "\n",
+ "Here's the code from the previous notebook that we'll need."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "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": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the SIR model.\n",
+ " \n",
+ " state: State with variables S, I, R\n",
+ " t: time step\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": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "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: TimeFrame\n",
+ " \"\"\"\n",
+ " frame = TimeFrame(columns=system.init.index)\n",
+ " frame.row[system.t0] = system.init\n",
+ " \n",
+ " for t in linrange(system.t0, system.t_end):\n",
+ " frame.row[t+1] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "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": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def calc_total_infected(results):\n",
+ " \"\"\"Fraction of population infected during the simulation.\n",
+ " \n",
+ " results: DataFrame with columns S, I, R\n",
+ " \n",
+ " returns: fraction of population\n",
+ " \"\"\"\n",
+ " return get_first_value(results.S) - get_last_value(results.S)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's an example.|"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.333 0.25 0.46716293183605073\n"
+ ]
+ }
+ ],
+ "source": [
+ "beta = 0.333\n",
+ "gamma = 0.25\n",
+ "system = make_system(beta, gamma)\n",
+ "\n",
+ "results = run_simulation(system, update_func)\n",
+ "print(beta, gamma, calc_total_infected(results))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Write functions that take a `TimeFrame` object as a parameter 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",
+ "Note: Not all of these functions require the `System` object, but when you write a set of related functons, it is often convenient if they all take the same parameters.\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": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "SyntaxError",
+ "evalue": "unexpected EOF while parsing (, line 1)",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m def findPeakSickness(time_frame):\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n"
+ ]
+ }
+ ],
+ "source": [
+ "def findPeakSickness(time_frame): "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "SyntaxError",
+ "evalue": "unexpected EOF while parsing (, line 1)",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m def findPeakDay(time_frame):\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n"
+ ]
+ }
+ ],
+ "source": [
+ "def findPeakDay(time_frame):"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "SyntaxError",
+ "evalue": "unexpected EOF while parsing (, line 1)",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m def findPercentSick(time_frame):\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n"
+ ]
+ }
+ ],
+ "source": [
+ "def findPercentSick(time_frame):"
+ ]
+ },
+ {
+ "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": 16,
+ "metadata": {},
+ "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": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " S 0.988889\n",
+ "I 0.011111\n",
+ "R 0.000000\n",
+ "dtyp... \n",
+ " \n",
+ " \n",
+ " t0 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 98 \n",
+ " \n",
+ " \n",
+ " beta \n",
+ " 0.333333 \n",
+ " \n",
+ " \n",
+ " gamma \n",
+ " 0.25 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init S 0.988889\n",
+ "I 0.011111\n",
+ "R 0.000000\n",
+ "dtyp...\n",
+ "t0 0\n",
+ "t_end 98\n",
+ "beta 0.333333\n",
+ "gamma 0.25\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 17,
+ "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)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And run the model without immunization."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.468320811028781"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results = run_simulation(system, update_func)\n",
+ "calc_total_infected(results)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now with 10% immunization."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.30650802853979753"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system2 = make_system(beta, gamma)\n",
+ "add_immunization(system2, 0.1)\n",
+ "results2 = run_simulation(system2, update_func)\n",
+ "calc_total_infected(results2)"
+ ]
+ },
+ {
+ "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": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap05-fig02.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(results.S, '-', label='No immunization')\n",
+ "plot(results2.S, '--', label='10% immunization')\n",
+ "\n",
+ "decorate(xlabel='Time (days)',\n",
+ " ylabel='Fraction susceptible')\n",
+ "\n",
+ "savefig('figs/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": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.0 0.468320811028781\n",
+ "0.1 0.30650802853979753\n",
+ "0.2 0.16136545700638427\n",
+ "0.30000000000000004 0.0728155898425179\n",
+ "0.4 0.03552021675299155\n",
+ "0.5 0.019688715782459176\n",
+ "0.6000000000000001 0.011622057998337987\n",
+ "0.7000000000000001 0.006838737800619332\n",
+ "0.8 0.003696496253713877\n",
+ "0.9 0.0014815326722661948\n",
+ "1.0 -0.00016121210941239666\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",
+ " results = run_simulation(system, update_func)\n",
+ " print(fraction, calc_total_infected(results))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This function does the same thing and stores the results in a `Sweep` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "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",
+ " \n",
+ " for fraction in immunize_array:\n",
+ " system = make_system(beta, gamma)\n",
+ " add_immunization(system, fraction)\n",
+ " results = run_simulation(system, update_func)\n",
+ " sweep[fraction] = calc_total_infected(results)\n",
+ " \n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we run it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.00 \n",
+ " 0.468321 \n",
+ " \n",
+ " \n",
+ " 0.05 \n",
+ " 0.387288 \n",
+ " \n",
+ " \n",
+ " 0.10 \n",
+ " 0.306508 \n",
+ " \n",
+ " \n",
+ " 0.15 \n",
+ " 0.229234 \n",
+ " \n",
+ " \n",
+ " 0.20 \n",
+ " 0.161365 \n",
+ " \n",
+ " \n",
+ " 0.25 \n",
+ " 0.108791 \n",
+ " \n",
+ " \n",
+ " 0.30 \n",
+ " 0.072816 \n",
+ " \n",
+ " \n",
+ " 0.35 \n",
+ " 0.049938 \n",
+ " \n",
+ " \n",
+ " 0.40 \n",
+ " 0.035520 \n",
+ " \n",
+ " \n",
+ " 0.45 \n",
+ " 0.026121 \n",
+ " \n",
+ " \n",
+ " 0.50 \n",
+ " 0.019689 \n",
+ " \n",
+ " \n",
+ " 0.55 \n",
+ " 0.015072 \n",
+ " \n",
+ " \n",
+ " 0.60 \n",
+ " 0.011622 \n",
+ " \n",
+ " \n",
+ " 0.65 \n",
+ " 0.008956 \n",
+ " \n",
+ " \n",
+ " 0.70 \n",
+ " 0.006839 \n",
+ " \n",
+ " \n",
+ " 0.75 \n",
+ " 0.005119 \n",
+ " \n",
+ " \n",
+ " 0.80 \n",
+ " 0.003696 \n",
+ " \n",
+ " \n",
+ " 0.85 \n",
+ " 0.002500 \n",
+ " \n",
+ " \n",
+ " 0.90 \n",
+ " 0.001482 \n",
+ " \n",
+ " \n",
+ " 0.95 \n",
+ " 0.000603 \n",
+ " \n",
+ " \n",
+ " 1.00 \n",
+ " -0.000161 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "0.00 0.468321\n",
+ "0.05 0.387288\n",
+ "0.10 0.306508\n",
+ "0.15 0.229234\n",
+ "0.20 0.161365\n",
+ "0.25 0.108791\n",
+ "0.30 0.072816\n",
+ "0.35 0.049938\n",
+ "0.40 0.035520\n",
+ "0.45 0.026121\n",
+ "0.50 0.019689\n",
+ "0.55 0.015072\n",
+ "0.60 0.011622\n",
+ "0.65 0.008956\n",
+ "0.70 0.006839\n",
+ "0.75 0.005119\n",
+ "0.80 0.003696\n",
+ "0.85 0.002500\n",
+ "0.90 0.001482\n",
+ "0.95 0.000603\n",
+ "1.00 -0.000161\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "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": 24,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap05-fig03.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='Fraction immunized',\n",
+ " ylabel='Total fraction infected',\n",
+ " title='Fraction infected vs. immunization rate',\n",
+ " legend=False)\n",
+ "\n",
+ "savefig('figs/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) (GLF), 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": 25,
+ "metadata": {},
+ "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": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 0., 60., 120., 180., 240., 300., 360., 420., 480.,\n",
+ " 540., 600., 660., 720., 780., 840., 900., 960., 1020.,\n",
+ " 1080., 1140., 1200.])"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "spending = linspace(0, 1200, 21)"
+ ]
+ },
+ {
+ "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": 27,
+ "metadata": {},
+ "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": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/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('figs/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": 29,
+ "metadata": {},
+ "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": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0.3333333333333333, 0.25)"
+ ]
+ },
+ "execution_count": 30,
+ "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": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.0 0.3328871432717143 0.4667702312363652\n",
+ "100.0 0.3321342526691939 0.46414165040064037\n",
+ "200.0 0.33017160845482885 0.4572170063132055\n",
+ "300.0 0.32538647186519215 0.4398872029120663\n",
+ "400.0 0.3154039052420003 0.40163064627138245\n",
+ "500.0 0.3 0.3370342594898199\n",
+ "600.0 0.28459609475799963 0.26731703056804546\n",
+ "700.0 0.2746135281348078 0.22184699045990752\n",
+ "800.0 0.26982839154517113 0.20079159841614402\n",
+ "900.0 0.2678657473308061 0.1923921833925878\n",
+ "1000.0 0.26711285672828566 0.18921320781833872\n",
+ "1100.0 0.26683150821044227 0.18803175228016467\n",
+ "1200.0 0.26672740341296003 0.1875955039953746\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",
+ " results = run_simulation(system, update_func)\n",
+ " print(spending, system.beta, calc_total_infected(results))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's a function that sweeps a range of spending and stores the results in a `SweepSeries`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "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",
+ " \n",
+ " for spending in spending_array:\n",
+ " system = make_system(beta, gamma)\n",
+ " add_hand_washing(system, spending)\n",
+ " results = run_simulation(system, update_func)\n",
+ " sweep[spending] = calc_total_infected(results)\n",
+ " \n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we run it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.000000 \n",
+ " 0.466770 \n",
+ " \n",
+ " \n",
+ " 63.157895 \n",
+ " 0.465418 \n",
+ " \n",
+ " \n",
+ " 126.315789 \n",
+ " 0.462905 \n",
+ " \n",
+ " \n",
+ " 189.473684 \n",
+ " 0.458291 \n",
+ " \n",
+ " \n",
+ " 252.631579 \n",
+ " 0.449980 \n",
+ " \n",
+ " \n",
+ " 315.789474 \n",
+ " 0.435540 \n",
+ " \n",
+ " \n",
+ " 378.947368 \n",
+ " 0.411960 \n",
+ " \n",
+ " \n",
+ " 442.105263 \n",
+ " 0.377183 \n",
+ " \n",
+ " \n",
+ " 505.263158 \n",
+ " 0.333171 \n",
+ " \n",
+ " \n",
+ " 568.421053 \n",
+ " 0.287633 \n",
+ " \n",
+ " \n",
+ " 631.578947 \n",
+ " 0.249745 \n",
+ " \n",
+ " \n",
+ " 694.736842 \n",
+ " 0.223529 \n",
+ " \n",
+ " \n",
+ " 757.894737 \n",
+ " 0.207480 \n",
+ " \n",
+ " \n",
+ " 821.052632 \n",
+ " 0.198306 \n",
+ " \n",
+ " \n",
+ " 884.210526 \n",
+ " 0.193244 \n",
+ " \n",
+ " \n",
+ " 947.368421 \n",
+ " 0.190500 \n",
+ " \n",
+ " \n",
+ " 1010.526316 \n",
+ " 0.189027 \n",
+ " \n",
+ " \n",
+ " 1073.684211 \n",
+ " 0.188239 \n",
+ " \n",
+ " \n",
+ " 1136.842105 \n",
+ " 0.187819 \n",
+ " \n",
+ " \n",
+ " 1200.000000 \n",
+ " 0.187596 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "0.000000 0.466770\n",
+ "63.157895 0.465418\n",
+ "126.315789 0.462905\n",
+ "189.473684 0.458291\n",
+ "252.631579 0.449980\n",
+ "315.789474 0.435540\n",
+ "378.947368 0.411960\n",
+ "442.105263 0.377183\n",
+ "505.263158 0.333171\n",
+ "568.421053 0.287633\n",
+ "631.578947 0.249745\n",
+ "694.736842 0.223529\n",
+ "757.894737 0.207480\n",
+ "821.052632 0.198306\n",
+ "884.210526 0.193244\n",
+ "947.368421 0.190500\n",
+ "1010.526316 0.189027\n",
+ "1073.684211 0.188239\n",
+ "1136.842105 0.187819\n",
+ "1200.000000 0.187596\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "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": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/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('figs/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": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "12"
+ ]
+ },
+ "execution_count": 35,
+ "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, endpoint=True)\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": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.0 0.9888888888888889 0.26672740341296003 0.1875955039953746\n",
+ "1.0 0.9777777777777779 0.26683150821044227 0.1875955039953746\n",
+ "2.0 0.9666666666666667 0.26711285672828566 0.1875955039953746\n",
+ "3.0 0.9555555555555556 0.2678657473308061 0.1875955039953746\n",
+ "4.0 0.9444444444444445 0.26982839154517113 0.1875955039953746\n",
+ "5.0 0.9333333333333333 0.2746135281348078 0.1875955039953746\n",
+ "6.0 0.9222222222222223 0.28459609475799963 0.1875955039953746\n",
+ "7.0 0.9111111111111112 0.3 0.1875955039953746\n",
+ "8.0 0.9 0.3154039052420003 0.1875955039953746\n",
+ "9.0 0.888888888888889 0.32538647186519215 0.1875955039953746\n",
+ "10.0 0.8777777777777778 0.33017160845482885 0.1875955039953746\n",
+ "11.0 0.8666666666666667 0.3321342526691939 0.1875955039953746\n",
+ "12.0 0.8555555555555556 0.3328871432717143 0.1875955039953746\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",
+ " results, run_simulation(system, update_func)\n",
+ " print(doses, system.init.S, system.beta, calc_total_infected(results))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The following function wraps that loop and stores the results in a `Sweep` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "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",
+ " \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",
+ " results = run_simulation(system, update_func)\n",
+ " sweep[doses] = calc_total_infected(results)\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": 38,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 0.187596 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 0.174581 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 0.162910 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 0.153508 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 0.148565 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " 0.152946 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " 0.174964 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " 0.217343 \n",
+ " \n",
+ " \n",
+ " 8 \n",
+ " 0.259071 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " 0.278403 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " 0.277915 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " 0.267357 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " 0.252797 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "0 0.187596\n",
+ "1 0.174581\n",
+ "2 0.162910\n",
+ "3 0.153508\n",
+ "4 0.148565\n",
+ "5 0.152946\n",
+ "6 0.174964\n",
+ "7 0.217343\n",
+ "8 0.259071\n",
+ "9 0.278403\n",
+ "10 0.277915\n",
+ "11 0.267357\n",
+ "12 0.252797\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "infected_sweep = sweep_doses(dose_array)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And plot the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap05-fig06.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='Doses of vaccine',\n",
+ " ylabel='Total fraction infected',\n",
+ " title='Total infections vs. doses',\n",
+ " legend=False)\n",
+ "\n",
+ "savefig('figs/chap05-fig06.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Exercises\n",
+ "\n",
+ "**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?\n",
+ "\n",
+ "* Add fourth compartment\n",
+ "* "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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KiMWCoV44oknOPfccznjjDO46aab6hxr3rx5XHjhhRQXF3PppZeyZMkSW8eNdaxzxJPt5TawbsxdoLWeF6lg/nWswrEfxiUy0WYFjuynYvUisk+fgKdjUbLDSbiVej9L1+8lEIx/kna7HIwZ1JURqvCY206ePJlPPvmEGTNmsHr1aoLBIEuWLOH73/8+O3bs4NChQ4wePZo333wTgKFDh3LPPffw3HPP8cYbR0fgP/74Y5599lkyMjL41re+xTPPPMPPfvazBuf78Y9/jFKKJ554gnXr1nH99dczZsyYY8a5a9cufvazn/HMM88watQotm/fzuWXX86CBQu44IILAFi9ejXvvPMOhmGwYsUKHn74YV566SX69evHmjVruOqqq5g6dSpDhw4F4J133uG5557D7Xbz7W9/mzlz5nDrrbfy17/+lR/84Ad8/vnnjcby+uuv8+yzz9K5c2duuukmHnnkER5++GG++OILbrnlFh5//HFGjx7NvHnzmD17NvPnzyc9PZ3vfe97XHbZZbz44ossXryY7373u/Tu3bvJ97xgwQLeeOMNampquO666+jYsSPXX389zz//PG+++SZz5syhsLCQBx98kJtvvpnnnnuOjz/+mDvuuIO//OUvjBo1ivfee48bbriBN998k169ejV73FjNnSPe7N4HdT6wG5iolCoC/gPcCLyrlJodx/hEG+Pb/SVln75GqPIwFavfJxzwHXunNmbVpgMJSU4AgWCYVZsO2Nr27LPP5rPPPgPgs88+4+KLL2bVqlX4/X4++OADJk6caGu6/OzZsyksLCQnJ4eJEydSUlLSYJudO3eyZs0afvrTn5KWlsbIkSOZOXOmrTg7d+7M22+/zahRo6ioqKC0tJSCgoI6999MnjyZ3NxccnJyGDhwIK+//jr9+vXj8OHD1NTUkJWVVWf7K664gi5dutChQwfOPvtsduzYYSuW6dOn07dvX7Kzs5k6dWp0v7lz5zJ9+nTGjRuHy+Xioosuonfv3rz77rssX76c6upqvvvd7+J2u5k4cSKTJk1q9jw/+clP6NixI0VFRcyePZu3334bgFdeeYUbb7yRXr16kZ6ezq233sqyZcvYtm0bb7zxBtOnT2fs2LG4XC6mTZtGcXEx8+bNO+ZxYzV3jniz24N6AGvJjQ+Bn2PN3huANeR3L/C/cYlOtDmuDt1wuDyEAz7CNVVUrf+EnGHnJDushBrev3NCe1DD+3e2te3QoUMxTROtNZ9++ik//vGPWbp0KatWreLDDz+0nUDy8/OPnt/tbnTYqLS0lLS0NAoKCqJtvXv3jlYiaI7b7ebVV19l7ty5pKenM2jQIHw+X51bGLp06RJ97HQ6efLJJ3nvvfcoKChg0KBBDa6bderUKfrY5XIRCtlb06xjx46N7rd7926WLFlSJxkEg0F2795NRkYGnTp1wul0Rl/r0aNHs7dgxPauunTpwsGDB6Pnuf3227nzzjvrxLFr1y5KS0s57bTT6hynqKiIPXv2HPO4sZo7R58+fZqMuSXYTVADsWbcBZRS04G3tdYhpdRnQK/4hSfaGmd6FtmDJ1G+cj4ANbs24SnsTVq3fkmOLHFGqEJbQ26JZhgGZ511FgsWLGDTpk0MHz6ccePGsWjRIlasWMFDDz3UYucqKirC5/Nx8ODBaHI4cOBoT8/hcNSZnFBWVhZ9PG/ePN566y1effXVaCKaPr3puVpz5sxh/fr1zJ8/n9zcXEzTZPTo0S32XhpTWFjINddcw09/+tNo27Zt2+jUqRPr1q1j//79BINBXC7rV/C+ffsoLGz6/8S+ffui73X37t107do1ep4777yTiRMnRrfdtGkTffr04V//+leD3mtJSQnDhw8/5nHrv5emzhFvdqeZHwB6KaV6A8VA7Z8Fo7CG/oSwLa3bKaQX9Y8+r1z7H0I1Ukg1FUyePJnnn3+eIUOG4PF4GDduHC+99BJDhw5ttL6ax+OhqqrquGfyderUiXPOOYff/va3VFdXs3nzZubOnRt9vW/fvqxcuZKtW7dSXV3NnDlzoq9VVFTgdDrxeDwEAgH+9re/obVusoJBRUUFbrcbl8uF1+vlj3/8IxUVFfj9x64/7fF48Pv9+HzHNxQ9Y8YM5s6dy+rVqzFNk88++4zp06ezdu1aiouL6dixI3/+85/x+/0sXryYhQsXNnu8P/3pT1RUVLBz507mzJkT7c3OmDGDxx57jD179hAKhXjqqaeYNWsWNTU1zJgxg7feeovFixcTCoWYN28ey5Yti16na+649d9LU+eIN7s9qL8Cr2PVyFsNLFRKfQ/4HXBnczsK0ZisQeMJlO4m5K0kHPBRuWYRuaOnyX1SSTZ+/HiqqqoYO3YsAGPGjMHn83HOOY0Pw44ePRqXy0VxcTEffnh886V+85vfcO+993L22WdTVFREcXFxdDhwypQpLFmyhCuvvJKMjAxuvPHG6PWRmTNnsmTJEqZMmYLH42HkyJFceOGFbN7ceL3H2bNns2HDBsaPH09mZiZnnXUW48ePb3L7WEopBg4cyBlnnME//vEP2+9t9OjR3HHHHdxxxx2UlJRQWFjIvffeG/1cn3zySe644w7GjBmDUopzzz232eP16dOHb3zjG/h8PmbNmsWsWbMAuP766wkGg8yaNYuysjL69+/PM888Q25uLqNGjeK+++7jvvvuY/fu3fTp04fHHnuszrBfU8eN1dw54s2wW3pGKTUT696nv2utD0aeO7XWc4+xa0IppfoAXy1cuJAePXokOxzRDP+h3RxZ8haRJcbIHjSejD5Dmt+pFdqwYQMDB0oVjWN55JFH2LBhQ52p7cJKkq+//nqL/x+K13Gb+v9eUlJSm4j7aq232TmW7WnmWuvXmnsuxPHydOxOxilD8W5dDUDVxsW4O/bAlVNwjD2FEO2BrQSllFpG7Z+5jdBaH/vmBSEakdV/DIEDJQQrDmGGQ1SsXkj+mTMxHM5j7yyEaNPs9qDqT453AacA04C7WzIg0b4YDic5w8+l7JNXMc0waV1PAbkO1S798Ic/THYIKUlr3aqO25Lsrqh7T2PtkZt0pwMPN/a6EHa4cjqQPWQSzux83HmpN/1aCJEcx1PqqDHvA4+0RCCifYuddi6EEGD/GlRmI815wB3AnkZeE+KkmaYp086FaMfs9qAqaThJwsAqFvvfLRqREECoupyK1e+T3ut00otOO/YOQog2x26COrvecxPwA+u01hUtG5Jo7wKH93Jk2TzMYIBgxSHcBV1xZuYkOywhRILZXQ/qQ631h8B/It83Aj0AuaItWpwzpwMOdzoAZjBAxZr3Zf0oEReynHtqs7vcxmil1DbgrMiy70uBvwMblFIXxi880R45XB5yhp8bnW4eKN2Dd8uqJEcl2ppELecuTpzdIb4/AguBVcC1kf06At8Gfk3D+6SEOCnugq5knlpM9WZrobiqzctwdyrCnd/lGHsKYY8s55767FYzLwbu01ofwbrv6W2tdRVWYlLxCk60b5mnjsRdECn/b5pUrFxAOHjsCtTixJSUlDBixAjmzJnDhAkTGDduHHfddVe0UvnBgwe55ZZbGDt2LBMnTuTXv/41Xq+30WO15+XcRcux24M6AnRQSlUCZ2L1qABOw1qKQ4gWZxgOcoady+GPX8EMBgh5K6ha93GbWOCwatMyqr9cbmvb9J4DyRlSd8XVii8+pGbnhmPum3lqMVn97a99VF1djdaaBQsWsHXrVmbNmsU555zDpEmTuPHGG+natSsLFiygpqaGm266KVqRvL72upx7Iip8tyd2e1BzgZeAfwMlwL+UUpcBfwNejFNsQuDMzCF78NFfzjW7NlGz69jLJIgTd/3110dXqlVKsWPHDnbs2MHKlSu54447yM7OplOnTtx666289tprDdaCas/LuYuWZbcH9WPZ5oyuAAAfaUlEQVTgR1jLbTwaWVk3F/gDR3tTQsRFevdTCRzYQc2uTQBUrvsP7oIuODPlr9V4iF3+3O12EwqFOHToEB6Pp85rRUVF+P1+Dh06ROfOR5eVb8/LuYuWZbcWXwh4qF6bXFEUCZN1+gQCh/cSqi4nvUjhSGusuEnrkdV/9HENvdWXM2RSg2G/eOrevTt+v58DBw5Ek9HOnTtxu93k5eXV2bY9L+cuWpbdIT4hksrh8pAzYgq5xeeTffoEDOfJlpEUx6NLly6MGzeOBx54gMrKSg4ePMgf/vAHpk6disfjqbNte17OXbQsSVCi1XDnFZLWpU+yw2i3fv/73+NwODjvvPOYNm0ap556aqMTJMBazj0cDnP22Wfz85//nOLi4uhrU6ZMYdq0aVx55ZV8/etfZ9y4cdHXZs6cyaBBg5gyZQpnnXUWixcvPuZy7hkZGYwfP54pU6Zw8ODBE1rO/XiWnohdzn3kyJHcfffddZZzFy3H9pLvrYUs+d6+mKYJoSCGy53sUJokS77Lcu7tSUsu+S49KNFqhQM+KlbM58jyd6UUkhBtkN3lNjpjLa1RDLixKplHyZLvItHMUICyj+cS8lq1iqu/XEHWaaOSHJUQoiXZvdL8DHAGVv298viFI4Q9htNNWvfTqN6yAoDqzctxd+iOp2P3JEcmGiPLuYsTYTdBnQVcFKlkLkRKyOw/isDhPQRK9wAmFasWUDDhmzjSMpIdmhCiBdi9BnUYq9yRECnDMBzkDJ+Cw2MtzRH2VVOxemFKXo9qa5ORhGhMS/8/t9uDuhN4VCl1M7AZa7HCKK11dYtGJYRNzvQscoadw5Fl7wDgP1hC9eblJ3UTbEtzOp0EAoEG9wsJ0dZ4vV7c7pabUXs8y23kA4ubeN1p5yBKqWHAE8BQYCswW2u9rN42s4An6+2aASzUWn/NZryiHfF07kVmv5FHr0d9uQJ3QRc8nXslOTJLfn4++/bto6ioCIdDJs6Ktsc0TbxeL7t27apTiupk2U1Ql57siZRSHuAN4GGsa1qXAPOVUr211tGJF1rrF4AXYvYbAcwHbj3ZGETbldl/FIGyfQQO7cK6HrWQ/AmX4sxI/lLxnTp1oqSk5LhuBhWitXG73XTp0qVFK7rbrcX3IYBSKgNriQ0HsEVrXXEc55oMuLXWD0eev6yUuhG4HPhrYzsopdxYyepurfXq4ziXaGcMw0Hu8Ckc/mQu4ZoqwgEfVRuXkDtiSrJDw+Fw0KtXavTmhGhN7C757lRKPYg1WWIlsAI4oJR6Qilltxc2CKi/gM1GYEgz+/wA8AJy+7k4JkdaBrnDp4Bh4CnsQ/bgickOSQhxEuwOiN8P/BfwLaBn5OtbwNexJlDYkQ3Un0xRDTRaljoyJHgrVu9JpkAJW9wdupE/bga5xVNxuNOSHY4Q4iTY7f18C7hOa/1OTNsrSqkK4CnsJakqrMkOsTKByia2Px8IA/OaeF2IRrnzW+4irRAieez2oLKBLxtp3wrYXQRlPaDqtQ2ItDfmIuAVrXXq3dQiWh3f3q2E/d5khyGEOA52E9QyrOtB9d0ILLd5jEWAoZS6WSnlVkpdgTXd/LUmth8LfGLz2EI0ygyHqFz/CeUr5lO+8t+YYXurqQohks/uEN/PgQ+UUpM5ei/UWKAP1lDcMWmt/UqpC7Dug7oX2AbM0FofUEr9EpiltT49Zpc+gKyhLE5K4PA+vNu+sB4f2k3VxsVkDxqf5KiEEHbYXg9KKdUfuB5rNp4Xa0beY1rrPfEL7/jJelCivuovl1O16ej94DlDJ5PeY0ASIxKi/TmR9aBsr5uttd4E3HJioQmRPBn9RhIsP4Rv71YAKtd+hDMrH3dB1yRHJoRoTpMJSim1FJiqtT6slFoGNNnVkvWgRCozDIOcoWcTqiojWFGKGQ5RvuI98s+8OCUqTQghGtdcD2oe4Is8fjsBsQgRN4bLTW7x+ZR98irhgI+wz0v55++SN+4iHC4p4ipEKmoyQWmt74l5ugj4TGsdiN1GKZWGdbOuECnPmZlLbvFUjix5G9MME6w4RMWq98kt/hqGIUVchUg1dn8qF2FVM6/vFODFlgtHiPhyd+hO9pCzos/9+7dRrZcmMSIhRFOauwb1PaC2F2UA65VS9a9DZWPV5hOi1UjvMYBQZRnVW1dhuNPwFEohVyFSUXPXoP6KVZ7IAfwvcB91V9U1scoULYxbdELESaYagxkKkt57MK7sxgYHhBDJ1tw1qCDwPIBS6ivgUyBHa10aaRsNrIxsJ0SrYhgOsk+fkOwwhBDNsHsN6gCggV/EtL0FfKGU6tfiUQmRJMHKMkLV5cfeUAgRd3YT1CPARxy9JgXQF1gCPNrSQQmRDIGy/RxZ/DpHls4j7JPCskIkm90ENQa4V2sdXRpDa+0Ffg1IYTPR6oWDfsqXzSPsryFUfYQjn7+DGQwce0chRNzYTVClwOBG2vsDx7PsuxApyeHykD1kEtaEVQgeOUD5ivek+rkQSWS3Ft/TwFNKqZ7A51gz+EYCvwKeiVNsQiRUWtdTyB48gcq1HwHgP1hCxer3yRl+rtzIK0QS2E1Q90e2/RXQOdK2H3gI+F0c4hIiKTJ6nU7Y56V68+cA+PZswXC6yR4yCcMwkhydEO2LrQQVWdX2LuAupVQnwK+1lqlOok3KPLUYM+CLriNVU7IRw+Uma+CZkqSESCDby20opUZgrQXljDw3gDSgWGt9Q3zCEyLxDMMga+CZmEE/NSUaAO+2LzCcbrKUFO4XIlFsJSil1O1YlSQqgSysihJ5kZffiU9oQiSPYRhkD5mEGQxE15Gq3rICd0FXKY0kRILYvfJ7A3Cr1joX2AMMBYqwln9f1tyOQrRWhuEgZ/i5eDpbCSmjzxDcnXsmOSoh2g+7Caor8Grk8SpgnNZ6L/Az4Op4BCZEKjAcTnJHfo3swWfJNSghEux4Sh11jDzeBAyLPN4FdG/poIRIJYbTRUavQQ2Sk2mGMc0mF5oWQpwkuwnqDaz7oIZjrQ31LaXUJOAnwPZ4BSdEqjLNMBWr3qdaL5UkJUSc2J3FdwvwR6xqEi8Al2Ats1EJXBWf0IRITaZpUvnFh/j2fGk9Dwdl+E+IOLCboC4BbtdaH4o8/7ZS6kagRpbbEO2OGSbsr4k+9W77AjPoj9zMKxUnhGgpdn+a/gx0im3QWldKchLtUe3EibSup0Tbako05cvnY4bkR0KIlmI3QS0BZsYzECFaE8PhJGfEFNJ7qGibf/82jiybRzjgS2JkQrQddof4wsADSqk7gK+AOovlaK3l9nrR7hiGg+whkzE86Xi3rgYgULqHI4vfJHfUBTgzspMcoRCtm90EtSTyJYSIYRgG2QPG4fBkULVxMQDBikOUffYaeaO+jiu34zGOIIRoSpMJSinliBSJRWt9T1PbCSEg85ThODwZVHzxAZgm4ZoqKr74kPwzZ8rsPiFOUHPXoAJKqcLYBqXUWUqptDjHJESrlN5DkTd6GobLjcOTQe6IKZKchDgJzQ3xNfaT9TYwHNgan3CEaN08nXqQP24mZiiIMzM32eEI0aod700b8uegEMfgyumAO7+wQbtv3zbCPm8jewghGmN7PSghxIkLlO6mYsV8jLQMckdObTSBCSHqktvehYgzMxigfMW/Mc0w4Zoqjix+A++OdVLDT4hjOFYP6ttKqcp62/+XUupg7EZa68ftnEwpNQx4Ams9qa3AbK11g/WklFLdgL8AZwM1wFNa61/ZOYcQqcZwuckZejblqxdiBnyY4RCVaz8iULqX7METcbg8yQ5RiJTUXILaAXyvXtte4L/rtZnAMROUUsqDVRX9YeAsrPp+85VSvbXW5fU2fwNYDnQBugEfKqU2aK1fPNZ5hEhFnsJeFIy/hPIV8wmWW3/f+XZvJli2n9yR5+HK7XSMIwjR/jSZoLTWfVr4XJMBt9b64cjzlyMFZy8H/lq7kVLqDOAUYLzWOgB8pZSaTL3qFUK0Ns7MXPLHzaBy3UfUlGgAQtVHKPv0NbIGjCW992CZli5EjERegxoEbKjXthEYUq+tGPgCuFsptUsptQWYqbXek4AYhYgrw+kiZ+jZ5Aw7B8PpBrCG/NZ/Qvnn7xCqqUpyhEKkjkQmqGygul5bNZBZr60DMBEIYPWkLgZuUUrJulOizUgv6k/++EvqDO0FDu3GDPqTGJUQqSWRCaoKyKjXlom16GEsH1Cutb5ba+3TWq8GnsZKVEK0Ga7sfPLPnEnGKcMAg6wBY3FlFyQ7LCFSRiIT1HpA1WsbEGmPtRHIjEyqqCX3a4k2yXA4yR4wjoLxF5Pee3CD14MVpTIdXbRbifzFvwgwlFI3A49izeIbCrxWb7t/AweAPyilfoqV1K6l4YxCIdoMV17nBm3BilLKPp6Lu1MR2YMm4MzKS0JkQiRPwnpQWms/cAFWYioFbgdmaK0PKKV+qZRaF9muBpiEdf1pD/Au8D9a61cTFasQyWaaYSrWfIBphvEf2Mnhj16h+svlmOFQskMTImESOnSmtV4LTGik/QHggZjnW4FpCQxNiNQSDuPOLyR45ABgYoZDVG1aRk3JJrIGjsNT2FumpIs2T0odCZGCDKeL7NMnkD9+Zp2ZfqHqI5Qvf5fyz98hWHE4iREKEX+SoIRIYe68QvLHX0z2oPEYMSWR/Ad2cvjjV6hY+x/Ccu+UaKMkQQmR4gzDQUafIXSYdCXpvQYRXfXGNKnZsZ6KtR8lNT4h4kUSlBCthCMtg5zBZ1Ew4VLcHYui7Vn9RyUxKiHiR+4vEqKVceV2JG/MhQQO7iRweF+DQrNmMIB3xzrSew7E4U5LUpRCnDxJUEK0QoZh4OncC0/nXg1e8+5YR9XGxVR/uZyMXoPJ6DsER1r9imJCpD5JUEK0IWYwgHfrqujj6q0r8W5bQ1r308joOxRXTockRyiEfZKghGhLHA6yBoyjestKQlVlgFUtvaZkIzUlG/F06kF678F4CnthGHIJWqQ2SVBCtCGGw0l6D0VaUX/8+76iessqgkf2R1/3HyzBf7AEZ0YO6T0HktF3KIZTfg2I1CT/M4VogwzDIK3rKXi69CVYtg/v1tX49m3DWgAbQt4KanZuIKPf8KTGKURzJEEJ0YYZhoG7oCvu4q6Eqsup2bGemp0bCAd8pPca1GCYL3B4L4bDiTO3k5RSEkknCUqIdsKZmUvWgLFknjYK396teDr1bLBN1YbPCJTtw5mVT1r3U0nr2g9XjqxRJZJDEpQQ7YzhdJFe1L9Be6jqCIGyfZHHZVRv/pzqzZ/jyu6Ap2tf0rr2xZnTUXpWImEkQQkhotKL+uPb+xVmKBBtC1aWEvyylOovl+PMyMZT2AdP5164O/eUZCXiShKUEAIAZ1YeOcPOIfv0AP792/Ht3Yp///Y6a1CFvJV4t6/Fv38bBZNnJTFa0R5IghJC1GG43Nb1p+6nYgYD+A/sxLfvKytZBf0AeDo3XI+qpmQjgUO7cXfojrtjdxwZOdLDEidFEpQQokmGy01at1NI63YKZjhEoHQP/gM78BT2abCtb89W/Ad2ULNrEwCO9CxrBmHky5nTAcPhTPA7EK2ZJCghhC2Gw4mnUw88nXo0eM1KXrvrtIVrqvDt2YJvz5bo/q68zrjyC8nodTrOrLyExC1aL6l1IoQ4eYaDvDOmkzVgLJ7OvTBc7gabmOEQgcN78X61hnDQV/c106Rm1yaC5QcxQ8FERS1SnPSghBAnzTAM3PmFuPML4ZThmGaYUEUpgdI9BA7vJVi2j5C3MrKtA1dOxzr7h2sqqVj9fu3RcGbl4srugDO7AGd2Aa7sfJxZ+Y0mPtF2SYISQrQ4w3Dgyu2EK7cTGX2GABD2VRMo20/YW9HgWlSw/FDMM5NQ1RFCVUdg31d1tnOkZ+HK7UzeqPPrtJumKRMy2iBJUEKIhHCkZZLWpU/jr7k9pHXpS7CilFB1ObU1A+sL11QRTstq0O4r0VRu/AxnRg7OjGwcGTk4MrJxpmfjSM/CkZ6NIz1TKri3MpKghBBJ5+7QHXeH7gCYoQDBysOEKg4TqiyzHlcdthKXaTY6uSLkrcAM+AgGfATLDzZxFgNHWjrpRQPIGnBGnVeC5Ycwgz4MTwYOTwaGO016ZClAEpQQIqUYTjfuvELceYV12s1wiHDkOlZ94ZrG2+syCfu8mGaowSvVW1fh2705JggDhzsdw5OOw5OOw52G4U7H8KSR1qUv7oKudfYP1VRhGA4Mt0em0rcgSVBCiFbBcDibnJqePWQyWeoMQtXlhL2VhGoqCXsrCHmrCPuqCNdUEvZ5AXA0MkRo+r31GkzCfi/4vdRPZ86M3AYJqnz5e9F1twyHE8PlwXC5j353Hn2c0Xswrty6k0R8+7ZZw49OF0btl8NZ5zmGo9316iRBCSFaPcMwMNIycaRlQhPF181wiLDP2+gCjc6cDrhDQcI+L2G/N1oxo9FzudMaHjtm2rwZDlkJr37Si0jr1q9BW8WaRZgBXyNb1zkzhsNB/vhL61SYN0NBjix5CxxODIcj8t0JDkfku9NKfpHXM08trvMZhAM+fHu+xDCsfaxE6LD2NwwwHGAYuHI64kjLOEaMLUsSlBCiXTAcTpwZ2Y2+lj3wzDrPrSRTQ9hfQzhQg+n3Rb7X4Mrt1PDYrjQc7jTCQT+YjU/wiG7b2ArGwUDDtgZMzHDISkL1Yq2tQm9H5qkj6zwP11RTufajY+6XO3IqaV372j5PS5AEJYQQ9RgOJ0Z6Fo70hsOBjSkYfzFgTXcnHMIM+jGDAcJBH2YwEPnyY4YCODPrDlOapomnSx/MUAAzFMIMBa1q8qEgZjho3bgcDh8t2ls/wYUbXlNrVv1rZGbY3n5JGF6UBCWEEC3EMIzodSPSwM50CcMwyB35tWNuZ5phCIUaJCjDnUb+uBlWIjPDmOGwlSTDISuxmSEIhaz9w2HAqLe/h/SeA4/uG9nONMNWb9C0Hid6eA8kQQkhRKtgGA5wNbyPy3A4G0zaOB7OjBxyhkw6mdDiRu5aE0IIkZIkQQkhhEhJkqCEEEKkpIReg1JKDQOeAIYCW4HZWutljWw3G3gSiL0x4Ada6+cSEqgQQoikS1iCUkp5gDeAh4GzgEuA+Uqp3lrr8nqbjwT+oLW+LVHxCSGESC2JHOKbDLi11g9rrQNa65eBdcDljWxbDKxKYGxCCCFSTCKH+AYBG+q1bQSGxDYopZxYQ4BXK6X+CFQDTwMPaq2bv0Xb4gTYu3fvSQcshBCiZcT8TrZdTTeRCSobK9nEqgYy67V1Bj4HngMuBgZiDQ2WA4/bOE83gFmzZp1MrEIIIeKjG7DFzoaJTFBVQP1bkTOBOnXytdZ7gdi7xlYppR7BumZlJ0EtAyYCe6BBIWIhhBDJ4cRKTg0mxjUlkQlqPXBzvbYBwPOxDUqp04HLtNZ3xTR7gBo7J9Fa+4CPTyJOIYQQ8WGr51QrkQlqEWAopW4GHsXqEQ0FXqu3XRnwU6VUCfAMMAL4EXBjAmMVQgiRZAmbxae19gMXYCWmUuB2YIbW+oBS6pdKqXWR7XYB04EbsK47vQrcp7Wem6hYhRBCJJ9hHmPtEiGEECIZpNSREEKIlCQJSgghREqSBCWEECIlSYISQgiRkiRBCSGESEmy5HsMu8uBtEVKqfOA3wKnAfuB32mtn1RK5WPVQjwPq+rHHVrrOcmLNDEi73sNcKfW+tn2+DkopboBfwHOxrpR/imt9a8iKxM8ClyKVa3lj1rr3yQv0vhTSo0F/gwo4ADwW6310+3ls1BKjQHe1loXRp43+76VUj8Efg7kYZWqu0FrXXW855UeVETMciD/APKB+7GWA8lNamAJoJTqiXW/2a+x3vuVwG+UUlOxfkGFsEqUTAN+q5Sa1NSx2pAngKKY5+3xc3gDq2RYF2AscI1S6irgHqxf1P2A0ZH2byUtyjhTSjmwPos/a63zsH4+Ho38QdumPwullKGUug6Yj1XRp1aT7zvye+N2YCrWz0s68MiJnF8S1FGTsb8cSFvTB3hRa/2a1joc6TV+AJyL9RfSr7TW1VrrVcBfgeuTFmkCKKWuAXKBLyLPM2lnn4NS6gzgFOBHWusarfVXWD8ji4BrgPu11oe11tuA32PdWN9WFQCFWJVwDMAEgoCftv9Z3AN8D+uP11jNve9rgP/VWq/TWlcCtwFXKaWyj/fkkqCOsrUcSFuktf5Ia/3d2udKqQ4cLbhrAptjNm/Tn4lSqi9wFzA7prk/7exzwFqT7QvgbqXULqXUFmAm4MX6q3h9zLZt+rPQWh/CGs56DghgFTv9JdbPR1v/LJ7QWhdjrTABRIe/m3vfg+q9tgUr1/Q/3pNLgjrK7nIgbZpSKg94E1gCLAdq6q3D1WY/k8haZH8HbolU1a+VTTv6HCJq/0gJYPWkLgZuwSpDBnV/Vtr0ZxEZ4qsBrsJakWEy1h8xbf6z0FrvbqS5tifU1Puu87s08nNTwwl8LpKgjrK1HEhbppTqDywG9mENaVUA6ZFhjVpt+TP5FaC11v+s115F+/ocAHxAudb6bq21T2u9GmuSyDWR12N/Vtr6Z3ExMF5r/XJk+P9DrELW7fGzAOvnAZp+33V+l0Z+btI5gc9FEtRR67Eu+sUaQN2uapullDoLq9f0OnCp1roGa0jLAPrGbNqWP5MrgEuVUmVKqTKsIYvHgR/Svj4HsIZsMiOTh2q5gMPAXur+rLT1z6InkFavLYg1m6+9fRZorY/1f6D+79J+WD8/sUPktsg086PsLgfS5iil+gFvA7drraOzbbTWlUqp17Bm9F2L9R/tO8C3kxJonGmtB8Q+V0qtAh6OTDPPpp18DhH/xvoF/Ael1E+xfuFci3XBfCtwl1JqDdZwzi3An5IVaALMx/q3vx5rcsxIrH//64AdtK/PotbfaPp9/w14Rik1F+v/ym+Bf8o085PQ3HIgSQ0sMX4A5GD9EFbGfD2INTMnDGwH3sGaufOvJMaaLO3qc4j0oCdhXX/aA7wL/I/W+lXgTmAt1izXZVi3KDyRpFDjTmu9DmuY7was9epeBG7TWr9BO/ssYjT5vrXW7wD3YU3N34XVezqhmY2y3IYQQoiUJD0oIYQQKUkSlBBCiJQkCUoIIURKkgQlhBAiJUmCEkIIkZIkQQkhhEhJcqOuEIBS6lmOlq5pzD1YFd4XATmRKs1xF6kP+AnwLa31pkZevxGrdmCfOMfxKLBMa/1cPM8jRCzpQQlhuQmrQnM3rGKgAGNi2n4PfBp5fNx3xJ+EHwGrG0tOCXYvcK9SqmOS4xDtiPSghAC01keAIwBKqU6R5gP1qpqDVYMsIZRS6cAvgHMSdc6maK33K6UWYtUlvDvJ4Yh2QhKUEDYppSYTM8SnlDKxVlf9BVatus+B/wJuBa4GyoFfaK3/Ftk/B/gDVqV4E3gfuKmJJQ3AKl5bprVeGxPDaKzVSYdilZj5tF6MU7GGI4dFzrEY+L7WeqNS6h3gkNb66pjt7wTO1VpPUkrNxCpRcypWeaPHtda/izn8P7FqrN2vtQ7Y/+SEODEyxCfEyfkt8GOsJdF7ASuwEtNorF/oT8asJPoUViKbilXnzgTeU0o19YfiNKwaeEB0Icl3gdVYBUufB26Oeb031lpe/4e1aNw5WOs61SaZvwMXKaVil0m4EnhBKdUF+AfwUCTGW4H7lVLnxmy7AOiItZihEHEnCUqIk/OY1npRZBn4t7HWvPml1loDf8RaF6evUuoUrB7RVVrrZZFe0dVAH+D8Jo49CqsYZ63LsdZpulFrvVFr/QzwbMzrLqwJE3/QWn+ltV6MVVl6UOT117EKd04DUEqNxCoGOxfoDriBnVrr7VrrucC5WAVBgWgB2a2RuISIOxniE+LkfBnzuBrYFrPybk3kexrQO/JYK1Vn2bFMrB7L240cuwtwMOb5YOCLesNrS4kkOK31FqXUP5VSPwdOx1qjZxjWcB1a62ql1D+xEuVcrBVi/6W1LlVKHQZewOrRbQXmAc9rrffVi+kQUNjUhyFES5IelBAnp/61mHAT27ki244Ahsd89QfmNLFPGKvHE6v+c3/tA6XUYKyFBs8AlmOt0XNHve3/DkyLXA+7HCspobU2tdb/FYnv+cgxFiulrq63vxMINRGvEC1KelBCJMYGrCG0rMhwIEqpLKyE8SDWZIb69gKdY56vwVrxN01r7Yu0jYx5/Rpgpdb64toGpdQV1E1qC7HWO7sVyAXeimw3DLhGa/0TYBVwj1LqRaxrVH+L2b8TCZzJKNo3SVBCJIDWWiul3gSeV0r9AGu12vuxJldsbGK35VhDdLVeBu4C/qqUegArOV2HlXDAGn4boJSaiLVQ3EVYK78eiokjrJR6CStBvRy5rkTkGN+LDPX9Heua1FhikpNSKg9rqHLZCX0IQhwnGeITInGuwZqK/jrWL/k84DytdVkT28/Dmu0HRO/VmoKVJFZiDeE9FLP9n7Fm2r2FldwuBL4LFCqlesRs9yKQTmR4L3LsnVirxs7EmpjxaiTO+2P2m4DVe1p5HO9ZiBMmK+oKkaKUUpnANuB8rfWKFjzuNKwp7z211k1dM2tsv5eA9Vrr+1oqFiGaIz0oIVKU1roa6x6mH7TE8ZRSfZVS38S65vXEcSanbli9ucdaIhYh7JAEJURqewgYqurNTT9BPbFmDJZgVbQ4HncAd2itS4+5pRAtRIb4hBBCpCTpQQkhhEhJkqCEEEKkJElQQgghUpIkKCGEEClJEpT4/42CUTAKRsGgBAD6jxy6kRfzrQAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "def make_system(beta, gamma, zeta):\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, Q=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, zeta=zeta)\n",
+ "\n",
+ "\n",
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the SIR model.\n",
+ " \n",
+ " state: State with variables S, I, R\n",
+ " t: time step\n",
+ " system: System with beta and gamma\n",
+ " \n",
+ " returns: State object\n",
+ " \"\"\"\n",
+ " s, i, r, q = state\n",
+ "\n",
+ " infected = system.beta * i * s\n",
+ " quarantined = infected * system.zeta\n",
+ " recovered = system.gamma * i\n",
+ " recoveredq = system.gamma * q\n",
+ " \n",
+ " s -= infected\n",
+ " i += infected - recovered - quarantined\n",
+ " q += quarantined - recoveredq\n",
+ " r += recovered + recoveredq\n",
+ " \n",
+ " return State(S=s, I=i, R=r)\n",
+ "\n",
+ "beta = 0.333\n",
+ "gamma = 0.25\n",
+ "zeta = 1\n",
+ "system = make_system(beta, gamma, zeta)\n",
+ "\n",
+ "results = run_simulation(system, update_func)\n",
+ "\n",
+ "plot(results.S, '-', label='with quarantined people')\n",
+ "decorate(xlabel='Time (days)',\n",
+ " ylabel='Fraction susceptible')\n",
+ "\n",
+ "beta = 0.333\n",
+ "gamma = 0.25\n",
+ "zeta = 0.0\n",
+ "system = make_system(beta, gamma, zeta)\n",
+ "results2 = run_simulation(system, update_func)\n",
+ "plot(results2.S, '--', label='no quarantine')\n",
+ "\n",
+ "decorate(xlabel='Time (days)',\n",
+ " ylabel='Fraction susceptible')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap13mine.ipynb b/code/chap13mine.ipynb
new file mode 100644
index 00000000..09edb9a8
--- /dev/null
+++ b/code/chap13mine.ipynb
@@ -0,0 +1,625 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 13\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code from previous chapters"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`make_system`, `plot_results`, and `calc_total_infected` are unchanged."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "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": {},
+ "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, '--', label='Susceptible')\n",
+ " plot(I, '-', label='Infected')\n",
+ " plot(R, ':', label='Recovered')\n",
+ " decorate(xlabel='Time (days)',\n",
+ " ylabel='Fraction of population')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def calc_total_infected(results):\n",
+ " \"\"\"Fraction of population infected during the simulation.\n",
+ " \n",
+ " results: DataFrame with columns S, I, R\n",
+ " \n",
+ " returns: fraction of population\n",
+ " \"\"\"\n",
+ " return get_first_value(results.S) - get_last_value(results.S)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's an updated version of `run_simulation` that uses `unpack`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "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: TimeFrame\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " \n",
+ " frame = TimeFrame(columns=init.index)\n",
+ " frame.row[t0] = init\n",
+ " \n",
+ " for t in linrange(t0, t_end):\n",
+ " frame.row[t+1] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** Write a version of `update_func` that uses `unpack`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Original\n",
+ "\n",
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the SIR model.\n",
+ " \n",
+ " state: State (s, i, r)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (sir)\n",
+ " \"\"\"\n",
+ " s, i, r = state\n",
+ "\n",
+ " infected = system.beta * i * s \n",
+ " recovered = system.gamma * i\n",
+ " \n",
+ " s -= infected\n",
+ " i += infected - recovered\n",
+ " r += recovered\n",
+ " \n",
+ " return State(S=s, I=i, R=r)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Test the updated code with this example."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'make_system' 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[1;32m----> 1\u001b[1;33m \u001b[0msystem\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmake_system\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.333\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0.25\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrun_simulation\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mupdate_func\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;31mNameError\u001b[0m: name 'make_system' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "system = make_system(0.333, 0.25)\n",
+ "results = run_simulation(system, update_func)\n",
+ "results.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_results(results.S, results.I, results.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": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.25"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "beta_array = linspace(0.1, 1.1, 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": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.1 0.0072309016649785285\n",
+ "0.2 0.038410532615067994\n",
+ "0.30000000000000004 0.33703425948982\n",
+ "0.4 0.6502429153895082\n",
+ "0.5 0.8045061124629623\n",
+ "0.6 0.8862866308018508\n",
+ "0.7000000000000001 0.9316695082755875\n",
+ "0.8 0.9574278300784942\n",
+ "0.9 0.9720993156325133\n",
+ "1.0 0.9803437149675784\n",
+ "1.1 0.9848347293510136\n"
+ ]
+ }
+ ],
+ "source": [
+ "for beta in beta_array:\n",
+ " system = make_system(beta, gamma)\n",
+ " results = run_simulation(system, update_func)\n",
+ " print(system.beta, calc_total_infected(results))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Wrap that loop in a function and return a `SweepSeries` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sweep_beta(beta_array, gamma):\n",
+ " \"\"\"Sweep 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",
+ " results = run_simulation(system, update_func)\n",
+ " sweep[system.beta] = calc_total_infected(results)\n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Sweep `beta` and plot the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.1 \n",
+ " 0.007231 \n",
+ " \n",
+ " \n",
+ " 0.2 \n",
+ " 0.038411 \n",
+ " \n",
+ " \n",
+ " 0.3 \n",
+ " 0.337034 \n",
+ " \n",
+ " \n",
+ " 0.4 \n",
+ " 0.650243 \n",
+ " \n",
+ " \n",
+ " 0.5 \n",
+ " 0.804506 \n",
+ " \n",
+ " \n",
+ " 0.6 \n",
+ " 0.886287 \n",
+ " \n",
+ " \n",
+ " 0.7 \n",
+ " 0.931670 \n",
+ " \n",
+ " \n",
+ " 0.8 \n",
+ " 0.957428 \n",
+ " \n",
+ " \n",
+ " 0.9 \n",
+ " 0.972099 \n",
+ " \n",
+ " \n",
+ " 1.0 \n",
+ " 0.980344 \n",
+ " \n",
+ " \n",
+ " 1.1 \n",
+ " 0.984835 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "0.1 0.007231\n",
+ "0.2 0.038411\n",
+ "0.3 0.337034\n",
+ "0.4 0.650243\n",
+ "0.5 0.804506\n",
+ "0.6 0.886287\n",
+ "0.7 0.931670\n",
+ "0.8 0.957428\n",
+ "0.9 0.972099\n",
+ "1.0 0.980344\n",
+ "1.1 0.984835\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "infected_sweep = sweep_beta(beta_array, gamma)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap06-fig01.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "label = 'gamma = ' + str(gamma)\n",
+ "plot(infected_sweep, label=label)\n",
+ "\n",
+ "decorate(xlabel='Contacts per day (beta)',\n",
+ " ylabel='Fraction infected')\n",
+ "\n",
+ "savefig('figs/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": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1])"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "beta_array"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And now an array of values for `gamma`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[0.2, 0.4, 0.6, 0.8]"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gamma_array = [0.2, 0.4, 0.6, 0.8]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For each value of `gamma`, sweep `beta` and plot the results."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap06-fig02.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "for gamma in gamma_array:\n",
+ " infected_sweep = sweep_beta(beta_array, gamma)\n",
+ " label = 'γ = ' + 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('figs/chap06-fig02.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** Exercise:** Suppose the infectious period for the Freshman Plague is known to be 2 days on average, and suppose during one particularly bad year, 40% of the class is infected at some point. Estimate the time between contacts."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap14mine.ipynb b/code/chap14mine.ipynb
new file mode 100644
index 00000000..a510479d
--- /dev/null
+++ b/code/chap14mine.ipynb
@@ -0,0 +1,822 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 14\n",
+ "\n",
+ "Copyright 2017 Allen Downey\n",
+ "\n",
+ "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code from previous chapters"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "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": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the SIR model.\n",
+ " \n",
+ " state: State (s, i, r)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (sir)\n",
+ " \"\"\"\n",
+ " s, i, r = state\n",
+ "\n",
+ " infected = system.beta * i * s \n",
+ " recovered = system.gamma * i\n",
+ " \n",
+ " s -= infected\n",
+ " i += infected - recovered\n",
+ " r += recovered\n",
+ " \n",
+ " return State(S=s, I=i, R=r)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "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: TimeFrame\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " \n",
+ " frame = TimeFrame(columns=init.index)\n",
+ " frame.row[t0] = init\n",
+ " \n",
+ " for t in linrange(t0, t_end):\n",
+ " frame.row[t+1] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def calc_total_infected(results):\n",
+ " \"\"\"Fraction of population infected during the simulation.\n",
+ " \n",
+ " results: DataFrame with columns S, I, R\n",
+ " \n",
+ " returns: fraction of population\n",
+ " \"\"\"\n",
+ " return get_first_value(results.S) - get_last_value(results.S)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sweep_beta(beta_array, gamma):\n",
+ " \"\"\"Sweep 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",
+ " results = run_simulation(system, update_func)\n",
+ " sweep[system.beta] = calc_total_infected(results)\n",
+ " return sweep"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## SweepFrame\n",
+ "\n",
+ "The following sweeps two parameters and stores the results in a `SweepFrame`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sweep_parameters(beta_array, gamma_array):\n",
+ " \"\"\"Sweep 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: SweepFrame 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": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.1 \n",
+ " 0.3 \n",
+ " 0.5 \n",
+ " 0.7 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.10 \n",
+ " 0.084693 \n",
+ " 0.005444 \n",
+ " 0.002736 \n",
+ " 0.001827 \n",
+ " \n",
+ " \n",
+ " 0.18 \n",
+ " 0.708623 \n",
+ " 0.015914 \n",
+ " 0.006118 \n",
+ " 0.003783 \n",
+ " \n",
+ " \n",
+ " 0.26 \n",
+ " 0.900780 \n",
+ " 0.055380 \n",
+ " 0.011639 \n",
+ " 0.006427 \n",
+ " \n",
+ " \n",
+ " 0.34 \n",
+ " 0.956888 \n",
+ " 0.267864 \n",
+ " 0.022115 \n",
+ " 0.010191 \n",
+ " \n",
+ " \n",
+ " 0.42 \n",
+ " 0.977045 \n",
+ " 0.524563 \n",
+ " 0.047816 \n",
+ " 0.015946 \n",
+ " \n",
+ " \n",
+ "
\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": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "beta_array = linspace(0.1, 0.9, 11)\n",
+ "gamma_array = linspace(0.1, 0.7, 4)\n",
+ "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": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\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 `sweep_parameters`, we have a `SweepFrame` with one row for each value of `beta` and one column for each value of `gamma`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(11, 4)"
+ ]
+ },
+ "execution_count": 11,
+ "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 `SweepFrame`. With 11 rows and 4 columns, there are 44 elements."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "0.1 0.1 0.0846929424381071\n",
+ "0.18 0.1 0.7086227853695759\n",
+ "0.26 0.1 0.9007802517781114\n",
+ "0.33999999999999997 0.1 0.9568878995442757\n",
+ "0.42000000000000004 0.1 0.9770452570735504\n",
+ "0.5 0.1 0.9845958628261559\n",
+ "0.58 0.1 0.9874003453175401\n",
+ "0.66 0.1 0.9884042490643622\n",
+ "0.74 0.1 0.9887434214062726\n",
+ "0.82 0.1 0.9888495150524135\n",
+ "0.9 0.1 0.9888795705171926\n",
+ "0.1 0.3 0.0054435591223862545\n",
+ "0.18 0.3 0.015914069144794984\n",
+ "0.26 0.3 0.055379762106819386\n",
+ "0.33999999999999997 0.3 0.2678641677332422\n",
+ "0.42000000000000004 0.3 0.5245629358439001\n",
+ "0.5 0.3 0.6860504839161878\n",
+ "0.58 0.3 0.7883785563390235\n",
+ "0.66 0.3 0.8550657464101674\n",
+ "0.74 0.3 0.8994791356903035\n",
+ "0.82 0.3 0.9294693026191699\n",
+ "0.9 0.3 0.9498533103273188\n",
+ "0.1 0.5 0.0027357655411521797\n",
+ "0.18 0.5 0.006118341358324897\n",
+ "0.26 0.5 0.011639469321666152\n",
+ "0.33999999999999997 0.5 0.022114766524234164\n",
+ "0.42000000000000004 0.5 0.04781622666891572\n",
+ "0.5 0.5 0.13243803845818214\n",
+ "0.58 0.5 0.30326419264834004\n",
+ "0.66 0.5 0.4641102273186152\n",
+ "0.74 0.5 0.5884769725281787\n",
+ "0.82 0.5 0.6827496109784223\n",
+ "0.9 0.5 0.7545952983288148\n",
+ "0.1 0.7 0.001826769346999102\n",
+ "0.18 0.7 0.003782561608418833\n",
+ "0.26 0.7 0.0064266722107564345\n",
+ "0.33999999999999997 0.7 0.010190551933453973\n",
+ "0.42000000000000004 0.7 0.015945826561526877\n",
+ "0.5 0.7 0.025707925046422053\n",
+ "0.58 0.7 0.04500775311679983\n",
+ "0.66 0.7 0.09069406882939202\n",
+ "0.74 0.7 0.18979521165624091\n",
+ "0.82 0.7 0.3183431867354656\n",
+ "0.9 0.7 0.4369993744563133\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 `SweepFrame`, 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": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_sweep_frame(frame):\n",
+ " \"\"\"Plot the values from a SweepFrame.\n",
+ " \n",
+ " For each (beta, gamma), compute 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": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what it looks like:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/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('figs/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."
+ ]
+ },
+ {
+ "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": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "s_inf_array = linspace(0.0001, 0.9999, 101);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "c_array = log(s_inf_array) / (s_inf_array - 1);"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`total_infected` is the change in $s$ from the beginning to the end."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "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": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap06-fig04.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl8XGW9+PHPmSWZmezN0tANuj5tWQVvhQpKq4grlEXZFEVQ5OLGFa8IClLW64L8pCiyXEC0t1UECrKI0qogIlUKAi3frli6JWnTJpNZklnO748zSabTNJ22mSWZ7/v1yqszz5w55zsJnO88z3nO97Fs20YppZQqNq5CB6CUUkoNRBOUUkqpoqQJSimlVFHSBKWUUqooaYJSSilVlDRBKaWUKkqaoJRSShUlTVBKKaWKkiYopZRSRUkTlFJKqaLkKXQAQ80YUw78B7AVSBQ4HKWUUg43cAiwXES6s3nDiEtQOMnp+UIHoZRSakAnAS9ks+FITFBbAX71q1/R3Nxc6FiUUkoB27Zt44ILLoDUOTobIzFBJQCam5sZN25coWNRSim1u6wvvegkCaWUUkVJE5RSSqmipAlKKaVUUdIEpZRSqigVZJKEMWYW8DsRadrL6xOA+4DjgVbgKyLy1FAcO5lMsmnTJkKh0FDsTu0Hr9dLU1MT1dXVhQ5FKTUM5DVBGWMs4GLgh/vYdBHwN+BjwInAY8aYY0Rk/cHGsH37dizLwhiDy6UdyHyxbZtIJMLmzZsBNEkpVcRs28a2nX+TqX/dLgu3O7/nzHz3oK7HSTo3At8ZaANjzDTg3cApItIDLDXGPI6T2K452AB27drFYYcdpskpzyzLIhAIMHbsWLZs2aIJSuXEQCfWpG2DDcm9vNbbZu+xTaotaQMZryXTt7exATuZ9jzttaRN3/F3j6U/jt32S+/j/ljB+TfpvCEt/szYB//8/Z9lz8/f+5l6j5+p3Ovm5OPGMXV8XZ7+mvlPUHeJyLXGmJMH2WYmsFFE0sfg3gJmDUUAiUQCr9c7FLtSB8Dv9xOLxQodRtFLJm1iiSR20h7wxLrHSTTjRGvbNom9nVjJeJxxYrWxsZOQyDiZZh4ntHkrHW+8QU9HJ57qGipnzsDXPLrvpJ5+YrVtO/VZnP33nnwzP0fvyT6Z3DOxRHe0E/r3RuLhMK5AAN+48Xhra/aIayjFOjqIbN5CIhLB7ffjHzsGb03NkB5juByzO5Zg9b93jtwEJSJbstisEghntIWBwFDFYVnWUO1K7adS/d3btk13T4JId5xId5xwd5xINE6kx/m373nq9WhPfL/2n++TWqyjg66167A8HixPPXZnHPuF16mcEs7JcXc7XnkAuztORNZQOWVyzj5n+jFdPh/JWIyutetK6JhTKK+rwWVZWBZU+L0cNbUxJzHsTTFWkggB/oy2ANBVgFiU2qtYPEE4Lan0Pm5/+x3a/rWSro4QiYpqXOMOJVlR5fQIchFHAU5qkc1bnON5nVOI5fWQTLXn4pj7czzLsrAAl8s5sVqpE6xzorVwZbSxl9d2rnkDv8/GXWZhkcAqA7sniWf7Rppmnti3PfS/z+Xqff/u+0p/7tqtrff4zvOtT6wgWRXB4/NhWTEsIBmJ4O1ax/hTz3Ridlm7x5/2WXs/R//jfX/+Dff9L/FRXZRVOH0AC0iEQpTF32LyWV8c8r/l/ijGBLUSmGCM8YtIJNU2PdVesq699lp+/etf88QTTzB16tSD3t9VV11FVVUV11xzYJf1Hn/8cRYuXMiiRYsOOpZilkgk6Qj1sCvY7fx0RdkV7GFXVzfh6J5Dlbt90y+rwY7EsVet3u9kYVkWXo/LOcFg4XL1ngz3PEHtXP0mdeX0n0i9FnbMxtP2Dg1Tx/Vt57KA3U5QA5xYSTuJuvY8sfaezDf+60+U1VRjWXFczm7Btol3bGfSuz+0x0m498QKu5849zixknmid16TN56mvKmu/704x4vt2MHhZ5yzRzIYCm++8GvKGuuxrP6/s23b9GzfxuGzPzMkx8jkCW6mrCHjmOVuerZvYcr42pwcM9nWiq+hnvRfm1URINrSmpPj7Y+iS1AiIsaY14CbjDHfBmYDpwMnFDaywgmFQjz99NOcccYZPPTQQ8yfP7/QIXHaaadx2mmnFTqMIWHbNsFwjI6u7r5EtLMryq5gN8FwbL+uawz2Tb+iYRSBcg++cg/+cg8Bn/Nv+k9vm6/M03dC35c3X3qYsqZ6LKtnt8/Us30rh7//0/v1u8hW3dgAseBOPIGKvrZ4KIR3bBWTJ9YP+fHqD6knFgziqdj9eL7mRrye3Ex48o1u2uOYiXAY3+gB747RY+ZAUSQoY8wFwM9FpDLVdBZwN849UNuBi0XkjULFV2i/+93vmDFjBpdccglnn3023/jGN6ipqeGRRx7hiSeeoLm5mWeffZa6ujouueQSzj33XABefvllbr/9djZs2EA0GmX27NnceuutVFVV9e1727ZtzJkzh9///vdMmDABgMcee4xf/OIXPPLII9x999388pe/pLu7mylTpvCtb32Lo446ikceeYQHH3yQJUuW0N7ezre//W1eeeUVKioqOOGEE7juuuvw+XwF+X3tSygSo6U9TEt7iJb2CK07w/TE9n/pMJfLIlDuIeDz9iWY7a+1UVlTic8do9yyKXfZlFsJrPbtHDXvvBx8msKcYBrnzuGdhU7v2R0IkAiHSYTCjDk9N19a8n08PWZuj5mtgiQoEfkTUJv2/FfAr9KevwN8JB+xrJBWXl65jVg8mfNjeT0uZs1s5l1m/04cixcv5qKLLmLy5MkcccQRPPzww1x88cUAvPjii1x//fXccMMNPProo8yfP5+PfvSjeDweLr/8cq6//no++tGP0traymc/+1kWL17MJZdc0rfv5uZmZs2axZNPPslll10GOAnxtNNO44033uC+++5jyZIlNDU1cccdd3DbbbfxwAMP7BbfnXfeSVVVFS+++CKhUIgLL7yQZ555hnnz5h3cL2wI7FglrPnDC2xtCxKsrCc6ZiI9vsp9vzHFsiyqAl5qK8uprXJ+airLqa0spypQtkcvZ90rPqdn4cvoWTSPnGQBUD1tKuPPP5e2pcuItrTiG93EmNNPo3rawQ8/F8Px9Ji5PWa2iqIHVUivrm7LS3ICiMWTvLq6bb8S1Ouvv87WrVs59dRTATjvvPP44Q9/yEUXXQRAY2NjX49p3rx5fOc732Hr1q1MmTKFhx9+mEMPPZRwOExbWxujRo2itXXPceXTTjuNBx54gMsuu4z29nZefvllbr31VoLBIKFQiEceeYRTTjmFr3zlKwPeP1ZZWclf//pXnn32WWbPns1jjz025PeZda5es9v/QI1z5wz4P5Bt27TtjLCxJciaN9az7p+rwOPF8jRhB+PYbw58PchX5qGuqj8J9SakmspyPPtxc2IpJIv04+bzJJbv4+kxC6/kE9Qx0xrz2oM6Ztr+TdNcvHgxwWCQOXPmAE6ppvb2dpYuXQpAfX3/eH/v/V3JZBK3281f/vIX7r//fpLJJNOnT6ezs3PA6ymnnnoq8+fPZ82aNbz88svMmjWLhoYGGhoauPPOO7n//vv52c9+Rn19PZdffjmf/OQnd3v/5ZdfjsvlYsGCBVx55ZUcd9xxzJ8/n0mTJu3XZ92bztVreGfhItwVAcoanGsR7yxcxPjzz6V62lTC0RjvtATZuC3IxpYgkW5ninbnyrdhgOtBPVu2cOjksYweFXB+6gNU+r1DcnG9VJKFUvlQ8gnqXaZpv4fc8qWrq4snn3ySe+65hylTpvS133XXXTz00EOcfvrpe33vihUruP322/nNb37Tlyh6h/AyVVZWMnfuXH7/+9+zfPlyzjrrLABaW1sZNWoUDzzwAJFIhGeeeYarrrqKE088cbf3r169mnPPPZevfe1rbN26lVtuuYX58+fvMRR4oNqWLsNdEei7xuKpqKA7afHSky/Qtdli647QgIk3EYng8vmodicZ5UlQ701Q54nh37mRI+fk5noQaLJQaqhovZ8i9vjjj9Pc3MwJJ5xAY2Nj388555zDSy+9RCQS2et7g8EgLpeL8vJykskkTz/9NM8///xeqzicfvrpPP3006xatYoPfvCDAKxbt45LLrmE1atX4/f7qa+vp6ysDL9/99vUHnzwQW666SZCoRD19fX4fD5qhvBemGhLK+5AgFgS/h318peOAE9Fmvl7i82W7V17JCd/uQczoY7ZzfAx/zY+PKqLWdURJvt7qO7pIpDD60FKqaFT8j2oYrZ48WI+/vGP79E+bdo0Dj/8cG655RYmT5484HtPOukkPvGJTzBv3jxcLhczZszgU5/6FCIy4PYnnngiV199NSeffDKBgHPD3gknnMCll17KpZdeys6dOxkzZgw//vGPqa3d/X6Mb3/721x77bXMmTOHeDzOrFmzuP766w/y0/eLjGpmxY4km+3KvrWik/E47lSitCyLQ+oDTGiuZsLoKhrr/FiWRWfdSbyzcBFxl110s5OUUvtmDXXtqkIzxhwGbHjuuecYN27cHq+vWrWKGTNm5D2u4eC0007jqquuYvbs2Tk9TvrfYG+THxKJJOs2d/D62u1sXL8lrayOBzsex47HmXTsDI48dgpTxtUS8A1cXzHbyRVKqdzatGkTH/jABwAmisjb2bxHe1CKjRs38tJLLxEKhTj++OPzdtyBJj9s+NVigu/7GKvDZX2VGrw1NVROmezc7NodZFJ9Gcd+8ATGHr3vLxp6PUip4UsTlOL73/8+K1as4Ic//GFelyFJn/wQS8JaRvFW0iL2wltUz+xPPi6XxeFHHsaR895Nc32gZAvOKlVqNEEpFixYUJDjRltacdfXI+EyVobLidkWttspjglQ6fdyxOQGZk4ctdchPKXUyKUJShWEbdtsrxnDilaLsLu8vz0ep7rSx5zjxjP90Lq8r+CplCoeJZmgbNvWYaICiUci9HQG+fk1d7HdCpCIduP2u7E8HgLJbozVzuyzP0HtpKEvOKqUGl5KLkG53W5isRhlZWWFDmXES0SjxDqD2PEYlseLy1dOe3sHu8IJdpTVQNyp+OAliUm0MHNMBc0fKI4aYEqpwiu5BFVbW0tLSwtjx47N64SAUpOIRulpbweXC8vjIRZPsKutgy2trby1ssVZ58frYUqZzVENPcz8zysKHbJSqsiUXIJqaGhg06ZNe71hVQ2NWDAISRtcFnHboicJka4oK1/ZSEfUos6T5N1VYWrdSXradhQ6XKVUESq5BOVyufrWPVK58+b1N8KoBpZ3BdjS4/xn1tO+Cyvew3ETq5nm78FlQTxUHAujKaWKj45xqZyI1jfzh7byvuQEUOe3OKl7HVPsnVjYxEMhEqEwjXPnFDBSpVSx0gSlhty6Tbt4MTCNYI9NMhbHtmGyFWRO+XZmnDsPb1UVPdt34K2q6lsyQymlMpXcEJ/KHdu2eW1NG3/911asqmoqp0wmtmULx8Q3M7m5msa5qWT0wQ8UOlSl1DCgCUoNCdu2eeG1Lby2pq2vrWFsEx/95Czqa/yDvFMppQamCUodtGTSZtk/32HV2+19bYfUV/DR907EX67/iSmlDoyePdR+S1/CoqypiTfHHMOmnv4bnyePq+WUWRPwaJkipdRB0DOI2i+9S2TEgkE89fX8rRVe/9sbxDo6AJg5cRSnvudQTU5KqYOmZxG1X3qXyHAHKnglFGATlVgeD5HNWzhqSgNzjhuPy6V1DpVSB08TlNov0ZZW3IEAb4TL2RB1lsCwPB4OjW3npGPGahFepdSQ0QSl9otvdBOrd9qsCvcvkXGoq4v3jC3X5KSUGlKaoNR+6T7mBFZ0+fpuwB1thzk60ULTB7QahFJqaGmCUlnb2RnlhW1QMWUyLq+Xmp4gJzYlOfQCrQahlBp6Os1cZaUnluCpF9+mJ5bAW1NDXXMDn/rgNF2KXSmVM9qDUvtk2zZL//EOO4NRADxuFx977yRNTkqpnNIEpfbpjfU7WLtpV9/zOceNo7FOyxcppXIrr0N8xpijgbuAo4D1wOdFZPkA2x0P/AQwQBtwq4jcm89YlWNHR4QXXt3c9/yIyQ2YQ0cVMCKlVKnIWw/KGFMGLAEWA7XATcCzxpjqjO1cqe1+IiI1wHnAglRyU3mUSCT5w8sbSSRtABpq/Zx49JgCR6WUKhX5HOI7GfCKyO0iEhORRcCbwDkZ29UBTYBljLEAG4gDPXmMVQEvr9zG9l0RwLnu9CEtYaSUyqN8DvHNBFZltL0FHJneICI7jDELgAeB+wE38DURyXyvyoHeQrBbt+7kedcEfGPH4K2pYfZRhzCq2lfo8JRSJSSfX4crgXBGWxgIpDekhviiwPmAH6fndZ0x5kN5iLGk9RaC7e4M8pp3DIlYjK6162iwohw5uaHQ4SmlSkw+E1QIJ+GkCwBdGW1nAu8VkUWpocA/A/cBl+YhxpLWWwh2vauOjoQbl9eDx+tmRsvrWsZIKZV3+UxQK3Fm5aWbnmpPNx4oz2iLA7EcxaVSoi2tRMsreDPUP5R3ZHUCz/aWAkallCpV+bwGtQxn4sMVwALgLJzp5o9mbPcscIsx5ovAPcCxwBeAS/IYa0nyjW7i5RaLROp5jTvJJHsn5aObChqXUqo05a0HJSI9wEdwElM7cA0wT0TajDFXG2PeTG33Js4w36XALmAhcJWILMlXrKUqfuxsNkXcfYVgj3a3Y4fDNM7VQrBKqfzL6426IvIGcOIA7TcDN6c9fwp4Ko+hlTzbtnm1w0vllMlENm9hTE87hzT7aJz7ES0Eq5QqCC0WW8J6p5RHW1rZVj2WLVWT8NbU4B9Vx9kfnk5loKzQISqlSpjedVmieqeUx4JB3PX1vLbTomvtOmIdHRwzrVGTk1Kq4DRBlajeKeWeigo2RMuJusuwPB7srZs51uikCKVU4e11iM8Y875sdyIifxmacFS+RFtaKWuoJ27Tt3y75fEwuaeFMq+7wNEppdTg16D+lPHcBiwgCSQAb+pxDxnVIFTx841uIhYMss6qI2o7N+H6kj3MGFNR4MiUUsox2BBfVdrPRcDrwAlAuYiUA8cAy4Erch2kGnqNc+fQ0xVmVYcL24ZkLM7UZDvNH9Ap5Uqp4rDXHpSIhHofG2NuAM5KX7tJRP5ljLkceBr4eU6jVEOuetpUInM+Qc+fV5GMRKis9HHS2R/XKeVKqaKR7TTzapyq4pmq9mMfqogkkzYSLqN65gwATjp6LHXTGgsclVJK9cs2uTwM3J8qU7QC51rUe4DbgF/kKDaVQ+s276Iz5Cyx5SvzMHOSrpKrlCou2SaorwA/w1nptvc9MeBe4Js5iEvlkG3bvLq6jVhHB5HNWxgda2Xj1hdpnDtHh/iUUkUjq/ugRCQiIp8DGnB6Tu8BGkTkyyISz2F8Kge27QizacNWutaug3gP00eXEwsGeWfhIjpXryl0eEopBezHjbrGmCrgM6mft4H3GWMm5igulUP/WttGZPMWLI+HiZXgd4OnogJ3RYC2pcsKHZ5SSgFZJihjzDRAgK8Cl+FMmjgPeM0YMzt34amh1hWJsW5TB4lIBMvjYaq/u+81dyBAtKW1gNEppVS/bHtQ/w/4tYhMB7oBROQzwEPAD3IUmxpCnavXsO6uu3nmpp+y682VWG439USo9ST7tkmEw/h07SelVJHIdpLECcDXBmi/DXht6MJRubD1j8+x6f8Wk0wkWFdzNHFfGDueYHx3C/GKAO5AgEQ4TCIUZszppxU6XKWUArLvQUWAgb5aTwU6hy4cNdQ6V69h0/8txga2VzQRTrpIhEL4PHBovQ9vVRU923fgrapi/Pnn6iw+pVTRyLYH9SBwpzHmS6nnjcaYI3CG/n6Vk8jUkGhbugw7nsBdWcE77losy4WdhLHhVqwATP7SFwsdolJKDSjbBPUdnGKxS4Fy4G9AHPgpztLtqkhFW1pxV1YQjdu0eCoBsFwWYzq34Dv8mAJHp5RSe5ftfVBxEfk2UAccCbwLqBORrwO1OYxPHSTf6CbKR41ik11J0rYBqI0FqXLFaZyrhWGVUsUrqx6UMSYBNItIG/BmWvsEYCVQmZvw1MFqnDuHdxYuYtuoCVgRGzsWY3x8J+POO0evNymlitpgCxaeB5yRemoB9xpjujM2OxRoz1FsaghUT5tKxelnEXr8NdxEKKuv4/1nf5iGmabQoSml1KAG60H9ATgFJzmBM5Mvkva6DfwdeCAnkakhs8Vd21e1fOr4WhpmHlbYgJRSKguDrQe1Hfg8gDHmbeAHIhLufd0Y49E6fMXPtm3WbtrV93zahLoCRqOUUtnL9j6oHwN3GWOuTmtbb4y5zxijy70XsW07wn3LapSXuZkwuqrAESmlVHayTVB3AIcDz6S1fQY4CvjRUAelhk5672ny2Brc7qzrAyulVEFle7b6OHCRiLzS2yAifwYuBc7KRWDq4Nm2zbq0BDV1vA7vKaWGj/35Ou3bS3vZUASihl5Le5iuSAxwVs0d06h3Ayilho9sE9QTOKWOjuhtMMbMwBn6eyoXgamDt25zR9/jSWOrcbusQbZWSqnikm2poyuAx4B/pe6FsnFKHj2Lsxy8KjK2bbN+twSlBT+UUsNLVglKRHYC7zfGzARmAj3AahF5K5fBqQPX3hmlo8u5r9rrcTGuSYf3lFLDS7Y9KIwxLuAwYDxwPzDNGFMtIlkvt2GMORq4C2f233rg8yKyfIDtDgF+BswBosDdIvLdbI+jYMOW/j/LhOZqPDp7Tyk1zGS75PshwKvAIpwVdEcBVwGrUteistlHGbAEWIxTYPYm4FljTPUAmy8BtgKjgeOBzxpjzs/mOMrx9tb+BDVpzEC/YqWUKm77s+T7SqCR/nJHnwZeSr2WjZMBr4jcLiIxEVmEU3j2nPSNjDHvASYBXxWRqIhsSL13WZbHKXnhaIyWdqfoh2VZHNqsCUopNfxkO8Q3F3ifiHQb4xQZFZGwMeYanHp82ZgJrMpoewtn+Y50xwGvA98zxnwOZ4jvpyKiNwTvQ+fqNbQtXcbqzUE6PGPwjx3DhElj8JVnPZKrlFJFI9selMXA90E14EyYyEYlEM5oCwOZpZJGAScBMZye1JnAlTrEN7jO1Wt4Z+EiYsEg2wMNJGMxutauozEZLHRoSil1QLJNUL8FfpS6FmUDGGOOAu7EuV6UjRDgz2gLAF0Zbd1Ap4h8T0S6ReQ14F6cRKX2om3pMtwVAVyBClpiHlxeD5bHQ2DVK/t+s1JKFaFsE9R/AduAzTg9oZXACmBD6rVsrAQyFyGanmpP9xYQSE2q6KVjVPsQbWnFHQiwK+6mx3ZuyPWXufHt2FbgyJRS6sAMtmDhF4GFItIlIl3AealrTjNS71slIqv341jLAMsYcwWwAKeG31HAoxnb/QFow+mxfQMnqV0MXLYfxyo5vtFNxIJBtjGqr63JDuFvbipgVEopdeAG60HdDtSBs+S7MaZRRNaLyJMismQ/kxMi0gN8BCcxtQPXAPNEpM0Yc7Ux5s3UdlHg/TjXn7biVFD/voj8dn8/XClpnDuHRCjMllAS24ZkLE5DvJPGuXMKHZpSSh2QwYbOtuCsAfUyziSJbxpjMq8XASAi87M5mIi8AZw4QPvNwM1pz9cDH8tmn8pRPW0qzed8il2/eYVkOILb7+ddZ32c6mlTCx2aUkodkMES1OeAa3EShY2z/PtAK+jaQFYJSuVWV+0hVM5w7ptuqPXTfETmJT+llBo+Blvy/QXgQwDGmA3AKall4FWR2tTW38HV2ntKqeEu22KxEwGMMd7Ue6yM1zPvb1IFsKm1/56nsbr2k1JqmMsqQaXKD90NHJHxkoUzxOce4rjUfor2xNm+Kwo45Y10cUKl1HCX7f1F/w/oAOYBWVcvV/mzdXsI27YBaKz1U+7V7wxKqeEt2wR1JHC8iLyey2DUgdvSFup7PFavPymlRoBsE9QqYAxOEVdVZDpXr+H1J//Ozs4e3H4/NePcOH8upZQavrJNUHcA9xhj7gDWkFEgVkSeGurAVHY6V69hw68WsyMxAZfPhx2LEXtmCZ31Pr0HSik1rGWboO5P/fs/A7ymkyQKqG3pMjp81Vg9zp+y2ufCX+6nbekyTVBKqWEt22nmul54kYq2tNLu7x/Oa/TGcQcCRFtaCxiVUkodvMGKxQZ6728yxmSu2bQbvQ+qcHyjm2jbluy7M63BmyARDuMbrUVilVLD22A9o6Axpvcs1wUEB/jpbVcFUj/nZLZHLZKxOLYNtbFOEqGwFolVSg17gw3xzcWpOg6gZ7silWgej2/KFCKbt+CNhqgZXUHTGVokVik1/A1Wi+/PAz1WxWXbjjDemhq8NTVMHlvDlNkTCx2SUkoNCZ38MMxt29F/g+7o+ooCRqKUUkNLE9Qw19LePz+ledSgc1mUUmpY0QQ1jPXEEuwMdgPgsiwa6/wFjkgppYaOJqhhrHVnuK9A7KgaH16P3i+tlBo5sl1uoxH4DnAc4GXP9aBmDX1oajCdq9fw6hN/ZWdbErffz8TjphQ6JKWUGlLZljq6D3gP8Et0uY2C61y9hncWLqLNasblqyAZi2G/9Bc6p9Xq9HKl1IiRbYJ6H3C6TjcvDm1Ll+GuCNAZDWAlwfJ6qC/3aP09pdSIku01qJ04CxaqIhBtaSXuqyCUdEZaXUBdZZnW31NKjSjZ9qCuBRYYY65g4OU2tBZfHvlGN7FpZ7Tvea0nARGtv6eUGlmy7UHdhnMN6iVgB3vW5FN51Dh3Du2hRF/9vepEWOvvKaVGnGx7UGfnNAqVtc7Va2hbuowdUYjHu7DcHhrGlTH+Y+fq9Sel1IiS7XpQfwYwxviBqTg9r3Uior2nPOqdveeuCBCuGY2nO4kdjzP5fbM0OSmlRpyshviMMW5jzP/gTJZYAbwCtBlj7jLGZNsLUwepd/ae7a+gK+nC5fXg8nhIvPzXQoemlFJDLttrUDcBnwYuBManfi4EPoozgULlQbSlFXcgQEeiv2JEjc8i1qqz95RSI0+2vZ8LgUtE5Km0tl8bY4LA3WiSygvf6CZiwSC7XHV9bdWJiM7eU0qNSNn2oCqBtQO0rwcahi4cNZjGuXNIhMLsCMWwbUgFuBjeAAAaEklEQVTG4lTFQjp7Tyk1ImWboJYDlw/Q/mXgn9kezBhztDHmb8aYkDHmdWPMf+xj+1pjzEZjzOeyPcZIVj1tKuPPP5cuTwXJaBSX14v5xCk6QUIpNSJlO8T3LeBPxpiTce6FAjgeOAz4cDY7MMaUAUuA23FKJ50FPGuMOVRE9lbf7y5gbJYxloSqqVNgRoS6eBKAw442BY5IKaVyI6selIj8AzgW+APOBIkG4Alguoj8LctjnQx4ReR2EYmJyCLgTeCcgTY2xnwWqAZez3L/JaEz1EMslZz85R4CPm+BI1JKqdzIeoq4iKwGrjyIY80EVmW0vQUcmbmhMWYicB0wG3jmII454uzo6C9xVF+jCxQqpUauvSYoY8zLwKkistMYsxyw97ZtlutBVQKZNfvCwG7rlBtj3DjLelwpItuM0SGsdO2d6QnKV8BIlFIqtwbrQT0JdKce/24IjhUCMr/yB4CujLbvAiIijwzBMUecHR2RvseaoJRSI9leE5SIXJ/2dBnwNxGJpW9jjCnHuVk3GyuBKzLapgO/yGg7FxhjjDkz9bwK+KkxZpaI/GeWxxqx2tOG+EZVa4JSSo1c2V6DWgY0A20Z7ZOAhezZM9rbPqzUkh0LcGbxHQU8mr6RiExPf26MeRW4XUQeyDLWESuRtNnZ1d33XBOUUmokG+wa1GVAby/KAlYaYzKvQ1Xi1ObbJxHpMcZ8BGfq+HzgbWCeiLQZY64GLhCRw/cz/pLS0dVNMun8CSr9Xsq87n28Qymlhq/BelD34Fw3cgH/C9zA7qvq2jjXj57L9mAi8gZw4gDtNwM37+U9x2S7/5EufYLEKL3+pJQa4Qa7BhUndX3IGLMBeBGoEpH2VNt/ACtS26k82Nmp15+UUqUj21JHbYAA305rewJ43RgzecijUgNq79TrT0qp0pFtgroDeJ7+a1IAE4G/40x4UHmwM9jfg6qr0gSllBrZsk1Qs4D5ItJ3z5KIRIAbgffmIjC1u2TSZlewvwdVV1VewGiUUir3sk1Q7cARA7RPA3TZ9zwIhnuIJ/pr8PnKdSFjpdTIlu1Z7l7gbmPMeOAfODP4jsWp+nBfjmJTaXbvPenwnlJq5Ms2Qd2U2va7QGOqrRX4MfCDHMSlMuyWoKp1eE8pNfJllaBEJIlTXfw6Y0wD0DPIGk5qCHWuXkPb0mW8vqmHTm89/rFjqK0cU+iwlFIq57K+kGGMeRfOkhnu1HMLKAeOE5FLcxNeaetcvYZ3Fi7CXREg4m8kGYnRtXYd3sNHAU2FDk8ppXIqqwRljLkGp5JEF1CBU1GiJvXyU7kJTbUtXYa7IoCnooKuqBuX1yIJxP/5EpywxzJaSik1omQ7i+9S4JsiUg1sxSnyOhZn+fflOYqt5EVbWkn2xGhf+Ra7WnbQs3MXVjKJe3tLoUNTSqmcyzZBNQO/TT1+FThBRLYB/w18JheBKXCVl9O1eg3BuAvL7cFOJvHubMXj00kSSqmRb39KHdWnHq8Gjk493gzoFfucsQGbEF7nsQ0VyW4GWdxYKaVGjGwT1BKc+6COwVnX6UJjzPuB/wL+navgSl2yu4eKadOIlAWwEwkst4tRo0eR7O4pdGhKKZVz2c7iuxK4DaeaxK9wFht8DmfSxPm5CU35RjcRCwZJjDmE8m4vANXuXfgadAafUmrky7YHdRZwjYj8UkRsEfkcUAs0iIjO4suRxrlzSITCdEbj2DYkY3H83V00zp1T6NCUUirnsk1QPwEa0htEpEvXgsqt6mlTGX/+uUQ8fpLRKC6vl2lnf4LqaVMLHZpSSuVctgnq78AZuQxE7alz9Rq2PreMrq4obr+fwLixjDlyeqHDUkqpvMj2GlQSuNkY8x1gAxBJf1FEZg11YKWut4pEl68Kl6+JZCyGvfYtutYeoj0opVRJyDZB/T31o/Kkt4pE1FOJ1Q2W10OVx0Xb0mWaoJRSJWGvCcoY40oViUVErt/bdio3oi2tlDXU0xXpH4Wt8nuItmwqYFRKKZU/g12DihljdpvPbIx5nzFGyxjkgW90E4lwmFCi/0/kj4XxjdYp5kqp0jBYgrIGaPsdTg0+lWN9U8wj/VPMfd0hnWKulCoZ2c7i6zVQ0lI50DfF3Ns/xXzqGR/T609KqZKR9XpQKv+qpk7BMz1MXdKpvTf2SFPgiJRSKn/2twel8igUjZNIJSdfmYcyr7vAESmlVP7sqwf1OWNMV8b2nzbGbE/fSER+OuSRKTpD3X2PqyvKChiJUkrl32AJaiNwWUbbNuCijDYb0ASVA8FQf9VyTVBKqVKz1wQlIoflMQ41gM60BFWlCUopVWL0GlQRC4a1B6WUKl15ncVnjDkauAs4ClgPfF5Elg+w3SnArcBUoBX4gYj8PJ+xFoPOUKzvcXVAE5RSqrTkrQdljCnDWZl3Mc5aUjcBzxpjqjO2Gw/8Frgxtd15wC3GmFPzFWuxSO9B6RCfUqrU5LMHdTLgFZHbU88XGWO+DJwD3JO23WHAQhF5NPV8uTHmT8B7gd/nJ9TCs22brvQEFfAWMBqllMq/fCaomcCqjLa3gCPTG0TkeeD53ufGmFHAScBDuQ6wGHSuXkPb0mXs3LadndZE/GPHUNVYj9ej90AppUpLPidJVALhjLYwENjbG4wxNcDjOEt9LMldaMWhdw2oWDBIvLaBZCxG19p1lEU6Cx2aUkrlXT4TVAjwZ7QFgK4BtsUYMw14CWgBzu5d+mMk610DylNRQTjpxuX1YHk88Pa6QoemlFJ5l88EtRLILCY3PdW+G2PM+3B6TY/hJKdo7sMrvGhLK+6A06EMJ526vJbHg6drVyHDUkqpgsjnNahlgGWMuQJYAJyFM9380fSNjDGTcZb1uEZE7shjfAXnG91ELBh0elCpdaDseJzaUVUFjkwppfIvbz0oEekBPoKTmNqBa4B5ItJmjLnaGPNmatPLgSqcqeVdaT//k69YC6V3Dah4KEQ4YZGMxbHjcca+59hCh6aUUnmX1xt1ReQN4MQB2m8Gbk49/i/gv/IZV7HoXQOqbekyOjdGcZVX4z/sUJpnTCl0aEoplXe6HlSRqZ42leppUwkseQNXTxyASr/eA6WUKj1ai68IxeJJoqnk5HJZBHz6PUIpVXo0QRWhrkh/BYlKvxfLsgoYjVJKFYYmqCLUFe4vEqvDe0qpUqUJqgiFIv0JqsKvRWKVUqVJL24Uid4afNGWVtZXjiNWMxFvTQ2VWiRWKVWitAdVBNJr8JU11BMMddO1dh2xjg4d4lNKlSxNUEUgvQafZVn0eP1YHg+RzVs0QSmlSpYmqCKQXoMPIJx0YXk8JCIRKnUlXaVUidIEVQR8o5tIhPtXIokkLOx4HLffT4X2oJRSJUoTVBFIr8EXT9pEehLY8Tj+sWMJlOs8FqVUadIEVQR6a/B5q6robNuFy+ulcspk6prrcbn0Jl2lVGnSr+dFoq8G3/YQ1cvWAOjwnlKqpGmCKrD0+598o5sIHnl832uaoJRSpUwTVAH13v/krghgeTzsXPEqa19ew65DjqBi4mFUTG4odIhKKVUweg2qgHrvf7JjcULr1gPQ46sgFgzStXYdVntrgSNUSqnC0QRVQL33P0W2bMHyenB5PHS7yyGZxPJ46Hn9tUKHqJRSBaMJqoB6739KRCJYHme0NZq0sDweLI8H187tBY5QKaUKRxNUAfXe/2R5PCRjMZKxGFHbjTsQwI7HqWmqK3SISilVMJqgCqj3/qeKiRNJhiNgWcRrG7BcLux4nPFzTip0iEopVTA6i68AMqeWjz1zHmPPnMfW55YR/7eNu9xLxcTDaJw5rdChKqVUwWgPKs8yl9aIBYO8s3ARAM2f+Sx1xx1L9cwZ1DY36FLvSqmSpj2oPHv7wV8QWrcBOx7HVVaG/9AJlI+qo23pMvxnn9+3XcCnfxqlVGnTs2Aebf3jcwRXCZbH7UyMiMcIrVmLPWUKiXAEOxLv21arSCilSp0O8eXR1iVPOFPIXW4sl4XL4wGXReTtt/GNbiLcHevbVquYK6VKnSaoPIrt2oWnqgqSSeyk7TRaFsmeHhrnziGU1oMKaA9KKVXi9Gt6jqXP2LOTSYjF8NZUEw+FsRNxsKG8oYHqaVOJ/GNj3/u0B6WUKnV6FsyhrX98jk3/txg7nsBdWYGnpobubS1AJZ7aGpLd3djdPYz91FkAu/Wg9BqUUqrUaYIaYlv/+BxblzxB9/YdJLujuH1+vHW12PE4dixOefNo4h0dJIJBvLW1HHLeORzywQ8A7H4NyqcJSilV2jRBHaTO1WvY/MhjdK1ZSzwSIRmN4qmsdF5M2iTCYVxeL57KCpKAZVlUTZvG4dd9Z499RaJp16B0mrlSqsTpWTBLTiJ6lI6Vb2F3d+PyleMfN454ZyfxziBWeRnJaBSSSRLhMFhgud3YiQTxri48lRVYHg+JrhC+I5v22L9t24TTEpRfr0EppUpcXs+CxpijgbuAo4D1wOdFZPmBbjfUeic0dK3fQCISIWmDywIsi9iuDhLRKNhJsCwSoTBdbwm2ZeGtqsLt9fa9ZieTWJaF7bIgaWEnEti2TaK7G8vjpnHunD2OHe1JkLSdmX3lXjcet06wVEqVtrydBY0xZcASYDFQC9wEPGuMqT6Q7YZabwmiyOYtdLdtp6ejg+5tW4l1dBLdto1EOIwdiwHO/UuWx+PMyovHSXZ3A2C53M7ObCezuSwXWBaW200iHMYCxp13DtXTpu5x/HC0//qTX4f3lFIqrz2okwGviNyeer7IGPNl4BzgngPYbkj1rm4b/vdGXGVeksHuvqrilg3JRAIAO5EArwfL1V8nz0lc4K6sIL6rA1wWlseLy+vFDocpP6SZ2sNn0jh3zoDJCdhteC9QrhMklFIqnwlqJrAqo+0t4MgD3G5IRVtaKWuoJxGJ4PL5nMTkcmMn4lheD8TjYAHJJIBzo63H49x0i00iFsNVXo7l80HSSWbemmomXHhB3yy9wZSXufsej6rx5eQzKqXUcJLPBFUJhDPawkDgALcbUr7RTcSCQdx+P8lYrK9WnsvjxV1eTjIWw04kwYJkPA5JG3d5Gd66Ospqa4hubQGg7l1HM/bMM/baU9qbxlo/s48cw66uKO+eMToXH1EppYaVfCaoEODPaAsAXQe43ZBqnDuHdxYuoqyujvCmzeBxY/d0O9eagMCECXS3bScRj2MlErgqyqmeMYOxZ87b72Q0EMuyOHb6nrP7lFKqVOUzQa0Ershomw784gC3G1K9q9u2LV1GorvbmcVXXYPLArffT+WkiUy69AtDkoyUUkrtWz4T1DLAMsZcASwAzsKZRv7oAW435KqnTdUEpJRSRSJv08xFpAf4CE7CaQeuAeaJSJsx5mpjzJv72i5fsSqllCq8vN5wIyJvACcO0H4zcPO+tlNKKVU6tFyBUkqpoqQJSimlVFEaiTV13ADbtm0rdBxKKaVS0s7J7sG2SzcSE9QhABdccEGh41BKKbWnQ4B12Ww4EhPUcuAkYCuQKHAsSimlHG6c5JT1yhSWnVriQSmllComOklCKaVUUdIEpZRSqihpglJKKVWUNEEppZQqSpqglFJKFSVNUEoppYqSJiillFJFSROUUkqpojQSK0lkxRhzNHAXzmKI64HPi0jWdziPdMaYU4BbgalAK/ADEfl5YaMqPsaYWuBfwLUi8kCBwykaxphDgJ8Bc4AocLeIfLewURUPY8zxwE8AA7QBt4rIvYWNqviUZA/KGFMGLAEWA7XATcCzxpjqggZWJIwx44HfAjfi/H7OA24xxpxa0MCK013A2EIHUYSW4JQbGw0cD3zWGHN+YUMqDsYYF87v5yciUoPz/9eC1JdmlaZUe1AnA14RuT31fJEx5svAOcA9BYuqeBwGLBSRR1PPlxtj/gS8F/h9oYIqNsaYzwLVwOuFjqWYGGPeA0wC3isiMWCDMeZkIFLQwIpHHdAEWMYYC7CBONBT0KiKUEn2oICZwKqMtreAIwsQS9ERkedF5Eu9z40xo3AK8K4oXFTFxRgzEbgO+HyhYylCx+Ek7e8ZYzYbY9YBZ4jI1gLHVRREZAewAHgQiOEUT71aRDLPSSWvVBNUJRDOaAsDgQLEUtSMMTXA48DfcYYlSp4xxg38ErhSRHThsT31fqGJ4fSkzgSu1CE+R2qILwqcD/hxRnSuM8Z8qJBxFaNSHeIL4fyHkS4AdBUglqJljJmGk5RWAheISLLAIRWL7wIiIo8UOpAi1Q10isj3Us9fM8bci5OoFhYsquJxJs7w5zdTz/9sjLkPuBR4tnBhFZ9S7UGtxJk9k256ql0Bxpj34fSaHgPOFpFogUMqJucCZxtjdhljduEMDf/UGPPTAsdVLN4CAqnJSL1K9cvwQMYD5RltcZwep0pTqv/RLMO5QHkFzljwWTjTzR8d9F0lwhgzGfgdcI2I3FHoeIqNiExPf26MeRW4XaeZ9/kDztTpHxljvoHzZfBi4LKCRlU8nsWZFftFnElZxwJfAC4paFRFqCR7UCLSA3wEJzG1A9cA80SkraCBFY/LgSqc/4m60n7+p9CBqeKX6m2/H+f601bgGeD7IvLbggZWJETkTZxhvkuBXTjDnleJiF7jzaAr6iqllCpKJdmDUkopVfw0QSmllCpKmqCUUkoVJU1QSimlipImKKWUUkVJE5RSSqmiVKo36qphzBhTAVyFU31+PLANeAS4QUR2DdExKoFzROS+IdiXF/iCiBRFpQljzOeAH4pIQx6OdQVQKyLX7WO7K4EKEbk+1zGp4UN7UGpYSa3Z9RLwQeCrOJXpvwScirOmV2aNxQP1DYau8sH5wPwh2tewkVpX7GvAD7LY/A7gwlT9R6UATVBq+LkV57/buSLyjIhsEJHf41QGORq4aIiOYw3RfoZ6X8PJfwMPi8g+izCLSDfO8hNX5zwqNWxoJQk1bBhjynGWn/+WiNw1wOuzcaqM70gtBPcV4MvABJwCpleLyFOpbR/AWWLFD5wN7ADuFZEbU0Ng96fteiJObbkfAPOARpxhxZ+LyI2p/blxTq5fwFluYnnq2I04tR97zRGRP2XE/T2cWpDrcdaX6gZ+A1whIolUrJUicnbae97GGaZbkHr/kcAanF5fD3AD8ArOsuuTgL/gVKRv7x3iA27D6SmS2u46EUmk9v+e1OvHAe/g1Iz7oYgkU+//Kk5x5dNwyhjdmPGZKnHKHJ0qIi+m2vzAzTgryPqBPwH/KSKbU68fAfwTGKdlxxRoD0oNL5NwVrBdPtCLIvJiajE4cJLF9cC1OCf/x4DHM5bVvgTYBLwbuBe4wRhzHLAY+BHwGnAIzgn6NuAEnARlgJ+kbU/qOF8Fvg68K/WeJ4G/pdraU/t6cS+f7eNAbeoY1+LUQ5yXxe8k/f2VOIVH70rFuwD4T+BDOInm62nb1+MMi84FLsSpC3cVgDGmCWfl5GdwEt9XU/H8d9r73wUEU8f7xQDxvB9I4Hz+XncBpwOfxlkG3ofzuwZARN7A+SLwgf343GoE0wSlhpO61L8dg22U6j19HbhJRBaJyOrU2kR/YPeT7DoR+a44bsRJIseJSARnbbC4iGxL9Sr+ClwsIi+LyHoR+UFqm5mp410G3Cgij4jIGpwT+m9xiu52AHZqX3tb1juC05sQEbkHJzket5dtBxIFvi4i63Cu57iBBanVkf8KPAUcnrZ9Avi0iLwmIk8CN+IkM1KxLxeRG0RkjYg8DXwbuDLjmNeLyFoR2ThAPO8GVomIDX0LX56P0yv8Y2r12C8BL2Qsy7Ey9V6ldBafGla2p/6tG3QraAIa2P3bO8ALwCfTnq/JeD0IePeyz18CHzfGfAaYBhyD02Nxp47VSFrPTkSCpIbPjMlcemxA/85IXp2DxDKQt0Uknnrcu1r0+rTXo6k4e20WkXfSni8HxhhjanES2cnGmPRrRy7Ab4yp7z3GPlYTHk3/3wuc35mH3X9HG0j12tLswPn7KaUJSg0ra3FOYP/BAMN8xpjbcK57/Hwv77fYfdRgoN7M3iY0/C/OzMFfpH4uw+nlpO/nYC7oDhbLQPvN/H93oMXuBlsBOZHxvPf3Ekvt+7fAdwZ4X2/vNTLIvnuPnf67zPZ35MZJpkrpEJ8aPlJLzj8EfMUY40t/zRhzGM51lG4R6QS24FzPSTcbZ7JENvpOpMaYKuAzwIUicrWILMY54dYAloh04EzeODbtPX5jTEtqssHBzkTqPVbvvis5+F7GOGNMek/0eJxeXAhYBUxPDd+tFZG1wAyca2ODJb1023B6lb3W4yTF9N/RocaYdmPM2LTtGlLvVUp7UGrYuQH4GLDMGHMdzjDd0cD3gX8Bd6e2uxWYb4zZhDMz7BycSQEnZ3mcLqDZGDMJZ8JDCDjTGLMBGIMzo8+if+nuHwPfTc2uW42zCGYHsAIYB1QaY2YC61ML+u2P5cDFxph5OMnjevbsAe0vN7DQGHMVzizFq+mf4n0n8FVjzE9Sj8fj9EqXpGbxZbP/fwJXGWPcIpIQkaAx5l7gNmNMEGf470fAv3pn8aUchTO5QyntQanhRUTagROBf+CcNFfinOgeAz6cdvJfgJO0vg+8jjN77OMi8nyWh3oY55rUSpzrTefjDPGtxBniexZn4kHvRIYfAPfhzAZcgTNj72Op60rPpdpW4CTX/fUQ8EDquM8Dr+JM2jgYq3CSyF9wkvqPSQ2NisgmnGT+bpxhzIdwZtt9fcA9DWwZTgJPn/DwjVT7ozizGYM4XxwAMMYcjjOp5A8H8oHUyKP3QSmlcsIYcyeQEJGvZrn9LUCTiFyc28jUcKE9KKVUrnwfOCs1xXxQqZt4z0+9RylAE5RSKkdE5N84Q4ffzGLzLwMPiojkNio1nOgQn1JKqaKkPSillFJFSROUUkqpoqQJSimlVFHSBKWUUqooaYJSSilVlP4/h2zGxT3KpycAAAAASUVORK5CYII=\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('figs/chap06-fig04.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The agreement is generally good, except for values of `c` less than 1."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Exercise:** If we didn't know about contact numbers, we might have explored other possibilities, like the difference between `beta` and `gamma`, rather than their ratio.\n",
+ "\n",
+ "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": 19,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_sweep_difference(frame):\n",
+ " \"\"\"Plot the values from a SweepFrame.\n",
+ " \n",
+ " For each (beta, gamma), compute 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": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap06-fig03.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot_sweep_difference(frame)\n",
+ "\n",
+ "decorate(xlabel='Contact number (difference method) (beta - gamma)',\n",
+ " ylabel='Fraction infected',\n",
+ " legend=False)\n",
+ "\n",
+ "savefig('figs/chap06-fig03.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "ANS: So this isn't really a solid line, so finding the fraction infected with this method doesn't really work."
+ ]
+ },
+ {
+ "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.\n",
+ "\n",
+ "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": 21,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "9.211261 0.999900\n",
+ "4.642296 0.989902\n",
+ "3.987365 0.979904\n",
+ "3.612133 0.969906\n",
+ "3.350924 0.959908\n",
+ "3.151808 0.949910\n",
+ "2.991711 0.939912\n",
+ "2.858363 0.929914\n",
+ "2.744467 0.919916\n",
+ "2.645332 0.909918\n",
+ "2.557767 0.899920\n",
+ "2.479505 0.889922\n",
+ "2.408879 0.879924\n",
+ "2.344627 0.869926\n",
+ "2.285771 0.859928\n",
+ "2.231541 0.849930\n",
+ "2.181315 0.839932\n",
+ "2.134590 0.829934\n",
+ "2.090947 0.819936\n",
+ "2.050040 0.809938\n",
+ "2.011573 0.799940\n",
+ "1.975299 0.789942\n",
+ "1.941002 0.779944\n",
+ "1.908499 0.769946\n",
+ "1.877628 0.759948\n",
+ "1.848249 0.749950\n",
+ "1.820238 0.739952\n",
+ "1.793487 0.729954\n",
+ "1.767898 0.719956\n",
+ "1.743384 0.709958\n",
+ " ... \n",
+ "1.181034 0.290042\n",
+ "1.173263 0.280044\n",
+ "1.165630 0.270046\n",
+ "1.158132 0.260048\n",
+ "1.150765 0.250050\n",
+ "1.143524 0.240052\n",
+ "1.136407 0.230054\n",
+ "1.129409 0.220056\n",
+ "1.122527 0.210058\n",
+ "1.115758 0.200060\n",
+ "1.109099 0.190062\n",
+ "1.102547 0.180064\n",
+ "1.096099 0.170066\n",
+ "1.089751 0.160068\n",
+ "1.083503 0.150070\n",
+ "1.077350 0.140072\n",
+ "1.071291 0.130074\n",
+ "1.065323 0.120076\n",
+ "1.059444 0.110078\n",
+ "1.053651 0.100080\n",
+ "1.047943 0.090082\n",
+ "1.042317 0.080084\n",
+ "1.036772 0.070086\n",
+ "1.031305 0.060088\n",
+ "1.025914 0.050090\n",
+ "1.020598 0.040092\n",
+ "1.015356 0.030094\n",
+ "1.010185 0.020096\n",
+ "1.005083 0.010098\n",
+ "1.000050 0.000100\n",
+ "Length: 101, dtype: float64\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(frac_infected_series)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.158096819542062"
+ ]
+ },
+ "execution_count": 22,
+ "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)"
+ ]
+ }
+ ],
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap15mine.ipynb b/code/chap15mine.ipynb
new file mode 100644
index 00000000..9a203a9f
--- /dev/null
+++ b/code/chap15mine.ipynb
@@ -0,0 +1,318 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 15\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\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": [],
+ "source": [
+ "init = State(T=90)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And a `System` object to contain the system parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = System(init=init,\n",
+ " volume=300,\n",
+ " r=0.01,\n",
+ " T_env=22,\n",
+ " t_end=30,\n",
+ " dt=1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The update function implements Newton's law of cooling."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the thermal transfer model.\n",
+ " \n",
+ " state: State (temp)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (temp)\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " \n",
+ " T = state.T\n",
+ " T += -r * (T - T_env) * dt\n",
+ " \n",
+ " return State(T=T)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how it works."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "update_func(init, 0, coffee)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's a version of `run_simulation` that uses `linrange` to make an array of time steps."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "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.row[0] = init\n",
+ " ts = linrange(0, t_end, dt)\n",
+ " \n",
+ " for t in ts:\n",
+ " frame.row[t+dt] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " # store the final temperature in T_final\n",
+ " system.T_final = get_last_value(frame.T)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And here's how it works."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results = run_simulation(coffee, update_func)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what the results look like."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot(results.T, label='coffee')\n",
+ "decorate(xlabel='Time (minutes)',\n",
+ " ylabel='Temperature (C)')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And here's the final temperature:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Encapsulation\n",
+ "\n",
+ "Before we go on, let's define a function to initialize `System` objects with relevant parameters:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_system(T_init, r, volume, t_end):\n",
+ " \"\"\"Makes a System object 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(T=T_init)\n",
+ " \n",
+ " # T_final is used to store the final temperature.\n",
+ " # Before the simulation runs, T_final = T_init\n",
+ " T_final = T_init\n",
+ "\n",
+ " T_env = 22 \n",
+ " dt = 1\n",
+ " \n",
+ " return System(locals())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we use it:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = make_system(T_init=90, r=0.01, volume=300, t_end=30)\n",
+ "results = run_simulation(coffee, update_func)\n",
+ "coffee.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises\n",
+ "\n",
+ "**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.\n",
+ "\n",
+ "By trial and error, find a values for `r` that makes the final temperature close to 20 C."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot(results.T, label='milk')\n",
+ "decorate(xlabel='Time (minutes)',\n",
+ " ylabel='Temperature (C)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap16mine.ipynb b/code/chap16mine.ipynb
new file mode 100644
index 00000000..eabf766c
--- /dev/null
+++ b/code/chap16mine.ipynb
@@ -0,0 +1,726 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 16\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Code from previous notebooks"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the thermal transfer model.\n",
+ " \n",
+ " state: State (temp)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (temp)\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " \n",
+ " T = state.T\n",
+ " T += -r * (T - T_env) * dt\n",
+ " \n",
+ " return State(T=T)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "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.row[0] = init\n",
+ " ts = linrange(0, t_end, dt)\n",
+ " \n",
+ " for t in ts:\n",
+ " frame.row[t+dt] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " # store the final temperature in T_final\n",
+ " system.T_final = get_last_value(frame.T)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_system(T_init, r, volume, t_end):\n",
+ " \"\"\"Makes a System object 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(T=T_init)\n",
+ " \n",
+ " # T_final is used to store the final temperature.\n",
+ " # Before the simulation runs, T_final = T_init\n",
+ " T_final = T_init\n",
+ "\n",
+ " T_env = 22 \n",
+ " dt = 1\n",
+ " \n",
+ " return System(locals())"
+ ]
+ },
+ {
+ "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": 5,
+ "metadata": {},
+ "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": 6,
+ "metadata": {},
+ "outputs": [],
+ "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": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fsolve(func, 1.9)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fsolve(func, 2.9)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "But not always."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "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": 10,
+ "metadata": {},
+ "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(T_init=90, r=r, volume=300, t_end=30)\n",
+ " results = run_simulation(system, update_func)\n",
+ " return system.T_final - 70"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With `r=0.01`, we end up a little too warm."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "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": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "solution = fsolve(error_func1, 0.01)\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": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = make_system(T_init=90, r=r_coffee, volume=300, t_end=30)\n",
+ "results = run_simulation(coffee, update_func)\n",
+ "coffee.T_final"
+ ]
+ },
+ {
+ "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": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "r_milk = 0.1\n",
+ "milk = make_system(T_init=5, t_end=15, r=r_milk, volume=50)\n",
+ "results = run_simulation(milk, update_func)\n",
+ "milk.T_final"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Mixing liquids"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The following function takes `System` objects that represent two liquids, computes the temperature of the mixture, and returns a new `System` object that represents the mixture."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "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",
+ " V_mix = s1.volume + s2.volume\n",
+ " \n",
+ " T_mix = (s1.volume * s1.T_final + \n",
+ " s2.volume * s2.T_final) / V_mix\n",
+ " \n",
+ " mixture = make_system(T_init=T_mix,\n",
+ " t_end=0,\n",
+ " r=s1.r,\n",
+ " volume=V_mix)\n",
+ " \n",
+ " return mixture"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Mixing at the end\n",
+ "\n",
+ "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": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = make_system(T_init=90, t_end=30, r=r_coffee, volume=300)\n",
+ "coffee_results = run_simulation(coffee, update_func)\n",
+ "coffee.T_final"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "milk = make_system(T_init=5, t_end=30, r=r_milk, volume=50)\n",
+ "milk_results = run_simulation(milk, update_func)\n",
+ "milk.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what the results look like."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot(coffee_results.T, label='coffee')\n",
+ "plot(milk_results.T, '--', label='milk')\n",
+ "\n",
+ "decorate(xlabel='Time (minutes)',\n",
+ " ylabel='Temperature (C)',\n",
+ " loc='center left')\n",
+ "\n",
+ "savefig('figs/chap07-fig01.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what happens when we mix them."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mix_last = mix(coffee, milk)\n",
+ "mix_last.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Mixing immediately\n",
+ "\n",
+ "Next here's what we get if we add the milk immediately."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = make_system(T_init=90, t_end=0, r=r_coffee, volume=300)\n",
+ "milk = make_system(T_init=5, t_end=0, r=r_milk, volume=50)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mix_first = mix(coffee, milk)\n",
+ "mix_first.t_end = 30\n",
+ "results = run_simulation(mix_first, update_func)\n",
+ "mix_first.T_final"
+ ]
+ },
+ {
+ "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": 26,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_and_mix(t_add, t_total):\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",
+ " coffee_results = run_simulation(coffee, update_func)\n",
+ "\n",
+ " milk = make_system(T_init=5, t_end=t_add, \n",
+ " r=r_milk, volume=50)\n",
+ " milk_results = run_simulation(milk, update_func)\n",
+ " \n",
+ " mixture = mix(coffee, milk)\n",
+ " mixture.t_end = t_total - t_add\n",
+ " results = run_simulation(mixture, update_func)\n",
+ "\n",
+ " return mixture.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can try it out with a few values."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "run_and_mix(t_add=0, t_total=30)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "run_and_mix(t_add=15, t_total=30)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "run_and_mix(t_add=30, t_total=30)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And then sweep a range of values for `t_add`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sweep = SweepSeries()\n",
+ "for t_add in linspace(0, 30, 11):\n",
+ " sweep[t_add] = run_and_mix(t_add, 30)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's what the result looks like."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot(sweep, label='final temp', color='C2')\n",
+ "decorate(xlabel='Time added (min)',\n",
+ " ylabel='Final temperature (C)')\n",
+ "\n",
+ "savefig('figs/chap07-fig02.pdf')"
+ ]
+ },
+ {
+ "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": 32,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_analysis(system):\n",
+ " \"\"\"Computes temperature using the analytic solution.\n",
+ " \n",
+ " system: System object\n",
+ " \n",
+ " returns: TimeFrame\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " \n",
+ " T_init = init.T \n",
+ " ts = linrange(0, t_end, dt)\n",
+ " \n",
+ " T_array = T_env + (T_init - T_env) * exp(-r * ts)\n",
+ " \n",
+ " # to be consistent with run_simulation, we have to\n",
+ " # put the array into a TimeFrame\n",
+ " results = TimeFrame(T_array, index=ts, columns=['T'])\n",
+ " system.T_final = get_last_value(results.T)\n",
+ "\n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here's how we run it. From the analysis (see `chap14analysis.ipynb`), we have the computed value of `r_coffee2`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "r_coffee2 = 0.011610223142273859\n",
+ "coffee2 = make_system(T_init=90, r=r_coffee2, volume=300, t_end=30)\n",
+ "results = run_analysis(coffee2)\n",
+ "coffee2.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And we can compare to the results from simulation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee = make_system(T_init=90, r=r_coffee, volume=300, t_end=30)\n",
+ "results = run_simulation(coffee, update_func)\n",
+ "coffee.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "They are identical except for a small roundoff error."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "coffee.T_final - coffee2.T_final"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Exercises\n",
+ "\n",
+ "**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": 36,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap20mine.ipynb b/code/chap20mine.ipynb
new file mode 100644
index 00000000..9e0b6930
--- /dev/null
+++ b/code/chap20mine.ipynb
@@ -0,0 +1,1898 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 20\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": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Dropping pennies\n",
+ "\n",
+ "I'll start by getting the units we need from Pint."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "second"
+ ],
+ "text/latex": [
+ "$second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "m = UNITS.meter\n",
+ "s = UNITS.second"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " y \n",
+ " 381 meter \n",
+ " \n",
+ " \n",
+ " v \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ "
\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)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Acceleration due to gravity is about 9.8 m / s$^2$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "9.8 meter/second2 "
+ ],
+ "text/latex": [
+ "$9.8 \\frac{meter}{second^{2}}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "g = 9.8 * m/s**2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "10 second"
+ ],
+ "text/latex": [
+ "$10 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_end = 10 * s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we make a `System` object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " y 381 meter\n",
+ "v 0.0 meter / secon... \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 10 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init y 381 meter\n",
+ "v 0.0 meter / secon...\n",
+ "g 9.8 meter / second ** 2\n",
+ "t_end 10 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = System(init=init, g=g, t_end=t_end)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And define the slope function."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def slope_func(state, t, system):\n",
+ " \"\"\"Compute derivatives of the state.\n",
+ " \n",
+ " state: position, velocity\n",
+ " t: time\n",
+ " system: System object containing `g`\n",
+ " \n",
+ " returns: derivatives of y and v\n",
+ " \"\"\"\n",
+ " y, v = state\n",
+ " unpack(system) \n",
+ "\n",
+ " dydt = v\n",
+ " dvdt = -g\n",
+ " \n",
+ " return dydt, dvdt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It's always a good idea to test the slope function with the initial conditions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "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": {},
+ "source": [
+ "Now we're ready to call `run_ode_solver`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'The solver successfully reached the end of the integration interval.'"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results, details = run_ode_solver(system, slope_func, max_step=0.5*s)\n",
+ "details.message"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Here are the results:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " y \n",
+ " v \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.000000 \n",
+ " 381.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 0.000102 \n",
+ " 381.000000 \n",
+ " -0.001000 \n",
+ " \n",
+ " \n",
+ " 0.001122 \n",
+ " 380.999994 \n",
+ " -0.011000 \n",
+ " \n",
+ " \n",
+ " 0.011327 \n",
+ " 380.999371 \n",
+ " -0.111000 \n",
+ " \n",
+ " \n",
+ " 0.113367 \n",
+ " 380.937025 \n",
+ " -1.110997 \n",
+ " \n",
+ " \n",
+ " 0.613367 \n",
+ " 379.156526 \n",
+ " -6.010997 \n",
+ " \n",
+ " \n",
+ " 1.113367 \n",
+ " 374.926028 \n",
+ " -10.910997 \n",
+ " \n",
+ " \n",
+ " 1.613367 \n",
+ " 368.245529 \n",
+ " -15.810997 \n",
+ " \n",
+ " \n",
+ " 2.113367 \n",
+ " 359.115031 \n",
+ " -20.710997 \n",
+ " \n",
+ " \n",
+ " 2.613367 \n",
+ " 347.534532 \n",
+ " -25.610997 \n",
+ " \n",
+ " \n",
+ " 3.113367 \n",
+ " 333.504034 \n",
+ " -30.510997 \n",
+ " \n",
+ " \n",
+ " 3.613367 \n",
+ " 317.023535 \n",
+ " -35.410997 \n",
+ " \n",
+ " \n",
+ " 4.113367 \n",
+ " 298.093036 \n",
+ " -40.310997 \n",
+ " \n",
+ " \n",
+ " 4.613367 \n",
+ " 276.712538 \n",
+ " -45.210997 \n",
+ " \n",
+ " \n",
+ " 5.113367 \n",
+ " 252.882039 \n",
+ " -50.110997 \n",
+ " \n",
+ " \n",
+ " 5.613367 \n",
+ " 226.601541 \n",
+ " -55.010997 \n",
+ " \n",
+ " \n",
+ " 6.113367 \n",
+ " 197.871042 \n",
+ " -59.910997 \n",
+ " \n",
+ " \n",
+ " 6.613367 \n",
+ " 166.690544 \n",
+ " -64.810997 \n",
+ " \n",
+ " \n",
+ " 7.113367 \n",
+ " 133.060045 \n",
+ " -69.710997 \n",
+ " \n",
+ " \n",
+ " 7.613367 \n",
+ " 96.979547 \n",
+ " -74.610997 \n",
+ " \n",
+ " \n",
+ " 8.113367 \n",
+ " 58.449048 \n",
+ " -79.510997 \n",
+ " \n",
+ " \n",
+ " 8.613367 \n",
+ " 17.468550 \n",
+ " -84.410997 \n",
+ " \n",
+ " \n",
+ " 9.113367 \n",
+ " -25.961949 \n",
+ " -89.310997 \n",
+ " \n",
+ " \n",
+ " 9.613367 \n",
+ " -71.842448 \n",
+ " -94.210997 \n",
+ " \n",
+ " \n",
+ " 10.000000 \n",
+ " -109.000000 \n",
+ " -98.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " y v\n",
+ "0.000000 381.000000 0.000000\n",
+ "0.000102 381.000000 -0.001000\n",
+ "0.001122 380.999994 -0.011000\n",
+ "0.011327 380.999371 -0.111000\n",
+ "0.113367 380.937025 -1.110997\n",
+ "0.613367 379.156526 -6.010997\n",
+ "1.113367 374.926028 -10.910997\n",
+ "1.613367 368.245529 -15.810997\n",
+ "2.113367 359.115031 -20.710997\n",
+ "2.613367 347.534532 -25.610997\n",
+ "3.113367 333.504034 -30.510997\n",
+ "3.613367 317.023535 -35.410997\n",
+ "4.113367 298.093036 -40.310997\n",
+ "4.613367 276.712538 -45.210997\n",
+ "5.113367 252.882039 -50.110997\n",
+ "5.613367 226.601541 -55.010997\n",
+ "6.113367 197.871042 -59.910997\n",
+ "6.613367 166.690544 -64.810997\n",
+ "7.113367 133.060045 -69.710997\n",
+ "7.613367 96.979547 -74.610997\n",
+ "8.113367 58.449048 -79.510997\n",
+ "8.613367 17.468550 -84.410997\n",
+ "9.113367 -25.961949 -89.310997\n",
+ "9.613367 -71.842448 -94.210997\n",
+ "10.000000 -109.000000 -98.000000"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And here's position as a function of time:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap09-fig01.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "def plot_position(results):\n",
+ " plot(results.y, label='y')\n",
+ " decorate(xlabel='Time (s)',\n",
+ " ylabel='Position (m)')\n",
+ "\n",
+ "plot_position(results)\n",
+ "savefig('figs/chap09-fig01.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Onto the sidewalk\n",
+ "\n",
+ "To figure out when the penny hit the sidewalk, we can use `crossings`, which finds the times where a `Series` passes through a given value."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([8.81788535])"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_crossings = crossings(results.y, 0)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For this example there should be just one crossing, the time when the penny hits the sidewalk."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "8.817885349720552 second"
+ ],
+ "text/latex": [
+ "$8.817885349720552 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_sidewalk = t_crossings[0] * s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "8.817885349720552 second"
+ ],
+ "text/latex": [
+ "$8.817885349720552 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sqrt(2 * init.y / g)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The estimate is accurate to about 10 decimal places."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Events\n",
+ "\n",
+ "Instead of running the simulation until the penny goes through the sidewalk, it would be better to detect the point where the penny hits the sidewalk and stop. `run_ode_solver` provides exactly the tool we need, **event functions**.\n",
+ "\n",
+ "Here's an event function that returns the height of the penny above the sidewalk:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def event_func(state, t, system):\n",
+ " \"\"\"Return the height of the penny above the sidewalk.\n",
+ " \"\"\"\n",
+ " y, v = state\n",
+ " return y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And here's how we pass it to `run_ode_solver`. The solver should run until the event function returns 0, and then terminate."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [[8.81788534972056]] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 38 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " A termination event occurred. \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events [[8.81788534972056]]\n",
+ "nfev 38\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 1\n",
+ "message A termination event occurred.\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results, details = run_ode_solver(system, slope_func, events=event_func)\n",
+ "details"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The message from the solver indicates the solver stopped because the event we wanted to detect happened.\n",
+ "\n",
+ "Here are the results:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " y \n",
+ " v \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.000000 \n",
+ " 3.810000e+02 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 0.000102 \n",
+ " 3.810000e+02 \n",
+ " -0.001000 \n",
+ " \n",
+ " \n",
+ " 0.001122 \n",
+ " 3.810000e+02 \n",
+ " -0.011000 \n",
+ " \n",
+ " \n",
+ " 0.011327 \n",
+ " 3.809994e+02 \n",
+ " -0.111000 \n",
+ " \n",
+ " \n",
+ " 0.113367 \n",
+ " 3.809370e+02 \n",
+ " -1.110997 \n",
+ " \n",
+ " \n",
+ " 1.133773 \n",
+ " 3.747013e+02 \n",
+ " -11.110971 \n",
+ " \n",
+ " \n",
+ " 8.817885 \n",
+ " 5.684342e-14 \n",
+ " -86.415276 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " y v\n",
+ "0.000000 3.810000e+02 0.000000\n",
+ "0.000102 3.810000e+02 -0.001000\n",
+ "0.001122 3.810000e+02 -0.011000\n",
+ "0.011327 3.809994e+02 -0.111000\n",
+ "0.113367 3.809370e+02 -1.110997\n",
+ "1.133773 3.747013e+02 -11.110971\n",
+ "8.817885 5.684342e-14 -86.415276"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With the `events` option, the solver returns the actual time steps it computed, which are not necessarily equally spaced. \n",
+ "\n",
+ "The last time step is when the event occurred:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "8.81788534972056 second"
+ ],
+ "text/latex": [
+ "$8.81788534972056 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_sidewalk = get_last_label(results) * s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Unfortunately, `run_ode_solver` does not carry the units through the computation, so we have to put them back at the end.\n",
+ "\n",
+ "We could also get the time of the event from `details`, but it's a minor nuisance because it comes packed in an array:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "8.81788534972056 second"
+ ],
+ "text/latex": [
+ "$8.81788534972056 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "details.t_events[0][0] * s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The result is accurate to about 15 decimal places.\n",
+ "\n",
+ "We can also check the velocity of the penny when it hits the sidewalk:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-86.41527642726152 meter/second"
+ ],
+ "text/latex": [
+ "$-86.41527642726152 \\frac{meter}{second}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "v_sidewalk = get_last_value(results.v) * m / s"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And convert to kilometers per hour."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-311.0949951381415 kilometer/hour"
+ ],
+ "text/latex": [
+ "$-311.0949951381415 \\frac{kilometer}{hour}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "km = UNITS.kilometer\n",
+ "h = UNITS.hour\n",
+ "v_sidewalk.to(km / h)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "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": [
+ "## Under the hood\n",
+ "\n",
+ "Here is the source code for `crossings` so you can see what's happening under the hood:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\u001b[1;32mdef\u001b[0m \u001b[0mrun_ode_solver\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mslope_func\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;34m\"\"\"Computes a numerical solution to a differential equation.\n",
+ "\n",
+ " `system` must contain `init` with initial conditions,\n",
+ " `t_0` with the start time, and `t_end` with the end time.\n",
+ "\n",
+ " It can contain any other parameters required by the slope function.\n",
+ "\n",
+ " `options` can be any legal options of `scipy.integrate.solve_ivp`\n",
+ "\n",
+ " system: System object\n",
+ " slope_func: function that computes slopes\n",
+ "\n",
+ " returns: TimeFrame\n",
+ " \"\"\"\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# make sure `system` contains `init`\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'init'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mmsg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"\"\"It looks like `system` does not contain `init`\n",
+ " as a system variable. `init` should be a State\n",
+ " object that specifies the initial condition:\"\"\"\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# make sure `system` contains `t_end`\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m't_end'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mmsg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"\"\"It looks like `system` does not contain `t_end`\n",
+ " as a system variable. `t_end` should be the\n",
+ " final time:\"\"\"\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# make the system parameters available as globals\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0munpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# the default value for t_0 is 0\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mt_0\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m't_0'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# try running the slope function with the initial conditions\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# try:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# slope_func(init, t_0, system)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# except Exception as e:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# msg = \"\"\"Before running scipy.integrate.solve_ivp, I tried\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# running the slope function you provided with the\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# initial conditions in `system` and `t=t_0` and I got\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# the following error:\"\"\"\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# logger.error(msg)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# raise(e)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# wrap the slope function to reverse the arguments and add `system`\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mslope_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msystem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrap_event\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;34m\"\"\"Wrap the event functions.\n",
+ "\n",
+ " Make events terminal by default.\n",
+ " \"\"\"\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mwrapped\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mevent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msystem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mterminal\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'terminal'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdirection\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'direction'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mwrapped\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# wrap the event functions so they take the right arguments\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mevents\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0moptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'events'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mevents\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mwrap_event\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mevent\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mevent\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mevents\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mevents\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mwrap_event\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mevents\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# remove dimensions from the initial conditions.\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# we need this because otherwise `init` gets copied into the\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# results array along with its units\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0my_0\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mmagnitude\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0minit\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# run the solver\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0munits_off\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mbunch\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msolve_ivp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mt_0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mt_end\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mevents\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mevents\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# separate the results from the details\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbunch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'y'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbunch\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m't'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mdetails\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mModSimSeries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbunch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;31m# pack the results into a TimeFrame\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mTimeFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0minit\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\n",
+ "\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdetails\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "%psource run_ode_solver"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The [documentation of InterpolatedUnivariateSpline is here](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.InterpolatedUnivariateSpline.html).\n",
+ "\n",
+ "And you can read the [documentation of `scipy.integrate.solve_ivp`](https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.solve_ivp.html) to learn more about how `run_ode_solver` works."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Exercises\n",
+ "\n",
+ "**Exercise:** Here's a question from the web site [Ask an Astronomer](http://curious.astro.cornell.edu/about-us/39-our-solar-system/the-earth/other-catastrophes/57-how-long-would-it-take-the-earth-to-fall-into-the-sun-intermediate):\n",
+ "\n",
+ "\"If the Earth suddenly stopped orbiting the Sun, I know eventually it would be pulled in by the Sun's gravity and hit it. How long would it take the Earth to hit the Sun? I imagine it would go slowly at first and then pick up speed.\"\n",
+ "\n",
+ "Use `run_ode_solver` to answer this question.\n",
+ "\n",
+ "Here are some suggestions about how to proceed:\n",
+ "\n",
+ "1. Look up the Law of Universal Gravitation and any constants you need. I suggest you work entirely in SI units: meters, kilograms, and Newtons.\n",
+ "\n",
+ "2. When the distance between the Earth and the Sun gets small, this system behaves badly, so you should use an event function to stop when the surface of Earth reaches the surface of the Sun.\n",
+ "\n",
+ "3. Express your answer in days, and plot the results as millions of kilometers versus days.\n",
+ "\n",
+ "If you read the reply by Dave Rothstein, you will see other ways to solve the problem, and a good discussion of the modeling decisions behind them.\n",
+ "\n",
+ "You might also be interested to know that [it's actually not that easy to get to the Sun](https://www.theatlantic.com/science/archive/2018/08/parker-solar-probe-launch-nasa/567197/)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " D 149600000000\n",
+ "V 0\n",
+ "dtype: int64 \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 10000000 \n",
+ " \n",
+ " \n",
+ " m_sun \n",
+ " 1.989e+30 \n",
+ " \n",
+ " \n",
+ " r_run \n",
+ " 696000000 \n",
+ " \n",
+ " \n",
+ " m_earth \n",
+ " 5.972e+24 \n",
+ " \n",
+ " \n",
+ " r_earth \n",
+ " 6378000 \n",
+ " \n",
+ " \n",
+ " G \n",
+ " 6.67e-11 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init D 149600000000\n",
+ "V 0\n",
+ "dtype: int64\n",
+ "t_0 0\n",
+ "t_end 10000000\n",
+ "m_sun 1.989e+30\n",
+ "r_run 696000000\n",
+ "m_earth 5.972e+24\n",
+ "r_earth 6378000\n",
+ "G 6.67e-11\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# D is in meters\n",
+ "init = State(D = 149600000000, V = 0)\n",
+ "t_0 = 0\n",
+ "# t_end in days\n",
+ "t_end = 10000000\n",
+ "# mass of sun in kg\n",
+ "m_sun = 1.989 * 10**30\n",
+ "# radius of sun in meters\n",
+ "r_sun = 696000000\n",
+ "# mass of earth in kilogram\n",
+ "m_earth = 5.972 * 10**24\n",
+ "# radius of earth in meters\n",
+ "r_earth = 6378000\n",
+ "G = 6.67 * 10**-11\n",
+ "system = System(init=init,\n",
+ " t_0=t_0,\n",
+ " t_end=t_end,\n",
+ " m_sun=m_sun,\n",
+ " r_run=r_sun,\n",
+ " m_earth=m_earth,\n",
+ " r_earth=r_earth,\n",
+ " G=G)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "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",
+ " d , v= state\n",
+ " unpack(system)\n",
+ "\n",
+ " F = G * ((m_sun * m_earth) / d**2)\n",
+ " a_earth = F / m_earth\n",
+ " a_sun = F / m_sun\n",
+ " \n",
+ " a = a_earth + a_sun\n",
+ " \n",
+ " dDdt = v\n",
+ " \n",
+ " dVdt = -a\n",
+ " \n",
+ " return dDdt, dVdt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(0, -0.005927870861173469)"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "slope_func(init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def event_func(state, t, system):\n",
+ " d, v = state\n",
+ " \n",
+ " r = r_sun + r_earth\n",
+ " \n",
+ " return d - r"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [[5579105.486326713]] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 224 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " A termination event occurred. \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events [[5579105.486326713]]\n",
+ "nfev 224\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 1\n",
+ "message A termination event occurred.\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results, details = run_ode_solver(system, slope_func, events=event_func)\n",
+ "details"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " D \n",
+ " V \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0.000000 \n",
+ " 1.496000e+11 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 0.075080 \n",
+ " 1.496000e+11 \n",
+ " -0.000445 \n",
+ " \n",
+ " \n",
+ " 0.825878 \n",
+ " 1.496000e+11 \n",
+ " -0.004896 \n",
+ " \n",
+ " \n",
+ " 8.333861 \n",
+ " 1.496000e+11 \n",
+ " -0.049402 \n",
+ " \n",
+ " \n",
+ " 83.413686 \n",
+ " 1.496000e+11 \n",
+ " -0.494466 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " D V\n",
+ "0.000000 1.496000e+11 0.000000\n",
+ "0.075080 1.496000e+11 -0.000445\n",
+ "0.825878 1.496000e+11 -0.004896\n",
+ "8.333861 1.496000e+11 -0.049402\n",
+ "83.413686 1.496000e+11 -0.494466"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEJCAYAAACQZoDoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl0XWd57/Hv0SxZkiXZli1bkgfZfoSDHWJngpCBCAi5TIGES2kuDSuhoSxKb6HhlgYIBEgZyw2F2zoUSlkUGkrABAiUUCeBQMiMk9iOH8ujJNvyKFmWZM26f+wt6ehEko/Gc470+6ylZZ13v/vsZ2tbes7e7372G+nv70dERGRAWqIDEBGR5KLEICIiwygxiIjIMEoMIiIyjBKDiIgMo8QgIiLDpGxiMLOLzezYBNb7kJn9ZJRlq83stJnlTz5CEZHUlJHoAMbLzCLALcCXx7lePvBJ4G+An46w/Hrga0DhFIQpIpKyUi4xAHcCbwQ+C3x8oNHMcoC/B94BZAL3Ax9297awywPAceAeoCz6Dc3sVuA24NPAP09z/CIiSS0VLyVtdvdNwNMx7V8ELgy/DCgF/jFq+bvc/Qbg6Ajv+VOgGvjvqQ9XRCS1pFxicPfDsW3h5aX3Ah9x96Pufhr4KPAeM8sebb2o92x0977pillEJJWk4qWkkSwCcoEHzSz64U/dwHJgd0KiEhFJQbMlMZwEuoCL3d0BwjOFVcDeRAYmIpJqUu5S0kjcvRf4d+ALZrYgTApfBn6W2MhERFLPrEgMob8GGoDnCAaY1wLXhklDRETiFNF8DCIiEm02nTGIiMgUSInB53DM4CLgCKBLQyIi8UknKOh9yt07410pJRIDQVJ4NNFBiIikqMuB38XbOVUSwxGA733veyxZsiTRsYiIpITGxkZuvPFGCP+GxitVEkMvwJIlSygvL090LCIiqWZcl+A1+CwiIsMoMYiIyDDjupRkZhcDP3f30lGWXw38Gjgb1fwFd/9M+KC7zwC3AlnAtwkeetczochFRGRaxJUYxjE5zkbgh+7+JyMsuxV4e9inE9gC3E4wB4KIiCSJeC8l3Qm8n2BynLFsAraNsuwm4G53b3D348CngPfFuX0REZkh8V5K2uzud5jZVefotxFYZGbvByLAD4CPh4UV64CdUX13AUvNrMTdT40z7ridaD7LUy8e5WxHD5FI0BaJREhLg+zMDLKz0snOTCc7K52cqO8HluVkpZOZkUZkYGURkVkursQw1iQ3A8wsg+AhdlsIxg+WAj8E+oH/A+QD7VGrDHyfB0xbYvjDC0c42NgyqfdIi0TIygwTx7DkkU52VsZL2nIG2rLSyVJSEZEUM2V1DOEgck1U0x4zuwv4AkFiaCOYTGdAXvhv61TFMJKyhfMmnRj6+vvp6Oqho2v84+SRSCRMFkoqIpIapiwxmNky4EPA7e7eFTZnAR3h9zsJ5mL+ffi6Gjji7s1TFcNILnzZYqrK59PeEfxR7+sLnibb29dPZ1cPnd29dHT10jnw1T3wfc/g9929E5/1s38SSSUrM52VZYWsrSymfHEB6WlKEiIy/aay8vkkcCPQbmafBlYCHwf+NVz+XeA2M9tKcPbwqbBt2hUX5FBcMPH1e3v7hhJG+G9HVOIYaot+HSzv7pl4Uunq7sXrmvC6JnKyMlhdPp81lcUsXThPZxIiMm0mlRjM7EbgHnfPd/cOM7sWuJsgSbQD3wC+EnbfDCwGHiO4jPRD4I7JbH+mpKenkZeeRl5O5rjXHUwq3SOclXSHCSaOpNLR1cP2fSfZvu8k+bmZrK4oYm1FMYuKc5UkRGRKpcREPWa2Ati/devWOfOspP7+fo43n6W2vpnauiZaz3aP2K8oP5u1lcWsqSiiuDBnhqMUkWTW0NBATU0NwEp3PxDveqnyEL05JxKJUFqcR2lxHq9aX8aRE23srm9mb0MzZzuHxiuaWzt5cmcjT+5sZFFRLmsqillTWURBXlYCoxeRVKbEkAIikQhLF+WzdFE+l79iGQ3HzlBb18S+wy10dQ89NPF481mON5/lsRcOU7ZgHmsri6kqnz+hS2AiMncpMaSY9LQIy5cUsnxJIT29fRw40kJtXRMHjrTQ2zd0WfDIyTaOnGzj0W2HKC/NZ01FMavK55OdmZ7A6EUkFSgxpLCM9DRWlxexuryIzu5e9h86ze76JhqOttIXjh319fdTd/QMdUfP8MizEVaUFbKmopgVSwvJSNfDdUXkpZQYZonszHSqV5RQvaKE9o5u9jacpra+icMn2gb79Pb1s/fQafYeOk1WZjqrlgZJQjUSIhJNiWEWysvJZP3qhaxfvZAz7V2DdzYdbx56GnpXdy+7Djax6+BQjcTaymLKVCMhMucpMcxyBXlZbLRSNlopTS0d1NY3s7u+ieYznYN9Ymsk1lQEt7+qRkJkblJimEOKC3O4+LwlXLRu8ag1Eq1nu/nj7mP8cfcx1UiIzFFKDHPQiDUSdU3saTg97JlOqpEQmZuUGOa4YTUSF5TTcPQMtfVN7D10etgjOaJrJJYunMeaCtVIiMxWSgwyKD0twvKyQpaXFXLVGDUSh0+0cfhEWCOxOJ+1FcWsWjafLNVIiMwKSgwyorhrJBrPUNd4hvRnwhqJymJWlKlGQiSVKTHIOalGQmRuUWKQcXlJjURdM7X1o9dI5GZnULVMNRIiqUSJQSasIC+LjdWlbKyOqpGoa6K5dahG4mxnTI1EePvroiLVSIgkKyUGmRLDaiSawhqJ+hFqJPwYf/RjFBVksza8/bW4QDUSIslEiUGmVCQSobQkj9KSPF61YYwaiTMxNRKVxaytKCJfNRIiCafEINNmpBqJ3XVN7Ds8So3E86qREEkGSgwyI6JrJLp7+jh4pIXaetVIiCQjJQaZcZkZaayuKGJ1RVAjsS+8/bXh2Bg1Ekvns6aiSDUSIjNAiUESKjsznZetLOFlK4dqJHbXNXHkZEyNREMw3/VgjURlMeWlqpEQmQ5KDJI0omskWtq62FMfR41EeRFrK4pUIyEyhZQYJCkVzhuqkTjV0sGe0Wok9p5g+94TqpEQmULjSgxmdjHwc3cvHWX5JuD/AhuAFuCbwGfcvd/MsoEzQFfUKo+5++snFLnMGSUxNRK765vYU9+sGgmRaRJXYjCzCHAL8OUx+uQBDwCfBV4DrAJ+BTQC3wDWA6fcfckkY5Y5KrpG4rINSzl8oo3ac9VIFAfzSKhGQiR+8Z4x3Am8keCP/sdH6VMB/MHdvx6+rjWznwCvJkgMm4Btk4hVZFAkEmHZonyWnatGouksx5sGaiTyWVNZRNUy1UiIjCXexLDZ3e8ws6tG6+DuDrxt4LWZZQHXEiQFgI1AqZk9DywGfgv8tbsfmkjgIgPir5Fo5fCJVh79Y1gjUVnMqqWqkRCJFVdicPfD43nTcDzh+0A7sDlsbgN+D3wa6Ab+EdgCXDye9xYZS3SNREdXD/sPtQTzSBxrpX+EGomM9DSWlxWqRkIkypTflWRmS4AfAX3Aa939LIC7fzim34eB42ZW4e71Ux2HSE5WxrAaiT0NzdTWNQ+rkejp7RuxRqKitIA01UjIHDWlicHM1hEMOD8E3OrunVHLPg38h7u/GDYNjAR2TGUMIiPJy8lkw+pFbFi9aLBGYnd9EyfGqJFYXV7EmsoiyhaoRkLmlilLDGZWDDwI3Ovut43QZQNwoZn9afj6q8AD7n58qmIQiUdsjURtXRO19c0vqZF4Ye8JXoiqkVhbUczCohwlCZn1JpUYzOxG4B53zwfeDSwD3m9mfxHV7Wfu/i6C213/EdgTbvcB4NbJbF9kskoKc7jk5WVcfN6S+GskwkI61UjIbBUZGJBLZma2Ati/detWysvLEx2OzHJ9ff0cORnMI7E3pkYimmokJNk1NDRQU1MDsNLdD8S7nh6JIRIjLW2oRuKKVyyj/lgrtXHWSKwuLyI3W79Wktr0P1hkDOnpaawoK2RFWCNx4MhpauubOagaCZnFlBhE4pSZkcaaimLWVBSPq0ZibUURy1UjISlEiUFkAkaqkdhd10zjmDUS81lTWaQaCUl6SgwikxRbI1FbH9z++tIaiVPsOnhKNRKS9JQYRKZQ4bwsNlUvZlP1Yk61dLA7rJE4PUqNREFeFqsrilQjIUlFiUFkmpQU5nDpy8u45LwlHGs6S+0INRJn2rsGaySKC3JYU1mkGglJOCUGkWkWiURYXJLH4pI8XrV+6ag1Ek1nOnhyRyNP7miktDiPNRVBklCNhMw0JQaRGTRSjcTuuib2x9RIHGtq51hTO4+9cISyBfNYW1lElWokZIbof5lIgoxUI7G7rpm6xqEaif7+/sEaid/+8RAViwtYU1mkGgmZVkoMIkkgtkZi36GgkC62RuJgYwsHG1tUIyHTSolBJMnkZGWwbuUC1q1coBoJSQglBpEkNtEaibWVxSxZkKfbX2VClBhEUsRINRK765poaesa7BNbIxHc2aQaCRkfJQaRFBRbI7G7LqiRaOsYXiPxrB/jWT/G4pI8rrl0BYXzdOurnJsSg0gKi66RuGzDUg6faKW2vpk9Dc10dvUO9jt6qp0fbt3NGy9byZIF8xIYsaQCJQaRWSItLUJ5aQHlpQVc8Ypl1B09M5gk+vr6OdvZw5ZH9lBzUSVrK4sTHa4kMd3jJjILpaensXLpfF5/yXKuu6KKnKzgM2BvXz8PPnGQJ7YfIRVmb5TEUGIQmeWWLsrnHTVrKCkcev7SUy8e5cEnDtLT2zfGmjJXKTGIzAHz87O5/uo1VC4uGGyrrW9myyN7aIt6qJ8IKDGIzBnZmem86dWrWF+1cLBtYFD6eNPZMdaUuUaJQWQOSUuLcOXGcq64YNlgXUPr2W5+/Egt+w+fTnB0kiyUGETmoA2rF/GmV68cfBBfd08fv3jsAM/6MQ1Ky/huVzWzi4Gfu3vpKMsrgW8BlwLHgA+6+y/CZVnA14EbgF7gK+7+uUnELiKTsHxJITdcvYaf/24fLW1d9Pf389jzh2k+08GVF5STrgfzzVlxHXkzi5jZe4EHgbFKJ+8FngcWAH8O3Gtmq8JldwIGVAEXATeZ2Z9NNHARmbySwhxuuHoNSxcOFb3t3H+Knz66j47OnjHWlNks3o8EdwLvBz47WgczWwtcCNzh7l3u/hDwU+CWsMtNwF3u3uTuB4AvA++baOAiMjXycjJ56xVVVC8fKno7dLyV+x6qpelMRwIjk0SJNzFsdvdNwNNj9FkH1Ll7W1TbLmC9mRUBZcDO2GXjCVZEpkd6eho1F1XyyvVlg23NrZ3c91At9UfPJDAySYS4EoO7H46jWz7QHtPWDuSFy4hZPrBMRJJAJBJhU/Virn3lisGJfzq7evnZo/vYvvdEgqOTmTSVo0ttQG5MWx7QGi4jZvnAMhFJIlXlRbz9qtXk52YCwcxxjzzbwKPbDtHXpzuW5oKpTAw7gUozi/7jXw3sdPcmoJFg8HnYsincvohMkdKSPG6oWcui4qFf5+dqj/PA7/fT1d07xpoyG0xZYnB3B54D7jKzbDN7DfBW4Pthl+8CnzSzhWa2ArgtbBORJJSfm8nbr1pN1bL5g20HG1v40UO1wyYHktlnUonBzG40s+jLQdcDLyOoYfgmcIu7bw+X3QFsB3YATwE/AjZPZvsiMr0yM9J5wytXsKl68WDbyZYOfrh1N0dOtI2xpqSySCpUOYZnGPu3bt1KeXl5osMRmZN2HTzFQ0/XD44zpKdFuPrCCmx5SYIjk9E0NDRQU1MDsDIsE4iLShtFJC7Vy0u47soqcrOH5nb49ZN1mtthFlJiEJG4LV2Yzw1Xv3Ruh189fpDuHs3tMFsoMYjIuIw0t8OehmZ+8hvN7TBbKDGIyLgNzO2wYbXmdpiNlBhEZELS0iJccUE5V15QTprmdphVlBhEZFLWr17IGzW3w6yixCAikzYwt0PhvOCp/ANzOzz8TD29vRqUTjVKDCIyJTS3w+yhxCAiU2a0uR1++FAtTS2a2yFVKDGIyJQaaW6H05rbIaUoMYjIlIue2yFzYG6Hbs3tkCqUGERk2lSVF/G212huh1SjxCAi06q0OJjbobR4aMJGze2Q3JQYRGTa5edm8rarVlNVXjTYprkdkpcSg4jMiMyMNN5w6XLN7ZAClBhEZMZEIhFeub6M115cSXpa8BiNs509/OQ3e/CDpxIcnQxQYhCRGVe9vIS3jjC3w+Oa2yEpKDGISEKMNLfD0y8e5b80t0PCKTGISMIMzu2wZGhuh70NzWx5RHM7JJISg4gkVHZmOm+6bPjcDseaNLdDIikxiEjCjTq3w8O17DukuR1mmhKDiCSN9asX8qbouR16+/jlHw7w7C7N7TCTlBhEJKlUjjS3wwuHeehpze0wU5QYRCTplBTm8I6atSxdmD/Y9uKBU9z/232c1dwO0y4jnk5mdj6wGdgA7ANudvenYvrcCNwTs2ousNXdX29m2cAZILr+/TF3f/1EgxeR2Ss3O4O3XrGKh59pYFdY/Hb4RCv3PVTLmy5bSXHUba4ytc6ZGMwsC7gfuBu4ArgeeNDMlrt7y0A/d/8e8L2o9S4AHgQ+EjatB065+5KpC19EZrNgbocKSgpzeOyFw8DQ3A5veOUKKhYXnOMdZCLiuZR0FZDp7ne7e7e73wvsAN452gpmlkmQJD7l7s+FzZuAbZOMV0TmmEgkwsbqUs3tMIPiuZS0Dngxpm0XwRnAaD4AnAX+KaptI1BqZs8Di4HfAn/t7ofiD1dE5qqq8iIK5mXxi9/vp/Vs9+DcDk0tnVx2/lLSwmcvyeTFc8aQD7THtLUDeSP0Hbj09BGCs4Xo+8vagN8DNYARJI4t4w1YROauEed22KO5HaZaPImhjWAQOVoe0DpK/zcAfcAD0Y3u/mF3/6C7H3f3ZuDDwEVmVjHOmEVkDhtrbofTrZ0JjGz2iCcx7CT4hB+tOmwfyVuB/3T3YTccm9mnzexlUU1Z4b8d8QQqIjJgtLkd7nuoVnM7TIF4xhgeBiJm9iHg6wR3JW1g9MtAlwKfGKF9A3Chmf1p+PqrwAPufnx8IYuIDM3tUFyYzcNP19Pb1z84t8PVF1Zgy0sSHWLKOucZg7t3AdcSJIRTwMeA69z9uJndbmY7YlZZARwe4a1uAZqAPcABgnqGd084chERgrkdrrtyteZ2mEKRVPjBmdkKYP/WrVspLy9PdDgikoROt3bywO/3c6pl6Op0VXkRr72oksyMufmQh4aGBmpqagBWuvuBeNebmz8tEZl1xprboVVzO4yLEoOIzBoDczucv3rRYNuxpnbu09wO46LEICKzSlpahMsvWKa5HSZBiUFEZqX1qxfy5stXka25HcZNiUFEZq2KxQVcP8LcDjv3n0pwZMlNiUFEZrWR5nZ4dNshTp7WmMNolBhEZNbLzc7gzZevYkE4h0NPbx//9YeDdPfo+UojUWIQkTkhMyONa6Ie3d10poPfPKuHO49EiUFE5oySwhyu3DhUJLvr4Cl2HdB4QywlBhGZU6pXlFC9vHjw9W+ebRhWLS1KDCIyB125sZzigmC8obu3j1/94QDdPX1jrzSHKDGIyJyTmZHOG165nIxwvOFkSwePbtN4wwAlBhGZkxbMz+XyVywbfL1z/0l21zUlMKLkocQgInPWupUlrKkYGm94+Jl6ms5ovEGJQUTmrEgkwms2lVOUnw1Ad08fv3r8ID29c3u8QYlBROa0rMx0rrl0BelpwQP3TjSf5XfPjTTX2NyhxCAic96i4lxeff7QeMP2vSfYU9+cwIgSS4lBRAR4edUCqsqLBl8/9Ew9p1s7ExhR4igxiIgQjDdcfWHF4JNYu7p7+dXjB+mdg+MNSgwiIqHszHTecOkK0sLxhmNN7Tz2wpEERzXzlBhERKKUluRx2fqlg6+fqz0+52Z+U2IQEYmxYc1CVi6dP/h669N1tLR1JTCimaXEICISIxKJUHNhBQV5wXhDZ1cvv3r8AL19c2NK0Ix4OpnZ+cBmYAOwD7jZ3Z8aod/NwD1A9FD+B9z9O2aWBXwduAHoBb7i7p+bZPwiItMiJzuDay5dzo8f3kNffz9HT7Xz+PYjXLZh6blXTnHnPGMI/6DfD/wAKALuAh40s8IRum8E/sHd86O+vhMuuxMwoAq4CLjJzP5sKnZCRGQ6LFkwj0vXlw2+/qMf48CRlgRGNDPiuZR0FZDp7ne7e7e73wvsAN45Qt9NwLZR3ucm4C53b3L3A8CXgfeNP2QRkZlzwdpFLF8y9Dn4v5+so7V9do83xJMY1gEvxrTtAtZHN5hZOsGlpneb2WEz22NmHzWziJkVAWXAzrHeQ0Qk2UQiEV57cSX5uZkAdHT18OATB+mbxeMN8SSGfKA9pq0dyItpWwQ8DXwHWEkwlvD+8Cs/ar2x3kNEJOnkZmfw+kuWkxYJ6hsOn2jjiR2NCY5q+sQz+NwG5Ma05QGt0Q3u3ghcGdW0zcy+BlwP/EfYFv0+L3kPEZFktXRRPheft4THtwcFb8/sOsrSRfOGXWaaLeI5Y9hJMGgcrZrhl4Uws/PM7M6YfllAh7s3AY0x7/OS9xARSWabqkupXFww+Pq/n6yj9Wx3AiOaHvGcMTwMRMzsQwS3m15PMJawJaZfM/A3ZtYAfAu4APgr4C/D5d8FPmlmzxNcWroN+Oqk90BEZIYMjDfc++vdtHd0c7azh18/cZC3XlE1+BiN2eCcZwzu3gVcS5AQTgEfA65z9+NmdruZ7Qj7HQLeQnCnUQvwI+Az7n5f+FZ3ANsJ7mh6Kly+eWp3R0RkeuXlZPL6SyqJhOMNh4638vSLRxMc1dSK9Pcn/8i6ma0A9m/dupXy8vJEhyMiwpM7G3kyHICORCK85fJVVERdZkoGDQ0N1NTUAKwMywTiokdiiIhMwIXViykvDW647O/v59dP1tHeMTvGG5QYREQmIC0twusuXk5udjBU297Rza+frCMVrsKcixKDiMgEzcvN5PWXLB8cb6g/eoZdB5oSHNXkKTGIiExCxeICLli7aPD1Uy82pvysb0oMIiKTdOHLFg9eUmpp62LH/pMJjmhylBhERCYpKzOdTdWlg6+ffvEY3T29CYxocpQYRESmwMurFg4+aK+9o5sX9qTuWYMSg4jIFMhIT+OidUsGXz/jR+no6klgRBOnxCAiMkWqV5QwPz8bCKYD3bb7eIIjmhglBhGRKZKeFuGS84bOGp6rPZ6SRW9KDCIiU2hNRRELCnMA6O7p41k/luCIxk+JQURkCkUikWHzRL+w50TKTQWqxCAiMsVWlBWyuCSYoLK3r5+nUuzpq0oMIiJTLBKJcOnLh84aXtx/iuYznQmMaHyUGEREpkHF4oLBp6/29ffz5M7UmSNaiUFEZJpEnzXU1jdzovlsAqOJnxKDiMg0WbJgHivLCoFgzoYndqTGWYMSg4jINLok6qxh/+HTNJ5sS2A08VFiEBGZRguLcllTUTz4+vHtyX/WoMQgIjLNLj5vMWnhZD4Nx85Qf/RMgiMamxKDiMg0Ky7IoXpFyeDrx7cfSeopQJUYRERmwMXrFpOeFpw1HD3VzoEjLQmOaHRKDCIiMyA/L4uXVy0cfP349sakPWvIiKeTmZ0PbAY2APuAm939qRH6vQ74PLAGOAZ8yd3vCZetAvYA7VGr3Ovu753UHoiIpIhN1aXs3H+S7p4+Tp4+S219M2sri8+94gw75xmDmWUB9wM/AIqAu4AHzawwpl8F8CPgs2G/dwGfM7Nrwi4bgSfdPT/qS0lBROaMvJxMzl+zaPD1kzsa6e1LvrOGeC4lXQVkuvvd7t7t7vcCO4B3xvRbAXzf3be4e194RvEIcFm4fBOwbUqiFhFJUa9Yu4jsrHQAmls72XXgVIIjeql4LiWtA16MadsFrI9ucPdHgUcHXptZCXA58N2waSMwz8x2A/nAL4Db3L15YqGLiKSenKwMLlhbyuPbjwDw1M5GbHkxGenJM+QbTyT5DB8XIHydN9oKZjYf+CnwBMFlKIAm4NfARQRJohL4xjjjFRFJeeevWUhudvC5vPVsN9v3nkhwRMPFkxjagNyYtjygdaTOZrYWeBw4Ctzg7n0A7v4n7n6nu59290bgduAtZhbXALiIyGyRmZHOResWD75+Ztcxunv6EhjRcPEkhp2AxbRVh+3DmNkVBGcJPyFICh1he56ZfdHMFkd1zwJ6gN6JBC4iksrOW7mAgrwsAM529rD3UPJcVY/n0/rDQMTMPgR8Hbie4LbVLdGdzKwK+DnwMXf/WvQyd28Pb2VdYGZ/SXDX0ueBf3P35BuSFxGZZunpaayvWshjLxwGYOe+k1QvLznHWjPjnGcM7t4FXEuQEE4BHwOuc/fjZna7me0Iu34AKCC4RbU16usL4fK3AaXAYeAF4HngtqndHRGR1FG9onjwGUqHT7TR1NKR4IgCkWStvItmZiuA/Vu3bqW8vDzR4YiITJlfPrafvYdOA3CBlXLZhqVT9t4NDQ3U1NQArHT3A/Gulzz3R4mIzEHrVi4Y/H7XgVP09iZ+EFqJQUQkgSoWF5CfmwkEg9D7k+DhekoMIiIJlJYWGXbWsHP/yQRGE1BiEBFJsOi5GhqOtnK2syeB0SgxiIgkXOG8LMoWzAOgr7+f/YdPJzQeJQYRkSSwatn8we/3HVJiEBGZ86ITQ/3RM3R1J+6hEEoMIiJJYH5+NouKgsfS9fb1J3TqTyUGEZEkUVVeNPh9Ii8nKTGIiCSJ6MtJBxtb6ElQsZsSg4hIkiguyKaoIBuA7p4+6o+eSUgcSgwiIkkiEolQtWzoctLehsQ8iluJQUQkiVRFXU6qO9pKIh50qsQgIpJEFhXnkp2ZDkB7RzctbV0zHoMSg4hIEolEIiwJq6ABDh9vm/EYlBhERJJM2cKhxHDkZOuMb1+JQUQkySyNSgyHT+iMQURkzistySM9LZjys/lMJ+0d3TO6fSUGEZEkk5GeRmlx3uDrIzN81qDEICKShIaPMygxiIjMedGJ4dip9hndthKDiEgSWhg+aRXgZEvHjBa6KTGIiCSh/NxMssJCt86u3hmd7jMjnk5mdj6wGdgA7ANudvenxtPPzIqAbwKvA1qBj7v7t6diJ0REZptIJML8eVkcbz7MccRUAAAITUlEQVQLwOnWLvJyMmdk2+c8YzCzLOB+4AdAEXAX8KCZFY6z3z8DvUAZ8Ebg82Z25RTth4jIrFOYnz34fUtb54xtN55LSVcBme5+t7t3u/u9wA7gnfH2M7M84AbgE+7e7u7bgH8Bbp2qHRERmW0K8obOENrOztylpHgSwzrgxZi2XcD6cfRbC/QDted4DxERCRXOyxr8Pm0GR4TjGWPIB2LvlWoH8sbRLx/ocPf+EZaJiMgIqpeXUN94hp6+flZXFM/YduNJDG1AbkxbHsEAcrz92oAcM4tEJYeR3kNEREJZmem88dWrZny78Zyc7AQspq06bI+3Xy0QAVae4z1ERCTB4jljeBiImNmHgK8D1xPcjrol3n7u3mpmW4DPmdktQBXw58B7pmQvRERkypzzjMHdu4BrCf7QnwI+Blzn7sfN7HYz23GufuFbvQ/oAw4CvwDucvdfTvH+iIjIJEUSMZ/oeJnZCmD/1q1bKS8vT3Q4IiIpoaGhgZqaGoCV7n4g3vX0SAwRERlGiUFERIaJ61lJSSAdoLGxMdFxiIikjKi/menjWS9VEkMZwI033pjoOEREUlEZsDfezqmSGJ4CLgeOEDyIT0REzi2dICm85GnYY0mJu5JERGTmaPBZRESGUWIQEZFhlBhERGQYJQYRERlGiUFERIZRYhARkWGUGEREZJhUKXCbMDM7H9hMMDfEPuBmdx9XsccUxXEx8HN3Lw1fZxHMW3EDQdHeV9z9c1H9Pwj8LTAfuB94n7u3hcteA3yVYF6L54B3u/vecFkl8C3gUuAY8EF3/8VktznKPr0O+DywJtzWl9z9HjMrAr4JvI5glr6Pu/u3w3UiwGeAW4Es4NvAR9y9J1z+P4G/JyjK+Q3wHnc/Fi4b9VhOZpsj7NebwhhWhvv1xXC/Uv6YRa1XBDwP3OHu/5bqxyxc52bgHqAzqvkDwH9M9GeYbMdtpszqM4bw4NwP/AAoAu4CHjSzwhmMIWJm7wUeJPgPPuBOghnvqoCLgJvM7M/Cda4hmM/iGoJfthzga+GyhcBPwvWLCCZM+pWZDRzLewl+4RcQTIZ0r5mtmsw2R9mvCuBHwGfDON5FMBHTNcA/E/wylAFvBD5vZleGq94KvB3YSJBQLgJuD99zHcEv2nvC+GvD/YnnWE5omyPsVxlwH/C37l4AvAO428w2TvTnlyzHLMZmYFnU65Q9ZlE2Av/g7vlRX99hdh23GTGrEwNwFZDp7ne7e7e73wvsAN45gzHcCbyf4A9otJsIJitqCp+T/mWCyYwGlv2ru+9w91bgo8Cfmlk+wS/LDnf/UbhPXwKygRozWwtcSPApsMvdHwJ+CtwyyW2OZAXwfXff4u594afAR4Aagk9Jn3D3dnffBvwLwS/6wHbudveGcBKnT0XF8L+An7n779y9A/g74DIzW8MYx9LM8iaxzWHc/QiwyN1/Gf4BWAD0AGdmwTEDwMxuAgqBF8LXk/n5JfyYRdkEbBuhfVYct5k02xPDOuDFmLZdwPoZjGGzu28Cnh5oCE+hyxg+53V0XOtilu0lOFZrR1gG4OG664C6mFPSXcD6SW7zJdz9UXf/i6h9KmHoeVb9BJ8c49nOLmBpuP6wZe7eDtRH7dtox3LtJLY50r6dCf9wdRKc6f0/4DgpfswAzGwl8Eng5qjmyfz8kuKYmVk6weWqd5vZYTPbY2YfNbNiZsFxm2mzPTHkA+0xbe1A3kwF4O6HR2ge+GQQHVt0XMPidvd+oCNcPtY+nWvZRLc5JjObT/Bp6QngGaAjXP+c24n6frL7NtFtjqYDmEdwGeBm4H/HrDvmNpLxmIV/PP8duM3do59hP5mfX7Ics0UEH76+QzA2dAPBmfoHY9YfczvJeNwSYbYnhjYgN6Ytj2CgK5EGPmVExxYd17C4w4G4nHD5WPt0rmUT3eaowlPqx4GjBL+MZ4CccP1zboehX4bJ7ttEtzmi8PJYl7s/DXyD4LIBI7xPKh2zTwS75j+OaZ/Mzy8pjpm7N7r7le7+n+7eGV6a+howMGaRysdtxs32xLCTYAAoWjUvPT2cUe7eBDQyPLbouGLjrgIiBKfdY+3TTqDSzHJjl01ymyMysysIzhJ+AtwQXmOuDddbGed2qoEj7t4cuyy8nFMZtW+j7fdkthm7T1ea2TMxzdnAbDhmfwLcYGbNZtZMcGnjnwg+VafsMQu3e56Z3RnTnEXwSTzVj9uMm+23qz4MRMzsQwS3jl1PcB1yS0KjCnwX+KSZPU9wankbwW1xA8u+ZWb3Edzi93ngx+7eZmZbgC+GtwhuIbjE0Qc84u5dZvYccJeZ/R3wKuCtwCsns82RgjezKuDnwMfcffCOCndvDWP8nJndQvCf/s8J7loZ2M5tZraV4JPTp8I2gO8DvzOzq4A/AJ8D/ujuu83sAKMcy0luM9Y2YJmZfTj82VxCMKD4NoJf9pQ9Zu5eHf3azLYRDPD+WzjwmarHDKAZ+BszayC4S+oC4K+AvyQY8E7Z45YIs/qMwd27gGsJ/kOeIrhF7LrwLodEuwPYTvCf9imCWz83A3hwL/RnCG71O0TwaeJ94bJjwJsJ7v44RXD55s3hvkKwry8juK/6m8At7r59MtscxQeAAoJf7Naory+E6/UBB4FfENyd8ctwvc3AD4HHGPpUdkcYwwsE1/M3AyeA8whuF43nWE5om7Hc/TTwPwjuSDlFcBnpve7+m4n+/JLomI0lZY9ZuK1DwFvC92wh+Dl9xt3vY3Yft2mhiXpERGSYWX3GICIi46fEICIiwygxiIjIMEoMIiIyjBKDiIgMo8QgIiLDKDGIiMgwSgwiIjKMEoOIiAzz/wGpwks+dieiGAAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(results.D)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "[5579105.48632671] second"
+ ],
+ "text/latex": [
+ "$[5579105.48632671] second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_event = details.t_events[0] * s"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "[64.57298017] day"
+ ],
+ "text/latex": [
+ "$[64.57298017] day$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "t_event.to(UNITS.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [[5579105.486326713]] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 224 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " A termination event occurred. \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events [[5579105.486326713]]\n",
+ "nfev 224\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 1\n",
+ "message A termination event occurred.\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ts = linspace(t_0, t_event, 201)\n",
+ "results, details = run_ode_solver(system, slope_func, events=event_func, t_eval=ts)\n",
+ "details"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(results.D)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results.index /= 60 * 60 * 24"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[]"
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(results.D)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results.D /= 1**9\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(results.D)\n",
+ "decorate(xlabel=\"days\",\n",
+ " ylabel=\"millions of kilometers\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/chap23mine.ipynb b/code/chap23mine.ipynb
new file mode 100644
index 00000000..7f4f7dc3
--- /dev/null
+++ b/code/chap23mine.ipynb
@@ -0,0 +1,1178 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Chapter 23\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": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Code from the previous chapter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "degree"
+ ],
+ "text/latex": [
+ "$degree$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "m = UNITS.meter\n",
+ "s = UNITS.second\n",
+ "kg = UNITS.kilogram\n",
+ "degree = UNITS.degree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " x \n",
+ " 0 meter \n",
+ " \n",
+ " \n",
+ " y \n",
+ " 1 meter \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " mass \n",
+ " 0.145 kilogram \n",
+ " \n",
+ " \n",
+ " diameter \n",
+ " 0.073 meter \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3 \n",
+ " \n",
+ " \n",
+ " angle \n",
+ " 45 degree \n",
+ " \n",
+ " \n",
+ " velocity \n",
+ " 40.0 meter / second \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 20 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "x 0 meter\n",
+ "y 1 meter\n",
+ "g 9.8 meter / second ** 2\n",
+ "mass 0.145 kilogram\n",
+ "diameter 0.073 meter\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "C_d 0.3\n",
+ "angle 45 degree\n",
+ "velocity 40.0 meter / second\n",
+ "t_end 20 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "params = Params(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",
+ " t_end = 20 * s)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_system(params):\n",
+ " \"\"\"Make a system object.\n",
+ " \n",
+ " params: Params object with angle, velocity, x, y,\n",
+ " diameter, duration, g, mass, rho, and C_d\n",
+ " \n",
+ " returns: System object\n",
+ " \"\"\"\n",
+ " unpack(params)\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",
+ " return System(params, init=init, area=area)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def drag_force(V, system):\n",
+ " \"\"\"Computes drag force in the opposite direction of `V`.\n",
+ " \n",
+ " V: velocity\n",
+ " system: System object with rho, C_d, area\n",
+ " \n",
+ " returns: Vector drag force\n",
+ " \"\"\"\n",
+ " unpack(system)\n",
+ " mag = -rho * V.mag**2 * C_d * area / 2\n",
+ " direction = V.hat()\n",
+ " f_drag = mag * direction\n",
+ " return f_drag"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "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",
+ " V = Vector(vx, vy) \n",
+ " a_drag = drag_force(V, system) / mass\n",
+ " a_grav = Vector(0, -g)\n",
+ " \n",
+ " a = a_grav + a_drag\n",
+ " \n",
+ " return vx, vy, a.x, a.y"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def event_func(state, t, system):\n",
+ " \"\"\"Stop when the y coordinate is 0.\n",
+ " \n",
+ " state: State object\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: y coordinate\n",
+ " \"\"\"\n",
+ " x, y, vx, vy = state\n",
+ " return y"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Optimal launch angle\n",
+ "\n",
+ "To find the launch angle that maximizes distance from home plate, we need a function that takes launch angle and returns range."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def range_func(angle, params): \n",
+ " \"\"\"Computes range for a given launch angle.\n",
+ " \n",
+ " angle: launch angle in degrees\n",
+ " params: Params object\n",
+ " \n",
+ " returns: distance in meters\n",
+ " \"\"\"\n",
+ " params = Params(params, angle=angle)\n",
+ " system = make_system(params)\n",
+ " results, details = run_ode_solver(system, slope_func, events=event_func)\n",
+ " x_dist = get_last_value(results.x) * m\n",
+ " return x_dist"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's test `range_func`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Wall time: 129 ms\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "102.72776151763686 meter"
+ ],
+ "text/latex": [
+ "$102.72776151763686 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "%time range_func(45, params)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And sweep through a range of angles."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "20.0 79.96823513701818 meter\n",
+ "23.0 86.2962864918857 meter\n",
+ "26.0 91.59647908800756 meter\n",
+ "29.0 95.89089380357947 meter\n",
+ "32.0 99.20335822576214 meter\n",
+ "35.0 101.55668007973463 meter\n",
+ "38.0 102.97173880917646 meter\n",
+ "41.0 103.46740813177843 meter\n",
+ "44.0 103.060922479178 meter\n",
+ "47.0 101.7684506860653 meter\n",
+ "50.0 99.60572853320414 meter\n",
+ "53.0 96.58867331645769 meter\n",
+ "56.0 92.7339915489422 meter\n",
+ "59.0 88.05990483905572 meter\n",
+ "62.0 82.58716276454999 meter\n",
+ "65.0 76.34016117578483 meter\n",
+ "68.0 69.34714056465755 meter\n",
+ "71.0 61.63878192638946 meter\n",
+ "74.0 53.256101549629825 meter\n",
+ "77.0 44.246680677829886 meter\n",
+ "80.0 34.6702130194327 meter\n"
+ ]
+ }
+ ],
+ "source": [
+ "angles = linspace(20, 80, 21)\n",
+ "sweep = SweepSeries()\n",
+ "\n",
+ "for angle in angles:\n",
+ " x_dist = range_func(angle, params)\n",
+ " print(angle, x_dist)\n",
+ " sweep[angle] = x_dist"
+ ]
+ },
+ {
+ "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": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Saving figure to file figs/chap10-fig03.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(sweep, color='C2')\n",
+ "decorate(xlabel='Launch angle (degree)',\n",
+ " ylabel='Range (m)',\n",
+ " title='Range as a function of launch angle',\n",
+ " legend=False)\n",
+ "\n",
+ "savefig('figs/chap10-fig03.pdf')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can use `max_bounded` to search for the peak efficiently."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Wall time: 935 ms\n"
+ ]
+ }
+ ],
+ "source": [
+ "%time res = max_bounded(range_func, [0, 90], params)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`res` is an `ModSimSeries` object with detailed results:"
+ ]
+ },
+ {
+ "cell_type": "raw",
+ "metadata": {},
+ "source": [
+ "res"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "`x` is the optimal angle and `fun` the optional range."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "41.139142795614596 degree"
+ ],
+ "text/latex": [
+ "$41.139142795614596 degree$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "optimal_angle = res.x * degree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "103.46837822354611 meter"
+ ],
+ "text/latex": [
+ "$103.46837822354611 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "max_x_dist = res.fun"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Under the hood\n",
+ "\n",
+ "Read the source code for `max_bounded` and `min_bounded`, below.\n",
+ "\n",
+ "Add a print statement to `range_func` that prints `angle`. Then run `max_bounded` again so you can see how many times it calls `range_func` and what the arguments are."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%psource max_bounded"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%psource min_bounded"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### The Manny Ramirez problem\n",
+ "\n",
+ "Finally, let's solve the Manny Ramirez problem:\n",
+ "\n",
+ "*What is the minimum effort required to hit a home run in Fenway Park?*\n",
+ "\n",
+ "Fenway Park is a baseball stadium in Boston, Massachusetts. One of its most famous features is the \"Green Monster\", which is a wall in left field that is unusually close to home plate, only 310 feet along the left field line. To compensate for the short distance, the wall is unusually high, at 37 feet.\n",
+ "\n",
+ "Although the problem asks for a minimum, it is not an optimization problem. Rather, we want to solve for the initial velocity that just barely gets the ball to the top of the wall, given that it is launched at the optimal angle.\n",
+ "\n",
+ "And we have to be careful about what we mean by \"optimal\". For this problem, we don't want the longest range, we want the maximum height at the point where it reaches the wall.\n",
+ "\n",
+ "If you are ready to solve the problem on your own, go ahead. Otherwise I will walk you through the process with an outline and some starter code.\n",
+ "\n",
+ "As a first step, write a function called `height_func` that takes a launch angle and a params as parameters, simulates the flights of a baseball, and returns the height of the baseball when it reaches a point 94.5 meters (310 feet) from home plate."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def event_func(state, t, system):\n",
+ " \"\"\"Stop when the y coordinate is 0.\n",
+ " \n",
+ " state: State object\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: y coordinate\n",
+ " \"\"\"\n",
+ " x, y, vx, vy = state\n",
+ " return x - 94.5 * m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Always test the slope function with the initial conditions."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " x \n",
+ " 0 meter \n",
+ " \n",
+ " \n",
+ " y \n",
+ " 1 meter \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " mass \n",
+ " 0.145 kilogram \n",
+ " \n",
+ " \n",
+ " diameter \n",
+ " 0.073 meter \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3 \n",
+ " \n",
+ " \n",
+ " angle \n",
+ " 45 degree \n",
+ " \n",
+ " \n",
+ " velocity \n",
+ " 40.0 meter / second \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 20 second \n",
+ " \n",
+ " \n",
+ " init \n",
+ " x 0 meter\n",
+ "y ... \n",
+ " \n",
+ " \n",
+ " area \n",
+ " 0.004185386812745002 meter ** 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "x 0 meter\n",
+ "y 1 meter\n",
+ "g 9.8 meter / second ** 2\n",
+ "mass 0.145 kilogram\n",
+ "diameter 0.073 meter\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "C_d 0.3\n",
+ "angle 45 degree\n",
+ "velocity 40.0 meter / second\n",
+ "t_end 20 second\n",
+ "init x 0 meter\n",
+ "y ...\n",
+ "area 0.004185386812745002 meter ** 2\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = make_system(params)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-94.5 meter"
+ ],
+ "text/latex": [
+ "$-94.5 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "event_func(system.init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Test your function with a launch angle of 45 degrees:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def height_func(angle, params): \n",
+ " \"\"\"Computes range for a given launch angle.\n",
+ " \n",
+ " angle: launch angle in degrees\n",
+ " params: Params object\n",
+ " \n",
+ " returns: distance in meters\n",
+ " \"\"\"\n",
+ " params = Params(params, angle=angle)\n",
+ " system = make_system(params)\n",
+ " results, details = run_ode_solver(system, slope_func, events=event_func)\n",
+ " y_dist = get_last_value(results.y) * m\n",
+ " return y_dist"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "11.033479404035603 meter"
+ ],
+ "text/latex": [
+ "$11.033479404035603 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 77,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "height_func(45 * degree, params)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now use `max_bounded` to find the optimal angle. Is it higher or lower than the angle that maximizes range?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fun \n",
+ " 11.04782805563812 meter \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ " message \n",
+ " Solution found. \n",
+ " \n",
+ " \n",
+ " x \n",
+ " 44.5406 \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 12 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "fun 11.04782805563812 meter\n",
+ "status 0\n",
+ "success True\n",
+ "message Solution found.\n",
+ "x 44.5406\n",
+ "nfev 12\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "result = max_bounded(height_func, [0, 90], params)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The solution that results in the highest height is different from the optimal angle in order to get a maximum range. However, it is quite similar."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "With initial velocity 40 m/s and an optimal launch angle, the ball clears the Green Monster with a little room to spare.\n",
+ "\n",
+ "Which means we can get over the wall with a lower initial velocity."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Finding the minimum velocity\n",
+ "\n",
+ "Even though we are finding the \"minimum\" velocity, we are not really solving a minimization problem. Rather, we want to find the velocity that makes the height at the wall exactly 11 m, given given that it's launched at the optimal angle. And that's a job for `fsolve`.\n",
+ "\n",
+ "Write an error function that takes a velocity and a `Params` object as parameters. It should use `max_bounded` to find the highest possible height of the ball at the wall, for the given velocity. Then it should return the difference between that optimal height and 11 meters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " x \n",
+ " 0 meter \n",
+ " \n",
+ " \n",
+ " y \n",
+ " 1 meter \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " mass \n",
+ " 0.145 kilogram \n",
+ " \n",
+ " \n",
+ " diameter \n",
+ " 0.073 meter \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3 \n",
+ " \n",
+ " \n",
+ " angle \n",
+ " 45 degree \n",
+ " \n",
+ " \n",
+ " velocity \n",
+ " 40.0 meter / second \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 20 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "x 0 meter\n",
+ "y 1 meter\n",
+ "g 9.8 meter / second ** 2\n",
+ "mass 0.145 kilogram\n",
+ "diameter 0.073 meter\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "C_d 0.3\n",
+ "angle 45 degree\n",
+ "velocity 40.0 meter / second\n",
+ "t_end 20 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 83,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "params = Params(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",
+ " t_end = 20 * s)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def error_func(velocity, params):\n",
+ " parm = remove_units(params)\n",
+ " parm[8] = velocity\n",
+ " # find max height of ball\n",
+ " res = max_bounded(height_func, [0, 90], parm)\n",
+ " # return the difference between the result in meters and 11 m\n",
+ " return res.fun - 11 * m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Test your error function before you call `fsolve`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 99,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "0.04782805563812076 meter"
+ ],
+ "text/latex": [
+ "$0.04782805563812076 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 99,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "error_func(40, params)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then use `fsolve` to find the answer to the problem, the minimum velocity that gets the ball out of the park."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([39.98806408])"
+ ]
+ },
+ "execution_count": 100,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "guess = 40\n",
+ "res = fsolve(error_func, guess, params_nodim)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "And just to check, run `error_func` with the value you found."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 106,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "-0.00025681974627289605 meter"
+ ],
+ "text/latex": [
+ "$-0.00025681974627289605 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 106,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "error_func(39.9880, params)"
+ ]
+ }
+ ],
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/hiv_model.ipynb b/code/hiv_model.ipynb
new file mode 100644
index 00000000..e9851526
--- /dev/null
+++ b/code/hiv_model.ipynb
@@ -0,0 +1,237 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### HIV Sim Notebook - Dieter Brehm\n",
+ "An implementation of an HIV model"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_system(gamma, mu, beta, alpha, sigma, delta, pi, tau, rho, dt):\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(CD = 1000, R=200, L=0, E=0, V=100)\n",
+ "\n",
+ " t0 = 0\n",
+ " t_end = 120 * 1/dt\n",
+ "\n",
+ " return System(init=init, t0=t0, t_end=t_end,\n",
+ " gamma=gamma, mu=mu, beta=beta, \n",
+ " alpha=alpha, sigma=sigma, delta=delta,\n",
+ " pi=pi, tau=tau, rho=rho, dt = dt)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the HIV model.\n",
+ " \n",
+ " state: State (R, L, E, V)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (RLEV)\n",
+ " \"\"\"\n",
+ " \n",
+ " unpack(system)\n",
+ " \n",
+ " cd, r, l, e, v = state\n",
+ " \n",
+ " r_flow_in = gamma * tau\n",
+ " r_flow_death = mu * r\n",
+ " r_flow_out = beta * r * v\n",
+ " \n",
+ " l_flow_in = rho * r_flow_out\n",
+ " l_flow_death = mu * l\n",
+ " l_flow_e = alpha * l\n",
+ " \n",
+ " e_flow_in = ((1 - rho) * r_flow_out + l_flow_e)\n",
+ " e_flow_death = delta * e\n",
+ " \n",
+ " v_creation_in = pi * e\n",
+ " v_flow_death = sigma * v\n",
+ " \n",
+ " #cd should be = [1000[1-tau) + R + E +L]]\n",
+ " #cd = (1 - tau) + r + e + l\n",
+ " r += (r_flow_in - r_flow_death - r_flow_out) * dt\n",
+ " l += (l_flow_in - l_flow_death - l_flow_e) * dt\n",
+ " e += (e_flow_in - e_flow_death) * dt\n",
+ " v += (v_creation_in - v_flow_death) * dt\n",
+ " cd = (1000 * (1 - tau)) + r + e + l\n",
+ " \n",
+ " return State(CD=cd, R=r, L=l, E=e, V=v)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "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: TimeFrame\n",
+ " \"\"\"\n",
+ " frame = TimeFrame(columns=system.init.index)\n",
+ " frame.row[system.t0] = system.init\n",
+ " \n",
+ " for t in linrange(system.t0, system.t_end):\n",
+ " frame.row[t+1] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# gamma, mu, beta, alpha, sigma, delta, pi, tau, rho\n",
+ "\n",
+ "def plot_simulation_paper_consts():\n",
+ " #plt.xkcd()\n",
+ " plt.rcdefaults()\n",
+ " Gamma = 1.36\n",
+ " Mu = 1.36 * (10 ** (-3))\n",
+ " Beta = 0.00027\n",
+ " Alpha = 3.6 * (10 ** (-2))\n",
+ " Sigma = 2\n",
+ " Delta = 0.33\n",
+ " Pi = 100\n",
+ " Tau = 0.2\n",
+ " Rho = 0.1\n",
+ " dt = 0.1\n",
+ " system = make_system(Gamma, Mu, Beta, Alpha, Sigma, Delta, Pi, Tau, Rho, dt)\n",
+ " results = run_simulation(system, update_func)\n",
+ " \n",
+ " fig1 = plt.figure()\n",
+ " ax1 = fig1.add_subplot(211)\n",
+ " ax1.plot(results.R, 'r')\n",
+ " \n",
+ " ax1.set_ylabel('R')\n",
+ " ax1.set_xlabel('steps')\n",
+ " \n",
+ " ax2 = ax1.twinx()\n",
+ " ax2.set_yscale('log')\n",
+ " ax2.set_title('Cell Counts versus Time step')\n",
+ " ax2.plot(results.L, 'g', label=\"L\")\n",
+ " ax2.plot(results.E, 'b', label=\"E\")\n",
+ " ax2.plot(np.nan, '-r', label = 'R')\n",
+ " \n",
+ " ax2.set_ylabel('L, E')\n",
+ " #ax2.set_xlim([0, 150])\n",
+ " ax2.legend()\n",
+ " \n",
+ " fig2 = plt.figure()\n",
+ " ax1 = fig2.add_subplot(212)\n",
+ " ax1.plot(results.CD, 'g', label = \"CD4\")\n",
+ " ax1.set_ylabel('CD4 Lymphocytes')\n",
+ " ax1.set_xlabel('steps')\n",
+ " \n",
+ " ax2 = ax1.twinx()\n",
+ " ax2.plot(results.V, 'r', label=\"V\")\n",
+ " ax2.plot(np.nan, 'g', label = \"CD4\")\n",
+ " ax2.set_yscale('log')\n",
+ " ax2.set_ylabel('V')\n",
+ " #ax2.set_xlim([0, 150])\n",
+ " ax2.set_title('Virions versus Time Step')\n",
+ " legend(loc=\"upper right\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_simulation_paper_consts()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/jump.ipynb b/code/jump.ipynb
index 7ab3132c..9567ba32 100644
--- a/code/jump.ipynb
+++ b/code/jump.ipynb
@@ -8,7 +8,7 @@
"\n",
"Bungee dunk example, taking into account the mass of the bungee cord\n",
"\n",
- "Copyright 2017 Allen Downey\n",
+ "Copyright 2018 Allen Downey\n",
"\n",
"License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
]
@@ -16,9 +16,7 @@
{
"cell_type": "code",
"execution_count": 1,
- "metadata": {
- "collapsed": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"# Configure Jupyter so figures appear in the notebook\n",
@@ -78,10 +76,25 @@
{
"cell_type": "code",
"execution_count": 2,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "newton"
+ ],
+ "text/latex": [
+ "$newton$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"m = UNITS.meter\n",
"s = UNITS.second\n",
@@ -92,17 +105,98 @@
{
"cell_type": "code",
"execution_count": 3,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " v_init \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " M \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " m_cord \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " area \n",
+ " 1 meter ** 2 \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " v_term \n",
+ " 60.0 meter / second \n",
+ " \n",
+ " \n",
+ " L \n",
+ " 25 meter \n",
+ " \n",
+ " \n",
+ " k \n",
+ " 40.0 newton / meter \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "v_init 0.0 meter / second\n",
+ "g 9.8 meter / second ** 2\n",
+ "M 75 kilogram\n",
+ "m_cord 75 kilogram\n",
+ "area 1 meter ** 2\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "v_term 60.0 meter / second\n",
+ "L 25 meter\n",
+ "k 40.0 newton / meter\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"params = Params(v_init = 0 * m / s,\n",
" g = 9.8 * m/s**2,\n",
" M = 75 * kg, # mass of jumper\n",
" m_cord = 75 * kg, # mass of cord\n",
" area = 1 * m**2, # frontal area of jumper\n",
- " rho = 1.2 * kg/m**3, # density of air\n",
+ " rho = 1.2 * kg/m**3, # density of air\n",
" v_term = 60 * m / s, # terminal velocity of jumper\n",
" L = 25 * m, # length of cord\n",
" k = 40 * N / m) # spring constant of cord"
@@ -122,9 +216,7 @@
{
"cell_type": "code",
"execution_count": 4,
- "metadata": {
- "collapsed": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"def make_system(params):\n",
@@ -158,7 +250,112 @@
"cell_type": "code",
"execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " v_init \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " M \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " m_cord \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " area \n",
+ " 1 meter ** 2 \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " v_term \n",
+ " 60.0 meter / second \n",
+ " \n",
+ " \n",
+ " L \n",
+ " 25 meter \n",
+ " \n",
+ " \n",
+ " k \n",
+ " 40.0 newton / meter \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3402777777777778 dimensionless \n",
+ " \n",
+ " \n",
+ " mu \n",
+ " 1.0 dimensionless \n",
+ " \n",
+ " \n",
+ " init \n",
+ " y 0 meter\n",
+ "v 0.0 meter / secon... \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 10 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "v_init 0.0 meter / second\n",
+ "g 9.8 meter / second ** 2\n",
+ "M 75 kilogram\n",
+ "m_cord 75 kilogram\n",
+ "area 1 meter ** 2\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "v_term 60.0 meter / second\n",
+ "L 25 meter\n",
+ "k 40.0 newton / meter\n",
+ "C_d 0.3402777777777778 dimensionless\n",
+ "mu 1.0 dimensionless\n",
+ "init y 0 meter\n",
+ "v 0.0 meter / secon...\n",
+ "t_end 10 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"system = make_system(params)"
]
@@ -199,7 +396,24 @@
"cell_type": "code",
"execution_count": 7,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-81.66666666666667 kilogram meter/second2 "
+ ],
+ "text/latex": [
+ "$-81.66666666666667 \\frac{kilogram \\cdot meter}{second^{2}}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"drag_force(20 * m/s, system)"
]
@@ -210,19 +424,18 @@
"source": [
"The following function computes the acceleration of the jumper due to tension in the cord.\n",
"\n",
- "$a_cord = \\frac{\\mu v^2/2}{\\mu(L+y) + 2L}$ "
+ "$a_{cord} = \\frac{\\mu v^2/2}{\\mu(L+y) + 2L}$ "
]
},
{
"cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "collapsed": true
- },
+ "execution_count": 48,
+ "metadata": {},
"outputs": [],
"source": [
"def cord_acc(y, v, system):\n",
- " \"\"\"Computes the force of the bungee cord on the jumper:\n",
+ " \"\"\"Computes acceleration due to the force of \n",
+ " the bungee cord on the jumper.\n",
" \n",
" y: height of the jumper\n",
" v: velocity of the jumpter\n",
@@ -230,8 +443,9 @@
" returns: acceleration in m/s\n",
" \"\"\"\n",
" unpack(system)\n",
- " a_cord = -v**2 / 2 / (2*L/mu + (L+y))\n",
- " return a_cord"
+ " \n",
+ " acc = -((mu * v**2) / 2) / (mu * (L + y) + 2 * L)\n",
+ " return acc"
]
},
{
@@ -243,9 +457,26 @@
},
{
"cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-3.6363636363636362 meter/second2 "
+ ],
+ "text/latex": [
+ "$-3.6363636363636362 \\frac{meter}{second^{2}}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"y = -20 * m\n",
"v = -20 * m/s\n",
@@ -261,10 +492,8 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "collapsed": true
- },
+ "execution_count": 54,
+ "metadata": {},
"outputs": [],
"source": [
"def slope_func1(state, t, system):\n",
@@ -280,9 +509,9 @@
" y, v = state\n",
" unpack(system)\n",
" \n",
- " a_drag = drag_force(v, system) / M\n",
- " a_cord = cord_acc(y, v, system)\n",
- " dvdt = -g + a_cord + a_drag\n",
+ " drag_acceleration = drag_force(v, system) / M\n",
+ " cord_acceleration = cord_acc(y, v, system)\n",
+ " dvdt = -g + drag_acceleration + cord_acceleration\n",
" \n",
" return v, dvdt"
]
@@ -296,9 +525,20 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [],
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(, )"
+ ]
+ },
+ "execution_count": 58,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"slope_func1(system.init, 0, system)"
]
@@ -312,7 +552,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
@@ -328,9 +568,19 @@
" \"\"\"\n",
" y, v = state\n",
" unpack(system)\n",
+ " \n",
" return y + L"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Solution goes here"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -340,9 +590,26 @@
},
{
"cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "25 meter"
+ ],
+ "text/latex": [
+ "$25 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"event_func(system.init, 0, system)"
]
@@ -356,13 +623,23 @@
},
{
"cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "results, details = run_ode_solver(system, slope_func1, events=event_func, max_step=0.1)\n",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'A termination event occurred.'"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results, details = run_ode_solver(system, slope_func1, \n",
+ " events=event_func, max_step=0.1)\n",
"details.message"
]
},
@@ -375,9 +652,20 @@
},
{
"cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.211816442174678"
+ ]
+ },
+ "execution_count": 63,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"t_final = get_last_label(results)"
]
@@ -391,9 +679,20 @@
},
{
"cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [],
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"def plot_position(results, **options):\n",
" plot(results.y, **options)\n",
@@ -403,22 +702,6 @@
"plot_position(results)"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We can use `min` to find the lowest point:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [],
- "source": [
- "min(results.y) * m"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -428,11 +711,22 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 65,
"metadata": {
"scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd4XOd55/3vmYpe2HsnH/YiihQ7VSxFvdfIXnud7Js4TuL1q8SvXN7YTiLHjr1eZdfetXeT9SZZx5KoZjWrF1IkJRaJFeTDTgrsFNExaDOzf5zBEIRAcChh5sxgfp/rwmXgmTMzNyAYN59y7tuJx+OIiIhkG5/XAYiIiPRECUpERLKSEpSIiGQlJSgREclKSlAiIpKVlKBERCQrKUGJiEhWUoISEZGspAQlIiJZSQlKRESyUsDrANLNGBMGFgDHgajH4YiI5Cs/MBzYaK1tTeUJ/T5B4SanNV4HISIiACwH3k3lwnxIUMcBfv3rXzNs2DCvYxERyUsnTpzgwQcfhMTf5FTkQ4KKAgwbNoxRo0Z5HYuISL5LeatFhyRERCQrKUGJiEhWUoISEZGspAQlIiJZKWcOSRhj5gC/AGYDB4AvW2s3ehuViMinE4vFqK6upqmpyetQ+kQwGGTIkCGUlZX12WvmRIIyxoSA3wKPAiuAu4BXjTFjrbX16XzveDyO4zjpfAsRyUNnzpzBcRyMMfh8ub2YFY/HiUQiHD16FKDPklSu/FSuBILW2kette3W2seAncB96XzTeDxOwwevcOa1X9Gw7W1iLf3jXzoi4r3a2lqGDh2a88kJwHEcioqKGDlyJKdOneqz182JGRQwHdjVbWw3MCudbxpva6H15CEAWqp303p8P0UT51I4fg6OP1d+dCKSjaLRKMFg0Osw+lRhYSHt7e199nq5krpLgOZuY81AUTrf1AkVUDBmevLreLSdpj0bqVn9GC3H9hGPx9P59iLSz/W37YO+/n5yJUE1AYXdxoqAxnS+qeM4lM5cQfmCmwiUDEiORyONNGx5nbr1z9JecyKdIYiI5K1cSVBVgOk2NjUxnnahwaOpWH43JTOX4wudy5PttSepXf8s9R++TjTSkIlQRETyRq5spLwFOMaYrwM/wz3FNxt4JlMBOI6PwjEzCA+fRGT/h0QObScec0tKtR7fR9vJgxSOn03hxHn4AqFMhSUi0m/lxAzKWtsG3ICbmM4C3wZut9aeznQsvmCY4qmLqFxxH+FhE5Lj8ViU5v0fUvPOb2j5aDfxeCzToYmI9LmHHnqIRx55JPl1NBplyZIlvP/++2l/71yZQWGt3QEs8zqOTv6iMsouu472s8do3LWejjo3V8ZaIzRsf5vI4R0UT1tMaOBIjyMVkVzQfGArzXs3EY/23Sm43jj+IEWTL6dowpxer7vjjjt4+OGHefjhh/H7/axdu5aCggIWLlyY9hhzYgaVzYIDRlCx5E5K51yNr6A4Od5Rf4a695+nbtPLRJvqPIxQRHJB5ODWjCUncE8lRw5uveh1S5YswefzJWdMzz//PLfccktGTiAqQfUBx3EoGDmFASvup2jSfByfP/lY26lDnF39GI1Va4m1p9TlWETykHt/Zebui3L8QQrH9z57AvD5fNx66608//zzRCIRXn/9dW6//fYMRJhDS3y5wAkEKZ6ygILR02jes4GWo3vcB+JxIoe203p0D0WTL6dgzPTzkpiISNGEORddbvPKHXfcwf3338+iRYuYMmUK48ePz8j7agaVBv7CEkrnXE3F0jsJVp5rMx9rb6Wxai01a1bRduqIbvQVkZwwceJExo4dy6OPPsptt92WsfdVgkqjYPkQyhfdRtm86/AXlibHo0211G16ifqNL9LRcNbDCEVEUnPHHXdw+vRpbrzxxoy9pxJUmjmOQ3j4BCpX3EexuQIncG6Nue1MNTVrVtGwYzWx1oiHUYqI9O7BBx9kx44dVFRUZOw9tQeVIY4/QNHEeRSMmkrT3o20HNkFxIE4LUeqaD22l6JJ8ykcN0v7UyIiaAaVcb5wIaUzV1C57G5Cg0Ylx+Md7TTtfo+adx6j9fgB7U+JSN5TgvJIoGwgZQtuovzyG/AXlyfHo5EG6j98lbr3n6O9ru/6qoiI5BolKA85jkNoyFgql99LyfSl+ILh5GPtZ49Tu/YZGra+SVSNEkUkD2kPKgs4Pj+F42YRHjGZ5n2biRzeAfHE/tTRPbSeOEDRhHkUTpid0Rv5RCS94vF4v+oJ1ddbE5pBZRFfqICS6UupXH4foSHjkuPxaAdNezdy9p3HaDm6R/tTIv2A3+/v0+6z2SASifRpl2AlqCwUKKmg/PLrKV94M4HSgcnxWEsTDVvfpHbdM2qUKJLjKioqOHnyJLFY7nc+iMfjNDc3c/ToUYYMGdJnr6slviwWGjSK4LK7aPloN817NhJrc++V6qg7Re36ZwkPn0SxuQJ/UelFXklEss2gQYOorq7GWut1KH0iGAwydOhQysrK+uw1laCynNsocTrhEZOI7PtAjRJF+gmfz8eYMWO8DiOraYkvR/gCITVKFJG8ogSVYzobJVYsupVA+eDkeGejxNq1T9P28TEPIxQR6RtKUDmq90aJz1G/WY0SRSS3aQ8qh3U2SgwPHU/zgS1EDmw5tz918hBtp45QMH4WRRMvO+8mYBGRXKAZVD/Q2SixcuUDhEdMTo7H4zEiB7ZS885viBzZqf0pEckpSlD9iL+whLK511Cx5E6CFUOT47G2Fhp3rKF2zZO0nan2MEIRkdQpQfVDwYohlC++nbK5n8NfWJIc72g8S92GF6jb9Ds6Gms9jFBE5OK0B9VPOY5DeMQkQkPHETm4leb9W4hH3bIqbacO03b6CIVjZ1I0aT6+UIHH0YqIfJJmUP2c4w9QNGk+A1beT8EoAyQKU8bjRA5td/enutz8KyKSLZSg8oSvoJjS2VdRufROggOGJ8dj7a00Vq2lZs0q2k4d8TBCEZHzKUHlmUD5YMqvuJWyedfhLzxXwy/aVEvdppeo2/giHQ1nPYxQRMSlPag85DgO4eETCA0ZQ+TQdpr3f0C8I7E/dfoj2s5UUzhmOkWTL8cXKvQ4WhHJV0pQeczxByiaOI+CUYamPRtp+Wg3EHf3pw7vpOXYPoonzadg7Awcn9/rcEUkz2iJT/CFiyidtZLKZXcTHDgyOR5vb6Vx1zpq1jxB68lDapQoIhmlBCVJgbKBlC+8mbL51+MvKk+OR5vqqN/8MvXanxKRDFKCkvM4jkN46DgqV9xL8dTFOIFz7ZvbzlRTs2YVjTvWJJsnioiki/agpEeOz0/RhDkUjJxC096NtBzZBcSBOJEjO2k5tpeiyfMpHDtT+1MikhY5kaCMMf8C3At0dBmeba094FFIecMXLqR05goKx8ygaff6ZC2/eEcbTbvW03K4iuJpiwkNGYvjOB5HKyL9SU4kKOAy4HZr7cteB5KvAmUDKVtwE22nDtO0az3RZrfXVLTZ3Z8KDRpF8dTFBMoGehypiPQXWb8HZYwpBKYCW7yOJd+dtz81bTFOIJR8rO1MNTXvPknDjtXEWrU/JSKfXVbMoIwxIWBADw/FgQm4S3v/0xizCPgI+Ctr7QsZDFG6cHx+isa7+1PNezcROVxF5/5Uy5EqWo/t0/6UiHxm2TKDWgIc7+HjKFAKrAG+D4wAHgGeMMbM8SZU6eQLFVIyYzmVy+8hNGhUcrxzf0r3T4nIZ5EVMyhr7dsky2z36NUunz9ljPn3wK3A1nTGJakJlA7oeX+qqcv+1LQlBEp7miSLiPQsW2ZQF2SMucUY88VuwyGgxYt4pGcX359aRePONcTa9J9NRFKTFTOoi/AD/2CM2QVsBu7DXRL8Q0+jkh4l96dGJPanjiT2p1TfT0QuUdbPoKy1zwLfBn4D1AMPATdba9W8KIv5woWUzFzea30/9Z8Skd7kwgwKa+3PgZ97HYdcus76fu7+1DqizfWAuz9Vt+klQoNHUzx1CYHSSo8jFZFskxMJSnJb5/5UaPBot//Uvs3d+k89QeHYmRRNmo8vVOBxtCKSLbJ+iU/6D7e+31wGrPx9CkZPI3lwMx4ncmg7Ne/8hsjhHcTjMU/jFJHsoAQlGecLF57rPzVgRHI81t5K4853qV3zZLLmn4jkLyUo8UygbCDlV9xC2WXX4S8sTY53NJ6lbsML1G16mWhTnYcRioiXtAclnnIch/CwCYQGjyFycBvN+z8kHk3sT506RM2ZjygcN4vCSZfh63JvlYj0f5pBSVZw/AGKJl3GgJX3UzDKJMfjsSjNB7ZQ885vaPlot8omieQRJSjJKr6CYkpnX0XFkjsJVgxNjsdaIzRsf5vatU/Rfva4hxGKSKYoQUlWClYMoXzx7ZTOuQZfQXFyvKP+DLXv/Zb6D18jGmnwMEIRSTftQUnWchyHgpGTCQ8dR/OBLUQObCEeiwLQenw/bScPUThhLkUT5uIEgh5HKyJ9TTMoyXpOIEjxlAVUrrif8PCJyfF4LErzvs2cXf0YLcf2aX9KpJ9JaQZljJkF3ABcDgwBosAJYCPwgrV2X9oiFEnwF5VSNu9a2sfOoLFqHR31ZwCItTTRsOV1Wg7voHj6EoLlQzyOVET6Qq8zKGPMCmPMW8Am4BagBliX+LoF+DxQZYx5zRizIt3BigAEB4ygYumdlM66El+oMDneXnOC2rXP0LDtbbWdF+kHLjiDMsb8L2AG8DPgDmtt7QWuKwMeAB41xmyz1n4pHYGKdOU4PgpGTyU0fALN+zbTcnB7okRSnJbq3bSe2E/RpMspHKe28yK5qrclvhettV++2AtYa+uBXwK/NMbc3WeRiaTAFwhRMnUxBaOm0bR7PW2nDgMQ72inafd6Wj6qomTaUkJDxngcqYhcqgsu8Vlrn7rUF7PWPvnZwhH5dAIlFZRffgPlC27EX1yRHO9s61G38SU6GntcBBCRLJXqIYki4P8D/o+1dq8x5pfAg8AG4EFrre6clKwQGjyGyuUjaTm8k6a9m4h3tAHQdvoIbYmySUWT5uMLhj2OVEQuJtVj5v+AeyAiZIy5Dfgi8HUgAvyXNMUm8qk4Pj+F42czYOUDn2zrcXAbNe88RstHu9TWQyTLpZqgbgMesNbuBO4BXrPW/k/gL4Hr0hWcyGdxrq3HXQQHDE+Ox9oiNGx/h9q1T6tskkgWSzVBFQInjTE+4PeAlxPjcdx7okSyVqBsEOVX3ErZ3M9doGzS60QjjR5GKCI9SbXU0UbcPajTQCXwjDFmBPA3wHtpik2kzziOQ3jEJEJDx9J8YCuR/R92KZu0j7ZThyiaOI/C8XNw/KoAJpINUp1B/SmwBPga8CfW2mPANwED/HmaYhPpc44/SPHky6lc2a1sUrSDpj0bqVn9OK0nDqpskkgW6O1G3SXAe9bamLW2Cpjb7ZJvWWtVTlpykr/QLZvUNmYGTVVr6Wj4GIBopIH6D14hNGgUxdOWEiit9DhSkfzV2wzqJ8BpY8yzxpg/McZM6vqgkpP0B6GBI6hYdhclM5afd/S87Uw1Ne8+QWPVWmLtrR5GKJK/LjiDstYuSZQxuga4Fvh/jTF+4DXgVeANa21NZsIUSR/H8VE4dgbh4RNp3ruRyOEqIO4eSz+0ndZj+yiasoCC0VNxHDUAEMmUXneDE2WMnkl8YIwZj3us/H7gF8aY/bhHzr+T7kBF0s0XKqBkxnIKRk+nsWot7WePAe6x9MYdq2k5UkXJjGUEK4d5HKlIfrik40rW2oOcq7vnAxbgzq5E+o1A2UDKr7iFthMHadq9LnkEvaP+DLXrnyU8YjLFUxfh73JkXUT6XsoJyhhzJW518+41Ypr7MiCRbOA4DuHhEwgNGf3JY+nH9tJ2MnEsfcIcVUsXSZNUa/E9CvwZcAS3D1RXceCnfRyXSFboPJZeMNLQtHs9rScOABCPttO0ZwMt1ZaS6UsIDRnrcaQi/U+qM6h/B3zZWvvP6QxGJFv5i0opu+w62j4+RlPVu3Q0nAUg2lxH3abfERo8hpLpS/EXl3scqUj/keqRpGbcyuUiec09ln43JdOX4nQ9ln76CDVrnqBp9/vEO9o9jFCk/0g1Qf0t8JPEKT6RvOY4PgrHzWLAivvPq5Yej0VpPvAhZ1c/RsvRvapGIfIZpbrEtwv4AbDPGPOJB6212iWWvNNZLb1gzDSadq6lvfYkALGWJhq2vuF2852+jEDZQI8jFclNqSao/4FbFPZXpPnUnjHm68BKa+3tXcbGAP8ELAJOAX9mrX0pnXGIpCpYPoTyxbfTemwvTbvXE2uNANB+9jg17z5J4ZjpFE1ZgC9U4HGkIrkl1QQ1GrjBWnsgXYEYY0qA7wIPAc91e/gxYD1wE7AMeNYYMzed8YhcCsdxKBg5hdDQcTTv3Uzk0DaIx4E4kSM7aT2+jyKzkILR01SNQiRFqf4/5TVgRToDAV4ExuPeCJxkjJkCXA78lbW2zVr7Jm4C+4M0xyNyyXyBECXTFlO57F5Cg0Ylx2PtrTTuWOM2Saw54WGEIrkj1RnU+8DPjDF3AfuA844pWWu/cbEXMMaEgAE9PBS31p7E7dh7zBjzPWB4l8enA0estU1dxnYDC1OMXSTjAqWVlC24ibaTh2jatY5oxK2t3FmNomDkFIrNFec1UBSR86WaoK7FbVpYwifbbqR6VGkJ8FYP41EgkOgx1ZMSPrnv1QwUpfi+Ip5wHIfwsPGEBo+m+cCW86pRtBzdQ+vJgxRNvpzCsTNVjUKkByklKGvtVZ/1jay1b9N5HvfSNOG2nO+qCFCPbskJjj/QczWKjnaadq2n5aPdlMxYRmjgSI8jFckuF9yDMsZ81xjTPTFckDGm1Bjz130T1nmqgDHdYpmaGBfJGZ3VKMoX3nxexYloYw117z9P/YevJQvTikjvhyTqgJ3GmL83xizq6QJjjGOMWWCM+QfchFHb1wFaay2wFXjEGBM2xlwF3Ab8W1+/l0gmhAaNonL5vRRPXYTjDybHW4/vp2b1YzR3WQoUyWe9NSx81BjzJPAN4FVjTAfuDbtncJfqBuNWN3eA/w0stdYeSVOcd+Hei3Uq8f5/YK3dkab3Ekk7x+enaMJcwiMmu8t+x/YBEI920GTfTyz7LSU0eIzHkYp4x0mlHIsxphi4EpgPDAViwAlgM/CWtTZre2IbY8YBB9944w1GjRp1sctFPNG9CG2n8NBxFE9bir+o1KPIRPpGdXU111xzDcB4a+2hVJ6T6iGJJtz7lF781NGJyAWFBo4guOxuWg7vpGnPhmTB2daTh2g7/RGFE+dRNGEujv+SeoyK5DTd0i6SJZJFaFc+QMGoczUv47EozXs3UbP6cVpPHvIuQJEMU4ISyTK+cBGls6+iYvHtBMoGJcejkQbqN79M3abfEW2u9zBCkcxQghLJUsHKYVQsvZOSmcvxde09deowNasfp2nvJuLRDg8jFEmvlBJU4qCBiGSY4/goHDODypUPfLL3VGLZr+3UYW+DFEmTVGdQ+4wx7xpj/tgYo+Y2IhnmCxVQOmslFUvuIFA+ODkejTRQt+l31G16Wct+0u+kmqAmAC8AXwGOGWOeN8bcfymVJkTkswtWDKFiyR2UzFx+fsv5U4eoWf04zXs3a9lP+o2UEpS19oi19ofW2jm490JtBb4JnDTG/LMx5nPpDFJEzulc9huw8n4KRk1NjsdjUZr2bqRmzSraTqfrnnmRzPk0hySqgf3AAdz7qOYC/2KMscaYxX0ZnIhcmC9USOnsKz952q+5jrqNL1G/+RWizQ0eRijy2aR6SKLYGPP7xpjncCtIfA+3J9OCxKxqFG4rjcfTFaiI9Cx52m/GsvOW/VpPHnRr++37QLX9JCelelv6KaANeBq4PtE6I8laGzPGvAos79vwRCQVjuOjcOxMwsMm0mTfo6XaAollvz0baKm2lMxcfl6XX5Fsl2qC+hLwXE8194wxQ6y1p6y1T+MmMBHxiC9cSOnsqygYPY3GHWvoaPgYSCz7bXiB8PCJFE9bgl+dfCUHpLoH9RhQ1n3QGDMGdy9KRLJIsHIYFcvuomT6UpzAJ1t6RA5uIx6PeRihyMVdcAZljHkAuCPxpQP8ozGm+wxqLHAWEck6nbX9wsMn0rhrPa3H9gJuJ9/GXeuSy37BymEeRyrSs95mUK/htlVvSnwdSXze+dEIvA/cns4AReSz8YWLKJt7DeVX3IK/uCI53tHwMbXrn6Vh29vE2iIeRijSs94aFp4BvgxgjDkE/Nha25yZsESkr4UGjqRy+T1EDm6jee+m5Mm+lurdtJ08SPHURYRHTcVxHI8jFXH1tsR3I/CatbYd2AhcaYzp8Vpr7UvpCU9E+pLj81M0cR7h4ZNorFpL26lDAMTaW2nY/o7byXfm8vPuqxLxSm+n+F4AhuEeMX+hl+vigL8vgxKR9PIXlVJ++fW0njxEU9VaohH3ht722pPUvPsUheNmUjRlAb5AyONIJZ/1tsTn6+lzEek/wkPHERo0kuZ9HxI5sCVxsi9O5NB2Wo/vp3jaEsLDJ2rZTzyRcuIxxnzZGHN3l6+fMMZ8IT1hiUimOP4gxWYhFcvvJThwZHI81tpMw5bXqd/4ItGmOg8jlHyVaqmjbwM/4fylvO3Ao8aY/5iOwEQkswIlFZQvvJnSuZ/DFz7XqKDtTDU1a55wGySqZJJkUKozqD8C7rfWJmvtWWv/Bvg88LV0BCYimec4DgUjJlG54n4Kx83iEw0S1zxB25lqb4OUvJFqgqoEemrbuR8Y2nfhiEg28AXDlExfSsXSbg0Sm9ySSfVb3iDWqnunJL1STVDvAQ8bY5KHKowxfuAh3CPoItIPBcsTDRK7l0w6tpezqx8jcqSKeDzuYYTSn6VaLPYvgDeAI8aYbbhHy2clnn9DmmITkSzQWTIpNGwCTbvW0Xp8PwDx9lYad6ymtdpSMnMFgbKBHkcq/U2qHXW3AgZ4BNgH7AL+Fphsrf0wfeGJSLbwFxRTNu9ayhfciL+wNDneXnuSmrVP0rh7PfGOdg8jlP4m5WPm1tqPgVeAV4HVwNvWWrXrFMkzocFjqFxxH0UTL8NxEn9C4nEiB7ZSs+ZxWk8e8jQ+6T9SWuIzxpQA/wTcDbTjHu0JGGNeA+6y1jb19nwR6V8cf4Bis5DwiMk07lxD+9ljAEQjjdRvfpnw0PEUT1+Kv7DE40gll6U6g/op7p7TYqAQKEh8PgL4UXpCE5FsFyitpPyKWyidfRW+UEFy3G03/7j6TslnkuohiTuBO6y1G7qMbTDGfBV4EvjTPo9MRHKC4zgUjDKEhox1281/tBuAeDTRd+rYXkpnrVQBWrlkqc6gfMCZHsbPAprDiwi+UAGls66kYtFt+Esqk+MddaepWfsUjbt0iEIuTaoJajXwPWNMsrSxMSYMfBdYk47ARCQ3BQcMp3LZ3RRPWYDjS1RHi8eJHNzqVqI4dcTbACVnXMp9UO8CHxljtiTG5gAtwPV9GZAx5uvASmvt7V3Grsbt8Nv11vUfJcotiUiWcXx+iibNJzx8Eg073qH9485DFA3UbXqJ8PCJlExfii9c5HGkks1SSlDW2n3GmGnAg8B03ESxCvi1tbZP6p0kTgp+F7c6xXPdHr4MWGWtvb8v3ktEMsNfXE75wltoPbqHpl3riLW3AtB6fD9tZ6opNldQMHqa2nlIj1KdQWGtrQF+lsZYXgROA78Ehnd7bD6w5RPPEJGsd+4QxRiadq2n5egeoEsliqN7KJm5kkBp5UVeSfJNby3fN+KWNLooa+3Ci12T2L8a0MNDcWvtSeABa+0xY8z3+GSCugwYbIz5Cu49WI8D37HWtqYSn4h4zxcqpHTO1YRHTqFxx2qizfUAtNecoPbdVRROmEvRpMtw/Cn/u1n6uYu1fO9LS4C3ehiPAgFr7bGenpQoUFsNPAP8Cvfeq1W4yfMbfRyjiKRZaNAoKpffS/O+zTQf2ALxOPF4jOb9H9B6fD8ls1YQ6tI4UfJXby3fv9+Xb2StfZvO5jKX9rwO4JouQ/uMMY/g3iCsBCWSg9xKFFe4lSi2v0N77UkAos111L3/PAWjDMVTF59386/kn5Tn0saYe4G/BCbjLrn9CXDCWvuTNMXW+b4jga8D37LWtiWGQ7gnCEUkhwVKB1C++HZajlTRZN9L3ifVUm1pO32EkunLCA2boEMUeSrVlu9fAv4b8DRucgDYDfyVMebh9ISW9DHu6cHvGGMCxpjJwHdwl/tEJMc5jkPh2BlUrrif8LAJyfFYa4T6D1+jfvMrRFtU7jMfpXqj7kPAV6y1f4e7Z4S19h+Bf4/bDj5trLUtuD2nVuAmq9W4e1A/Tef7ikhm+QuKKbvsOsou+z18BcXJ8bZTh6hZ/RiRIzvVHDHPpLrENxHY1MP4FmBY34UD1trv9TC2BbiyL99HRLJTeNh4ggNH0GTfp+VIFQDxjnYad6yh9dg+90h6SYXHUUompDqDssDnehi/F3epT0Skz/iCYUpnrqD8ilvxF5Unx9vPHqf23VU07/uAeCzqYYSSCanOoL4FPGmMuTzxnD82xkwCbsbtESUi0udCA0dQufye84+kx6I07dmQOJK+kmDFEK/DlDRJteX774CFQBjYAVyLe4pukbW2e1kiEZE+03kkvXLp3QTKByfHOxo+pnbdMzTuWqcq6f1Ub5UkbgRettbGAKy1O4EvZSguEZHzBMoGUrHkDiKHttNsNySW+OJEDm6j7cRBSmatJDRolNdhSh/qbQb1W+CYMeY/G2PmZiogEZELcRwfRePnULnivvOSUTTSQN2GF2jY+iaxNt0i2V/0lqBGAj8ArgA+MMZsN8b8hTFmRGZCExHpmb+ojLIFN1E6+0qcYDg53nJ0DzVrHqf1xEEPo5O+csEEZa09Za39L9baJcAE4N+ALwCHjTGvGmM+b4wpzFSgIiJduVXSpzJgxX2Eh09MjsdaI9R/8Ar1H75GrLVPugGJR1I9JHHIWvt31to5uI0KN+Ce7DtpjFFFBxHxjC9cRNm8aymbf/15DRBbj++nZs3jtBzbpxt8c1Sq90ElWWurgJ8AfwfsxZ1ViYh4Kjx0HJUr7qNglEmOxdpaaNjyOvWbXyGmckk551KKxZYDt+PenHsNcADFPhmbAAARIUlEQVT4NXBnekITEbk0vmCY0tlXER4+kYbt7ySTUtupQ5xdc5ySaUsIj5yi4rM5otcE1SUp3YNbSaIeeAz4nrV2Y/rDExG5dKHBY6hccR9Nu987Vy6pvZWGbW/RenwfJTNX4C8s9ThKuZje7oN6EXemFAOex60Y8XKiP5OISFbzBUKUzlxBeNgEGre/QzTSAEDb6Y+oWfMExVMXUTB6umZTWay3GVQJ8FVglbW2PkPxiIj0qc4Ovk17NhA5tAOInys+e3w/pbOuxF9U5nWY0oPeOuquzGQgIiLp4gSClExf6u5NbXuLaFMdAO0fH3NnU+YKCsbO1Gwqy1zyKT4RkVwVrBxG5bJ7KJowF3CTUTzaQWPVWure+20ycUl2UIISkbzi+AMUT11ExZI7CJQMSI6315ygZs0TRA5t131TWUIJSkTyUrBiCBXL7qJo0nxILO3FY1F3NrXheaLNDR5HKEpQIpK3HJ+f4ikLPjmbSuxNRY5UaTblISUoEcl7wfLEbGriPM7tTbXTuGM19RtfJBpp9DbAPKUEJSJCYjZlrqBiye34i8+1mW87U+3W9KverdlUhilBiYh0EawYSuWyeygcP5vkbKqjnYZtb1O/+WXV9MsgJSgRkW4cf4CSaUuoWHTreTfxtp06zNk1T9BydK9mUxmgBCUicgHBAcPd2dTYmcmxeHsrDVvfoOGDV9VvKs2UoEREeuEEgpTMWEb5FbecV2C29eRBt3vv8QMeRte/KUGJiKQgNHAkFcvvoWD0tORYrK2F+g9fpX7L68TaWz2Mrn9SghIRSZEvEKJ01krKF9yEr6A4Od56bB81a56g7Uy1h9H1P0pQIiKXKDR4NJXL76Vg5JTkWKyliboNL9C4ax3xqLoS9QUlKBGRT8EXDFM652rKLrsOXzCcHI8c3EbN2qfoqD/jYXT9gxKUiMhnEB42gcoV9xEaPCY5Fm2soXbt0zTv+4B4POZhdLlNCUpE5DPyhYsou/wGSmYux/G7bfbi8RhNezZQ995zRJvV8/XTUIISEekDjuNQOGYGlcvuIVgxJDnutvFYRctHKpV0qZSgRET6kL+4nPLFt1M8ecG5Nh7Rdhq2v0395ld0c+8luGDL90wzxnwN+BowELDAQ9baNYnH5gC/AGYDB4AvW2s3ehWriEhvHMdH0eT5BAePpmHrG8lOvW2nDlGz5iQls1YSHjrO2yBzQFbMoIwxdwLfAG4GKoH/DrxgjBlsjAkBvwUeByqAR4BXjTFlF3o9EZFsEKwYQuWyu88rlRRri1C/+WUatr9NrKPNw+iyX1YkKGA48ANrbZW1Nmat/RUQBWYBVwJBa+2j1tp2a+1jwE7gPu/CFRFJjeNPlEpacCO+cFFyvOWj3dS++yTttac8jC67ZWyJLzETGtDDQ3Fr7c+7XbsCKMFNRA8Au7o9Zzdu8hIRyQmhwWOoXH4vjTtW03rCrd8Xba6ndv0zFE9eQOHEuThOtswZskMmfxpLgOM9fBztepExZibuct53rLUncRNVc7fXagaKEBHJIb5QAaXzrqV0ztU4gaA7GI+7x9E3vKDOvd1kbAZlrX2bzu5fF2CMuRn4V+CH1tq/Tww3AYXdLi0C9F9SRHKO4zgUjJxCsHIYDVveoL32JADtHx+j9t1V7gGKYRM8jjI7ZM18MnGK7zfAH1prf9TloSrAdLt8amJcRCQn+YvKKF98G0WT5tP5b/dYeyv1H7xKw47VxKPt3gaYBbLimLkx5l7gB8DV1tr3uz38FuAYY74O/Ay4C/e4+TOZjVJEpG85jo/iKQsIDRpJ/ZY3ku3kW45U0X72OGVzP0egbKDHUXonW2ZQDwNh4A1jTGOXj5uttW3ADbiJ6SzwbeB2a+1pD+MVEekzwQEjqFx+73lLe9HGGmrXPU3k4La8rUCRFTMoa+1lF3l8B7AsQ+GIiGScLximdN61hKotjVXvEo92EI9Fady1jrYz1ZTOvvK8Y+r5IFtmUCIiec9xHApGT6Vi6d0EygYlx9tOH6FmzSraTh/xMLrMU4ISEckygZIKKpbcQeGEOcmxWFuEuo0vuQ0RY1EPo8scJSgRkSzk+PyUTF1M+cKb8YXP3WkTObiN2rVP09FY42F0maEEJSKSxUKDRlG57F5CQ8YmxzoaPqZ27dO0HN3jYWTppwQlIpLlfOFCyuZfT8mMZTg+P5Bo4bH1TRq2vd1v75lSghIRyQGO41A4diYVS+7EX1yeHG+p3k3t2mf65ZKfEpSISA4JlA2kYuldhEdMSo51NJ7tl0t+SlAiIjnGFwhROucaSmet7NdLfkpQIiI5yL1natqFl/wacn/JTwlKRCSHBcoGUrn0bsIjJifHOhrPUrvuqZxf8lOCEhHJcU4gSOmcqymddWWXJb+OxJLfWzm75KcEJSLSDyTLJC25E39xRXK8pdrm7JKfEpSISD/iLvnd1fOSX7X1MLJLpwQlItLPXHDJb9tbObXkpwQlItIPnauMftcnl/zWPUu0ud7D6FKjBCUi0o8FSgdQufQuCkZOSY51NHxMzdqnaDuV3e07lKBERPo5JxCkZPZVlMxcjuO4f/bj7a3UbfodTXs3ZW3HXiUoEZE84DgOhWNmUL74NnwFxYnROM17N1G/6XfE2ls9ja8nSlAiInkkWDGUyqV3Exw4IjnWdvoItWufoqP+Yw8j+yQlKBGRPOMLF1K+8ObzOvZGm+upXZddBWeVoERE8pDj+CiZupiyedfh+IMAxGNRGra+SePOd7OirbwSlIhIHgsPn/CJgrORwzuoe/95Yi1NHkamBCUikvcCpZVuj6mh45Nj7TUnqFn7JO1nj3sWlxKUiIi4PaYuu45icwXgABBrjVD7/nNEDm335Ci6EpSIiADuUfSiifMoX3gTvlCBOxiP01i1loatbxDvyGyJJCUoERE5T2jQKCqW3kWgfEhyrPXYPhq2v53ROJSgRETkE/yFpVQsupWC0dOSYx11pzMaQyCj7yYiIjnD8QconbWS0MCRtJ48eF6yygQlKBER6VV4xCTCIyZl/H21xCciIllJCUpERLKSEpSIiGSlrNmDMsZ8DfgaMBCwwEPW2jWJx74M/BLoWg/+q9baf854oCIikhFZkaCMMXcC3wCuBXYDXwReMMZMstaeBi4D/pO19mEPwxQRkQzKliW+4cAPrLVV1tqYtfZXQBSYlXh8PrDFs+hERCTjMjaDMsaEgAE9PBS31v6827UrgBJgpzHGD8wGvmCM+SnQDPwj8CNrbSrFofwAJ06c+Czhi4jIZ9Dlb7A/1edkcolvCfBWD+PRrnEYY2YCjwPfsdaeNMYMAzYB/wzcCUwDfgvUA/8thfcdDvDggw9+puBFRKRPDAf2p3Kh40WF2gsxxtwM/CvwQ2vtj3q57i+AG6y116TwmmFgAXAcNxmKiEjm+XGT00ZrbevFLoYsOSQByVN8fwt8yVr7VJfxGcC91trvdrk8BLSk8rqJH8S7fRmriIh8KinNnDplRYIyxtwL/AC42lr7freHa4GHjDHVwD8B84A/B/40s1GKiEgmZcUSnzHmA9yDEN1nRfdba18wxlwN/D0wFTgD/Lj7wQoREelfsiJBiYiIdJct90GJiIicRwlKRESykhKUiIhkJSUoERHJSkpQIiKSlbLiPqhsYIyZA/wC97j7AeDL1tqNn/a6/uYSfj553xrFGLMQeMFaO+QCj4/BvadvEXAK+DNr7UsZDNFzKfyMrgZeAyJdhn9krf2bTMTnJWPMtcAPgcm4vx8/ttb+sofr+v3fIs2gSBay/S1uDcAK4BHgVWNM2ae5rr+5xO+7szVKSZePvEhOxhjHGPOHwKu41U4u5DFgG27vs/8APGaMmZCBED13CT+jy4BV3X6P8iE5jQaewq2qUwE8APydMeb3ul2XF3+LlKBcVwJBa+2j1tp2a+1jwE7gvk95XX9zJal/3/ncGuX7wFdw/7j0yBgzBbgc+CtrbZu19k3gOeAPMhOi5y76M0rI19+jccC/WWufSbQe2gi8DSztdt2V5MHfIiUo13RgV7ex3ZzrR3Wp1/U3KX3f3VqjHDPG7DPGPGyMcTIUp9d+Ya2dj1t9/0KmA0estU1dxvLhd6hTKj8jcGdQnzPGHDbGHDHG/DhR+Llfs9ausdb+cefXxpgBwHLgw26X5sXfIiUoVwlun6mumoGiT3ldf5Pq9z2Yc61RxgN34/5r+SvpDjAbWGuPpXBZvv4OAan9jIwxAaAaeAa3vc7VwOeAfr/E15Uxphx3dv0+7nJeV3nxe6RDEq4moLDbWBHQ+Cmv629S+r6ttSeAlV2Gthhj/itwF6n17soH+fo7lDJrbQfQtZXOPmPMI8CPgG94E1VmJZaCfwtUAQ9aa2PdLsmL3yPNoFxVgOk2NjUx/mmu629S+r6NMTOMMd/vdl3KrVHyRBUwxhjT9Y9LPvwOpcwYM9IY85PEQYBOefN7lOgo/j7wLHC3tban7zsv/hZpBuV6C3CMMV8Hfob7L/7ZuEsMn+a6/ibV71utUS7CWmuNMVuBR4wx38TtNH0bsNjbyLLKx8CDQLMx5q9xl4u/A/wvT6PKAGPMROAF4NvW2v/ay6V58bdIMyjAWtsG3ID7H/ks8G3gdmvtaWPMt4wxOy92nTeRZ8Yl/HyOArcCfwTU4x6X/Rtr7ZPeRJ4djDEPGmO6Lr3chbu3cgr4R+APrLU7PAkuS3T9GSVmDDcAK3CT1WpgFfBT7yLMmK8CpbhHyxu7fPwoH/8Wqd2GiIhkJc2gREQkKylBiYhIVlKCEhGRrKQEJSIiWUkJSkREspISlIiIZCXdqCvyGRhj/jfwxV4u+T5uNeq3gFJrbUZK0SQK964F/p21dk8v1/mA94AvWGttJmITSZVmUCKfzdeA4YmPKxNjC7uM/QRYl/i8qYfnp8ufA1t7S04AiRpvf43b+E4kq+hGXZE+YoyZCWwHxltrD3kYRwFwBLg61QoVxpj9uBUt3k5nbCKXQkt8ImlmjLmSLkt8xpg4bqfUb+IW/NwEfB74S+ALuGWivmmt/dfE80uB/4TbviQOvAl8rZfWFfcDtV2TkzHm/wf+H9yWKLuAb1lrf9flOc/gzgbf7oNvWaRPaIlPxBs/BP4jsAgYA3yAm5gWAE8DvzTGlCSu/R+4iez3cNuZxIFXEn2TenIT8HLnF8aYOxLv9XncitcvAqu6tQd/GbdBoP7RKllDCUrEGz+31r5lrd2CW726EXdWY3GLohYC440xE3BnRL9vrd2YmBV9Abc1+PUXeO3Lcdt/dxoHtAKHE0uPfw3cCbR3uaYKtwne1D757kT6gP61JOKNfV0+bwYOWWs7N4Q7+/+EgbGJz60x57X/KcKdVb3Qw2sPBc50+fr/4J40PGCM2YzbpfVX1tpIl2s+TvzvkEv8PkTSRjMoEW+0d/u6e8fUToHEtfOAuV0+pgC/usBzYoDT+UWiBcN83BnXOuBLwLbEoY5OnX8Loil/ByJppgQlkt12AUGg2Fq7z1q7DzgO/Bg3SfXkBO5hCACMMXcCf2StfdVa+zXcmVcDcGOX5wzu8lyRrKAlPpEslujA+xzwL8aYrwKngUdwD1fsvsDTNgNzunztB35sjDmJe2JwETAs8XmnOUAN5y89inhKMyiR7PdF3GTyLLARKAeutdbWXuD6F3FP+wFgrV0FfBd31rUH+FvgT621b3Z5zgrgZWutlvgka+hGXZF+xhhTBBwCrrfWfpDC9T7gMO5JwTVpDk8kZZpBifQz1tpm3NnSV1N8ym3AASUnyTZKUCL9038GZptuZ9O7S8yevg38cUaiErkEWuITEZGspBmUiIhkJSUoERHJSkpQIiKSlZSgREQkKylBiYhIVvq/tDVLl23AhxMAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"def plot_velocity(results):\n",
" plot(results.v, color='C1', label='v')\n",
@@ -452,77 +746,30 @@
},
{
"cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [],
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-23.87566214906311 meter/second"
+ ],
+ "text/latex": [
+ "$-23.87566214906311 \\frac{meter}{second}$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"min(results.v) * m/s"
]
},
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Although we compute acceleration inside the slope function, we don't get acceleration as a result from `run_ode_solver`.\n",
- "\n",
- "We can approximate it by computing the numerical derivative of `v`:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [],
- "source": [
- "a = gradient(results.v)\n",
- "plot(a)\n",
- "decorate(xlabel='Time (s)',\n",
- " ylabel='Acceleration (m/$s^2$)')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The maximum downward acceleration, as a factor of `g`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [],
- "source": [
- "max_acceleration = max(abs(a)) * m/s**2 / g"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Using Equation (1) from [Heck, Uylings, and Kędzierska](http://iopscience.iop.org/article/10.1088/0031-9120/45/1/007), we can compute the peak acceleration due to interaction with the cord, neglecting drag."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": [
- "def max_acceleration(system):\n",
- " unpack(system)\n",
- " return 1 + mu * (4+mu) / 8\n",
- "\n",
- "max_acceleration(system)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If you set `C_d=0`, the simulated acceleration approaches the theoretical result, although you might have to reduce `max_step` to get a good numerical estimate."
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -534,7 +781,7 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
@@ -543,10 +790,9 @@
"\n",
" for m_cord in m_cord_array:\n",
" system = make_system(Params(params, m_cord=m_cord))\n",
- " results, details = run_ode_solver(system, slope_func1, events=event_func)\n",
- " #print(details.message)\n",
+ " results, details = run_ode_solver(system, slope_func1, \n",
+ " events=event_func)\n",
" min_velocity = min(results.v) * m/s\n",
- " #print(m_cord, min_velocity)\n",
" sweep[m_cord.magnitude] = min_velocity\n",
" \n",
" return sweep"
@@ -554,12 +800,12 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"m_cord_array = linspace(1, 201, 51) * kg\n",
- "sweep = sweep_m_cord(m_cord_array, params)"
+ "sweep = sweep_m_cord(m_cord_array, params);"
]
},
{
@@ -573,9 +819,20 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 24,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot(sweep)\n",
"\n",
@@ -601,10 +858,8 @@
},
{
"cell_type": "code",
- "execution_count": 26,
- "metadata": {
- "collapsed": true
- },
+ "execution_count": 25,
+ "metadata": {},
"outputs": [],
"source": [
"def spring_force(y, system):\n",
@@ -635,18 +890,52 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 26,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "0.0 newton"
+ ],
+ "text/latex": [
+ "$0.0 newton$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"spring_force(-25*m, system)"
]
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 27,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "40.0 newton"
+ ],
+ "text/latex": [
+ "$40.0 newton$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"spring_force(-26*m, system)"
]
@@ -660,7 +949,7 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
@@ -693,21 +982,135 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 29,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " v_init \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " M \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " m_cord \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " area \n",
+ " 1 meter ** 2 \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " v_term \n",
+ " 60.0 meter / second \n",
+ " \n",
+ " \n",
+ " L \n",
+ " 25 meter \n",
+ " \n",
+ " \n",
+ " k \n",
+ " 40.0 newton / meter \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3402777777777778 dimensionless \n",
+ " \n",
+ " \n",
+ " mu \n",
+ " 1.0 dimensionless \n",
+ " \n",
+ " \n",
+ " init \n",
+ " y 0 meter\n",
+ "v 0.0 meter / secon... \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 10 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "v_init 0.0 meter / second\n",
+ "g 9.8 meter / second ** 2\n",
+ "M 75 kilogram\n",
+ "m_cord 75 kilogram\n",
+ "area 1 meter ** 2\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "v_term 60.0 meter / second\n",
+ "L 25 meter\n",
+ "k 40.0 newton / meter\n",
+ "C_d 0.3402777777777778 dimensionless\n",
+ "mu 1.0 dimensionless\n",
+ "init y 0 meter\n",
+ "v 0.0 meter / secon...\n",
+ "t_end 10 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"system1 = make_system(params)"
]
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 30,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The solver successfully reached the end of the integration interval.\n"
+ ]
+ }
+ ],
"source": [
"event_func.direction=-1\n",
- "results1, details1 = run_ode_solver(system1, slope_func1, events=event_func, max_step=0.1)\n",
+ "results1, details1 = run_ode_solver(system1, slope_func1, \n",
+ " events=event_func, max_step=0.1)\n",
"print(details1.message)"
]
},
@@ -720,18 +1123,77 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 31,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "10.0"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"t_final = get_last_label(results1)"
]
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 32,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " y \n",
+ " -490.0 \n",
+ " \n",
+ " \n",
+ " v \n",
+ " -98.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "y -490.0\n",
+ "v -98.0\n",
+ "Name: 10.0, dtype: float64"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"init2 = results1.row[t_final]"
]
@@ -745,11 +1207,123 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 33,
"metadata": {},
- "outputs": [],
- "source": [
- "system2 = System(system1, t_0=t_final, init=init2)"
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " v_init \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ " g \n",
+ " 9.8 meter / second ** 2 \n",
+ " \n",
+ " \n",
+ " M \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " m_cord \n",
+ " 75 kilogram \n",
+ " \n",
+ " \n",
+ " area \n",
+ " 1 meter ** 2 \n",
+ " \n",
+ " \n",
+ " rho \n",
+ " 1.2 kilogram / meter ** 3 \n",
+ " \n",
+ " \n",
+ " v_term \n",
+ " 60.0 meter / second \n",
+ " \n",
+ " \n",
+ " L \n",
+ " 25 meter \n",
+ " \n",
+ " \n",
+ " k \n",
+ " 40.0 newton / meter \n",
+ " \n",
+ " \n",
+ " C_d \n",
+ " 0.3402777777777778 dimensionless \n",
+ " \n",
+ " \n",
+ " mu \n",
+ " 1.0 dimensionless \n",
+ " \n",
+ " \n",
+ " init \n",
+ " y -490.0\n",
+ "v -98.0\n",
+ "Name: 10.0, dtype: float64 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 20 \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "v_init 0.0 meter / second\n",
+ "g 9.8 meter / second ** 2\n",
+ "M 75 kilogram\n",
+ "m_cord 75 kilogram\n",
+ "area 1 meter ** 2\n",
+ "rho 1.2 kilogram / meter ** 3\n",
+ "v_term 60.0 meter / second\n",
+ "L 25 meter\n",
+ "k 40.0 newton / meter\n",
+ "C_d 0.3402777777777778 dimensionless\n",
+ "mu 1.0 dimensionless\n",
+ "init y -490.0\n",
+ "v -98.0\n",
+ "Name: 10.0, dtype: float64\n",
+ "t_end 20\n",
+ "t_0 10\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system2 = System(system1, t_0=t_final, t_end=t_final+10, init=init2)"
]
},
{
@@ -761,12 +1335,31 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 34,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The solver successfully reached the end of the integration interval.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "20.0"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"event_func.direction=+1\n",
- "results2, details2 = run_ode_solver(system2, slope_func2, events=event_func, max_step=0.1)\n",
+ "results2, details2 = run_ode_solver(system2, slope_func2, \n",
+ " events=event_func, max_step=0.1)\n",
"print(details2.message)\n",
"t_final = get_last_label(results2)"
]
@@ -780,9 +1373,20 @@
},
{
"cell_type": "code",
- "execution_count": 36,
+ "execution_count": 35,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot_position(results1, label='Phase 1')\n",
"plot_position(results2, label='Phase 2')"
@@ -797,9 +1401,26 @@
},
{
"cell_type": "code",
- "execution_count": 37,
+ "execution_count": 36,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-508.7478095337397 meter"
+ ],
+ "text/latex": [
+ "$-508.7478095337397 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"min(results2.y) * m"
]
@@ -813,7 +1434,7 @@
},
{
"cell_type": "code",
- "execution_count": 38,
+ "execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
@@ -826,7 +1447,7 @@
" t_final = get_last_label(results1)\n",
" init2 = results1.row[t_final]\n",
" \n",
- " system2 = System(system1, t_0=t_final, init=init2)\n",
+ " system2 = System(system1, t_0=t_final, t_end=t_final+10, init=init2)\n",
" event_func.direction=+1\n",
" results2, details2 = run_ode_solver(system2, slope_func2, events=event_func, max_step=0.1)\n",
" t_final = get_last_label(results2)\n",
@@ -842,7 +1463,7 @@
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
@@ -851,16 +1472,27 @@
},
{
"cell_type": "code",
- "execution_count": 40,
+ "execution_count": 39,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot_position(results)"
]
},
{
"cell_type": "code",
- "execution_count": 41,
+ "execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
@@ -870,30 +1502,67 @@
},
{
"cell_type": "code",
- "execution_count": 45,
+ "execution_count": 41,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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/pXzfox+qwLgPeBxrfX7ZsRqluLiYubMmcOLL77IJZdcwrx583jxxRd56aWXWLJkCfPnz+f555/36bXq6+v5/ve/z7x581iwYAH/9V//5R4AsHXrVm666SZmzZrFtddeywcffOC+77LLLuPRRx9lwYIFPPLIIwA8//zzLFmyhHnz5vHMM890+57PPPPM52pFM2fO5J577uk13v/8z//kuuuuY/HixQAcOXKEUaNGnXdy2r9/P/PmzePDDz8EjJraddddx5w5c3jooYd46KGH+P3vf39er9kTi8XCmEWeybstp09QXljcwx2BYWtupq223F1On9C5sUII85heg+pMa12L0WznfewwsLib62uAL/ZBaOzTFezMKaO1rW/29QkLtTBvUiozVXKv1547d47Dhw+zceNG1q9fz8MPP8z111/Phg0b+Oyzz/jGN77BmjVrGDZsWI+v86Mf/Yjq6mr3H+p77rmHP//5z6xYsYL777+fn//856xcuZJdu3bx4IMPkpSUxOzZswHIz89n48aNtLW1sWnTJv7whz/w17/+lfHjx/Pf//3f3b7nAw88wAMPPHAevxnD+vXrOXHiBE8//bT7WE5ODk6nk7Vr11JcXMzkyZP5z//8T8aO7b7j//DhwzzwwAP85Cc/YeXKldTW1vK1r32NRx55hDVr1vDuu+/yyCOPMHHixPOOsSfpY8dQkDwKW4XRqn18y3pSMu/y63v0pvjECXAan2dLTAJD43r+fAjRl4K+BhVM9h+r7LPkBNDa5mD/Md/7Jh588EHCw8NZuHAhdrudO++8k/DwcJYvX47dbqe0tLTH+202Gx9++CHf/OY3iY+PJz4+nt/+9rdcc801vPvuu8yfP5/Vq1cTGhrKwoULufbaa3nzzTfd969atYqoqCiGDh3Ke++9x3XXXceUKVOIiIhw16r86emnn+a+++4jMtLdQozFYmHq1Kk89dRTbNy4kezsbO69916ampq6fI28vDzuvvtuHnzwQVauXAnApk2bSE1N5eabbyY0NJTrr7+emTNndnn/xZqwZAXt38fazpRQmKsD8j7dOZPvmf80JHVUn763EL2RBHUeZkxIIiy0735lYaEWZkxI8vn6uLg4AHcn99ChQwHcy+k4nc6ub3Q5e/Ysra2tjBgxwn0sIyODjIwMqqurOxxvP+ed9JKTPTW9qqoqUlJS3OXY2NhuV1p49tlnmTNnzuce999/f7ex5ubmcuLECdasWdPh+L333suvfvUrUlNTiYqK4tvf/ja1tbUcOXKky9fZuXMnSineeecd94635eXlHWIHSEtL6zaWi5GYlkZUpqdmlr/94z7debex3DP/KWm0DC8XwSXomviC2UyV7FNzm1kuds5WQkICYWFhlJWVkZiYCBh9MSdPniQtLY3du3d3uL6oqMh9Xef3T05O5vTp0+5yQ0MD586d6/J977vvPu677/wW/9iwYQOXXnopMTExHY4///zzTJkyhTlz5gBgt9ux2+2Eh4d3+Tpr167lO9/5DldffTUvvPACd911F6mpqZSVlXW4rqysjDFjxpxXjL7KXnIZe185Bg47jvpqTuzfz4RZswLyXt5qKio7bO8+IkA/nxAXSmpQws1qtbJ69Wp+97vfUVdXR3V1Nb/4xS+oqalh9erV7N69m/feew+73c62bdt4++23ufbaa7t8rTVr1vD222+zb98+bDYbTz75ZK81uPNx4MABZnXxR7ykpISf/vSnVFRU0NzczM9+9jNGjRrF5MmTu3ydsLAwhgwZwqOPPspvfvMbCgsLWbFiBZWVlbz22mu0tbXxwQcfsHfvXr/F3llsfByx42a4y6V7P+uTJZBOnzjmfh42PF221xBBRxKU6OCHP/whiYmJXHXVVVx99dVMnz6du+++m1GjRvHHP/6RP/3pT8yZM4fHHnuMxx57zD16rrP58+fzve99j29961ssXLiQsLAwdxOkP5SUlHRoUmz38MMPM336dNasWcPChQspKirimWee6XVuz2WXXcall17KD37wA4YMGcLvfvc7/vKXvzB//nzee+89pk6dSlgA/4BPvGQJhEYA4GyuJ3fH9oC9V7uzRZ7h5XEZMrxcBJ8Qf36r7W+UUlnAqQ0bNpCR8fnZ80ePHiU7O7vP4xLmqq6u5vTp00yZMsV97Oabb2bt2rXcemvXc5X88Vk59NknnDmw2SiERbDwzoeICNBakLaWFrb++dfgsAMw7eZ7SUgJ3uZr0f8VFxezYsUKgNHdrBr0OVKDEqITm83GHXfc4R5YsWnTJnJzc1mwYEEvd16c7AWLCIl09am1tnBk86cBe6/i48fcyckSHSfJSQQlGSQxiOTk5HD77bd3e/7BBx/k3nvv7cOIglNqaio//vGP+da3vuXecuXJJ59k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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot_position(results, label='m_cord = 75 kg')\n",
- "plot_position(results_no_cord, label='m_cord = 1 kg')\n",
- "\n",
- "savefig('figs/jump.png')"
+ "plot_position(results_no_cord, label='m_cord = 1 kg')"
]
},
{
"cell_type": "code",
- "execution_count": 43,
- "metadata": {},
- "outputs": [],
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "-508.7478095337397 meter"
+ ],
+ "text/latex": [
+ "$-508.7478095337397 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"min(results_no_cord.y) * m"
]
},
{
"cell_type": "code",
- "execution_count": 44,
+ "execution_count": 43,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.0"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"diff = min(results.y) - min(results_no_cord.y)"
]
@@ -901,9 +1570,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "The difference is more than 2 meters, which could certainly be the difference between a successful bungee dunk and a bad day."
- ]
+ "source": []
},
{
"cell_type": "code",
@@ -929,7 +1596,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.6.5"
+ "version": "3.6.6"
}
},
"nbformat": 4,
diff --git a/code/lotka-volt.ipynb b/code/lotka-volt.ipynb
new file mode 100644
index 00000000..9f57668b
--- /dev/null
+++ b/code/lotka-volt.ipynb
@@ -0,0 +1,160 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def make_system(alpha, beta, gamma, delta):\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(x=1, y=1)\n",
+ "\n",
+ " t0 = 0\n",
+ " t_end = 200\n",
+ "\n",
+ " return System(init=init, t0=t0, t_end=t_end, alpha=alpha, beta=beta, gamma=gamma, delta=delta)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func(state, t, system):\n",
+ " \"\"\"Update the Lotka-Volterra model.\n",
+ " \n",
+ " state: State (X, Y)\n",
+ " t: time\n",
+ " system: System object\n",
+ " \n",
+ " returns: State (XY)\n",
+ " \"\"\"\n",
+ " \n",
+ " x = state.x\n",
+ " y = state.y\n",
+ " \n",
+ " x_flow_in = system.alpha * x\n",
+ " x_flow_death = system.beta * x * y\n",
+ " \n",
+ " y_flow_in = system.delta * x * y\n",
+ " y_flow_death = system.gamma * y\n",
+ " \n",
+ " x += x_flow_in - x_flow_death\n",
+ " y += y_flow_in - y_flow_death\n",
+ " \n",
+ " return State(x=x, y=y)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "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: TimeFrame\n",
+ " \"\"\"\n",
+ " frame = TimeFrame(columns=system.init.index)\n",
+ " frame.row[system.t0] = system.init\n",
+ " \n",
+ " for t in linrange(system.t0, system.t_end):\n",
+ " frame.row[t+1] = update_func(frame.row[t], t, system)\n",
+ " \n",
+ " return frame"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "def plot_results(x, y):\n",
+ " \"\"\"Plot the results of a SIR model.\n",
+ " \n",
+ " S: TimeSeries\n",
+ " I: TimeSeries\n",
+ " R: TimeSeries\n",
+ " \"\"\"\n",
+ " plot(x, '--', label='Elk')\n",
+ " plot(y, '-', label='Wolves')\n",
+ " decorate()\n",
+ " decorate(xlabel='Time (days)',\n",
+ " ylabel='Population')\n",
+ "\n",
+ "system = make_system(0.05, 0.1, 0.1, 0.1)\n",
+ "results = run_simulation(system, update_func)\n",
+ "results.head()\n",
+ "plot_results(results.x, results.y)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/modsim.py b/code/modsim.py
index 4175bb20..a0b411fb 100644
--- a/code/modsim.py
+++ b/code/modsim.py
@@ -155,9 +155,6 @@ def linrange(start=0, stop=None, step=1, **options):
stop: last value
step: space between values
- Also accepts the same keyword arguments as np.linspace. See
- https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html
-
returns: array or Quantity
"""
if stop is None:
@@ -177,7 +174,10 @@ def linrange(start=0, stop=None, step=1, **options):
if options['endpoint']:
n += 1
- array = np.linspace(start, stop, int(n), **options)
+ array = np.full(int(n), magnitude(step))
+ array[0] = magnitude(start)
+ array = np.cumsum(array)
+
if units:
array = array * units
return array
diff --git a/code/orbit_homework.ipynb b/code/orbit_homework.ipynb
new file mode 100644
index 00000000..b06aeb17
--- /dev/null
+++ b/code/orbit_homework.ipynb
@@ -0,0 +1,818 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Starter code for the orbit example\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": 65,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Earth falling into the sun\n",
+ "\n",
+ "Here's a question from the web site [Ask an Astronomer](http://curious.astro.cornell.edu/about-us/39-our-solar-system/the-earth/other-catastrophes/57-how-long-would-it-take-the-earth-to-fall-into-the-sun-intermediate):\n",
+ "\n",
+ "\"If the Earth suddenly stopped orbiting the Sun, I know eventually it would be pulled in by the Sun's gravity and hit it. How long would it take the Earth to hit the Sun? I imagine it would go slowly at first and then pick up speed.\"\n",
+ "\n",
+ "Here's a solution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 66,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "meter"
+ ],
+ "text/latex": [
+ "$meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 66,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Here are the units we'll need\n",
+ "\n",
+ "s = UNITS.second\n",
+ "N = UNITS.newton\n",
+ "kg = UNITS.kilogram\n",
+ "m = UNITS.meter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 67,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " x \n",
+ " 147000000000.0 meter ** 2 \n",
+ " \n",
+ " \n",
+ " y \n",
+ " 0 meter \n",
+ " \n",
+ " \n",
+ " vx \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ " vy \n",
+ " -30330.0 meter / second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "x 147000000000.0 meter ** 2\n",
+ "y 0 meter\n",
+ "vx 0.0 meter / second\n",
+ "vy -30330.0 meter / second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 67,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# And an inition condition (with everything in SI units)\n",
+ "\n",
+ "r_0 = 147e9 * m\n",
+ "\n",
+ "init = State(x = r_0 * m,\n",
+ " y = 0 * m,\n",
+ " vx = 0 * m / s,\n",
+ " vy = -30330 * m / s, )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 68,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " x 147000000000.0 meter ** 2\n",
+ "y ... \n",
+ " \n",
+ " \n",
+ " G \n",
+ " 6.674e-11 meter ** 2 * newton / kilogram ** 2 \n",
+ " \n",
+ " \n",
+ " m1 \n",
+ " 1.989e+30 kilogram \n",
+ " \n",
+ " \n",
+ " r_final \n",
+ " 701879000.0 meter \n",
+ " \n",
+ " \n",
+ " m2 \n",
+ " 5.972e+24 kilogram \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 0 second \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 31540000.0 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init x 147000000000.0 meter ** 2\n",
+ "y ...\n",
+ "G 6.674e-11 meter ** 2 * newton / kilogram ** 2\n",
+ "m1 1.989e+30 kilogram\n",
+ "r_final 701879000.0 meter\n",
+ "m2 5.972e+24 kilogram\n",
+ "t_0 0 second\n",
+ "t_end 31540000.0 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 68,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Making a system object\n",
+ "\n",
+ "r_earth = 6.371e6 * m\n",
+ "r_sun = 695.508e6 * m\n",
+ "\n",
+ "system = System(init=init,\n",
+ " G=6.674e-11 * N / kg**2 * m**2,\n",
+ " m1=1.989e30 * kg,\n",
+ " r_final=r_sun + r_earth,\n",
+ " m2=5.972e24 * kg,\n",
+ " t_0=0 * s,\n",
+ " t_end=3.154e7 * s)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Here's a function that computes the force of gravity\n",
+ "\n",
+ "def universal_gravitation(state, system):\n",
+ " \"\"\"Computes gravitational force.\n",
+ " \n",
+ " state: State object with distance r\n",
+ " system: System object with m1, m2, and G\n",
+ " \"\"\"\n",
+ " x, y, vx, vy = state\n",
+ " unpack(system)\n",
+ " \n",
+ " pos = Vector(x, y)\n",
+ " \n",
+ " Fx, Fy = pol2cart(pos.angle, G * m1 * m2 / r_0**2) \n",
+ " \n",
+ " force = Vector(Fx, Fy)\n",
+ " \n",
+ " return force"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 70,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "[3.6686486e+22 0.0000000e+00] newton"
+ ],
+ "text/latex": [
+ "$[3.6686486e+22 0.0000000e+00] newton$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 70,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "universal_gravitation(init, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# The slope function\n",
+ "\n",
+ "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",
+ " x, y, vx, vy = state\n",
+ " unpack(system)\n",
+ "\n",
+ " acc_grav = universal_gravitation(state, system) / m2\n",
+ " \n",
+ " dydt = Vector(vx, vy)\n",
+ " dvdt = -acc_grav\n",
+ " \n",
+ " return dydt.x, dydt.y, dvdt.x, dvdt.y"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(,\n",
+ " ,\n",
+ " ,\n",
+ " )"
+ ]
+ },
+ "execution_count": 72,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Always test the slope function!\n",
+ "\n",
+ "slope_func(init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Here's an event function that stops the simulation\n",
+ "# before the collision\n",
+ "\n",
+ "def event_func(state, t, system):\n",
+ " r, v = state\n",
+ " return r - system.r_final"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Always test the event function!\n",
+ "\n",
+ "event_func(init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 128 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " The solver successfully reached the end of the... \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events []\n",
+ "nfev 128\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 0\n",
+ "message The solver successfully reached the end of the...\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Finally we can run the simulation\n",
+ "\n",
+ "results, details = run_ode_solver(system, slope_func)\n",
+ "details"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "31540000.0 second"
+ ],
+ "text/latex": [
+ "$31540000.0 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Here's how long it takes...\n",
+ "\n",
+ "t_final = get_last_label(results) * s"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "365.04629629629625 day"
+ ],
+ "text/latex": [
+ "$365.04629629629625 day$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# ... expressed in units we understand\n",
+ "\n",
+ "t_final.to(UNITS.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Before plotting, we run the simulation again with `t_eval`\n",
+ "\n",
+ "ts = linspace(t_0, t_final, 400)\n",
+ "results, details = run_ode_solver(system, slope_func, t_eval=ts)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the time steps to days\n",
+ "\n",
+ "results.index /= 60 * 60 * 24"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the distance to million km\n",
+ "\n",
+ "x = results.x / 1e9;\n",
+ "y = results.y / 1e9;"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# And plotting\n",
+ "\n",
+ "plot(x, label='x')\n",
+ "plot(y, label='y')\n",
+ "\n",
+ "decorate(title='Distance From Sun of Earth Versus Time',\n",
+ " xlabel='Time (Day)',\n",
+ " ylabel='Distance from sun (Million KM)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(x, y)\n",
+ "decorate(title='X and Y position of Earth',\n",
+ " xlabel='X Distance from sun (million km)',\n",
+ " ylabel='Y Distance from sun (million km)')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Experimenting with solve_ivp"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_ode_solver_v2(system, slope_func, **options):\n",
+ " \"\"\"Computes a numerical solution to a differential equation.\n",
+ "\n",
+ " `system` must contain `init` with initial conditions,\n",
+ " `t_0` with the start time, and `t_end` with the end time.\n",
+ "\n",
+ " It can contain any other parameters required by the slope function.\n",
+ "\n",
+ " `options` can be any legal options of `scipy.integrate.solve_ivp`\n",
+ "\n",
+ " system: System object\n",
+ " slope_func: function that computes slopes\n",
+ "\n",
+ " returns: TimeFrame\n",
+ " \"\"\"\n",
+ " # make sure `system` contains `init`\n",
+ " if not hasattr(system, 'init'):\n",
+ " msg = \"\"\"It looks like `system` does not contain `init`\n",
+ " as a system variable. `init` should be a State\n",
+ " object that specifies the initial condition:\"\"\"\n",
+ " raise ValueError(msg)\n",
+ "\n",
+ " # make sure `system` contains `t_end`\n",
+ " if not hasattr(system, 't_end'):\n",
+ " msg = \"\"\"It looks like `system` does not contain `t_end`\n",
+ " as a system variable. `t_end` should be the\n",
+ " final time:\"\"\"\n",
+ " raise ValueError(msg)\n",
+ "\n",
+ " # make the system parameters available as globals\n",
+ " unpack(system)\n",
+ "\n",
+ " # the default value for t_0 is 0\n",
+ " t_0 = getattr(system, 't_0', 0)\n",
+ "\n",
+ " # try running the slope function with the initial conditions\n",
+ " # try:\n",
+ " # slope_func(init, t_0, system)\n",
+ " # except Exception as e:\n",
+ " # msg = \"\"\"Before running scipy.integrate.solve_ivp, I tried\n",
+ " # running the slope function you provided with the\n",
+ " # initial conditions in `system` and `t=t_0` and I got\n",
+ " # the following error:\"\"\"\n",
+ " # logger.error(msg)\n",
+ " # raise(e)\n",
+ "\n",
+ " # wrap the slope function to reverse the arguments and add `system`\n",
+ " f = lambda t, y: slope_func(y, t, system)\n",
+ "\n",
+ " def wrap_event(event):\n",
+ " \"\"\"Wrap the event functions.\n",
+ "\n",
+ " Make events terminal by default.\n",
+ " \"\"\"\n",
+ " wrapped = lambda t, y: event(y, t, system)\n",
+ " wrapped.terminal = getattr(event, 'terminal', True)\n",
+ " wrapped.direction = getattr(event, 'direction', 0)\n",
+ " return wrapped\n",
+ "\n",
+ " # wrap the event functions so they take the right arguments\n",
+ " events = options.pop('events', [])\n",
+ " try:\n",
+ " events = [wrap_event(event) for event in events]\n",
+ " except TypeError:\n",
+ " events = wrap_event(events)\n",
+ "\n",
+ " # remove dimensions from the initial conditions.\n",
+ " # we need this because otherwise `init` gets copied into the\n",
+ " # results array along with its units\n",
+ " y_0 = [magnitude(x) for x in init]\n",
+ "\n",
+ " # run the solver\n",
+ " with units_off():\n",
+ " bunch = solve_ivp(f, [t_0, t_end], y_0, method='RK45', events=events, **options)\n",
+ "\n",
+ " # separate the results from the details\n",
+ " y = bunch.pop('y')\n",
+ " t = bunch.pop('t')\n",
+ " details = ModSimSeries(bunch)\n",
+ "\n",
+ " # pack the results into a TimeFrame\n",
+ " results = TimeFrame(np.transpose(y), index=t, columns=init.index)\n",
+ " return results, details"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Before plotting, we run the simulation again with `t_eval`\n",
+ "\n",
+ "ts = linspace(t_0, t_final, 400)\n",
+ "results, details = run_ode_solver_v2(system, slope_func, t_eval=ts)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the time steps to days\n",
+ "\n",
+ "results.index /= 60 * 60 * 24"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the distance to million km\n",
+ "\n",
+ "x = results.x / 1e9;\n",
+ "y = results.y / 1e9;"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# And plotting\n",
+ "\n",
+ "plot(x, label='x')\n",
+ "plot(y, label='y')\n",
+ "\n",
+ "decorate(title='Distance From Sun of Earth Versus Time (RK45 Method)',\n",
+ " xlabel='Time (Day)',\n",
+ " ylabel='Distance from sun (Million KM)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot(x, y)\n",
+ "decorate(title='X and Y position of Earth (RK45 Method)',\n",
+ " xlabel='X Distance from sun (million km)',\n",
+ " ylabel='Y Distance from sun (million km)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/orbit_starter.ipynb b/code/orbit_starter.ipynb
new file mode 100644
index 00000000..270cc0f5
--- /dev/null
+++ b/code/orbit_starter.ipynb
@@ -0,0 +1,606 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Starter code for the orbit example\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": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim.py module\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Earth falling into the sun\n",
+ "\n",
+ "Here's a question from the web site [Ask an Astronomer](http://curious.astro.cornell.edu/about-us/39-our-solar-system/the-earth/other-catastrophes/57-how-long-would-it-take-the-earth-to-fall-into-the-sun-intermediate):\n",
+ "\n",
+ "\"If the Earth suddenly stopped orbiting the Sun, I know eventually it would be pulled in by the Sun's gravity and hit it. How long would it take the Earth to hit the Sun? I imagine it would go slowly at first and then pick up speed.\"\n",
+ "\n",
+ "Here's a solution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "meter"
+ ],
+ "text/latex": [
+ "$meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Here are the units we'll need\n",
+ "\n",
+ "s = UNITS.second\n",
+ "N = UNITS.newton\n",
+ "kg = UNITS.kilogram\n",
+ "m = UNITS.meter"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " r \n",
+ " 147000000000.0 meter \n",
+ " \n",
+ " \n",
+ " v \n",
+ " 0.0 meter / second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "r 147000000000.0 meter\n",
+ "v 0.0 meter / second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# And an inition condition (with everything in SI units)\n",
+ "\n",
+ "r_0 = 147e9 * m\n",
+ "\n",
+ "init = State(r = r_0,\n",
+ " v = 0 * m / s)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " r 147000000000.0 meter\n",
+ "v 0.0 meter / s... \n",
+ " \n",
+ " \n",
+ " G \n",
+ " 6.674e-11 meter ** 2 * newton / kilogram ** 2 \n",
+ " \n",
+ " \n",
+ " m1 \n",
+ " 1.989e+30 kilogram \n",
+ " \n",
+ " \n",
+ " r_final \n",
+ " 701879000.0 meter \n",
+ " \n",
+ " \n",
+ " m2 \n",
+ " 5.972e+24 kilogram \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 0 second \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 10000000.0 second \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init r 147000000000.0 meter\n",
+ "v 0.0 meter / s...\n",
+ "G 6.674e-11 meter ** 2 * newton / kilogram ** 2\n",
+ "m1 1.989e+30 kilogram\n",
+ "r_final 701879000.0 meter\n",
+ "m2 5.972e+24 kilogram\n",
+ "t_0 0 second\n",
+ "t_end 10000000.0 second\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Making a system object\n",
+ "\n",
+ "r_earth = 6.371e6 * m\n",
+ "r_sun = 695.508e6 * m\n",
+ "\n",
+ "system = System(init=init,\n",
+ " G=6.674e-11 * N / kg**2 * m**2,\n",
+ " m1=1.989e30 * kg,\n",
+ " r_final=r_sun + r_earth,\n",
+ " m2=5.972e24 * kg,\n",
+ " t_0=0 * s,\n",
+ " t_end=1e7 * s)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Here's a function that computes the force of gravity\n",
+ "\n",
+ "def universal_gravitation(state, system):\n",
+ " \"\"\"Computes gravitational force.\n",
+ " \n",
+ " state: State object with distance r\n",
+ " system: System object with m1, m2, and G\n",
+ " \"\"\"\n",
+ " r, v = state\n",
+ " unpack(system)\n",
+ " \n",
+ " force = G * m1 * m2 / r**2\n",
+ " return force"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "3.6686485997501037e+22 newton"
+ ],
+ "text/latex": [
+ "$3.6686485997501037e+22 newton$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "universal_gravitation(init, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# The slope function\n",
+ "\n",
+ "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",
+ " force = universal_gravitation(state, system)\n",
+ " dydt = v\n",
+ " dvdt = -force / m2\n",
+ " \n",
+ " return dydt, dvdt"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(,\n",
+ " )"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Always test the slope function!\n",
+ "\n",
+ "slope_func(init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Here's an event function that stops the simulation\n",
+ "# before the collision\n",
+ "\n",
+ "def event_func(state, t, system):\n",
+ " r, v = state\n",
+ " return r - system.r_final"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "146298121000.0 meter"
+ ],
+ "text/latex": [
+ "$146298121000.0 meter$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Always test the event function!\n",
+ "\n",
+ "event_func(init, 0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [[5432658.401694092]] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 236 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " A termination event occurred. \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events [[5432658.401694092]]\n",
+ "nfev 236\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 1\n",
+ "message A termination event occurred.\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Finally we can run the simulation\n",
+ "\n",
+ "results, details = run_ode_solver(system, slope_func, events=event_func)\n",
+ "details"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "5432658.401694092 second"
+ ],
+ "text/latex": [
+ "$5432658.401694092 second$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Here's how long it takes...\n",
+ "\n",
+ "t_final = get_last_label(results) * s"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "62.877990760348276 day"
+ ],
+ "text/latex": [
+ "$62.877990760348276 day$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# ... expressed in units we understand\n",
+ "\n",
+ "t_final.to(UNITS.day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Before plotting, we run the simulation again with `t_eval`\n",
+ "\n",
+ "ts = linspace(t_0, t_final, 201)\n",
+ "results, details = run_ode_solver(system, slope_func, events=event_func, t_eval=ts)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the time steps to days\n",
+ "\n",
+ "results.index /= 60 * 60 * 24"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Scaling the distance to million km\n",
+ "\n",
+ "r = results.r / 1e9;"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# And plotting\n",
+ "\n",
+ "plot(r, label='r')\n",
+ "\n",
+ "decorate(xlabel='Time (day)',\n",
+ " ylabel='Distance from sun (million km)')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/code/wall.ipynb b/code/wall.ipynb
index 37cd7571..6cc9bdde 100644
--- a/code/wall.ipynb
+++ b/code/wall.ipynb
@@ -76,7 +76,24 @@
"cell_type": "code",
"execution_count": 2,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "degC"
+ ],
+ "text/latex": [
+ "$degC$"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"m = UNITS.meter\n",
"K = UNITS.kelvin\n",
@@ -96,7 +113,88 @@
"cell_type": "code",
"execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Q_in \n",
+ " Q_out \n",
+ " T_int \n",
+ " T_ext \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2014-10-05 16:30:00 \n",
+ " 10.994 \n",
+ " 6.840 \n",
+ " 16.92 \n",
+ " 14.68 \n",
+ " \n",
+ " \n",
+ " 2014-10-05 16:35:00 \n",
+ " 10.952 \n",
+ " 6.012 \n",
+ " 16.92 \n",
+ " 14.69 \n",
+ " \n",
+ " \n",
+ " 2014-10-05 16:40:00 \n",
+ " 10.882 \n",
+ " 7.040 \n",
+ " 16.93 \n",
+ " 14.66 \n",
+ " \n",
+ " \n",
+ " 2014-10-05 16:45:00 \n",
+ " 10.798 \n",
+ " 8.880 \n",
+ " 16.93 \n",
+ " 14.59 \n",
+ " \n",
+ " \n",
+ " 2014-10-05 16:50:00 \n",
+ " 10.756 \n",
+ " 10.491 \n",
+ " 16.94 \n",
+ " 14.50 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Q_in Q_out T_int T_ext\n",
+ "2014-10-05 16:30:00 10.994 6.840 16.92 14.68\n",
+ "2014-10-05 16:35:00 10.952 6.012 16.92 14.69\n",
+ "2014-10-05 16:40:00 10.882 7.040 16.93 14.66\n",
+ "2014-10-05 16:45:00 10.798 8.880 16.93 14.59\n",
+ "2014-10-05 16:50:00 10.756 10.491 16.94 14.50"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"data = pd.read_csv('data/DataOWall.csv', parse_dates=[0], index_col=0, header=0, skiprows=[1,2])\n",
"data.head()"
@@ -113,7 +211,18 @@
"cell_type": "code",
"execution_count": 4,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Timestamp('2014-10-05 16:30:00')"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"timestamp_0 = get_first_label(data)"
]
@@ -129,7 +238,27 @@
"cell_type": "code",
"execution_count": 5,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "TimedeltaIndex(['0 days 00:00:00', '0 days 00:05:00', '0 days 00:10:00',\n",
+ " '0 days 00:15:00', '0 days 00:20:00', '0 days 00:25:00',\n",
+ " '0 days 00:30:00', '0 days 00:35:00', '0 days 00:40:00',\n",
+ " '0 days 00:45:00',\n",
+ " ...\n",
+ " '2 days 23:10:00', '2 days 23:15:00', '2 days 23:20:00',\n",
+ " '2 days 23:25:00', '2 days 23:30:00', '2 days 23:35:00',\n",
+ " '2 days 23:40:00', '2 days 23:45:00', '2 days 23:50:00',\n",
+ " '2 days 23:55:00'],\n",
+ " dtype='timedelta64[ns]', length=864, freq=None)"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"time_deltas = data.index - timestamp_0"
]
@@ -145,7 +274,88 @@
"cell_type": "code",
"execution_count": 6,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Q_in \n",
+ " Q_out \n",
+ " T_int \n",
+ " T_ext \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 10.994 \n",
+ " 6.840 \n",
+ " 16.92 \n",
+ " 14.68 \n",
+ " \n",
+ " \n",
+ " 300 \n",
+ " 10.952 \n",
+ " 6.012 \n",
+ " 16.92 \n",
+ " 14.69 \n",
+ " \n",
+ " \n",
+ " 600 \n",
+ " 10.882 \n",
+ " 7.040 \n",
+ " 16.93 \n",
+ " 14.66 \n",
+ " \n",
+ " \n",
+ " 900 \n",
+ " 10.798 \n",
+ " 8.880 \n",
+ " 16.93 \n",
+ " 14.59 \n",
+ " \n",
+ " \n",
+ " 1200 \n",
+ " 10.756 \n",
+ " 10.491 \n",
+ " 16.94 \n",
+ " 14.50 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Q_in Q_out T_int T_ext\n",
+ "0 10.994 6.840 16.92 14.68\n",
+ "300 10.952 6.012 16.92 14.69\n",
+ "600 10.882 7.040 16.93 14.66\n",
+ "900 10.798 8.880 16.93 14.59\n",
+ "1200 10.756 10.491 16.94 14.50"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"data.index = time_deltas.days * 86400 + time_deltas.seconds\n",
"data.head()"
@@ -162,7 +372,18 @@
"cell_type": "code",
"execution_count": 7,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"np.all(np.diff(data.index) == 300)"
]
@@ -195,9 +416,20 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 11,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot(data.Q_in, color='C2')\n",
"plot(data.Q_out, color='C0')\n",
@@ -214,9 +446,20 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 12,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot(data.T_int, color='C2')\n",
"plot(data.T_ext, color='C0')\n",
@@ -235,9 +478,21 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 2,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'Params' 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[1;32m----> 1\u001b[1;33m params = Params(\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mR1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.076\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mK\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mW\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mR2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.272\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mK\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mW\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mR3\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.078\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mK\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mW\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mC1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m212900\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mJ\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mm\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\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[1;31mNameError\u001b[0m: name 'Params' is not defined"
+ ]
+ }
+ ],
"source": [
"params = Params(\n",
" R1 = 0.076 * m**2 * K / W,\n",
@@ -256,7 +511,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -283,6 +538,13 @@
" t_end=t_end, ts=ts)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -292,9 +554,90 @@
},
{
"cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " init \n",
+ " T_C1 16.11 degC\n",
+ "T_C2 15.27 degC\n",
+ "dtype: o... \n",
+ " \n",
+ " \n",
+ " R \n",
+ " 0 0.076 kelvin * meter ** 2 / watt\n",
+ "1 0.2... \n",
+ " \n",
+ " \n",
+ " C \n",
+ " 0 212900.0 joule / kelvin / meter ** 2\n",
+ "1 ... \n",
+ " \n",
+ " \n",
+ " T_int_func \n",
+ " <function interpolate.<locals>.<lambda> at 0x0... \n",
+ " \n",
+ " \n",
+ " T_ext_func \n",
+ " <function interpolate.<locals>.<lambda> at 0x0... \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 258900 \n",
+ " \n",
+ " \n",
+ " ts \n",
+ " Int64Index([ 0, 300, 600, 900, ... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "init T_C1 16.11 degC\n",
+ "T_C2 15.27 degC\n",
+ "dtype: o...\n",
+ "R 0 0.076 kelvin * meter ** 2 / watt\n",
+ "1 0.2...\n",
+ "C 0 212900.0 joule / kelvin / meter ** 2\n",
+ "1 ...\n",
+ "T_int_func . at 0x0...\n",
+ "T_ext_func . at 0x0...\n",
+ "t_end 258900\n",
+ "ts Int64Index([ 0, 300, 600, 900, ...\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"system = make_system(params, data)"
]
@@ -308,9 +651,22 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 16,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(,\n",
+ " ,\n",
+ " )"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"system.T_ext_func(0), system.T_ext_func(150), system.T_ext_func(300)"
]
@@ -341,7 +697,7 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
@@ -381,9 +737,23 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 18,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 -10.657894736842135 delta_degC * watt / kelvin...\n",
+ "1 -3.0882352941176463 delta_degC * watt / kelvin...\n",
+ "2 -7.564102564102562 delta_degC * watt / kelvin ...\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"compute_flux(system.init, 0, system)"
]
@@ -397,7 +767,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
@@ -429,9 +799,22 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 20,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 3.555499973097458e-05 delta_degC * watt / joule\n",
+ "1 -3.844086774341106e-05 delta_degC * watt / joule\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"slope_func(system.init, system.ts[1], system)"
]
@@ -445,9 +828,87 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 21,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " sol \n",
+ " None \n",
+ " \n",
+ " \n",
+ " t_events \n",
+ " [] \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 254 \n",
+ " \n",
+ " \n",
+ " njev \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " nlu \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " status \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " message \n",
+ " The solver successfully reached the end of the... \n",
+ " \n",
+ " \n",
+ " success \n",
+ " True \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "sol None\n",
+ "t_events []\n",
+ "nfev 254\n",
+ "njev 0\n",
+ "nlu 0\n",
+ "status 0\n",
+ "message The solver successfully reached the end of the...\n",
+ "success True\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"results, details = run_ode_solver(system, slope_func, t_eval=system.ts)\n",
"details"
@@ -462,18 +923,98 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 22,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " T_C1 \n",
+ " T_C2 \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 16.110000 \n",
+ " 15.270000 \n",
+ " \n",
+ " \n",
+ " 300 \n",
+ " 16.120516 \n",
+ " 15.258636 \n",
+ " \n",
+ " \n",
+ " 600 \n",
+ " 16.130820 \n",
+ " 15.247580 \n",
+ " \n",
+ " \n",
+ " 900 \n",
+ " 16.140992 \n",
+ " 15.235209 \n",
+ " \n",
+ " \n",
+ " 1200 \n",
+ " 16.150975 \n",
+ " 15.220746 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " T_C1 T_C2\n",
+ "0 16.110000 15.270000\n",
+ "300 16.120516 15.258636\n",
+ "600 16.130820 15.247580\n",
+ "900 16.140992 15.235209\n",
+ "1200 16.150975 15.220746"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"results.head()"
]
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 23,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"def plot_results(results, data):\n",
" plot(data.T_int, color='C2')\n",
@@ -499,9 +1040,78 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 24,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " Qm_in \n",
+ " Qm_out \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 10.6579 \n",
+ " 7.5641 \n",
+ " \n",
+ " \n",
+ " 300 \n",
+ " 10.5195 \n",
+ " 7.2902 \n",
+ " \n",
+ " \n",
+ " 600 \n",
+ " 10.5155 \n",
+ " 7.53308 \n",
+ " \n",
+ " \n",
+ " 900 \n",
+ " 10.3817 \n",
+ " 8.2719 \n",
+ " \n",
+ " \n",
+ " 1200 \n",
+ " 10.3819 \n",
+ " 9.24034 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Qm_in Qm_out\n",
+ "0 10.6579 7.5641\n",
+ "300 10.5195 7.2902\n",
+ "600 10.5155 7.53308\n",
+ "900 10.3817 8.2719\n",
+ "1200 10.3819 9.24034"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"def recompute_fluxes(results, system):\n",
" \"\"\"Compute fluxes between wall surfaces and internal masses.\n",
@@ -534,9 +1144,20 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 25,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"def plot_Q_in(Q_frame, data):\n",
" plot(Q_frame.Qm_in, color='gray')\n",
@@ -549,9 +1170,20 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 26,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"def plot_Q_out(Q_frame, data):\n",
" plot(Q_frame.Qm_out, color='gray')\n",
@@ -575,7 +1207,7 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
@@ -587,9 +1219,21 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 28,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([-0.33610526, -0.43247718, -0.36646728, ..., 2.24791831,\n",
+ " 0.42559448, 2.59096949])"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"errors = compute_error(Q_frame, data)"
]
@@ -603,9 +1247,17 @@
},
{
"cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [],
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.809956177715976\n"
+ ]
+ }
+ ],
"source": [
"print(np.sqrt(np.mean(errors**2)))"
]
@@ -626,9 +1278,72 @@
},
{
"cell_type": "code",
- "execution_count": 125,
- "metadata": {},
- "outputs": [],
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " R1 \n",
+ " 0.076 kelvin * meter ** 2 / watt \n",
+ " \n",
+ " \n",
+ " R2 \n",
+ " 0.272 kelvin * meter ** 2 / watt \n",
+ " \n",
+ " \n",
+ " R3 \n",
+ " 0.078 kelvin * meter ** 2 / watt \n",
+ " \n",
+ " \n",
+ " C1 \n",
+ " 212900.0 joule / kelvin / meter ** 2 \n",
+ " \n",
+ " \n",
+ " C2 \n",
+ " 113100.0 joule / kelvin / meter ** 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "R1 0.076 kelvin * meter ** 2 / watt\n",
+ "R2 0.272 kelvin * meter ** 2 / watt\n",
+ "R3 0.078 kelvin * meter ** 2 / watt\n",
+ "C1 212900.0 joule / kelvin / meter ** 2\n",
+ "C2 113100.0 joule / kelvin / meter ** 2\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"params = Params(\n",
" R1 = 0.076 * m**2 * K / W,\n",
@@ -647,7 +1362,7 @@
},
{
"cell_type": "code",
- "execution_count": 126,
+ "execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
@@ -677,9 +1392,34 @@
},
{
"cell_type": "code",
- "execution_count": 127,
- "metadata": {},
- "outputs": [],
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "R1 0.076 kelvin * meter ** 2 / watt\n",
+ "R2 0.272 kelvin * meter ** 2 / watt\n",
+ "R3 0.078 kelvin * meter ** 2 / watt\n",
+ "C1 212900.0 joule / kelvin / meter ** 2\n",
+ "C2 113100.0 joule / kelvin / meter ** 2\n",
+ "dtype: object\n",
+ "RMSE 1.809956177715976\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "array([-0.33610526, -0.43247718, -0.36646728, ..., 2.24791831,\n",
+ " 0.42559448, 2.59096949])"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"errors = error_func(params, data)"
]
@@ -693,9 +1433,76 @@
},
{
"cell_type": "code",
- "execution_count": 124,
- "metadata": {},
- "outputs": [],
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[7.600e-02 2.720e-01 7.800e-02 2.129e+05 1.131e+05]\n",
+ "RMSE 1.809956177715976\n",
+ "[7.600e-02 2.720e-01 7.800e-02 2.129e+05 1.131e+05]\n",
+ "RMSE 1.809956177715976\n",
+ "[7.600e-02 2.720e-01 7.800e-02 2.129e+05 1.131e+05]\n",
+ "RMSE 1.809956177715976\n",
+ "[7.60000011e-02 2.72000000e-01 7.80000000e-02 2.12900000e+05\n",
+ " 1.13100000e+05]\n",
+ "RMSE 1.730042667188259\n",
+ "[7.60000000e-02 2.72000004e-01 7.80000000e-02 2.12900000e+05\n",
+ " 1.13100000e+05]\n",
+ "RMSE 1.7627243743528922\n",
+ "[7.60000000e-02 2.72000000e-01 7.80000012e-02 2.12900000e+05\n",
+ " 1.13100000e+05]\n",
+ "RMSE 1.7165339069646137\n",
+ "[7.60000000e-02 2.72000000e-01 7.80000000e-02 2.12900003e+05\n",
+ " 1.13100000e+05]\n",
+ "RMSE 1.7451110082646728\n",
+ "[7.60000000e-02 2.72000000e-01 7.80000000e-02 2.12900000e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.704716412992484\n",
+ "[7.60000000e-02 2.72000005e-01 7.80000003e-02 2.12899996e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.7699460263311932\n",
+ "[7.60000011e-02 2.72000005e-01 7.80000003e-02 2.12899996e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.7207365101375638\n",
+ "[7.60000000e-02 2.72000009e-01 7.80000003e-02 2.12899996e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.826172009539081\n",
+ "[7.60000000e-02 2.72000005e-01 7.80000014e-02 2.12899996e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.7435087299134158\n",
+ "[7.60000000e-02 2.72000005e-01 7.80000003e-02 2.12899999e+05\n",
+ " 1.13100002e+05]\n",
+ "RMSE 1.7380477014771265\n",
+ "[7.60000000e-02 2.72000005e-01 7.80000003e-02 2.12899996e+05\n",
+ " 1.13100004e+05]\n",
+ "RMSE 1.8147539515516908\n",
+ "[7.60000005e-02 2.72000005e-01 7.80000014e-02 2.12899997e+05\n",
+ " 1.13100001e+05]\n",
+ "RMSE 1.7221627317234836\n",
+ "[7.60000017e-02 2.72000005e-01 7.80000014e-02 2.12899997e+05\n",
+ " 1.13100001e+05]\n",
+ "RMSE 1.765559728217052\n",
+ "[7.60000005e-02 2.72000009e-01 7.80000014e-02 2.12899997e+05\n",
+ " 1.13100001e+05]\n",
+ "RMSE 1.7337616666241438\n",
+ "[7.60000005e-02 2.72000005e-01 7.80000026e-02 2.12899997e+05\n",
+ " 1.13100001e+05]\n",
+ "RMSE 1.7304281249092306\n",
+ "[7.60000005e-02 2.72000005e-01 7.80000014e-02 2.12900001e+05\n",
+ " 1.13100001e+05]\n",
+ "RMSE 1.759687382421695\n",
+ "[7.60000005e-02 2.72000005e-01 7.80000014e-02 2.12899997e+05\n",
+ " 1.13100003e+05]\n",
+ "RMSE 1.7492668260895325\n",
+ "[7.60000006e-02 2.72000008e-01 7.80000023e-02 2.12899999e+05\n",
+ " 1.13099997e+05]\n",
+ "RMSE 1.7453479381505328\n"
+ ]
+ }
+ ],
"source": [
"best_params, details = fit_leastsq(error_func, params, data)"
]
@@ -709,18 +1516,107 @@
},
{
"cell_type": "code",
- "execution_count": 123,
- "metadata": {},
- "outputs": [],
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fvec \n",
+ " [-0.33610533721214253, -0.4324772587054255, -0... \n",
+ " \n",
+ " \n",
+ " nfev \n",
+ " 19 \n",
+ " \n",
+ " \n",
+ " fjac \n",
+ " [[-12076458232.152735, -8.958758259509291e-13,... \n",
+ " \n",
+ " \n",
+ " ipvt \n",
+ " [3, 1, 2, 5, 4] \n",
+ " \n",
+ " \n",
+ " qtf \n",
+ " [5.261596357529862, 2.766218758039816, -2.9735... \n",
+ " \n",
+ " \n",
+ " cov_x \n",
+ " [[1.0318593370751376e-19, -7.249631974357622e-... \n",
+ " \n",
+ " \n",
+ " mesg \n",
+ " The relative error between two consecutive ite... \n",
+ " \n",
+ " \n",
+ " ier \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "fvec [-0.33610533721214253, -0.4324772587054255, -0...\n",
+ "nfev 19\n",
+ "fjac [[-12076458232.152735, -8.958758259509291e-13,...\n",
+ "ipvt [3, 1, 2, 5, 4]\n",
+ "qtf [5.261596357529862, 2.766218758039816, -2.9735...\n",
+ "cov_x [[1.0318593370751376e-19, -7.249631974357622e-...\n",
+ "mesg The relative error between two consecutive ite...\n",
+ "ier 2\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"details"
]
},
{
"cell_type": "code",
- "execution_count": 119,
- "metadata": {},
- "outputs": [],
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'The relative error between two consecutive iterates is at most 0.000000'"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"details.mesg"
]
@@ -734,9 +1630,72 @@
},
{
"cell_type": "code",
- "execution_count": 120,
+ "execution_count": 38,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " R1 \n",
+ " 0.076000 \n",
+ " \n",
+ " \n",
+ " R2 \n",
+ " 0.272000 \n",
+ " \n",
+ " \n",
+ " R3 \n",
+ " 0.078000 \n",
+ " \n",
+ " \n",
+ " C1 \n",
+ " 212899.997405 \n",
+ " \n",
+ " \n",
+ " C2 \n",
+ " 113100.000966 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "R1 0.076000\n",
+ "R2 0.272000\n",
+ "R3 0.078000\n",
+ "C1 212899.997405\n",
+ "C2 113100.000966\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"best_params"
]
@@ -750,9 +1709,17 @@
},
{
"cell_type": "code",
- "execution_count": 121,
+ "execution_count": 39,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.7221627317234836\n"
+ ]
+ }
+ ],
"source": [
"system = make_system(best_params, data)\n",
"results, details = run_ode_solver(system, slope_func, t_eval=system.ts)\n",
@@ -772,18 +1739,40 @@
},
{
"cell_type": "code",
- "execution_count": 85,
+ "execution_count": 40,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot_Q_in(Q_frame, data)"
]
},
{
"cell_type": "code",
- "execution_count": 86,
+ "execution_count": 41,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"plot_Q_out(Q_frame, data)"
]
@@ -907,7 +1896,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.6.5"
+ "version": "3.6.6"
}
},
"nbformat": 4,
diff --git a/code/world_pop_transition.ipynb b/code/world_pop_transition.ipynb
new file mode 100644
index 00000000..3194c5f5
--- /dev/null
+++ b/code/world_pop_transition.ipynb
@@ -0,0 +1,497 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Modeling and Simulation in Python\n",
+ "\n",
+ "Project 1 example\n",
+ "\n",
+ "Copyright 2018 Allen Downey\n",
+ "\n",
+ "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Configure Jupyter so figures appear in the notebook\n",
+ "%matplotlib inline\n",
+ "\n",
+ "# Configure Jupyter to display the assigned value after an assignment\n",
+ "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
+ "\n",
+ "# import functions from the modsim library\n",
+ "from modsim import *"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pandas import read_html\n",
+ "\n",
+ "filename = 'data/World_population_estimates.html'\n",
+ "tables = read_html(filename, header=0, index_col=0, decimal='M')\n",
+ "table2 = tables[2]\n",
+ "table2.columns = ['census', 'prb', 'un', 'maddison', \n",
+ " 'hyde', 'tanton', 'biraben', 'mj', \n",
+ " 'thomlinson', 'durand', 'clark']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_results(census, un, timeseries, title):\n",
+ " \"\"\"Plot the estimates and the model.\n",
+ " \n",
+ " census: TimeSeries of population estimates\n",
+ " un: TimeSeries of population estimates\n",
+ " timeseries: TimeSeries of simulation results\n",
+ " title: string\n",
+ " \"\"\"\n",
+ " plot(census, ':', label='US Census')\n",
+ " plot(un, '--', label='UN DESA')\n",
+ " if len(timeseries):\n",
+ " plot(timeseries, color='gray', label='model')\n",
+ " \n",
+ " decorate(xlabel='Year', \n",
+ " ylabel='World population (billion)',\n",
+ " title=title)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 63,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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ODt8dVXUf74Cb1Vpm+XFZLPOmUvA6mDlpsMMykzAbutdZZbeFY0AoKCggFdffZURI0bw4osvctVVVzFz5kx+//vfd3izsrKykqSkpFM2tV++fDl33nkneXl5REdH84Mf/IB169Zx4MABwGxJd/vtt+NwOJg1axbp6ekUFRXhdDqx2+28/PLLbN26lauuuiqkJNPV/YQQZ84I+GnYvZ7qVS+1SU62uCSSpl3BmIsvxxkdA0Bmaiw+X+BkhwqbPluC6q2cTic+n++E5X6/n6ioqJbXgwcP5sc//jFgJqB33nmHhx9+mJSUFK655po2+6anp1NdXY3X6z0hSdXV1REVFYXT6eTIkSPcd999LF26tGW93W7n8OHD2O124uPj28TgcDgIBALEx8ezbNkynnnmGa6//nqio6O54YYbWLx4cafvtbP9JEkJ0XMCHhfVq1/DX18FgN8fwGazETtsArHDJ2KxmZf+uZNyiXLYGJSZEM5wT6rPJqipozuveps1PodZ43NOuv78SYM4f9Kgk67/wvTBfGH64NOOKysriyNHjjB27NiWZT6fjyNHjrTMFvz1r3+diy++mBtvvBGA1NRUrrnmGrZu3YrW+oRjTpgwgejoaFasWMG8efParHv00UcpKipi2bJlZGRksHTpUs4777yW9bt27SI/P5+NGzeeNOaampqW+1der5ePP/6Yu+66i8mTJ2Oz2dp0sDUMg5qamlPu1/6+lRCi+1gc0dhi4vHVVVFV56ao3kn21PMZqwrbbDc8NzlMEYbmrFXxKaUWKaXq2z38Sql3zlYMvcH8+fN58skn2bt3L2AO0/TII4+Qnp7OuHHjALj00kt5+umneffdd/F4PHg8HtasWcOKFSu48MILTzim0+nknnvuYenSpbz33nv4fD4aGxt57rnnePXVV7njjjsAuPLKK/nd735HSUkJfr+fP/zhDyxatAi3291pzJWVlXzzm99k7dq1OBwOMjMzsVgsJCUlkZeXh8fj4a233sLv97Ns2bKWQXs7208I0XMsFgvxo2dT5bbwWdNgdiXO4NN9TTS6I2u0lrNWgtJa/w34W/NrpdQE4B3gB2crht7gjjvuwGazsXjxYioqKoiKimL69Ok8//zzLdVz1113HdHR0Tz11FPce++9GIbBsGHDWLp0KbNmzerwuF/96ldJSEjgmWee4Uc/+hGGYTBq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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "un = table2.un / 1e9\n",
+ "census = table2.census / 1e9\n",
+ "empty = TimeSeries()\n",
+ "plot_results(census, un, empty, 'World population estimates')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 64,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.278814327"
+ ]
+ },
+ "execution_count": 64,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "half = get_first_value(census) / 2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 65,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " young \n",
+ " 1.278814 \n",
+ " \n",
+ " \n",
+ " old \n",
+ " 1.278814 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "young 1.278814\n",
+ "old 1.278814\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 65,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "init = State(young=half, old=half)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " birth_rate1 \n",
+ " 0.0555556 \n",
+ " \n",
+ " \n",
+ " birth_rate2 \n",
+ " 0.04 \n",
+ " \n",
+ " \n",
+ " mature_rate \n",
+ " 0.025 \n",
+ " \n",
+ " \n",
+ " death_rate \n",
+ " 0.025 \n",
+ " \n",
+ " \n",
+ " t_0 \n",
+ " 1950 \n",
+ " \n",
+ " \n",
+ " t_end \n",
+ " 2016 \n",
+ " \n",
+ " \n",
+ " init \n",
+ " young 1.278814\n",
+ "old 1.278814\n",
+ "dtype: flo... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "birth_rate1 0.0555556\n",
+ "birth_rate2 0.04\n",
+ "mature_rate 0.025\n",
+ "death_rate 0.025\n",
+ "t_0 1950\n",
+ "t_end 2016\n",
+ "init young 1.278814\n",
+ "old 1.278814\n",
+ "dtype: flo...\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 96,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "system = System(birth_rate1 = 1/18,\n",
+ " birth_rate2 = 1/25,\n",
+ " mature_rate = 1/40,\n",
+ " death_rate = 1/40,\n",
+ " t_0 = 1950,\n",
+ " t_end = 2016,\n",
+ " init=init)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def update_func1(state, t, system):\n",
+ " if t < 1970:\n",
+ " births = system.birth_rate1 * state.young\n",
+ " else:\n",
+ " births = system.birth_rate2 * state.young\n",
+ " maturings = system.mature_rate * state.young\n",
+ " deaths = system.death_rate * state.old\n",
+ " \n",
+ " young = state.young + births - maturings\n",
+ " old = state.old + maturings - deaths\n",
+ " \n",
+ " return State(young=young, old=old)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 98,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " young \n",
+ " 1.317889 \n",
+ " \n",
+ " \n",
+ " old \n",
+ " 1.278814 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "young 1.317889\n",
+ "old 1.278814\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 98,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state = update_func1(init, system.t_0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 99,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " values \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " young \n",
+ " 1.358158 \n",
+ " \n",
+ " \n",
+ " old \n",
+ " 1.279791 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "young 1.358158\n",
+ "old 1.279791\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 99,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "state = update_func1(state, system.t_0, system)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 100,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def run_simulation(system, update_func):\n",
+ " \"\"\"Simulate the system using any update function.\n",
+ " \n",
+ " init: initial State object\n",
+ " system: System object\n",
+ " update_func: function that computes the population next year\n",
+ " \n",
+ " returns: TimeSeries\n",
+ " \"\"\"\n",
+ " results = TimeSeries()\n",
+ " \n",
+ " state = system.init\n",
+ " results[system.t_0] = state.young + state.old\n",
+ " \n",
+ " for t in linrange(system.t_0, system.t_end):\n",
+ " state = update_func(state, t, system)\n",
+ " results[t+1] = state.young + state.old\n",
+ " \n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 101,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results = run_simulation(system, update_func1);"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 102,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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gvgY54jHKCWoMWjmzJn8+c9/pqCggJdeeokrrriCZcuW8fOf/7y3V01fzc3NJCQkHLOr/erVq7n11lvJyckhMjKSb3/722zcuJGqqirA/OV0880343A4WL58OampqVRXV+N0OrHb7bz88sts27aNK664Iqwkc7znCSGGl8/nY9OmTb3Jyd/VSnR0NMuXLw9JTn5/gDc37OWDktpRiVMS1AhzOp294wr68vv9IXW9U6dO5bvf/S6vv/46H330Ed/4xjd45plneOmll444NzU1lZaWlgHHEbW3t+PxeACora3lrrvuYtGiRSxatIizzjoLu93eO4tDbGxsSAwOh4NAIEBsbCwvvPAC1dXVrFq1iuXLl/P0008PmCz7Ot7zhBDDp7Ozk7Vr11JXVwcBP56GvcR2HmBhdgJxcXEhx9psVs4onsyemhb2HWgf8VgnbBXfkqLBq96Wz81i+dyso+4/Z+EUzlk45aj7Lzh9KhecPnXIcWVkZFBbW8ucOXN6t/l8Pmpra3tXC/7yl7/Mpz/9aa699loAkpOT+dKXvsS2bdtCiuM9esYnvPfee5x//vkh+x566CGqq6t54YUXSEtL45577uHMM8/s3b9r1y5yc3PZvHnzUWNubW3tbb/yer188MEH3HbbbSxatAibzRaSGA3DoLW19Zjn9W+3EkIMv4MHD7Jp0ya8Xi8BjwtvYw2To63MSI7Gu+djGmPSSckO/d6bOSWR1g43SfEjOwYKpAQ14i655BIef/xx9uzZA5jTND344IOkpqZSXFwMwEUXXcRTTz3Fm2++icfjwePxsH79et577z3OO++8I67pdDq54447uOeee3jrrbfw+Xx0dXXx3HPP8ec//5lbbrkFgMsvv5wnnniCuro6/H4/zzzzDFdddRXd3d2Dxtzc3MzXvvY1NmzYgMPhID09HYvFQkJCAjk5OXg8Ht544w38fj8vvPBC77Qog50nhBg5hmGwZ88e1q9fj9fdjbe5Dl9DFfmJdmZOisTjDbC1O4uX1zfT1ukJOddisbB4VgaxUSM/W8+ELUGNVbfccgs2m40bb7yRpqYmIiIiOP3003n++ed725CuueYaIiMjefLJJ7nzzjsxDIPp06dzzz33sHz58gGv+8UvfpG4uDiefvppvvOd72AYBrNmzeLZZ59l8eLFANxwww34fD6uuuoqWlpayM/P59ln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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plot_results(census, un, results, 'World population estimates')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "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.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}