diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..e1775b31 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/Users/sam/opt/anaconda3/bin/python" +} \ No newline at end of file diff --git a/code/Duck_Problem.ipynb b/code/Duck_Problem.ipynb new file mode 100644 index 00000000..d21b6366 --- /dev/null +++ b/code/Duck_Problem.ipynb @@ -0,0 +1,297 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "Duck Problem", + "version": "0.3.2", + "provenance": [], + "collapsed_sections": [], + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "metadata": { + "id": "qEb5Fl3ZyVJm", + "colab_type": "text" + }, + "cell_type": "markdown", + "source": [ + "# Duck Problem\n", + "Sam and Jocelyn" + ] + }, + { + "metadata": { + "id": "yW7W7kYgwXpc", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "from modsim import *" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "7HdOyi18wfcM", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "system = System (\n", + " density_duck = 0.3, #g/cm^3\n", + " density_water = 1, # g/cm^3" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "3Cf0h9kMwfea", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "def error_func(d, system):\n", + " unpack(system)\n", + " \n", + " volume_duck = (4/3) * pi * r ** 3\n", + " mass_duck = volume_duck * density_duck\n", + " volume_water = (pi / 3) * (3 * r * d ** 2 - d ** 3)\n", + " mass_water = volume_water * density_water\n", + " \n", + " print(d)\n", + " \n", + " return mass_duck - mass_water" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "b13HxrLZwfg_", + "colab_type": "code", + "outputId": "02aa2c31-0965-4f6b-b707-ff6ae74c8a29", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + } + }, + "cell_type": "code", + "source": [ + "error_func(3, system)" + ], + "execution_count": 0, + "outputs": [ + { + "output_type": "stream", + "text": [ + "3\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "43.982297150257125" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 30 + } + ] + }, + { + "metadata": { + "id": "VC131nNxwfj_", + "colab_type": "code", + "outputId": "e2e7a864-e5b0-4a3f-c7b2-7fd409b00b26", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "cell_type": "code", + "source": [ + "fsolve(error_func, 3, system)[0]" + ], + "execution_count": 0, + "outputs": [ + { + "output_type": "stream", + "text": [ + "3\n", + "[3]\n", + "[3.]\n", + "[3.]\n", + "[3.00000004]\n", + "[3.66666666]\n", + "[3.63105175]\n", + "[3.63257187]\n", + "[3.63257491]\n", + "[3.63257491]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "3.6325749109056766" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 31 + } + ] + }, + { + "metadata": { + "id": "ObNRqgN-wfmp", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "xgyncKR1wfol", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "9H42tz60wfre", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "8tSxsGURwftr", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "hk2kF4ywwfv9", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "id": "gUV1-abywfyH", + "colab_type": "code", + "colab": {} + }, + "cell_type": "code", + "source": [ + "" + ], + "execution_count": 0, + "outputs": [] + }, + { + "metadata": { + "colab_type": "code", + "outputId": "eb7d36ab-74c5-4e5e-d976-697b0db7555d", + "id": "YddhMDFZwVTq", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + } + }, + "cell_type": "code", + "source": [ + "# Imports\n", + "from IPython.display import clear_output\n", + "import os\n", + "import time\n", + "\n", + "# Install Python libraries\n", + "!pip3 install pandas seaborn sympy beautifulsoup4 lxml pint scipy==1.1.0 numpy\n", + "# Removes code before re-downloading it\n", + "!rm -rf ./ModSimPy\n", + "!rm -rf ./modsim.py\n", + "\n", + "# Grabs ModSimPy\n", + "!git clone https://github.com/AllenDowney/ModSimPy.git\n", + "!cp \"ModSimPy/code/modsim.py\" .\n", + "\n", + "# Resets kernel to flush outdated libraries (especially SciPy)\n", + "clear_output()\n", + "print(\"Configured for ModSimPy. Restarting kernel.\")\n", + "time.sleep(1)\n", + "os._exit(0)" + ], + "execution_count": 0, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Configured for ModSimPy. Restarting kernel.\n" + ], + "name": "stdout" + } + ] + } + ] +} \ No newline at end of file diff --git a/code/HIV Model.ipynb b/code/HIV Model.ipynb new file mode 100644 index 00000000..8784ff20 --- /dev/null +++ b/code/HIV Model.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# HIV Model\n", + "Sam Daitzman / Adi Sudhakar" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "['/private/var/folders/fq/qb7xc4wj6dv8ghkjm1q940zh0000gq/T/ae87943a-e357-4e5e-9795-42ef4dddfad4',\n '/Users/sam/opt/anaconda3/lib/python37.zip',\n '/Users/sam/opt/anaconda3/lib/python3.7',\n '/Users/sam/opt/anaconda3/lib/python3.7/lib-dynload',\n '',\n '/Users/sam/opt/anaconda3/lib/python3.7/site-packages',\n '/Users/sam/opt/anaconda3/lib/python3.7/site-packages/aeosa',\n '/Users/sam/opt/anaconda3/lib/python3.7/site-packages/IPython/extensions',\n '/Users/sam/.ipython',\n '/Users/sam/Documents/GitHub/ModSimPy']" + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import sys,os\n", + "sys.path.append(os.getcwd())\n", + "sys.path" + ] + }, + { + "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 *\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
values
R1.000000e+03
L0.000000e+00
E0.000000e+00
V4.000000e-07
\n
", + "text/plain": "R 1.000000e+03\nL 0.000000e+00\nE 0.000000e+00\nV 4.000000e-07\ndtype: float64" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = State(\n", + " R=1000, # activated normal lymphocytes\n", + " L=0, # latently infected\n", + " E=0, # actively infected\n", + " V=4e-7 # free virions\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "system = System(\n", + " gamma=1.36, # birthrate of R\n", + " mu=1.36e-3, # natural deathrate of R and L\n", + " delta=0.33, # deathrate of E\n", + " beta=0.00027, # R-to-L conversion rate (per virion)\n", + " alpha=3.6e-2, # L-to-E rate\n", + " pie=100, # virion creation rate\n", + " sigma=2, # virion death rate\n", + " rho=0.1, # proportion of cells becoming latently infected upon infection\n", + " tau=0.2, # proportion of cells activated\n", + " t_0=1, t_end=1201,\n", + " dt = 1/24\n", + ");" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def update_func(system, state):\n", + " # suggestion from Allison: first calculate named flows here to guarantee conservation\n", + " unpack(system)\n", + " \n", + " drdt = gamma * tau - mu * state.R - beta * state.R * state.V\n", + " dldt = rho * beta * state.R * state.V - mu * state.L - alpha * state.L\n", + " dedt = (1 - rho) * beta * state.R * state.V + alpha * state.L - delta * state.E\n", + " dvdt = pie * state.E - sigma * state.V\n", + " \n", + " state.R += drdt * dt\n", + " state.L += dldt * dt\n", + " state.E += dedt * dt\n", + " state.V += dvdt * dt\n", + " return state" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def run_simulation(system, state, update_func):\n", + " frame = TimeFrame(columns = state.index)\n", + " frame.row[system.t_0] = state\n", + " \n", + " for t in linrange(system.t_0, system.t_end):\n", + " frame.row[t+1] = update_func(system, frame.row[t])\n", + " return frame" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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z89XAwcOVF999ZVyu93q3XffVSkpKcrr9eqqf4899piaNWuWstvtqqioSD322GPq6aefDlj/JGR0Yvv27Wr27NnVlj3xxBPq97//vbr++utVdna2f/mCBQv8PxQPPPCAWrZsmb9t06ZNaujQoY1T9FVYuXKlmjx5shozZoz69NNPlcPhaBb9+89//qOSkpKU2+32L8vLy1MnT55UN998s9qwYYN/+SeffKIeeOABpZRSTz/9tEpPT/e35ebmqr59+6qSkpLGK74OCgoKVI8ePdSqVauUz+dTu3btUgMGDFAHDx5ssv17/fXX1b333qvee++9ar+Er7Y/y5Yt869XadiwYWrjxo0B7kntauuf1+tVU6ZMUbm5uf71/va3v6nhw4crpQLTPzlcphOJiYnMnTvX/7iwsJAdO3bQvn17NE2jW7du/raYmBiysrIAOHjwILGxsdXaTp06RWFhYaPVXleHDx/mzTffZP78+f5lubm5zaJ/u3fvpkePHrz55pvccsstpKSksG7dOsLCwjh9+jRxcXH+dbt3737R/nXt2hWlFLm5uY3dhUtq3bo1P/3pT3nmmWfo06cP48ePZ8aMGURGRjbZ/qWlpbFy5Ur69u3rX1ZcXHzV/anZVvO5ja22/hkMBt5+++1qN8D829/+Ru/evYHA9K/Z3YW5OTh37hxTpkyhf//+9OnTB5PJhKZp/naLxYLL5QLA4XBgsVj8bZU3tqts1wuv18t///d/8+tf/5rIyEj/crvd3iz6V1RUxL///W+SkpJYv3492dnZTJ48mTZt2gBUu+HgpfqnaRomkwmn09m4HbgMn8+HyWQiPT2d22+/nZ07d/LUU08RHh4ONM3+RUVFXbCscv7havpTs61yO8Hqa239q2nJkiWsX7/e/1b3geifjGR0JicnhwkTJtCuXTsWLlyIzWbD7XajqtzH1Ol0YrVager/AeD8L9/Kdr14++236d69O7fffnu15VartVn0z2Qy0aJFC5566ilMJhO9evVi/PjxrFq1CoDS0lL/upfqn1IKt9uNzWZr3A5cxtdff83OnTu5++67MRqNJCUlMW7cuGbTv0qVv0Svpj8126D851VvP6sAHo+HF154gQ8++IA//elP/hFKIPonIaMj27dvZ8KECaSkpLBw4ULMZjPR0dEopThy5Ih/vezsbP9wPi4ujpycnGptkZGR/r8w9eLLL79k7dq1JCYmkpiYSFZWFr/5zW9YunRps+hfTEwMTqcTt9vtX+b1eomIiCAyMpLs7Gz/8pycnIv2Ly8vD6VUg76fR0M4ceJEtb4BhIaG0qZNm2bRv0r1+X7VbIPqP8t6UVJSwiOPPMLu3btZsWKF/1AZBKh/VzmnJBrYjz/+qBISEtT//u//XtA2bdo0NX36dFVSUqL27dunkpOT1TfffKOUUurDDz9Ud955pzpy5Ij/7KtXXnmlscu/YpUT/0o1j/65XC41bNgwNXfuXFVaWqoyMzPVTTfdpL766iv1+9//Xk2cOFHl5+f7z1b66KOPlFJKffPNN+rmm29W+/bt85/NM3369CD35kJZWVmqb9++atmyZcrn86kffvhBDR48WK1bt67J92/Lli3VJv6vtj9nzpxRAwcOVF9++aVyu93qvffeU8OHD1elpaVB6Velmv179NFH1UMPPaQcDscF6waifxIyOjF//nzVo0cPNWDAgGofr7zyiiosLFQzZsxQSUlJaujQoepPf/qT/3ler1e98cYbaujQoSoxMVE9//zzQf+hrouqIdNc+peXl6ceffRRfz/ee+89pVR5AL344osqOTlZDR48WC1YsED5fD7/8z788EP1k5/8RA0cOFA9+eSTqqioKFhduKRvvvlG3XvvvWrgwIHq9ttvV5988olSqun3r+Yv4fr0Z9u2bWrs2LFqwIAB6v7771f79u1r1L7Upmr/9u3bp3r06KH69u1b7ffMLbfc4l+/ofsnb1omhBAiYGRORgghRMBIyAghhAgYCRkhhBABIyEjhBAiYCRkhBBCBIyEjBBCiICRkBFCCBEwEjJCCCECRkJGCCFEwPx/kl91528Q7o8AAAAASUVORK5CYII=\n", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": "
" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "state = State(\n", + " R=1000, # activated normal lymphocytes\n", + " L=0, # latently infected\n", + " E=0, # actively infected\n", + " V=4e-7 # free virions\n", + ")\n", + "plt = run_simulation(system, state, update_func).plot()" + ] + }, + { + "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": [] + }, + { + "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.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/code/Lotka-Volterra.ipynb b/code/Lotka-Volterra.ipynb new file mode 100644 index 00000000..57f581ce --- /dev/null +++ b/code/Lotka-Volterra.ipynb @@ -0,0 +1,288 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Lotka-Volterra" + ] + }, + { + "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": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
alpha0.05
beta0.10
delta0.10
gamma0.10
\n", + "
" + ], + "text/plain": [ + "alpha 0.05\n", + "beta 0.10\n", + "delta 0.10\n", + "gamma 0.10\n", + "dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = System(\n", + " alpha=0.05,\n", + " beta=0.1,\n", + " delta=0.1,\n", + " gamma=0.1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
x1
y1
\n", + "
" + ], + "text/plain": [ + "x 1\n", + "y 1\n", + "dtype: int64" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = State(\n", + " x=1, # prey\n", + " y=1 # predator\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def update_func(state, system):\n", + " x, y = state\n", + " unpack(system)\n", + " \n", + " dxdt = alpha * x - beta * x * y\n", + " dydt = delta * x * y - gamma * y\n", + "\n", + " x += dxdt\n", + " y += dydt\n", + " \n", + " return State(x=x, y=y)" + ] + }, + { + "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": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
x0.950
y0.995
\n", + "
" + ], + "text/plain": [ + "x 0.950\n", + "y 0.995\n", + "dtype: float64" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func(state, system)" + ] + }, + { + "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/Project 3.ipynb b/code/Project 3.ipynb new file mode 100644 index 00000000..0aed6b15 --- /dev/null +++ b/code/Project 3.ipynb @@ -0,0 +1,1913 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qEb5Fl3ZyVJm" + }, + "source": [ + "# Why Walk When You Can Zipline?\n", + "\n", + "## Sam Daitzman and Jocelyn Jimenez\n", + "December, 2018" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Y1DkmasdyVJp" + }, + "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'\n", + "\n", + "# import functions from the modsim.py module\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "EBbygIvbyVLj" + }, + "source": [ + "# Introduction\n", + "Although Olin is a very small campus, it is sometimes very tedious having to walk through various curved paths and flights of stairs. We noticed that there was great potential of a zip line from Olin’s Academic Center to West Hall. Initially there were multiple issues that arose. For instance, where will the landing spot be? In the case of our model, we believe it is best if the zip line ends on the corner room in West Hall on the second floor because it gives us the fastest access to most dorms in West Hall. If we were to ask “Which floor in the AC allows us to get faster to our destination?” the answer would be obvious, the 4th floor; but if you zipline at too steep an angle, you are likely to get injured. As a result, we decided to take into consideration the safety of the individual in order to make it a more useful model. Our model asks what the fastest safe zip line starting mount-point would be to get from the AC to West Hall as fast as (safely) possible. Stick around to find out where to anchor a zip-line in the Academic Center." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "yZ7TK-tEZvhp" + }, + "source": [ + "# Code Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "XcpC9qV2yVLl" + }, + "outputs": [], + "source": [ + "# units!\n", + "year = UNITS.year\n", + "s = UNITS.second\n", + "N = UNITS.newton\n", + "kg = UNITS.kilogram\n", + "m = UNITS.meter" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "tPBOlVPj-xyi" + }, + "source": [ + "To prove the point that is is a good idea for Olin to have a zip line, we modeled how the change in position will affect the velocity of the individual. We considered important initial/constant variables like the starting position, where (0,0) is at the tallest part of the Academic Center. For the following model, the starting velocity of the person in the x and y dimensions is 0 m/s, which can be seen below. " + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Nq0vKaw0yVLn" + }, + "outputs": [], + "source": [ + "#Starting position on the x and y axis\n", + "x_0 = (0 * m)\n", + "y_0 = (0 * m)\n", + "\n", + "#Starting velocity in the x and y dimension\n", + "vx_0 = 0 * m / s\n", + "vy_0 = 0 * m / s\n", + "\n", + "init = State(x=x_0,\n", + " y=y_0,\n", + " vx=vx_0,\n", + " vy=vy_0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "bihtyQY7FuEW" + }, + "source": [ + "Other constants include the mass, density, and area of the individual, gravity, drag force, the height of the West Hall window, the maximum landing speed and the end time. These constants are defined as the parameters of the model." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2mYVqxxmyVLq" + }, + "outputs": [], + "source": [ + "params = Params(init=init,\n", + " \n", + " # Mass of the individual ziplining\n", + " m_human=70 * kg,\n", + " \n", + " #Gravity\n", + " grav = Vector(0 * m / s ** 2, -9.81),\n", + " \n", + " #Mass Density of the Fluid\n", + " rho = 1.275 * kg / m ** 3, \n", + " \n", + " #Reference Area of individual\n", + " area = 0.7 * m ** 2, \n", + " \n", + " #Drag Coefficent \n", + " cd = 1.2,\n", + " \n", + " #End Time\n", + " t_end=100e6 * s,\n", + " \n", + " #Height of West Hall Window in meters\n", + " WH_window_abs_height = 59.3,\n", + " \n", + " #Maximum Landing Speed\n", + " max_landing_speed = 12 * m / s\n", + ")\n", + "\n", + "#Creates a system containing constants\n", + "def make_system(params, zipline):\n", + " unpack(params)\n", + " \n", + " system = System(params, z=zipline)\n", + " \n", + " return system" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 359 + }, + "colab_type": "code", + "id": "im99NKd9zS1y", + "outputId": "ed0be2ec-2e06-4164-fa98-66e7854719fe" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
initx 0 meter\n", + "y 0 me...
m_human70 kilogram
grav[0.0 meter / second ** 2, -9.81 meter / second...
rho1.275 kilogram / meter ** 3
area0.7 meter ** 2
cd1.2
t_end100000000.0 second
WH_window_abs_height59.3
max_landing_speed12.0 meter / second
z[100.0 meter, -25.1 meter]
\n", + "
" + ], + "text/plain": [ + "init x 0 meter\n", + "y 0 me...\n", + "m_human 70 kilogram\n", + "grav [0.0 meter / second ** 2, -9.81 meter / second...\n", + "rho 1.275 kilogram / meter ** 3\n", + "area 0.7 meter ** 2\n", + "cd 1.2\n", + "t_end 100000000.0 second\n", + "WH_window_abs_height 59.3\n", + "max_landing_speed 12.0 meter / second\n", + "z [100.0 meter, -25.1 meter]\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "make_system(params, Vector(100 * m, -25.1))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "UkMWPRa9Z0Xl" + }, + "source": [ + "# Force Functions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "FZT9lm6XG0Cr" + }, + "source": [ + "We decided to calculate the different forces that might affect the zip-liner by including forces like gravity, drag, net and effective force. The cells below demonstrate functions and equations that contribute to the final velocity of the individual. We calculate the force of gravity pulling the zipliner downward and the drag force resisting their motion, and their sum is the net force. Then we calculate the effective force, which is the component of the force in line with the zip-line." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "r1YjIAFXosZD" + }, + "outputs": [], + "source": [ + "def earth_grav(m, g):\n", + " return g * m" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 37 + }, + "colab_type": "code", + "id": "ntH51n1CunMT", + "outputId": "70d8822b-d431-43c2-c460-71e367881d98" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}0.0 & -981.0\\end{pmatrix} kilogram meter/second2\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}0.0 & -981.0\\end{pmatrix}\\ \\frac{\\mathrm{kilogram} \\cdot \\mathrm{meter}}{\\mathrm{second}^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "earth_grav(100*kg, make_system(params, Vector(100 * m, -25.1)).grav)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "i6TUycquqNd4" + }, + "outputs": [], + "source": [ + "def drag_force(rho, v, area, cd):\n", + " \n", + " #Direction\n", + " direction= -v.hat()\n", + " \n", + " #Drag Equation\n", + " drag = (1/2) * rho * v.mag**2 *area * cd\n", + " \n", + " #Drag as a Vector\n", + " return direction * drag" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 37 + }, + "colab_type": "code", + "id": "HzMqrMuYrW3c", + "outputId": "0589a094-c9bf-4f0c-8df6-ad0d4d1c9c27" + }, + "outputs": [ + { + "data": { + "text/html": [ + "\\[\\begin{pmatrix}-1200.0 & -1600.0\\end{pmatrix} kilogram meter/second2\\]" + ], + "text/latex": [ + "$\\begin{pmatrix}-1200.0 & -1600.0\\end{pmatrix}\\ \\frac{\\mathrm{kilogram} \\cdot \\mathrm{meter}}{\\mathrm{second}^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "drag_force(20 * kg / m ** 3, Vector(3 * m / s, 4), 10 * m ** 2, 0.8)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "G4ijoX3dyVLt" + }, + "outputs": [], + "source": [ + "def effective_force(state, system):\n", + " \"\"\"Calculates gravitational force for arbitrary objects\"\"\"\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " #Force of Gravity\n", + " grav_f = earth_grav(m_human, grav)\n", + " \n", + " #Force of Drag\n", + " drag_f = drag_force(rho, Vector(vx, vy), area, cd)\n", + " \n", + " #Net Force\n", + " net_force = grav_f + drag_f\n", + " \n", + " #Effective Force\n", + " effective_force = net_force.proj(z.hat())\n", + "\n", + " return effective_force" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "nm3g-_eMZ8vO" + }, + "source": [ + "# Simulation Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "0euiUJCfyVL0", + "outputId": "7efdec86-969d-449d-e205-c53fd24955c5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 meter / second 0.0 meter / second 2.3163759958833534 meter / second ** 2 -0.5814103749667217 meter / second ** 2\n" + ] + } + ], + "source": [ + "def slope_func(state, t, system):\n", + " x, y, vx, vy = state\n", + " \n", + " unpack(system)\n", + " \n", + " # make velocity\n", + " v = Vector(vx, vy)\n", + " \n", + " # calculate force\n", + " force = effective_force(state, system)\n", + " \n", + " # calculate acceleration\n", + " a = force * (1/m_human)\n", + " \n", + " # cast acceleration to modsimvector\n", + " a = Vector(a[0], a[1])\n", + " \n", + " # return velocity and acceleration\n", + " return vx, vy, a.x, a.y\n", + " \n", + "vx, vy, ax, ay = slope_func(init, 0, make_system(params, Vector(100 * m, -25.1)))\n", + "print(vx, vy, ax, ay)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "BDP2V-W97UdW" + }, + "outputs": [], + "source": [ + "def event_func(state, t, system):\n", + " x, y, vx, vy = state\n", + " position = Vector(x, y)\n", + " return position.mag - z.mag" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "oDu_ADwk7bMA", + "outputId": "e201367c-f392-4f5f-c474-f06e2bfcf00c" + }, + "outputs": [ + { + "data": { + "text/html": [ + "-103.10193984596022 meter" + ], + "text/latex": [ + "$-103.10193984596022\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "event_func(init, 0, make_system(params, Vector(100 * m, -25.1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "jD8-QDeAZ4HS" + }, + "source": [ + "# Simulation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "rDYLM5fGNgSL" + }, + "source": [ + "This simulation shows the zip-liner descending from the AC to West Hall from a particular starting height." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "0PSP5uH6yVL4", + "outputId": "5866e6e0-e4e5-4301-ad24-dd38c60cd0a8" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "results, details = run_ode_solver(make_system(params, Vector(100 * m, -25.1)), slope_func, events=event_func, method='LSODA')\n", + "plot(results.x, results.y - z.y.magnitude, 'go-')\n", + "decorate(title='Zip-lining from AC to West Hall',\n", + " xlabel='X Position (m)',\n", + " ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "k0eV_kerNmdD" + }, + "source": [ + "This plot shows the position over time. Each point along the line is a different moment in time." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "X6_Zo2pfH35S", + "outputId": "6429f567-646c-4a8f-c391-bf4a0ab301b6" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(results.y, label='Y position (m)')\n", + "plot(results.x, label='X position (m)')\n", + "decorate(title='Position over Time',\n", + " xlabel='Time (s)',\n", + " ylabel='Position (m)',\n", + " legend=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xdiiE8DdNykd" + }, + "source": [ + "These lines represent the change in X and Y position over time." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "ZBi2VbR7yVL_", + "outputId": "d9213b34-f445-4026-af41-ac4e17a45781" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "15.73897673293782 meter / second\n" + ] + } + ], + "source": [ + "v_final = Vector(get_last_value(results.vx) * m / s, get_last_value(results.vy))\n", + "print(v_final.mag)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "fhuHLvXeN3Ui" + }, + "source": [ + "The cell above shows how we obtain the arrival velocity." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xpLPAE7GaJaJ" + }, + "source": [ + "# Sweeping Start Height" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 51 + }, + "colab_type": "code", + "id": "AwVA_CYZ-O_u", + "outputId": "153618b3-81e5-4ed6-9d0f-b81619f446ec" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.7 4.03333333 7.36666667 10.7 14.03333333 17.36666667\n", + " 20.7 24.03333333 27.36666667 30.7 ]\n" + ] + } + ], + "source": [ + "thresholds = linspace(60, 90, 10)\n", + "for i,e in enumerate(thresholds):\n", + " thresholds[i] -= params.WH_window_abs_height\n", + "print(thresholds)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 433 + }, + "colab_type": "code", + "id": "wNRcyudo-PDq", + "outputId": "aa7fccaf-f11c-44eb-f4b9-1fd582063a97" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "for y in thresholds:\n", + " system = make_system(params, Vector(100 * m, -y))\n", + " results, details = run_ode_solver(system, slope_func, events=event_func, method='LSODA')\n", + " plot(results.x, results.y - z.y.magnitude + params.WH_window_abs_height, 'ro-')\n", + " decorate(title='Zip-lining from AC to West Hall (Different Starting Points)',\n", + " xlabel='X Position (m)',\n", + " ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "a1bqJOaBN8N_" + }, + "source": [ + "The plot above shows the process of zip-lining from various starting heights. We obtained the range of height differences using Olin College's blueprints, by comparing the absolute heights of the top of the AC, bottom of the AC, and our destination room in West Hall." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "XY1QeMhNcMZJ" + }, + "source": [ + "# Finding End Velocities" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 68 + }, + "colab_type": "code", + "id": "OMuzJ7xhcRgU", + "outputId": "3e76df37-0f94-4d0b-b26e-257de35e008e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[60. 62.14285714 64.28571429 66.42857143 68.57142857 70.71428571\n", + " 72.85714286 75. 77.14285714 79.28571429 81.42857143 83.57142857\n", + " 85.71428571 87.85714286 90. ]\n" + ] + } + ], + "source": [ + "thresholds = linspace(60, 90, 15)\n", + "print(thresholds)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "u2CGRQsuA6_w" + }, + "outputs": [], + "source": [ + "def landing_speed(startHeight, params):\n", + " height_y = startHeight - params.WH_window_abs_height\n", + " system = make_system(params, Vector(100 * m, -height_y))\n", + " results, details = run_ode_solver(system, slope_func, events=event_func, method='LSODA')\n", + " v_final = Vector(get_last_value(results.vx) * m / s, get_last_value(results.vy))\n", + " return v_final.mag" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "cFUzfSBtB7o1", + "outputId": "7b051141-0950-4f70-f700-70a8d271d129" + }, + "outputs": [ + { + "data": { + "text/html": [ + "2.651921049001805 meter/second" + ], + "text/latex": [ + "$2.651921049001805\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "landing_speed(60, params)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "tQNjLw1qcRgh", + "outputId": "91e502a8-ae13-4fea-bf7d-f20396b909a2" + }, + "outputs": [ + { + "data": { + "image/png": "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\nDGAuGdWoUYOAgADsdjvTp0/nmWeeITAwEB8fH3r37k1QUFD6TMr58+cpUqQIBQoUoFixYrz//vuM\nHj36pr6XNm3aZFirNXXq1PTzhQoVIjo6mv79++Pl5UWFChVo3rx5+gyiiKdTeBFxIykpiX/+8590\n7949/XLK9Vz9QWqz2fD393e5fHMzAgMDXY4LFy6c5aLPggULUqFChUyfe/LkSSpXrpx+zsvLi3r1\n6t1ULT4+Pi6vf/jwYWrUqOHynKpVq3Lo0KH043LlyuHt7Q2YD0wgyxozM3XqVNq1a0eJEiUA6Nq1\nKydOnMiwpiQ1NfWmvpfM3Mj3c7VChQrRrFkzli9fDsDKlSu57777AAgNDU2vccWKFemzLqdOneLC\nhQu8/PLLLsFi9+7dHDt2DDAzL59//jnh4eG8/fbb1110nJXo6OgM67X69Onj8pxff/2Vhx56iIYN\nG1KvXj1mzJhBUlLSTb+XiBUUXkTceO+997Db7bz22ms39PxrP0gdDgc2m43Y2FiXD6zY2Fi3r5X2\nwX8jrvdcu92Oj4+Py5iX183987/272f1QWez2a77Hlefv57Tp0/z66+/smTJEoKDgwkODqZ9+/ak\npKTwww8/AFCmTBlKlCjB3r17b/TbyNKNfD/XatOmDStXriQhIYH169cTGhoKmPCyYsUKLl68yObN\nm9PDS1qAGzt2rEuw2Lp1K//73/8AePjhh4mOjub555/n9OnTPPXUU4waNeq2v7+rrVmzhldffZUB\nAwYQExPDli1b6N279x19D5HspPAich0LFy5k1qxZjB49+obvFDl8+HD6Y4fDwdGjR6lUqRIhISEu\nH1ghISHZVXYGZcqUcVl343A4MtzOe7OqVKnC7t27Xcb27NlDtWrVbut108yYMYOSJUsyd+5cZs+e\nnf713nvvsWTJEk6dOoXNZiM8PJxJkyaRkJCQ4TU++uij9FDgzq18P23btuX48ePMmjWLcuXKpc+6\nNWvWjMOHDzNv3jwKFy5M48aNAShevDilS5dm586dLq9z5MgRl0thfn5+PPjgg3z44YcMGzaMyZMn\n39D3cKM2b95MpUqV6NWrV/rv9a32KhKxgsKLSBaOHj3K0KFDef3117n77rtv+O+tWLGCdevWkZSU\nxOTJkzl37hwdOnTIxkrda968OWvXriUmJoakpCQ+//xzLl68eFuv2bNnTxYuXMiqVatISUlh1apV\n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\nuFMnqFzZunpEREQkU2oVCxAbCyNGmFmXIkWgXj3o2tXqqkRERCQTmnmJjYX/+z/Yvdusebl0yXz9\n/rvVlYmIiEgmFF7mz4dTp5zHFSqYu4uioqyrSURERLKk8BIXB+XKmc0W/fygenUzfuyYtXWJiIhI\nprTmpVIlsNuhRQtznL/pC64AAA87SURBVNaMzt/fuppEREQkS5p56dLF/GmzuXbRDQ+3ph4RERG5\nLs28hISYP6OizKUif38TXNLGRURExKMovIAJKgorIiIiuYIuG4mIiEiuovAiIiIiuYrCi4iIiOQq\nloeXxYsX8+CDD9KlSxcee+wxdu/ebXVJIiIi4sEsDS/Hjx/nlVdeITIykvnz59O1a1feeOMNK0sS\nERERD2dpeClQoACRkZHUqFEDgMaNG7N3714rSxIREREPZ2l4KVOmDK1bt04/XrZsGQ0aNLCwIhER\nEfF0HtPnZfXq1UycOJGJEydaXYqIiIh4MI8IL4sWLeLtt9/miy++SL+ElJnU1FQA/vzzz5wqTURE\nRHJY2ud82uf+tSwPL6tWreKdd95h/Pjx3H333dd97smTJwHo27dvTpQmIiIiFjp58iRVq1bNMG5z\nOBwOC+oB4MqVK4SHh/Ppp59St25dt89PSEhg69atlCtXDm9v7xyoUERERHJaamoqJ0+epG7duhQq\nVCjDeUvDy9y5c3n11VcJCAhwGf/uu+8oW7asRVWJiIiIJ7M0vIiIiIjcLMs77IqIiIjcDIUXERER\nyVUUXkRERCRXsfxWaauk7at08OBBihYtyhtvvEFISAjffPMN06ZNw26306RJE4YNG4avr6/V5XqE\nzH5mhw8f5p133qFcuXLpz+vXrx/9+vWzsFLPEBUVxejRo13G/vjjD9avX88XX3zBr7/+is1mo1On\nTvzrX/+yqErPktXP7IknnmDWrFmUKlUqffxf//oXnTp1yukSPdKMGTMYN24cDoeDihUr8sYbb1Ct\nWjUiIyP1e5aFzH5mc+fO5bvvvtPvWRZmz57N119/zaVLlwgJCeGdd97Bx8fHmt8zRz41cOBAx/jx\n4x0Oh8OxevVqx4svvujYuHGjo127do5z58457Ha7429/+5tj7NixFlfqOTL7mc2YMcPx3//+1+LK\ncod58+Y5hgwZ4pg7d66jd+/ejsTEREdiYqLjkUceccyfP9/q8jxS2s/s448/dnz88cdWl+OR9u7d\n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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "landing = SweepSeries()\n", + "\n", + "for y in thresholds:\n", + " landing[y] = landing_speed(y, params)\n", + " \n", + "plot(landing, 'ro-') \n", + "decorate(title='Zip-lining from AC to West Hall',\n", + " xlabel='Starting Height (m)',\n", + " ylabel='Landing speed(m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "OPeHT5CwPHOf" + }, + "source": [ + "This plot shows the landing speed depending on starting height. By looking at this plot, we can choose a particular start height depending on our desired landing speed." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 514 + }, + "colab_type": "code", + "id": "5fS8qu0LgBXq", + "outputId": "7f863616-751e-4c22-d595-f471c4ed6f5f" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
60.0000002.651921049001805 meter / second
62.1428575.343746587591299 meter / second
64.2857147.074894599711499 meter / second
66.4285718.456477911463677 meter / second
68.5714299.63932336233028 meter / second
70.71428610.688617419758609 meter / second
72.85714311.63984596447041 meter / second
75.00000012.514808133787712 meter / second
77.14285713.327981059112659 meter / second
79.28571414.08954798936296 meter / second
81.42857114.806934586049014 meter / second
83.57142915.48581549457082 meter / second
85.71428616.130651554946795 meter / second
87.85714316.745008583241006 meter / second
90.00000017.33179174000917 meter / second
\n", + "
" + ], + "text/plain": [ + "60.000000 2.651921049001805 meter / second\n", + "62.142857 5.343746587591299 meter / second\n", + "64.285714 7.074894599711499 meter / second\n", + "66.428571 8.456477911463677 meter / second\n", + "68.571429 9.63932336233028 meter / second\n", + "70.714286 10.688617419758609 meter / second\n", + "72.857143 11.63984596447041 meter / second\n", + "75.000000 12.514808133787712 meter / second\n", + "77.142857 13.327981059112659 meter / second\n", + "79.285714 14.08954798936296 meter / second\n", + "81.428571 14.806934586049014 meter / second\n", + "83.571429 15.48581549457082 meter / second\n", + "85.714286 16.130651554946795 meter / second\n", + "87.857143 16.745008583241006 meter / second\n", + "90.000000 17.33179174000917 meter / second\n", + "dtype: object" + ] + }, + "execution_count": 23, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "landing" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "PRVw6E_ONKLf" + }, + "source": [ + "# Ideal Starting Height" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "hY-xqOuhPJ3R" + }, + "source": [ + "We wanted to calculate our ideal starting height. We wrote an error function that approaches zero as the ideal starting height is approached. The maximum landing speed is determined based on the maximum safe landing speed of a hang-glider, which exerts analagous forces on a human." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "yDxFQFHqn-JD" + }, + "outputs": [], + "source": [ + "def error_func(startHeight, params):\n", + " return params.max_landing_speed - landing_speed(startHeight, params)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "eJJGSINuNRN2", + "outputId": "415eb4ea-70c1-4ce0-b112-2dd12b752c7d" + }, + "outputs": [ + { + "data": { + "text/html": [ + "9.348078950998195 meter/second" + ], + "text/latex": [ + "$9.348078950998195\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(60, params)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "GP0lsZVsNRSR", + "outputId": "88c4fb91-51ab-4896-ffb1-9f73f57f7f58" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[73.71902744]\n" + ] + } + ], + "source": [ + "res = fsolve(error_func, 75, params)\n", + "print(res)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "UP4b0x9BNRWJ", + "outputId": "6d7a010f-1e46-491f-cf27-aa8291d48b60" + }, + "outputs": [ + { + "data": { + "text/html": [ + "2.1085355683680973e-12 meter/second" + ], + "text/latex": [ + "$2.1085355683680973e-12\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "error_func(fsolve(error_func, 75, params)[0], params)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "OI6SN2NZNRaZ", + "outputId": "6e715769-f1f2-4a7f-fdf5-97f4949aa711" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAF7CAYAAAAaI2s4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xl4jXf+//HnSYjYUhVLkaBFo/Yl\nsXVKLZVECarR2qalrZoyHZ3226aorZ1iWkMwP61iWoNaopSSWIIoUmJpSYiltYt9CxJBzu+Pe07i\nkEiEc05OzutxXa72fM5J7nfSM857PsvrNpnNZjMiIiIiTsLN0QWIiIiIPAg1LyIiIuJU1LyIiIiI\nU1HzIiIiIk5FzYuIiIg4FTUvIiIi4lTUvIg8hBMnTlC3bl0SEhLy9PXHjx/Hz8+P3bt3AxAYGMi3\n336bq68dNmwYgwYNytN1c2PcuHE0atSIkSNH2uwakj/d/b5s06YNM2bMcHBVIpnUvIjcR926de/5\nU6tWLWrWrAlApUqV2L17N7Vr134k11u5ciWvv/56rl772WefMWXKlEdy3btduXKF//znP4wcOTJf\nNC8ffPABfn5+xMTEZPn8hQsX+Pzzz2nXrh316tWjefPmvP3222zbti3b75mens60adPyVM+BAwfw\n8/Nj+/btVuNLly7Fz8+P+Ph4q/GFCxfSoEEDbty4kafrWeRU85YtW/Dz8+PChQv3PDd69Gj69Onz\nUNcXyS/UvIjcx+7du63+xMbG4uPjw1tvveXo0mwqOTkZs9nMk08+6ehSuHjxIqtWraJjx47Mnz//\nnufPnTvHyy+/zLFjx/j666/57bffWLp0KbVr1+b1119nzZo1WX7fPXv2MHXq1DzVVKNGDSpVqsTG\njRutxjdu3EixYsXYtGnTPeNNmzalSJEiebqexcPULFKQqHkReQAjR46kdOnS/O1vfwOynl6fNm0a\n77zzDg0aNOC5555j+fLluf7+d07Ph4WFMWzYMCZNmsSzzz6Lv78/H3/8Menp6RnPv/322wD88MMP\nBAYGsmrVKgIDA2nQoAF9+vTh9OnTGd972rRpNG3alICAAMaNG8fo0aMzvv5OiYmJBAYGAtCjRw+G\nDRvGDz/8QJs2bfh//+//0bBhQ3bu3AnA4sWL6dSpE/Xr16d169Z8/fXXWEK7J0+ezGuvvcaMGTNo\n3rw5AQEBzJgxgx07dtCpUycaNGjAW2+9xbVr1+77O1myZAk1a9bk7bffJiYmhjNnzlg9P378eDw8\nPJg8eTLVqlXDZDJRtmxZ3n33XQYPHszly5fv+Z5xcXG88sorXL9+nbp16/LTTz8BEBMTw0svvUTD\nhg3505/+xNixY7l582aWdbVq1cqqeTGbzWzevJlu3bpZjaenp/PLL7/QqlUrANLS0hg3bhxt27al\nfv36dO7cmQ0bNmS8fteuXfTo0YPGjRsTEBBA//79SUpKyrbmvNqyZQvdu3encePGtGjRgo8//pjr\n168/1PcUsRc1LyK5tGjRImJiYhg/fjyFChXK9nWzZs2iT58+bN26lQEDBvDBBx9w/PjxPF0zOjoa\nLy8v1q1bx1dffcXixYtZt25dlq89c+YM69atIyIigpUrV3LixAlmzpwJwOrVq5k4cSL//Oc/M2YH\nsmuqatasSVRUFADff/89n332GQCXLl3i0qVLbNmyhQYNGrBhwwZGjBjBhx9+yPbt2/nnP//J119/\nzY8//pjxvfbu3cvt27eJiYnhzTffZMKECfznP//hu+++48cff2Tr1q0sW7bsvr+D+fPn07lzZ55+\n+mn8/PxYtGhRxnPp6emsWrWKPn36ZPnf5M0336Rbt273jAcEBPDpp59SrFgxdu/eTceOHTl48CAD\nBgzgz3/+M1u3bmX69OlERkby9ddfZ1nX888/T3x8PJcuXQJg3759pKSk8Nprr7Fz586Mpmz37t1c\nunQpo3mZMGECsbGxfPvtt2zbto3evXszcODAjEbz//7v/2jatClbtmxh3bp1lCpVinHjxmVZc16l\npqbyzjvvEBQURFxcHIsXL2bbtm15XkYTsTc1LyK58Pvvv/PZZ5/x2WefUalSpfu+9tlnn6V58+Z4\neHjQs2dPSpcuzdq1a/N0XS8vL15//XU8PDzw9/enUqVK/P7771m+9vr16wwePJiSJUtSvnx5mjZt\nmvHamJgYGjduTKtWrShSpAgDBw6kRIkSD1TLtWvXeOONN/Dw8MBkMjF//nzat2/Pc889R6FChQgI\nCCAwMNCqKTKbzRlf07ZtW27evElISAilS5emSpUq1KhRgyNHjmR7zS1btnDixImMD+quXbuycOHC\njNmdCxcucPXq1UeyvLVgwQIaNGhAly5dKFy4MDVr1iQ0NJQVK1Zk+fqmTZvi4eHB5s2bAfj5559p\n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\niILyD2WpScYvAz6kAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "system = make_system(params, Vector(100 * m, -(fsolve(error_func, 75, params)[0] - params.WH_window_abs_height)))\n", + "results, details = run_ode_solver(system, slope_func, events=event_func, method='LSODA')\n", + "plot(results.x, results.y - z.y.magnitude + params.WH_window_abs_height, 'ro-')\n", + "decorate(title='Zip-lining from AC to West Hall',\n", + "xlabel='X Position (m)',\n", + "ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "9vHLDDcAZsn8", + "outputId": "ea5eff68-d786-4a0a-a672-7f11e66d8e46" + }, + "outputs": [ + { + "data": { + "image/png": "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\nd9wugJAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(results.y - z.y.magnitude + params.WH_window_abs_height, 'ro-')\n", + "decorate(title='Zip-lining from AC to West Hall',\n", + "xlabel='Time (s)',\n", + "ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "bLpoVmBFQJMi" + }, + "source": [ + "This plot represents the ideal descent of a zip-liner from the AC to West Hall." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "4HL9TIJvNRfW", + "outputId": "2432dd16-50b9-41bd-9719-a183122189ce" + }, + "outputs": [ + { + "data": { + "text/html": [ + "11.999999999997891 dimensionless" + ], + "text/latex": [ + "$11.999999999997891\\ dimensionless$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "Vector(get_last_value(results.vx), get_last_value(results.vy)).mag" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "0B2Zop5AQPyA" + }, + "source": [ + "The zip-liner arrives incredibly close to, but slightly below, the maximum safe velocity." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xiQqkLs5Q8Z_" + }, + "source": [ + "# Conclusions\n", + "In this model, we find that the ideal starting height to arrive as quickly as possible (but at a safe speed) when zip-lining to West Hall would be around the third floor (about 15m above the first floor of the AC). The zip-liner would arrive safely at a speed slightly below 12 m/s. Before attempting this, we would want to conduct more precise modeling and account for the forces we've abstracted out of our model, like the tension in the rope and the changing normal force of the rope against the zip-liner through the handle." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Ev0RyH1wFUpa" + }, + "source": [ + "# Future Steps: Questioning Assumptions. Straight Zipline?" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "5GpjMG6tQaL7" + }, + "source": [ + "We didn't have time to finish this modeling work, but with more work we might be able to simulate a more accurate zip-line curvature. To simplify our modeling, we assumed the line would be under infinite tension (in other words, perfectly straight) and the wheel would roll perfectly. For the wheel to behave efficiently, it's more likely that the line would have to maintain some slack. To get a more accurate estimate, we would continue this modeling work." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "h5o7UqC93VAD" + }, + "outputs": [], + "source": [ + "def calc_parabola_vertex(x1, y1, x2, y2, x3, y3):\n", + "\t\t'''\n", + "\t\tAdapted and modifed to get the unknowns for defining a parabola:\n", + "\t\thttp://stackoverflow.com/questions/717762/how-to-calculate-the-vertex-of-a-parabola-given-three-points\n", + " With thanks to http://chris35wills.github.io/parabola_python/\n", + "\t\t'''\n", + "\n", + "\t\td = (x1-x2) * (x1-x3) * (x2-x3);\n", + "\t\tA = (x3 * (y2-y1) + x2 * (y1-y3) + x1 * (y3-y2)) / d;\n", + "\t\tB = (x3*x3 * (y1-y2) + x2*x2 * (y3-y1) + x1*x1 * (y2-y3)) / d;\n", + "\t\tC = (x2 * x3 * (x2-x3) * y1+x3 * x1 * (x3-x1) * y2+x1 * x2 * (x1-x2) * y3) / d;\n", + "\n", + "\t\treturn A,B,C\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "GzXHaLqXyYZU" + }, + "outputs": [], + "source": [ + "range = linrange(60, 90, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "2AO8of_t36_u", + "outputId": "34572636-381d-4c8f-ab4d-3d074fb364a8" + }, + "outputs": [ + { + "data": { + "image/png": "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\nhx9iw4YNOHfuHERRhMlk8np+DtFYwW0jojHiRz/6EX76058iLS0NkyZNwq9+9Svs2rULW7ZsgV6v\n7/Wexx57DI8//jjmzZuHmTNn4te//jW0Wi3+93//F1qtFgCwePFiVFVVISMjAwqFArfeeqtUV+b2\n229Hc3MzHnjgAZhMJiQlJeGVV14ZMJlWpVLhH//4Bx555BGkp6cjLCwMt912G7761a9+6bNZWVko\nLy/Hq6++2usR5HvuuQf33nvvl66vW7cOWVlZ+MlPfgKlUolHHnmkx1Ftb0lLS8MvfvELvPTSS3jk\nkUcQHh6Or3/96/j2t7/d5z0///nPMWXKFGzduhVPPfUU5HI5kpKS8MMf/hA33ngjAMBoNOKnP/0p\nXn75Zbz00ktYsmQJ7rrrrn6PYQOe7+2qVauwfft2PPjggz3+7rnnnsOvfvUrrF27FjKZDNOmTcOr\nr74KtVqN9evXo7i4GPfccw9MJhOCgoKwfPly3HfffSP/JhGNMYLY/X0yEdEYcOutt2LSpEl47LHH\nRnspRDQGcduIiIiIxhUGL0RERDSucNuIiIiIxhW+eSEiIqJxZVydNmpvb8cXX3whlUInIiKiK4/L\n5UJdXR2mTZsm1UzqblwFL1988QX7dBAREV0l3nzzzV6boI6r4CU8PByA54vprBBKREREV5bq6mrc\ncsst0u/9y42r4KVzqygqKqpHMzMiIiK68vSVIsKEXSIiIhpXGLwQERHRuMLghYiIiMYVBi9EREQ0\nrjB4ISIionGFwQsRERGNKwxeiIiIaFzxS52XHTt24LXXXoMoioiKisJjjz2GDz74AG+88QZCQkKk\nzz300ENYtWqVP5ZERERE45TPg5eioiI8++yzeO+99xAZGYl///vfePTRR7Fw4UJs3rwZ9913n6+X\nQERERFcQn28bFRUVITExEZGRkQCA9PR0FBYW+vqxQyKKImotNrTYnaO9FCIiIhqAz4OXmTNnorS0\nFAUFBRBFEZ988gkWLlwIADh06BA2bdqE1atX4+mnn4bdbvf1cnp1vqEVH1+swX8vVKHBOjprICIi\nosHx+bZRZGQkHnzwQWzcuBF6vR5arRZvvPEGCgsLodfrsXnzZrS1teHee+/FK6+8gh/84Ae+XtKX\nWDreuDhcIo5VmbEqKQKCIPh9HURERDQwn795yc/Px5YtW7B7927k5ubioYcewj333IPMzEzceeed\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "for i in range:\n", + " xNum = linrange(0, 100)\n", + " x1,y1=[0,i]\n", + " x3,y3=[100,59.3]\n", + "\n", + " x2,y2=[50,y3-(y1-y3)/(2*pi)]\n", + " \n", + " #Calculate the unknowns of the equation y=ax^2+bx+c\n", + " a,b,c=calc_parabola_vertex(x1, y1, x2, y2, x3, y3)\n", + "\n", + " zline = SweepSeries()\n", + " dz = SweepSeries()\n", + "\n", + " for x in xNum:\n", + " zline[x] = a * x ** 2 + b * x + c\n", + " dz[x] = 2 * a * x + b\n", + "\n", + " plot(xNum, zline) \n", + "decorate(title='Parabolic Zip-line Curves',\n", + " xlabel='X (m)',\n", + " ylabel='Y (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "fatXPJpQ2bOY", + "outputId": "8b1aba4e-b97c-479e-ba4e-123202c47f69" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAF7CAYAAAAaI2s4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xl0W+WdP/73vVfS1b7Z8ibLsRNC\nNrZAgtPSoQ3llEK+UKbMdE5PoS2FtjPMdAp0mcK0wAClFGi60GXoQEvpmWmnLS1D0x7W0kD5kUCA\npARngRDHsuRdu3R1dZfn94dkWVeS7dhxvCSf1zkc8NW9V4+d4PvW83ye5+EYYwyEEEIIIUsEv9AN\nIIQQQgiZCQovhBBCCFlSKLwQQgghZEmh8EIIIYSQJYXCCyGEEEKWFAovhBBCCFlSKLwQssR95Stf\nwWc/+9k5uf6xxx5Dd3f3XDWtxumnn46nn3561tevWrUKTzzxBADgU5/6FO666665atq8eeWVV3D6\n6acjHo/P+b2/+tWv4l/+5V/m/L6ELDamhW4AISeKCy64AENDQ+D54mcCk8mEjo4OfOITn8CHP/zh\nBW7d0bn88stx+eWXz+raiy66CNFo1HBM13WoqornnnsObW1teOONN+aimQCAn/zkJ3N2r2q//e1v\ncdNNN8FisQAABEHAsmXLcOGFF+Lqq6+G0+mc9b03btw4Zz+H/v5+vP7667j00ksBAHfeeeec3JeQ\nxY7CCyFz6MYbb8Q111wDACgUCnj++edxww03wGaz4eKLL17g1h1fTz75pOFrTdNw5ZVXorW1FW1t\nbQvUqtmz2+14/fXXAQCpVAr79u3D9773PWzbtg2/+MUv4Pf7F7iFwFNPPYWdO3eWwwshJwsaNiLk\nOLFYLLjwwgtx4YUXloc6GGO4//77ccEFF2D9+vW46KKL8Lvf/a58zf3334+rrroKt9xyC8466ywM\nDQ2hUCjgjjvuwPnnn4/169fjsssuw/bt22ve79vf/ja6u7vx7ne/G9/85jehaRqAYu/Hgw8+iIsu\nughnnHEGLrroIvz617+u2+bf/va3WL9+ffnrAwcO4KqrrsL69evxvve9Dw888MBRf//f+973MDo6\nittvv718rHLY56qrrsLdd9+Nm266CWeffTa6u7vx8MMPH/X9r7rqqvK977//fnzqU5/CL37xC2ze\nvBnr16/Hddddh0wmUz7/N7/5DS699FKcddZZuOCCC/DQQw8d9Xu53W50d3fjpz/9KURRxLe+9a3y\na4cOHcK1116L7u5unHPOOfj85z+PsbExAMWekVWrVuGXv/wl3v3ud+PHP/4xdu7ciVWrViEWi+Ej\nH/kI7r77bsN7PfbYY9i4cSMKhQJSqRS++MUv4rzzzsP69evxD//wD9izZw8A4Ic//CHuvfdePP/8\n8zj99NMxNDRUHgI8dOgQVq1ahQMHDhju/fGPfxy33XbbtO0Gij1b73//+3HmmWfive99L773ve+B\nFmQniwWFF0KOM03TYDIVOzm3bduGn/3sZ3jooYfw2muv4frrr8fNN9+Mw4cPl88/ePAg2tvbsWvX\nLjQ1NeEnP/kJtm/fjkcffRS7du3C5Zdfjuuvvx7pdLp8zSuvvAKHw4Hnn38e3//+9/HLX/6yHFD+\n93//Fw899BDuvfdevPbaa/jCF76AW2+9Fa+88sqU7ZYkCZ/+9KexceNGvPTSS/jP//xPPPjgg9i2\nbdu03/NLL72En/70p9i6deuUQyyPPvoo3vOe92Dnzp34+te/jm9+85vTtmsyPT096Ovrwx//+Ec8\n+uijeOmll/Db3/4WAPDnP/8Zd911F2655Ra8+uqr2Lp1Kx544IGa3qLpWCwWXHnllXjiiSegaRpk\nWcY111yD1atXY/v27Xj66achyzL+/d//3XDds88+iz/84Q/49Kc/bTi+ZcuWmhqgJ554AhdddBEs\nFgvuvfde9Pf344knnsDOnTtx+umn41//9V8BANdddx0+9KEP4fzzz8cbb7yB5ubm8j1WrFiBNWvW\nGO49NjaGXbt24dJLL5223a+99hq+/e1v4wc/+AH27NmDBx98EI8++mjd0EzIQqDwQshxIssynn76\nafzpT38qd+tfcskleO6559DV1QWO4/DBD34QgiCgp6enfF2hUMAnP/lJmEwmcByHa6+9Fo899hgC\ngQAEQcCWLVuQy+Vw6NCh8jUulwvXXnstRFHE2Wefjc2bN+PPf/4zgGJ4+chHPoIzzjgDJpMJH/jA\nB7Bhwwb84Q9/mLL9f/nLX5BKpfCP//iPsFqtWL16Ne6//36sWLFiyutisRi+9KUv4frrr8fpp58+\n5bmrVq3Cli1bYDabceGFF2LdunV45plnprxmMrIsl4foli9fjtNPP738M/rlL3+Jyy67DBs3boQg\n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\nEC8AAMCUNwWWMbwoIQYjAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "for i in range:\n", + " xNum = linrange(0, 100)\n", + " x1,y1=[0,i]\n", + " x3,y3=[100,59.3]\n", + "\n", + " x2,y2=[50,y3-(y1-y3)/(2*pi)]\n", + " \n", + " #Calculate the unknowns of the equation y=ax^2+bx+c\n", + " a,b,c=calc_parabola_vertex(x1, y1, x2, y2, x3, y3)\n", + "\n", + " zline = SweepSeries()\n", + " dz = SweepSeries()\n", + "\n", + " for x in xNum:\n", + " zline[x] = a * x ** 2 + b * x + c\n", + " dz[x] = 2 * a * x + b\n", + "\n", + " plot(xNum, dz) \n", + "decorate(title='Parabolic Zip-line Derivatives',\n", + " xlabel='X (m)',\n", + " ylabel='Y (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2hlNbgn31u1i" + }, + "outputs": [], + "source": [ + "def effective_parabolic_force(state, system):\n", + " \"\"\"Calculates gravitational force for arbitrary objects\"\"\"\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " #Force of Gravity\n", + " grav_f = earth_grav(m_human, grav)\n", + " \n", + " #Force of Drag\n", + " drag_f = drag_force(rho, Vector(vx, vy), area, cd)\n", + " \n", + " #Net Force\n", + " net_force = grav_f + drag_f\n", + " \n", + " # Find parabola\n", + " x1,y1=[0,z[0].magnitude] # AC startpoint\n", + " x3,y3=[100,WH_window_abs_height] # WH endpoint\n", + "\n", + " x2,y2=[50,y3-(y1-y3)/(2*pi)] # midpoint\n", + " \n", + " #Calculate the unknowns\n", + " a,b,c=calc_parabola_vertex(x1, y1, x2, y2, x3, y3)\n", + " \n", + " # Find the tangent vector\n", + " tangent_vector = Vector(1, 2 * a * x + b)\n", + " print(tangent_vector)\n", + " \n", + " #Effective Force\n", + " effective_force = net_force.proj(tangent_vector.hat())\n", + "\n", + " return effective_force" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "ty5grWUi2CLF" + }, + "outputs": [], + "source": [ + "def slope_func_parabolic(state, t, system):\n", + " x, y, vx, vy = state\n", + " \n", + " unpack(system)\n", + " \n", + " # make velocity\n", + " v = Vector(vx, vy)\n", + " \n", + " # calculate force\n", + " force = effective_parabolic_force(state, system)\n", + " \n", + " # calculate acceleration\n", + " a = force * (1/m_human)\n", + " \n", + " # cast acceleration to modsimvector\n", + " a = Vector(a[0], a[1])\n", + " \n", + " # return velocity and acceleration\n", + " return vx, vy, a.x, a.y" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0iQT8xHV_pG5" + }, + "outputs": [], + "source": [ + "def event_func_parabolic(state, t, system):\n", + " x, y, vx, vy = state\n", + " position = Vector(x, y)\n", + " return position.mag - z.mag" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1535 + }, + "colab_type": "code", + "id": "Q_pFqEkUx7o9", + "outputId": "b6396a09-e38d-42bf-da23-f66397bbd1ac" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1. -1.48010425] dimensionless\n", + "[ 1. -1.48010425] dimensionless\n", + "[ 1. -1.48010425] dimensionless\n", + "[ 1. -1.48010425] dimensionless\n", + "[ 1. -1.48010425] dimensionless\n", + "[ 1. -1.48009196] dimensionless\n", + "[ 1. -1.48009196] dimensionless\n", + "[ 1. -1.48005512] dimensionless\n", + "[ 1. -1.48005512] dimensionless\n", + "[ 1. -1.47999374] dimensionless\n", + "[ 1. -1.47999374] dimensionless\n", + "[ 1. -1.47994324] dimensionless\n", + "[ 1. -1.47994324] dimensionless\n", + "[ 1. -1.47988327] dimensionless\n", + "[ 1. -1.47988327] dimensionless\n", + "[ 1. -1.47981382] dimensionless\n", + "[ 1. -1.47981382] dimensionless\n", + "[ 1. -1.47961671] dimensionless\n", + "[ 1. -1.47961672] dimensionless\n", + "[ 1. -1.47936885] dimensionless\n", + "[ 1. -1.47936885] dimensionless\n", + "[ 1. -1.47907025] dimensionless\n", + "[ 1. -1.47907025] dimensionless\n", + "[ 1. -1.47839559] dimensionless\n", + "[ 1. -1.47839563] dimensionless\n", + "[ 1. -1.47755259] dimensionless\n", + "[ 1. -1.47755265] dimensionless\n", + "[ 1. -1.47654139] dimensionless\n", + "[ 1. -1.47654146] dimensionless\n", + "[ 1. -1.47420988] dimensionless\n", + "[ 1. -1.47421032] dimensionless\n", + "[ 1. -1.47129704] dimensionless\n", + "[ 1. -1.47129773] dimensionless\n", + "[ 1. -1.46780456] dimensionless\n", + "[ 1. -1.46780542] dimensionless\n", + "[ 1. -1.45969223] dimensionless\n", + "[ 1. -1.45969747] dimensionless\n", + "[ 1. -1.44956597] dimensionless\n", + "[ 1. -1.44957438] dimensionless\n", + "[ 1. -1.43744636] dimensionless\n", + "[ 1. -1.4374568] dimensionless\n", + "[ 1. -1.41010184] dimensionless\n", + "[ 1. -1.41012485] dimensionless\n", + "[ 1. -1.37635458] dimensionless\n", + "[ 1. -1.37635986] dimensionless\n", + "[ 1. -1.33635607] dimensionless\n", + "[ 1. -1.33637233] dimensionless\n", + "[ 1. -1.29041791] dimensionless\n", + "[ 1. -1.29043259] dimensionless\n", + "[ 1. -1.22404196] dimensionless\n", + "[ 1. -1.22406891] dimensionless\n", + "[ 1. -1.14923573] dimensionless\n", + "[ 1. -1.14926861] dimensionless\n", + "[ 1. -1.06674115] dimensionless\n", + "[ 1. -1.06677028] dimensionless\n", + "[ 1. -0.977353] dimensionless\n", + "[ 1. -0.97738114] dimensionless\n", + "[ 1. -0.80995055] dimensionless\n", + "[ 1. -0.81009713] dimensionless\n", + "[ 1. -0.62979874] dimensionless\n", + "[ 1. -0.63009574] dimensionless\n", + "[ 1. -0.44292993] dimensionless\n", + "[ 1. -0.4432954] dimensionless\n", + "[ 1. -0.25607017] dimensionless\n", + "[ 1. -0.25646415] dimensionless\n", + "[ 1. -0.00772528] dimensionless\n", + "[ 1. -0.00835732] dimensionless\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "results, details = run_ode_solver(make_system(params, Vector(100 * m, -25.1)), slope_func_parabolic, events=event_func_parabolic, method='LSODA')\n", + "plot(results.x, results.y - z.y.magnitude, 'go-')\n", + "decorate(title='Zip-lining from AC to West Hall',\n", + " xlabel='X Position (m)',\n", + " ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 396 + }, + "colab_type": "code", + "id": "p6KBhqwpx7pD", + "outputId": "1735d871-33f4-40e1-e0e4-316d7286c617" + }, + "outputs": [ + { + "data": { + "image/png": "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\nri4KCgo4efLkpz5n165dPPTQQ4yNjV3zPCJydeg+LyJyzWzatInAwEB++tOfGvL9v/GNb7By5Uqe\neuqpz3zepk2biIqK0nBMER+hMy8icl21traSlZWF0+n0/Pebb77J1772NVasWMGLL77Izp07eeCB\nB7j55pt54YUX8ikJ7gAAAtpJREFUPF9bW1vLk08+SWFhIatWreLFF1/81O9z8OBBampqePzxxwGo\nr69nw4YNFBcXc/fdd/NP//RP9PT0APDMM8+wY8eOy2bciIh3UnkREcM1Nzfzv//7v/z85z9n27Zt\n1NTU8Mc//pGXXnqJ//7v/8bpdDIyMsLGjRu544472LNnD3/+85/ZuXMnf/rTnz7xNd98803uuusu\ngoODAdi6dSvLly9n9+7d7N27l9TUVM/Ax4SEBBYuXMju3buv288sIl+eyouIGG7t2rUAZGdnMzEx\nQXFxseex2+2mra2N0tJSXC6X50xKZGQkDz74IG+//fYnvmZZWRm5ubmexzabjQ8//JCDBw8yMjLC\n9773Pc/3BcjNzfUMYRUR76bBjCJiuIiICADM5ul/T308dPHj4XhTU1P09vYyOjrKmjVrPF83Pj6O\n1Wr9xNfs7Oy8ZMjlD37wA15++WU2b95MXV0dd9xxB//6r//q+Xqr1UpnZ+fV/+FE5KpTeRERnxAf\nH09oaCglJSVf6usDAwN56qmneOqpp+js7OT5559n8+bN/OIXv7jKSUXkWtNlIxHxCYsXLyY8PJw3\n3ngDgMnJSbZu3crOnTs/8flxcXGXnEn59re/zaFDhzz7UlNTL3m+0+m85EyNiHgvlRcR8QmBgYH8\n13/9F++88w6FhYWsWbOGlpYWbr311k98fm5uLseOHfM8/ta3vsXmzZspLCykuLiYhoYGvv/973v2\nHzt2jLy8vGv+c4jIV6f7vIjIjHTgwAE2bdrEvn37CAoK+szntre3U1xczFtvvUVSUtJ1SigiX5bO\nvIjIjJSfn09aWhq/+93vrvjc//zP/+TBBx9UcRHxESovIjJjvfDCC7z++uucPn36U59TUlJCbW0t\nP/jBD65jMhH5KnTZSERERHyKzryIiIiIT1F5EREREZ+i8iIiIiI+ReVFREREfIrKi4iIiPgUlRcR\nERHxKf8fiTT0C3zwt6QAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(results.y, label='Y position (m)')\n", + "plot(results.x, label='X position (m)')\n", + "decorate(title='Position over Time',\n", + " xlabel='Time (s)',\n", + " ylabel='Position (m)',\n", + " legend=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "A-LyAxW7bKhu" + }, + "source": [ + "Third floor near the ceiling" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Ax8EsdFJypUT", + "outputId": "3c86b350-f595-4ba4-8344-bafa2f9848b5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Configured for ModSimPy. Restarting kernel.\n" + ] + } + ], + "source": [ + "# Imports\n", + "from IPython.display import clear_output\n", + "import os\n", + "import time\n", + "\n", + "# Install Python libraries\n", + "!pip3 install pandas seaborn sympy beautifulsoup4 lxml pint scipy==1.1.0 numpy\n", + "\n", + "# Removes code before re-downloading it\n", + "!rm -rf ./ModSimPy\n", + "!rm -rf ./modsim.py\n", + "\n", + "# Grabs ModSimPy\n", + "!git clone https://github.com/AllenDowney/ModSimPy.git\n", + "!cp \"ModSimPy/code/modsim.py\" .\n", + "\n", + "# Resets kernel to flush outdated libraries (especially SciPy)\n", + "clear_output()\n", + "print(\"Configured for ModSimPy. Restarting kernel.\")\n", + "time.sleep(1)\n", + "os._exit(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0zs_2kVjlcpY" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "Project 3.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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": 1 +} diff --git a/code/VS Code MatPlotLib Test.ipynb b/code/VS Code MatPlotLib Test.ipynb new file mode 100644 index 00000000..371a842d --- /dev/null +++ b/code/VS Code MatPlotLib Test.ipynb @@ -0,0 +1,110 @@ +{ + "nbformat": 4, + "nbformat_minor": 2, + "metadata": { + "language_info": { + "name": "python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "version": "3.7.4" + }, + "orig_nbformat": 2, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": 3 + }, + "cells": [ + { + "cell_type": "markdown", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This is a Jupyter Notebook in VS Code\n", + "***Sam Daitzman***" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": "
" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": "
" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure()\n", + "fig.suptitle('No axes on this figure')\n", + "fig, ax_lst = plt.subplots(2, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "image/svg+xml": "\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", + "text/plain": "
" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = np.linspace(0, 2, 100)\n", + "\n", + "plt.plot(x, x, label='linear')\n", + "plt.plot(x, x**2, label='quadratic')\n", + "plt.plot(x, x**3, label='cubic')\n", + "\n", + "plt.xlabel('x label')\n", + "plt.ylabel('y label')\n", + "\n", + "plt.title(\"Simple Plot\")\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ] +} \ No newline at end of file diff --git a/code/__init__.py b/code/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/code/chap01.ipynb b/code/chap01.ipynb index 5dfe5445..46186302 100644 --- a/code/chap01.ipynb +++ b/code/chap01.ipynb @@ -103,7 +103,15 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "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", @@ -143,7 +151,24 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "meter" + ], + "text/latex": [ + "$meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "meter = UNITS.meter" ] @@ -152,7 +177,24 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "second" + ], + "text/latex": [ + "$second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "second = UNITS.second" ] @@ -166,10 +208,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "Z_0" + ], + "text/latex": [ + "$Z_0$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "UNITS.characteristic_impedance_of_vacuum" + ] }, { "cell_type": "markdown", @@ -180,9 +241,26 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "9.8 meter/second2" + ], + "text/latex": [ + "$9.8 \\frac{meter}{second^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a = 9.8 * meter / second**2" ] @@ -196,9 +274,26 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "4 second" + ], + "text/latex": [ + "$4 second$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "t = 4 * second" ] @@ -212,9 +307,26 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "78.4 meter" + ], + "text/latex": [ + "$78.4 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a * t**2 / 2" ] @@ -228,11 +340,28 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 18, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "39.2 meter/second" + ], + "text/latex": [ + "$39.2 \\frac{meter}{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a * t" ] }, { @@ -244,11 +373,25 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 19, "metadata": {}, - "outputs": [], + "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[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": [ - "# Solution goes here" + "a+t" ] }, { @@ -478,7 +621,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.6.6" } }, "nbformat": 4, diff --git a/code/chap02.ipynb b/code/chap02.ipynb index 9ed8b78c..040f29ca 100644 --- a/code/chap02.ipynb +++ b/code/chap02.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -52,9 +52,57 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -68,20 +116,42 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.olin" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley" ] @@ -113,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -129,9 +199,57 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin9
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare" ] @@ -145,9 +263,57 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin9
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley += 1\n", "bikeshare" @@ -164,7 +330,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -182,9 +348,57 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin8
wellesley4
\n", + "
" + ], + "text/plain": [ + "olin 8\n", + "wellesley 4\n", + "dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bike_to_wellesley()\n", "bikeshare" @@ -200,9 +414,20 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bike_to_wellesley" ] @@ -223,20 +448,71 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "def bike_to_olin():\n", + " bikeshare.wellesley -= 1\n", + " bikeshare.olin += 1" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin9
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bike_to_olin()\n", + "bikeshare" ] }, { @@ -257,9 +533,25 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function flip in module modsim:\n", + "\n", + "flip(p=0.5)\n", + " Flips a coin with the given probability.\n", + " \n", + " p: float 0-1\n", + " \n", + " returns: boolean (True or False)\n", + "\n" + ] + } + ], "source": [ "help(flip)" ] @@ -273,9 +565,20 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "flip(0.7)" ] @@ -289,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -306,9 +609,17 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 25, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tails\n" + ] + } + ], "source": [ "if flip(0.7):\n", " print('heads')\n", @@ -327,9 +638,57 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 26, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -343,9 +702,64 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Moving a bike to Wellesley\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin7
wellesley5
\n", + "
" + ], + "text/plain": [ + "olin 7\n", + "wellesley 5\n", + "dtype: int64" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "if flip(0.5):\n", " bike_to_wellesley()\n", @@ -363,9 +777,57 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin7
wellesley5
\n", + "
" + ], + "text/plain": [ + "olin 7\n", + "wellesley 5\n", + "dtype: int64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "if flip(0.4):\n", " bike_to_olin()\n", @@ -383,7 +845,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -406,9 +868,57 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin4
wellesley8
\n", + "
" + ], + "text/plain": [ + "olin 4\n", + "wellesley 8\n", + "dtype: int64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "step()\n", "bikeshare" @@ -427,11 +937,12 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "def step(p1, p2):\n", + " print('PWellesley: ', p1, 'POlin: ', p2)\n", " if flip(p1):\n", " bike_to_wellesley()\n", " print('Moving a bike to Wellesley')\n", @@ -450,9 +961,64 @@ }, { "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Moving a bike to Wellesley\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin3
wellesley9
\n", + "
" + ], + "text/plain": [ + "olin 3\n", + "wellesley 9\n", + "dtype: int64" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "step(0.5, 0.4)\n", "bikeshare" @@ -467,11 +1033,21 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 63, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PWellesley: 0.3 POlin: 0.2\n", + "Moving a bike to Wellesley\n", + "Moving a bike to Olin\n" + ] + } + ], "source": [ - "# Solution goes here" + "step(0.3, 0.2)" ] }, { @@ -490,7 +1066,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 64, "metadata": {}, "outputs": [], "source": [ @@ -511,9 +1087,57 @@ }, { "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -527,9 +1151,57 @@ }, { "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [], + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin6
wellesley6
\n", + "
" + ], + "text/plain": [ + "olin 6\n", + "wellesley 6\n", + "dtype: int64" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(4):\n", " bike_to_wellesley()\n", @@ -546,9 +1218,57 @@ }, { "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin7
wellesley5
\n", + "
" + ], + "text/plain": [ + "olin 7\n", + "wellesley 5\n", + "dtype: int64" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(4):\n", " step(0.3, 0.2)\n", @@ -565,9 +1285,57 @@ }, { "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin-22
wellesley34
\n", + "
" + ], + "text/plain": [ + "olin -22\n", + "wellesley 34\n", + "dtype: int64" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(60):\n", " step(0.3, 0.2)\n", @@ -586,10 +1354,32 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "execution_count": 80, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function plot in module modsim:\n", + "\n", + "plot(*args, **options)\n", + " Makes line plots.\n", + " \n", + " args can be:\n", + " plot(y)\n", + " plot(y, style_string)\n", + " plot(x, y)\n", + " plot(x, y, style_string)\n", + " \n", + " options are the same as for pyplot.plot\n", + "\n" + ] + } + ], + "source": [ + "help(plot)" + ] }, { "cell_type": "markdown", @@ -604,9 +1394,47 @@ }, { "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
\n", + "
" + ], + "text/plain": [ + "Series([], dtype: float64)" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results = TimeSeries()" ] @@ -620,9 +1448,52 @@ }, { "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
010
\n", + "
" + ], + "text/plain": [ + "0 10\n", + "dtype: int64" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results[0] = bikeshare.olin\n", "results" @@ -639,9 +1510,57 @@ }, { "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -655,7 +1574,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 85, "metadata": {}, "outputs": [], "source": [ @@ -673,9 +1592,97 @@ }, { "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [], + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
010
110
210
310
49
59
69
79
88
98
\n", + "
" + ], + "text/plain": [ + "0 10\n", + "1 10\n", + "2 10\n", + "3 10\n", + "4 9\n", + "5 9\n", + "6 9\n", + "7 9\n", + "8 8\n", + "9 8\n", + "dtype: int64" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results" ] @@ -689,18 +1696,48 @@ }, { "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "9.2" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results.mean()" ] }, { "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "count 10.000000\n", + "mean 9.200000\n", + "std 0.788811\n", + "min 8.000000\n", + "25% 9.000000\n", + "50% 9.000000\n", + "75% 10.000000\n", + "max 10.000000\n", + "dtype: float64" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results.describe()" ] @@ -723,9 +1760,27 @@ }, { "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap01-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot(results, label='Olin')\n", "\n", @@ -745,9 +1800,36 @@ }, { "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [], + "execution_count": 91, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function decorate in module modsim:\n", + "\n", + "decorate(**options)\n", + " Decorate the current axes.\n", + " \n", + " Call decorate with keyword arguments like\n", + " \n", + " decorate(title='Title',\n", + " xlabel='x',\n", + " ylabel='y')\n", + " \n", + " The keyword arguments can be any of the axis properties\n", + " \n", + " https://matplotlib.org/api/axes_api.html\n", + " \n", + " In addition, you can use `legend=False` to suppress the legend.\n", + " \n", + " And you can use `loc` to indicate the location of the legend\n", + " (the default value is 'best')\n", + "\n" + ] + } + ], "source": [ "help(decorate)" ] @@ -761,9 +1843,27 @@ }, { "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], + "execution_count": 92, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function savefig in module modsim:\n", + "\n", + "savefig(filename, **options)\n", + " Save the current figure.\n", + " \n", + " Keyword arguments are passed along to plt.savefig\n", + " \n", + " https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html\n", + " \n", + " filename: string\n", + "\n" + ] + } + ], "source": [ "help(savefig)" ] @@ -802,20 +1902,51 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 99, "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "def run_simulation(p1, p2, num_steps):\n", + " olinResults = TimeSeries()\n", + " wellesleyResults = TimeSeries()\n", + " for i in range(num_steps):\n", + " step(p1, p2)\n", + " olinResults[i] = bikeshare.olin\n", + " wellesleyResults[i] = bikeshare.wellesley\n", + " plot(olinResults, label='Olin')\n", + " plot(wellesleyResults, label='Olin')\n", + " decorate(title='Olin-Wellesley Bike Share',\n", + " xlabel='Time',\n", + " ylabel='Bikes')\n" ] }, { "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/simulatedOlinBikeshare.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bikeshare = State(olin=10, wellesley=2)\n", + "run_simulation(0.5, 0.5, 30)\n", + "savefig('figs/simulatedOlinBikeshare.pdf')" ] }, { @@ -916,7 +2047,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/code/chap03.ipynb b/code/chap03.ipynb index dd48de52..e1f94075 100644 --- a/code/chap03.ipynb +++ b/code/chap03.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -125,18 +125,114 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare1 = State(olin=10, wellesley=2)" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin2
wellesley10
\n", + "
" + ], + "text/plain": [ + "olin 2\n", + "wellesley 10\n", + "dtype: int64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare2 = State(olin=2, wellesley=10)" ] @@ -150,7 +246,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -159,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -175,18 +271,114 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin11
wellesley1
\n", + "
" + ], + "text/plain": [ + "olin 11\n", + "wellesley 1\n", + "dtype: int64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare1" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin1
wellesley11
\n", + "
" + ], + "text/plain": [ + "olin 1\n", + "wellesley 11\n", + "dtype: int64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare2" ] @@ -209,9 +401,20 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)\n", "run_simulation(bikeshare, 0.4, 0.2, 60)\n", @@ -227,7 +430,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -261,9 +464,20 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)\n", "run_simulation(bikeshare, 0.4, 0.2, 60)\n", @@ -290,9 +504,20 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x = 5" ] @@ -306,9 +531,20 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "x == 5" ] @@ -322,9 +558,17 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "yes, x is 5\n" + ] + } + ], "source": [ "if x == 5:\n", " print('yes, x is 5')" @@ -339,7 +583,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -382,9 +626,67 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
olin_empty0
wellesley_empty0
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "olin_empty 0\n", + "wellesley_empty 0\n", + "dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2, \n", " olin_empty=0, wellesley_empty=0)" @@ -399,7 +701,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -435,9 +737,27 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 27, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap02-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "run_simulation(bikeshare, 0.4, 0.2, 60)\n", "decorate_bikeshare()\n", @@ -453,18 +773,40 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 28, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "18" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.olin_empty" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley_empty" ] @@ -486,9 +828,72 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
olin_empty0
wellesley_empty0
clock0
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "olin_empty 0\n", + "wellesley_empty 0\n", + "clock 0\n", + "dtype: int64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2, \n", " olin_empty=0, wellesley_empty=0,\n", @@ -497,29 +902,63 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "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", + " state.clock += 1\n", + " if flip(p1):\n", + " bike_to_wellesley(state)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(state)" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Solution goes here" + "run_simulation(bikeshare, 0.4, 0.2, 60)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "60" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Solution goes here" + "bikeshare.clock" ] }, { @@ -537,39 +976,163 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
olin_empty0
wellesley_empty0
clock0
t_first_empty-1
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "olin_empty 0\n", + "wellesley_empty 0\n", + "clock 0\n", + "t_first_empty -1\n", + "dtype: int64" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Solution goes here" + "bikeshare = State(olin=10, wellesley=2, \n", + " olin_empty=0, wellesley_empty=0,\n", + " clock=0, t_first_empty=-1)" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 67, "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "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", + " state.clock += 1\n", + " if flip(p1):\n", + " bike_to_wellesley(state)\n", + " \n", + " if flip(p2):\n", + " bike_to_olin(state)\n", + " if (state.olin_empty == 1 or state.wellesley_empty == 1) and state.t_first_empty == -1:\n", + " print(\"it ran again!\")\n", + " state.t_first_empty = state.clock" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 68, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "it ran again!\n", + "Saving figure to file figs/chap02-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Solution goes here" + "run_simulation(bikeshare, 0.4, 0.2, 100)\n", + "decorate_bikeshare()\n", + "savefig('figs/chap02-fig01.pdf')" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 69, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "83" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Solution goes here" + "bikeshare.t_first_empty" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/code/chap04-mine.ipynb b/code/chap04-mine.ipynb new file mode 100644 index 00000000..2a7f25b1 --- /dev/null +++ b/code/chap04-mine.ipynb @@ -0,0 +1,1032 @@ +{ + "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": 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 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": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def add_five(x):\n", + " \"\"\"This is a terrible Function, the purpose of functions are to save time and make programming easier. This adds keystrokes.\n", + " \"\"\"\n", + " return x + 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And here's how we call it." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 4, + "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": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 5, + "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": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 6, + "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": 7, + "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": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def make_state():\n", + " return State(olin=10,wellesley=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 9, + "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": 10, + "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": 11, + "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": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin0
wellesley12
olin_empty0
wellesley_empty0
\n", + "
" + ], + "text/plain": [ + "olin 0\n", + "wellesley 12\n", + "olin_empty 0\n", + "wellesley_empty 0\n", + "dtype: int64" + ] + }, + "execution_count": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "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": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 14, + "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": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12" + ] + }, + "execution_count": 15, + "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": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0. , 0.25, 0.5 , 0.75, 1. ])" + ] + }, + "execution_count": 16, + "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": 17, + "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": 18, + "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": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rangedNumbers = 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": 20, + "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": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1., 3., 5., 7., 9., 11.])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "linrange(1, 11, 2, endpoint=True)" + ] + }, + { + "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": 34, + "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": 34, + "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": 36, + "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 11\n", + "0.5 12\n", + "0.6000000000000001 18\n", + "0.7000000000000001 23\n", + "0.8 22\n", + "0.9 35\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": 37, + "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": 38, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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": [ + "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": 66, + "metadata": {}, + "outputs": [], + "source": [ + "def sweep_p1(p1_array):\n", + " sweep = SweepSeries()\n", + " for p1 in p1_array:\n", + " state = run_simulation(p1, 0.4, num_steps)\n", + " sweep[p1] = state.olin_empty\n", + " return sweep" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XecHHX9x/HXpYf03hNa8qEFAqEISAtSFQQjHSSiKALSFBB+Ik1QICAggjRBioCAUhXRQOglAROCkE/o6Z0kpHHJ3f3++M4mm+Vub+5uZ3dv9/18PPLI7ezszGd3ducz3zLfb0VNTQ0iIiLFpkWhAxAREamNEpSIiBQlJSgRESlKSlAiIlKUlKBERKQoKUGJiEhRalXoAETyxcw2An4OHAtsDCwC/g1c4e4fROt8Cox195vM7BLgW+6+YyP21QuYDxzm7o+nLb8MuAj4kbvfnrb8HOB8oK+7Z733IyPGu4GO7v7dhsaYsc29geeBTu6+vCnbEskVlaCkLETJ6XngKOBCwIDRQFtggpntWsvLxgIHNGZ/7r4AeA/YJeOpfYGZwH4Zy3cDxteXnETKiUpQUi4uAXoAO7j7smjZZ8DrZnYncK+ZbZn+gqgk0ZTSxHjga6kHZtYR2Bk4B7jYzCrSEtKuwGVN2JdIyVGCkpJnZi2Ak4FfpSWndBcRSjUHZLzuEqIqvqgK7BFCcrkM6Aa8CPzQ3efVsesXgO+ZWQt3rwb2AmYBdwPXAdsDb5vZxkB/4Llov62By4ExQHvgdeAMd/cY73WXaNsjgRnA7YTqwGozawX8DjgC6AK8BZzj7m/Wsp1OwLXAd4GaKLYz3X22mZ0HnA4MSSVYM9sT+CfQR1WEkiuq4pNyMAzoSjjRf4W7zwamEUox2XQFTiFUDR5GqL77ZZb1xwMdga2jx98Axrn7F8BE1lfz7QbMTLWDERLgNwnVkbsADrxgZl2yBWdmvYF/Ac8Aw4EzgNOA86JVfgocCBwSxTQNeMTMKmrZ3G2EatADCIm1BvhXlOTuBwYAu6etfyzwuJKT5JISlJSD7tH/i7OsswjoWc92WhJKHG+5+/PAfYSSSq3cfT7wPuvbofYFxkV/Pxc9hnCiT5We2gNnA6e4+wvuPtXdzwCWAifUE99pwAR3v9zdP3D3fwIXEDqGQOgYshL41N0/JpQGTyTjPGBmmwJHA8e6+wR3fzfa98bAge4+i1A6PDpavzWhpHV/PfGJNIiq+KQcpBJT5yzrdAUWxtjWtLS/lwGtAczsn8Aeac9t5e7TCSfyXczsCWAbokQU/X+GmbUklKBuiJZvRui48ayZpXeYaEco0WSzNbC3maWXYloA7c2sB3AT8G1gtpm9CjwB3O3uVWYbbHqr6H/PWL5RFMNTwL3Ab83sTEIpqwZ4tp74RBpECUrKwYfAAuDrwH8zn4y6hBuhCvC4erZVmfE4VT32Q0J7Ucrs6P/xhF6D+wDvu/vcaPkrhN/f7oTquFTiSv0m9yN0U09XW/tZulbAo9Re7bjU3RdZyDgHAQcDPwPONLOda9nOGkIbWWavwlSyfxT4A7A3cAzwV3dfU098Ig2iBCUlz93XmtkfgZ+b2f3unlnVdxkwndB209h9zKrjqfGE0sZ+rK/ew91Xm9lrwA8IVW7To6c+BNYCvd39VYCojehe4EFC6aUu7wMHufuHqQVmdgihU8QYMzsZWObuDwGPRb0KFwF7smEyfJ9QMuzg7pOi7XQgVGleBbzu7svM7ElCW9xBwLeyxCXSKGqDknJxBfAp8IqZHW5mg81sJzO7h9DAf3wSJYCoh9/HhPaacRlPP0dou3kubf3lwM3ADWZ2kJltTqiaO4yQOLL5AzDUzG604BvArcCKqBdh12i7+0U9B08ktKtNyojZCdV/95jZHma2BXAPocv81LRV7yWUHJekkqlILilBSVlw9y8JpZi7gV8TTrSPAdXAjgmfYMcTqv9eyFg+jtCu81zG8vMIXdrvAt4BdiCUjD7KthN3T3WV3xGYTEggDwFnRatcR0g0dxF6Bv4YGO3u0766NU4k9DR8DJhA6Ja+n7svSVvnGUKni79ki0uksSo0o66INIaZdQPmACPcfWp964s0lBKUiDRINGzUwYTOEV3dfd96XiLSKOokISINVUW4kXcBcGiBY5ESphKUiIgUpWZVgjKztsBOhHrvqgKHIyIiTdcS6EcYBeXL9CeaVYIiJKeXCh2EiIjk3B7Ay+kLmluCmgNw//3307dv30LHIiIiTTR37lyOO+44iM7v6epNUGY2lHAz3p7AQELV2gzCTKT313dvRo5VAfTt25eBAwfmcbciIpKwrzTb1JmgzKw7YQDLfQl3ld9KyHCp+sKvAS+a2b+Bn7n7oiQiFhGR8pStBPU44c7zE6NhUjLdGc0NcyQhge1eyzoiIiKNki1BjapvbDJ3Xwv8xcwezm1YIiJS7uociy89OUV3jmNmLc3sWDM7sK51RUREcqHewWLN7HhgZvTwGkK135/M7IIkAxMRkfIWZzTzc4HvRjN/ngSMJswAemqSgYmISPGqrq5h0dJVVFXV1kUhN+LcBzXI3Z8zs68Da939FQAz65JYVCIiUrTmL17JuAnTWbRsNX17dOC7o4Ymsp84CWq2mR1AGLn43wBmdhRhEjYRESkTVVXVvPnePP7r86mOxnFdtHQVVdU1tGxRkfP9xUlQ5xGmml4G7Gdmo4A7ge/kPBoRESlK6aWmlNYtWzBqx0GJJCeIl6CqgT7uXglgZjOAfu7+RSIRlbAHHniABx54gLVr11JRUcFWW23F2WefTf/+/Rk1ahQ33HADALfffjs33nhjgaMVEam91AQwoFdHRu04iC4d2ya27zgJ6n7CyBEAuPuqxKIpYVdddRVTp07l1ltvpV+/flRXV/PEE09w1FFH8fDD628jGz58uJKTiBSFukpNu27bj+Gb9aSiIpmSU0qcBPUy8D0z+4u7r0w0mhz6r8/nzffmsmZtcj1MWrdqwc5b9WV76511vblz5/Lggw8yfvx4unQJfUtatGjBYYcdxrvvvsutt966bt033niDyy+/nKeeeopf/OIXdOzYEXdn7ty5mBlXXXUVHTp0SOw9iYgUstSULk6C2gI4BLjVzJYB66J19+5xdhLdS3Vu9NqVwBnuPtHM3gLaA5XRqve7+zUNiL9Ok6YtSDQ5AaxZW82kaQvqTVCTJ09m0003XZec0u22225cf/31db723Xff5Z577qGiooIjjzySZ555htGjRzc5dhGR2hS61JQuToL6UVN2YGZGuMF3B3efY2YHA38zsy2BzYBeSYxEMWJYr7yUoEYM6xVr3bVr19a6vLKyMusB32OPPWjTpg0Aw4YNY+nSpQ0PVESkHsVSakpXb4Jy9xcAzGwzYGPgBWAjd18Wcx9fAj9099RcHxOBvsDXgeXAM2bWG/gPcGGu2ri2t971lmzyZcSIEXz22WcsWLCAXr02TGhvvPEG22+/PS+++GKtr23Xrt26vysqKqhJ++KIiORCMZWa0sUZ6qinmf0HmEoY4dyAT8xsZJwduPun7v50tK0KwlBJTwBtgeeBIwgz5Q4GftOYN1Hs+vTpwwknnMA555zDvHnz1i1/9NFHefbZZzn55JMLGJ2IlKuqqmpemzKHR577YIPkNKBXR47e39h2814FS04Qr4rvJuB94NvATHf/n5ldDVxPmKI3FjPrANwNDAIOdPclhESVev5K4G/AWbGjb0Z+9rOf8fDDD/OTn/yEyspKKisrGT58OA8++CADBgwodHgiUmaKtdSUrqK+KiMzm08Y7uhLM1vs7t2jcfkWuXvXODsxs8HAk4RE9313X2VmhwBL3f3FaJ0dgQfdffMs29kY+GTcuHGaUVdEpBGKra1p5syZ7LvvvgCbuPun6c/FKUF9QbgPKv2F/YDFcXZuZp2A8cCf3f3StKcGAheZ2V6EXnznAA/F2aaIiDRccyg1pYuToO4EnjKzS4GWZrYfcAlwT8x9nA4MAQ43s8PTlu8LbAq8HcXxPHBZzG2KiEhMxVZqiitOgvotsBq4NFr/ZuDP0fJ6uftvqLvzw7nRPxERSUBzKzWli9PNvJrQ8+665MMREZFcaK6lpnT1Jigzaw98D9gcaJn+nLufk1BcIiLSSM251JQuThXfXYSbascDOR/xQUREcqMUSk3p4iSobxCGKZqedDAiItI4pVJqShcnQS0DPk86EBERabhSKzWli5Ogfgc8ZGbXAfPTn3D3dxKJSkRE6lWKpaZ0cRLUDdH/B2YsryGj04SIiCSvlEtN6eJ0M693QFkREcmPRUtX8ezrn5VsqSldnQnKzLaOBobdto5Vatx9SkJxiYhIhso1VTz50scsX7W+Q3WplZrSZStBvQZ0BibV8byq+ERE8uj1d+esS06lWmpKV2eCcvfO0f+q4hMRKbA5C1cw5aNF6x7vPXIgNqR7ASNKXrYqvrqq9lJUxScikgdVVdU8/9aMdTNqD+nbmWGDuxU4quRlq+KbRKjGq6vsqCo+EZE8eGvqfBZHnSJat2rBXjsMLNlqvXTZqvhUtSciUmCLlq5i4tR56x7vOrwfnTu0KWBE+RNnsNiewMFAX2AO8E93X5h0YCIi5a66uobnJs6gujpU7fXt0YFtNu1Z4KjyJ2spycxOB2YS5oI6HLgKmGlmZ+YhNhGRsjblo4XMW7wSgBYtKthn5EBatCj9qr2UbJ0kDgYuAg5y9+fTlh8E3G1mH7j7P/IQo4hI2Vm2opLX352z7vGOW/ahR5f2BYwo/7KVoH4GnJ6enADc/Z/AGdHzIiKSYzU1NYx/ewZr1lYD0L1zO0Za7wJHlX/ZEtR2wN/reO4pYPvchyMiItOmf870uV8AUFFRwagdB9GyZfn1W8v2jttE/0REJE9Wrl7DS5Nmr3u87WY96dujQwEjKpxsCWoyofdebQ6m7iGQRESkkV6ePJvVlWsB6LRRG742vG+BIyqcbAnqWuB6MxuZvtDMRhGm4Lg6ycBERMrNp3OWMW36+vlh995hIK1ble94CNlu1H3MzDYHXjGzGcBcYDDQGzjX3Z/JU4wiIiWvck0V49+ase6xDe7GkH6dCxhR4WW9Udfdx5rZX4D9gX7APOBpd5+X7XUiItIw6SOVt2/biq+PGFDgiAov231QA919prvPBu7OthEzG+TuM7KtIyIitcscqXyPEQNo3zbOhOelLdsncK+ZvQzcVlfyMbMhwOnAzsBeCcQnIlLSahupfOigrgWOqjhkS1D7AmcDE8zsI+BNYDahY0V/YFdgEHANMCrhOEVESlLmSOV7jyyPkcrjyNZJohq41sz+AHwb2IdQSqoGZgC/JQwcuyofgYqIlJraRirvtJFuP02pt5LT3VcDD0X/GsXMjgfOJcwhtRI4w90nmtkFwIlRHPcBl7p7TWP3IyLSXJT7SOVxJD52hpkZoRrwQHcfAfwa+Fs0GO2RwEhgG0IJ7Yik4xERKQZTPizvkcrjyMfgTl8CP3T31LC8EwlzSx0B/MXdV0SltLuA4/MQj4hIQS1bUcnr/yvvkcrjSLwfo7t/CnwKYGYVwHXAE4T7qv6VtupMYGDS8YiIFFLmSOU9ynSk8jgaXIIys93MbMtGvK4D8Fdgc+CH0b7T25sqgKqGbldEpDnJHKl8nzIdqTyOej8VMzvAzDz6+wJgHDDRzE6KuxMzGwy8SkhA+7j7EmA6obt6Sn9CKUpEpCRppPKGiVPFdxlwlZm1AM4ERhPuh3oU+FN9LzazTsB44M/ufmnaU48DF5vZbcBaYAz1jFghItKcvTRJI5U3RJwEtbm7/yka1bwD8C93rzKzXjH3cTowBDjczA5PW74v8DfCDcBtCAnrnvihi4g0H5/OWcYHM9JGKh9Z3iOVxxEnQX1uZlsAxwDjouS0JzCnntcB4O6/AX5Tx9NXRv9EREpWrSOV9y3vkcrjiJOgrgCmAJXAKDPbHfgn8KMkAxMRKRUaqbxx4iSoCYQu4avdfbmZdQVGuPsHyYYmItL8aaTyxovzKT0PbOLuywGiHnhLEo1KRKQEaKTyponT+d4JI5eLiEgDaKTypolbznzGzBYSupevu7nW3XdIJCoRkWZOI5U3XZwEdXv0T0REYtBI5bkRZ7qNPwOYWWvC/UwfRcs1LYaISC0yRyofteMgjVTeCHGGOmpvZncAq4DJgAFuZpsmHZyISHOzbEUlr7+74Ujl3Tu3K2BEzVecThK/A7oBWxPuhfqIMAr5HxKMS0Sk2Vk3UnmVRirPhTgJ6lBgjLs7UOPua4CfA7skGpmISDPjGqk8p+J8cmuBttHfqUrUDsCKRCISEWmGVq5ew8saqTyn4iSoR4BHzGwnADMbCtwJ/D3JwEREmhONVJ57cRLUBcA7hCkzukR/LwIuTC4sEZHmQyOVJyNON/MvgTOAM6IpNha5e3XikYmINAMaqTw5sUaSMLMDCFO1t4weA+DuNyYWmYhIM/DaFI1UnpR6E5SZ3QycQLgHak3aUzWAEpSIlK05C1fw7scaqTwpcT7J7wB7uPukpIMREWkuNFJ58uJ0kqgC3ks6EBGR5kQjlScvTglqLPBHM7sSmJ/+hLsvSyQqEZEippHK8yNOgrqMcGPuGNZPtVER/a1+lCJSVjRSef7ESVDbJB6FiEgzkT5SeUuNVJ6oOtugzKxT9OfnWf6JiJSNzJHKR2qk8kRlK0HNAjoDS0ibRTeiKj4RKSsaqTz/siWoraP/N8lHICIixUwjledftgS11Mw6o6o8ESlzlWuqeGWyRirPt2wJqraqvRRV8YlI2Xhr6nxWfRlGKu/YvrVGKs+TbAlKVXsiUvaWrahk0rT1t4DuOryfRirPkzoTlLt/BmBmLYHdgb7AHOA1d1+bn/BERArrtSlzqIrueerTfSOGDe5W4IjKR9YWPjP7NjAbeBa4gTAn1CwzOzz50ERECmvuohUbzPO0+3b9NZxRHtVZgjKzXYG7gXOA+9290szaAd8H7jKzue7+WtwdmVlFtL0p7j42WrYQmJm22jXufn+D34WISI7V1NTwclrHiM0GdqV/z44FjKj8ZGuDugA4393vSi1w99XALdF8UBcAh8bZiZltCfwB2AWYEi0zYLG7j2hc6CIiyflw5hLmLloBhBEjdhver8ARlZ9sCWoX4Mg6nvsLcHkD9nMacAcwPW3ZbkCVmb1EmEr+EeAKd69qwHZFRHJubVU1r01ZP2LEtkN70aVj2wJGVJ6yJaiNgLqmdl9dz2s34O6nA5jZ/hn7/g/wC6A18DSwDLg+7nZFRJLwzgcLWbaiEoB2bVoxcguNGFEI2ZLMNGAv4N+1PLcXMLUpO3b329Mfm9l1wBkoQYlIAa1cvWaDqTR22bov7dpoltxCyNaL72bg92bWP32hmW0B3EQTp3s3sxPMbNu0RRVsOKW8iEjevfm/uVSuCS0N3Tq1Y6tNexQ4ovKV7T6oO81sBPChmb0CzAUGAzsDN7n7X5q4722A0WY2GmgDnA6oB5+IFMyipav43yeL1z3efbv+tNRUGgWT9T4od/8psCfwCrASeAHY3d3PzcG+LwUWE3r1vQO8SuhIISJSEK+8M5uamnBT7qA+nRjSt1M9r5Ak1Vux6u4TgYm52Jm7j0n7eyVwUi62KyLSVJ/NXbbBaOW7b6ubcgtNY8WLSNmrrq7h1bSbcrfcuDs9u7YvYEQCSlAiIrz3ySIWLVsNQOtWLfjaNhqtvBgoQYlIWatcU8Ub/5u77vHILfqwUbvWBYxIUuptgzKzicCfgQfdfUHyIYmI5M9bU+dtMNfTiGG9ChyRpMQpQd0AHAR8amZPm9kxZqbKWRFp9sJcT+uvu3cd3o9Wmsa9aNR7JNz9Xnc/GBgCPAX8AJhhZneZ2aikAxQRSYrmeipusS8V3H0hYT6oFwg37R4EXGdmH5rZXsmEJyKSDM31VPzitEFtAhwNHANsCjwBnAf8y92rzOxk4AGgf91bEREpHprrqXmIMwLiB8DzwHXAI+6+POP5ccCBuQ5MRCQpmuupeYiToIa4+6y6nnT3j4HRuQtJRCQ5muup+YiToOaY2XmEKr6+wAzgbne/OdHIREQSoLmemo84CeoaQoeIa4GZwMbAOWbWzd2vSDA2EZGc0lxPzUucIzMGGOHuM1ILzOxZ4DVACUpEmg3N9dS8xOlmvpow1Ua6RcCXuQ9HRCQZmuup+YlTgvod8LiZ/QL4CBgAXAY8lj4jrru/k0yIIiJNp7memp84Cerq6P8XM5YfCPw0+rsGaJmroEREcilzrqev66bcZiHOhIUamEpEmq3MuZ622qQ7PbpoONHmIFb3FTMbBHyH0M18OvCou89PMjARkVzInOtpl60111NzUW/pyMwOBhz4LqGL+QnANDPbPdnQRESaRnM9NW9xSlBjgRPd/eHUAjM7FrgRGJlUYCIiTaW5npq3OO1Lg4C/Zyx7iDBwrIhIUcqc62m3bftrrqdmJs7Rehw4O2PZGOCfOY9GRCRHMud6Gjqoa4EjkoaKU8XXHzjWzH7M+vugtiK0Q72dWsndd0gmRBGRhsmc6+nr2w1Qt/JmKE6C+nP0T0Sk6GXO9bT5wK7069mhgBFJY8W5D6rW5GRmG7l75hBIIiIFlTnX066a66nZijOj7nDgSkJVX6qM3AYYAmisEBEpGprrqbTE6SRxG7AMeBWYD9wDdAB+nWBcIiINlj7XU/u2muupuYuToLYFTgJ+D7R19+sJM+genWRgIiINkTnX085baa6n5i5OgloIrAE+BrYEcPe3CaNKiIgUhfS5nrp3bsfWmuup2YtzefEWYTbdC4GZZnYEsApY3pAdmVkFcDcwxd3HmlnLaLsHRnGMdfc/NmSbIiJQy1xP2/anheZ6avbilKDOINz31B04H7gT+BtwUdydmNmWwDjCeH4pPwaGAdsAOwFnmdnOcbcpIpKSOdfTYM31VBLidDOfCRwQPZxlZt0JbVErGrCf04A7CCOhpxwO3Obua4HPzexB4HjgzQZsV0TKnOZ6Kl1xp9s4ENgEaJ22DHe/Mc7r3f306DX7py0eBMxIezyT0CFDRCQWzfVU2uLcB3UTYey9yUBl2lM1hBHNG6tFtI2UCqCqCdsTkTKjuZ5KW5wS1PHASHf3HO97OuHm35T+hFKUiEi9NNdT6YuToBYBnySw78eBk8zsSaAj4b6qUxLYj4iUIM31VPrqTFBm1jn680/An8zs/4DP09dx92VN2PctwGaEqsM2wK3u/kITticiZUJzPZWHbCWoJYQ2olR3mGPSnquInmvZkJ25+5i0v9cCZzXk9SIioLmeykW2BLVJ3qIQEYlJcz2VjzoTlLt/lv7YzDrQwBKTiEguaa6n8hKnm/m3gZuB9P6bjariExFpCs31VF7i9OK7ArgduI8waKyISN5prqfyEydBDQEud3fdRCsiBaO5nspPnH6Z44D9kg5ERKQumuupPMU5wiuAJ8xsAjAv/Ql3/04iUYmIpNFcT+UpToKaRmiHEhHJO831VL7iTLdxaT4CERHJVF1dw4v/nbVurqfBmuuprMTpZv63up5TFZ+IJGni1HnMWhAm766oqGB3zfVUVuJU8U3OeNwDGE0Yo09EJBEz5n3BhPfWN3uP3KK35noqM42q4jOz2wiDvYqI5NzK1Wv495vT11XtDejVkZ230lxP5aaxw/9+hGa/FZEEVFfX8Owb01m5OowL0L5tK/bfZYg6RpShOG1Qh2YsagMcBUxJJCIRKWsTp85j5vwvgNDutP8uQ+jQXhMRlqM4bVA3ZDyuInQ9/1HuwxGRcpbZ7rTjFr0Z1Ee99spVnDYoTbshIomrrd1pJ7U7lTVNQSkiBad2J6mNEpSIFJzanaQ2dSaoaIJCEZFEqd1J6pKtBPUJgJnphlwRSYTanSSbbJ0kWpvZicBRZvZ3wiy6G3D3JxKLTERKmtqdpD7ZEtSvgf8D2gI31vJ8DaAEJSKNonYnqU+dCcrdrwWuNbOp7r5FHmMSkRKndieJI859UFuYWWfgm8AgYC7wtLsvSjo4ESk9aneSuOrtZm5mwwEHfgXsA1wITDOzHRKOTURKjNqdpCHiDHV0PTA2qvIDwMx+Hi3fM6nARKT0qN1JGiLOjbrbE5JRuuuBEbkPR0RKldqdpKHiJKjFwNYZy7YG5tWyrojIV6jdSRoj7mjm/zCzG4DPgI2BM4CrE4xLREqE2p2kseL04vu9ma0GTgB6A9OB8939/qbu3MyuBY4glNKi3flRTd2uiBQPtTtJY8UpQeHutwO3J7D/3YCj3f3VBLYtIgWW2e6005Z91O4kscVKUEkws7aEDhjnmdlmhEkQz3b36YWKSURyp7Z2px237FPgqKQ5KeR0G/2B54BfAtsCrwOPm5kqpkWaObU7SS7UW4Iysx5JjBrh7p8AB6ftZyxwEaETxie53p+I5I/anSQX4pSgpphZziuNzWxbMzshY3EFsCbX+xKR/FG7k+RKnAS1EBiSwL6rgRvNbJPo8U+Ad9x9ZgL7EpE8ULuT5FKcThLTgTfNbAowmzDNBgDu/p3G7tjd3zWznwJPmllLYCZwTGO3JyKFpXYnybU4CWpC9C/n3P0+4L4kti0i+aV2J8m1ODfqXpr628zauHtlsiGJSHOjdidJQpxefC2ACwhtRF3NbFvgDuBId1+YcHwiUuTU7iRJidNJ4nLgIOAkQg+7+cDnwB8SjEtEmgG1O0mS4iSo44HR7v4sUOPuy4ExwL5JBiYixU/tTpKkOAmqDbA8+jt1WVQNrE0kIhFpFtTuJEmLk6CeAe40s15ATTSG3jXAfxKNTESKltqdJB/iJKizgY0IExR2JZSmhkbLRaTMqN1J8iVON/MlwKFm1pswosRsd5+VeGQiUpTU7iT5Ems0czPbAfg5cCZwqpkNSzQqESlKaneSfKo3QUUDur5EmB5jBrAJ8JaZfTPh2ESkiKjdSfItzlBH/wcc6O4vpRaY2TeAG4CnkwpMRIqH2p2kEOJU8XUlTCaY7kVgUO7DEZFipHYnKYQ4CepO4Ddm1ho2GPro3iQDE5HioHYnKZQ6q/jM7HPC1BotgM7AKWY2F+gZPf44LxGKSMGo3UkKKVsb1GF5i0JEio7anaTQ6kxQ7v5C+mMqSLq1AAATuklEQVQz60jMbuki0rzNW7ySie+r3UkKK850G0cSRi7vnra4glD91zKhuEQkz6qra/hk9lImf7CA2QtXbPCc2p2kEOJ0M78OuJTQpbw62XBEJN8q11Tx/qeLmfzBApat+Op8pDa4m9qdpCDiJKi2wC3uXpV0MCKSP8tXVjL5w4W89/Eivlyz4c+7RYsKhg3qynZDe9OrW/sCRSjlLk6Cuhn4lZmNdfcvkg5IRJI1b/FKJk1bwEczl1Ad9c5LademFVtv2oPhm/eko9qbpMDiJKgpwAPAL80stayCMHmh2qBEmoFU+9KkaQuYs2jFV57v2qkt2w3txRZDutG6lX7WUhziJKjrCTfmPgeomk+kGamvfWlg745sN7QXG/frTEWFuo9LcYmToNq7+9jEIxGRnPliZSXvqH1Jmrk4CeoWM7sMuMzdNc27SBFT+5KUkjgJ6lvAtsAvzGwF4f4nANy9e52vEpG8UPuSlKo4CerMxKMQkQZT+5KUujhTvr9Q3zoikj9qX5JyEWeoo9So5l+hKj6R/AntS/P5aOZStS9JWYhTxZc5qnlP4DTg4VwEEE0d/xvCiBXvAD9w92W52LZIcxenfWnE0F7YkO60bqWxnKW0NKqKz8zGA68CtzRl52bWC7gL2N3dPzCzq4DfAqc2ZbsizV3lmire/2Qxkz+sq32pE9sN7an2JSlpcUpQdb2udw72vz8wwd0/iB7fAkw2s9PcvdZqxaaYtWA5L02axYpVa3K9aZGcWrO2mrVVG47NrPYlKTdx2qCuy1jUBjgIeCYH+x8EzEh7PJMwW28nIOfVfJN8PguXrMr1ZkUSpfYlKVdxSlDdMh5XAbcCf8zB/ltQeweMRIZU2nxQV2YuWM6atZo1RIqf2pek3MVpg/p+gvufDuyS9ngA8Lm7f7U1OAdsSHc2HdCVNWs1pKAUt4qKCtq1aan2JSlrdSYoMzujvhe7+41N3P+zwLVmNjRqhzoFeLyJ28yqdasWuhoVEWkGspWgDq9jeRtgV6ASaFKCcvf5ZvZ94BEzawN8BHyvKdsUEZHSUGeCcvd9MpeZ2TbA/YADx+UiAHf/B/CPXGxLRERKR+y6LjM7C3gDeBnYwd3fTiwqEREpe3G6mfcD7gGGA0e6+9OJRyUiImUvawnKzEYD7wIrgeFKTiIiki/ZevHdReiwkLrnqV9UmlrH3d9JNryvaAkwd+7cPO9WRESSkHY+/8pkZdmq+E6M/j8l+pepprYNJqwfwHHH5aR/hoiIFI9+hJ7c62TrxVeMNwtNAPYA5pDQaBMiIpJXLQnJaULmExU1NTkfk1VERKTJirGUJCIiogQlIiLFSQlKRESKkhKUiIgUJSUoEREpSo2d8r3omdk3gd8AbYF3gB+4+7KGrlMqYn4exwPnEu5xWwmc4e4T8x1rPjTk2JvZYcC97t4pjyHmVczvx3Dg90AXwm0eP3b3t/Idaz7E/DwOBy4FqoHFwMnu/lHmtkqFmVUAdwNT3H1sLc/n/HxakiUoM+sF3AWMdncDPgZ+29B1SkXMz8OAa4AD3X0E8Gvgb/mONR8acuzNbCgwFijZmQNjfj82IszfdrW7bw9cTpjZoOTE/DzaA/cB34l+L0/SxOmHipmZbQmMA75bx/OJnE9LMkEB+wMTokkQAW4BjouuABqyTqmI816/BH7o7nOixxOBvtE8XaUm1rGPTsr3AefkOb58i/t7+SiaHgfgCeDIPMaYT3E+j5aEi5Yu0eOOwOr8hZh3pwF3AA/X8Xwi59NSreIbBMxIezwT6Ax0ApY1YJ1SUe97dfdPgU9hXVH+OuAJd6/MZ6B5EvfY3xr9y/eYk/kW5/MYBsw1szuB7YAlwHn5DDKP4vxelpvZKcCrZraIkLB2z3eg+eLupwOY2f51rJLI+bRUS1AtCO0omaoauE6piP1ezawD8Fdgc+CHCcdVKPV+HmZ2KrDW3f+Ut6gKJ873ozVwMHCbu+9IaIv6h5m1zUN8+Rbn+zEc+BWwlbv3B64AHi3RGpg4EjmflmqCmg70T3s8APjc3Vc0cJ1SEeu9mtlg4FXCl2ofd1+SvxDzKs7nMQbYycwmEWZ8bm9mk8ws/XWlIs7nMRt4393fAHD3xwmlhk3zFmX+xPk8DgBeSesU8QdgG6BHfkIsOomcT0s1QT0LfC1q4IYwGvvjjVinVNT7Xs2sEzAe+Ju7H+3uq/IbYl7V+3m4+87uvk3UAH4wsMrdR7j77DzHmg9xfgv/BDYxs5EAZrYn4Yr5k7xFmT9xPo+3gb3MrE/0+DDgE3dfmKcYi00i59OSHSzWzA4mdHlsQxjC/XuEq707opNOreu4++LCRJys+j4PM7uA0HNvSsZL93X3RXkNNg/ifD/S1t0YeNfdO+Y7znyJ+XvZk9DTswOhU82Z7v5yYSJOVszP4zTgdKCS0M38dHf/X2Eizg8zu5vwWxhrZjuS8Pm0ZBOUiIg0b6VaxSciIs2cEpSIiBQlJSgRESlKSlAiIlKUlKBERKQoKUEVETPbpNAxSMOZWX8za13oOJoi6kofd92S+J6WyvsoZaU6Fl9izOwAwpQU2xMGi5wMXOLuLzRxu98CLgN2aHKQzUR0T8USdz8r/e9a1lsO7OrumfdoFVx0o6YTxiJr8Mgb0SjQFwPfBroD84G/A5elRvIws0uAEe5+mJldCAx392Ny8w7AzK4m3Lvylc++lnVPBfYDDo8eJ3JsohvHnwX2d/cvcrntaPsbvI9iZWbXAO7udzTgNX8Elrr7+fWs1wN4DPiGu3/ZtEiToRJUA5jZScC9hHHI+gF9CVMO/MPMvt7EzfdEx6NW7t6xGJNTpD1hJOsGi5LTG0BXYJ9oO6OAPsAEM+uW+Rp3vzKXySnSu4HrrhtvLsFj8xvgT0kkp8gG76OIfQt4qiEvcPdT6ktO0XqLCAnqokbGljiVoGKKpl64DhgTjUOWckd0Fb0F8HJmScDM9gYec/eu0RwytwEHEe7Ef40wJMgmwB+B1ma2JFp3c+B3hBGSlxHmWrnC3ddG+1gA7AyMJIy2fQZh/pWvRY+PdPeZZtYSOJ8w8Gtn4DngNHdfEMV2GzAV2AM4jvCjvZowltYMwvw/92Z8FttFsXdz9y/N7CjgQWBQtM/dgIfcfZCZ7UUYocIIJ/P/RJ/h0iyf9dcI49+d7O6PmlkNsL27T4r+PhM4mzDVwb+Bk9x9hZl1Tvt8ZwEPAd93941r2cf46LhcHz0eA5wVjaoxBjiRMP7ctwkjM//M3Z+uJdzUhH0zzWw/wkgcvwVGEy44ngXOrmMInIsJ49sdn7bsk2jiyPGEwUjPzoj7EtaXpi4hjDLeAdiXMB7ahe7+WC3vd3MgNRL5IsJcX+cTSk3HATVmtpm7H2Jmo4FfAJsRvg9/B34MHApcCLQws8nuvl3GsRlJmDtre0JJ8Hp3vznt836ZMGzU5oSah5PdfWotsfYHjiZttHQz+z5wAeHCcDJwiru/W89xTM1RtDvwBeG7d1oUQ+b7qC/2fxPmQhoWHZtLgZuALaP3daS7f2Fm7YArgSMIA+w+DpwTfT/HACdHb2kLwkXJSOCXhNLzh8BF7v5MtN9hwDJ3n9vA3/zdbFgzsZwwTuCOwDTgp+7+ShTHXcCHZnZdMY6ioyv2+HYjzBT5lZOUu18Rswh+KjAQGAwMJQxF/xN3n0BIVFOi5NSGcGL7gDAA477AUYSqxZRTCPMU9SJUz4wjnHB6EwZ7TZ3YzgSOJ1RnDCJ8yR9M287Q6D31j7ZxP/Bzd+8abeP3ZrZBCcHdJwMLgVSp8RuEuXD2iR4fDDwZjYz+GHCTu/cm/Li3AH5U1wcUnSieJMxN9Wgdqx1MOJHsEMXwvWj5TYSkNRg4JHrfjbU3Idl0JySKR8xsSC3rjYz+H+jurxGm59gGGEH4bNtR98R+h7DhsQDA3WsIM5fGqX46kpCUuxHm6rmljhG1f0cYCLg74b0dA+zh7tdF8d0cJachhFqCs929O7BTFOdh0fG4EnjK3bdL33iUDMYRjl0vQoK5yMzSS3snRssHACsIJ/nafA/4t7uvjLa9P3ADcBLh+P4LqOu7ke5XhGrX3oTjMRL4bub7iBn7qcB3CL+h7Qgj/h8DDCEk3DHRelcTEsGOhIuy3mw4keFuhMkeNwHmALcDh7p7N8J35/dpx+/bhHm3UuL+5jOdSEj2PYH/Ei60AYiS0oTovRQdJaj4egGL3X1NE7axlHCCPppQrXOQu19ey3p7EEZFPt/dV0cjJl9G+IGmPO7ub0WDur4GPB89Xgk8T/gBQLhiu9TdP4rWPY8wyOXQtG3d7+6ronroL4BjzGwPwpVid3dfXkuMTxOSHoQE+ic2TFBPEJLWTu7+UJSs+hESZF0jgm9FSMyXu3u22Xx/5+5LPMxhNR7YPErqRwC/dPel0Wd2TZZt1OcT4Cp3r3T3vxJKSt/J9oLo6vkIwnGb52G6658C+5vZgFpe0g+YW8fm5hCqkOszwd2fjr6X90Wvqa3KcSkhMR1COGkPrqPddA6wtbu/bGZdCN/7hdR9zFIOBea4+3Xuvsbd32Z9Ukm5z92nRdV2jxJO7LXZB3gz7fFxwL3u/rK7VwNXAd8zs/rOX0sJiWI0oSS4fWZtQANiv8vdP4lO6P8llNo+ih6/RhhIt4JQU3FudPyXEkqiY9KmJVno7s9E343VwBrgB9G4dncBw6ILFAjHKj1Bxf3NZ3rK3d9099WEC6LMz/11YM86XltQSlDxzQF61NZby8y6WLx5ce4kXGH9lFB9NjGqzsrUm/CDSU+GnxKu3lLSB3CtYsMG+mrWH9shhGrIJWa2hFD1tQbYOHp+WUYC2o9QUnw82se1dfRQewrYz8xS1UB/BvYxs36EqqHn3b0KOMjMPgHeJ1wxd6Xuuv+9CdU3x9Zz8pmX9vcawrQPPQillZlpz03Pso36fJR2oiDabn0JoxuhWuez1AJ3n0uozh1Uy/rzCKW92gyh7uSVuY2U1PelZS3rnUo46d9AGNj0sehYZVoDnGRmswkjdv+MUDVbX3tNb9Led+RTNnzftR232gwkVK+m9CHtWEYXDW9EySqbywglnYsJ1XbPm5k1MvY4v7dehM/q2bTf2xuE95oqfa97X1GiHkVIGOMJ55gLzKwi6sDQP6N9L+5vPlN9n/scwmdedJSg4nsVWEUoHWS6mtBmAuGLkz5Nevr8MFsSZqndnnCye4Vw1ZtpOtDfNpxufVM2/KLFHeV3NqFao2vqH6HaJnX1vG47UTvbAHc/ilAd8C3gWEL1YqZxhCqMIwntWm8RTtCnAc9GbVO7EtqfDnT3we5+CNmnZ7iDcDXbn1A12RDz+WoiyPajy3acIFRDpRvChjOG1mZeFMPGqQVRe0pbNjx2KX8HTsyskosejyG3079sB1wctcdtQ7hQqK30fjShxLKju2/m7t8llETqM531J+GUzO9sXJkn21mkHUsza21mY6MSXrbjOBz4o7tvSTgm8wnzNjUm9ji/t0WEkc13Tvut9SFUR6fmjUr/vXUDWrr7oYTfzvcJ1ZK7A99k/TmlITE0RkuKdKJWJaiYPEx9fj5wm5kdamatzKyDmZ1DqDO/LFp1GqHU0De6Cjo9bTPHAPeYWU/CVewX0f8QTmydopLDm4Qf5W/NrF1USvkldbdlZPNn4GIzG2RmLc3sfOAlYKNa1m0FPGFmRxN+DDOi/7/SeBpVFzwP/Bx4LiotjSfUg6eqJboQTjarzayFmR1B6MDQJnN7kcqoNHca8OvofccS7f9e4NKoRDuYUF9fl2nA4WbWNVr3+xnPb2lmJ0fH+Vhga2pv90h1z+0SXdHfRzhuvaNOGzcAr7l7bYn5YkI131/MbLPoM9qMUA3Th/XfqVy4ErgsuuiZxfopIlLvoUvqfRBOVl9GieCnwLasP2bp66b7B9DTzM6OXrc9oRG/Md/ZGWxYpXg/cLyZ7Rx1+vk54eJpGdmP41nAjVEb6nzCBWZt7zknsUffwfuAq8ysR1SrMpbQtlWbXoTS1l5Rbckswu/tc8KF2hN1vC7X+lH/xVdBKEE1gLvfRvjiXkj4ws8kXOkckFaf/0dCgplKqNt9JG0TVxLumXmfUDzfjdCACaFEs4ZwtdqB8AM0QgnoZcLV9sWNCPu3hN5LL7L+i3+A1zJbblQvPprQW2oZoYR3k7tnXsmlPElodH8uejyODTuS/IvwI59EaHv6MaFBf5tsAbv7k4QJ8m6vo8G/LucS6vVnRa9/kXAirs2vCZ/19Oh9ZLZNfEBoW1sYbfdb7j6nlu3MJVR3vm9m3yQk6PcIVZXTCSf7Wjs7uPvnhNLsbMIx+oLwGc4hlGByOQ/XGEIJfj7hZDSH9SWovwKHmtnLhAuat4GPCZ/jKOAB1h+zp4ChZrbBCS16LwcSJu5bSPi+Xh39ZhpqHLBr2rafI3yu9xASzP6EThs1ZD+OZxPOcdMJ37+urL/Xa937yHHsZxHOC5MJJbBhhLbmr5RQ3H0a4Tdxu4X7yf5OOL98QOiZ16R7Kxvga4ReikVH80FJybAwod7EtN5fPwFOcPfdGridMURdlXMfpdTHzAYSLmo2rqODjuRI1IPxPWBobRethaYSlJSSC4FfRVWZfQlXp88UOCZpIHefSajmHFPgUMrBycAtxZicQAlKSsuphHujFhFuXBxP6JIszc//EbqSdy50IKUqags/hND0UJRUxSciIkVJJSgRESlKSlAiIlKUlKBERKQoKUGJiEhRUoISEZGi9P885Maz2f4szgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(sweep_p1(linspace(0, 1, 11)), label='Olin')\n", + "decorate(title='Olin-Wellesley',\n", + " xlabel='Customers walking up to Olin station (customers/min)',\n", + " ylabel='Number of unhappy Oliners (Oliners)')" + ] + }, + { + "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": 77, + "metadata": {}, + "outputs": [], + "source": [ + "def sweep_p2(p2_array):\n", + " sweep = SweepSeries()\n", + " for p2 in p2_array:\n", + " state = run_simulation(0.4, p2, 60)\n", + " sweep[p2] = state.olin_empty\n", + " return sweep" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(sweep_p2(linspace(0, 1, 11)), label='Wellesley')\n", + "decorate(title='Wellesley-Olin',\n", + " xlabel='Customers walking up to Wellesley station (customers/min)',\n", + " ylabel='Number of unhappy Wellesleyers (Wellesleyers)')" + ] + }, + { + "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": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "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": 32, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/code/chap04.ipynb b/code/chap04.ipynb index 138fc23f..3ffdcd6e 100644 --- a/code/chap04.ipynb +++ b/code/chap04.ipynb @@ -669,7 +669,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/code/chap05-mine.ipynb b/code/chap05-mine.ipynb new file mode 100644 index 00000000..3272cd07 --- /dev/null +++ b/code/chap05-mine.ipynb @@ -0,0 +1,1682 @@ +{ + "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": 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": [ + "## 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": 4, + "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": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 5, + "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": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
United States Census Bureau (2017)[28]Population Reference Bureau (1973–2016)[15]United Nations Department of Economic and Social Affairs (2015)[16]Maddison (2008)[17]HYDE (2007)[24]Tanton (1994)[18]Biraben (1980)[19]McEvedy & Jones (1978)[20]Thomlinson (1975)[21]Durand (1974)[22]Clark (1967)[23]
Year
195025576286542.516000e+092.525149e+092.544000e+092.527960e+092.400000e+092.527000e+092.500000e+092.400000e+09NaN2.486000e+09
19512594939877NaN2.572851e+092.571663e+09NaNNaNNaNNaNNaNNaNNaN
19522636772306NaN2.619292e+092.617949e+09NaNNaNNaNNaNNaNNaNNaN
19532682053389NaN2.665865e+092.665959e+09NaNNaNNaNNaNNaNNaNNaN
19542730228104NaN2.713172e+092.716927e+09NaNNaNNaNNaNNaNNaNNaN
\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": 6, + "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": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
United States Census Bureau (2017)[28]Population Reference Bureau (1973–2016)[15]United Nations Department of Economic and Social Affairs (2015)[16]Maddison (2008)[17]HYDE (2007)[24]Tanton (1994)[18]Biraben (1980)[19]McEvedy & Jones (1978)[20]Thomlinson (1975)[21]Durand (1974)[22]Clark (1967)[23]
Year
201270138713137.057075e+097.080072e+09NaNNaNNaNNaNNaNNaNNaNNaN
201370921280947.136796e+097.162119e+09NaNNaNNaNNaNNaNNaNNaNNaN
201471699681857.238184e+097.243784e+09NaNNaNNaNNaNNaNNaNNaNNaN
201572478927887.336435e+097.349472e+09NaNNaNNaNNaNNaNNaNNaNNaN
201673259967097.418152e+09NaNNaNNaNNaNNaNNaNNaNNaNNaN
\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": 7, + "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": 8, + "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": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
censusprbunmaddisonhydetantonbirabenmjthomlinsondurandclark
Year
195025576286542.516000e+092.525149e+092.544000e+092.527960e+092.400000e+092.527000e+092.500000e+092.400000e+09NaN2.486000e+09
19512594939877NaN2.572851e+092.571663e+09NaNNaNNaNNaNNaNNaNNaN
19522636772306NaN2.619292e+092.617949e+09NaNNaNNaNNaNNaNNaNNaN
19532682053389NaN2.665865e+092.665959e+09NaNNaNNaNNaNNaNNaNNaN
19542730228104NaN2.713172e+092.716927e+09NaNNaNNaNNaNNaNNaNNaN
\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": 9, + "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": 10, + "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": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census = table2.census\n", + "census.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": 11, + "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": 12, + "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": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "un = table2.un / 1e9\n", + "un.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "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": 13, + "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": [ + "absDiff = abs(diff)" + ] + }, + { + "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 = absDiff / un" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "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": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "percentDiff = relDiff * 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": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.557628654" + ] + }, + "execution_count": 27, + "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": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1950" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_0 = get_first_label(census)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2016" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_end = get_last_label(census)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "66" + ] + }, + "execution_count": 24, + "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": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.557628654" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_0 = get_first_value(census)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.325996709" + ] + }, + "execution_count": 29, + "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": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.768368055" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_growth = p_end - p_0" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.07224800083333333" + ] + }, + "execution_count": 31, + "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": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
\n", + "
" + ], + "text/plain": [ + "Series([], dtype: float64)" + ] + }, + "execution_count": 32, + "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": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
19502.557629
\n", + "
" + ], + "text/plain": [ + "1950 2.557629\n", + "dtype: float64" + ] + }, + "execution_count": 33, + "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": 34, + "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": 35, + "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/5cYbbwTg0ksv5Sc/+QkHDx7E6/Xys5/9jMsvv5zR0dFJ29zd3c0Xv/hFdu3ahdVqJS0tDZPJRFxcHDk5ObhcLl588UW8Xi9PPfVUYNHeya4TQswMn89HXV0duzuhvtdNhzeaPlsa7QM+0tIz2bJlC0VFRfM+OMEs9qC01r8Efjn+Xim1BngF+PpstWE+uPHGG7FYLFx33XV0dXURHh7OGWecwZNPPhkYnrvyyiux2+08/PDD3HrrrRiGwYoVK7jjjjvYtGnTUev97Gc/S0xMDI8++ijf+MY3MAyD0tJSHn/8cdavXw/Atddei8fj4fLLL6e3t5eioiIef/zx4y7Qunz5cu666y5uv/122tvbSUhI4Fvf+haFhYUAfOtb3+L+++/n29/+NpdccgmnnXZaSNcJIU6eb3SI4br3iCw6ndb2DioqKhgeHgZMxOYqOlr6sZgiSErLI29Fyawn254M09Eeus80pZQVeB/4idb6JyGcnwfUv/baa2RnZx9xvKKigpKSkmlvp5hd8v9RiNAZhsFoUwVDlW/TNzTCflMSg+YoJj7ejY6OJiE1F6cRwdqSNMIsczcvrrm5eXwEaLnWuiGUa+aqj3cjMAI8PEf3F0KIBcsz2MPgh39joP0AdT2jHOx3MeTsxUjKIy05FpvNRlFREbm5uQt6l4dZD1BKKRv+Yb1/1VrPfvdNCCEWKMPnZaT2Pfqr32F/zzDN/S7cHh+9wz6GbEl4BrysXLmM01aXLYodHuaiB3UB4AP+dw7uLYQQC5K7p5WBD3bQ1NpGfY8Tt8///T48PgW3LRzDFE1UbCbRicsWRXCCuQlQlwDPaa19xz1TCCGWOJ/byXDVLg5Uvk9t9yhDLh+YwGyLwJqYQUJKGqtzVrBv/whnn5pFYuzCmQRxPHMRoM4Abp+D+wohxILTWfUe+3btpmvYzYjTi8+AhMwsopIzKSkpISsrC5PJRP7U0zLnvZAClFLKAqwF1gGpgBdoBXZrrd+b4j3zgJYpXiOEEEuK0+lEa03j/nZG3Bb6B4dwmu0M25Ipyj+VM9adgsVimetmzqhJA5RSKgH4MnA9kATUAV2ABUgGcpVSB4FH8E8Z7z3eDbXWUSfbaCGEWIwMw4dndISG5hZqamoCy6LZkjLBiGLUnEp4TAYjpvhFH5xgkgCllNoOfAd4Dfgi8KrW2nnYObHA2cDlwIdKqdu01k/NYHuFEGJRcvd1UvvWy9R2DOKJy8RsPpTQlJa1jA1nn8+r77SxrjQNlZMwhy2dPZP1oNYD67XWHcc6QWvdj3823v8qpTKA2wAJUEIIESLD66Zl7xvse38v/aMeRkY9DPQa5C7PJiYmhtLSUlJSUjCZTFx+QcKSWmj5mBlcWuubJgtORzn/oNb6S9PTrMUrlC3fH3zwQVatWkVNTU3QOUfbHHDc888/T0lJCWvWrGHNmjWsXr2aj3/84zz++ONBW3Rs2bKFVatWBc4b//Oxj30scM7+/fu58cYbWb9+PWvWrGHbtm3893//91Hve+GFF3LOOecELRgrhAhNb2MVbzzzc97atYeBUQ/9Qy5G3T58Xh8xybls3ryZ1NTUQFBaSsEJpjCLTymVCqwCrEDQ35LW+sVpbteS53Q6ueWWW3juueew2WwhXVNUVMTvfvc7wL8Myt69e7nlllvo7+/nK1/5SuC8H/zgB0esej7O5/NxzTXXsG3bNr7//e9jt9t57733uPHGG7HZbHzmM58JnDu+CGxKSgqvvPIKF1100Ul8YiGWDudgHx/ueImGxkZ8498fTSbCo6LptuZijsvFZ41fcgHpcKHO4vsi/mWJjpb9ZeCfNCGm0caNG2lpaeFHP/oRt95665SvN5lMnHbaadxzzz1ce+21fPGLXzzuorAAPT097N+/n23bthEREQH4t/O49dZbcblcQec+++yzfOQjHyEpKYmnn35aApQQx+H1eqnZ8wYV77+Le+K+cGYLOQXFlJx+Dq+/187KFcksz5yfezTNplB7UF8Hfg58Q2s9MIPtmTZDVbsZrnknpHPty0qIWRm8XfrAvh2MNh05FHe4yIK1RBWtP6E2TlpvZCT33XcfV1xxBZs3b2bDhg0nVM/GjRsxm83s3bv3qFvCHy4pKYnTTz+dL3zhC1x88cWBYb5LL7006Lzu7m5ee+01XnrpJWJiYrjvvvvYt29f0D5XQgg/wzBoaz3I3td+z2B/P26Pl1Gnl+hIK0mp6Zx6zkdJSssA4JJzYua4tfNHqKsILgP+c6EEp8Xi1FNP5brrruM//uM/6O/vP6E6xvdfGhwcDJTdcsstgU0Dx/889NBDgeOPP/4411xzDR988AE33XQTZ5xxBjfccAOtra2Bc1544QU2btxIRkYG0dHRXHzxxcd8TiXEUtbf38/bb7/N7j3vMOqzMDziZnDYjQ8LccvXseWftweCkwgWag/qFeB8oHoG27IkhLrl+7gbbriBN998k7vuuivo+U+ovF4v/f39ZGQc+gH4/ve/f8xnUONtvOKKK7jiiitwuVy88847/OhHP+Lmm2/m2WefxTAMnnvuOdrb2znrrLMA/zMzp9PJrbfeSlJS0pTbKcRiMzo6itaapqamwESlsLhUbAN9+CISGEpaRbMnArfHh80qT0mOJtQA9T7wA6XUxUAVEPQwQms99YckMyyqaP1JDb3FrNx8xLDfdAhly/eJLBYL999/P5dccgmRkZFTvt+uXbswDIOioqKQzn/22Wd55plneOGFFwB/sNq4cSNWq5Wrr74agLfffpve3l5efvnloKX8r7vuOp555pnADr5CLEVer5fqynL0uzsxx6aA2R98TCYTufn5FGw9nz/taSMn0srGlRkSnCYR6hDfZmAnEAGsZixHauzP0ec9i6MKZcv3w+Xk5PDNb36T5557LuT7+Hw+du3axe233851111HdHR0SNdt3ryZxsZG7r33Xrq6ujAMg6amJp544onAdvPPPvssF1xwAWlpaaSkpAT+/NM//RPPPPOMTDkXS5L/Z6WRV154ln1/ewVnfzcdTY14PD5SU1PZvHkzK1euJCIqmk9sWs7563OItC+OVcdnSkg9KK31eTPdkKUilC3fj+bTn/40O3bs4O233z7mOVVVVaxZswaAsLAwsrKyuPrqq7nsssuCzvvqV7961GVSXn75ZdLT0/nVr37Fgw8+yLZt2xgZGSEhIYELLriAL3/5y3R1dfHqq6/y5JNPHnH9tm3buPfee/nTn/7Etm3bQvwbEWLh6+rqYt87u+jaX43PPYrb7WVo1IPV5MJkTTxikpNlDne2XUhC3vJdKZUGfAkow9/zqgB+rrWum7nmBe6dh2z5vujJ/0ex0AwNDeH4cB9Neh/ewZ5AuckwMDwWBpJOZTg8mU+fX0Ra4tSH6BeTGdvyXSl1OvBnoAl4C3+i7jbgJqXUuVrrPSfUYiGEWIBcLhdVVVXUOd7H1d2K4fMCYDbBsjg7xWs3srs3mZGuES46NWvJB6cTFeokiQeA/wdcP3GbdqXUQ8D9gAwBCiEWPZ/PR0NDA7p8H8PtTfhGh3F5vJjNJrJiw1GFK0g+9VwskbGc5fJgMZuxhslw3okKNUCtA66eGJzGPAiElg0rhBALlGEYtLW14XA4GBoawjc8hGdkiKERN1YM0uKiWf+Ri7Fn5AeWJ7Lb5mI/2MUl1L/Bg/g3GtSHlecDkrwrhFi0ent7cTgcdHV1BcrMkTFExMQR5e1iODqfqugiMkbjKVvia+dNt1AD1NPAz5RS/waMTyPbCPxw7JgQQiwqIyMjVFZW0tRQh+HzYrb516a0Wq0UFhaSk3Y27+tWdtU7WV2UQuGy+Dlu8eITaoD6LpAJPId/Bp8JcOMf4rttZpomhBCzz+PxUFtbS21NNc6edjwDXfiwYCTlcUppEUVFRYEdBk49NZb8QheJsfY5bvXiFGoelAu4Ril1C6CAEaBGaz0yk40TQojZMp6UXllZyUhvJ+6eNnweFyNOD1afj/AoN6q4BGvYoRzCMItZgtMMmmzL9wuBP2ut3WOvD7dMKQXIflBCiIWts7OT8vJy+ro7cfe04hsdAiDaaibOZ8JrS6QlLJ3djjbOXJU5x61dOibrQf0RSAfax14fi+wHJYRYkAYHB3E4HLS1HsTT34VnoAsMg3CLibz4cDITY+iKL+PP9VayUmNQuQlz3eQl5ZgBSmttPtprMT89+OCDVFRU8PDDD0963ng29+7du0PawFCIxWg80bahoQHvcH9gOM/wGeQnRbAsNpzovDIii9aTZA3Hnj1ATnrMkt/hdrbJRH0hxJLh8/mor6+nurrav6ixz4ur6wAulwer10uyFXIyM0lcsxlrXGrgutwM+TI3FyZ7BtWBf/juuLTWqcc/S4C/B3PppZdy880388gjj+B2u7npppswm8088sgjuFwurr/+eq666ireeustHnjgAerr68nKyuLGG2/kggsuCNRz22238cEHH5Cfn09+fn7QfZ577jkef/xxuru7WbVqFXfeeSfLli2bi48sxJwzDIPW1lYcDgfDw8OHDpgtpGYvx9dcjdcIpzW6GLftFC6Ik19p88FkPaivE2KAmm9qa2upqqo66saA0y0sLIyioiJWrFgR8jUDAwN8+OGHvP7667z66qvccsstXHLJJbz22mu88cYb3HTTTaxcuZLrrruOe++9l49+9KPs3r2bG264gZSUFNauXcvNN99MaWkpP//5z9Fa88UvfpF16/w7n7zyyiv8+Mc/5tFHH6WwsJAnnniCa665hj/+cbJHiUIsTr29vZSXl9Pd3Y3hHsVk9c+6i4qKorS0lNSUZA7sfZs/1IYTGRVJQY48Z5ovJnsG9eQstmNa1dXVzUpwAn/ORF1d3ZQCFPh3yh3fDNDr9bJ9+3ZsNhvnnXceXq+XX/ziF2zYsIELL/RPoNy4cSOf+MQneOGFF0hNTeXDDz/ksccew2azsXLlSi655BIOHDgA+HtP27dvp6ysDIBrr72Wp59+mp07d5Kbmzu9fwFCzFMjIyNUVFRw4MABDLfTPzvPOYw5JZ/T1q0lNzc3sOHmsnWb+EhaD3kZsUHTyMXcmmyIL+Td8bTWU9+LfAbl5+fPag/q8OG1UMTH+7POx/dliomJAQj8wIyOjpKVlRV0TXZ2Njt37qSjo4Pw8HASEhKCjo0HqJaWFh5++GF+9rOfBY673W5aWlokQIlFz+PxUFNTQ11dHV63G09/B56Bbnw+H3afD1N3J5GxqUG7QQMULpOe03wz2RDf0Ky1YpqtWLFiyj2a2Xa82UDr1q1jz57gXUyamppITk4mLS0Np9NJV1cXSUlJALS1tQXOS01NZfv27UEbFdbW1pKZmRm0npgQi4lhGDQ2NqK1xul04h3qxdPbjuHzkhwZRrjbjdMJXdZY/ra3kX8+v1hm5c1zkw3xfWE2GyKCbdq0iUceeYQXX3yRj33sY+zatYs//OEPPPTQQ2RlZXH66adz7733ctddd7F//36ef/55TjvtNAAuvfRSfvrTn7J+/Xry8/P54x//yDe+8Q3++Mc/EhYmEzfF4tPe3o7D4WBgYACfaxRPTys+1wgxNgsrEiOJt4fhjU7jxZYUnNYY1mYk4PMZWCwSoOazyYb47gPu0loPjb0+FkNr/e/T37SlLSwsjIcffpgHHniA2267jbS0NO666y42bdoEwA9/+ENuu+02zjzzTDIzM9m6dSvd3d2AP0D19/dzww030N7eTk5ODj/5yU/Iy8ujubl5Lj+WENNqYGAAh8NBe3s7+Ly4e9vxDvViwaAkKZLU6DAsEdFEF2/ElrGCTU29pCVGEhcdPtdNFyGY7Ov0esA64fWxhDzTTymVAfwU/waHo8DPtNa3h3r9YpCdnY3Wh3YtiY2NDXoPBL0/66yzjlpPcnIyjz766DHvs337drZv337c+wuxEDmdTrTWNDY2Yhj+X0GurgMYo0PEmHzYPB4iLCaiCtYSuWINpjD/r7IimaG3oEw2xHfe0V6fpN/h3+AwDcgAdiilKrTWv5qm+oUQi5jX6w0k2k6cBGUymcgvXY2hd9I/4GYgPI23Lav4zIp1mGRH2wUr5AcSSqko4DKgDHAB5cCzYyudh3L9BvwbHJ6ltXYD9Uqpc/GvjC6EEMdkGAYtLS1UVlb6E219HjD7f32lpKRQWlpKbGwsvbFWXt43QKc5mRXp8bg9XtlyfQELKUAppVYCf8UfmD7AvyfUF4DvKKU+rrWuDKGatcA+4E6l1FX4h/ge1lo/cALtFkIsEd3d3TgcDnp6egADz0A3nr5OolOXceqZm0lPTwvMxosv3cD62F5sVgvL0mLmtuHipIXag/o58FtvgF7aAAAgAElEQVTgX8d6PyilIoDHgEeBzSHUkQicDezA35MqBl5WSh2UIT4hxOGGh4epqKigpaUFAN/oEO7eNsK8TlKtJrxt+znY7SYjI3gm3ops2dl2sQg1QK0Gto8HJwCt9YhS6m5gb4h1OIF+rfWdY+/fV0o9BnwSOOkAZRiG5DQsYD6fb66bIOYJt9tNdXU19fX1+Hw+DK8HT08rxugA2TE2Ys1W2ruHcVui+aC8kaL8dKIjrMevWCw4oQaod/H3fqoOK18HOEKsoxKIVErZJjy3mpakHLvdHkhalSC1sBiGgdvtpq2tjaioqLlujphDPp8vkGjrcrkAA09/N57+DlIjLSzPjCbCagaLlTprIQ1GJklxkYw6PRKgFqnJ8qBumPB2F/CQUmod8DbgBVYB1wP3hnivPwMdwANKqa/h3zr+i2N1nJTs7Gyam5vp6Og42arEHAgLCyMuLo7k5OS5boqYA4ZhBBJtBwcHgbHhvJ5WYsxe8lMjiI/w/6oKzywkuvgMThswyO4ZZmVBChazfCldrI63mvlErcAFY3/GdQL/AtxzvBtprUeVUpuBB4GD+CdJ3Ke1/p8ptfgorFYry5cvP9lqhBCzrL+/n/Lycjo7OwNl3uE+LH0HWR4ZhnPQxcgQJKemEV12FtZE/3brmXbITImeq2aLWTJZHtS0/8bXWtcBF013vUKIhWV0dBStNU1NTYFEW/D3potPXYe16u807G/Fawqj0cgnrfQjWBMlIC01kw3xfV5r/VSoFSmlTMAXtNa/mJaWCSEWHa/XS21tLbW1tUck2ubm5lJUVER4eDijMRaaRvZQ6VuOKTyS/mE3aUlz2HAxJyYb4lsz9qzoEeAFrfXBo52klEoFPgdcC7w6/U0UQix0hmFw4MABKioqGB0d9ReOrZ2XFGNnzdZLiY09tK26PbOQlR/PYcTRypmrMmUSxBI12RDfv41NirgD+JFSyoF/9YhOwASk4J9+XgS8BFyltd41800WQiwkXV1dOBwOent7A2Xe4T7Ch7ooiDHjGRpk904HW7ZuCJqFGx8Tzkc3yP5lS9mk07y11nuAi5VSy4GP459WXgD48E+a+DHwota6caYbKoRYWIaGhqioqODgwUODL4bHhXmgg/xwF6kpVmoP9OH2+Oh11VB3oFiSbEWQkPKQtNb1wMMz3BYhxCLgcrmorq6moaFhQgK2gTHYQ7rRx7JEK2FmGwCRsXF84M1nIDyN2AN9EqBEENm9TggxLXw+Hw0NDVRVVeF2uw+Vu0ZI8vSSG+XBHmYbKzURkXcKxXlrqHyjka3FqSjZCkMcRgKUEOKkGIZBW1sbDoeDoaGhiUeIdg+QY+7FZjPo7hklIzkaa1wy0SvPwRqXCsBlH1WyAow4KglQQogT1tvbi8PhoKurK6g8MjKSkpISIpv3cqCqjebeEbwmC+b8Ek4562xMpkNbYEhwEsciAUoIMWUjIyNUVlbS3NwcVG61WikqKiIvLw+z2Yw3IQZTXR39tmhaYk+hrjuWYi9Y5TePCMFUNixcg39PJyv+aeYBWmuZQCHEEuDxeAKJtl6vN1BuMpnIjo+kZO0ZhEdEBsotETEUXHgF77/VSqrdyrlrs2UDQRGyUDcsvA24G+gGBg47bCAz/IRY1AzDoLm5mcrKykOJtmNSE+NZZnRj7auifo/Bio3nYg2zBI7bYhO45NxoIsLDZDhPTEmoPairgdu11t+dycYIIeafzs5OHA4HfX19QeWxsbGsSAzHfrCc0eFR6jsGGarfSVdYGmdtPCXo3Ei7rAQhpi7UAJUEPDeTDRFCzC+Dg4M4HA7a2tqCyu12O4V5y4jr0niaDmIAI04Pw04P3RG5tDc5KVTDpCZGHr1iIUIUaoD6DXA5cOfMNUUIMR+4XC6qqqpoaGgIWmncYrGQn59Pls2Fs/rveLyHcp2S0lKpTdhI20A4a1UqiXH2uWi6WGRCDVAjwDeUUp8GqgHXxINa689Md8OEELPL5/NRX19PdXV1UKKtyWQiOzubwpws3NX/YLjjAIZhYLGYAROR+auJLFzHmaM+1nu8JMVFzN2HEItKqAEqEvjVTDZECDE3DMOgtbUVh8PB8PBw0LGkpCTKysqINJz07fw9g4PDHOgYJCI8jLz8ZcSs3oI13p9wGxs1F60Xi1moa/F9YaYbIoSYfb29vZSXl9Pd3R1UHhUVRWlpKWlpaZhMJgyfF1dYJA0HWwFosWUTk3c+ifEpc9FssURMJQ9qJXArUAaYgUrgx1rrt2aobUKIGTIyMkJFRQUHDhwIKrfZbBQVFZGbm4vZPGG1B7OF1PUfpbXzBfZ6V+CLSgazZNuKmRVqHtTHgd8Df8Y/YcIEnAnsUEpdpLV+ZeaaKISYLh6Ph5qaGurq6oISbc1mM3l5eRQVFWExPIzWv09E/qlBeUthsUmU/tNV9H5wkNPL0mUTQTHjQv0K9F3gHq31XRMLlVLfwp/AKwFKiHnMMAwaGxvRWuN0OoOOZWRkUFJSQlRUFK6ORnref53url72OzrZctFWzOZDQcpuC2PLumWz3XyxRIUaoEqAo83Uewb45vQ1Rwgx3drb23E4HAwMBC8CEx8fT2lpKUlJSRheD4OOvzNSv4/GtgEGhl2YTe/wfoViTVnOHLVcLHWhBqhGYA1Qc1j5WqB9WlskhJgWAwMDOBwO2tuDf0QjIiIoLi4mKysLk8mEp7+LgfdewzPYDSawh1voGbVxIHYVrc3DrC4xgnpRQsyWUAPUT4BHlFLZwNtjZRuB24D7ZqJhQogT43Q60VrT2NgYlGgbFhZGQUEB+fn5WCwWDMNguP59hvUuDN+h51FZRcVU9iwjPzWRM05Jl+Ak5kyo08x/rJSKAb4BJI8VtwDf1lo/NFONE0KEzuv1BhJtPR5PoNxkMrFs2TKKi4sJDw/3nzs6xOAHr9PVWEeU3YrZbMJkthBVeib2ZaVc6htPxBVi7oQ8T3RsodjvKqVSgRGt9eGrmgsh5oBhGLS0tFBZWXlEom1KSgqlpaXExsYGytw9rXTvfJGW1i76Bl0kxdnJzs8jZvX5hEXHA2CxSK9JzL1jBiil1A3AL7TWo2OvDz8eeC37QQkxN7q7u3E4HPT09ASVR0dHU1paSmpq6hFbXFiiE+gf9dI36F+xrNKdRULBVhKi42at3UKEYrIe1NeBZ4HRsdfHIvtBCTHLhoeHqaiooKWlJajcZrOhlCInJyco0XYiszWc3E0X0v3iCzgsJSwrLCA5QdYpEvPPMQOU1nr50V4fTiklYwFCzBK32011dTX19fX4fL5AudlsJj8/n4KCAqzWQwm0hmHg7j5IWEJG0GQHW3IWpZ+6mtQ+J8szpeck5qdQV5KoA9ZprbsPK88E3gNSZ6BtQogxPp8vkGjrcgVtJkBmZiYlJSVERgbvv+RzDtO79zWaqqrozDiTLVvPCBrui4myExMl22KI+WuyZ1AXA5vG3uYB31FKDR92WsFUbqaU+hfgUWBiKvuNWuunplKPEEuFYRiBRNvBwcGgYwkJCZSWlpKYmHjEda6ORnr3vkZNfSsutw9j8E2ql+dSVJA5W00X4qRN1oN6H/g3/OvugT9Rd+JXNwMYBD4/hfudBjygtf6PqTRSiKWov78fh8NBR0dHUHlkZCTFxcVkZmYeMQHC8HoY0jsZadiHCYiyW3G5nfTaszF1OSma0ldKIebWZM+g9gNbAJRSTwA3a637T/J+a4H/PMk6hFjUnE4nlZWVNDU1HZFoW1hYyPLly7FYLEdc5xnoYeC9V/EMdAXKMjKSaUhYwSmry1A5CbPSfiGmS8j7QSmlwpRSWcD4T4YJCAfWaq3/3/HqUEpZgFXAlUqpHwDDwGPAvVprY9KLhVgCvF4vdXV11NTUHJFom5ubS1FRUSDRdiL/ihAf0rz7ryREWxnvVNlScohZdR4X2+xH9LSEWAhCnSSxDXgCOHKwG3qA4wYoIAXYAzwFfBL/ArS/A/qRaepiCTMMgwMHDlBZWcnIyEjQsdTUVEpLS4mJiTnqtT7nCC07X6GpogKn24vPG0lKYjRRJRux55RJYBILWqgrSfx/+LfU+AHwGnAxkA78EPhaKBVorVuBzROK3lNKPQh8CglQYonq6urC4XDQ29sbVB4TE0NZWRkpKZPvWGv4PPS3NOF0+9fSaxqwkL7lE0Skp89Ym4WYLaEutlUIfEdr/Q7wLhCltX4O+BKTJ/EGKKXKlFJ3HVZsw58ILMSSMjQ0xJ49e3jrrbeCglN4eDirVq1i8+bNxw1OAJaIGPLO+gh2m4Xe6Hwyzvss8WlpM9l0IWZNqD2oEWA8K7AKWA28BLwDFIVYRy/wNaVUM/A4/lmBX8Yf5IRYElwuF9XV1TQ0NByRaLtixQoKCgoICzv2j6VzaABzeCTWsEOTJCKyiyi46EqKY5OJjznyGZUQC1WoAepvwO1KqS/jf450jVLqAeBc/M+QjktrfWAst+o+/EODncDdWuvfTLnVQiwwPp+PhoYGqqqqcLvdQceys7MpLi4mIiLimNcbPi+Nu9+g6b2dUHYBmzatDhwzmUwkZ2XNWNuFmCuhBqivAX8A/gV4BH9+VD/+IbrbQr2Z1vovwLoptlGIBcswDNra2nA4HAwNDQUdS0xMpKysjPj4+Enr8PR3cvAff6K+ugEA577XOVCQQ1a6TBsXi1uo08xrgBKlVITWekQpdTpwHtCptd45oy0UYoHq6+ujvLycrq6uoPLIyEhKS0tJT0+fdJad4fMyUvseQzV7sPsMYiKtDAy7wRaBc8R5zOuEWCwmW+oo8jjlr4+/11ofvgSSEEvW6OgolZWVNDc3ByXaWq3WQKLtsVYaH+fu72Jw31/x9I2tImGCzNQ46qwFrD/nbKIibDP5EYSYFybrQQ3iX84oFEemtQuxxHg8Hmpra6mtrcXrPbSFuslkIi8vj6KiImy2yQOLx+3mwzd24N3/Hjmp0YGFxqzxaSSu3kJGlKw8LpaOyQLUebPWCiEWMMMwaG5uprKyktHR4KyJtLQ0SktLiY6OPm49o72d7Hzh1xhD/k0D+oasxMdGElm0nojlqzCZZAt2sbRMthbfjtlsiBALUWdnJw6Hg76+vqDyuLg4SktLSU5ODrmuMIuZhLBRxve06fREkXfWpwiLkckQYmkKdamj3Uwy3Ke1Pn3aWiTEAjA4OIjD4aCtrS2o3G63U1xcTHZ29pSXGQqLSSR3/SYG//Y6caVnULzxrKMuCivEUhHqNPM/HuW6fOAi4M7pbJAQ85nL5aKqqoqGhoagCRAWi4UVK1awYsWKSRNtx3V19+P4QHPmOeuwTNjpNrboNNZnF2KNnnzquRBLQajTzA9foggIbEB4MfCj6WyUEPONz+ejvr6e6urqIxJtly1bhlJq0kTbifbu3EvXu3/B7HXxQXwCa049tEmTyWyR4CTEmFB7UMfyF+DB6WiIEPORYRi0trbicDgYHg7OpkhKSqK0tPS4ibbjfM5hBh1vYa/dR5jXP5mibc9fGC3Nw2472R9FIRafUJ9BHS0nKg74FnBwWlskxDzR29tLeXk53d3dQeVRUVGUlpaSlpYW0nMmwzAYbapgSO/EcDtJiougb9CJERZOyaYzCbfKcyYhjibUr23HyokaBb4wfc0RYu6NjIwEEm0nslqtKKXIzc09bqIt+AOTrqgnqWsvDBzatt1kgoI1p5GwahOW8KPmwwshCD1AHZ4TZQAuoFxrPTC9TRJibng8HmpqaqirqwtKtDWbzeTl5VFYWHjcRNtxPb1DvPvaq5gPluOMsZGZ4s+DskTGEn3KOdiSs2fkMwixmIQ6SWIHgFIqGlCA11+sRya9UIgFwDAMGhsb0VrjdAavcZeRkUFJSQlRUVFTqrNr98tYDlYC0DPgJCE2gqTS9UQWnIbJIs+bhAhFqM+gwvHvens5/hXMAUaUUj8Hvqa19h7zYiHmsY6ODsrLyxkYCB4IiI+Pp7S0lKSkpBOqN+e0jfQ11TI47CY+cxmp516IPSH0pF0hROhDfD/Gv/fTZ4Fd+Hfi3QB8H3AC/z4TjRNipgwMDOBwOGhvbw8qj4iIoLi4mKysrJATbUdGXbg8BnHRhzYLtCVlkrt2I25rLOklq6actCuECD1AfQb4hNb6zQllzyuluoHnkAAlFgin04nWmsbGxqBE27CwMAoKCsjPzw959Qavz6D8vXI69ryON6OUj2zbEhSIklefPe3tF2IpmcqW7+6jlPcdpUyIecfr9QYSbT0eT6DcZDIFEm3tdnvI9flGh+h47w169ryDBTCa3qW+aSX5Oakz0HohlqZQA9Q3gMeUUtcBb2utfUqpU/A/l/ruxDwp2RtKzCeGYdDS0kJlZeURibbJycmUlZURGxsben0+L6P7yxmq3o3F4yYh1k53/yj2MDAP9wASoISYLqEGqB8B0cAbgFcp5QOs+HerOR34wYRzJetQzAs9PT2Ul5fT09MTVB4dHU1ZWRkpKSkhPxsadXroP7ifsMY9eAcP1ZeaEIEldTmFZ2/FFhV6oBNCHF+oAerSGW2FENNoeHiYiooKWlpagsptNhtKKXJyckJKtAXw+QzKK/fTtPN14l2tFGTHB4KaJSqeuLJNpEtOkxAzYqp5UBFAIf5ZfLWSpCvmE7fbHUi09fl8gXKz2czy5cspLCzEarVOqc7Bgw1073iWSK8XF9DdP0pyYiyRhWuJyFuJySwDBkLMlFDzoCzA/wVu5tDQnksp9STwJa21Z5LLhZhRhmGwf/9+tNa4XK6gY5mZmZSUlBAZeWJLCkWnZpKaHEdbWzfWMDO2zEISN5yH2T61xF0hxNSFOsT3XeAKYDvwJv4AdRb+PKg7xv4IMasMw6CjowOHw3FEom1CQgKlpaUkJiaGXN/wqJvO3hFy0g89SzJbw8lZfw68v4e8sz5CRHLmtLVfCDG5UAPUduBqrfWLE8qeU0oNAD9DApSYZf39/TgcDjo6OoLKIyMjKS4uJjMzM+QJEF6vj72OZg688wYWvKT+n89hDz/0oxGZW0pxbgkmU2jPrYQQ0yPUABUN1BylvA6Q9VvErHE6nVRWVtLU1HREom1hYSHLly+f0jbphuFjdP+HjL79Z+Kc/j2a3t3zIWeedWrgHH+gk5UghJhtoQao3cCN+J9BTfQl4J1pbZEQR+H1eqmrq6OmpuaIRNvc3FyKiooIDw+fpIYjuTqbGXK8hWewm4x4K01to4RbLaTTOd3NF0KcgFAD1L8Df1VKnQu8PVZ2BpAHXDD9zRLCzzAMDhw4QGVlJSMjwYvnp6amUlpaSkxMTMj19QyMcrC5lezhSpxtDYHy2Egby3IyyFp/HuHpedPUeiHEyQh1mvkepdRpwLVAKf6lj/4A/ERrLTvqihnR1dWFw+Ggt7c3qDwmJobS0lJSU0NftcHr9fHmu410fLiLpOFaYrNjAzvZmixWIgtOI3n5Kpk2LsQ8EvLGNFrrKuAWpVQS4NVa9x7vGiFOxNDQEBUVFRw8GPzdJzw8PJBoO+XVwd0jhJf/geShfgDauofJSYvBnlVEpNqARaaNCzHvhByglFK3A9cDaWPvm4Afaa1/NENtE0uM2+2mqqqKhoaGIxJtV6xYQUFBAWFhJ7bZnzk8kuzly6jZV05URBhpy5YRv/ZcrAnp09V8IcQ0CzVR97v4h/fuIXg/qG8ppaxa6/tDvaFSKh74ALhDa/3klFssFh2fz0dDQwPV1dVHJNpmZWVRXFw8pUTbg51DNLT0sXHVoZwlk8lE+tpzYaiHpJVnYM8ulj2ahJjnQv06ejXw+cPyoP6ulKoBfgKEHKCAR4CsKZwvFinDMGhra8PhcDA0NBR0LDExkbKyMuLj40Ouz+cz+PPOBrqq3idhpJnGlMvJyUgIHA+Ljifrgu3ynEmIBSLUABUGNB2lvAYIeQqVUurzQCywL9RrxOLU19dHeXk5XV1dQeWRkZGUlpaSnp4+5R6Ot/cgSftfJXzAv0tuxd/fIOefLw46R4KTEAtHqAHqfuBhpdTntNZNAEqpROB7+Jc7Oi6l1HLg28CZwMsn0FaxCIyOjlJZWUlzc3NQoq3Vag0k2oa60vg47+gQQ5X/wNlSQ2akjxoTxETaSI8fxDB8sgKEEAtUqAHqs0AJUDc2OcID5AA24Ayl1JfHT9RaHzH3d2yx2f8GbtFatyqlTrrhYmHxeDzU1tZSW1uL1+sNlI8n2iqlsNlsIdfX3jNMeU07pyf0MFL7LobXv+GzNcxMUV4ysWodEctXS3ASYgGbyoaFJ+N2QGutnz/JesQCYxgGzc3NVFZWMjo6GnQsLS2N0tJSoqOjp1TnG+8doK68gvT+DzmQCAkxh7ZqD0/PJ6pkI5aI0JN3hRDzU6iJuk+d5H0uAzKVUp8cex+Df8jwdK31DSdZt5inOjs7cTgc9PX1BZXHxsZSVlZGcvKJLeMY27KL3B4HAB3dZuKj7VhjEokqPRObbB4oxKJxYkklU6S1Lp74Xin1Hv4cqidn4/5idg0ODlJRUUFra2tQud1uRynFsmXLTmqKd35hHh/sryTcZiEjLZ6Y0jOw55bJBAghFplZCVBiaXC5XIFE24kTICwWCytWrGDFihVTSrQdHHbxTmU7Z67KwBp2KPhEr1hFQWMFkSkZRKkNmMNPbDNCIcT8NicBSmt96vHPEgvFeKJtVVUVbrc7UG4ymcjOzkYpRURExJTq3FfbyZ53q0juKWevdxOnry85VK/ZQurmT2MKm9r27UKIhUV6UOKEGYZBa2srFRUVRyTaJiUlUVZWRlxc3JTr9Xlc2A68R17bLkwYdO7dwdApK4iKODTLT4KTEIvfMQOUUuoXoVaitf6X6WmOWCh6e3spLy+nu7s7qDwqKorS0lLS0tKm/JzJMAycLdUMVb5N4ugwveEWfIZBXrIHm6sXIkJfvVwIsfBN1oOaOE/XBnwCqMS/eaELOA1YDfxqxlon5p2RkZFAou1EVquVoqIi8vLyppRo6/X6eL+6kxWJXozanbh7xiZWmPCvNp6cQcwpZxMWKxs3C7HUHDNAaa0/Pf5aKfUz/LPuvjrxHKXUPUDx4deKxcfj8VBTU0NdXV1Qoq3ZbCYvL4/CwsIpJdqCf1HX13dWY2/dh8nSRnbqoXwoc3gECas3Ep5ZKIu6CrFEhfoM6v/g7zEd7ingvelrjphvDMOgsbERrTVOpzPoWEZGBiUlJURFndheSp6OBtIaXsFiuOkDEmPtREXYsC9fSWTBWsxhUwt4QojFJdQA1QpsAaoPK98G7J/WFol5o6OjA4fDQX9/f1B5fHw8paWlJCUlnVT96ZkpdEaZGRg2kZoQSVxWHtFlmwiLDn0FcyHE4hVqgPoO8LhSagvwLmDCvx/UhcCnJ7tQLDwDAwM4HA7a29uDyu12OyUlJWRlZU1p2M0wDGqae4mPtpOScGi6uTUulWUr1+DtbiF+1dnYUnNlOE8IERDqUkdPK6WageuAK8eKPwDO0VrvnKnGidnldDrRWtPY2BiUaBsWFkZBQQH5+flYLFNbraFnYJQduxtw7f+AmIR4LrjkI0FBKHHVJkxmCyaLZDwIIYKF/FtBa/068PoMtkXMEa/XS319PdXV1Xg8nkC5yWRi2bJlKKWw2+2T1HB0hmHgbasjWr9EmHcU77CVqrqVqBUZgXPM1vBp+QxCiMVnsjyo+0KtRGt96/Q0R8wmwzA4ePAgFRUVDA8PBx1LTk6mrKyM2NjYE6rb3dfOkOMtjJ5W0qNNdPVBaqyFNHczkHHc64UQYrIe1PoQ6zCOf4qYb3p6eigvL6enpyeoPDo6mtLSUlJTU6f8nKnuQB8mzwgp/ZWMNlcx/k8jJSGChKQ4klaeRXh20XR+DCHEIjZZHtR546+VUlcCL2mtO2elVWLGDA8PU1FRQUtLS1C5zWZDKUVOTs6Ud7TtH3Lx6tv1uJv2kemsJzo7OhDcTCYzUQUybVwIMXWhPoP6MXAGIAFqgXK73YFEW5/PFyg3m83k5+dTUFCA1Xpi69uFOftIqH0Rk2sYL9DVN0pyfAS21FyiS87EEjX19fiEECLUALUT+CfgezPYFjEDDMNg//79aK1xuVxBxzIzMykpKSEy8uS2q4iIiycjKYq2g8MkxtlJzkgnbuXZsnmgEOKkhBqgfMD/VUp9C6gHRiYe1FqfPt0NEyfHMIxAou3AwEDQsfj4eMrKykhMTJxSnW6Pj/erO7CYYE1xWqDcZLGSe/pmYve9ScIpZ2BfVoLJNLVhQiGEONxUelCS77RA9Pf343A46OjoCCqPiIigpKSEzMzMKSfE9g44+f1fyonqqsBuOFF5VxJpPzQkaM8uIj09T6aNCyGmTaiJuneNv1ZKxQJmrXXvjLVKnBCn00llZSVNTU1HJNoWFhayfPnyKSfaAhgeN2EHP6Sg/XVcY+vxVbznYO0ZqwPnmEwmTBKchBDTKOREXaXU9cA3gcyx9+3Af2qt5bnUHPN6///27jw+7rJO4Phnck0mR9MkTdI0aQlNm286KYeUGxXWirocoojoCqjIoS7rrrjoLiKiK8i1y0uWXTwQXVlWeaEsdQHPBbmP5ZDSNsk3TUuaNm3akCbNfc3M/vH80sykbUhCk5lJvu/XK6+2v2d+v3m+neT3zfP8niPE1q1baWxsPGCi7bJlyxAR/P6pJY9wOIKPMAPNtfQ1vkZ4qJ/F+RnsbBumOD/A4ux9hzsMY4yJMakEJSLXANcDNwHP4tbiOw34RxHpV9U7Z66K5lAikQgtLS3U19fT3x/zWJDi4mKCwSC5ubmHOPvgOrsHeXFDCzm9OwimbSfUP/b8KjeQQfWqInKrTyajpOJwhGCMMYc02RbUVcAXVPUXUceeE5FtwI2AJahZ1t7eTm1tLZ2dsT2tubm5+yfaTlVndz+PrvsTRT0NjIR66SvPw5/hvkVSMrPJrjoBf1mVDYAwxsyKySaoItxOuuO9CthY4lnU29tLXTR+iuYAABO9SURBVF0du3btijnu9/v3T7Sd7orgOfRTPbSRntAwAN19wwSyswmsOI7Ashpb0NUYM6sme8fZiNtW4+Zxxz+B2wbezLDh4WEaGhpoamo6YKJtZWUlK1asIC1t8gkkHI4wMDQSMxIvLbeAJRKkRWspKcqjsPo4AsuPsRUgjDFxMdk72jeBx0TkFOAF79gpwIeA82eiYsYJh8Ns27aNhoaGAybalpWVUV1dPaWJtpFIhDd3drLhhZcJZPg489z3x7S4io85lbyiYpeYbFSeMSaOJjvM/A8ishb4Em4/qH6gDjhBVdfPYP3mrUgkwu7du6mrq6OnpyemrKCggGAwSH5+/tSuGQ6xt3ETWx5/nLxQHyFfOk0tx3Fk+djOuGm5BaSJzbs2xsTfRNttfAh4RlV7AVT1aeDp2arYfLZv3z42bdpEe3t7zPGsrCyCwSCLFy+e0nOm8MgQA8219DdtIDzQS3F2mI4uSPeNMNhcB+XvPtwhGGPMOzZRC+oxYEREXgGe8L6eV9XBWanZPDQwMEB9fT07duyImWibnp6+f6LtVFYa7+nqomvz62Ts3UJkeOxjK84P4EvLoPzYE1m48tjDGoMxxhwuEyWoRbi5TqcA7wauBlJE5EXGEtZLqhqa8VrOcSMjI2zZsoUtW7YQCo39d/p8PioqKqiqqiIjY/IDFXo72ql97hl6m+vJSI2wojyf0QZXij9AXsXRlBxRY4MfjDEJbaL9oDqAR70vRCQVOA6XsE4BPgcsEpFnVPXsWajrnBOJRNixYwf19fUMDAzElJWUlBAMBsnJyZn6hfe1Mri9DsJhhsLQ0TVAUWkJgeXHkFlWZcPFjTFJYdJ3KlUNicgOYBewB2gGioHlM1S3Oe2tt96itraWfftilwxasGABNTU1LFq06G2vEYlEaN/XR0pKCgULAvuPZy0V8gvyaGvrwJdTSOZRp5Jfs9om2BpjksqECUpEcoAzgPcDZwLVwHbgT8C9wKdUdechL3Dg9c4BvgsciUtyt6nqD6dV8yTV09NDXV0dra2tMcf9fj/V1dUsXbp0UgMgmra3sfH5F/C3b8ZfczrvPf34/WW+1DTKT3ofuUOplK+onPIOucYYkwgmGsX3DHAi0AE8iVvO6AlVbZzOG4lIKfAr4KOq+lsROQ63XNLLqvradK6ZTIaGhvZPtI0eAJGamkplZSWVlZWTmmg70tPJwLYNpDRuIqfNjfLr3foG4fesISVlLLHlVVRj+9gaY5LZRHfE04AdwE9wAyJeUNXh6b6Rqu4SkSJV7RaRFKAQGAG63+bUpBYOh2lqaqKhoYHh4dj/vvLycqqrqwkEAgc9d09HH/VNe9nd3suHjw4wsG0jQ23NAATSID01hVA4THFaLwP9/WRlv7OdcY0xJpFMlKCW47r21gJfBLJF5FngcVzCek1VIxOcfwAvOWUB+7z3vlVVN0+r5gkuEonQ2tpKXV0dvb29MWWFhYUEg0EWLlx4yPOHR0Kse6KenJ7tFPa9ye6uNAKZUR+XDypWLGNh1bvIKreBD8aYuWeiUXxNwI+9L0TkGOB9uIR1PTAsIk8Cj6vq3VN4zwEgGzga+I2IbFbVe6dV+wTV2dnJpk2b2Lt3b8zx7OxsgsEgJSUlBzxnikQiMcfSCHNi/7N0etu1d/UFvATlI6N4GYGKo0gvLJv2wrDGGJPopjKKbz2wXkTuBNYAl+KWPfoIMOkEpaphYAh4RUR+BJyHG3CR9Pr7+/dPtI2Wnp5OVVUVFRUVMQMWIpEILW09rG9oo7wkl2NWFu0v86WlU3TEciIjdeTnZpKdk0VgaTWBI1aTmm1Pl4wxc9/bJigRKQdOAk72/jwO9+zoedxeUE9O5o1E5HTgDlVdE3XYDyT91vEjIyM0NjaydevWAybaHnnkkaxcufKgE203b+/k8RcayO/fwbYd6RxVeW7MQIei4LsIhLoJVKzGXy42sdYYM69MNIrvIVxCKsUNZHgOeAS4Bnh1GitIvA6UichXcCMCTwIuAz46jXonhEgkQnNzM6rK4GDsClClpaWsWrWK7Ozsg5430rmborYN1Ox9lXAoRKg3nV1t76WsZOy5VHrBEvJP/6R14xlj5qWJWlB+4Hu4FtJrXtfctKnqPhE5C/hX4AbcfKrLVfWpd3LdeGlra6O2tpaurq6Y43l5edTU1FBYOLZCeFtHP280tnGiFJC2900GmusY6XHPpxYt8DM8EqIwL0DhyB5gLEFZYjLGzGcTDZI453C/mTffKamXzu7u7qa2tpY9e/bEHM/MzGTVqlWUlcUOXHj29R3ops0U9DezbXMnJQtj91gqyg+QvrCYzCNW419si3IYY8woG5s8SYODgzQ0NLBt27aYibZpaWn7J9qmpqYecF5px58Z6XgDgI5hH8V5Gfh8PnypafiXrCCwrIa0vKIDzjPGmPnOEtTbCIVCvPnmm2zevJmRkZH9x30+H0uXLkVEyMjw07y7m9b2Xk5eXRpzfuny5bTqRrL8aRTmBUhfsIjMZUH8ZStt0IMxxkzAEtQhRCIRdu3aRV1dHX19fTFlixYtoqamhgULFhAKhXnw0VdIad9K1nAHe5d+hoK8sZUhMstWIpWl+EsqyFwWJC2vyJ4tGWPMJFiCOoiOjg42bdpER0dHzPGcnByCwSDFxcVEQsMMbK9nYEc9Ve2b6eodAkA3KaecOrYJYEpaBoVrL8GXcmD3nzHGmEOzBBWlr6+P+vp6WlpaYo5nZGSwuKyCfUOZdLS2Edi1kaHWrUTCbqR9fq6f3oFhFuZkUpzRccB1LTkZY8zUWYIChoeH90+0DYfHRtOnpKS4bdbxs/HF/yNvoIV96SEKy2JXcsjJ8nPU8SsJLK0mo3jZbFffGGPmpHmdoA420TYcjpCS4mPJkiWsWrWKrKwsOutfZnf/ViIR6B+EwaER/BlppOUW4C8XMpesJMVvK4kbY8zhNC8TVCQS2T/RtttbjLWje5CungHCg8N87IKzKSst3v/63GXCgqwnwQf5BQvJqwwSWFpN2oLCQ7yDMcaYd2reJaiuri5qa2tpa2vbfyw80EOovY2loR4WpIbZ294dk6BSsxZQddoZpC8sIb2o3LZON8aYWTBvElRfXz8vvfoGjVubCGSkscAfJtS7D/q7WJabSlVhmN17I4CP3u2bYXVlzPnZVSfEp+LGGDNPzYsE1d3dza8f+192tu4lI9RHSko/g35YkptORWkmGakpjITCpPh8LCwuJq+qIt5VNsaYeW9eJKiWlhb8w/vIG9iJjwiZaT7WLM4n19uhNsUfIHfJSorKqkjNLbSJtMYYkwDmRYIqKytj17YiIu0tlOWmU7YwQHbAj790OZllVaQvKrPnSsYYk2DmRYLKzc3ljA+cRUdmFyn+LDLLhIzS5bYWnjHGJLB5kaDALe6af9oF+NLS410VY4wxkzCv+rUsORljTPKYVwnKGGNM8rAEZYwxJiFZgjLGGJOQLEEZY4xJSJagjDHGJKRkGWaeCtDa2hrvehhjjJmGqPv3pHdwTZYEVQpw0UUXxbsexhhj3plSYMtkXpgsCepl4D3ALiAU57oYY4yZulRccnp5sif4IpHIzFXHGGOMmSYbJGGMMSYhWYIyxhiTkCxBGWOMSUiWoIwxxiQkS1DGGGMSkiUoY4wxCckSlDHGmIRkCcoYY0xCSpaVJA5JRE4EHlXVYu/fRcCdwAeBQeAnwA2qGvLK7wMuBEaiLnO0qm4VkWXAvcDJwB7gS6r6mwSO5VSvfBWwE/i6qv7KK4tbLFOJQ0R+AFw87hLZwHWq+t0k/EwuBb4BLALqgb9X1We9smSL5UvA1UAh8DxwlapujWcsInImcAuw0nvf21X1hyKyEPgxcCbQA3xDVX/qneMDvgNcCWQAPwW+qqojXvmFwHdxqxw8BXxWVfckYixR56YADwFPqer3oo7/Be4zrQTWA5eo6qSWFUpESduCEhGfiFwO/AH3TTfqZ0Ax7qa9GjgR+Keo8uOAj6hqTtTXVq/sAeAN3A/kFcADIrJ8hkOZViwiUgo8BvwbkAtcBdzv3TjiEst04lDVL0R/FsBXgVovrrjEMd1YRORo4A7gPGAhcD+wzruZJFssFwI3AZd69f0f4I8ikhmvWERkKe6mfCPu//evgJtF5IPA93HLoJUCZwO3iMjp3qlXAufjfvZXAicAX/euGcQl2s96sWz2YptR7yAWRKQCeAT4yLhrLgLWAd/2rvkw8Puo77+kk7QVx30IX8R9wACISBbwIeBqVd2jqnuB64ErvB/SAFANvD7+YiJSBRwPfFNVh1T1CdwP5WUzH8rUYwE+DTytqj9T1Yiq/hF3g+mIYyzTiYOo11YCtwGfUtWuJPxMVjL2M+XD3WT6vXOTLZaPAfeo6lOqOqKq3weGgLVxjKUC+LmqPqyqYVV9GXgSWAtcAFyvqn2q+jpwDy4xAXwG+J6q7lDVNuBbwOe9souBR1T1WVUdAK4FThORlYkYi4jkAK/iWkfPj7vm+cAmVX1IVYdV9XbA710zKSVzgvqBqq4BXok6NhpPb9SxEFCE+43iWFzX3j0i0iYir4nIOd7rgkCzqkafWw8cNSO1jzWdWNYATSLygIi8JSJ/Bharajfxi2U6cUT7F9xNcb3372T7TH4PbAQ24G7mtwKfUNUwyRdLyriy0fIq4hSLqj6jql8Y/beIFDC2iHQE1/o5WH2CuFZ5dNkS7/yYMlXtA7aTuLEMAKtU9evA8LjLjo8TQJmd77EZkbQJSlV3HuRYD64b4zYRKRCRQuCbXnEA1xX2DO43yiW4LowHReQYIAfoG3fJPiBrZiKIqfd0YinAda3cj+sKuBl42GuFxCWWacYBgIisxvW53xp1erJ9Jpm4G8LJuOdo/4Dr4ltM8sXyEHCliBwvIukicgWu9yFAHGMZJSJ5uFbbS7gWxYCqRq98HV2f8fUd/XvWQcrGnzvjphKL15o91POxuMdyuCVtgprAJbjfXutwDzzXecc7VfUPqnqmqr7iNYEfAp4APoz7bTEw7lpZuIeU8XLIWHAPtX+nqo96sTwIvAb8JYkXy0RxjPocsE5Vd0cdS7Q4YOJYvgW0qupLqjqoqncDTcDHSbJYVPUB3C89D+BaFKuBPwIdxDkWr4vxRWA3rjusG8gc12UcXZ/x9R29YfccpGz8uTNqGrFMJBG/x96RuZigSoHPq2qJqq4GWoA6Ve0TkXNF5DPjXp+BazbXAsu851SjqjmwyTybDhkLrtmfP+71o6MyEy2WieIYdR4HPpxOtDhg4liW4vr8o43gumKSKhZvEM4jqrpCVRcDX8ElqVeJYywi8l5cS2MdcIH33Ggz7pnfkYeoTy0g48p2qWrn+DLv2dwyEjeWiYyPcyrnJqSkH2Z+EHcAG0XkGtw32q2MjQhLBe4UkTrcD9ongFOBy1W1WUTWAzeJyLXe8fOAU2Y7gCgTxXIf8DcicjHwc9xv6UcDF6rq9gSLZaI4Roc7Lweeiz5JVTXB4oCJY3kU12X2IG5TtouAGuCxBPxMYOJY1gI3iMh7gC5c999O4GVVjcQjFq/7+lHcFIS7Ro+rao+IPIwbBXcZboj1FbiReQD/CVwjIo/jWhnf8o6B+9l5VkTOAF7AtRr/rKoNCRrLRB7Gff9d6P3974AwbvBFUpqLCeoK3KiXvbhul7u8rhZUdZ2IXAf8AliMa4Wco6rN3rkfA36Em5PwFnCZqm6c5fpHmyiW9SJyFu6mcjfQDJyvqtu9cxMplkPG4akABr2RZOMlUhww8Wdyj/c84ee4eVC1wFkJ+pnAxJ/Lf+Eerq/H9TI8Dnw46tlIPGK5Cvcc+WYRuTnq+L/jRuXdDWzD9YjcpKq/9cp/AJTgRr1lAb/Ee96mqhtE5HPea8pwLZqPz3AcMP1YDklV94jIubh5UPcCm4BzVXXocFd+ttiOusYYYxLSXHwGZYwxZg6wBGWMMSYhWYIyxhiTkCxBGWOMSUiWoIwxxiQkS1DGGGMSkiUoYw4jb/HeNm/xz/Fl14lIj7ddgjHmbViCMubw+jJuAnz05EtE5EjgOtzKAU1xqJcxSccSlDGHkaq24vYUulxETooqugu3D9ldBz3RGHMAW0nCmMPMW4n6OdwSQSfgVst/EHiXqtZ6r7kUt6trGW418etU9XdeWRpui/JP4baFacctz3WNqoZE5H7cGmurcGu1na+qT85agMbMEmtBGXOYeevVXYlbvPdS4J+BG6OS09m4hVqv815zL24vrxO9S1yL2wL8EtwuvdcCfwucE/U2F+PWXFuL267BmDlnLi4Wa0zcqepGEbkD+CGuhXRLVPHXgVu8PbwAGkXkeNyWFp/E7cj7WVV92iv/qYh8Dbdj6q+9Y7Wqev9Mx2FMPFmCMmbmfBu3q+53VDV6e+4gsEZEro86lo63b4+36v5aEbkdt8X60bgV31OjXr9lJituTCKwLj5jZoiq9nt/7R9XlAZ8FTg26qsGt6cSInIjbkuIFO/PDwDjt7IYf01j5hxrQRkz++qBI1S1cfSA15oaAG4H/hr4sqre55UFcBsK+g5yLWPmLEtQxsy+24D7RESBJ4AzgRtwz5/AbSB4jog8D+ThugoXcOB28sbMadbFZ8wsU9VfAlcDX8M9d7oa+Lyq/sp7yadxo/c2AP8NNAL/AayZ9coaE0c2D8oYY0xCshaUMcaYhGQJyhhjTEKyBGWMMSYhWYIyxhiTkCxBGWOMSUiWoIwxxiQkS1DGGGMSkiUoY4wxCen/AeWlHTNHsNurAAAAAElFTkSuQmCC\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": 32, + "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/chap06-mine.ipynb b/code/chap06-mine.ipynb new file mode 100644 index 00000000..f45ecd75 --- /dev/null +++ b/code/chap06-mine.ipynb @@ -0,0 +1,798 @@ +{ + "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": 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", + "\n", + "from pandas import read_html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Code from the previous chapter\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "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": 6, + "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": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "un = table2.un / 1e9\n", + "un.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "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": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "census = table2.census / 1e9\n", + "census.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.07224800083333333" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2016.000000
p_02.557629
annual_growth0.072248
\n", + "
" + ], + "text/plain": [ + "t_0 1950.000000\n", + "t_end 2016.000000\n", + "p_0 2.557629\n", + "annual_growth 0.072248\n", + "dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 10, + "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": 11, + "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": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 13, + "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": 14, + "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": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap03-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 17, + "metadata": {}, + "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": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Which we can confirm by checking its type." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "function" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(update_func1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`run_simulation` takes the update function as a parameter and calls it just like any other function." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "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": [ + "Here's how we use it." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2016.000000
p_02.557629
birth_rate0.027000
death_rate0.010000
\n", + "
" + ], + "text/plain": [ + "t_0 1950.000000\n", + "t_end 2016.000000\n", + "p_0 2.557629\n", + "birth_rate 0.027000\n", + "death_rate 0.010000\n", + "dtype: float64" + ] + }, + "execution_count": 22, + "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", + " birth_rate=0.027,\n", + " death_rate=0.01)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 25, + "metadata": {}, + "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": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TAx1dPToUSwWC0oprFYZXvBUYhgGdrudgwcPAkiQEmKUcblcVFVVER0dzYQJE4b13GPi17yxsZGkpCQJTqcgi8VCREQEkyZNorb2tJnmRohTQnt7O5988gk7duzgs88+o62tbVjPPyZyUG63m5CQkJFOhvgcwsPDcbmkQacQo0VraysbNmzwBSWr1TrsmYAxEaDAfBIXpy75/IQYPZqamtiwYQMOhzlknsViYe7cuYSFhQ1rOsZMgBJCCPH51dfXU1BQ4CvRCAoKIj8/n8TExGFPi1TaDDOlFCUlPYcfvOSSS3j55Zd9719//XUuueQS8vLyWLBgAddeey07d+7s99jr16/nqquuYtGiRSxcuJBvfetbFBQUDPo1CCHGptraWjZs2OALTiEhISxevHhEghNIgBqVCgoKuP/++7nnnnvYvHkz69evZ968eXz729+mvr6+131eeukl7rjjDq688krWr1/Pxx9/zKpVq7juuuvYtGnTMF+BEOJUU1VVRUFBAW63OVReaGgoS5YsYfz48SOWJglQo9C2bdtIS0tj/vz5WK1WwsLCuOGGG7j44ot7DVB2u51f/epX/PznP2fFihXYbDZsNhtf+9rXuP7669m7dy9gNiZ56qmnOPfcc1m0aBG33nqr73gbN27k4osv5sEHH2TRokWceeaZPPbYY75z/P3vf2fFihUsWLCAr3zlK3z00Ue+/fLz8/3Sc8455/Duu+/2u58QYvSoqKigqKiIzvkBIyIiWLp0KbGxsSOarjFbB1Wws4aCXTUALJyZzMIc/2k6Pt52kK1lRwBYOieFPOWfhX1/8wF2VtQBcPb8KeSkx/utf3tDJbsPNPR67M9r+fLlPPnkk6xevZoVK1Ywf/58srKyuO+++3rdvqioCKfTyVlnndVj3Q033OB7/ec//5nXXnuNZ599lsTERB544AF+8IMf8PzzzwNQXl7OihUr+Pjjj9m4cSPXXHMNF110EXFxcdx99928+uqrZGRk8L//+7/cf//9vP322/1eR319fZ/7SaMIIUaeYRiUlpZSXl7uWxYdHc3ixYuHvUFEbyQHNQplZGTwj3/8g6ysLNauXctll13G0qVL+f3vf09vMyDX19cTGxs7YFP7devWcfPNNzN16lTCwsK4/fbbKSwsZN++fYDZUufGG28kJCSEZcuWkZCQQGVlJTabjeDgYF56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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 53, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t_0 = get_first_label(census)\n", + "t_end = get_last_label(census)\n", + "p_0 = census[t_0]\n", + "\n", + "# birth_rate - death_rate = alpha\n", + "alpha1 = 0.017\n", + "alpha2 = 0.016\n", + "\n", + "system2 = System(t_0=t_0, \n", + " t_end=t_end,\n", + " p_0=p_0,\n", + " alpha1=alpha1,\n", + " alpha2=alpha2)\n", + "\n", + "def update_func3(pop, t, system):\n", + " if t < 1980:\n", + " net_growth = system.alpha1 * pop\n", + " return pop + net_growth\n", + " else:\n", + " net_growth = system.alpha2 * pop\n", + " return pop + net_growth\n", + " \n", + "results = run_simulation(system2, update_func3)\n", + "plot_results(census, un, results, 'Proportional model, combined birth and death')" + ] + }, + { + "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/chap07-mine.ipynb b/code/chap07-mine.ipynb new file mode 100644 index 00000000..59369b80 --- /dev/null +++ b/code/chap07-mine.ipynb @@ -0,0 +1,784 @@ +{ + "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": 10, + "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": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2016.000000
p_02.557629
alpha0.025000
beta-0.001800
\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": [ + "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": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap03-fig04.pdf\n" + ] + }, + { + "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+tkZ8hyrIjfSx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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": 11, + "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": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.88888888888889" + ] + }, + "execution_count": 13, + "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": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "13.88888888888889\n" + ] + } + ], + "source": [ + "def carrying_capacity(system):\n", + " K = -system.alpha / system.beta\n", + " return K\n", + " \n", + "sys1 = System(alpha=0.025, beta=-0.0018)\n", + "pop = carrying_capacity(sys1)\n", + "print(pop)" + ] + }, + { + "cell_type": "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": 15, + "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": 15, + "metadata": {}, + "outputs": [], + "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": 16, + "metadata": {}, + "outputs": [], + "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": 17, + "metadata": {}, + "outputs": [], + "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": 18, + "metadata": {}, + "outputs": [], + "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": 19, + "metadata": {}, + "outputs": [], + "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": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def update_func_quad2(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.r * pop * (1 - pop / system.k)\n", + " return pop + net_growth" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2016.000000
p_02.557629
r0.025000
k13.888889
\n", + "
" + ], + "text/plain": [ + "t_0 1950.000000\n", + "t_end 2016.000000\n", + "p_0 2.557629\n", + "r 0.025000\n", + "k 13.888889\n", + "dtype: float64" + ] + }, + "execution_count": 18, + "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", + "system2 = System(t_0=t_0, \n", + " t_end=t_end,\n", + " p_0=p_0,\n", + " r=0.025,\n", + " k=-0.025/-0.0018\n", + " )" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "results = run_simulation(system2, update_func_quad2)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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GRkZ1NXVkZycfMb9bTab47WiKEybNo3i4mLGjh3LwIED6datG6NGjWq0j/KbCjMajQaNRtNo/akvZ4Di4mKuv/56unbtytChQ7n22mspLS09a5I55dQztd9+GZ+LTqdzJIzIyEg8PT255557CAgIYPLkyQA8+eSTmEwmxz4BAQEAjl6QAIsWLWLcuHEsWrSIF1988azn1Gobfw009azLYDCccbmiKI0SdlPX99S/1T/+8Q98fX0bHcPZP0DE5UWeQYlW5e3tzahRo3j55Zcxm80A7N69m2uvvZZt27bx0ksvkZCQ4GiF6HS6Rs8rCgoKHK/z8vLYuXMnr7/+OrNnz+aPf/yjY1tFUYiKikKn05GamurYJzs7G4vF0mR8X375JXq9njfffJNp06YxaNAgioqKHMc8m9DQUDQajaMVB3D06FH69evndEeJYcOGcd111/Hss89y9OhRAAIDA4mIiHD8nEowKpXKkQwDAgJ45JFH+Pzzz/n444+dOte5REREoNPpGj0PVBSFlJQUoqKiznl9w8PD0Wq1lJWVOWIPDw9n5cqVjfYR4hRpQYlW98gjjzB58mSmTp3KrFmzCA0NJTY2lhkzZgCwYcMGx7ZJSUls2LCBYcOGYbFYePHFFx1fyp6enmg0Gj799FOuvfZaDh48yJIlS4CTvc/c3d256aabWLp0KZ6enri7u7N48eKztnA6depESUkJ33zzDd27d2fXrl2sXr3acUyDwYCbmxv79++ntLS0UcvA3d2dG2+8kaVLl+Lm5oa3tzdPP/00MTExBAYGOn195s6dy9dff81TTz3FK6+84vR+EydO5LPPPuOJJ56gX79+53XOM3FxcWHy5MksXboUFxcXQkNDWb9+PQUFBdx8883nvL5ubm7ceuutPPnkk+h0OiIjI3nzzTfZunUrf/nLXy4qNtExSQtKtDofHx82bNhAv379ePzxx7n22mv58ccfmTBhAiNHjuTBBx9k69atADz44INERkbypz/9iblz5zJ79mzHLanAwEAef/xxNm7cyOjRo1myZAm33XYbMTExZGRkADBv3jyGDx/O7NmzmTZtGhMnTkSn0zUZ2+jRo7n55pt5+OGHGT9+PBs2bGDJkiWoVCrS09MBmDp1Kh999BHTpk07bf+HH36Y/v37M2vWLG655Rbc3Nx44YUXzvv6PPTQQ3z11Vds3779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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(census, un, results, 'Quadratic R-K model')" + ] + }, + { + "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/chap08-mine.ipynb b/code/chap08-mine.ipynb new file mode 100644 index 00000000..7c9a0897 --- /dev/null +++ b/code/chap08-mine.ipynb @@ -0,0 +1,917 @@ +{ + "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": 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 *\n", + "\n", + "from pandas import read_html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Functions from the previous chapter" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "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": 4, + "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": 5, + "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": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gr4tQX0PeEdrfbwPzymEEANenaOBfSUawzCobWyhtKKJFVPmMitjQvtAARaLhaUXDfNxpOemL5+DugH4Sx+eTwghBoXo4EimpIynqKKB0iIbiS2TqSmMbk9O/VWflKCUUjFAFrChL84nhBADlWEYVDXVEBPS9eH+ycljaaq3sWNnMxaLhdziGhqaHF2myOhv+qqKLwso1Fo7etxSCCHEGdU01/FlzhYKa0u4ftxSIoM7xsS0WW1cNHIsdeU52G0W5kxI6dfJCfqoik9rvVVrndUX5/IlpRQVFV2HCfnggw+46aabAHOywokTJ3L48OEu23z/+9/nzTffPO14b775JtOmTWPFihWsWLGCq6++mttuu419+/a1b3P//fczf/789m3avl544QUA6urq+OlPf8rVV1/N8uXLueaaa3j99ddPO9fDDz/M+PHjuwzDJITwDy7Dxe6iA7y+713yqwtpaG7h6c/fp6C07rRtF88cwqUzhvT75AQy1FGfMwyDu+++mzfeeIOgoKAet58+fTpPP93RK3/Dhg1897vf5R//+AdpaeYguDfffHP7cEinevTRRwkNDWX16tVYLBaKi4u54YYbSElJYd68eYA5hNLbb7/NkiVLeOmll7jnnnt64UqFEL2hpL6cL7I3U95gzsdWWdtEQVkD0YSxfs9JvrpoVJceed6cQLCv9fsEte3kHnYU7PVo29EJWSzInNVl2brszRwqPdrtPlNTJzA9beIFxdjZnDlzcDgcPPLII/zsZz875/3nzp3L4sWL+dvf/uZRIiktLSUuLg6Hw0FgYCBJSUk88cQT7SOsgzkw7JAhQ9oT3R133EFISMg5xyaE6D0tTgfbTu5hX4mGTkPSpcckYK+IIciIoKSyidLKRhJjQ30Yqff0+wTV31gsFh555BFWrFjB/PnzWbhw4TkfY/To0axdu7b99V//+ldWr17dZZvf/e53KKW48847+dGPfsTs2bOZMmUKU6dO5aqrriIjo2OKkVdeeYVrrrmGCRMmkJCQwFtvvdU+hYcQou/lVOXzZc5W6lsa2pfZrDampU5kYtJoNlgLqahuYs6EVBJiBu6HSUlQvainCQvbJCYm8utf/5r/+q//Oi2xeKrzXE9nq+IbPXo0H3zwAfv372fr1q2sX7+ep556iscff5xFixaxf/9+Dh061D46+TXXXMMLL7zA17/+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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": 7, + "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": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.557628654" + ] + }, + "execution_count": 8, + "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": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2016.000000
p_02.557629
alpha0.025000
beta-0.001800
\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": 9, + "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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl8nFXZ8PHfrJnJvu9b0+W0aZNu2EJpC5RVloII4vLwqK/i8uCjPKKAoqIgigq+oK8VRH0UBEURBKXiwlaFsrSle3Oyb232PZmZzHa/f8w0JN0yLZlsvb6fTz7J3OuVaZor59zXOcdkGAZCCCHEdGOe6gCEEEKIY5EEJYQQYlqSBCWEEGJakgQlhBBiWpIEJYQQYlqSBCWEEGJakgQlhBBiWrJOdQBCvFtKqSTgVuBaIB9oA54Fvqu1bonifeOBAeA8rfXLp3iNciBNa/1S+LUBXKG1/suEBTpBlFLbgL9orb8ZwbG/AuK11tdEOy4xe0kLSsxoSqkM4HXgXOBGYCHw8fDnbUqp+VMXXUSeARaPep0D/GOKYhFiWpEWlJjp/i+hVsy5WmtveFuDUmoL8FfgF8D6qQouAqbRL7TWrVMViBDTjSQoMWMppVKBDwDXjEpOAGitA0qpO4DXlFKLtdb7lFL1wL1a6/8XPr8YqAPKtNZ7lVJZwA+Bi4AkoIlQN+HPw8fHAj8i1JU4AHztiHjqgd8DHySUeMqBecA9wGpC/992AzdprV9TSr0MFAE/Vkpdo7U+d3QXn1LKCXwH+BDgBF4G/ktrffAY78WvgH4gHrgO6AG+CPiBHwCZwF+Ajx5+r5RSHwZuA+YDjcB3tNa/HnXNm4H/ARLD3/eYZKqU+s/we5APVABf11o/d2RsQpwq6eITM9lKwAa8epz9rwNuYE2E13uE0C/y84FSQs+xfqqUyg7v3wSsAy4F3k/ol/eRbgCuAd4H+Ai14nYCS4EzCSW2h8LHXg00A18Nf32kB4Ergf8In+sAnjhB/J8GaoAy4G+EWo9fJpRQPzjqWiilPgL8L/BTQon0x8DDSqnLwvs/BnwL+FL43nOBFYdvpJS6mFDS+kb4fg8BTyqlzjpBfEKcFGlBiZksPfx54Fg7tdaGUqpn1HHjeY5QEUAtgFLq28BNwHyllAv4MPA+rfWr4f2fBrYecY0ntNZvhvdnAt8Hfqi19oe3bSLUykJr3a2UCgADWuvu0RcJF358mFDr8J/hbZ8BPq2Ush/ZYgyr1lrfHT72IeD/EGrV7Ahve5N3nnf9D/Cw1vqn4ddVSqnFhJLlc8BngZ9qrX8XPvcThFqWh30V+MHh/UCNUmolcDOhBC3EuyYJSsxkXeHP+UDtkTuVUiZCXXV9EV7vp8C1SqkvAguA5eHtFkARaq3tGHX8NiB4xDVqDn+htW5XSv0cuFEptXTUNSPpuVhA6P/nW6OuV0eoS+54qkd97Qp/Hv2+eICY8NeLCT2/G+3fhLoTAZYA94+6t0sptW/UsYuB1Uqpr4zaZgMqTxCfECdFEpSYybYT6kZ7D8dIUIS6pOKAN8Ovj1xbZuTnP5zM/gbkAr8DXgD2AfqIc0Y/hwmEP0Zzj7pmTjjGA4S6+h4n1IX42Im/LQAOt5BOZj0c3zG2HZlAD3MfY5uJd5KnwRHPnEbFBKH37ivAnyOIQYhTIs+gxIylte4i1F12h1IqBkAptVYptUcpdQVwF7BDa70tfIqXUIvqsJJRX5cC5wGXaq2/qbV+GkgO7zMRKgLwEip2OKyMUKvheK4On3OB1vrecFddfjjOw7/8j5eAagklv9HPfYqUUt1KqbwT3DNSB4AjnxetIfR9Auxh1PeqlLITalWNPr9Ia119+INQwcqHEGKCSAtKzHQ3AVuAl5RS3yRUlbeTUIEDjP0l/BahZzibATvwbd5JEL2EEsIHlVKPEepi+1F4X4zWeiDcXffD8HOtfkJFEydq4XQBWcBlSqm9hMZqHa78iyHU5TYILFJKZWqt2w+feMT9BoBO4D5g97Gq+E7BPYSKGvYB/yRUGPIJQs+tIFTN+IhSagehYpMvAxmjzv8+8FulVAWhcVsbCBVVXD8BsQkBSAtKzHBa605CSehl4CeE/vLfADwKPAU8oZTaGD78dkLPSLYSqtj7JuEusPAv/U+FPyoIJadNhMrCV4bP/x9Cie8pQt2Bv2Zst9eRfg88DPwqfJ1PE6ryM0Zd8wFCv9T/dozzbwZeAp4GXiNUDHLdCd+QCGmt/wz8F6FS9L3AfwM3aK0fC+//A/AFQklnB6H36cVR5z8dPueLwH5CCey/RhVNCPGumWTJdzGbKaUuAXxa6xemOhYhxMmRBCWEEGJaki4+IYQQ09K0K5IIV2O9B2jh6BJeIYQQs4uF0CTJb2mth0fvmHYJilBy+tdUByGEEGJSrSM0WHzEdExQLQCPPfYY2dnZ4x0rhBBiBmttbeUjH/kIhH/3jzYdE1QAIDs7m/z8/KmORQghxOQ46pGOFEkIIYSYliRBCSGEmJYkQQkhhJiWJEEJIYSYliRBCSGEmJYkQQkhhDhpgUCAwcHBqN5jOpaZCyGEmKYMw6C5uZl9+/bh8/lYuHAh8+fPj8q9JEEJIYSIiNvtZvfu3bS3jyxdRm9vb9TuJwlKCCHECRmGQWNjI/v378fv949sj42NZdGiRVG7rySoCaSUYuvWraSmpo5se/7553nsscd49NFHAXjqqaf4zW9+g9/vJxAIsGzZMm677TYSEhKOec2nn36a3/3ud3g8Hnw+HytXruTLX/4yiYmJk/I9CSFOb0NDQ+zatYuurq6RbSaTiTlz5qCUwmqNXhqRIolJtHv3bn7yk5/wy1/+kmeffZZnn30Wi8XCN7/5zWMe/+CDD/KHP/yBn/zkJzzzzDM888wzWK1WPvOZz0xu4EKI045hGNTW1vLKK6+MSU7x8fGsWbOGxYsXRzU5wSxoQb25r5U397cCsKo0m1WLx04w++9dB9lZ2QHA2eW5LFeZY/a/tL2JfbWhN/+8lQUsLkkbs79nwENKgmNCYu3o6MAwDDweDwAWi4UvfOELVFVVHXWsy+XioYce4umnnyY9PR0Am83GLbfcwj/+8Q+8Xi92u52f/vSn/P3vfycYDJKXl8cdd9xBVlYW119/PcuWLWPHjh20tLRw1llncddddxEMBrnrrrvYsWMHNpuN/Px8vvvd79LT08MVV1zB22+/DUBzc/PI646ODm699VZ6enoAOOecc7jpppsm5D0RQkw/AwMD7Nq1i56eHjz+YQJGgHh7HHPnzmXBggVYLJZJiWPGJ6iZZP369WzevJkNGzaglGL58uWsX7+ec84556hja2trcTgcFBcXj9nudDrZuHEjAH/605+orKzkD3/4A1arlSeeeIKvfe1rPPzwwwA0Njby6KOP4nK5eO9738ubb76J1WrlzTffZPPmzZhMJn7wgx+gtSYzM/PIEEb8/ve/Jz8/n1/+8pe4XC5uv/12BgYGjtstKYSYmYLBIDU1NVRWVhIMBukfHqBloB2r0877zz6bgqzJncBbEtQEMplMR20LBoOYzaGeVJvNxn333cctt9zCG2+8wVtvvcWtt97KWWedxf333z/mPLPZTDAYPOH9XnrpJfbs2cP73//+kXu53e6R/eeddx5ms5n4+HiKioro6+vjrLPOwmKxcO2117J27VouvvhiysvLaW5uPu591q1bx6c+9SlaWlpYs2YNN998syQnIWaZ/v5+du7cSV9fHwDtQ510u3uJyYgjJiOWHd37SU7IZMjtIzstblJimvEJatXio7v1Rlu7NI+1S/OOu/+8lQWct7LguPtPpnsvJSWF3t7eMUUSXV1dJCcnA/Dkk0+SkpLC+eefz8aNG9m4cSOf/exn2bBhA93d3WPOmzdvHn6/n/r6+jGtqOHhYT73uc/x7W9/m2AwyCc/+Uk+/OEPA+D1ekd+uAAcjndiN5lMGIZBYmIizzzzDDt27OD111/npptu4hOf+ATnnnsuhmGMHO/z+Ua+Li8v54UXXmDr1q28/vrrXHvttTz88MMsWbIk4vdGCDE9BYNBqqqqqKqqwjAMAsEABwfaGLZ4iZ+XisVhJSkmkVT/PB7/WwXOGCsfumghNmv0SxikSGICrV+/nkcffXSk5dPX18fTTz890oVnNpu59957aW1tHTmnqqqK3NxckpKSxlzLbrdzww03cPvtt9PZ2QmEEtB3vvMd3G43WVlZrF27lieffHJkNPcDDzzALbfccsIYX3rpJT72sY+xfPly/vu//5urrrqKvXv3kpiYiM/no7q6GoDnnntu5Jx7772XTZs2ccEFF3D77bczb968Yz43E0LMLL29vWzZsoXKykoMw8Dl81Df10ww1UTc3BQsDivFKfm8d/4FVNa58PmD9A95eVu3j3/xCTDjW1DTye23384999zD5ZdfPvIQ8corr+R973sfAFdffTVut5sbbrgBr9eLyWSiuLiYX/ziF8d86PiZz3wGp9PJJz7xCSDUelq1ahWbNm0C4Nprr6WtrY0PfOADmEwmcnJyuOeee04Y4/r169myZQuXX345sbGxJCUlcdddd5GQkMCXv/xlbrjhBlJTU7nkkktGzvnoRz/KbbfdxuWXX47dbkcpxWWXXTYh75kQYvIFAgEqKyupqakZaTW1D3UxaHbjLEnAEhNKDSvzylmRswSTycSZS3J4aXsTqYkOcjMmp4vPNLpbZzpQShUDdS+88IKsqCuEEBOsu7ubXbt2jZlHr3WoA09SAHuaEwPw+0xcsfgcipLf+R1sGAa6sYf5BSlYzEc/bz9Vzc3NnH/++QBztNb1o/dJC0oIIU4Dfr8frTV1dXVjnjenpaVx5rqz+HPNC3QNuHD3xpEanEP6iqwx55tMJhYWpR552aiSBCWEELNcV1cXO3fuxOVyjSQnm81GaWkphYWFmEwm1hS+h5feOoTTFw/A1j2HuGBV0VSGLQlKCCFmK7/fz/79+2loaABgyOuidbCDnKxsLjznQpxO58ixCzNKiFuZwTNbanDGWMnNiJ+qsEdIghJCiFmovb2d3bt343a78QcDtA12MOgfwpETT1/KMPXd3SzKGzsEpyArgfNWFjA3PwmHferTw9RHIIQQYsL4fD727dtHU1MTAD2ePjoGuzAn2Iifk8pw0KChxUVPfQUZF6aSnuwcc/6R071NpagnKKXUfwJfHLUpCcgH8rXWbdG+vxBCnC7a2trYvXs3Ho8Hj3+Y1sEOhoPDOPITsCXFYDKZCHTHkeHJxWqys+XtZt537rxjzoIzHUQ9QWmtHwEeAVBK2YAtwD2SnIQQYmJ4vV727t3LwYMHCRpBOl3ddLt7sSXGEJ+bhtlqJtGRwLqiVcSSzG//rjGZICc9nmDQwGI5TRPUEW4F2rXWD03yfYUQYlZqaWlhz549DA8P4wv6aehtJmAKEluQRMBpwWqzsixnMctyFmM1hyYE2HBGAdlpcSQnxExx9Cc2aVMdKaXSgZuB/5mse042pRTd3d1jtj3//PNcf/31QGixwvLyciorK8cc8+lPf5qnnnrqqOs99dRTrFy5kiuvvJIrr7ySK664gs985jPs3bt35JjbbruNdevWjRxz+OORRx4BYHBwkK997WtcccUVbNy4kauuuoo//OEPR93rnnvuYcmSJWOmYRJCTF/Dw8Ns27aNbdu2MTw8DIDNbCUhPQlHSTJtwz4OHYRV6es4I698JDkBLCxOnfbJCSa3BfUp4Bmtde0k3nPaMQyDm2++mSeffJKYmPF/QM444wweeuidBudrr73GJz/5Sf74xz+SF67A+djHPjYyHdKR7rvvPmJjY3n22WcxmUy0tbVx3XXXkZOTw9q1a4HQD/qf/vQnLr74Yn7zm9/wpS99aQK+UyFENBiGwaFDh9i7dy9er3dku8PhoLy8HEu8jYdf/TOOoWIyyGTn/n5KC4JYLTNv6tXJTFDXAZ+f6ItuO7ibHYf2RHTswox5rC9ePWbblvo3qOioPu45K3LLOCOv/F3FONpZZ52Fz+fje9/7Ht/4xjdO+vw1a9Zw4YUX8tvf/jaiRNLR0UFaWho+nw+73U5WVhY//vGPR2ZYh9DEsIWFhSOJ7sYbbxwzPkIIMT14PB52795NW1sbHr+HHnc/OQmZFBYWUlpais1mA+Dz6z7I43+vZNgbIDMlFr9fEtRxKaVSgHnAa5Nxv+nMZDLxve99jyuvvJJ169Zx3nnnnfQ1Fi5cyCuvvDLy+le/+hXPPvvsmGO+//3vo5Tic5/7HF/4whc488wzWb58OStWrODSSy+loOCdJUYef/xxrrrqKsrKysjIyODpp58eWcJDCDH1DMOgqamJ/fv3M+wdpn2oi15PHyabhXmFaSwpKx8zP16cM4bzVhQQY7dQkDVz126brBbUPKBFa+0b98gZbLwFCw/LzMzk7rvv5qtf/epRiSVSo9d6OlEX38KFC3n++efZt28fb731Fq+++ioPPvggDzzwABs2bGDfvn1UVFSMzE5+1VVX8cgjj/ChD31o2paeCnE6cblc7N69m46ODvqHB2gb7CQQDGBNcTDgsPCc3k2Ks4TlC8auizevIPk4V5w5JiVBaa3fIpSkJtwZeeXvqgtuffHqo7r9TtV4CxaOtmHDBi655BJuvfVWrNaT+2fYu3cvCxYsGPc4v9/PnXfeyRe/+EWWLFnCkiVL+PjHP86mTZt44okn2LBhA4899hhWq3VkVV6/3097eztbtmw55lL0QojJYRgGDQ0NHDhwANewm9bBDlxeF2a7hbi8ZPqDQdxdMeQzl237O1CFacQ6bFMd9oSaeZ2S09h4CxYe6bbbbqO9vZ2tW7dGfI9XXnmFl19+meuuu27cY61WK3V1dWzatGlkhVy/309NTQ2lpaX09/ezefNmHnzwQV588UVefPFFtmzZwsaNG/n1r38dcUxCiIk1NDTE1q1b2b1nNy397dT2NOLyurCnxxI/P5XE1GSuWXYhi+JXYDM5SUl04PUFpzrsCSdTHU2g8RYsPFJMTAz33Xcf11577XGvuW3bNq688kog1IWYmZnJL37xCzIyMkaOOdYzqKVLl3LnnXfywAMP8IMf/ICLL74Yp9NJMBjkwgsv5MYbb+Sxxx5j7ty5nHnmmWPO/exnP8tll11GZWVlRC01IcTEMAyDuro6Kioq6HcP0DrYgS/gw2eBhIIkHIkOlmQpVuaWY7fYsCzrw+sLsKAwZVZ2yZ/UgoVKKUVomqIA0KS1rpnogGTBQiHE6WhwcJBdu3aNjKVsH+qkY6iHIbuZPpuJ4vQc/nPNBaTHTu6aTNH2rhYsVEqlERpcewOQAnQBFiBFKdUIPArcr7XuneC4hRBi1jMMg5qaGrTWI48HAOZkFTHot9DWPUimqZiYnlxswclZan26OOEzKKXUfwD/AmKAK4E4rXWO1joTiAP+E0gE3lJKXR/tYIUQYjbp7+/n3//+Nzv2vI3XHxp0azKZWLBgAeeecy4fPOtS1mSeR7Ipl4XFqdisp1fZwHgtqPnASq21+8gdWmsv8CrwqlLqG4Tm2RNCCDGOYDBIdXU1FbqC1oEO+jz9xNpiUbkLWPWelSQmJgKQFZ/OBWfE4xkOkJN+erWeYJwEpbW+I5KLaK0Hga9PSERCCDGL9fb2snPnTpo6DtI+1EUgGMDjC9BmGiTRHDeSnA5LSXDAzB1r+65EXMWnlLqY0Fgmy+jtWusfTXRQQggx2wQCASorK9mn99My0I7H5wHAsFvoijERZ8ugsyNIfUs/xTmJ41zt9BBRglJKbQKuB3YBo2eDMABJUEIIcQLd3d3seHsHde2N9Hr6Qr85zSYcWXGk5qZTMlhA2yErGclOnDEy+uewSN+Jq4F1Wuud0QxGCCFmE7/fT0VFBbsqdtM22Ik/GCBoGNjj7cQVJLGyqJxlOUvweoPUZPexeE4aZvPsG890qiItCQkA+6MZiBjreGtEjfbGG29w+eWXT1JEQoiT0dnZySuvvML+qgMc7G/D7fXR5/LSG2NmwdJFfHDFlZyRtxSr2UKsw0bZ3HRJTkeItAV1L/CgUuo7QPvoHVrr/gmPSgghZii/38/+/ftpaGgAwGl1EGeLo9Hbhz81kXTrPAot5SQ55DnTeCJNUHcSGvf0MUK9pwCm8NeW45wTdTU1NVRWVuL3+6N2D6vVyoIFC5g7d+4Jj3vjjTf44Q9/SE5ODnV1dTidTj71qU/x6KOPUldXx0UXXcRXv/pVnnjiCR599FHMZjPp6el8/etfZ86cObS1tY3MzZebm0tXV9eY7/Puu++mt7eXQCDA9ddfzzXXXBO171kIcWra2trYvnM7AW9gZJvNZuOCNeeyvf0gnU2JxMbEYLdP2a/NGSXSBLUkqlGcotra2qgmJwj9NVRbWztuggLYs2cPd9xxB6WlpXzyk5/kZz/7GY888giDg4OsX7+esrIyfv7zn/PEE0+QmprKU089xY033shzzz3HnXfeydKlS7nppptoaGjgqquuGrn/5z//eb7//e+zePFiBgYGuO6665g3LyqTwwshToHX6+X1HW+wq2ov/oCfgsR8YmxWsrOzKSsrw+FwMLd4Hm/Ft7F8QQYOKYSISETvkta6QSmVCFwGFABtwHNa685oBjeekpKSSWlBlZSURHRsfn4+paWlABQWFpKQkIDdbic1NZW4uDj+9re/cemll44sx3H11Vdz991309zczGuvvcatt4bGOhcVFbF6dWgJkPr6ehobG/nqV786ch+Px8P+/fsjSppCiOiqb6rnxTdeoWugG38giMvjZ3Cohesvv4KiwvyRSVytFjNnleVMcbQzS6Rl5mXA34FeoB6YA/xQKXWh1npH9MI7sblz506rX9J2u33M6yPXeTrWbMOGYeD3+zGZTIyeuPfwuYFAgISEBJ555pmRfZ2dnSQkJLBzpxRVCjFV3B43/9z6EpUN1QSDAQxg0O3DZ7dgTczmYK+F4iIpeng3Iq3iux+4V2u9SGv9Xq31QuC74e0iQqtWrWLz5s0jsxX/8Y9/JDk5maKiItatW8cTTzwBwKFDh3jjjTcAmDNnDg6HYyRBtbS0cPnll7N3796p+SaEOM0ZhsEuvZtfPPVrKuo0wWDoeZPZZqZ44VyyU9aSYZvLLFz9YtJF2hG6HLjoiG33A9+Y2HBmt9WrV2M2m/noRz9KMBgkNTWVhx56CLPZzB133MFXvvIV3vve95Kdnc3ChQuBUKts06ZN3H333fz85z/H7/fzhS98gZUrV44kMSHE5Ojq62bzq3+ntbWFoGFgDmehxMxkLlh9HnPSCtm6t5VFxamkJjqmONqZL6L1oJRS1cDVWuvdo7YtBZ7UWs+fyIBkPSghxHRjGAb1DfU8++/NeIaHcXn8+PxBUlJiWbVyJWcvOhOrWSrzTsW7Wg8q7AFgs1LqAaABKAY+D3x/4sIUQojpZ2hoiF27dtHV1UVKTBJVvQfxB4JYY1MpKT6bcxZPyyLnWSHSKr4fK6U8hObjywQagVu11o9FMzghhJgqLq+blqZDaK0JBELPmVIcSeSme+nzZxMfk0u8PZ5AIIjFcnqt0zRZIi7G11o/DDwcxViEEGLKeQM+Xqt+i7d3vk22OZ14RywQqsKdO3culy64lO26g7yMePIy4qc42tnthAlKKfVvrfVapdTbvDODxBha6xVRiUwIISaRYRgcaK9my9v/pv9QLy6Pn25fM0tyS8jOTGXp0qUkJycDsKo0e4qjPT2M14LaFP78AMdJUEIIMdO1DXbw0oFXOVjVRNDjZ8jjw+sLYDHZ6TcSuGbtWiwWKYKYbOOtqPt4+POvJiUaIYSYRENeF1sbdrDvwD68na6R7QlOB8OmBOITF5KRlYnPbyD5afKN18V33K69w6SLTwgx0/iDAfa0HeDNqrfpq+8GfxATgMlERnwqa5aficdIIT7WzpzcxGPOAiOib7wuPpkpQggx67xSs5Xde/cw0DqIxxsg1mElLT6JRYULWLXyPcTGxk51iILxu/h+PVmBCCHEZGhra8NV3ctA2yBurx8LVmyBVC5es4E5xUXSWppGpItPCDGrefzD2MxW/D4/+/bt4+DBgwDkJWXQ2unGbs8iv2gBaRk5kpymGeniE0LMSsFgkP0dVbx1cBe5wUyCnR78Pt/I/oK0XJYsLCI+KY3SOWmSnKYh6eITQsw6zf0tvNa4na7eLjpre6jurWNOciFZKaGBtQUFBZSWlh61RI6YXiZloG54PakfA0lAAPi01nr7KcQrhBDH1efpZ2vTDhp6mvF2u+lr6sfl8mLGSkfvEHlZ6axcvpTMzMypDlVEINKBuqfc1aeUiiW02OEntNablVJXAo8BC0/1mkIIMZo34GPHoT3sbdP43F7cBwcIuHw4rFYs1lhMfifJaTksW7GazIzEqQ5XRCjSgbq/BlBKxQE5QJPWejjCe1wE1GitN4dfPwvUnVq4QgjxjqARpLKzjjcP7mTQ7cLb6cLX6QbDIMmRSEZcGpbMWNJySjhzaYlM6jrDRLrkezrwC+BywAQElVKPAzdqrQfGOX0B0KqU+gWwlNCy8beceshCCBGiO2vYUv8m3R1D9Df0EmNAekICWfEZOG0O5s+fz/z58zGbJTHNRJH+qz0IDAMKcAKLgURCz5XGYwMuBX6mtT4jfM5mpVTMyYcrhBDvmJNUiOegm/6qLsxesPgSyXRmk52exTnnnINSSpLTDBbpchvnAvlaa0/4tVZKXU9kXXWHgANa6zcAtNbPKKV+DpQAB04yXiHEacofDOANeIm1OQFob29nz549ZAbi8cT4CA47iLHZKJqzgFUrSqVsfBaINEHVAnOBfaO25QCdEZz7V+A+pdRKrfV2pdR6QhWB8hxKCDEuwzBo6G1ma9MOEu3xrMlZTX1tFc3NzQDE2+OYl+nEb3JyyflnkZSYMMURi4kyXpn558Nf7gL+oZT6CaEl37OB/wL+PN4NtNatSqmrgE3hIoth4OpRrTEhhDimXncfrzVtp7mvhX7XMDub69CuJuZnp40cY7fbWb58MXl5edJqmmXGa0G9b9TXGrhg1OsGoCySm2ittwCrTy40IcTp6nDZ+J62CgzDwOPy0n6gE+uwwRAe+oe8JMZR7UWEAAAgAElEQVTZycvLY/HixcTEyCPt2Wi8MvPzJisQIYQwDIOa7ga2Nm3H7fNgGAbeLjfDbUNkmBPwE4PVbMFqs7N69WoZcDvLjdfF9wBwh9a6d5zj0oA7tdY3TmRwQojTR7e7l1cbttEy0EYgaMBwAPfBfux+G8VJ+djMdjp63KwoVywtX4LVGukjdDFTjfcv/ALwulLqX8DvgTe11n0ASqkU4CzgGuAc4H+iGagQYvYaGB7kj/s2M+wL0NoxQKDbQ4bJRlZcOonxofnzEhISOGf9OlJSUqY4WjFZxuvie1Yp9SLwaeBHwAKllIfQ+Ck7sBf4DfA5rbXr+FcSQojjS4iJZ05yIc+/sQ1rzzCOQCzJqZkkxsRiNptZsGABc+fOlTFNp5lx28ha60HgPkKl4llAARAkNN1RR5TjE0LMQoFgAIvZMvLa6/WS2BtDltuGNxCPBSuBAKSmprJ06VLiw60ocXo5qU5crXUb0BalWIQQs5w/GGBnyz4qu2q5etF7ibHaOXToEPv27WN4eBiVVcjB9kEyU+M5Y0U5hYWFUjp+GpOnjEKISdHc18K/G9+kzzNId5+H+6v/wrrsXLq73hnvbwLes3Q+S5YsweFwTF2wYlqQBCWEiCqXz83Wxu3UdDcA0NTaj7vDhXOwj719XnLTQ913DoeDsrIysrOzpzJcMY1IghJCRIVhGBzoqObN5rfxBkJLrQfcPhJ6/NgHnNiJxeXxYwBziotZtGiRlI6LMSL+aVBKXQzMAyyjt2utfzTRQQkhZrZuVy9bGt6gfTDUfWcEDDztQzgGLSxIyqfF58Fpt1Ccn8GyZcukdFwcU6TrQW0Cric0J59v1C6DUPm5EEIAsLNlP28d3Il72Edrl4sMhw1rl5+smBTiEmIBKMpOlNJxMa5IW1BXA+u01jujGYwQYuaLsdro6nPT0j5ITL8XbzCekrw8zOFqvPT0dMrLy4mLi5viSMV0F2mCCgD7oxmIEGJ2UGlzyQhuZ7CjD6eRAiYbPn+QhDgnpaWl5OfnS+m4iEikCepe4EGl1HeA9tE7tNb9Ex6VEGJGqO9pIj4mjvTYVAAGBgbYvXs3aW4ngYRchn0BctLjmDuniNLSUpl1XJyUSBPUnUAc8DFCz50gNGTB4IiiCSHE7OfyuXmtcRs13Y343XY2LriQod5WqqurMQwDi8lMdloccXGxlJeXk5GRMdUhixko0gS1JKpRCCFmBMMwqO6u57XG7fS7XRzsGGS4b5jHDjxJaW4WhzvuzGYzc+fOZf78+Vgs8jesODURJSitdYNSKhG4jNBcfG3Ac1rrSJZ8F0LMAkNeF/9qeJPG3oNAqHQ82DZEgtuOgZmefg+piQ5SU1MpLy8nIUGWXhfvTqRl5mXA34FeoB6YA/xQKXWh1npH9MITQkw1wzCo6qrjtcZteAO+0CKCPR6MjmFKYrLo8xhkpDjJTE2gtHSRzJ8nJkykXXz3A/dqre87vEEp9aXw9vXRCEwIMfUOt5rqupsZ9gWIMcB9cIBEI5aMxHzMJjMZCQHmFBfK0utiwkWaoJYDFx2x7X7gGxMbjhBiuvAGfDy5bzNtvf20dgxiHfSRbbaTl5hNrC00kWtcXBxnlpVJEYSIikgTVDewGNg9attiZOkNIWYtu8XGgtQS9u7fgq1nGEfASWxiGrE2hxRBiEkRaYJ6ANislHoAaACKgc8D349SXEKIKeZ2u7G0+8kdtjMUiMVpdZDgjCEtLY2ysjIpghBRF2kV34/DS71fD2QCjcCtWuvHohmcEGJyeAM+3mzeyZKMRSQ546irq0Nrjd/vZ15GAT2OYdJT4ilbslhmghCTJuLZzLXWDwMPRzEWIcQUODTQxku1W2no6OTvW/exNq2QYc/QmGOWLp7PokWLsNvtUxSlOB2dMEEppf6ttV6rlHqbd2aQGENrvSIqkQkhosofDLDt4C52t1XQ3NKHq2UQm9vPnr4gC3JDRQ8JCQmUlZWRlpY2xdGK09F4LahN4c/3RzsQIcTk6XL18FLda3QN9eDr9eDs9OB3B3GSgtWwY2CidNFCSkpKZDkMMWVOmKC01o+Hv8zQWt975H6l1LejEpUQIiqCRpA9bRW8dXAXPpcX96EBAkM+kuyxpCVnYTVbWbygmLKyJcTGxk51uOI0d9wEpZTKBM4Mv/yWUkoDo5+MJgFfAL4WvfCEEBNlYHiQF2tfY3djPY4hP/QNY8JEVkIGKY4knE4nS5YsITs7e6pDFQI4cQuqH7idUNWeg6NXzh0G7o5SXEKICTToHeI3O56loa4DutwMYyIzKYG8xGxirPaRMU1Wa8R1U0JE3XF/GrXWHmA1gFLqKa311ZMWlRBiQpl8ENNhYO5wY2BgI44kSwY5mdkypklMW5GOg7paKWUmtCbU4W4+O7BEa/1ylGITQrxLgUCAmpoaqqqqSCOerrh4fK4YCjMzWL9mBQUFBTKmSUxbkc5m/gHgZ8CRf2Z1AlkRnH8fcC2hKZMAtNb6upOIUwgRIX8wwNuH9hHnjqe1qZ6hodCYJrPJzKLsYjKyclm+dImMaRLTXqQdzt8mVAwxBJxPaAn47wEvRXj+GuCDWuvXTjpCIUTEulw9PP32P6k50IDDbWdpYTEWc6iFlJycTFlZGcnJyVMcpRCRiXSAQ67W+v8RWhNKaa13Elr+/YbxTlRKxRCaDf0WpdQepdQflVKFpxqwEOJoQSPI24f28vjLf6RuRy0M+fAEh2js6MZms1FWVsbatWslOYkZJdIEdUgplai1PgjMUUqZgFYgkjn2c4EXCbXAyoHXgWfC1xBCvEv9w4M8+dZfePGlF/G0DhAbY8WEiVhTEiWFczn33HMpLi6WZ01ixom0i+95QrOZX0kowTwAeIC68U7UWtcBlx5+rZS6F/g6oRnRxz1fCHFshmGws2k//9r2L4Z73SPbE51OClJKOG/NGgryxn1ELMS0FWmC+hJwMxAAbiRUMJFIZF185cBSrfWjozabAN/JhSqEOKzfPcDjL/6ZpromEpw2LCYTmCAzIZ21y9dQUlIiLSYx40VaZu4Fvht+2QtcfBL3CAI/Ck88Wwd8FtittW4+qUiFEADUNtfx2N+ewTUYajW53D7SEuJZpspZvew9OByOKY5QiIkx3mzmT3OcWcwPG28Ar9Z6r1Lqv4E/K6UsQDPwoZMNVIjTncvlYv/+/bS0tJBoicFFKEHZrMls3HA5cwrypjhCISbWeC2onRNxE631b4DfTMS1hDjdHB5sW11dTSAQAKAwJRuX10d+7iKuufBcnDG2KY5SiIk33mzm35qsQIQQR6uqr+XPL79IbmwKcc53BtYWFxZzyUWX4HQ6pzA6IaIr0pkknjrePpmjT4iJNzg4yJ9f+Sf7aioJGAHcQ17KCgpITk5iyZIlpKamTnWIQkRdpFV8u454nQa8H/jlxIYjxOnN7/eza98u3ti7jQHPEEEjCMBgoJ+49FzWnbVCqvPEaSPSKr6juvqUUj8DfjrhEQlxGjIMg+aDzWzZ9iotPa0YhoHZZMIZY8Fji+Hi1RewbvEiSU7itPJuFn+pITQzhBDiXejt7eX5V/5FU2c9mPwj2y1xNs4+8z2sKjmDeCkdF6ehSJ9BbTxikx24Dtgz4REJcZrwer1s37Wbl7e9Sb+3D5PJRFJcDBabmaziHC5ZcT4Z8WlTHaYQUybSFtQDR7wOAJXApyY2HCFmP8MwqK+vR2tNa18Hg77+ke3eWCuXrj2X5XmLMZsjnSpTiNkp0mdQc6IdiBCng87OTvbu3cvAwAAAabHJdMT10OHzkFtcxEfOvpiMBJlxXAg4iWdQSqnVwAeBbKAJeFRrLV18QkTA5XKxfedu6hoaSYl/Z+xSXFwcl553IR6LiRWFSooghBgl0mdQHwN+AjwF1ANFwGtKqf/QWj8TteiEmOH8fj+VlVX8e/sOmnpawYBlMXOJdcYwf/58SkpKpCtPiOOItAV1B3CJ1vpfhzcopTYAmwBJUEIcwTAMDh48yN79e2nsPEhTXyf+8Jimg55hPnXpJTKpqxDjiDRBpQJvHLFtC6EBu0KIUXp6eti7dy/1rY10DHURCAaIjbHS6/NjSo1j6YqFkpyEiECkCeoXwL1KqS9rrYeVUmZCK+T+NnqhCTGzuN1uDhw4wL7KSnp9PXh8HgBMVjMJ+QkUpeVzaenZJDsTpjhSIWaGSBPUpcAC4ONKqUNAJpAEDCil/uPwQVprmSBMnHYOzza+Z/8BKlua6ff2kxBrx2a1EJPuJDU/g7XFqyhOyZ/qUIWYUSJNUJ+OahRCzECHnzNVVFQw5Bpi76FqPD4vAIMmg0KVzsqiMpZnL8ZqeTeTtghxeop0HNQr4cUGVwEFQBvwqtbaf+IzhZidenp62LdvHz09PQCYTWaykpKp7+tiOMHG3LxirinfQHp80hRHKsTMFWmZeRHwF6AQOATkAR1KqQu11rVRjE+IaeXwc6aKqjoSYt9ZnykmJoYL1pzDCy27WJlbxsqi+TKmSYh36WSmOnoB+LLW2qeUsgM/AH4MXBat4ISYLvx+P9XV1ezZX0FtWyv93n7mpReRmRxPSUkJ8+fPx2q1Mrd4riQmISZIpAnqbOADWmsfgNbaq5S6FWiNWmRCTAOGYdDU1ERFRQVdA93UdbYw4A1V5zW5+7n6iktJSnynKk+SkxATJ9IE5QZygIZR23KA3gmPSIhpoqOjg/3799PR3UnbUCcurwurDQha8CTYSMuOxxoTM9VhCjFrRZqg/hf4s1LqTqARKCY0DurXUYpLiCkzMDDAvn370TX1eEyD9A/3gwEmmxlnVjzO2BjOyFvK6iKZcVyIaIo0Qd0ZPvaHhMZANRJKTt+LUlxCTLrh4WG01uzX1dS1tzHg7yfGbibWaSMmIxZHZhylWQs4I68ch1VaTkJEW6Rl5gHgduB2pZRDa+2JblhCTJ5AIEBtbS3V1dX4/X4O9rfQ7w+t0TRktZA6N4WSzHzOKlxJqlOWwhBiskRaZh4L3At8CEhUSnUBvwJuP1w4IcRMYxgGzc3NVFRU4PG88zdXTlIq3UE3rjgbBTmZXFp6NiWpBVIAIcQki7SLbxNQAlwDNBN6BvUNQqXmN0UlMiGiqLOzk92791LVeIj0pDjs1tCzpISEBFatWoWjbQ+FKdmsyCuV50xCTJFIE9SVQInWuif8Wiul3gYOIAlKzCD9/f0cOHCAytpG6jvacRuDuH0ZlBblo5SisLAQk8nE1VlZUx2qEKe9SBNUD5AY/nyYGeia8IiEiAKPx4PWmqamJvo8/bS4OnAZLsBEi2mIDyxfRW6GPF8SYjqJNEH9EnheKXU3UENoqqPbgJeUUhsPH6S1fnbiQxTi1Pn9fqqqqqirq2NweIi2wU48Pg8mE1iTHXjirMzPyyU+wTLVoQohjhBpgvpE+PNdR2y/KPwBYACSoMS0EAwGqa+vZ+fu/TS0dmF1evAEXABYE+w4suNJj41lVf4yFmXOxWyS50xCTDeRlpnPiXYgQkwEwzA4dOgQFRUVNB7qpLG7nWGGsPhNJKfF4syOx57ooCxrIctzlmC32KY6ZCHEcUzqIjVKqauAR7XWsqSomHAdHR0cOHCAvr4+AIZNg3gYJGgx40mwkV6QwPzsuawuWE5iTPwURyuEGM+kJSil1HxCY6lkMImYUH19fezbt5+urs4x2/NTs+iwD+OLNVOel8eGeavJScicoiiFECdrUhJUeKDvb4AvAo9Pxj3F7Dc0NERFRQUHKuto6R4gKzWOlHgnFouFkpIS5s6dS1F3DTazjQXpc+Q5kxAzzGS1oB4Kf+yepPuJWWx4eJjKykoaGhro6HXR2NXOMIN4uuIpW7iWhQsVTqcTgLKshVMcrRDiVJ0wQSmlniZUnXdcWuurx7nGfwF+rfUvlVLFJx2hEGE+n4+amhpqa2sJBAIMDA/S4+9k2DSEz27BmxQkISdnJDkJIWa28VpQO8Of5xJaOfcRoI7QOKiPA09HcI+PAbFKqZ2AHXCGv75Ua33oVIIWp5dAIEB9fT2VlVX4fD6GA8O0DXbi9rmxxNlIyEjBZzWjcnJISpjUuh8hRBSd8H+z1vpbAEqpN4CLtNbbD+9TSj0GPDbeDbTWq0adUwzs1VovO9WAxekjGAzS1NREZWUlrZ19tHYNYnF6CJjdmGOsxOYlYY23k2Zz8J68pSzMkPFMQswmkf65uQjYdcS2KqBoYsMR4p2xTFprhoaG6B30UNsees5keCB7XiqOFCdms5nFmYqVuWXEWO1THbYQYoJFmqDeBH6slPqK1rpXKZVOqGT8lZO5mda6HpABKOKYDMOgvb2diooK+vv7R7abrD681iE8sVZMCXaMWDsFybmsKVhJsjNpCiMWQkTTyUx19CTQpZTyAA7gZULrQwnxrnV2dlJRUUFXdw8YBmZzaLiczWZj9cL34O10cHCgi3lZmZxddAaFyXlTHLEQItoineqoAXiPUmoOkA0c1Fo3RjUycVro6emhoqKCzs5O+oe8tHQNEuswU5yTNjKWyWazkZiTTNtgJ4szF2Axy8SuQpwOxisz33icXRlKqWUgM5iLU9Pf309FRQVtbW0ADHl81LS14WGQrmAsG1dcRn526sjxWfEZZMVnTFW4QogpMF4L6oFx9ssM5uKkDAwMoLWmpaVlZJvL56bd3Yk3ycOQ3Y7FblDV2zQmQQkhTj/jlZnPAVBKlWmt90xOSGI2GhoaorKykoMHD2IYBoGgQcDw0zHUiccZIKYkjixzPLZ+D3Oy0pmTlTbVIQshplikRRIvKqXmaK0HoxqNmHVcLhdVVVU0NTVhGAYuj59DnQMMM4gjE2IK44h1hH4MYyxWzi5eQXn2IqzynEmI016kCUoDZwH/iGIsYhZxu91UVVXR2NiIYYRmy/L6A+hDLbjsbjwJZgrSk7GEk9P8tDmsyl9GnD12KsMWQkwjJzMvzPNKqU7gEKPm59Nar5jwqMSM5Xa7qa6uprGxkWAwOGZfWnoKBi24vDbMZhO+QJDM+HTWFJ5BZpx06Qkhxoo0QT0c/hDimDweD9XV1TQ0NIwkJp8/iM1qJi0tDaUUaWlpmGpjeVHvoDgzjXXFZzA3tQiTSZYIE0IcLdJxUL8GUErlAAVAW3hslDjNHSsxDbl9HOoaJGizcP3Gi8jMSB9JQmcVLiXJGceSLCXPmYQQJxRRglJKpRGaGPZCwAvYlVKvAVdrrTuiGJ+Ypo6VmAD8wSDV3T30xA0RsJuo73aTlflOC8lutbMsp3QqQhZCzDCRTv38f4F+IFdr7STUimoF7o9WYGJ6crvd7NmzhxdeeIG6uroxyclwmOhP92AqCeKLASxQ0XNg6oIVQsxokT6DuhCYf7jMXGt9SCn1CaA+WoGJ6eVwVV5TU9NIUgoGDTzeAEmpsfTGuekzD2IymUizOQkYUJyZwfpiaS0JIU5NpAnKIDRB7OhxUDGAZ8IjEtOKy+Wiurp6TGIygJ5+Dx1DfgbifGTFDWK1mDER6spz2GK4aulKmTdPCPGuRJqgngJ+r5S6BWgEioF7wtvFLDQ0NERVVRXNzc0j45gOS0pKYr/LRUtiB4YJLH1OslNjMZvMlGYuYEXuEhzWmCmKXAgxW0SaoG4Ffga8Gj5nmFDRxK1RiktMkYGBAaqqqjh06NBRiSk1NZUFCxaQmpbKga1Pc6gZbFYzDruFktRCVuUtI9GRMEWRCyFmm/FmM5+nta7WWg8BH1FK/R8ghVCZuXGic8XM0tfXR1VVFa2trWMSk8vjx2KP49yzV4TGMYXLxS8pXU3f8D+Yn5XLmqKVZMtM40KICTZeC0orpWqBvwLPAS9rrVujH5aYLD09PVRVVY0se3FY0DDoGDDTbphxGV2cb48fM6C2KDmf/zjjUnITsmSgrRAiKsZLUNnAecAG4MdAnlLqFWAz8FetdU2U4xNRYBgGXV1dVFVV0dnZedT+rKwsYjLi2LVvO51DvWDAX3fu4sPrV48cYzKZyEvMnsywhRCnmfGW2+gAfh/+QCmVRyhZnQPcopRya61V1KMUE8IwDNra2qiqqqK3t3fMPpPJRE5ODnFZCezvr6Gzs4rEZIMuFyQnxGBJ7pqiqIUQp6uIJ4tVSiUCawglp/WEys63RCkuMYEMw+DgwYNUV1czMDAwZl8gaDBMPMNOG/7YTtpbKkb2xcZYKS3OYEVeKeVZiyY7bCHEaW7cIgngcmAjcDawl1D33keB16VQYnoLBAI0NTVRU1ODy+Uas89sNpOdk8dL1e2004DHM8AcZyJxDhsAFrOFxZkLWJpditPmmIrwhRCnufFaUJXAVkIzmX9YCiRmBp/PR0NDA7W1tQwPD4/ZZ7VaKSoqoqSkhKDZ4M+tb+EZcAPQNzhMQmwMC9PnsTxnsazNJISYUuMlqN8BFwE3A4uUUn8BXtVaB098mpgKHo+Huro66uvr8fv9Y/bZbDby8gtRC+Zht9tHtp89bzH/3P82WanxrC4qZZkkJiHENDFekcSHlVJmQt17lwMPAjlKqb8TKjv/q9b66DIwMakGBwepqamhubn5qEUCnU4nscmZbG9r40BDI4tLxz5LOqt4KXEOO8uyFxNrd05m2EIIcULjFkmEW0v/Cn/cqpQqBq4EvgX8byTXENHR09NDTU3NUYNrAeLj4ykoLqDF6OWP21/FF/RhwsTu2nKWzct95zh7HGsKz5js0IUQYlyRrgcVD6wlVL13DlAObAMeil5o4lgMw6C9vZ2amhq6uo4u/U5JSSGzIJuWYCcvd79FMBgkJclKe48PkxmqempYRu4xriyEENPLeFV89xJKSEuBBuDvwPeAF8LTH4lJEgwGaW5upra29qhScYCMjAz8cU5qhprZ39EIo1pUaUlObCYHG9QKlufJsDUhxMwwXgtqIfBr4HmtdfUkxCOO4PP5qK+vp76+Ho9n7OomJpOJvLw8TEkO/rT3LbrdvVjMJlRRCubw9EPpcakszS5lTkoBZlOk61MKIcTUG69I4vLJCkSM5XK5qK2tpamp6aiKvMOl4nPmzMHpdFLX3ciQP9SqCgQNegeGWVY4l/LsReTEZ8pceUKIGUkKHKaZnp4eamtraWlpGVP4EDQMvH4zbquD1aXlqKLMkX1FKfnkpabS0NHNwowSLixdQUlm1lSEL4QQE2ZSEpRS6nPAZwktxloD3KC1bp+Me88EhmHQ2tpKbW0t3d3dR+2Pj4+n1R9gZ3cTbt8A1oaEMQnKbDLzgeXnE2eNIykubjJDF0KIqIl6glJKrQS+BCzVWveFCy/uAj4d7XtPd36/n8bGRurq6kamIgoEDYa9AWIdVpJSkzGSzDT62+geGsDdHerG29euCQRXYTG/03WXm5R5zHsIIcRMFfUEpbXerpSar7X2KaUcQB5QF+37Tmcul4u6ujoaGxtHni8FggatXUP0D/kwxTopVQlUepsJukMDbx12KwmxNpwxNpbkFGAYAaSHVggxm03Kb7hwcroK+Dmh5eK/MRn3nU4Mw6C7u5u6urpjDqy12230mk10pXsZNvdi6RsiPjxxK0CszcH7VixhUcZ8mYpICHFamLQ/wbXWfwL+pJS6AfhbeDn5WT+nXzAY5NChQ9TW1tLX1wfw/9u7++C4qvOO49/dlfW2K+t1ZdnYsmXLfsB2MRleQs0QYgo0tLQB0hRakzQJDENKmmnSppOm06ZQMmkbGtIyCZNCAzEZMoXUNUzIJDQhdKBMW2dCIRR4EhtWfjeyLVmypZW00vaPe1cstmQju9q9Wv8+M5qR7tl7dR6t7n3uOffsOYyMjZOIx6hKxEmlUixfvpx0Rzsv/PsjjPQNUVuTmNx/QSrNmvZVdDUvIRFPTPdrREQqTimeQXUDHe7+XLjpGwRz+jUDFbsK3sjICJlMhp6enskZxYeyOXr7hxgcGqVz8QKuXH8B6XR6chj4BUuN1+q3k6qrobtlGWsWrKKtvqWcYYiIlE0pWlALgW+b2XnhxLIbgZfdvSKTU39/P2+88QZ79uw5buLWkfExesky2DrEKCluaG1722eULlyylkVNbaxqXU5NVfWxhxYROaOUYpDEs2b2BeAZM8sBe4BrZ/v3llKhGy+TydDX1wfAaG6C6qo4efKMMMpIKs/RthGO7h1mPJdnvLaPw0PDtDa8NSy8pb6JlvqmcoUhIhIppRokcR9wXyl+Vylls1l6enre1o03cHSUQwNZBoaHWNSZZLRxDFIJYrEYCeKclU4xrypBS7KBiXgW0OeWRESmonHKM1QYjZfJZI6b7QFg32AfBxhiuHWcsdo8i4paSLFYjDULuzgnvZKz5ndobjwRkRNQgnqHcrkcu3fvJpPJMDAwQD4PY+NBNx5AbW0ty5Yto789Rk/mdWKxBBNh8ppfm+Lstm5WtS7XooAiIu+QEtRJHDlyhEwmMzlp6/hEngP9wxwcPEIsnueSdefQ1dVFR0cH8XgcDlaxc3AfzQ11WLqLs9MrNGGriMgpUIKawsTEBPv37yeTyXDgwFsr2ucmxunPDtBzuJfh2gny9XUsP3sdC1tTk6/pau7k2nMvY0XLUo3EExE5DUpQRYaHh9mxYwc7duwgm81yZGiM6uoY2fEsh7MDDMdGqW6pJV6fZHRolHlVkDm0h4WtqyaPURVPsLp9ZRmjEBGpDGd8gsrn8/T29tLT08P+/fvJ5/P0DWbZfaif4fGjVNeOk2yto+asOlLJJLFYjNbRHE2N9axd1MXKhW3lDkFEpCKdsQlqZGRksrVUmEm8oHf4TQ7nBxlLVpFtrCG9tJHCE6SOhnZWtXbR1dypLjwRkVl0RiWofD7PgQMHgiXUd+zm8JERxnI5FrfPn3xNW1sbyc5mnvCfkkjESaVqaKxpwNLL6W5ZRkNN6gS/QURE/r+cEQkqm82yc+fOydbSSG6MV3ftZZRhAJYsaGb58mV0dnaSSqU4OjrE9uwe1nSsYFVbF631zRqFJyJSYhWboJzQ9QcAAAklSURBVPL5PK/37OblV7aRHx0gFs8zMHKEgewgQ7lhclWjjMZi5OqraOjsZvXqtwY6JKvrueWiDyopiYiUUUUmqL6+PjY/+WN6Dx5mjBHqUxNMxEchnyeWiFHdWkdyYYpYfoKmZC0LOo5fxkLJSUSkvCoyQb366qscHTvIAIfIM8FYNk5TW5Lqljrmza8hlojT3bCA7tZlLGtaosEOIiIRVJEJKp1OU/N6gnwcEo211LcnSbUmaUu2sLK1ixXNSzXlkIhIxFVkguru7mZ+exP/+tr3mV/XQHfLMla2dtFc11juqomIyDtUkQkqFouxoDHN9WuuJp1s1fMkEZE5qCITVEF7SrM8iIjMVVqQSEREIkkJSkREIkkJSkREIkkJSkREIkkJSkREIkkJSkREIimKw8wTAPv27St3PUREZJYVXeuPmxQ1iglqIcDGjRvLXQ8RESmdhcD24g1RTFBbgUuBvcB4mesiIiKzK0GQnLYeWxDL5/Olr46IiMhJaJCEiIhEkhKUiIhEkhKUiIhEkhKUiIhEkhKUiIhEUhSHmZ+QmcWAh4CfufvdZtYC3AecBxwFHnT3e8PX/gbwTWBH0SEudfdBM/t14ItADfAScLO7D5QuksAM42kB7gVWA3XAF9z94bBsTsVjZquBR4p2TQBrgQ+4+2Yz+xjwx8A84IfAJ919rIShTJrhe7Qa+EcgBeSBz7r7D8KySMQ0w3g2AH9HcK04CPyhu78YlkUlnpuAzxD8vYfCevzEzP4U+L2w7t8C7nD3vJmlgU3AUmACuNXdnw+PVfbzaKbxFO13FfC37n5e0bayx3M65lQLyszOAX4E/FbR5nuAIwQX7YuBq83smrBsPXC3u59X9DUY/oM+SHAxNOB14K9LFkjoFOJ5CNjl7u8CrgD+wcwWz8V43P2V4vcFeAr4dpic1gJ3AJcBBjQBnyplLAWn8B59DfhGGNPHgEfNrCoqMc0kHjNrBDYDn3H3c4GPE8RTE6F4DPgS8L7wb34XsNnMfg34beB8ghufDcAHw92+Cjzr7quBm4DHzKw+CufRqcRjZnVmdhfwzxQ1OqIQz+maUwkKuB14AHisaNv5wMPuPu7uo8CTvHXyrQcuN7MXzexZM3tPuP0qYKu7/yL8+T5gY3hnWUrvOJ7wLvdKgosC7r4LeDdwiDkYT/FOZnZpuO22cNP7gSfcvdfdJ4CvE1xIymGmMSWA5vD7BiAbfh+VmGYSz0rgsLv/CMDdXwMGgF8mOvGMALe4+97w558AHQQX70fc/ai7Zwku1DeZWRVwDXA/gLv/D/AL4H1E4zyaUTzha34VSBK0ropFIZ7TMqe6+Nz9EzDZlC34L+BDZvYfBM3YDwCFboaDBN1I/wJcAjxuZuuAJcDOomPsAuYTXFBK1vydYTzdBLNrfNrMrg7L7nb3n5vZXIyn2JeAPyvqelgCZIrKdwGLZ6POJ3MKMd0OPG1mnwLagRvdPRe+R5miY5QlphnG83MgaWZXuftTZnYhsIbgU/9RiSdTqEd44f0y8ARBHX9Q9NJC/dqAuLv3TlFWT5nPo1OIB3ffAmwxs/cec7hIXBdOx1xrQU3ljwj6al8AtgD/BowCuPv17v4dd8+7+3PA8wStkHi4z7GiMLXSdPHMA7qAAXe/BLgRuMfMzmduxgOAma0H0rz9edSx8cSIRiwFU8ZkZrUE3SwfcffFwHuAr4fJKcoxTRlPeMNwLfA5M3sR+DDwNMH7F6l4zCwJPEpwI3cL09dvqnPlRGVQhrhmEM+JRCaeU1UJCWo+8CfuvtbdryB447aZWZOZfe6Y5myM4M5wB7CoaPtZQJ+7Hy1Zrac3ZTzAnrD8QQB33wY8B1zE3Iyn4AZgU9hNVHBsPIsI7v6iYrqY1gL17v5dAHf/T+B/CbpioxzTdOdQHDji7u9193Xu/gfAKoJYIxOPmXUS3HyOAxvcvZ/p6/cmEAu7zI8ti8R5NMN4TiQS8ZyOSkhQtwF3ApjZAoK7jUeAQYLuluvDsncRXMy/T/BA/mIzW1l0jMdLW+1pTRmPu78B/JSwnzksW0/QRz3n4ikqv4zgoX2xJ4DfNLP28AbjVoI7+6iYLqZtQGPYKsTMVhAMPHiBaMc0XTx54HtmdkFYdgPBM7WXiEg8ZtYAPANsdvcb3X04LHqc4HlL0sxqgI8AW9w9R/CM7dZw/3MJ3qNniMB5NNN4TnK4ssdzuubUM6hpfBF42MxeJrjz+wt33wpgZu8H7jWzO4AccIO7HwjLPgp8x8yqCaZ4/3BZan+8aeMBrgO+amYfJ7i5uLMo1rkYDwQP4jPFO7j7S2Z2J0F30jyCZyR/U5rqviMn+p+7Dvj7sLsvRzCEeXtYFtWYThTP7wL3h/9Xe4Frw6HNUXmPPkEwXPy68G9f8CsEIxD/G6gmuDBvCst+H3ggjDcPfMjdD0MkzqNTiWdK7v5mBOI5LZrNXEREIqkSuvhERKQCKUGJiEgkKUGJiEgkKUGJiEgkKUGJiEgkVcIwc5HIMbNHCT7UemHxDN/hZ6R+TPABzOfLVT+RuUAtKJHZcRvBvG+fL2wIp6/ZBNyl5CRycvoclMgsMbMrgO8Bl7j7VjP7GsGsBZe7+0T4Qcw7gE7gZeD2orWWNgB/RbCURQ3B/HgfdfcBM/sWQe/HxcAw8EvhDAkiFUUtKJFZ4u4/JFgf6n4zu5xgyYSbwuT0boLFND9J0NJ6AHjKzOaH091sAe5x9zRwNsE8fzcXHX4DwQz9Fys5SaXSMyiR2fVZYCvwXeB3wnW8IJjv7pvu/kz480NmdjvBUhebgPPdfVvYLbgQOMDbJ/582t13lyIAkXJRC0pkFoWLy30F2O7uxRN1LgVuMbP+whdB91+nu48D15hZBngF+EugkWCevII9iFQ4taBEZt84x6/Bs4dgwck/L2wIZ53eH64w/HngosJqqGb25DH76+GxVDy1oETKYxNwa7hKLWZ2JfAzYB1Ba2kcGDGzhJndSLDQZnW5KitSDkpQImXg7k8DnwYeNLMB4F7gZnd/lmDk32PAi8B+gsER/0QwUELkjKFh5iIiEklqQYmISCQpQYmISCQpQYmISCQpQYmISCQpQYmISCQpQYmISCQpQYmISCQpQYmISCT9H7YSDA3mbGpSAAAAAElFTkSuQmCC\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": 11, + "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": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.856665141368708" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results[system.t_end]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "13.88888888888889" + ] + }, + "execution_count": 13, + "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": null, + "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": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for i in range(1, 21):\n", + " system_i = System(t_0=get_first_label(census), \n", + " t_end=2300,\n", + " p_0=i,\n", + " alpha=0.025,\n", + " beta=-0.0018)\n", + " results = run_simulation(system_i, update_func_quad)\n", + " plot(results, '--')\n", + " \n", + "plot(census, ':', label='US Census')\n", + "plot(un, '--', label='UN DESA')\n", + "decorate(xlabel='Year', ylabel='World population (billion)', title=\"Projection\")\n" + ] + }, + { + "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": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
United States Census Bureau (2015)[28]Population Reference Bureau (1973-2015)[15]United Nations Department of Economic and Social Affairs (2015)[16]
Year
20167.334772e+09NaN7.432663e+09
20177.412779e+09NaNNaN
20187.490428e+09NaNNaN
20197.567403e+09NaNNaN
20207.643402e+09NaN7.758157e+09
\n", + "
" + ], + "text/plain": [ + " United States Census Bureau (2015)[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": 15, + "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": 38, + "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": 39, + "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": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
t_01950.000000
t_end2100.000000
p_02.557629
alpha0.025000
beta-0.001800
\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": 40, + "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": 41, + "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": 20, + "metadata": {}, + "outputs": [], + "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": 21, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "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": "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": "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)." + ] + }, + { + "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/chap09sympy-mine.ipynb b/code/chap09sympy-mine.ipynb new file mode 100644 index 00000000..de26a531 --- /dev/null +++ b/code/chap09sympy-mine.ipynb @@ -0,0 +1,723 @@ +{ + "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": 4, + "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": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAcAAAANBAMAAACX52mGAAAALVBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAEN0iVJnNiUSru3YyZmh4TpEAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABBSURBVAgdY2BgVGZgYGB5CCRYE4AEUwEDQ+e6lRsYGPyAPIYwEKEOxIwvgATHAwYBBvYElgMMrBOkGRiY115gAAAqOAp4YMdHJwAAAABJRU5ErkJggg==\n", + "text/latex": [ + "$$t$$" + ], + "text/plain": [ + "t" + ] + }, + "execution_count": 5, + "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": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACoAAAAQBAMAAACSDPCjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEN0iVJnNiUSru3YyZu9l18v4AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAfklEQVQYGWNgwA4YldHEWR4CBVg+QkRZNkBoyUiQAGsCqigDN0iUqQCLaOf6lRCtMBMgav0hShlQRcOwiqqDRNnT0pKepaVNALFBtjH+ALGAAMUEjg8MApii7AksBzBFWSdIgwVRTWBeewFVlHXet7kQERAJtw0hBGQxGiC4AJR2JRh3Dfv5AAAAAElFTkSuQmCC\n", + "text/latex": [ + "$$t + 1$$" + ], + "text/plain": [ + "t + 1" + ] + }, + "execution_count": 6, + "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": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.add.Add" + ] + }, + "execution_count": 7, + "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": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAKlBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmU0mKAAAADXRSTlMAIom7VJlmdt1E7xDNIS4hGwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAFJJREFUCB1jYBBSMmFgYAxg8E1gYL/CwNvAwLmSYe8BBiAAijAwcDcBCUaNaCDJwKA1AURyrWZgFGBgBiq+DSK5DBg4LjKwJTD4FjAwTA21ZAAAM4UOK1ZklQ8AAAAASUVORK5CYII=\n", + "text/latex": [ + "$$3$$" + ], + "text/plain": [ + "3" + ] + }, + "execution_count": 8, + "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": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "f" + ] + }, + "execution_count": 9, + "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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "sympy.core.function.UndefinedFunction" + ] + }, + "execution_count": 10, + "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": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAUBAMAAAAevyJ8AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJl2IquJVETdZu8yu83OyatpAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA70lEQVQYGTWQMWsCQRCF30W5nAY1pPIavSKxDJJfcHUgpDDYiCB2NmJjIQTO1kqLxE4Q06UIAf9A/kEskj6lhYV2NoF8O1wW3rw3b5jZnZXSc+s4H1t2cRMruzH5YLGZDFSkFsaqOMM7lqUVIjmXX4dP94QncE3xHfZnUhZoDrZMbj1HykQK2r8NqYtZqkuFZdr6hnH/IeUG0skPyQgk4GyM2UF8gh5wRhWY8Q27lqk8aUKyBm5oX48SQ70jhh9JVx7X1aTggBHMpLtXxI7iBranQ7x4WFw6wy3HYblFaKoQG7H+y6Wp9IO+LLHw/4V/hfArzA7LVpkAAAAASUVORK5CYII=\n", + "text/latex": [ + "$$f{\\left (t \\right )}$$" + ], + "text/plain": [ + "f(t)" + ] + }, + "execution_count": 11, + "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": 10, + "metadata": {}, + "outputs": [], + "source": [ + "dfdt = diff(f(t), t)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "type(dfdt)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We need a symbol for `alpha`" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "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": [], + "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": 14, + "metadata": {}, + "outputs": [], + "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": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "C1, p_0 = symbols('C1 p_0')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "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": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "r, K = symbols('r K')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can write the differential equation." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "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": 19, + "metadata": {}, + "outputs": [], + "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": 20, + "metadata": {}, + "outputs": [], + "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": [], + "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": 22, + "metadata": {}, + "outputs": [], + "source": [ + "solutions = solve(Eq(at_0, p_0), C1)\n", + "type(solutions), len(solutions)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "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": 24, + "metadata": {}, + "outputs": [], + "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": 25, + "metadata": {}, + "outputs": [], + "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": 26, + "metadata": {}, + "outputs": [], + "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": 27, + "metadata": {}, + "outputs": [], + "source": [ + "A = (K - p_0) / p_0" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "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": 29, + "metadata": { + "scrolled": true + }, + "outputs": [], + "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": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "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": "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/chap12-mine.ipynb b/code/chap12-mine.ipynb new file mode 100644 index 00000000..da6436f0 --- /dev/null +++ b/code/chap12-mine.ipynb @@ -0,0 +1,1656 @@ +{ + "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": 41, + "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": 42, + "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": 43, + "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": 44, + "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": 45, + "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": 46, + "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": 47, + "metadata": {}, + "outputs": [], + "source": [ + "def peak_infected_proportion(tf):\n", + " return tf.I.max()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "def outbreak_peak(tf):\n", + " return tf.I.idxmax()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "def sick_at_end(tf):\n", + " return get_last_value(tf.I)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.043536202687592354\n", + "30\n", + "0.0006741943156034474\n" + ] + } + ], + "source": [ + "print(peak_infected_proportion(results))\n", + "print(outbreak_peak(results))\n", + "print(sick_at_end(results))" + ] + }, + { + "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": 51, + "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": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
initS 0.988889\n", + "I 0.011111\n", + "R 0.000000\n", + "dtyp...
t00
t_end98
beta0.333333
gamma0.25
\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": 52, + "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": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.468320811028781" + ] + }, + "execution_count": 53, + "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": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.30650802853979753" + ] + }, + "execution_count": 54, + "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": 55, + "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": 56, + "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": 57, + "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": 58, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
0.000.468321
0.050.387288
0.100.306508
0.150.229234
0.200.161365
0.250.108791
0.300.072816
0.350.049938
0.400.035520
0.450.026121
0.500.019689
0.550.015072
0.600.011622
0.650.008956
0.700.006839
0.750.005119
0.800.003696
0.850.002500
0.900.001482
0.950.000603
1.00-0.000161
\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": 58, + "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": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap05-fig03.pdf\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl8XGW9+PHPTPY0SZOuSfeWtt8ulK0tZREtIAJXUATEhctVUVTcroB6FURRNi+LchUQvbihKNwfCCiiVmSRnZaWUrp8u+9pmq7Zt5n5/fGcSaZDkp6kmTXf9+s1r8w588w535nMnO8853nO8wQikQjGGGNMugmmOgBjjDGmO5agjDHGpCVLUMYYY9KSJShjjDFpyRKUMcaYtGQJyhhjTFrKTXUApn9EZDMwsYeH81S1Y4D3lwdcoar3ess3AOep6ryB3I+37YXAs0Cpqjb4KH8a8GtgLPBVVb3vCPY9EjhLVX/fz+eXAPXA6ar6XH/j6Md+PwncoaojkrXPI+F9fu9Q1buPcDtJ+1z2R3x8pm+sBpXZrgWq4m8DnZw8Hwe+H7N8B3B2AvYD8DLutTT6LP8dYC0wA+hXYolxG3DhEW4jFR4GZqU6iD6YD/xyALaTzM9lf8THZ/rAalCZrV5VdyVpX4HYBa9mc9jaTX+oahvQl9dVDjylqpsHYPeBwxdJP6raDDSnOg6/VLV2gDaVtM9lP2Xk5yldWILKUt6pjgW4WvJJwFeAR4DbgQuAkbgk8DNVvcl7Tg6uVnYFMAxYDHzJK/srr0wEOB1YSMypFBGZh6t9zMcdIB4Avq2q7d4pu0eAq3G/JiuAfwGfUdWabmJfSMwpPm+fnwK+DMwEVuBO5b0Sc6pznoh8R1UDIlIK3AlcDESAZ4D/VNWd3vaHAT8EPuDt8i/e67wK+ET0dXrbygNuBD4JFAGvAl9RVfXKFQM/Bj6MO7X37V7+J58GbsXVckPeuuOApcAEIAz8DHi3F/c/gC+q6u6ethmz7U/ineITkUnAJu/1/RAYBzwNXImrYZwPVANfUNVF0dcLfAz4FiDAEuDfga8DlwF1wLdU9bcx5c9X1Se95YUc+j/bDPwI+BBwIrAeuE5V/+yV3+zF8qQX6zt4738u8D3gUtwp3H3AQ7jP0mkk93P5Sdz3aJX33t4G/KAv8anqcyLyH7jPyThgDXC9qv6lu/dgsLNTfNntHNwX7iTgKdzB6mRcghLcgfVGEZnrlf8O7gv4VeB4YBvu4P2Kt24f7tTby7E7EZHpwPO4L+58XIK7DLglplg58HngIm//C+jlYN6Nm4DrvfjbgJ976+cDy3EJqcpb93Pv9Z0NvAd3sP+7d7ADeAyYA7wfOAOYDdyDO2D+H+6gGd3W971yH/FiVuB5ERnqPX4v7kD0b95ru6qX1/AoUIY7kEZ9FHheVbcDPwVC3mt6DzDJe139dSPuFNNZuAP3W7j/3VxgGXB/XPkf4P7PJ+ES5lJcYpoP/BH4mdfG5tf3gfuAecA64Fcikh9XZhuHnqI+BtjjxQJdCfITwDRv+Yu4z9DLJP9zeTzuh8gJuGTXp/hE5Gzc9+47uM/gz4BHROTkXvY5aFkNKrPdKSI/iFt3XkzjfDNwq6qGAUTkJVyNaan3+O0i8h1glogsxf3CvklV/+iV/yJwA1AKHAQi0VOKIhK7z88CG4Evq2oEWCMiVwG/9WpyADnA1ar6hvf83+EOhH7drapPec+9HXhCRApUtVZEOoAGVd0lIlNwB/1xqrrDK38Z7qB3johswtVQjlPV5d7jnwXO8X75NwM53raKcAnnTFV9yYvjK95B5jIReQCXAD4UfVxEPodL6O+gqgdE5CngElyNBu/+rd79SbjEsVlV20TkY7j3vr9uVtXFXlwvAGWq+mNv+R7gYhEpVdV6r/w9qvqs9/iTwHnAtaoaEZEf4mqwk3E1WD/+oKoPedv7Hu6HxCRceyEAXk0y+pnKw7WlLQWu84qsBD6pqs97y5tF5OvALFV9VERS8bn8Xsz++hrftcDt0fcF2OD9QLwGV+M3MSxBZbZbgd/FrdsRc39TNDl5fgec5x2wpwPHASW4L+kI3Km8xdHC3oHrGnjHFz/ebOBV7yAQ9SKQh/tVGbU25n6d97hf8c8F9/ltjSsX7SigcTEX42pVRbga2FvRB1R1Ce6UVryjgAJgkXeKJqrQ25Z4r2FpzGNLcKfqevJ74Kci8gVcTWYs7jQTuBriw8CFIvJPXK3lD71s63DWx9xvwiXpqBbvbwGuRtBd+c0x/9PY8n519z/r7X9+FzAemBf93Krqn0TkdBG5DfeZPQaX5HJ87D8Rn8um2HbffsQ3G1ggIt+KWZcXF4PxWILKbHtUdX0vj8c3mv8SeC/u1MQDuBrTcu+xNu9vf4a3765xPto4HHsaua2HMn7EP7en5+cC7bhTMfGvZR/udJzf1xj9fpwFxLcD1dHVzT82jpB368mTuFNrZ+BOwf5VVfdD58FuPPBB4Fzc6bHLgPf5jDdee9xyb4mzP+VjdXcs8fs/Q0Qux7UznqKq+2LW3wD8J+6z+yjwX7g2Hj8S8bk8ZJv9iC8X187357j18e+9wdqgBg2v48BlwH+o6rWq+jDuizkUCKjqQdxB+ISY5xSJSI2ILKD3g/pq4CQRif1in4L70m0Y4JdyOKtxv0iHqOp6L4FX4zqHTMf9Ui0gpku2iLxHRLZ57SOxr3M90AGMitnWBtxpzxNxDdxtuHaLqDn08gtcVVtwbWAfwHUgeNCLIeCduhyrqr9Q1Yu9x88SkVH9fTMSKPrZiZrS3w2JyEm4trwrVPXNuIe/CFyjqtd4HTQ2434YRD9rqf5c9jW+1cDE6OfJ+0xdguugYuJYDWrwaMFdV3Sh1w4zBnfQDtB12uZHwPVeD6u1uHaAg7h2kXFAiYjMwp3Xj3UPrnPFT0Tkblw7xZ3Ab1T14GFODw4oVVUR+RPwgNeGVgvcjGtXWOO1A/0duF9EvoQ7gNwJ/NNr92kAjhaRiaq6RUTuBf5HRFpxDf1X4RrAv6uq9SJyP/BDEdmPq1Xdy+FraA/iklQEV6PCa+eZBdwtIl/BnXb7GO6At8frYTkSOOh1KU+1xcA1XttlFfC1/mxERKpwpzJ/ievIUhnz8D5gL/B+EfkXroPJDbjedtHPbAOp/Vz2Nb7bgD+IyBpcL80zcL0ALxuIYLKN1aAGCVVtxzXovxfXq+kBYBGud1+0F9/twC9wp6CW4Q487/euS/qnt24Zrldb7LZ34k5XnYA7ZXi/t/0vJvRF9ewTuLagx3EH0qG40SEOeI9fBmzBdYtehGtD+pL32K+BSmC1d7D8Bq6N6Fe4dqsTgHNVNfoL/CrgT7iD7N+B39D9qa1Yz+AS0GNxyebTuA4DT3v7Go97/8Pe/Wpcb8J08CVc7fJN3EH/m/3cztm4z9mVuB8T1TG3U3Dd+6MdMx7HJexf0PWZTfXnsk/xqepjuM4mV+O+h1/Hdff3e9pyUAnYjLrGGGPSkdWgjDHGpCVLUMYYY9KSJShjjDFpKet68YlIAW5Yk2p6vx7FGGNM8uTgOsQsVtX4C+y7lXUJCpecXkh1EMYYY7p1Gm5Ej8PKxgRVDfDggw9SWVl5uLLGGGOSYNeuXVx66aXgHaP9yMYEFQKorKxk3LhxqY7FGGPMoXw3vVgnCWOMMWnJEpQxxpi0ZAnKGGNMWrIEZYwxJi1ZgjLGGJOWLEHF2b2/iWW6m5bWjlSHYowxg1o2djPvt1A4whP/2kBrW4h12w7w4TOnEQj0ZdJXY4wxA8VqUDGCAQiH3fQju/c3sXHHwRRHZIwxg5clqBiBQIA5R43oXF6yugabL8sYY1LDElSc46aPJC/HvS21B5rZXF2X4oiMMWZwsgQVp7gwj6NjalGLV1ktyhhjUsESVDeOl5HkerWo3fub2LKrPsURGWPM4GMJqhvFhXnMnjK8c3nxql1WizLGmCSzBNWD42UUOUHXxbxmXxNba6wWZYwxyWQJqgclRfG1KGuLMsaYZLIE1YsTYmpRu/Y2sn13Q4ojMsaYwcMSVC9KivOZNbmrFvX6SmuLMsaYZLEEdRgnzBhF0KtFVe9tZEet1aKMMSYZLEEdRmlxPjMnDetcXryqJoXRGGPM4GEJyoe5M0YT9AaN3VHbYLUoY4xJAktQPpQNyWfGpIrOZatFGWNM4lmC8im2FrV9dz0791gtyhhjEskSlE9DSwqQiV21qCVWizLGmISyBNUHc2eM7pzAcGtNPbv2NqY4ImOMyV6WoPqgvLQAmVDeuWxtUcYYkziWoPpo7syuWtSWXXXU7GtKcUTGGJOdLEH1UUVpIdPGd9WilqzalcJojDEme1mC6od5MbWoTdV17N5vtShjjBlolqD6YVhZIVPHDe1ctrYoY4wZeJag+mnezNGd9zftPEjt/uYURmOMMdnHElQ/DR9axFHjYtqiVltblDHGDKTcZO5MRI4F7gOOATYCl6vq4l7KlwNvAd9R1V8nJcg+mD9zNBu2HwBgw46D7D3YzPChRSmOyhhjskPSalAikg88ATwMlAM3A4tEpKyXp90HjE1CeP0yoryIKWO72qKWrLa2KGOMGSjJPMW3EMhT1btUtV1VHwJWAh/prrCIfAIoA1YkL8S+mz+zsvP++u0H2VfXksJojDEmeyQzQc0CVsetWwPMiS8oIpOB7wKXJyGuIzKyoojJVa4SGIlErEefMcYMkGQmqBIg/oKhJqA4doWI5AC/A76mqhnR82D+rNha1AH2Wy3KGGOOWI+dJETkH0DEz0ZU9X0+ijUC8T0IioH4eSuud5vUP/rZdzoYNayYiZVlbNlVRyQSYcnqGs5aMDHVYRljTEbrrQb1Nq6NaCWwFTgTCACLgZeAZly7Uvxpu56sAiRu3QxvfayPAheLyAEROYA7BXiviNzrcz8pMX9W13VRa7cdYH+91aKMMeZI9FiDUtWrovdF5BHg26p6a2wZEflP4Dyf+3oWCIjIVcDdwEW47uaPxe13Rtw+3gTuSsdu5rEqhw9hQmUpW3fVE4lEeGP1bt574oRUh2WMMRnLbxvUucAj3ax/CjjVzwZUtc3bzkXAPuA64AJVrRWRa0Vkpc9Y0lZsj761W/dzsKE1hdEYY0xm83uh7kbgw8Atces/if9TfKjq28C7ull/Szfbjj52nN/tp1rViCGMG1XK9t31hCMR3lhTwxnzrBZljDH94TdB/RfwuIi8H1iKa4s6Edd1/NwExZaRTpw1mu276wFYs3k/c2eMZmhJQYqjMsaYzOPrFJ+qPgUcC7wKTAOmAs8Bx6jqCwmLLgONGVnCuFElAF4taneKIzLGmMzkeyw+VV0NXCMipUCjqoYTF1Zmmz+rku271wOwZvM+5s0cTdmQ/BRHZYwxmcX3hboicrWIVAP7gUki8isRuUtEkjrgbCYYO7KEMSNia1E2uoQxxvSVrwQlItcA/wl8A4h2TXsCN45et50bBrvY66JWb95HfVNbCqMxxpjM47cGdQXweVX9LRAGUNXHgU8AH09QbBlt3KgSxowYAkA4bG1RxhjTV34T1ATcwK7xNgPDBiyaLBIIBA4Zo2/1pr00WC3KGGN885uglgGXxCxHx+j7vPeY6ca4USVUDne1qJDVoowxpk/8JqivAdeKyF+AAuB7IvI68Fngm4kKLtO5WlRXW9SqTXtpaG5PYUTGGJM5/F4H9QowHVdb+gtQgbsOaqZdB9W7CaNLGT3MzSgSCkdYaj36jDHGF7+9+K4F6lT126r6IVU9X1W/ARwUkdsSG2JmCwQCnBjTFrVy414arRZljDGH1dt8UFVAqbd4I/CsiOyNK3Y88GVc93PTgwmVpYyqKGb3/iZXi9LdnHbc2FSHZYwxaa23GtQpuJ570cFgX/KWY29/8G6mF/FtUSs37qWpxWpRxhjTmx4TlKo+ihtzT3CDw56MG4cvepsKVKrq5UmIM+NNqipjVIVri+oIhVmq1qPPGGN602sblKpuVNX1QB6wFyhV1Q2qugE4h65TgOYw4mtRb2+wWpQxxvTGbzfzc4AVwPtj1l0ILBeRMwY8qiw1qaqMkeVFgKtFLVtbm+KIjDEmfflNULcA16rqzdEVqvpe4Hrg9kQElo0CgQDzZsbUotbvsVqUMcb0wG+CmoYbHDbeE8DMgQsn+00ZO5QRXi2qPRTmTatFGWNMt/wmqHXAed2sPxvYNnDhZL/4WtSKDXtobu1IYUTGGJOe/M7ldAvwoIicCizGjcV3AnAxYL34+uiosUMZXlbI3roW2jtcLerkOVWpDssYY9KK36GOHgb+Ddeb7zO4aTYKgDNU9cHEhZedAoEA82J69L21vpYWq0UZY8wh+jLl+yJgUQJjGVSmjitncVkN+6K1qHW1nHS01aKMMSbKd4ISkQtxo5pPB+bjptqoVtW7EhRbVou2RS16bQsAb63fw3HTR1KY7/tfYowxWc3vYLGXAfcDfwWKcSNLbARuFBEbh6+fpo4rp6K0EIC29hBvrduT4oiMMSZ9+O3F93XgSlW9EQgBqOrPcB0krkxQbFkvGAwwb+aozuXl62ppabO2KGOMAf8JairwejfrlwKV3aw3Pk0bX0F5aQEAre0h3lpvtShjjAH/CWot0N2QRhcDOnDhDD6uFtXVo2/5ulpa20MpjMgYY9KD3wT1beDHInIPrmPFFSLyf8BNwA0Jim3QmD6+gvISrxbVFmKF1aKMMcb3dVBP4qbbGIqbByo6qsQpqvp4gmIbNOJrUcvW7qbNalHGmEGutxl11wPvVtWd3pTvP1LVf09eaIPL9AkVvL5qF3WNbbS2ubao2KRljDGDTW81qCpghnf/RqAk8eEMXvG1qDfX1lotyhgzqPV2VegfgadFJNrveYeIdFtQVfP97ExEjgXuA47BXUd1uaou7qbcebjx/yYDu4HbvG7tWU0mDmPJ6hrqGttoaeuwWpQxZlDrrQb1H8BC4MO4C3Ov8O53dzssEcnHTc/xMFAO3AwsEpGyuHJVwCPAf6lqqbf9u0TkBN+vKkPlBAPMnXFoW5RdF2WMGax6rEGpagT4F4CIXAE8pKqtR7CvhUBezNBID4nIl4CPAP8bs99qERmpqvUiEgSGAx1A/RHsO2PMmDSMpbqbgw2ttLaFWL62lgU2Rp8xZhDyO/DbL4HzRGQubkTzQOyDqnqtj23MAlbHrVsDzIkv6CWnYuCgF+N/q+o6n7FmtJxggBNnjeYfr28F4M11tcyZOoLiwrwUR2aMMcnl9zqoHwKPAx8C3g2cFnN7l89tlABNceuacGP7dacFGIIbmPZyEfm0z/1kvGnjKxhW5sboa+8Is8xm3TXGDEJ+a1CXAF84wo4KjUBR3LpioKG7wqoaBtqAJSLyc+CDwC+OYP8ZIxgMsGB2JX99ZTMAK9bv4dhpIykpslqUMWbw8FuDKgSeOcJ9rQLiuwHO8NZ3EpH3iMgbceUKgANHuP+MMmXsUEZWuHzeEQrzxuqaFEdkjDHJ5TdB/Qa4SkRyjmBfzwIBEblKRPJE5KO47uaPxZV7ExgrIleLSI6InAJ8mkFSe4oKBAKcNLurc8TKTXupa2xLYUTGGJNcfhPUOFySqBGRJSLycuzNzwZUtQ04F7gI2AdcB1ygqrUicq2IrPTKHcRNL3+hV+7nwGdU9fk+vbIsMKGylKrhQwAIhyMsXrUrxREZY0zy+G2DUuC2I92Zqr5NN50qVPUW3IW50eWl3ZUbbAKBACfNqeKx59YDsGbLfk6YMapzkkNjjMlmvhKUql6f6EBM98aOLGH86FK21dQTiUR4fWUNZ580MdVhGWNMwvU2WOwtwE2q2uTd75HP66BMPy2YXcm2Gned8rpt+5k7YxQjyuM7RBpjTHbprQZ1GpCPu1bptF7KRQY0IvMOlcOHMLmqjE3VdQC8tnIX7z91coqjMsaYxOptqKPTurtvUuPE2VWdCWrTzoPU7Gti9LCernE2xpjM57cXn0mxkRVFTBtf3rn82tvVKYzGGGMSzxJUBjlxViWBgBsGcWtNPTtrux2EwxhjsoIlqAxSUVaITKjoXH717V1EItYEaIzJTpagMsz8WaMJerWonXsaOnv3GWNMtvF7oS4iMhw3NUZ3020sGuC4TA+GlhQwa/Iw3t64F3C1qPGjSztP/RljTLbwlaBE5JPAT3GDtsaLAEcyRp/po3mzKlm9eR+hcITd+5vYXF3H5DFDUx2WMcYMKL+n+L4J/Bo3u21e3C0/IZGZHpUU5TFn6ojOZWuLMsZkI7+n+MYDP1LV/YkMxvh3goxi5ca9tHeE2XuwmXXbDjA9pgOFMcZkOr81qKeB9yQyENM3xYV5HDttZOfy66t2EQ5bLcoYkz381qDeAP5HRM4H1uJmuu1kY/GlxnHTR7Ji/R5a20McqG9lzZZ9zJo8PNVhGWPMgPCboM7CJakKYEHcY/azPUUK83M5XkbxqjeqxOJVNciECnJy7OoBY0zm8zvdho3Fl6aOmTqC5etqaW7toL6pjVWb9h3SgcIYYzJVX66DGgl8AZiNa7taDdyvqlsSFJvxIT8vh7kzRvHi8p0ALF5dw4xJw8jLtVqUMSaz+TqKicg8XNvTR4EGoB43dfsKETk+ceEZP44+agQlRXkANLW0s2LDnhRHZIwxR87vz+wfAv8PmK2ql6vqp3A1qQeBOxIVnPEnNyfI3JmjO5eXrtlNW3sohREZY8yR85ug5gF3qmo4ukJVI8BdvLPThEmBWZOGUTbEXTPd0tbB8nW1KY7IGGOOjN8EVQNM6Gb9JNwpP5NiOTlB5s+s7FxetraWltaOFEZkjDFHxm8nid8BPxeRrwCveutOBv4Hd5rPpAGZWMEbWsOB+lba2kMs1d2ccsyYVIdljDH94rcGdRPwHPAYsMu7PQI8AXwrIZGZPgsGAyyY3VWLWr6uloMNrSmMyBhj+s9XglLVVq9jxCjgNFyb1DBV/aqqtvX+bJNMU8eVM3pYMQChcIQX39yR4oiMMaZ/ejzFJyLvA55R1Q7vfqwSYKSIADYfVDoJBAK8+/hxPPLMOiKRCJuq69hSXcfEqrJUh2aMMX3SWxvU34BKYLd3vyc2H1SaGT2smJmTKli1aR8AL7y5g3GjSmwIJGNMRuntiJWnqruj93u52XxQaeiko6soyHO/Gw40tLJ8nV28a4zJLD0mKFWNvdLzr0CJqoZib8Aw4OVEB2n6rrgwjxNndXWYWLx6Fw3N7SmMyBhj+qa3Nqh3AzO8xTOBz4hIfVyxmYAkKDZzhI6eOoJVm/ayt66F9o4wL7+1k/ctmJjqsIwxxpfe2qAOAt8GAt7taiAc83gEd5HuNxIWnTkiOcEApx0/lsef3wDA2q37OXrKcMaMLElxZMYYc3g9JihVXY43eoSIvACcr6oHkhWYGRjjRpUydVw567e7f92/3tzBJWdOJxgMpDgyY4zpnd/roE4DPiAiF0bXicjvReRjfdmZiBwrIq+ISKOIrBCR+T2UO0tE3hCROhFZLyKf68t+zKFOPXYMuV4Pvj0Hmlm5aW+KIzLGmMPzO93GN4EfAwUxq9cB94jIl31uIx838sTDQDlwM7BIRMriyo0HHsWNXlEOfAy4VUTO9rMf806lxfnMixnt/LW3d9k4fcaYtOf3wpgrgY+q6h+iK1T1u8BlwFU+t7EQ13X9LlVtV9WHgJXAR+LKTQJ+r6qPqWpYVRfjhlk61ed+TDeOmz7ykNHOo9PEG2NMuvKboIYDm7tZvw53Ma8fs3Cz8MZaA8yJXaGqL6jq56PLIjIMN7zSMp/7Md3IzQly2nFjO5dXbtpH7f7mFEZkjDG985ugXgO+JiKdI0aISBD4KrDE5zZKgKa4dU1AcU9PEJGhwJ+8/T/hcz+mB5OqyphQWQpAJBLhX8u2E4lEUhyVMcZ0z2+C+hpwIbBZRJ4UkT8Dm4CL8X+KrxEoiltXTA/zSYnIdNzUHjXAxbGTJZr+CQQCnHbc2M4efNV7G1m7dX+KozLGmO757cW3DHdB7h3Adlxyuh2Yqqpv+NzXKt55Ue8Mb/0hvIuEXwMexyWnFp/7MIdRUVrIcdNGdi6//Fa1TQ9vjElLficsRFVrcRMUHkJERqtqjY9NPAsEROQq4G7gIuAY3BxTsds7CngSuE5Vf+I3PuPfvJmj0S37aWxpp7GlncWrazjVJjY0xqQZXwlKRKYC/43r6BBthwrgup1X4QaN7ZWqtonIucB9wPdxnS4uUNVaEbkWuFRVZwNfBEpxXctvjdnEPar6X75elelVfl4OpxxTxT9e3wq4iQ1nTR5GRWlhiiMzxpgufmtQ9+EmK/wVcCPwXWAK8Eng8z0/7VCq+jbwrm7W3wLc4t2/Gjeskkmg6RMqeHvDXqr3NhIOR3jhzR2c/64pBAI2woQxJj347SRxEnCFqt4GvAm8oKqfBa4FLklUcCZxohMbRhPS1l31bK6uS3FUxhjTxW+CCgLRKzsVON67/ygwd6CDMskxsqKI2ZOHdS6/8OYOOkLWWdIYkx78Jqi3gA9691cC7/buV2Gz6Wa0k46uojDfnemta2zjzbW1KY7IGGMcvwnqe8AdInIl8CBwrog8DTyCm8zQZKjCglwWHN01GMiS1TXUN7WlMCJjjHH8Xgf1V9w1S/9Q1e24jg5vAfcAVyQuPJMMsycPZ2S5u4a6IxTmpeU7UxyRMcb472a+BPiUqq6AzrmirKddlgh6Exv+8dn1AKzffoBtNfWMH12a4siMMYOZ31N844H2RAZiUmvMiBJkQkXn8otv7iAUtnH6jDGp05froJ4QkfuAjcAhw2Cr6qKBDswk38nHjGHjzoO0d4TZW9fC2+v3cOz0kYd/ojHGJIDfBHW99/fObh6LYD35skJJUR7zZ1by8grXBvXaql1MrCqjvLTgMM80xpiB1+MpPhG5XESGeIt5vdzyEx2kSZ5jp43oTEht7SH+9upmuzbKGJMSvdWg7gYW4abJaAbGqOqepERlUiYnJ8j7Fkzk0WfWEQpH2HOgmX8t284Z8yakOjRjzCDTW4KqBu4Vkde8cleLSLdzN3lj6ZksMaqimNOOG8tzS7cDsGrTPsaMKGHGpGGHeaYxxgyc3hLU5bhBYS/CtTOdD3R0Uy6CN9CryR7GNgklAAAZeklEQVSzpwynek8j6k1o+NzS7YysKGL40Pg5J40xJjF6TFCq+jxwBoCIbAMWqureZAVmUisQCLBw7jhqDzSzr66FjlCYv76ymUvOnE5+nvWJMcYknt+RJMZbchp88nJzOOfkSeTluI/JgfpWnn1jO5GIXR9ljEk8vxfqmkFqWFkhC+eO61xet20/b2+w3yrGmMSzBGUOSyYOY/aU4Z3LLy7fwe59TSmMyBgzGFiCMr6cdtzYzgFlQ+EIf3t1My1t3fWZMcaYgWEJyviSmxPknJMndXaQqGts45+vb7X2KGNMwvTYi09EqnFdyA9LVccMWEQmbQ0tKeDMeeP56yubAdhUXceytbWcIKNSGpcxJjv1dh3Ut5MWhckYR40r57jpIztn3n11RTWVw4oZM7IkxZEZY7JNb9dB/cLPBkQkb+DCMZng5Dlj2LW3iV17GwlHIix6bQuXvHc6xYX2UTDGDBy/ExaOBL4JzKJr5PIAUAAcDdgYOINITjDAOSdN5KF/rKWlrYOG5nYWvbaVD5w2hWAwkOrwjDFZwm8niZ8DlwCbgNOBdUAYN/X7zYkJzaSzkuJ8zlowgUDAJaTtu+tZsromxVEZY7KJ3wR1BvAJVf0CsBL4paqeDdwGnJKo4Ex6m1hZxtwZXR0kFq+uYeuuuhRGZIzJJn4TVAGu1gSwGpjr3f8lcOpAB2Uyx4mzKhk3qhSASCTCP17fSkNTW4qjMsZkA78Jai1diWg1sMC7X+zdzCAVDAZ434IJDPE6SDS3dvD3V7cQCtv1UcaYI+M3Qd0B/FpELgUeBi4VkfuB3wEvJio4kxmKC/M4+6SJBL32qOq9jby6ojrFURljMp3f0cwfAN4LrFZVBT6I67n3CvCpxIVnMsWYkSWcdHRV5/KytbvZtPNgCiMyxmQ6XwlKRK4F3lDVpQCq+ndVvRC4xrsZw/EykslVZZ3LT7++lRobVNYY00+9DXVUBZR6izcCz4pI/DwLxwFfBr7hZ2cicixwH3AMsBG4XFUX91L+ROBJVbWxdDJAIBDgzPkT+L9/rqWusY3W9hCPP7+ec06exMTKssNvwBhjYvRWgzoFWIPrFAGurWlN3O0h4A9+diQi+cATuDasctz1U4tE5B1HLhEJiMhngEVAvq9XYtJCYUEu5548mcJ899unvSPMX17cxJot+1IcmTEm0/SYoFT1UWAqILhRI04BpsXcpgKVqnq5z30tBPJU9S5VbVfVh3DXVH2km7LfA64EbvK5bZNGRlYUcdHpUyktdr8twpEIT7++laW620Y/N8b41msblKpuVNX1uMTyGrANd01UEVCjqrv7sK9ZdNXGotYAc7ope5+qzgWW9GH7Jo1UlBVy0RnTGD60qHPdy2/t5MXlOy1JGWN88dvNPCIiNwMHgRXAW8AeEblbRHJ6f2qnEiC+xbyJbq6jUtWdPrdp0lhJUR4fWngUY2NGOl++rpZFr20hFAqnMDJjTCbwm6BuAi4HPg1M9m6fBi4Arve5jUZczStWMdDg8/kmAxXm53L+aVM4alx557p12w7w5xc30dYeSmFkxph05zdBfQK4QlV/r6pbVXWLqv4e+BwucfmxCteeFWuGt95ksdycIGcvmMico0Z0rtu+u57HnltPY3N7CiMzxqQzvwmqFDfcUbz1wEif23gWCIjIVSKSJyIfxXU3f8zn800GCwYDvPv4sYdczFt7oJlHn13H/vqWFEZmjElXfhPUEuDz3ay/EljmZwOq2gacC1wE7AOuAy5Q1VoRuVZEVvqMxWSoQCDAvJmjOXPehM5hkeoa2/jjs+vtgl5jzDv4mrAQ+BbwjIgsxA1vBHAyrrv5OX53pqpv4+aQil9/C3BLN+ufw10zZbLIzMnDKCrM5W+vbKYjFKa5tYPHn/Mu6K2yC3qNMY7fsfhew02x8TwuKY3DXUQ7Q1VfSlx4JltNqirjgvcc1XVBbyjMX17axJrNdkGvMcbpbaij7wB3qGoTgKquAa5KVmAm+1UOH8JFZ0zlzy9spK6xzV3Qu3grjS3tnCCjOmfrNcYMTr3VoL6Lu3bJmISpKC3kwtOnMaK86wqEV1ZU8+KbdkGvMYNdbwnKfr6apHAX9E5l3KiYC3rX1/L3V7fQ3mEX9BozWB2uk8Q4ESk83EZUdesAxWMGqYK8HM5/1xSeXryVddsOALB++wF27W3klGPGMG18uZ3yM2aQOVyC6nEqDE8AiAB+hzsypkc5OUHet2AixQV5LF9fC0BDczuLXtvCW+v38K5jx1A5fEiKozTGJMvhEtTpQPwcUMYkTCAQ4F3HjWFEeREvr9hJc2sHALv2NvLIM+uQCRWcPKeKkmKbhcWYbNdbgooAa/o4YrkxRywQCDBz8jCOGjeUJatrWL6ullDYdZjQrfvZuOMgx88YxfHTR5GX6/dac2NMprFOEiZt5eflcMoxY/j42TM4auzQzvXtoTCvr9zFg39bzdqt+623nzFZqrcE9RugOVmBGNOToSUFnHvKZC54z1GHdEePtk89akMlGZOVeptR91OqWp/MYIzpzbhRpVxy5nROnzueooKus9O79jby//65lqdf30KDjY5uTNbwOxafMWkhGAwwe8pwpo4v54249qk1W/azYbu1TxmTLewbbDJSgbVPGZP1rAZlMlq0fWpbTT0vvbWTPQdcs2m0ferVt6uZMXEY0yaUU1F62GvOjTFpxBKUyQrjR7v2qdWb9/Hq29Wd10/VNbbx+qpdvL5qF6OHFSMTK5g6rpziwrwUR2yMORxLUCZrxLdPrdy4l9b2UOfjNfuaqNnXxItv7mRCZSnTJ1QwecxQa6syJk1ZgjJZJ9o+deLsSjZX16Fb9rNlVx1hrzNFOBJhc3Udm6vryM/L4aixQ5k+oYKxI0sIBu3yP2PShSUok7Vyc4JMHVfO1HHltLR2sG77AdZu2U/13sbOMm3tIVZv3sfqzfsoKcpj2oQKZELFIddbGWNSwxKUGRQKC3KZc9QI5hw1goMNrazduh/dsp8DDa2dZRqa21mmu1mmuxk+tAiZUMGUsUMZWpJvI6kbkwKWoMygM7SkgPmzKpk3czS79zejW/axbtuBzo4VAHsPNvPyimZeXrGT4sI8qkYMYczwIVSNGMKI8iI7FWhMEliCMoNWIBBg9LBiRg8r5tRjx7K9pp41W/azaedBOkJdEyU2tbSzYfsBNmx381Tl5Qap9JJV1fAhVA4vJi/XZpwxZqBZgjIGyAkGmFhVxsSqMtraQ2zccZB129yEibE9AQHaO8Jsq6lnW40bCSwYCDCyoqgzYVWNGGLd2I0ZAJagjImTn5fDjEnDmDFpGOFwhH11LVTvaWTnnkaq9zS8Y7y/cCTS2YX9TdxEi+UlBVSNGELl8CFUlBUwrLSQwgL7uhnTF/aNMaYXwWCAEeVFjCgvYs7UEQDUN7W5hFXbQPWeRvbWtbzjeQcaWjnQ0Mrqzfs61xUV5DKsrJCK0gIqygo77w8pyrNOGMZ0wxKUMX1UWpxP6YR8pk+oAKClrYNde5uo3uMSVs2+ps4BbGM1t3awo7aBHbUNh6zPz8txSavUS1pl7n7ZkHzrjGEGNUtQxhyhwvxcJlWVMamqDICOUJja/c1U72mk9kAzB+pb2F/fekjHi1ht7aHOU4SxcoIByksKKB2ST0lRHiXF+ZQW51FanM+QojxKivLIybFRMEz2sgRlzADLzQm6DhMjhnSui0Qi1DW2caC+lb11LRyob2FfXSv761tobQt1u51QOMLeupZuTyGC64U4pDCXIUUuaZUU51Fa5P31losKcu30oclYlqCMSYJAIMDQkgKGlhQw0atpgUtcza0d7KtrYX9dq/tb38r+uhYaW3qffDESidDQ3E5Dc3uPMwrnBAMUF7pEVVSQS3HhoX/dLY8ibznHTimaNGIJypgUCgRcAikuzGPcqNJDHmtp66CuoY36pjYamlwiqm9qc0mpqY3Glo7DzncVCkeob3Lb8KMgP8clsJikVZSfQ0F+DgV5uRQW5FCQF112f3NzglZLMwlhCcqYNFWYn0vhsFxGDSvu9vFQKExjSwcNXgKq95JYg5fE6pvaejx92JPWthCtbSEO1LcevrAnGAx0JqvC/Nx3JLDC/BzycnPIzwuSn5tDXvRvbpCCPPfX2tJMdyxBGZOhcnKClA3Jp2xIfo9l2jtCNLV00Nzqbp33Wzpoao3eb6eptYOWtlC/ZiAOhyOd2wf/ie2Q1xIMkJ8Xm7RcQuv6GyQ3x/2Nvd+1LofcnMA7/lrNLrMlNUGJyLHAfcAxwEbgclVd3N9yxpje5eXmMLQkh6ElBYctGw5HaGnrSmbRhNbaFqKlzf1tbQ91/m1pC9Ha1tFtl/q+CnUmuSPeVKdAIEBuTuCQZJaTEyA3GCQ3N0huMEBubpCcYNCV88q4W4CcnKBX1m0jJ+jW5QQPXc7NCRCMWWdJceAkLUGJSD7wBHAX8G7gImCRiExU1bq+ljPGDKxgsKs9rC86QuHOZBWbwFpbvb/tIdo7QrS2h2nvCNHWHqa9PURbR5i2jhDt7WHC/ai5HU4kEqG9I0J7R3hAE9/hxCar2GQWzAmQE+xa79YFCXqJNNi5Puju5wRiyrp1wYBbHy0bDMTcj3s8GIhZH1c+U5JoMmtQC4E8Vb3LW35IRL4EfAT4336UM8akgdycICVFQUqK+jf+YCQSoSMU6UxebR0h2jvCtLWH3K0jTEdHmPaQ97cjTEfI/Y29H7+up+vOEi0cjtAW7lvbX7IFAgGCATqT1yHJLCaJBYN0PjakKJ8TZ42moqwwaXEmM0HNAlbHrVsDzOlnOWNMFggEAuTlBsjLDVI8gMe+cDjSmaiiSSsU6loXCkcOWd8eChMKhenwyoSizw1FCHnlQ6EIobArEwp3bS+6r4E43ZkMkUiEUIQ+xttIOBLh3JMnJSqsd0hmgioB4i/WaALiuyj5LWeMMT0KBgPkB3PIz0veVCiRSMQlq3BXUosmwHA44pJc2K0PxyS8Q5Yj0fteUvRu4XCEcDhMKOwGKA6Hwl5ZvPXRMl3bCMc8PxKzvr9GVSR3pulkJqhGIP7VFQMN/SxnjDFpJeC1AeXkAElMjH0RiUSIRLwkF01qka5k1rXeS7jeclFBblJP70FyE9Qq4Kq4dTOAB/pZzhhjTB8FAgECAQgSgPTMoZ2SmaCeBQIichVwN6533jHAY/0sZ4wxJosl7fJtVW0DzsUlnH3AdcAFqlorIteKyMrDlUtWrMYYY1IvqRfqqurbwLu6WX8LcMvhyhljjBk8bAAsY4wxackSlDHGmLSUjYPF5gDs2rUr1XEYY4zxxByTffcdzMYEVQVw6aWXpjoOY4wx71QFbPBTMBsT1GLgNKAaSO8BsYwxZvDIwSUn3zNTBPoz/4sxxhiTaNZJwhhjTFqyBGWMMSYtWYIyxhiTlixBGWOMSUuWoIwxxqQlS1DGGGPSkiUoY4wxackSlDHGmLSUjSNJ+CIixwL34SZD3AhcrqrvuMLZb7lM1If34CzgB8A0YDdwu6r+LJmxJkpf/78iUg68BXxHVX+dlCATrA+fgyrgp8DpQAvwc1W9PpmxJkof3oOTgB8DAtQCP1DV+5MZazKIyInAk6o6qofHJwC/AE7CHRO+rKpPDXQcg7IGJSL5wBPAw0A5cDOwSETK+lMuE/XhPRgPPArc5JX7GHCriJyd3IgHXj//v/cBY5MQXlL08T14AjeE2GjcgekTIvLxZMWaKH34LgS9cj9W1aG478LdXnLLCiISEJHPAIuA/F6KPoT7oTYcuAJ4SESmDHQ8gzJBAQuBPFW9S1XbVfUhYCXwkX6Wy0QL8ffaJgG/V9XHVDXs/ap8Djg1mcEmyEL68P8VkU8AZcCK5IWYcAvx8R6IyAJgCvAVVW1R1U3ec59NcryJsBB/n4MKYBQQEJEAEAE6gLZkBptg3wOuxP0g7ZaITAfm4c4itKnqM8CfgE8PdDCDNUHNAlbHrVsDzOlnuUzk67Wp6guq+vnosogMww3GuyzhESae7/+viEwGvgtcnoS4ksnvezAXl5hvEJEdIrIB+JCqVichxkTz+13YC9wN/AZoxw16eq2qxj83k92nqnOBJb2UmQVsVdXGmHUJOS4O1gRVAjTFrWsCivtZLhP1+bWJyFDcL6XXcKc6Mp2v90BEcoDfAV9T1WybaMzv5yD6w6QdV5O6EPhaNpziw//nIIhre/s4UISreX1XRN6XhBiTQlV3+iiWtOPiYO0k0Yj7gMUqBhr6WS4T9em1edX6J4BVwKWqGk5seEnh9z24HlBV/WNSokouv+9BK1Cnqjd4y8tF5H5covp9QiNMPL/vwYXAqar6dW/5eRH5BfA5XJvNYJG04+JgrUGtwvXCiTXDW9+fcpnI92sTkXfjak2PAxerakviw0sKv+/BR4GLReSAiBzAncq4V0TuTUKMieb3PVgDFHsdCqKy5Qeu3/dgPFAQt64DV6scTFYBE0QkNkkl5LiYLR+wvnoW19B5Fe6c8kW47qWP9bNcJvL12kTkKOBJ4DpV/UnSo0wsX++Bqs6IXRaRN4G7sqSbud/P+D9w3arvFJFrcAf0T+Ma1DOd3/dgEa4H62eB/wVOwPVg+0wSY005VVURWQ7cLCLfAk4BPgicPND7GpQ1KFVtA87FfRD3AdcBF6hqrYhcKyIrD1cuNZEPHL/vAfBFoBT3xWyIuf13aiIfOH14D7JWH74LLcB7cO1P1cDfgNtU9dHURD5w+vAerMSd5vsccAB3avObqpoN7bG9EpFLRST2FN5FwEzcNVD3A59W1bcHer82o64xxpi0NChrUMYYY9KfJShjjDFpyRKUMcaYtGQJyhhjTFqyBGWMMSYtWYIyxhiTlgbrhbomA4nIZmBiDw/nqWrHAO8vD7hCVe/1lm8AzlPVeQO5H2/bC3EXjJaqatoPpSUizwFLVPVrCdj2I0CDqn5yoLdtMoslKJNprgV+Fb9yoJOT5+PA94HokEZ3AIkaTeNloAo3zlkmuJDBN8SPSTJLUCbT1CdxRPFA7IJXs0lI7cYbzSBjRkpX1X2pjsFkP0tQJmt4p+AW4NpWTwK+AjwC3A5cAIzEJYGfqepN3nNycLWyK3BTSiwGvuSV/ZVXJoKb5nwhMaf4RGQecBswH5e4HgC+rart3im7R4CrcbWwCuBfwGdUtaab2BcSc4rP2+fHgG/hxr1bAvw78HXgMqAO+Jaq/tZ7/mbgB8ClXjzq3b/Yez0R4HZVvS2m/B2qere3PAnYBMxR1be9U3jPA8cC7wO2ec+/3yv/HN4pPi/W7kxS1S0ici5wq/c6Nnr77awFi8hluLm2qnDDB/U2k6sZRKyThMk25+ASwUnAU8APcYNYXoA7QP4YuFFE5nrlv4NLZF8FjscdiP8CvOKt24c7cL4cuxNv+pHncSM4z8cluMuAW2KKlQOfx41bdgEueX67D6/lB14MJwETgKW4xDQf+CPwMxEpiSl/M3AncBwQ8t6HScC7vPfhByIytQ/7/y/cILHHA08DPxWRym7KVcXcpgDrgIe85DQbeBS4Dzgal6zvFJGPAojI6cAvvfhOwCX68/sQo8liVoMymeZOEflB3LrzVPU5734zcGt0vioReQlXY1rqPX67iHwHmCUiS/Gmt47O9SQiXwRuwA2QexCIRE8pihwyI8NncbWBL6tqBFjjjYb9W68mB5ADXK2qb3jP/x0u2fh1j6o+6z33SeA83AyuERH5IfBlYDJdU9A/pKqPe+Ufwk3bfaWqNovIbd7yTGC9z/0/p6r3eNv7FvAF3Cjfh5yKjD3lKiIP4v4H0em/vwE8qKr3ecsbvBHyvwY8hEvgj8d0RLka9yPDGEtQJuPcipvdNtaOmPub4iZT/B1wnncaaTqudlGCSx4jcKfyFkcLq2o9cA28IyHFmw286iWnqBeBPGBazLq1MffrvMf9ik0kTcDmmP1F5+Qq6KX8LlVtBlDVkIi08875jHrTGbuq1nnvR4/xi8jXcaOCz1fV6Iyrs4E5IvKxmKK5dHWwOJqY/6eXfBdjDJagTObZo6q91QCa45Z/CbwX1z70AK7GtNx7rM37258h/eP3A12dKmJPnbf1UMaP+F5yh5vFuC/l419zd8eC+Nihh/hF5CzcKcYPquqGuO3+BHeKryfx22zrIR4zyNiHwGQtESnFtQudparPeOsqgaFAQFUPishuXNvHK97jRcBm4AP0nrhWAx8QkUBMreYUXJLYgGu3SWdtuPchakp/N+SdsnsY+J6q/jXu4dXA1NgfFSLyGWAWrgPJW7i2uVgneOvNIGcJymSzFtx1RReKyCZgDK5HX4CuU10/Aq73erWtxU1WdxBYBowDSkRkFq69KdY9uM4VPxGRu3FtQXcCv/ESXwJf1oBYDHxORJ7C9Zq7iX7UJEVkCPA48BLw87hOFAdx1469JiLXAv+H6xX4I29/AP8DvOC1PT0J/IdXxhKUsV58JnupajvuYtv34nrbPYCbtvspINqL73bgF7hZQZfheqK937su6Z/eumXA++O2vRPXmH8C7pTh/d72v5jQFzVwrsMl5Fdwcd/A4U8hdmc+rh3pPNzsqtUxt494HUQuBj4CrMTrTYjrno+qvgp8GNcLcjmuZvWHfr4mk2VsRl1jjDFpyWpQxhhj0pIlKGOMMWnJEpQxxpi0ZAnKGGNMWrIEZYwxJi1ZgjLGGJOWLEEZY4xJS5agjDHGpKX/D0lgQQrXu9AgAAAAAElFTkSuQmCC\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": 60, + "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": 61, + "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": 61, + "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": 62, + "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": 63, + "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": 64, + "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": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.3333333333333333, 0.25)" + ] + }, + "execution_count": 65, + "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": 66, + "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": 67, + "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": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
0.0000000.466770
63.1578950.465418
126.3157890.462905
189.4736840.458291
252.6315790.449980
315.7894740.435540
378.9473680.411960
442.1052630.377183
505.2631580.333171
568.4210530.287633
631.5789470.249745
694.7368420.223529
757.8947370.207480
821.0526320.198306
884.2105260.193244
947.3684210.190500
1010.5263160.189027
1073.6842110.188239
1136.8421050.187819
1200.0000000.187596
\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": 68, + "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": 69, + "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": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "12" + ] + }, + "execution_count": 70, + "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": 71, + "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": 72, + "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": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
00.187596
10.174581
20.162910
30.153508
40.148565
50.152946
60.174964
70.217343
80.259071
90.278403
100.277915
110.267357
120.252797
\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": 73, + "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": 74, + "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?" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "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": [ + "price_per_dose = 50\n", + "\n", + "infected_sweep = sweep_doses(dose_array)\n", + "\n", + "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": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def sweep_doses_with_quarantine(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*0.9, 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\n", + "\n", + "price_per_dose = 50\n", + "\n", + "infected_sweep = sweep_doses_with_quarantine(dose_array)\n", + "\n", + "plot(infected_sweep)\n", + "\n", + "decorate(xlabel='Doses of vaccine',\n", + " ylabel='Total fraction infected',\n", + " title='Total infections vs. doses',\n", + " legend=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 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/chap13ode.ipynb b/code/chap13ode.ipynb new file mode 100644 index 00000000..16e79e33 --- /dev/null +++ b/code/chap13ode.ipynb @@ -0,0 +1,878 @@ +{ + "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": 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", + " 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": 7, + "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": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SIR
00.9888890.0111110.000000
10.9852300.0119920.002778
20.9812960.0129290.005776
30.9770710.0139210.009008
40.9725410.0149700.012488
\n", + "
" + ], + "text/plain": [ + " S I R\n", + "0 0.988889 0.011111 0.000000\n", + "1 0.985230 0.011992 0.002778\n", + "2 0.981296 0.012929 0.005776\n", + "3 0.977071 0.013921 0.009008\n", + "4 0.972541 0.014970 0.012488" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = make_system(0.333, 0.25)\n", + "results = run_simulation(system, update_func)\n", + "results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.25" + ] + }, + "execution_count": 10, + "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": 11, + "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": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
0.10.007231
0.20.038411
0.30.337034
0.40.650243
0.50.804506
0.60.886287
0.70.931670
0.80.957428
0.90.972099
1.00.980344
1.10.984835
\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": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "infected_sweep = sweep_beta(beta_array, gamma)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap06-fig01.pdf\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "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": 15, + "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": 15, + "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": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[0.2, 0.4, 0.6, 0.8]" + ] + }, + "execution_count": 16, + "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": 17, + "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": { + "needs_background": "light" + }, + "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" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def slope_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", + " dsdt = -infected\n", + " didt = infected - recovered\n", + " drdt = recovered\n", + " \n", + " return dsdt, didt, drdt" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(-0.01208641975308642, 0.009308641975308642, 0.002777777777777778)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func(system.init, system.t0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
initS 0.988889\n", + "I 0.011111\n", + "R 0.000000\n", + "dtyp...
t00
t_end98
beta0.33
gamma0.25
\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.33\n", + "gamma 0.25\n", + "dtype: object" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fun_system = make_system(0.33, 0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "results, details = run_ode_solver(fun_system, slope_func, t_eval=linrange(system.t0, system.t_end))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "results.plot()" + ] + }, + { + "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/chap14-mine.ipynb b/code/chap14-mine.ipynb new file mode 100644 index 00000000..3d7feb6b --- /dev/null +++ b/code/chap14-mine.ipynb @@ -0,0 +1,804 @@ +{ + "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": 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", + " 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": 7, + "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": 8, + "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": 9, + "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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0.10.30.50.7
0.100.0846930.0054440.0027360.001827
0.180.7086230.0159140.0061180.003783
0.260.9007800.0553800.0116390.006427
0.340.9568880.2678640.0221150.010191
0.420.9770450.5245630.0478160.015946
\n", + "
" + ], + "text/plain": [ + " 0.1 0.3 0.5 0.7\n", + "0.10 0.084693 0.005444 0.002736 0.001827\n", + "0.18 0.708623 0.015914 0.006118 0.003783\n", + "0.26 0.900780 0.055380 0.011639 0.006427\n", + "0.34 0.956888 0.267864 0.022115 0.010191\n", + "0.42 0.977045 0.524563 0.047816 0.015946" + ] + }, + "execution_count": 10, + "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": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(11, 4)" + ] + }, + "execution_count": 13, + "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": 14, + "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": 15, + "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": 16, + "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": 17, + "metadata": {}, + "outputs": [], + "source": [ + "s_inf_array = linspace(0.0001, 0.9999, 101);" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "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": 19, + "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": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap06-fig04.pdf\n" + ] + }, + { + "data": { + "image/png": "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F/OjH/2ICy+8kHg8zj333MOaNWu4++67mTVrFrfddhsdHR189rOfZf/+/YNiuvHGG7nppptYunQpjz76KE899dSET1Ce59EW6zokEbUEraOjktCqyPXiFNNDkddL8fYNFL3RKCrIDZJQXsLjXArzc4lGj/JiPj1v5IvnMVOO7j2TUV01wkVsFhzt75KM+noYrlt85cqJdc5sPO8QaU1QzrlLEh7/GViasH0/cH8qzrv0uKq0tKCWHpdcd8pdd93F8uXLmTRpEpMmTWLWrFncfffdLF26lJqaGhYtWgTA8ccfz//8z/8AcN111/HYY49x6623snnzZpqbm+no6Bj0vsuXL+drX/sa69evZ+fOncyaNYtjjjmGM888kw9/+MM0NTVx+umnc+2111JWVjbotatWreKqq67irLPO4owzzuCKK64Yg08lsxzo6qF5bwc79nawc08HO/d2HNXYT1FBLpWlBZQW5w1KNsWFuRT9/t8p6u2miB7y8LuEANgThWUpumsi2y5ifV+cHngAtm/3v9WvXDmwf6KcMxvPO0SmdPGl1Ek2Lemut1Tr6OjgvvvuIz8/n7e97W0AtLe3c8cdd7BkyRIKCwv7j41EIv0zoa655hp6e3upr6/nrW99K01NTYfMksrJyeGiiy7innvuobm5mfe+970AnHjiif0TIp588kkuuOACbr311kGvvfrqqzn//PN57LHHuPfee7ntttu45557UvlRpFQ87rH3j0+x4+HH2Lm3gx3l02iZdUzSYzI50QiVpQVUlgX/SguZVF5AZWnB6APCMyrT3zWSjRexurq0XyxDOWc2njdBViSoTPLLX/6SyspKHnzwQXJycgBoa2tj+fLl7N27d8TXPfroo9xxxx0sXLiQDRs28Pzzz1NfX3/IcRdccAHnn38+OTk5fOtb3wLgpptuwvM8rrvuOs4++2ycc2zYsKH/NT09PaxYsYLVq1fzvve9jze/+c2ce+65dHV1kZ+fP8afQOq0d3azZUcbr+3YT+MLr9D115eAfIjmQ3vXsGNBhfm5TK0spLK0gEllhf0Jqaw4/+i63MJsVWTpRUwmLiWoNLvrrru49NJL+5MTQHl5OR/4wAf46U9/OuLrrr76aj760Y9SXFxMaWkpdXV1bNly6H3PU6ZMYcmSJcyfP5+8PP/GuQ996EN86lOf4u1vfzv5+fmYGatW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\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": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_sweep_frame_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": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_sweep_frame_difference(frame)\n", + "\n", + "decorate(xlabel='Contact number (c (beta-gamma))',\n", + " ylabel='Fraction infected')" + ] + }, + { + "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": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9.211261 0.999900\n", + "4.642296 0.989902\n", + "3.987365 0.979904\n", + "3.612133 0.969906\n", + "3.350924 0.959908\n", + "3.151808 0.949910\n", + "2.991711 0.939912\n", + "2.858363 0.929914\n", + "2.744467 0.919916\n", + "2.645332 0.909918\n", + "2.557767 0.899920\n", + "2.479505 0.889922\n", + "2.408879 0.879924\n", + "2.344627 0.869926\n", + "2.285771 0.859928\n", + "2.231541 0.849930\n", + "2.181315 0.839932\n", + "2.134590 0.829934\n", + "2.090947 0.819936\n", + "2.050040 0.809938\n", + "2.011573 0.799940\n", + "1.975299 0.789942\n", + "1.941002 0.779944\n", + "1.908499 0.769946\n", + "1.877628 0.759948\n", + "1.848249 0.749950\n", + "1.820238 0.739952\n", + "1.793487 0.729954\n", + "1.767898 0.719956\n", + "1.743384 0.709958\n", + " ... \n", + "1.181034 0.290042\n", + "1.173263 0.280044\n", + "1.165630 0.270046\n", + "1.158132 0.260048\n", + "1.150765 0.250050\n", + "1.143524 0.240052\n", + "1.136407 0.230054\n", + "1.129409 0.220056\n", + "1.122527 0.210058\n", + "1.115758 0.200060\n", + "1.109099 0.190062\n", + "1.102547 0.180064\n", + "1.096099 0.170066\n", + "1.089751 0.160068\n", + "1.083503 0.150070\n", + "1.077350 0.140072\n", + "1.071291 0.130074\n", + "1.065323 0.120076\n", + "1.059444 0.110078\n", + "1.053651 0.100080\n", + "1.047943 0.090082\n", + "1.042317 0.080084\n", + "1.036772 0.070086\n", + "1.031305 0.060088\n", + "1.025914 0.050090\n", + "1.020598 0.040092\n", + "1.015356 0.030094\n", + "1.010185 0.020096\n", + "1.005083 0.010098\n", + "1.000050 0.000100\n", + "Length: 101, dtype: float64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "frac_infected_series # according to the value of frac_infected_series, the contact number that will cause 26% of the population to become infected is 1.15" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# Alternative solution\n", + "\n", + "\"\"\"We can use `np.interp` to look up `s_inf` and\n", + "estimate the corresponding value of `c`, but it only\n", + "works if the index of the series is sorted in ascending\n", + "order. So we have to use `sort_index` first.\n", + "\"\"\"\n", + "\n", + "frac_infected_series.sort_index(inplace=True)\n", + "np.interp(0.26, frac_infected_series, frac_infected_series.index)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "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/chap14.ipynb b/code/chap14.ipynb index 95fd99e7..d67fbed0 100644 --- a/code/chap14.ipynb +++ b/code/chap14.ipynb @@ -517,7 +517,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.6" + "version": "3.6.5" } }, "nbformat": 4, diff --git a/code/chap20-mine.ipynb b/code/chap20-mine.ipynb new file mode 100644 index 00000000..1d888d4b --- /dev/null +++ b/code/chap20-mine.ipynb @@ -0,0 +1,1611 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qEb5Fl3ZyVJm" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Y1DkmasdyVJp" + }, + "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'\n", + "\n", + "# import functions from the modsim.py module\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "YhjKHeXbyVJw" + }, + "source": [ + "### Dropping pennies\n", + "\n", + "I'll start by getting the units we need from Pint." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "yZvaYdo-yVJy" + }, + "outputs": [], + "source": [ + "m = UNITS.meter\n", + "s = UNITS.second" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "G257AdQMyVJ5" + }, + "source": [ + "And defining the initial state." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "NzjWz6nEyVJ6", + "scrolled": true + }, + "outputs": [], + "source": [ + "init = State(y=381 * m, \n", + " v=0 * m/s)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "VJJ7M7ChyVJ_" + }, + "source": [ + "Acceleration due to gravity is about 9.8 m / s$^2$." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "BNeJIDtRyVKB" + }, + "outputs": [], + "source": [ + "g = 9.8 * m/s**2" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "1Z01dyaUyVKF" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "o5DYstWPyVKG" + }, + "outputs": [], + "source": [ + "t_end = 10 * s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "Qzcm9FvnyVKL" + }, + "source": [ + "Now we make a `System` object." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "pOd97xheyVKM" + }, + "outputs": [], + "source": [ + "system = System(init=init, g=g, t_end=t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "6OgQg4whyVKR" + }, + "source": [ + "And define the slope function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "xV5pPoFwyVKS" + }, + "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": { + "colab_type": "text", + "id": "SML_yjleyVKV" + }, + "source": [ + "It's always a good idea to test the slope function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "colab_type": "code", + "id": "h_2rqVXZyVKV", + "outputId": "13ba2cd7-a2fd-4346-cf3a-d64d4ec404c5" + }, + "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": { + "colab_type": "text", + "id": "OAEFeuz8yVKb" + }, + "source": [ + "Now we're ready to call `run_ode_solver`" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "m-vjelT6yVKb", + "outputId": "0ebf4bd8-1bb3-4b3e-9ccf-2b1f67e33252" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'The solver successfully reached the end of the integration interval.'" + ] + }, + "execution_count": 10, + "metadata": { + "tags": [] + }, + "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": { + "colab_type": "text", + "id": "97cTwQ9jyVKi" + }, + "source": [ + "Here are the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 787 + }, + "colab_type": "code", + "id": "LeO7a_65yVKi", + "outputId": "7cf11d56-182e-4ddc-bef7-e8be56905ace" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
0.000000381.0000000.000000
0.000102381.000000-0.001000
0.001122380.999994-0.011000
0.011327380.999371-0.111000
0.113367380.937025-1.110997
0.613367379.156526-6.010997
1.113367374.926028-10.910997
1.613367368.245529-15.810997
2.113367359.115031-20.710997
2.613367347.534532-25.610997
3.113367333.504034-30.510997
3.613367317.023535-35.410997
4.113367298.093036-40.310997
4.613367276.712538-45.210997
5.113367252.882039-50.110997
5.613367226.601541-55.010997
6.113367197.871042-59.910997
6.613367166.690544-64.810997
7.113367133.060045-69.710997
7.61336796.979547-74.610997
8.11336758.449048-79.510997
8.61336717.468550-84.410997
9.113367-25.961949-89.310997
9.613367-71.842448-94.210997
10.000000-109.000000-98.000000
\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": 11, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "H_aflXa3yVKn" + }, + "source": [ + "And here's position as a function of time:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1338 + }, + "colab_type": "code", + "id": "mWM2oxpmyVKn", + "outputId": "dc147506-1005-446c-9dd3-26280fb79da1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap09-fig01.pdf\n" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "ignored", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mplot_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'figs/chap09-fig01.pdf'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/content/modsim.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(filename, **options)\u001b[0m\n\u001b[1;32m 743\u001b[0m \"\"\"\n\u001b[1;32m 744\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Saving figure to file'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 745\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 746\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 747\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 699\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 700\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgcf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 701\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msavefig\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 702\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw_idle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# need this if 'transparent=True' to reset colors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 703\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36msavefig\u001b[0;34m(self, fname, **kwargs)\u001b[0m\n\u001b[1;32m 1832\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_frameon\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mframeon\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1833\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1834\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1835\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1836\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mframeon\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)\u001b[0m\n\u001b[1;32m 2265\u001b[0m \u001b[0morientation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morientation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2266\u001b[0m \u001b[0mbbox_inches_restore\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_bbox_inches_restore\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2267\u001b[0;31m **kwargs)\n\u001b[0m\u001b[1;32m 2268\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2269\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mbbox_inches\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mrestore_bbox\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/matplotlib/backends/backend_pdf.py\u001b[0m in \u001b[0;36mprint_pdf\u001b[0;34m(self, filename, **kwargs)\u001b[0m\n\u001b[1;32m 2582\u001b[0m \u001b[0mfile\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfilename\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_file\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2583\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2584\u001b[0;31m \u001b[0mfile\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPdfFile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetadata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"metadata\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2585\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2586\u001b[0m \u001b[0mfile\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnewPage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwidth\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/matplotlib/backends/backend_pdf.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, filename, metadata)\u001b[0m\n\u001b[1;32m 437\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtell_base\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 438\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstring_types\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 439\u001b[0;31m \u001b[0mfh\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'wb'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 440\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mis_writable_file_like\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 441\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'figs/chap09-fig01.pdf'" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAF6CAYAAADRf7idAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XdwVPeBB/Dv276r3vuqIgkwzXRR\nTFcBUwwmIWAS+ybnM/Y5d47ngk0uztyZxEmOXHLOJbm7mRzITnIYl7gIRBGmBEQzYFPVK+q9bd93\nfyw8IYMQRdLTrr6fmQzzfm+1+soTo6/f/oogiqIIIiIiIjehkDsAERER0YNgeSEiIiK3wvJCRERE\nboXlhYiIiNwKywsRERG5FZXcAYaa2WzG5cuXERISAqVSKXccIiIiGoDD4UBjYyMee+wx6HS6O+6P\nmPJy5MgRPP/888jLy0NUVBR27NiBgwcPQhAELF26FN///vcBAB0dHXj99ddRVFQEtVqNLVu2ICsr\nq9/3vXz5MjZu3DhcPwYRERENkj/+8Y+YNm3aHeMjoryYTCbs2LED/v7+AIC9e/fizJkz+PTTTwEA\nzzzzDHJzc5GRkYF/+7d/Q0REBH7zm9+grq4Oa9aswdSpUxEWFnbX9w4JCQHg+gcQHh4+PD8QERER\nPbS6ujps3LhR+h3+dSOivLz99ttYuXIl/vznPwMAcnNzsWbNGmg0GgDAypUrpfKyf/9+/OlPfwIA\nhIeHY8aMGcjLy8O3vvWtu773rY+KwsPDER0dPQw/DREREQ2G/qZ7yD5ht6CgACdPnsR3vvMdaay8\nvBxGo1G6NhqNKC0tRWtrK9ra2u56j4iIiEYHWcuLKIp444038MMf/hBqtVoaN5lM0Gq10rVOp4PJ\nZILZbIZCoejzWq1WC5PJNKy5iYiISD6ylpfdu3cjKSnpjsk4er0eFotFujaZTDAYDNDr9XA6nbBa\nrdI9s9kMg8EwbJmJiIhIXrKWl7y8POTl5WHOnDmYM2cOamtrsW7dOjQ2NqKiokJ6XUVFBZKSkuDv\n74/AwEBUVVXdcY+IiIhGB1nLy//8z/8gPz8fJ06cwIkTJxAREYH3338fP/7xj/Hee++hp6cH3d3d\neO+997B8+XIAQGZmJnbt2gUAKC4uxpkzZ7B48WI5fwwiIiIaRiNitdHXZWRk4MqVK1i9ejUEQcCK\nFSuwaNEiAMArr7yCrVu3YunSpdBqtdi+fTuCg4NlTkxERETDRRBFUZQ7xFCqrq7G4sWLkZeXx6XS\nREREbmCg392yL5UmIiIiehAsL0RERORWWF6IiIjIrYzICbvuwmyxo63LAkEQIACAAAgQoFQK0KgU\nUKkU0KiUUCgEuaMSERF5DJaXh1Tb1I2/HC2GwznwfGelQoBapYRGrYBaqYBarYRapYBGpYBapYBa\ndfNarYRaebP0qF3jt0qQWqWAVq2ETqNiGSIiohFt7dq1+O53v4uMjAwAwOeff45f/epX+Pjjjwfl\n/VleHlJ9S/d9FRcAcDhFOKx2mK0Dv3YgCkGAl14Nb70a3gYNfAxqeBvU8DFo4K3XwNughk6jhCCw\n4BARjTYXChpw5modbHbnkH0PtUqBGePCMSUltN/XrFixAp999plUXg4ePCjt1zYYWF4eUmpsIFo7\nLWhqc52rJIqus5pEAHaHE3a7E1a7Eza7E4O5Gt0piujssaKzxwo0d9/1NSql4rZCc/NPQ9/Co1bd\n/aROIiJyXxcLG4e0uACAze7ExcLGe5aXrKws/OpXv0JnZycMBgM+//xzvPfee4OWgeXlIem0Kiyc\nGjPg60RRhMMpwmpzwHazzNjsTljtN69tTtgcDlhtrnH7bfesdgfs0uudsFgdMFvtA35Pu8OJtk4L\n2jot/b5Gq1HCx6CBj14NL4MGfl4aBPvrEeSng0Gn7vfriIho5JqcHDIsT14mJ4fc8zVhYWGYOHEi\nDhw4AKPRiKioKMTEDPw7836xvAwxQRCgUgpQKQdnYZfd4URXjw2dPVZ0m1x/dt36s8eGLpMNVptj\nwPexWB2wWE3Sk6Pb6bUqBPvrEeynR5C/DsF+egT4aKEcpJ+BiIiGxpSU0Hs+ERlOy5cvR25uLmJj\nY5GVlTWo783y4mZUSgX8fbTw99H2+xqLzYGum2XG9RGTDd0m15+3Ss+95uuYLHZU1Xeiqr5TGlMI\nAgJ8tDefzvSWGoNOxfk1RER0h4yMDPz85z/HtWvXsGfPnkF9b5YXD6RVK6H1c5WMuxFFESaLHZ09\nNnTdnD/T2mlBc7sZze2muz5udIoimjvMaO4wA2iVxvVaFYL89Aj21yHI11VqAn11g/akiYiI3JO/\nvz+mT5+O9vZ2REREDOp7s7yMQoIgwKBTw6BTIyzQ0OeeKIpo77Kiqd2ElnYzmtpdHy11dN99qZTJ\nYkd1QyeqG/o+pfH30UqlJiLIC6GBBhYaIqJRJiIiAvPnzx/092V5oT6Em8XD30cL3HYWltXmQPPN\nMtPcZkLTAE9pWjrMaOkwo6jKNaZUCAgP8kJUiDciQ7wQHuTFMkNE5MHKy8tx7NgxfP/73x/092Z5\nofuiUSsREeyFiGAvaUwURXR0W9HUZnJ9pHSz1LR33bnKyeEUcaOxCzcauwC4ykxYoBciQ1yFJjzI\nC2oVywwRkSf49a9/jY8//hj//M//DB8fn0F/f5YXemiCIMDPWws/by0Sbxu32W8+pWkzoaHVhJrG\nLrR9rdA4nCJqmrpQ09SFc9fqoVAICAswIDLEG1EhrpLEvWiIiNzT9773PXzve98bsvdneaFBp1Yp\nER7k+mjoli6TDTWNXahp7EJ1Y9cde9A4nSJqm7tR29yNL6675s2EBhoQGex6MhMR7AWNmmWGiIhY\nXmiYeOvVSDYGINkYAADoMdtwo7ELNY3duNHYhZYOc5/XO0URdc3dqGvuxvmCBigEASEB+ptPZlxl\nRssyQ0Q0KrG8kCwMOjXGxARgTExvmalp6kZNYxduNHajub3v5nlOUUR9Sw/qW3pwoaABgiAgNECP\n+Eg/JET5IcBHy/1miIhGCZYXGhEMOjWSov2RFO0PwLUEu6axSyo0Te3mPmdEibeVmVOXa+Hvo0XC\nzSITFmhgkSEi8mAsLzQi6bUqJEb7I/FmmTFb7aht6pZWLDW19S0zbZ0WnC9owPmCBhh0aiRE+iI+\nyg/RId481oCIyMOwvJBb0GlUiI/0Q3ykHwBXmamo7UBpTQcq6zr67DfTY7bhcmkzLpc2Q6NWIjbc\nFwlRvogN9+WkXyIiD8DyQm5Jp1EhJTYQKbGBsDucqKrvRFlNO8pqOmCy9J68bbU5UFTViqKqVigV\nAqJDfZAQ5Yf4SF+enk1E5KZYXsjtqZQK6amM0+lapVRa047SG+19jjVwOEVU1HWgoq4DR84LCA80\nID7KDwmRfvc86JKIiEYWlhfyKAqFgMgQb0SGeGPOxEg0t5tRWtOOshvtaGzrXcEkir37ypz8qgZB\nvjpXkYnyQ4i/nhN+iYhGMJYX8liCICDYX49gfz1mjAtHR7cVZTfaUVrTjpqm7j4Tfm+dmH3uWj18\nDBqMifHH2PhABPjoZPwJiIjoblheaNTw9dJgUnIIJiWHoMdsQ0VtJ0pr2lFV3wm7o3fCb2ePVVq5\nFBHkhdS4QIyJ8edkXyKiEYLlhUYlg06NsfGBGBsfCJvdgcq6mxN+aztgsTqk1936aOmvF28gMdoP\nY+ODEBnsxY+ViIhkxPJCo55apZT2lHE4RVTWdeB6eQvKajrgvPnRks3hxPWKVlyvaIWvlwZj4wKR\nGhcIH4NG5vRERKMPywvRbZQKQVq51GO2oaiyDVfLW/ocV9DRbcXpK3U4c7Ue0aHeGBsXiIQoP6i4\nGR4R0bBgeSHqh0GnxqTkEEwcE4zGVhOulbegsKpV+lhJFEVU1Xeiqr4TWrXy5iTfIIQGcLUSEdFQ\nYnkhGoAgCAgNNCA00IA5kyJRVtOOa2UtqGroklYsWWwOaVffIF8dUuMCkRIbwI3wiIiGAMsL0QNQ\nKRXSadhdPVZcr2jFtfIWtHdZpNc0d5hx4qsa5F+qRWyEL8bFB8IY7gulgk9jiIgGA8sL0UPyNmgw\nbWwYpqaGorapG1fLWlBS3QbbzWXXTlG8eWRBO/RaFVJjXaubAn25dwwR0aNgeSF6RILQu6vv/ClR\nKK5uw/XyFtQ0dUuvMVnsuFDYgAuFDTCG+2DymBDEhPlwbgwR0UNgeSEaRBq1EuPigzAuPgitnWZc\nL29FQUULukw26TWVdZ2orOtEkK8Ok5NDkWz0h5IrlYiI7hvLC9EQCfDRYfaECMwcH46q+k5cLWtG\naU2HNMm3ucOMvHOVyL9ci4lJwRifEAS9lv9KEhENhH9TEg0xhUJAbIQvYiN80d5lwVdFTbha3gyb\n3TU3psdsw6nLtTh3rR6psQGYlBzCM5WIiO6B5YVoGPl5azFvShSmjw/D1dIWfFXcKH2kZHc4peXW\n8RG+mJQcgqgQb86LISL6GpYXIhnoNCo8nhqKSckhKK5qxcWiRjS29u7iW1bbgbLaDoT46zE5OQRJ\n0ZwXQ0R0C8sLkYyUCgEpsYFINgagpqkbFwsaUFbbId1vbDPh4JlK5F+qxYSb82J0Gv5rS0SjG/8W\nJBoBBEFAVIg3okK80dppxpdFTbhe3gL7zT1jukw25F+qxbmr9RgbH4hJY0Lg562VOTURkTxYXohG\nmAAfHRY8Ho2Z48NxpbQZXxU3ocfsmhdjczjxVXETLpU0IyHSNS8mIsiL82KIaFRheSEaofRaFaaN\nDcOU5BAUVrbhYlGjdLq1KIooudGOkhvtCAs0YHJyCBKj/KHgEQRENAqwvBCNcEqlAmPjA5EaF4Dq\nhi5cKGxAZV2ndL++pQf7T1XA37sOM8aHIymaJYaIPBvLC5GbEAQBMWE+iAnzQXO7CV8WNaGgogUO\np2vTu7YuCw6crsC5a/WYMT4ciVF+/DiJiDwSywuRGwry02PRtBjMeiwcl0ua8WVxIyxWBwCgpcOM\n3PxyhPjrMWN8OOIifFliiMijsLwQuTGDTo0Z48MxcUwwvixsxMWiRmnn3sY2E3JOlCEs0IAZ48Nh\n5EGQROQhWF6IPIBOo8LMxyIwcUwILhQ04KviJmmZdX1LDz49XorIYC/MfCwCUSHeMqclIno03LKT\nyIPotSqkTYzE5qyxmDQmBMrbJu7WNHXjoyPF+MvREtQ2dcuYkojo0fDJC5EHMujUmDc5ClOSQ3Du\nWj2ulrfAeXNib3VDJ6obOhEb7ouZ48MRGmiQOS0R0YNheSHyYN4GDRZMjcHjqWE4d60O18tb4RRd\nJaairgMVdR1IiPLDjHHhCPbXy5yWiOj+yP6x0f79+7Fq1SpkZGRgw4YNKCwsBADs3LkTmZmZSE9P\nx7Zt22C1WgEAVqsV27ZtQ3p6OjIzM5GdnS1nfCK34OulwaJpRnwrPRUpxoA+E3dLb7Tj/w4WYP+p\ncrR0mGVMSUR0f2QtLzU1NXjjjTfw29/+Frm5ucjIyMDrr7+OixcvIjs7G7t370Zubi46Ozvxzjvv\nAHCVmvb2duzbtw979uzBrl27cOnSJTl/DCK34e+jxdKZsfjm0mQkRvv3uVdU1YY/HyjAoTMVaO+y\nyJSQiGhgspYXlUqFHTt2ICoqCgAwe/ZslJWVITc3F1lZWfD1de1PsXbtWuTm5gIAcnNzsX79eigU\nCnh7eyM9PV26R0T3J8hPj8zZcfjGkhTER/pJ46Io4npFK/6Yex2Hz1Who9sqY0oioruTtbyEhoZi\nzpw5AAC73Y6PPvoIixcvRnl5OYxGo/S6mJgYlJaWAgDKysr63DMajdI9InowIQF6LJ8Tj6cXJ8MY\n7iONO0URV8ua8W7uNRy7UA2TxS5jSiKivmSf8wIAu3btwpw5c3Du3Dm8+uqrMJlM0Gg00n2dTgeT\nyXUgndlshlarves9Ino4YYEGrJyXiKcWJvXZB8bpFPFVcRPezb2GL4sapaMIiIjkNCLKy7e//W2c\nOnUK3/72t/HNb34TCoVCmqALACaTCQaDazmnXq+HxWK56z0iejSRwd5YsyAJq+YnIiLISxq3WB04\nfvEGdh8sQFV95z3egYho6MlaXkpKSnDy5EkArkPnVqxYge7ubgiCgIqKCul1FRUVSEpKAgAkJCT0\ne4+IBkdMmA+eWpiE5XPi4efd+6SzpcOMj4+VIOdEGdo6OamXiOQha3lpaWnBP/3TP6G+vh4A8MUX\nX8Bms+GFF15ATk4OmpqaYLfbkZ2djeXLlwMAMjMz8e6778LhcKChoQE5OTnIysqS88cg8kiCICA+\n0g/fWpaCtAmRUKt6/7ooq2nHnw9cx8mvamC1OWRMSUSjkayb1E2fPh0vvPACnn32WTidTmg0Gvz7\nv/87pk+fjueeew4bN26EKIpIS0vDhg0bAACbN29GaWkpMjIyoFQq8eKLLyI1NVXOH4PIoymVCjye\nGoqU2ACculyLa+UtAACHU8T5ggZcr2hF2oQIpMQG8OBHIhoWgiiKHj0Dr7q6GosXL0ZeXh6io6Pl\njkPk9upbenD84g3UNfc9Hyks0IB5k6MQfttcGSKihzHQ7+4RMWGXiNxHWKABaxcmYekMI7z1amm8\nvqUH7x8uwqEzFegy2WRMSESejmcbEdEDEwQBKbGBSIjywxfXG3ChoEFaRn29ohUlN9oxNTUMk5ND\noFLyv5GIaHDxbxUiemhqlRKzHovAt9JTkRjVu1Ovze7Eqcu1+NP+6yipboOHfzpNRMOM5YWIHpmf\ntxaZafFYNT8RQb46abyj24p9+eX4+Fgpmtu5mSQRDQ6WFyIaNDFhPvjG0hQ8MSUaOk3vp9LVDZ34\nv4OFOHq+GmYeNUBEj4hzXohoUCkUAiYkBWNMjD/OXK3D5ZJmOEURoijiUkkTiqraMHN8OMYnBEGh\n4NJqInpwfPJCRENCp1Vh/pRofGNpMqJDew99NFvtOHqhGrsPFqCmsUvGhETkrlheiGhIBfnpsWp+\nArLS4uHr1XvganOHGR8eKcaRL6pg4S69RPQA+LEREQ05QRCQEOUHY7gPvixqxLlr9bDZnQCAy6XN\nKK/twBOPRyM+0m+AdyIi4pMXIhpGKqUCU1PDsDFjbJ+i0mWyIedEGfafKkePmRvcEdG9sbwQ0bDz\n1quRlRaH9Fmx0Gt7HwAXVbXhT/sLcL2ihXvDEFG/WF6ISBaCIGBMTAA2pqciNTZQGjdb7Th0phKf\n/rUUHd1WGRMS0UjF8kJEstJpVVgyw4gn5yX0mdBbWdeJPx+4jq+KG/kUhoj6YHkhohEhNtwXG5al\nYNKYEAiCa/8Xm92JYxdu4IPPi9HSYZY5IRGNFCwvRDRiqFVKzJschbULkxB42zEDdc3d2H2wAGev\n1sHhcMqYkIhGApYXIhpxwoO88I0lyZgxLlzahdfhFHH6Sh3eyytCfUuPzAmJSE4sL0Q0IimVCswY\nH45vLElGWKBBGm9uN+H9w0U48WWNtFcMEY0uLC9ENKIF+emxduEYzJ0UCbXS9VeWKIq4UNiAPx+4\njqr6TpkTEtFwY3khohFPoRAwOTkU31yWgpiw3nOSOrqt+PhYCQ6fq4TZytOqiUYLlhcicht+3lqs\nnJeAxdOM0GqU0vjVshb8aX8BSqrbZExHRMOF5YWI3IogCBgbH4iN6alIjPaXxnvMNuzLL8e+fB4x\nQOTpWF6IyC0ZdGpkzo5D5uw4GHRqabykug1/3H8dxXwKQ+SxWF6IyK0lRvvjW+kpGBffe8SAxepA\nbn458s5WwmpzyBeOiIYEywsRuT2dRoVF04xYNT+xzxED18pbsPtQIfeFIfIwLC9E5DFiwnzwjaUp\nSDYGSGPtXRZ8cLgI567Vw+nkGUlEnoDlhYg8ilatxLKZsVg6wwiN2rUiySmKOHW5Fn85WsKTqok8\nAMsLEXmklNhAfGNJMiKCvKSxmqYu7D5YgMLKVhmTEdGjYnkhIo/l563FmgVJmDE+HIqbJ1VbbA4c\nOF2BQ2cqOJmXyE2xvBCRR1MoBMwYF46nFib1mcx7vaIV/3ewAHXN3TKmI6KHwfJCRKNCeJAXvrk0\nBamxvZN5O7qt+PDzYpy5WsfJvERuhOWFiEYNjVqJJTNisWxmLLS3TeY9c6UOHx0pRnuXReaERHQ/\nWF6IaNRJNgbgG0tTEBnsLY3VNndj96FCFFS0yJiMiO4HywsRjUq+XhqsfiIRsx6LkCbzWm0OHDxT\niQOnK2DhZF6iEYvlhYhGLYVCwLSxYVi7aAz8vLXSeGFlK3YfLEBNU5eM6YioPywvRDTqhQUa8M2l\nyX3OR+rotuKjIyU4fbkWDk7mJRpRWF6IiACoVUosmmZExqw4aDWuybyiKOLstXp8+HkRJ/MSjSAs\nL0REt0mK8ceGpSmICumdzFvf0oP/O1iA6+UtEEU+hSGSG8sLEdHXeBs0WDU/EWkTIqXJvDa7E4fO\nVuLQmUrY7JzMSyQnlhciortQKAQ8nhqKdYvGwN+ndzJvQWUr3s8rQlsnP0YikgvLCxHRPYQGGvCN\nJX0n8zZ3mPFeXiFKb7TLmIxo9GJ5ISIawK3JvIumxUCp6N0TZu/JMpz8qoZHCxANM5YXIqL7NC4+\nCGsXjelzwOP5ggZ8crwUPWabjMmIRheWFyKiBxAaYMD6xckwhvtIY9UNnXjvUCFPqCYaJiwvREQP\nSKdV4cm5CZgxLhzCzdVIXSYbPjxSjEvFTVxOTTTEWF6IiB6CIAiYMT4cK+bES5vaOZ0ijl6ovrmc\n2ilzQiLPxfJCRPQIYiN8sX5xMkIC9NJYQWUr3j/M5dREQ4XlhYjoEfl5a7F24Zi+y6nbTdiTV4iy\nGi6nJhpsLC9ERINApVRg0TQjFk7tXU5tsTmQc6IM+ZdquZyaaBCxvBARDaLxCUFYu7Dvcuovrtfj\n079yOTXRYGF5ISIaZKGBdy6nrqp3Laeub+mRMRmRZ2B5ISIaAjqtCivmuJZT39JlsuHDz4twuYTL\nqYkehezlJS8vD6tWrUJmZiY2bNiAwsJCAMDOnTuRmZmJ9PR0bNu2DVarFQBgtVqxbds2pKenIzMz\nE9nZ2XLGJyLql0LhWk795NwEaTm1wyniyPlq5J2t4nJqoocka3mpr6/H1q1bsWPHDuzbtw8rVqzA\nj370I1y8eBHZ2dnYvXs3cnNz0dnZiXfeeQeAq9S0t7dj37592LNnD3bt2oVLly7J+WMQEd2TtJza\nv3c59fWKFnzweRHau7icmuhByVpeVCoVduzYgaSkJADA1KlTUVxcjNzcXGRlZcHX1xeCIGDt2rXI\nzc0FAOTm5mL9+vVQKBTw9vZGenq6dI+IaKTy89Zi7aIxGBvXu5y6qc2E9w5xOTXRg5K1vAQFBWH+\n/PnS9bFjxzBp0iSUl5fDaDRK4zExMSgtLQUAlJWV9blnNBqle0REI5lrOXXMXZdTn7pcy3kwRPdJ\n9jkvt+Tn52PXrl147bXXYDKZoNH0LjPU6XQwmUwAALPZDK1We9d7REQjnSAIGJ8QhKcWjoGPoffv\nuXPX6pGbXw6b3SFfOCI3MSLKy6FDh7B161b8/ve/R1JSEvR6vTRBFwBMJhMMBgMAQK/Xw2Kx3PUe\nEZG7CAs0YP2SZBjDepdTl9xox4dHitFl4n4wRPcie3k5efIktm/fjj/84Q+YMGECACAhIQEVFRXS\nayoqKqR5Mfe6R0TkTvRaFVbMTcDk5BBprLHVhPfzCtHQyv1giPoja3kxmUx47bXX8PbbbyMxMVEa\nz8zMRE5ODpqammC325GdnY3ly5dL99599104HA40NDQgJycHWVlZcv0IRESPRKEQMHdSFBZOjYFC\ncM2D6TLZ8NHnxSi9wYm8RHejkvOb5+XloaWlBa+++mqf8XfffRfPPfccNm7cCFEUkZaWhg0bNgAA\nNm/ejNLSUmRkZECpVOLFF19EamqqHPGJiAbN+IQg+HppkJtfDovNAZvDiX355Zj9WASmpIRAuFls\niAgQRA+f3l5dXY3FixcjLy8P0dHRcschIrqn1g4zPjtR1mf/l7FxgVjweDSUStk/6ScaFgP97h7w\nycuFCxfw8ccf44svvkBjYyMAICQkBFOnTsWqVaswZcqUwU9NRDRKBfjqsG7RGOw7WY6api4AwLXy\nFnR0W5E5Ow46rawPzIlGhH7/Lejs7MTrr7+Oc+fOYcGCBfj2t7+NkBDXpLLGxkacP38eL774Ih5/\n/HH85Cc/ga+v77CFJiLyZHqtCqvmJ+DzL6pxvaIFAHCjsQvvHy7C8rnxCPDRyZyQSF79lpf169dj\n+fLl+NnPfnbXpcjr1q2DyWTCzp07sWHDBuTk5AxpUCKi0USpVGDx9BgE+GqRf6kWANDWZcH7h4uQ\nMSsOMbctsSYabfotL9u3b8fjjz9+zy/W6/V44YUXMHv27EEPRkQ02gmCgKmpYfD31uLgmUrYHU5Y\nrA58erwUTzwejfEJQXJHJJJFv+XlVnGxWq3Iy8tDbW0tHI6+Oz9+97vfBQBMnjx5CCMSEY1uidH+\n8DFokHOiDN1mG5yiiM+/qEJbpwWzJ0RAoeBKJBpdBpz5tWXLFly7dg1xcXFQKHpnuguCIJUXIiIa\nWqGBBjy9eAxyTpShsc11JMqFwga0dVmwbKYRapVS5oREw2fA8lJQUIC8vDzodJwgRkQkJ2+DBk8t\nTMKB05XSSdRlNe344PNirJgTD+/bzkoi8mQDbhoQFxcHpZKNnohoJFCrlMicHYcpKaHSWFObCe/l\nFaG+hUcK0Ogw4JOXrVu34oUXXsCCBQvg7e3d597q1auHLBgREd2dQiFgzsRIBPhoceSLajhFET1m\nGz46UowlM4xIivaXOyLRkBqwvPzud7/D2bNnUVVVdcecF5YXIiL5jIt3HSmwL78cFqsDdocTufnl\nmPVYBKamhvJIAfJYA5aX8+fP48iRIwgICBiOPERE9ACiQ32wbtEY5Py1DG03jxQ4dbkWbZ1mLJwa\nwyMFyCMN+P/qxMRE7p5LRDSCBfi4jhSICun9aP96RSs+PlYCk8UuYzKioTHgk5fFixfj+eefx7Jl\ny+6Y85KVlTVkwYiI6P7ptCqsnJeAoxeqcbXMdaRATVM39uQV4sm5CQjw5YpR8hwDlpfs7GwAwO9/\n//s+44IgsLwQEY0gSqUCC6eJ3TN/AAAgAElEQVTGwN9Hh/xLtRBFER3dVtdS6rnxCA/ykjsi0aDo\nt7zY7XaoVCocPnx4wDdxOBxcTk1ENAIIgoDHU0JdRwqcroDN4YTZasfHR0uQkRaH2HBOAyD31++c\nl02bNqG2tnbAN6ivr8czzzwzqKGIiOjRJET5YfWCJOg0rv9GtTmcyPlrGQpunlJN5M76LS/PPPMM\nVq9ejZ/+9Ke4dOnSHfcvX76Mt956C6tWrcLGjRuHNCQRET24sEAD1i5Kgs/NnXedooiDZyrxZWGj\nzMmIHk2/HxstX74cEyZMwNtvv41NmzYBAIKCXCeYNjc3QxAELF26FLt370ZsbOzwpCUiogcS4KPD\n2kVj8OmxEjR3mAEAx7+8gR6LDbMei+BeMOSW7jlh12g04he/+AXefPNNXLp0CU1NTQCA4OBgTJgw\nAVqtdlhCEhHRw/PWq7FmQRJyTpShtrkbAPDF9QaYLHYseDyGp1KT2xlwtREAaLVaTJs2baizEBHR\nENFpVVg5PxEHTpWjrLYDAHC1rAUmiwPps2Kh4mZ25Eb4/1YiolFCrVIgIy0eqbGB0lhZTTs+OVYK\ns5Wb2ZH7YHkhIhpFlAoBi6fH4PHbTqWuaerCR0dK0G2yyZiM6P6xvBARjTKCICBtYiTmTIyUxprb\nTfjg8yK0dVpkTEZ0f+5rzkttbS1qamrgdDr7jE+fPn1IQhER0dCbkhIKvU6Fw2er4JR24y3Ck3MT\nEBpokDseUb8GLC+//vWv8bvf/Q4qlQoKRe+DGkEQ8OWXXw5pOCIiGlqpsYHQa1TYl18Ou8MJk8WO\nj44WIystHjFhPnLHI7qrAcvLnj178OGHH2LcuHHDkYeIiIZZbIQvVj+RiE//WgqL1QGb3YnP/lqK\npTNikRTjL3c8ojsMOOclKCiIxYWIyMOFB3nhqQVJ8NarAQAOp4j9pytwqbhJ5mREdxqwvGRlZSE3\nN3c4shARkYyC/PRYu2gMAnx0AABRFHH0QjXOXKmDKIoypyPqNeDHRseOHcOVK1fw5ptvwte372mk\ne/fuHbJgREQ0/HwMGjy1MAmf/bUU9S09AIAzV+vQY7Fj/uQo7sZLI8KA5WXdunVYt27dcGQhIqIR\nQK9VYfUTidiXX47Kuk4AwOWSJpgsdiybYYSSu/GSzAYsL2vWrAEA1NTUoKmpCaGhoQgPDx/yYERE\nJB+1SonlafE4dLYKRVWtAICS6jZ8anUgKy0OGrVS5oQ0mg1YXkpLS/EP//APKCoqglKphMPhwMSJ\nE/HLX/4SUVFRw5GRiIhkoFQqsGymEQadCl8WNQIAqhs68dHRYjw5NwEGnVrmhDRaDfjsb/v27Vi2\nbBnOnj2Ly5cv4/Tp05g1axb+9V//dTjyERGRjARBwNxJkZj1WIQ01thqwoefF6O9i7vxkjwGLC91\ndXV46aWX4O3tDQDw9fXFP/7jP6KysnLIwxERkfwEQcC0sWFYODUGguCasNvWZcEHnxejpcMsczoa\njQYsLw6HA1artc+Y1WrlsjkiolFmfEIQMmfHQXlzxVGP2YaPjhSjud0kczIabQYsL7NmzcLzzz+P\nw4cP4+LFi8jLy8Pf/d3fIS0tbTjyERHRCJIQ5YdV8xOhVrl+fZgsdnx0pASNrSwwNHwGLC8/+MEP\nkJKSgjfffBObN2/GT37yE6SmpuLVV18djnxERDTCRIZ4Y9X8RGnFkdlqx1+OFaPh5r4wRENtwNVG\ner0eW7duxdatW4cjDxERuYHwIC+smp+IT46XwGJ1wGJ14C/HSrByXgLCg7zkjkcert/y8pvf/AYv\nvfQSfvzjH/f7xfe6R0REni0s0IDV85Pw8bESmK12WG0OfHK8FCvmxiMy2FvueOTB+v3Y6NYkXYvF\n0u//iIhodAsJ0GP1E4nQa13/LWy1OfDp8VLcaOySORl5sn6fvLzyyisAgG9+85uYNGnSHfd5WCMR\nEQFAsL8eaxYk4S9HS9BjtsFmd+LT46VYPiceMWE+cscjDzTghN3XXnvtjjGLxYI33nhjSAIREZH7\nCfTVYc2CRHjrXbvu2h1O5JwoQ0Vdh8zJyBP1++QlOzsbO3bsgM1mu+PJi91ux5gxY4Y8HBERuY8A\nHx1WP5GEvxwtRpfJBrvDib0nypAxOw7xkX5yxyMP0m952bx5M5YvX45169bhZz/7WZ97arUaqamp\nQx6OiIjci7+PFmsWuCbxdnRb4XCK2JdfjvSZsUiM9pc7HnmIey6VDgoKQk5ODgwGw3DlISIiN+fn\n7SowHx0pRke3FU6niP2nKrBsJpAUwwJDj67f8vL888/jv/7rv7B27VrpLIuv27t375AFIyIi9+Vj\n0OCpm5N427oscIoi9p+ugFMUkWwMkDseubl+y8vTTz8NAPjud7/bb3khIiLqj7dBI61Cau00QxRF\nHDxTCadTRGpcoNzxyI31W16WLFkCAHjqqafgcDigVLq2ga6qqgIAxMTEDEM8IiJyZ156NdYsSMTH\nR0vQ3OEqMHnnquAURYyLD5I7HrmpAZdKf/rpp/j7v/97AMBf/vIXZGZmYtWqVdizZ8+QhyMiIvdn\n0Kmx6olEBPvrAQCiKOLwuSpcLmmSORm5qwHLy3//939L5xr99re/xdtvv42DBw8iOzt7yMMREZFn\nMOjUWD0/EaEBvQtAjpyvxpdFjTKmInc1YHkRRRFGoxFVVVVob2/HwoULERQUBFEUhyMfERF5CJ1W\nhZXzExAW2Ftgjl+8gQsFDTKmInc0YHmx2+3o7u7G/v37kZaWBsB17tGts48elc1mw1tvvYWUlBTU\n1dVJ4zt37kRmZibS09Oxbds26ftZrVZs27YN6enpyMzM5BMgIiI3otOosGp+IiJuO3n6xFc1OHet\nXsZU5G4GLC+rVq3C/Pnz8Z//+Z/4m7/5GwDA1q1bMXfu3EEJsGXLljv2kbl48SKys7Oxe/du5Obm\norOzE++88w4AV6lpb2/Hvn37sGfPHuzatQuXLl0alCxERDT0NGolnpyX0Ofk6VOXa3Hmat09voqo\n14Dl5YUXXsB7772HgwcP4rHHHgMArF69WpoH86i2bNmCl19+uc9Ybm4usrKy4OvrC0EQsHbtWukg\nyNzcXKxfvx4KhQLe3t5IT0/nIZFERG7GVWDiER3ae3DjmSt1OHW5ltMSaED33GH3FrPZjH379qG5\nuRkhISFYunQpNBrNoASYMmXKHWPl5eVYtGiRdB0TE4PS0lIAQFlZGYxGo3TPaDTi6NGjg5KFiIiG\nj1qlxIq58dh7ogyV9Z0AgHPX6uF0ipg9IYJ7jFG/Bnzy8sEHH2Djxo0oKCiA3W7HlStXsH79euzf\nv3/IQplMpj7lSKfTwWQyAXAVKa1We9d7RETkXlRKBbLmxCMuwlcaO1/QgJNf8QkM9W/AJy+7du3C\nBx98gMTERGmssLAQP/jBD5Cenj4kofR6fZ8JwSaTSZoXo9frYbFY7nqPiIjcj0qpQObsOOSeqkBZ\nTTsA4EJhA9QqBWaMD5c5HY1E97Xa6PbiAgDJycmDttrobhISElBRUSFdV1RUICkpacB7RETknpRK\nBTJmxyExyk8aO3O1Duevcxk13WnA8qJSqVBUVNRnrKSkBGq1eshCZWZmIicnB01NTbDb7cjOzsby\n5cule++++y4cDgcaGhqQk5ODrKysIctCRETDQ6kQsGxmLIzhvZN4T16qwVfF3MiO+hrwY6Pnn38e\nTz/9NObNm4eAgAC0tLTgxIkT+OlPf/rI37ypqQmbNm2Srp955hkolUrs2rULzz33HDZu3AhRFJGW\nloYNGzYAADZv3ozS0lJkZGRAqVTixRdfRGpq6iNnISIi+SmVCmSlxePT46W40dgFADh24QZUSgXP\nQiKJIN7HjKjr16/j0KFDaGxslFYbpaSkDEe+R1ZdXY3FixcjLy8P0dHRcschIqL7YLU58MnxUtQ1\ndwMABEHA0hlGJBsDZE5Gw2Gg390DPnnp7u5GQkICXnrppSEJSERE9HUatWsZ9cfHStDYaoIoijh0\nphIqpQIJt82LodGp3zkv9fX12LRpE6ZOnYopU6bg5ZdfRldX13BmIyKiUUynUWHlvEQE+eoAAE5R\nxP5T5aio65A5Gcmt3/Ly05/+FAkJCdi7dy8+/PBDKJVK/Md//MdwZiMiolFOr1Vh5fxE+Hu79vdy\nOEXsO1kuzYeh0anf8nLt2jX8+Mc/RkJCAlJSUrB9+3bk5+cPZzYiIiJ46dVY9UQifAyuzUvtDic+\n+2vvfBgaffotLwqFAgpF722DwQCHwzEsoYiIiG7nY9Bg9ROJ8NK5tumw2Z349HgpGlu5w/po1G95\n4ZkSREQ0kvh5a7HqiUTota61JhabA58cL0FLh1nmZDTc+l1t1NXVhX379vU5W6K7u7vPGDeHIyKi\n4RToq8Oq+Yn46GgxLFYHTBY7Pj5agjULkuDvox34Dcgj9FteVCoVfvGLX/QZUyqV0pggCCwvREQ0\n7IL99XhybgI+PlYCm92JbrMNHx9zFRhfL83Ab0Bur9/ycvjw4eHMQUREdN/Cg7zw5NwEfHK8FHaH\nE509VqnAeOuH7vgaGhkGPNuIiIhoJIoM8UZWWhyUCtcczfYuCz45VoIes03mZDTUWF6IiMhtGcN9\nkTE7Doqbi0xaOsz49HgpzFa7zMloKLG8EBGRW4uP9MPSmUZplWxjmwmfHi+F1cbtPTwVywsREbm9\nMTEBWDQ1Rrqub+lBzoky2OxOGVPRUGF5ISIijzA2PhBPTOk9gfhGYxf25ZfB4WCB8TQsL0RE5DEm\nJAUjbWKkdF1Z14ncUxVwOMV7fBW5G5YXIiLyKI+nhGLGuHDpuqymHYfOVMLJAuMxWF6IiMjjTB8X\nhikpodJ1UVUrjpyv6rNrPLkvlhciIvI4giAgbUIEJiQGS2NXy1pw/OINFhgPwPJCREQeSRAEzJ8S\nhbFxgdLYV8VNOHutXsZUNBhYXoiIyGMJgoCFU2MwJsZfGjtzpQ5XSptlTEWPiuWFiIg8mkIhYMl0\nI2LCfKSxI+erUVbTLmMqehQsL0RE5PGUSgUyZ8chNMAAABBFEftPVaC2qVvmZPQwWF6IiGhU0KiV\nWDE3Hn7eWgCA3eHEZydK0dxukjkZPSiWFyIiGjUMOjVWzkuAXqsCAFisDnx6vBRdPVaZk9GDYHkh\nIqJRxc9biyfnJkCtcv0K7DLZ8AlPonYrLC9ERDTqhAYakJUWD4XCdRJ1S4cZe0+Uwc5zkNwCywsR\nEY1KMWE+WDLdKF3XNHVj/6kKHiPgBlheiIho1Eo2BmDupN6DHMtq2nH0QjV34R3hWF6IiGhUm5wc\n2uccpCulzdyFd4RjeSEiolEvbUIEUowB0vWZK3W4XNIkYyK6F5YXIiIa9QRBwKJpMTDetgvv0Qs3\nUHqDu/CORCwvREREcO3Cm/G1XXgPnK5ATVOXzMno61heiIiIbrrbLrw5J8q4C+8Iw/JCRER0G+7C\nO/KxvBAREX2Nn7cWT867yy68Fu7COxKwvBAREd1FaMCdu/DmcBfeEYHlhYiIqB9f34W3tpm78I4E\nLC9ERET3wF14Rx6WFyIiogHcdRfeq9yFVy4sL0RERPfhjl14r3IXXrmwvBAREd0HQRCwaLoRxnDu\nwis3lhciIqL7pFQIyPzaLrz7T5VzF95hxvJCRET0ANQq1y68/jd34XU4Re7CO8xYXoiIiB6QQafG\nk/MSYNCpAbh24f3sr2XoMdtkTjY6sLwQERE9BD9vLZ6c27sLb2ePlZvYDROWFyIioocUEqBHxqw4\nCIJrF976lh4cOlPJPWCGGMsLERHRI4iN8MW8yb2b2BVXt+H0lToZE3k+lhciIqJHNDEpBBOTgqXr\nc9fqcb2iRcZEno3lhYiIaBDMnRSF2HBf6frwuSrUNHIJ9VBgeSEiIhoECoWA9FmxCPLVAQCcThF7\nT5ajrdMiczLPw/JCREQ0SDRqJZbP7V1Cbbba8dmJUpgtdpmTeRa3LC/5+flYs2YN0tPT8eyzz6Ku\njhOjiIhoZPD10iArLQ4qpetXbFunBbmnyuHgEupB43blpaenB6+88grefPNN7N+/HwsXLsQbb7wh\ndywiIiJJeJAXlkw3StfVDV04eqGaS6gHiduVl1OnTiEmJgbjx48HAKxduxYnTpxAVxcnRRER0ciR\nFOOPWY9FSNdXy1pwoaBRxkSew+3KS3l5OWJiYqRrLy8v+Pv7o7KyUsZUREREd5qaGorU2EDp+uSl\nGpRUt8mYyDO4XXkxmUzQarV9xrRaLXp6emRKREREdHeCIGDh1GhEBntLYwfPVKKhhb+zHoXblReD\nwQCLpe+yM7PZDC8vL5kSERER9U+pVCArLU46hdrucOKzE2Xo6rHKnMx9uV15SUhI6PMRUWdnJ9rb\n2xEbGytjKiIiov7ptCosnxsPrUYJAOgx2/DZiTJYbQ6Zk7kntysvM2fORE1NDc6dOwcA2LlzJxYu\nXAiDwSBzMiIiov4F+OiQOTsOipuHODa1mXDgdAWcTq5AelBuV150Oh1++ctf4l/+5V+wdOlSXLx4\nET/60Y/kjkVERDSg6FAfLJzau+ikvLYDJ76qkTGRe1LJHeBhzJw5E5988oncMYiIiB7Y2PhAtHaa\ncb6gAQDwZVEj/H20mJAYPMBX0i1u9+SFiIjI3c2eEIHEKD/p+viFG6io65AxkXtheSEiIhpmgiBg\nyYxYhAa45ms6RRH7T1Wgud0kczL3wPJCREQkA7VKgeVz4uGtdx3iaLU5kHOiDD1mm8zJRj6WFyIi\nIpl46dVYMTcBapXr13FHtxV7T5bDzkMc74nlhYiISEbB/nqkz4qDcHMJdV1zN/LOVvEQx3tgeSEi\nIpJZXIQv5k6MlK6Lqlpx9mq9jIlGNpYXIiKiEWDimOA+y6XPXK1DQUWLjIlGLpYXIiKiEUAQBMyb\nHAVjuI80dvhcFWqaumRMNTKxvBAREY0QCoWA9FlxCPLVAQAcThF7T5Sjo5uHON6O5YWIiGgE0aqV\nWD43AXqtaxN8s9WOvSfLYLNzBdItLC9EREQjjK+XBllp8VAoeg9xPHyOK5BuYXkhIiIagSKCvfDE\nlGjpuqiqFRcKG2VMNHKwvBAREY1Q4xOC8FhCkHSdf6mWZyCB5YWIiGhEmzc5ChFBXgAAURRx4HQF\n2jotMqeSF8sLERHRCKZUKpCZFiedgWSxOrDvZBlsdofMyeTD8kJERDTCGXRqZKbFQ3lzAm9zhxmH\nzlSO2gm8LC9ERERuICzQgAWPx0jXJTfa8cX1BhkTyYflhYiIyE2MjQ/EpKQQ6fr0lTqU146+Cbws\nL0RERG4kbVIkokK8AfRO4G3tNMucanixvBAREbkRpUJA+qxY+Bg0AACrzYG9J8phtY2eCbwsL0RE\nRG7GNYE3Diql69d4a6cZB0fRBF6WFyIiIjcUGmDAwqm9O/CW1bTj7NV6GRMNH5YXIiIiN5USG4gp\nyaHS9ZmrdSi90S5jouHB8kJEROTGZk+IQEyYj3R98EwFWjo8ewIvywsREZEbUygEpM+Mha+XawKv\nze7E3hNlMFvtMicbOiwvREREbk6nVSErLR7qmxN427osOHi6Ek6nZ07gZXkhIiLyAMH+eiyebpSu\nK+o6cPpKnYyJhg7LCxERkYdIivHH1NQw6fqL6/UormqTMdHQYHkhIiLyIDPHhyM23Fe6zjtbiaY2\nk4yJBh/LCxERkQdRKAQsnWmEv7cWAGBzOLH3ZBnMFs+ZwMvyQkRE5GF0GhUy0+KgVrl+zXd0W7H/\ndIXHTOBleSEiIvJAQX56LLltAm9VfSfyL9fKmGjwsLwQERF5qMRof8wYFy5dXyhoQGFlq4yJBgfL\nCxERkQebPi4M8RG9E3gPn6tCQ2uPjIkeHcsLERGRBxMEAUtnxiLARwcAsDuc2HeyHD1mm8zJHh7L\nCxERkYfTqJXImhMHjVoJAOjssWL/qQo43HQCL8sLERHRKBDgo8PSGUYIggAAuNHYhZNf1cic6uGw\nvBAREY0S8ZF+mDm+dwLvl0WNKK52vx14WV6IiIhGkampoYiP9JOuD5+rQmunWcZED47lhYiIaBQR\nBAGLp8fA10sDALDaHMg9WQ6b3SFzsvvH8kJERDTK6DQqZM6Oh1Lhmv/S3GHG0fPVEEX3mMDL8kJE\nRDQKhQToMX9KtHR9vaIVV8taZEx0/1heiIiIRqlx8YEYGxcoXR+7UI2GlpG/gR3LCxER0SglCALm\nT4lGsL8eAOBwisg9VQ6zdWSfQM3yQkRENIqpVQpkzOrdwK6j24q8M5Ujev4LywsREdEo5++jxeJp\nMdJ1WW0Hzhc0yJjo3lheiIiICInR/picHCJdn7pchxuNXTIm6h/LCxEREQEAZk+IRESQFwBAFEXs\nP1WBbtPIO8CR5YWIiIgAAEqFgPTZcdBrVQCAHrMN+09VwDnCDnBkeSEiIiKJt16NZTNjpQMca5q6\nkH+5VuZUfbG8EBERUR8xYT59DnC8UNCA0hvtMibqS9byYrPZ8NZbbyElJQV1dXV97u3cuROZmZlI\nT0/Htm3bYLVaAQBWqxXbtm1Deno6MjMzkZ2dLUd0IiIijzY1NRRxEb7S9aGzlWjvssiYqJes5WXL\nli0wGAx3jF+8eBHZ2dnYvXs3cnNz0dnZiXfeeQeAq9S0t7dj37592LNnD3bt2oVLly4Nd3QiIiKP\nJggClkw39jnAcV9+OewOp7zBMALKy8svv3zHeG5uLrKysuDr6wtBELB27Vrk5uZK99avXw+FQgFv\nb2+kp6dL94iIiGjw6LQqZMyKkw5wbGoz4diFaplTyVxepkyZctfx8vJyGI1G6TomJgalpaUAgLKy\nsj73jEajdI+IiIgGV2igAfMmR0nXV8tacE3mAxxH5IRdk8kEjUYjXet0OphMJgCA2WyGVqu96z0i\nIiIafOMTgpBiDJCuj16oRlObfL97VUP9DQ4cOIBf/OIXd4z/7d/+LZ5++um7fo1er5cm6AKuMnNr\nboxer4fFYrnrPSIiIhp8giBgwdRoNLWZ0Nxhht3hRG5+OZ5ekgztzTORhtOQl5dly5Zh2bJlD/Q1\nCQkJqKiokK4rKiqQlJTU515cXNwd94iIiGhoqFVKZMyOw3t5hbDZnWjrsuDw2UpkzI6T9oQZLiPy\nY6PMzEzk5OSgqakJdrsd2dnZWL58uXTv3XffhcPhQENDA3JycpCVlSVzYiIiIs8X4KvDotsOcCy5\n0Y6LhY3DnmPIn7z0p6mpCZs2bZKun3nmGSiVSuzatQsTJkzAc889h40bN0IURaSlpWHDhg0AgM2b\nN6O0tBQZGRlQKpV48cUXkZqaKtePQURENKqMiQlAXVMPvix2lZZz1+sxaUwIFIrhe/oiW3kJDg6+\n5xLnzZs3Y/PmzXeMq9VqbN++fSijERER0T2kTYxAY5sJNU1d8NKph/37y1ZeiIiIyD0plQqsfiIR\nNxq7EOKvH9anLgDLCxERET0EhUJATJiPPN9blu9KRERE9JBYXoiIiMitsLwQERGRW2F5ISIiIrfC\n8kJERERuheWFiIiI3ArLCxEREbkVlhciIiJyKywvRERE5FZYXoiIiMitsLwQERGRW/H4s40cDgcA\noK6uTuYkREREdD9u/c6+9Tv86zy+vDQ2NgIANm7cKHMSIiIiehCNjY2IjY29Y1wQRVGUIc+wMZvN\nuHz5MkJCQqBUKuWOQ0RERANwOBxobGzEY489Bp1Od8d9jy8vRERE5Fk4YZeIiIjcCssLERERuRWW\nFyIiInIrLC9ERETkVlheiIiIyK2wvDyk/Px8rFmzBunp6Xj22We5Cd4QycvLw6pVq5CZmYkNGzag\nsLBQ7kge7ciRI0hJSUF1dbXcUTxSfX09nn32WSxatAhPPvkkzp49K3ckj/TBBx8gKysLmZmZePbZ\nZ1FWViZ3JI9hs9nw1ltvISUlpc/vvZ07dyIzMxPp6enYtm0brFbrkOZgeXkIPT09eOWVV/Dmm29i\n//79WLhwId544w25Y3mc+vp6bN26FTt27MC+ffuwYsUK/OhHP5I7lscymUzYsWMH/P395Y7isbZu\n3Yr58+fj8OHD2LZtG9599125I3mckpIS/PznP8f//u//Yt++fVi2bBlef/11uWN5jC1btsBgMPQZ\nu3jxIrKzs7F7927k5uais7MT77zzzpDmYHl5CKdOnUJMTAzGjx8PAFi7di1OnDiBrq4umZN5FpVK\nhR07diApKQkAMHXqVBQXF8ucynO9/fbbWLlyJby8vOSO4pFqa2tx5coVbNq0CQAwa9Ys/PrXv5Y5\nlecpKSlBXFwcwsLCALj+ORcVFcmcynNs2bIFL7/8cp+x3NxcZGVlwdfXF4IgYO3atcjNzR3SHCwv\nD6G8vBwxMTHStZeXF/z9/VFZWSljKs8TFBSE+fPnS9fHjh3DpEmTZEzkuQoKCnDy5El85zvfkTuK\nx7p+/Tqio6OxY8cOpKenY9OmTbh69arcsTzOpEmTUFlZicLCQoiiiAMHDiAtLU3uWB5jypQpd4yV\nl5fDaDRK1zExMSgtLR3SHCwvD8FkMkGr1fYZ02q16OnpkSmR58vPz8euXbvw2muvyR3F44iiiDfe\neAM//OEPoVar5Y7jsTo6OlBYWIhp06Zh//79WLlyJV566SXY7Xa5o3mUsLAwvPLKK1i9ejVmzJiB\nP/7xj3j11VfljuXRTCYTNBqNdK3T6WAymYb0e7K8PASDwQCLxdJnzGw283H7EDl06BC2bt2K3//+\n99JHSDR4du/ejaSkJEybNk3uKB7Nx8cHQUFBWLJkCQDg6aefRnt7O8rLy+UN5mGuXr2K3/3udzh0\n6BDOnj2L73//+3jhhRfAk3CGjl6v7zNB12Qy3TEvZrCxvDyEhISEPh8RdXZ2or29/a4nX9KjOXny\nJLZv344//OEPmDBhgtxxPFJeXh7y8vIwZ84czJkzB7W1tVi3bh1OnToldzSPEhkZie7ubjidTgCA\n8P/t3UtoE1scx/FvUvSOLG0AAAUGSURBVIlFYkVsigoKposiiCBRWx+LWtRk4k4LKj7QotkpiFRS\nxE1XaooY66JaFyq6UOujakwVXSgk2dQKopvWB7Xig4zVXSpWcxdyB8qtXuxtmkzu77PKYc7M/GeR\n4ZdzMnMcDpxOJ06nbsPjKZVKsWjRImbPng1AMBjkxYsXfP78Oc+VFS+v10t/f7/V7u/vz/kPTX1r\nxqC6upp3797R3d0N/HxEbNWqVTlPmv83mUyGpqYmWltbqayszHc5Rau9vZ1UKkUikSCRSDBr1iw6\nOjqoqanJd2lFpaqqioqKCq5cuQJAPB6nrKxsxH8F5L+bN28eT548scLKw4cP8Xg8TJ8+Pc+VFS/D\nMIjFYpimyfDwMOfPn2fdunU5PeeknB69SJWWlnLs2DGam5vJZDLMnTuXw4cP57usovPgwQMGBwf/\nMV994cIFysvL81SVyNg4HA5OnDhBOBzm9OnTzJgxg2g0yqRJug2Pp7q6Op4/f86mTZsAcLvdHD9+\nHIfDkefK7M80TetpOYBt27ZRUlLCuXPnaGhoYMuWLWSzWZYvX87mzZtzWosjq4lAERERsRFNG4mI\niIitKLyIiIiIrSi8iIiIiK0ovIiIiIitKLyIiIiIrSi8iIiIiK0ovIhIzhw4cIBAIEAgEMDn87Fk\nyRKr3dTUxMePHwkEAgwODua8lk+fPrF27VqePn36yz537txh48aNI151LiKFR+95EZEJEQ6Hcblc\nNDc35+X8DQ0N1NTUEAqFftsvHA4zbdo0LQIqUsA08iIiefP27VuqqqpIp9PW587OTtavX091dTVt\nbW3EYjE2bNjAsmXLaGlpsfbt6+tjx44d+P1+6urqaGtr++V5kskkvb29bN++HYBXr16xdetWDMNg\nzZo17Nmzx3qd/N69e7l8+TIDAwO5vXgRGTOFFxEpKG/evOHatWscOXKE1tZWent7uXr1Ku3t7Zw5\nc4Z0Os3Q0BA7d+6ktraWu3fvcuPGDWKxGNevXx/1mJ2dnaxevZrS0lIAotEoS5cuJR6Pc+/ePbxe\nL8lkEvi5gOKCBQuIx+MTds0i8mcUXkSkoPy9oNv8+fMZHh7GMAyrnc1mef/+Pd3d3WQyGWskpays\njPr6em7dujXqMR8/fozP57PaFRUVPHr0iGQyydDQEPv27RuxkJzP57MWXhWRwqMVwUSkoEydOhUA\np/Pnbyu32w1ASUkJAD9+/ODLly98/fqVYDBo7fft2zc8Hs+oxzRNc8Rino2NjZw9e5ZIJMLLly+p\nra3l0KFD1v4ejwfTNMf/4kRkXCi8iIjtzJw5kylTptDV1TWm/V0uF6FQiFAohGmaHDx4kEgkwtGj\nR8e5UhHJBU0biYjtLFy4ELfbTUdHBwDfv38nGo0Si8VG7V9eXj5iJGX37t2kUilrm9frHdE/nU6P\nGKkRkcKi8CIituNyuTh16hS3b9/G7/cTDAYZGBhg5cqVo/b3+Xz09PRY7V27dhGJRPD7/RiGwevX\nr9m/f7+1vaenh8WLF+f8OkRkbPSeFxEpeolEgnA4zP3795k8efJv+3748AHDMLh58yZz5syZoApF\n5E9o5EVEit6KFSuorKzk4sWL/9r35MmT1NfXK7iIFDCFFxH5X2hpaeHSpUs8e/bsl326urro6+uj\nsbFxAisTkT+laSMRERGxFY28iIiIiK0ovIiIiIitKLyIiIiIrSi8iIiIiK0ovIiIiIit/AUJunYT\n08wXCQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "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": { + "colab_type": "text", + "id": "5K127O8QyVKq" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "3OpJfvXIyVKq" + }, + "outputs": [], + "source": [ + "t_crossings = crossings(results.y, 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "XlZefw2hyVKt" + }, + "source": [ + "For this example there should be just one crossing, the time when the penny hits the sidewalk." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "_jIUWRMOyVKv" + }, + "outputs": [], + "source": [ + "t_sidewalk = t_crossings[0] * s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "9e9QxB2DyVKy" + }, + "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": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "4H69FUJuyVKz", + "outputId": "c0c8adc0-2eb7-44d2-93b3-bdfd8cd08e80" + }, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552\\ \\mathrm{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "sqrt(2 * init.y / g)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "S--2VoU7yVK4" + }, + "source": [ + "The estimate is accurate to about 10 decimal places." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "r4gst6_oyVK5" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "iH2eYoI1yVK6" + }, + "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": { + "colab_type": "text", + "id": "RUU8C4koyVK8" + }, + "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": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 284 + }, + "colab_type": "code", + "id": "sZcqDq-NyVK-", + "outputId": "c41d07b7-5d31-4312-f305-c2233e196fb4" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
messageA termination event occurred.
nfev38
njev0
nlu0
solNone
status1
successTrue
t_events[[8.817885349720553]]
\n", + "
" + ], + "text/plain": [ + "message A termination event occurred.\n", + "nfev 38\n", + "njev 0\n", + "nlu 0\n", + "sol None\n", + "status 1\n", + "success True\n", + "t_events [[8.817885349720553]]\n", + "dtype: object" + ] + }, + "execution_count": 17, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "results, details = run_ode_solver(system, slope_func, events=event_func)\n", + "details" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "AM0k7t-7yVLA" + }, + "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": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 254 + }, + "colab_type": "code", + "id": "o9Y5FnMfyVLC", + "outputId": "7c0d4b23-d3c3-4974-fb19-7d44370f9443" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
yv
0.000000381.0000000.000000
0.000102381.000000-0.001000
0.001122380.999994-0.011000
0.011327380.999371-0.111000
0.113367380.937025-1.110997
1.133773374.701343-11.110971
8.8178850.000000-86.415276
\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", + "1.133773 374.701343 -11.110971\n", + "8.817885 0.000000 -86.415276" + ] + }, + "execution_count": 18, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "results" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "CHxr2EqSyVLG" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "ttIZzpjPyVLH" + }, + "outputs": [], + "source": [ + "t_sidewalk = get_last_label(results) * s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "gmVFDsVTyVLK" + }, + "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": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Joo1jSYLyVLL", + "outputId": "0861f9d3-b4a5-4504-f7be-ec3314e3ff66" + }, + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720553 second" + ], + "text/latex": [ + "$8.817885349720553\\ \\mathrm{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "details.t_events[0][0] * s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "5To9p3EiyVLQ" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "se6TYeCUyVLR" + }, + "outputs": [], + "source": [ + "v_sidewalk = get_last_value(results.v) * m / s" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iAgE4Gj9yVLU" + }, + "source": [ + "And convert to kilometers per hour." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "3SASlJsryVLV", + "outputId": "4a2d7d92-fa2b-4618-b22e-d94887966ddc" + }, + "outputs": [ + { + "data": { + "text/html": [ + "-311.09499513814114 kilometer/hour" + ], + "text/latex": [ + "$-311.09499513814114\\ \\frac{\\mathrm{kilometer}}{\\mathrm{hour}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "km = UNITS.kilometer\n", + "h = UNITS.hour\n", + "v_sidewalk.to(km / h)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "BuHAdPo2yVLc" + }, + "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": { + "colab_type": "text", + "id": "zf50bYqKyVLd" + }, + "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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "egybRvtSyVLe" + }, + "outputs": [], + "source": [ + "%psource crossings" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "pWHmHZADyVLi" + }, + "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": { + "colab_type": "text", + "id": "EBbygIvbyVLj" + }, + "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", + "\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": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "XcpC9qV2yVLl" + }, + "outputs": [], + "source": [ + "# units!\n", + "N = UNITS.newton\n", + "kg = UNITS.kilogram\n", + "m = UNITS.meter\n", + "AU = UNITS.astronomical_unit;" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Nq0vKaw0yVLn" + }, + "outputs": [], + "source": [ + "r_0 = (1 * AU).to_base_units()\n", + "v_0 = 0 * m / s\n", + "init = State(r=r_0,\n", + " v=v_0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2mYVqxxmyVLq" + }, + "outputs": [], + "source": [ + "system = System(init=init,\n", + " G=6.674e-11 * N / kg ** 2 * m ** 2,\n", + " m_sun=1.99e30 * kg,\n", + " m_earth=5.972e24 * kg,\n", + " t_end=100e6 * s,\n", + " r_final=695.508e6 * m + 6.371e6 * m)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "G4ijoX3dyVLt" + }, + "outputs": [], + "source": [ + "def universal_grav(state, system):\n", + " \"\"\"Calculates gravitational force for arbitrary objects\"\"\"\n", + " r, v = state\n", + " unpack(system)\n", + " force = G * m_sun * m_earth / r ** 2\n", + " \n", + " return force\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0euiUJCfyVL0" + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " r, v = state\n", + " unpack(system)\n", + " \n", + " force = universal_grav(state, system)\n", + " \n", + " drdt = v\n", + " dvdt = -force / m_earth\n", + " \n", + " return drdt, dvdt" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "colab_type": "code", + "id": "yxNvIgrGyVL2", + "outputId": "7120ea5a-0b0c-4749-9111-599c45ae1f3e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 meter / second\n", + "-0.005934559038759181 newton / kilogram\n" + ] + } + ], + "source": [ + "drdt, dvdt = slope_func(init, 0, system)\n", + "print(drdt)\n", + "print(dvdt)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "BDP2V-W97UdW" + }, + "outputs": [], + "source": [ + "def event_func(state, t, system):\n", + " r, v = state\n", + " return r - system.r_final" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "oDu_ADwk7bMA", + "outputId": "d8d2a613-7fae-4153-c504-da85529fd34b" + }, + "outputs": [ + { + "data": { + "text/html": [ + "148895991691.0 meter" + ], + "text/latex": [ + "$148895991691.0\\ \\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 119, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "event_func(init, 0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "colab_type": "code", + "id": "0PSP5uH6yVL4", + "outputId": "9c29f5e7-b731-45b8-c2c3-88e2f79094d5" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "results, details = run_ode_solver(system, slope_func, events=event_func, method='LSODA', min_step=99)\n", + "results.index /= 60 * 60 * 24\n", + "results.r *= (0.000621371 / 1000)\n", + "plot(results.r, 'go-')\n", + "decorate(title='Distance from Sun',\n", + " xlabel='Time (days)',\n", + " ylabel='Distance from sun (thousand miles)')" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "colab_type": "code", + "id": "ZBi2VbR7yVL_", + "outputId": "d1ae6d1c-3b3a-435d-fd08-683d512f4e61" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(results.v, 'ro-')\n", + "decorate(title='Earth Velocity',\n", + " xlabel='Time (days)',\n", + " ylabel='Velocity (m/s)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "HJK8S7CZyVMB" + }, + "outputs": [], + "source": [ + "\n", + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "-EBnddfFyVME" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "-Ukzv__AyVMF" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Cr7bXOkOyVMH" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "z2Rz6DNgyVMK" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "rvTAB2c9yVMM" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "kqO3E3-ByVMP" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "8lF4CTvjyVMU" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "TclFQil3yVMV" + }, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2QjbzAAGyVMZ" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Ax8EsdFJypUT", + "outputId": "f7e4ff7d-efb2-4b09-e88f-ea07b75e289d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Configured for ModSimPy. Restarting kernel.\n" + ] + } + ], + "source": [ + "# Imports\n", + "from IPython.display import clear_output\n", + "import os\n", + "import time\n", + "\n", + "# Install Python libraries\n", + "!pip3 install pandas seaborn sympy beautifulsoup4 lxml pint scipy==1.1.0 numpy\n", + "\n", + "# Removes code before re-downloading it\n", + "!rm -rf ./ModSimPy\n", + "!rm -rf ./modsim.py\n", + "\n", + "# Grabs ModSimPy\n", + "!git clone https://github.com/AllenDowney/ModSimPy.git\n", + "!cp \"ModSimPy/code/modsim.py\" .\n", + "\n", + "# Resets kernel to flush outdated libraries (especially SciPy)\n", + "clear_output()\n", + "print(\"Configured for ModSimPy. Restarting kernel.\")\n", + "time.sleep(1)\n", + "os._exit(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "gFAThLbWytK9" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "5K127O8QyVKq" + ], + "name": "chap20-mine.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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/chap23-mine.ipynb b/code/chap23-mine.ipynb new file mode 100644 index 00000000..2dbfff04 --- /dev/null +++ b/code/chap23-mine.ipynb @@ -0,0 +1,3705 @@ +{ + "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": 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 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
wall_height11.28 meter
x0 meter
y1 meter
g9.8 meter / second ** 2
mass0.145 kilogram
diameter0.073 meter
rho1.2 kilogram / meter ** 3
C_d0.3
angle45 degree
velocity40.0 meter / second
t_end20 second
\n", + "
" + ], + "text/plain": [ + "wall_height 11.28 meter\n", + "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(wall_height = 11.28 * m,\n", + " 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": 5, + "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": 6, + "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": 7, + "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", + " print(state)\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": 8, + "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": 9, + "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": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 28.28427125 28.28427125]\n", + "[1.73143253e-05 1.00001731e+00 2.82842676e+01 2.82842616e+01]\n", + "[3.46286505e-04 1.00034629e+00 2.82841993e+01 2.82840793e+01]\n", + "[5.19428766e-04 1.00051943e+00 2.82841633e+01 2.82839833e+01]\n", + "[1.38513897e-03 1.00138513e+00 2.82839834e+01 2.82835035e+01]\n", + "[1.53904243e-03 1.00153903e+00 2.82839514e+01 2.82834181e+01]\n", + "[1.73142151e-03 1.00173140e+00 2.82839114e+01 2.82833115e+01]\n", + "[1.73142151e-03 1.00173140e+00 2.82839114e+01 2.82833115e+01]\n", + "[5.19424251e-03 1.00519415e+00 2.82831918e+01 2.82813921e+01]\n", + "[6.92555388e-03 1.00692526e+00 2.82828320e+01 2.82804324e+01]\n", + "[1.55820008e-02 1.01558051e+00 2.82810332e+01 2.82756344e+01]\n", + "[1.71208671e-02 1.01711907e+00 2.82807135e+01 2.82747814e+01]\n", + "[1.90444255e-02 1.01904220e+00 2.82803138e+01 2.82737153e+01]\n", + "[1.90444253e-02 1.01904220e+00 2.82803138e+01 2.82737153e+01]\n", + "[ 0.05366823 1.05365793 28.27311994 28.25452485]\n", + "[ 0.07097022 1.07093936 28.26952883 28.2449389 ]\n", + "[ 0.15746931 1.15731735 28.25157969 28.19701935]\n", + "[ 0.17284129 1.17265827 28.24839206 28.18850562]\n", + "[ 0.19205366 1.19182763 28.24440904 28.17786584]\n", + "[ 0.19205349 1.19182736 28.24440912 28.17786594]\n", + "[ 0.53785196 1.53681114 28.17272895 27.98637249]\n", + "[ 0.70976391 1.7066655 28.13746831 27.89154481]\n", + "[ 1.5683528 2.55320675 27.96173581 27.41832065]\n", + "[ 1.72054444 2.70237153 27.93076703 27.33464134]\n", + "[ 1.91037826 2.88791945 27.89227403 27.23036067]\n", + "[ 1.91020607 2.88764665 27.89235604 27.23046367]\n", + "[ 5.32508864 6.22149323 27.2007423 25.35544056]\n", + "[ 6.93727077 7.63016094 26.90916468 24.50279972]\n", + "[15.01037044 14.57127389 25.44673238 20.24137176]\n", + "[16.52014025 15.8568477 25.15560473 19.45225421]\n", + "[18.22008322 17.14421717 24.87924035 18.57690145]\n", + "[18.03810702 16.86263695 24.96306548 18.68068978]\n", + "[27.2544995 23.7595691 23.47005921 13.9452524 ]\n", + "[31.24257365 25.24116513 23.02045164 12.01287476]\n", + "[52.44261652 33.32112818 20.2223726 1.74054676]\n", + "[58.27832581 37.06777872 19.01189553 -0.84190664]\n", + "[62.39842417 36.91005332 18.61696852 -2.8118032 ]\n", + "[58.81907502 31.88109955 19.82253665 -1.46700122]\n", + "[70.18157468 31.04019805 18.64910098 -6.99762866]\n", + "[75.10611975 27.05325263 18.13790684 -9.39363665]\n", + "[ 99.65768029 6.9191345 15.12102665 -21.10211762]\n", + "[104.80853871 5.15683685 14.14925527 -23.52553226]\n", + "[109.5044468 -2.51649973 13.44737199 -25.55843981]\n", + "[107.53901227 -7.82781491 14.11111066 -24.58125566]\n", + "Wall time: 204 ms\n" + ] + }, + { + "data": { + "text/html": [ + "102.72776151763686 meter" + ], + "text/latex": [ + "$102.72776151763686 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "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": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 37.58770483 13.68080573]\n", + "[1.73141653e-05 1.00000630e+00 3.75877012e+01 1.36807999e+01]\n", + "[3.46283307e-04 1.00012604e+00 3.75876329e+01 1.36806893e+01]\n", + "[5.19424215e-04 1.00018905e+00 3.75875969e+01 1.36806310e+01]\n", + "[1.38512792e-03 1.00050414e+00 3.75874170e+01 1.36803398e+01]\n", + "[1.53903037e-03 1.00056015e+00 3.75873850e+01 1.36802881e+01]\n", + "[1.73140825e-03 1.00063017e+00 3.75873450e+01 1.36802233e+01]\n", + "[1.73140825e-03 1.00063017e+00 3.75873450e+01 1.36802233e+01]\n", + "[5.19420817e-03 1.00189049e+00 3.75866254e+01 1.36790586e+01]\n", + "[6.92553354e-03 1.00252052e+00 3.75862656e+01 1.36784762e+01]\n", + "[1.55820776e-02 1.00567057e+00 3.75844667e+01 1.36755645e+01]\n", + "[1.71209754e-02 1.00623051e+00 3.75841469e+01 1.36750469e+01]\n", + "[1.90445793e-02 1.00693040e+00 3.75837472e+01 1.36743999e+01]\n", + "[1.90445792e-02 1.00693040e+00 3.75837472e+01 1.36743999e+01]\n", + "[ 0.05366926 1.01952818 37.57655231 13.66275371]\n", + "[ 0.07097415 1.025815 37.57295861 13.65693391]\n", + "[ 0.15749035 1.05723574 37.5549942 13.62783859]\n", + "[ 0.17286673 1.06281469 37.55180267 13.62266799]\n", + "[ 0.19208529 1.06978532 37.5478142 13.61620557]\n", + "[ 0.19208521 1.06978524 37.54781424 13.61620559]\n", + "[ 0.53800102 1.19522692 37.47603093 13.49989014]\n", + "[ 0.71021494 1.25674223 37.44050969 13.44206039]\n", + "[ 1.57051858 1.56303305 37.26328081 13.15325101]\n", + "[ 1.72309006 1.61683783 37.23195938 13.10207883]\n", + "[ 1.91354301 1.6837274 37.19293285 13.03821431]\n", + "[ 1.91346052 1.68365449 37.19297 13.03823678]\n", + "[ 5.33992795 2.88482487 36.49132708 11.88942916]\n", + "[ 6.98044157 3.36634465 36.17568992 11.34601841]\n", + "[15.15983475 5.69240941 34.60517589 8.64099469]\n", + "[16.63367778 6.09061075 34.3173695 8.15970995]\n", + "[18.37960695 6.49046316 34.00008256 7.58555758]\n", + "[18.29365092 6.41616995 34.03816633 7.60846785]\n", + "[30.13652316 9.06337814 31.89206302 3.71904841]\n", + "[35.21793075 8.86458428 31.15089312 2.07117003]\n", + "[61.74442781 8.01508472 26.84580049 -6.42421012]\n", + "[68.52097233 9.11703481 25.28240307 -8.31934301]\n", + "[73.61842205 7.42795992 24.57222148 -9.96275431]\n", + "[69.85959519 4.36131405 25.94014569 -9.21025611]\n", + "[ 81.74701444 0.14059081 24.240016 -13.09759275]\n", + "[ 86.81422846 -3.97387292 23.51365022 -14.75374076]\n", + "[112.18417911 -24.43057104 19.68316501 -22.92614843]\n", + "[117.41964415 -26.74214167 18.76797251 -24.58055954]\n", + "[122.18832318 -33.16799563 17.98839555 -26.04483436]\n", + "[120.37708068 -36.60678382 18.40477449 -25.46282814]\n", + "20.0 79.96823513701818 meter\n", + "[ 0. 1. 36.82019414 15.62924514]\n", + "[1.73142144e-05 1.00000735e+00 3.68201905e+01 1.56292390e+01]\n", + "[3.46284287e-04 1.00014699e+00 3.68201222e+01 1.56291224e+01]\n", + "[5.19425669e-04 1.00022048e+00 3.68200862e+01 1.56290611e+01]\n", + "[1.38513173e-03 1.00058795e+00 3.68199063e+01 1.56287543e+01]\n", + "[1.53903459e-03 1.00065327e+00 3.68198743e+01 1.56286997e+01]\n", + "[1.73141298e-03 1.00073493e+00 3.68198343e+01 1.56286316e+01]\n", + "[1.73141297e-03 1.00073493e+00 3.68198343e+01 1.56286316e+01]\n", + "[5.19422200e-03 1.00220476e+00 3.68191147e+01 1.56274044e+01]\n", + "[6.92555038e-03 1.00293955e+00 3.68187549e+01 1.56267909e+01]\n", + "[1.55821077e-02 1.00661333e+00 3.68169560e+01 1.56237233e+01]\n", + "[1.71210070e-02 1.00726638e+00 3.68166362e+01 1.56231780e+01]\n", + "[1.90446123e-02 1.00808265e+00 3.68162365e+01 1.56224963e+01]\n", + "[1.90446122e-02 1.00808265e+00 3.68162365e+01 1.56224963e+01]\n", + "[ 0.05366932 1.0227752 36.80904169 15.61022667]\n", + "[ 0.07097406 1.03010849 36.80544819 15.60409552]\n", + "[ 0.15748937 1.06676059 36.78748497 15.57344381]\n", + "[ 0.17286551 1.07326903 36.78429373 15.56799674]\n", + "[ 0.19208372 1.0814013 36.78030569 15.56118882]\n", + "[ 0.19208363 1.08140121 36.78030573 15.56118885]\n", + "[ 0.53799278 1.22775012 36.70853051 15.43865541]\n", + "[ 0.71018795 1.29962813 36.67303003 15.37775424]\n", + "[ 1.57038473 1.6576388 36.49592102 15.0736253 ]\n", + "[ 1.72293236 1.72059283 36.46462839 15.01974815]\n", + "[ 1.91334647 1.79888702 36.42564461 14.95251529]\n", + "[ 1.91325843 1.79880403 36.42568461 14.95254179]\n", + "[ 5.33899871 3.20505144 35.72484655 13.7431873 ]\n", + "[ 6.97771787 3.78022144 35.4111622 13.17298274]\n", + "[15.15034236 6.57153741 33.84993016 10.33414758]\n", + "[16.62634508 7.05474882 33.56251255 9.82789742]\n", + "[18.36933617 7.54919337 33.2486752 9.22694108]\n", + "[18.27749464 7.46450726 33.28966747 9.25392802]\n", + "[29.93880424 10.70614131 31.19623009 5.23906807]\n", + "[34.94446584 10.74476048 30.48405671 3.54698514]\n", + "[61.13950333 11.14368967 26.31100284 -5.21452328]\n", + "[67.90796626 12.5965018 24.75758594 -7.20723517]\n", + "[72.94658747 11.12536378 24.07886676 -8.8994209 ]\n", + "[69.12370731 7.81491071 25.46602954 -8.06519517]\n", + "[ 81.00716693 4.0513707 23.81672793 -12.1159234 ]\n", + "[ 8.60830635e+01 4.30913963e-02 2.31116792e+01 -1.38458617e+01]\n", + "[111.49270617 -19.9102949 19.36684276 -22.37756413]\n", + "[116.74102053 -22.09284827 18.45272209 -24.10354555]\n", + "[121.52726593 -28.51751821 17.68296117 -25.63283356]\n", + "[119.70571421 -32.10651181 18.11489898 -25.02664933]\n", + "23.0 86.2962864918857 meter\n", + "[ 0. 1. 35.95176185 17.53484587]\n", + "[1.73142502e-05 1.00000844e+00 3.59517583e+01 1.75348394e+01]\n", + "[3.46285004e-04 1.00016889e+00 3.59516899e+01 1.75347164e+01]\n", + "[5.19426727e-04 1.00025334e+00 3.59516539e+01 1.75346516e+01]\n", + "[1.38513447e-03 1.00067557e+00 3.59514740e+01 1.75343279e+01]\n", + "[1.53903762e-03 1.00075063e+00 3.59514420e+01 1.75342703e+01]\n", + "[1.73141636e-03 1.00084446e+00 3.59514020e+01 1.75341984e+01]\n", + "[1.73141636e-03 1.00084446e+00 3.59514020e+01 1.75341984e+01]\n", + "[5.19423174e-03 1.00253334e+00 3.59506824e+01 1.75329035e+01]\n", + "[6.92556145e-03 1.00337764e+00 3.59503226e+01 1.75322561e+01]\n", + "[1.55821234e-02 1.00759899e+00 3.59485237e+01 1.75290190e+01]\n", + "[1.71210225e-02 1.00834937e+00 3.59482039e+01 1.75284436e+01]\n", + "[1.90446270e-02 1.00928731e+00 3.59478042e+01 1.75277243e+01]\n", + "[1.90446269e-02 1.00928731e+00 3.59478042e+01 1.75277243e+01]\n", + "[ 0.05366932 1.0261699 35.9406095 17.51477692]\n", + "[ 0.07097386 1.03459716 35.93701622 17.50830736]\n", + "[ 0.15748801 1.07671797 35.91905431 17.47596407]\n", + "[ 0.17286384 1.08419802 35.91586342 17.47021652]\n", + "[ 0.19208161 1.09354454 35.91187585 17.46303313]\n", + "[ 0.19208152 1.09354444 35.91187589 17.46303316]\n", + "[ 0.53798234 1.26174723 35.84010963 17.33374209]\n", + "[ 0.7101551 1.34444763 35.80463197 17.2695053 ]\n", + "[ 1.57022427 1.75646299 35.62765462 16.94874123]\n", + "[ 1.72274337 1.82896603 35.59639351 16.89192786]\n", + "[ 1.91311127 1.91915928 35.55745667 16.82103968]\n", + "[ 1.9130168 1.9190642 35.55749995 16.82107102]\n", + "[ 5.33789179 3.53925869 34.85754533 15.54601621]\n", + "[ 6.97448273 4.21119194 34.54599935 14.94695251]\n", + "[15.13897108 7.48320573 32.9948292 11.96385321]\n", + "[16.61740793 8.0548924 32.70770657 11.43045319]\n", + "[18.3568955 8.64604903 32.39762105 10.8007942 ]\n", + "[18.25821821 8.54888583 32.44195688 10.832668 ]\n", + "[29.69065495 12.36628168 30.41034951 6.70080848]\n", + "[34.60145025 12.6369195 29.72953069 4.968246 ]\n", + "[60.35913519 14.2585309 25.70672353 -4.0406498 ]\n", + "[67.08310989 16.05658691 24.17459062 -6.12673786]\n", + "[72.04336591 14.80128331 23.52999027 -7.86416936]\n", + "[68.18696894 11.25162758 24.92324146 -6.95014341]\n", + "[ 80.43971776 7.8348023 23.27606551 -11.30867878]\n", + "[ 85.65508558 3.71580659 22.5747028 -13.16376546]\n", + "[111.78793173 -16.72428792 18.80116879 -22.30834398]\n", + "[117.26340699 -18.75353981 17.83746883 -24.18232266]\n", + "[122.16560665 -25.53707681 17.05486141 -25.80381739]\n", + "[120.14221447 -29.68563195 17.55176683 -25.10198517]\n", + "26.0 91.59647908800756 meter\n", + "[ 0. 1. 34.98478829 19.39238481]\n", + "[1.73142767e-05 1.00000960e+00 3.49847847e+01 1.93923780e+01]\n", + "[3.46285534e-04 1.00019195e+00 3.49847163e+01 1.93922479e+01]\n", + "[5.19427500e-04 1.00028792e+00 3.49846803e+01 1.93921795e+01]\n", + "[1.38513644e-03 1.00076779e+00 3.49845004e+01 1.93918372e+01]\n", + "[1.53903978e-03 1.00085309e+00 3.49844684e+01 1.93917764e+01]\n", + "[1.73141877e-03 1.00095973e+00 3.49844285e+01 1.93917003e+01]\n", + "[1.73141877e-03 1.00095973e+00 3.49844285e+01 1.93917003e+01]\n", + "[5.19423850e-03 1.00287915e+00 3.49837088e+01 1.93903314e+01]\n", + "[6.92556822e-03 1.00383871e+00 3.49833490e+01 1.93896470e+01]\n", + "[1.55821279e-02 1.00863634e+00 3.49815501e+01 1.93862250e+01]\n", + "[1.71210253e-02 1.00948917e+00 3.49812304e+01 1.93856167e+01]\n", + "[1.90446272e-02 1.01055516e+00 3.49808307e+01 1.93848563e+01]\n", + "[1.90446271e-02 1.01055516e+00 3.49808307e+01 1.93848563e+01]\n", + "[ 0.05366926 1.02974263 34.97363604 19.37116909]\n", + "[ 0.07097357 1.03932112 34.97004301 19.36433013]\n", + "[ 0.15748628 1.08719673 34.95208257 19.3301404 ]\n", + "[ 0.17286173 1.09569917 34.94889205 19.32406488]\n", + "[ 0.19207897 1.10632335 34.944905 19.31647165]\n", + "[ 0.19207887 1.10632324 34.94490505 19.31647169]\n", + "[ 0.53796963 1.29752104 34.8731487 19.17980487]\n", + "[ 0.71011597 1.3915981 34.83769621 19.11193012]\n", + "[ 1.57003477 1.86037315 34.66086386 18.77302574]\n", + "[ 1.72252026 1.94290736 34.62963733 18.71301164]\n", + "[ 1.91283383 2.04559598 34.59075217 18.63814008]\n", + "[ 1.91273187 2.04548628 34.59079922 18.63817727]\n", + "[ 5.33658949 3.89032557 33.89181706 17.29153136]\n", + "[ 6.97068352 4.66279018 33.58261926 16.6612723 ]\n", + "[15.12557367 8.43427501 32.04237452 13.52203626]\n", + "[16.60681508 9.09872347 31.75541704 12.95894634]\n", + "[18.34218544 9.78919361 31.44942039 12.29844829]\n", + "[18.23553711 9.6769317 31.49762083 12.33622955]\n", + "[29.39929069 14.04928184 29.53553948 8.09433866]\n", + "[34.1988158 14.54406399 28.88796575 6.32436838]\n", + "[59.42833923 17.35014629 25.03039747 -2.91619849]\n", + "[66.07697164 19.48637273 23.52913718 -5.09178094]\n", + "[70.94176324 18.44062106 22.92075388 -6.87146624]\n", + "[67.07714885 14.65421362 24.30880999 -5.87980791]\n", + "[ 79.46050465 11.65893111 22.69968872 -10.48289473]\n", + "[ 84.73000202 7.52328044 22.01539542 -12.44185109]\n", + "[111.14202419 -12.9835139 18.28760137 -22.09155342]\n", + "[116.71978836 -14.87619383 17.29799207 -24.08233324]\n", + "[121.67216697 -21.87266699 16.51552381 -25.78343075]\n", + "[119.54225102 -26.40645007 17.05884065 -25.01307558]\n", + "29.0 95.89089380357947 meter\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 33.92192385 21.19677057]\n", + "[1.73142962e-05 1.00001082e+00 3.39219202e+01 2.11967633e+01]\n", + "[3.46285924e-04 1.00021638e+00 3.39218519e+01 2.11966256e+01]\n", + "[5.19428059e-04 1.00032457e+00 3.39218159e+01 2.11965531e+01]\n", + "[1.38513782e-03 1.00086552e+00 3.39216360e+01 2.11961905e+01]\n", + "[1.53904129e-03 1.00096169e+00 3.39216040e+01 2.11961261e+01]\n", + "[1.73142044e-03 1.00108190e+00 3.39215640e+01 2.11960455e+01]\n", + "[1.73142044e-03 1.00108190e+00 3.39215640e+01 2.11960455e+01]\n", + "[5.19424294e-03 1.00324566e+00 3.39208444e+01 2.11945954e+01]\n", + "[6.92557154e-03 1.00432737e+00 3.39204846e+01 2.11938704e+01]\n", + "[1.55821228e-02 1.00973576e+00 3.39186857e+01 2.11902455e+01]\n", + "[1.71210173e-02 1.01069715e+00 3.39183660e+01 2.11896011e+01]\n", + "[1.90446148e-02 1.01189885e+00 3.39179663e+01 2.11887956e+01]\n", + "[1.90446147e-02 1.01189885e+00 3.39179663e+01 2.11887956e+01]\n", + "[ 0.05366917 1.03352906 33.91077173 21.174297 ]\n", + "[ 0.07097318 1.04432751 33.90717898 21.16705289]\n", + "[ 0.15748415 1.09830136 33.88922016 21.13083806]\n", + "[ 0.17285916 1.10788712 33.88603006 21.12440286]\n", + "[ 0.19207577 1.11986509 33.8820436 21.11636018]\n", + "[ 0.19207566 1.11986497 33.88204365 21.11636023]\n", + "[ 0.53795447 1.33542757 33.8102983 20.9716047 ]\n", + "[ 0.71006993 1.44154645 33.77487366 20.89974367]\n", + "[ 1.56981302 1.97038748 33.59820153 20.54096499]\n", + "[ 1.72225929 2.06353155 33.56701304 20.47744557]\n", + "[ 1.91250943 2.17943102 33.52818499 20.39821307]\n", + "[ 1.91239871 2.1793035 33.52823645 20.3982574 ]\n", + "[ 5.33506907 4.26162331 32.83032843 18.97324129]\n", + "[ 6.96625397 5.1391292 32.52371798 18.30912957]\n", + "[15.1099682 9.43265115 30.99536056 15.00018688]\n", + "[16.59450803 10.19513678 30.70839115 14.40442533]\n", + "[18.32508831 10.98803875 30.40686178 13.71067199]\n", + "[18.20909782 10.85734192 30.45955657 13.75566026]\n", + "[29.06944571 15.76191943 28.57368998 9.40980745]\n", + "[33.74316369 16.47100626 27.96091167 7.60505062]\n", + "[58.36398806 20.41325209 24.28127162 -1.85345641]\n", + "[64.91009799 22.8790625 22.81930218 -4.11470503]\n", + "[69.66400682 22.03331606 22.24880178 -5.93405622]\n", + "[65.81307696 18.01144649 23.6216087 -4.86735497]\n", + "[78.18016316 15.46314424 22.0719131 -9.67881923]\n", + "[ 83.45094576 11.35507235 21.41259391 -11.72994358]\n", + "[109.86596882 -9.03355813 17.77465986 -21.82463145]\n", + "[115.46749184 -10.81763711 16.77345376 -23.91450085]\n", + "[120.42846809 -17.95602014 15.99873743 -25.68806946]\n", + "[118.25202622 -22.76351643 16.57700766 -24.86477519]\n", + "32.0 99.20335822576214 meter\n", + "[ 0. 1. 32.76608177 22.94305745]\n", + "[1.73143101e-05 1.00001212e+00 3.27660782e+01 2.29430498e+01]\n", + "[3.46286201e-04 1.00024247e+00 3.27660098e+01 2.29429035e+01]\n", + "[5.19428446e-04 1.00036371e+00 3.27659738e+01 2.29428265e+01]\n", + "[1.38513872e-03 1.00096988e+00 3.27657939e+01 2.29424416e+01]\n", + "[1.53904227e-03 1.00107764e+00 3.27657619e+01 2.29423732e+01]\n", + "[1.73142150e-03 1.00121234e+00 3.27657219e+01 2.29422876e+01]\n", + "[1.73142150e-03 1.00121234e+00 3.27657219e+01 2.29422876e+01]\n", + "[5.19424548e-03 1.00363698e+00 3.27650023e+01 2.29407480e+01]\n", + "[6.92557191e-03 1.00484912e+00 3.27646425e+01 2.29399783e+01]\n", + "[1.55821091e-02 1.01090960e+00 3.27628437e+01 2.29361297e+01]\n", + "[1.71209993e-02 1.01198691e+00 3.27625239e+01 2.29354455e+01]\n", + "[1.90445909e-02 1.01333351e+00 3.27621242e+01 2.29345903e+01]\n", + "[1.90445908e-02 1.01333351e+00 3.27621242e+01 2.29345903e+01]\n", + "[ 0.05366903 1.03757178 32.7549298 22.9191969 ]\n", + "[ 0.07097269 1.04967262 32.75133736 22.9115061 ]\n", + "[ 0.1574816 1.11015656 32.73338036 22.87305853]\n", + "[ 0.17285608 1.12089873 32.73019072 22.86622679]\n", + "[ 0.19207195 1.13432178 32.72620491 22.85768861]\n", + "[ 0.19207183 1.13432163 32.72620496 22.85768867]\n", + "[ 0.5379366 1.37589163 32.65447188 22.70401588]\n", + "[ 0.71001611 1.49484953 32.61907817 22.62776419]\n", + "[ 1.56955488 2.08771882 32.4425838 22.24709881]\n", + "[ 1.72195564 2.19216622 32.41143733 22.17972072]\n", + "[ 1.91213209 2.32213352 32.37267264 22.09568954]\n", + "[ 1.91201106 2.32198406 32.37272926 22.09574269]\n", + "[ 5.33330186 4.65715823 31.67601266 20.58449783]\n", + "[ 6.96111122 5.64506602 31.37226439 19.88349302]\n", + "[15.09193275 10.4875787 29.85687219 16.38922752]\n", + "[16.58042612 11.3545926 29.569651 15.75725657]\n", + "[18.3054713 12.25360291 29.2730168 15.02750003]\n", + "[18.1784637 12.10017182 29.33097465 15.08136954]\n", + "[28.7043009 17.51233566 27.527284 10.63708048]\n", + "[33.23902946 18.42415924 26.95058904 8.79982364]\n", + "[57.17796925 23.44516646 23.4598265 -0.864274 ]\n", + "[63.59688098 26.23028674 22.04474119 -3.20723262]\n", + "[68.22571184 25.57217815 21.5134338 -5.06400731]\n", + "[64.40814044 21.31565665 22.86175683 -3.92542689]\n", + "[76.65664125 19.21255518 21.38556776 -8.92244599]\n", + "[ 81.89114198 15.14912997 20.75631821 -11.0586372 ]\n", + "[108.11174943 -5.06355367 17.23694046 -21.56068151]\n", + "[113.68071562 -6.77211116 16.23364867 -23.73868449]\n", + "[118.61950703 -14.02136745 15.47159021 -25.57969917]\n", + "[116.43860183 -19.02619105 16.07708161 -24.71263756]\n", + "35.0 101.55668007973463 meter\n", + "[ 0. 1. 31.52043014 24.62645901]\n", + "[1.73143193e-05 1.00001353e+00 3.15204265e+01 2.46264508e+01]\n", + "[3.46286385e-04 1.00027055e+00 3.15203582e+01 2.46262951e+01]\n", + "[5.19428688e-04 1.00040582e+00 3.15203222e+01 2.46262132e+01]\n", + "[1.38513922e-03 1.00108218e+00 3.15201423e+01 2.46258035e+01]\n", + "[1.53904279e-03 1.00120242e+00 3.15201103e+01 2.46257306e+01]\n", + "[1.73142204e-03 1.00135272e+00 3.15200703e+01 2.46256396e+01]\n", + "[1.73142204e-03 1.00135272e+00 3.15200703e+01 2.46256396e+01]\n", + "[5.19424636e-03 1.00405812e+00 3.15193507e+01 2.46240007e+01]\n", + "[6.92556958e-03 1.00541061e+00 3.15189909e+01 2.46231813e+01]\n", + "[1.55820869e-02 1.01217286e+00 3.15171921e+01 2.46190845e+01]\n", + "[1.71209717e-02 1.01337492e+00 3.15168723e+01 2.46183563e+01]\n", + "[1.90445556e-02 1.01487745e+00 3.15164726e+01 2.46174459e+01]\n", + "[1.90445555e-02 1.01487745e+00 3.15164726e+01 2.46174459e+01]\n", + "[ 0.05366885 1.0419224 31.50927835 24.60106012]\n", + "[ 0.0709721 1.05542463 31.50568624 24.59287392]\n", + "[ 0.15747859 1.12291339 31.48773128 24.55195027]\n", + "[ 0.17285245 1.13489974 31.48454216 24.5446788 ]\n", + "[ 0.19206745 1.14987752 31.48055707 24.53559117]\n", + "[ 0.19206732 1.14987734 31.48055713 24.53559123]\n", + "[ 0.53791565 1.41942764 31.40883776 24.37203024]\n", + "[ 0.70995341 1.55218127 31.37347859 24.2909147 ]\n", + "[ 1.56925509 2.21383322 31.19718241 23.88600804]\n", + "[ 1.72160326 2.33041586 31.16608253 23.81435804]\n", + "[ 1.91169421 2.47547849 31.12738849 23.72501659]\n", + "[ 1.91156096 2.47530169 31.1274512 23.72508075]\n", + "[ 5.33125177 5.08176118 30.43206246 22.11842419]\n", + "[ 6.95515162 6.18641854 30.13149492 21.37702524]\n", + "[15.07119839 11.61002252 28.63028279 17.67933029]\n", + "[16.56451419 12.58958312 28.34248576 17.0069016 ]\n", + "[18.28319169 13.59898255 28.05123402 16.23799778]\n", + "[18.14309592 13.4171996 28.11540338 16.3029334 ]\n", + "[28.30600038 19.3102381 26.39929907 11.76542077]\n", + "[32.68959032 20.41155545 25.85976308 9.89767991]\n", + "[5.58789708e+01 2.64449042e+01 2.25674508e+01 3.93089053e-02]\n", + "[62.1477577 29.53709169 21.20624795 -2.38113743]\n", + "[66.63825 29.0515663 20.71513662 -4.27342807]\n", + "[62.87225441 24.56124313 22.03028299 -3.06685448]\n", + "[74.92437967 22.8834565 20.63747324 -8.23425441]\n", + "[ 80.093231 18.86426268 20.04166222 -10.45103178]\n", + "[105.96337681 -1.19679323 16.66026809 -21.33494057]\n", + "[111.45446809 -2.86736715 15.66156393 -23.59363081]\n", + "[116.34576218 -10.22165193 14.91544013 -25.49777534]\n", + "[114.19361642 -15.36786752 15.54261775 -24.5925976 ]\n", + "38.0 102.97173880917646 meter\n", + "[ 0. 1. 30.18838321 26.24236116]\n", + "[1.73143244e-05 1.00001505e+00 3.01883796e+01 2.62423524e+01]\n", + "[3.46286487e-04 1.00030102e+00 3.01883112e+01 2.62421862e+01]\n", + "[5.19428802e-04 1.00045153e+00 3.01882753e+01 2.62420987e+01]\n", + "[1.38513934e-03 1.00120407e+00 3.01880953e+01 2.62416613e+01]\n", + "[1.53904290e-03 1.00133786e+00 3.01880634e+01 2.62415835e+01]\n", + "[1.73142212e-03 1.00150509e+00 3.01880234e+01 2.62414863e+01]\n", + "[1.73142212e-03 1.00150509e+00 3.01880234e+01 2.62414863e+01]\n", + "[5.19424571e-03 1.00451521e+00 3.01873037e+01 2.62397366e+01]\n", + "[6.92556464e-03 1.00602004e+00 3.01869440e+01 2.62388618e+01]\n", + "[1.55820562e-02 1.01354397e+00 3.01851452e+01 2.62344880e+01]\n", + "[1.71209341e-02 1.01488142e+00 3.01848254e+01 2.62337105e+01]\n", + "[1.90445085e-02 1.01655319e+00 3.01844257e+01 2.62327386e+01]\n", + "[1.90445083e-02 1.01655319e+00 3.01844257e+01 2.62327386e+01]\n", + "[ 0.05366862 1.04664438 30.1772316 26.21524487]\n", + "[ 0.07097139 1.06166739 30.17363989 26.20650567]\n", + "[ 0.15747504 1.13675756 30.15568722 26.16281812]\n", + "[ 0.17284817 1.15009395 30.15249869 26.15505584]\n", + "[ 0.19206216 1.16675866 30.14851441 26.14535495]\n", + "[ 0.19206201 1.16675845 30.14851448 26.14535502]\n", + "[ 0.53789117 1.46666796 30.07681052 25.97075766]\n", + "[ 0.70988043 1.61436959 30.04149013 25.88421949]\n", + "[ 1.56890701 2.35052933 29.86541613 25.45229184]\n", + "[ 1.72119447 2.48024868 29.83436817 25.37588228]\n", + "[ 1.91118621 2.64164255 29.79575336 25.28062743]\n", + "[ 1.91103834 2.64143127 29.79582332 25.28070551]\n", + "[ 5.32887325 5.54134368 29.1019228 23.56781185]\n", + "[ 6.94824486 6.77025594 28.80490857 22.7819594 ]\n", + "[15.04744023 12.81317337 27.31925353 18.85966431]\n", + "[16.54673533 13.91526174 27.03044205 18.1416059 ]\n", + "[18.25810644 15.03998352 26.74513189 17.32993344]\n", + "[18.10232774 14.82239583 26.8166969 17.40882745]\n", + "[27.87594594 21.16722023 25.19315334 12.78314784]\n", + "[32.09707344 22.4430219 24.69167347 10.88669843]\n", + "[54.47353661 29.4126002 21.60625225 0.84452324]\n", + "[60.57051801 32.79723966 20.3054965 -1.64880352]\n", + "[64.91015784 32.46644887 19.85530915 -3.57506403]\n", + "[61.21302556 27.74366429 21.12892875 -2.30526565]\n", + "[73.00549451 26.45705038 19.82668601 -7.63275677]\n", + "[78.08407091 22.46869415 19.26645131 -9.92733658]\n", + "[103.47023299 2.47310059 16.03611229 -21.1745212 ]\n", + "[108.84275544 0.79745634 15.04677488 -23.50796217]\n", + "[113.66417052 -6.67426773 14.31875187 -25.4708265 ]\n", + "[111.57085311 -11.9173996 14.96353973 -24.53167523]\n", + "41.0 103.46740813177843 meter\n", + "[ 0. 1. 28.77359201 27.78633482]\n", + "[1.73143256e-05 1.00001672e+00 2.87735884e+01 2.77863254e+01]\n", + "[3.46286513e-04 1.00033440e+00 2.87735200e+01 2.77861474e+01]\n", + "[5.19428795e-04 1.00050160e+00 2.87734841e+01 2.77860537e+01]\n", + "[1.38513912e-03 1.00133760e+00 2.87733041e+01 2.77855851e+01]\n", + "[1.53904261e-03 1.00148622e+00 2.87732722e+01 2.77855018e+01]\n", + "[1.73142174e-03 1.00167200e+00 2.87732322e+01 2.77853976e+01]\n", + "[1.73142174e-03 1.00167200e+00 2.87732322e+01 2.77853976e+01]\n", + "[5.19424356e-03 1.00501593e+00 2.87725125e+01 2.77835233e+01]\n", + "[6.92555704e-03 1.00668765e+00 2.87721528e+01 2.77825862e+01]\n", + "[1.55820163e-02 1.01504594e+00 2.87703540e+01 2.77779008e+01]\n", + "[1.71208858e-02 1.01653171e+00 2.87700342e+01 2.77770679e+01]\n", + "[1.90444485e-02 1.01838886e+00 2.87696346e+01 2.77760268e+01]\n", + "[1.90444484e-02 1.01838886e+00 2.87696346e+01 2.77760268e+01]\n", + "[ 0.05366834 1.05181696 28.76244063 27.75728715]\n", + "[ 0.07097054 1.06850563 28.75884936 27.74792614]\n", + "[ 0.15747086 1.15192101 28.74089928 27.70113079]\n", + "[ 0.17284315 1.16673584 28.73771141 27.69281667]\n", + "[ 0.19205596 1.18524787 28.73372805 27.68242628]\n", + "[ 0.1920558 1.18524762 28.73372813 27.68242638]\n", + "[ 0.53786255 1.51840209 28.66204162 27.49542096]\n", + "[ 0.70979535 1.68244742 28.62676507 27.40279375]\n", + "[ 1.56850216 2.50004814 28.45094173 26.94053064]\n", + "[ 1.72071952 2.64411645 28.41995197 26.8587804 ]\n", + "[ 1.9105959 2.82333623 28.38142657 26.75689402]\n", + "[ 1.9104304 2.82308085 28.38150526 26.75698995]\n", + "[ 5.32610839 6.04325049 27.68928334 24.92497228]\n", + "[ 6.94022585 7.4052942 27.3962626 24.08992412]\n", + "[15.02026641 14.11312951 25.92773421 19.91804223]\n", + "[16.52709205 15.35031044 25.63731188 19.14795829]\n", + "[18.23008946 16.59598534 25.35858987 18.28931511]\n", + "[18.05532983 16.33253557 25.43904833 18.38605773]\n", + "[27.41496269 23.0972049 23.91267974 13.67722186]\n", + "[31.46299327 24.53048487 23.44999845 11.75360248]\n", + "[52.96671261 32.34906508 20.5789481 1.53730508]\n", + "[58.87111194 36.0086016 19.34488981 -1.0237953 ]\n", + "[63.04800679 35.81157023 18.93610021 -2.98290403]\n", + "[59.43646624 30.85860357 20.16003142 -1.65571793]\n", + "[70.91481299 29.91590144 18.95368951 -7.13638579]\n", + "[75.88128608 25.93400863 18.43016572 -9.50718375]\n", + "[100.66128292 5.86437945 15.35908813 -21.10267006]\n", + "[105.87471335 4.13331347 14.38250271 -23.50480366]\n", + "[110.60538581 -3.48326727 13.67393744 -25.5212313 ]\n", + "[108.60216565 -8.7839873 14.33333244 -24.55255356]\n", + "44.0 103.060922479178 meter\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 27.2799344 29.25414806]\n", + "[1.73143232e-05 1.00001857e+00 2.72799308e+01 2.92541380e+01]\n", + "[3.46286464e-04 1.00037135e+00 2.72798624e+01 2.92539465e+01]\n", + "[5.19428668e-04 1.00055702e+00 2.72798265e+01 2.92538457e+01]\n", + "[1.38513855e-03 1.00148537e+00 2.72796465e+01 2.92533418e+01]\n", + "[1.53904193e-03 1.00165040e+00 2.72796146e+01 2.92532522e+01]\n", + "[1.73142090e-03 1.00185670e+00 2.72795746e+01 2.92531402e+01]\n", + "[1.73142090e-03 1.00185670e+00 2.72795746e+01 2.92531402e+01]\n", + "[5.19423987e-03 1.00557004e+00 2.72788549e+01 2.92511245e+01]\n", + "[6.92554658e-03 1.00742642e+00 2.72784952e+01 2.92501167e+01]\n", + "[1.55819661e-02 1.01670801e+00 2.72766964e+01 2.92450781e+01]\n", + "[1.71208255e-02 1.01835791e+00 2.72763767e+01 2.92441824e+01]\n", + "[1.90443742e-02 1.02042020e+00 2.72759770e+01 2.92430628e+01]\n", + "[1.90443740e-02 1.02042020e+00 2.72759770e+01 2.92430628e+01]\n", + "[ 0.053668 1.05754081 27.26878327 29.22291033]\n", + "[ 0.07096954 1.07607233 27.2651925 29.21284433]\n", + "[ 0.15746595 1.16869821 27.24724538 29.16252556]\n", + "[ 0.17283725 1.18514852 27.24405827 29.15358585]\n", + "[ 0.19204867 1.20570402 27.24007596 29.14241386]\n", + "[ 0.19204849 1.20570371 27.24007605 29.14241398]\n", + "[ 0.537829 1.57563214 27.16840943 28.94134305]\n", + "[ 0.70969581 1.75772496 27.13318281 28.84182304]\n", + "[ 1.56802965 2.66522775 26.95764438 28.34522811]\n", + "[ 1.72016591 2.8251237 26.92672024 28.25743684]\n", + "[ 1.90990766 3.02399032 26.88829649 28.1480545 ]\n", + "[ 1.90972062 3.02367763 26.88838584 28.1481737 ]\n", + "[ 5.32288281 6.59675497 26.19807124 26.18152219]\n", + "[ 6.93088323 8.10244512 25.9095696 25.29169271]\n", + "[14.98920486 15.52983302 24.4599666 20.84041795]\n", + "[16.50566211 16.91816351 24.16711621 20.01025534]\n", + "[18.1990628 18.29115124 23.89573641 19.09972513]\n", + "[18.00106289 17.96800576 23.9870106 19.21964294]\n", + "[26.92338386 25.11703429 22.56212071 14.43269294]\n", + "[30.78828452 26.68840013 22.13884321 12.48318379]\n", + "[51.3624561 35.25532436 19.48880454 2.1016052 ]\n", + "[57.05416739 39.1684653 18.32747565 -0.52154328]\n", + "[61.05696147 39.08050299 17.96031614 -2.51290961]\n", + "[57.54744938 33.90108319 19.1264539 -1.13546682]\n", + "[68.66225898 33.24123806 18.01998159 -6.76477856]\n", + "[73.49629354 29.23108184 17.5333836 -9.21105248]\n", + "[ 97.5511647 8.89692971 14.62575564 -21.14063381]\n", + "[102.56119358 7.05063992 13.66428505 -23.60347997]\n", + "[107.18080291 -0.7518645 12.97596686 -25.66685318]\n", + "[105.30437076 -6.07084006 13.64771504 -24.6755453 ]\n", + "47.0 101.7684506860653 meter\n", + "[ 0. 1. 25.71150439 30.64177772]\n", + "[1.73143169e-05 1.00002063e+00 2.57115008e+01 3.06417668e+01]\n", + "[3.46286338e-04 1.00041269e+00 2.57114324e+01 3.06415600e+01]\n", + "[5.19428417e-04 1.00061903e+00 2.57113964e+01 3.06414511e+01]\n", + "[1.38513760e-03 1.00165073e+00 2.57112165e+01 3.06409067e+01]\n", + "[1.53904082e-03 1.00183414e+00 2.57111845e+01 3.06408099e+01]\n", + "[1.73141957e-03 1.00206340e+00 2.57111446e+01 3.06406890e+01]\n", + "[1.73141957e-03 1.00206340e+00 2.57111446e+01 3.06406890e+01]\n", + "[5.19423449e-03 1.00619014e+00 2.57104249e+01 3.06385115e+01]\n", + "[6.92553291e-03 1.00825317e+00 2.57100652e+01 3.06374228e+01]\n", + "[1.55819040e-02 1.01856799e+00 2.57082664e+01 3.06319798e+01]\n", + "[1.71207512e-02 1.02040154e+00 2.57079467e+01 3.06310122e+01]\n", + "[1.90442830e-02 1.02269340e+00 2.57075471e+01 3.06298028e+01]\n", + "[1.90442828e-02 1.02269340e+00 2.57075471e+01 3.06298028e+01]\n", + "[ 0.05366759 1.06394607 25.70035355 30.60803315]\n", + "[ 0.07096834 1.08453943 25.69676336 30.5971603 ]\n", + "[ 0.15746015 1.18746982 25.67881965 30.54280925]\n", + "[ 0.17283029 1.20574966 25.6756334 30.53315369]\n", + "[ 0.19204007 1.22859095 25.6716523 30.52108733]\n", + "[ 0.19203986 1.22859056 25.6716524 30.52108748]\n", + "[ 0.53778947 1.63965307 25.60000866 30.30392222]\n", + "[ 0.70957875 1.84189391 25.56483941 30.19652768]\n", + "[ 1.56747528 2.84972657 25.38962754 29.6607211 ]\n", + "[ 1.7195174 3.02727147 25.35877796 29.56603412]\n", + "[ 1.90910117 3.24802453 25.32047078 29.44810235]\n", + "[ 1.9088875 3.24763597 25.32057328 29.44825243]\n", + "[ 5.3190997 7.21377009 24.63244431 27.3280684 ]\n", + "[ 6.9199428 8.87559395 24.34909704 26.37681908]\n", + "[14.95368799 17.08838246 22.92049127 21.61015954]\n", + "[16.48266017 18.64877933 22.62408135 20.70956433]\n", + "[18.16505287 20.15616633 22.36093119 19.74134121]\n", + "[17.93821227 19.7538811 22.46552866 19.8918759 ]\n", + "[26.40107938 27.24724147 21.14614178 15.03193339]\n", + "[30.07336649 28.93431384 20.76274906 13.05750477]\n", + "[49.66390594 38.1319779 18.33961202 2.51845479]\n", + "[55.12334095 42.27255276 17.25691041 -0.16027011]\n", + "[58.9411581 42.26433046 16.93137667 -2.18400201]\n", + "[55.55001297 36.86427825 18.03154379 -0.76500277]\n", + "[66.25378536 36.41016209 17.02785197 -6.53983512]\n", + "[70.93539063 32.32658161 16.57746883 -9.06125122]\n", + "[ 94.14175385 11.48610192 13.8341454 -21.30794433]\n", + "[ 98.89587296 9.45321147 12.88969055 -23.81912375]\n", + "[103.38368307 1.41063779 12.2221342 -25.92043806]\n", + "[101.68120479 -3.88242146 12.9041021 -24.9189026 ]\n", + "50.0 99.60572853320414 meter\n", + "[ 0. 1. 24.07260093 31.9454204 ]\n", + "[1.73143064e-05 1.00002298e+00 2.40725973e+01 3.19454086e+01]\n", + "[3.46286127e-04 1.00045954e+00 2.40725290e+01 3.19451839e+01]\n", + "[5.19428026e-04 1.00068930e+00 2.40724930e+01 3.19450657e+01]\n", + "[1.38513623e-03 1.00183812e+00 2.40723131e+01 3.19444745e+01]\n", + "[1.53903923e-03 1.00204235e+00 2.40722811e+01 3.19443694e+01]\n", + "[1.73141770e-03 1.00229764e+00 2.40722411e+01 3.19442380e+01]\n", + "[1.73141769e-03 1.00229764e+00 2.40722411e+01 3.19442380e+01]\n", + "[5.19422720e-03 1.00689285e+00 2.40715215e+01 3.19418733e+01]\n", + "[6.92551550e-03 1.00919006e+00 2.40711617e+01 3.19406911e+01]\n", + "[1.55818277e-02 1.02067573e+00 2.40693630e+01 3.19347802e+01]\n", + "[1.71206601e-02 1.02271740e+00 2.40690433e+01 3.19337294e+01]\n", + "[1.90441717e-02 1.02526940e+00 2.40686437e+01 3.19324160e+01]\n", + "[1.90441714e-02 1.02526940e+00 2.40686437e+01 3.19324160e+01]\n", + "[ 0.05366709 1.07120442 24.06145043 31.90877522]\n", + "[ 0.07096691 1.09413367 24.05786092 31.89696899]\n", + "[ 0.15745325 1.20873776 24.03992116 31.83795337]\n", + "[ 0.17282202 1.22908994 24.03673592 31.82746979]\n", + "[ 0.19202986 1.25452025 24.03275622 31.81436898]\n", + "[ 0.19202962 1.25451976 24.03275634 31.81436917]\n", + "[ 0.53774258 1.71217179 23.96113918 31.57858923]\n", + "[ 0.70944006 1.93718213 23.92603652 31.46210362]\n", + "[ 1.56682024 3.05835333 23.75120267 30.88104043]\n", + "[ 1.7187526 3.2558178 23.72043849 30.77839956]\n", + "[ 1.90814966 3.50124427 23.68226632 30.65061621]\n", + "[ 1.90790252 3.50075315 23.68238531 30.65080813]\n", + "[ 5.31463099 7.90989434 22.99678557 28.35373694]\n", + "[ 6.90704319 9.74272514 22.71937085 27.33309935]\n", + "[14.91303667 18.82091446 21.3141593 22.2069723 ]\n", + "[16.45854536 20.58128271 21.01260221 21.22230466]\n", + "[18.12829258 22.23080819 20.75873662 20.18945877]\n", + "[17.86509606 21.721369 20.87998923 20.3812477 ]\n", + "[25.84743987 29.51304573 19.66986627 15.45352556]\n", + "[29.31815797 31.2895526 19.32672534 13.45474357]\n", + "[47.873578 40.97812816 17.13568996 2.76461043]\n", + "[5.30815838e+01 4.53134250e+01 1.61374645e+01 3.76569150e-02]\n", + "[56.70398954 45.34956823 15.8533096 -2.01950889]\n", + "[53.44758404 39.73766281 16.87910978 -0.56955264]\n", + "[63.69116755 39.39201306 15.98025681 -6.48664042]\n", + "[68.19927706 35.17935987 15.56439269 -9.08246305]\n", + "[ 90.42005865 13.54078339 12.98394161 -21.62087831]\n", + "[ 94.85190624 11.23731211 12.0592191 -24.15989342]\n", + "[ 99.18536102 2.88856957 11.41313392 -26.28650455]\n", + "[ 97.72128429 -2.3247922 12.10169108 -25.29727603]\n", + "53.0 96.58867331645769 meter\n", + "[ 0. 1. 22.36771614 33.1615029 ]\n", + "[1.73142909e-05 1.00002567e+00 2.23677125e+01 3.31614900e+01]\n", + "[3.46285818e-04 1.00051339e+00 2.23676442e+01 3.31612445e+01]\n", + "[5.19427474e-04 1.00077008e+00 2.23676082e+01 3.31611153e+01]\n", + "[1.38513436e-03 1.00205353e+00 2.23674283e+01 3.31604693e+01]\n", + "[1.53903708e-03 1.00228169e+00 2.23673963e+01 3.31603544e+01]\n", + "[1.73141517e-03 1.00256690e+00 2.23673563e+01 3.31602108e+01]\n", + "[1.73141517e-03 1.00256690e+00 2.23673563e+01 3.31602108e+01]\n", + "[5.19421764e-03 1.00770060e+00 2.23666367e+01 3.31576268e+01]\n", + "[6.92549354e-03 1.01026700e+00 2.23662769e+01 3.31563349e+01]\n", + "[1.55817340e-02 1.02309849e+00 2.23644783e+01 3.31498758e+01]\n", + "[1.71205485e-02 1.02537939e+00 2.23641586e+01 3.31487276e+01]\n", + "[1.90440354e-02 1.02823039e+00 2.23637590e+01 3.31472924e+01]\n", + "[1.90440351e-02 1.02823039e+00 2.23637590e+01 3.31472924e+01]\n", + "[ 0.05366649 1.07954737 22.35656605 33.12145924]\n", + "[ 0.07096519 1.10516087 22.35297733 33.10855964]\n", + "[ 0.15744498 1.23317884 22.33504223 33.04408022]\n", + "[ 0.1728121 1.2559119 22.33185816 33.03262688]\n", + "[ 0.19201763 1.28431651 22.32788012 33.01831461]\n", + "[ 0.19201734 1.28431588 22.32788026 33.01831486]\n", + "[ 0.53768644 1.79548895 22.25629435 32.76073541]\n", + "[ 0.7092742 2.0465893 22.22126991 32.63362591]\n", + "[ 1.56603919 3.29756888 22.0468787 31.99969224]\n", + "[ 1.71784279 3.51782566 22.01621327 31.8877654 ]\n", + "[ 1.90701711 3.79144353 21.97819926 31.74849461]\n", + "[ 1.90672715 3.79081028 21.97833934 31.74874468]\n", + "[ 5.30930397 8.70599249 21.29570008 29.24545308]\n", + "[ 6.89169922 10.72759309 21.02518584 28.14575761]\n", + "[14.8664473 20.76937005 19.64615049 22.60525904]\n", + "[16.43421386 22.76804447 19.33718156 21.51803103]\n", + "[18.08940977 24.56788147 19.09386868 20.41218856]\n", + "[17.77953397 23.90975716 19.23629755 20.66084102]\n", + "[25.26131992 31.94560656 18.13893838 15.67059457]\n", + "[28.52205386 33.78000555 17.83631034 13.64745776]\n", + "[45.99353877 43.78941455 15.88192173 2.81048216]\n", + "[5.09313933e+01 4.82776868e+01 1.49740741e+01 4.36301685e-02]\n", + "[54.34836913 48.31462172 14.73078348 -2.04941632]\n", + "[51.24317788 42.50382874 15.67340256 -0.58137032]\n", + "[60.97048961 42.14301556 14.88072824 -6.63409673]\n", + "[65.28069743 37.73657375 14.49665034 -9.30144109]\n", + "[ 86.35205483 14.96994707 12.07759826 -22.08799673]\n", + "[ 90.37417849 12.30232726 11.17910905 -24.620892 ]\n", + "[ 94.52630461 3.57378945 10.55621681 -26.75493163]\n", + "[ 93.39136879 -1.49284441 11.24232116 -25.81716524]\n", + "56.0 92.7339915489422 meter\n", + "[ 0. 1. 20.601523 34.28669203]\n", + "[1.73142696e-05 1.00002882e+00 2.06015194e+01 3.42866778e+01]\n", + "[3.46285391e-04 1.00057632e+00 2.06014510e+01 3.42864075e+01]\n", + "[5.19426726e-04 1.00086447e+00 2.06014150e+01 3.42862653e+01]\n", + "[1.38513189e-03 1.00230522e+00 2.06012351e+01 3.42855540e+01]\n", + "[1.53903424e-03 1.00256136e+00 2.06012031e+01 3.42854276e+01]\n", + "[1.73141184e-03 1.00288152e+00 2.06011632e+01 3.42852696e+01]\n", + "[1.73141184e-03 1.00288152e+00 2.06011632e+01 3.42852696e+01]\n", + "[5.19420527e-03 1.00864444e+00 2.06004435e+01 3.42824247e+01]\n", + "[6.92546590e-03 1.01152536e+00 2.06000838e+01 3.42810024e+01]\n", + "[1.55816181e-02 1.02592936e+00 2.05982852e+01 3.42738914e+01]\n", + "[1.71204107e-02 1.02848976e+00 2.05979655e+01 3.42726274e+01]\n", + "[1.90438676e-02 1.03169013e+00 2.05975659e+01 3.42710474e+01]\n", + "[1.90438672e-02 1.03169013e+00 2.05975659e+01 3.42710474e+01]\n", + "[ 0.05366576 1.0892954 20.59037339 34.24260755]\n", + "[ 0.0709631 1.11804426 20.58678562 34.22840827]\n", + "[ 0.15743495 1.2617294 20.56885607 34.15743441]\n", + "[ 0.17280007 1.28724276 20.56567341 34.14482856]\n", + "[ 0.19200279 1.31912041 20.56169734 34.12907662]\n", + "[ 0.19200245 1.31911958 20.56169751 34.12907696]\n", + "[ 0.53761842 1.89278594 20.49014887 33.84559231]\n", + "[ 0.70907344 2.17425848 20.45521762 33.70588967]\n", + "[ 1.56509715 3.5762744 20.28135174 33.00930782]\n", + "[ 1.71674856 3.82302351 20.25080175 32.88638519]\n", + "[ 1.90565404 4.12935066 20.21297559 32.73353261]\n", + "[ 1.90530813 4.12851469 20.21314321 32.73386581]\n", + "[ 5.30288034 9.63066107 19.53401624 29.9868087 ]\n", + "[ 6.87324477 11.86227075 19.27162774 28.79617976]\n", + "[14.81299185 22.98968138 17.922 22.77153962]\n", + "[16.41135332 25.28124405 17.60232323 21.55583613]\n", + "[18.04978366 27.23949261 17.37110728 20.36673217]\n", + "[17.67865639 26.36902463 17.54099728 20.69585806]\n", + "[24.64094019 34.5835198 16.55962848 15.64821743]\n", + "[27.68387217 36.43684793 16.29767546 13.59987249]\n", + "[44.02562151 46.5542142 14.58382621 2.61680785]\n", + "[48.67513948 51.14081593 13.77246022 -0.18062685]\n", + "[51.87705833 51.12339403 13.56918437 -2.31407197]\n", + "[48.93963429 45.13267236 14.41907608 -0.84339725]\n", + "[58.07908918 44.59808949 13.73320975 -7.01495774]\n", + "[62.1597423 39.93001081 13.37724926 -9.74508081]\n", + "[ 81.87279554 15.7075234 11.12279637 -22.70142525]\n", + "[ 85.36972007 12.58692798 10.2669074 -25.17489552]\n", + "[ 89.3041922 3.41120267 9.67130457 -27.29178544]\n", + "[ 88.62421494 -1.430914 10.33235713 -26.46759239]\n", + "59.0 88.05990483905572 meter\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 18.77886251 35.31790371]\n", + "[1.73142406e-05 1.00003256e+00 1.87788589e+01 3.53178879e+01]\n", + "[3.46284813e-04 1.00065127e+00 1.87787905e+01 3.53175877e+01]\n", + "[5.19425726e-04 1.00097689e+00 1.87787546e+01 3.53174296e+01]\n", + "[1.38512864e-03 1.00260502e+00 1.87785747e+01 3.53166395e+01]\n", + "[1.53903051e-03 1.00289446e+00 1.87785427e+01 3.53164990e+01]\n", + "[1.73140748e-03 1.00325626e+00 1.87785027e+01 3.53163234e+01]\n", + "[1.73140748e-03 1.00325626e+00 1.87785027e+01 3.53163234e+01]\n", + "[5.19418925e-03 1.00976864e+00 1.87777831e+01 3.53131629e+01]\n", + "[6.92543085e-03 1.01302417e+00 1.87774233e+01 3.53115829e+01]\n", + "[1.55814733e-02 1.02930112e+00 1.87756248e+01 3.53036831e+01]\n", + "[1.71202388e-02 1.03219441e+00 1.87753052e+01 3.53022789e+01]\n", + "[1.90436583e-02 1.03581087e+00 1.87749056e+01 3.53005236e+01]\n", + "[1.90436579e-02 1.03581087e+00 1.87749056e+01 3.53005236e+01]\n", + "[ 0.05366484 1.10090552 18.7677135 35.26892976]\n", + "[ 0.07096051 1.13338731 18.76412688 35.25315832]\n", + "[ 0.15742261 1.29572424 18.74620407 35.17432899]\n", + "[ 0.17278528 1.32454686 18.74302311 35.16032935]\n", + "[ 0.19198454 1.36055788 18.73904943 35.1428365 ]\n", + "[ 0.19198412 1.36055676 18.73904964 35.14283695]\n", + "[ 0.53753478 2.00859551 18.66754621 34.82802752]\n", + "[ 0.70882676 2.32608412 18.63272788 34.67314293]\n", + "[ 1.56394448 3.90709691 18.45949561 33.90106466]\n", + "[ 1.71541442 4.18520852 18.42908225 33.76490031]\n", + "[ 1.90399068 4.53016915 18.39148287 33.59572401]\n", + "[ 1.9035697 4.52903378 18.39168738 33.59618023]\n", + "[ 5.2950222 10.72421572 17.71679487 30.55621746]\n", + "[ 6.85074095 13.19116169 17.46411516 29.25987801]\n", + "[14.75165646 25.55832836 16.14763443 22.66022382]\n", + "[16.39311964 28.22396302 15.81233471 21.27824362]\n", + "[18.01224095 30.34756953 15.59512536 19.99308146]\n", + "[17.55862131 29.16325424 15.80146172 20.43967746]\n", + "[23.98374832 37.47435393 14.93900642 15.33922826]\n", + "[26.8017877 39.29673905 14.71779824 13.26345777]\n", + "[41.97179815 49.24595942 13.24767725 2.12903001]\n", + "[46.31562478 53.85709807 12.53936482 -0.68901003]\n", + "[49.29319737 53.71311499 12.37474372 -2.87064294]\n", + "[46.53998514 47.57016696 13.12106393 -1.41539324]\n", + "[54.99269658 46.65835747 12.54147857 -7.66612346]\n", + "[ 58.79900623 41.67232685 12.20956887 -10.4375171 ]\n", + "[ 76.88148692 15.76259775 10.13537862 -23.42691613]\n", + "[ 79.71247016 12.14461003 9.35774292 -25.767943 ]\n", + "[ 83.3758127 2.49303308 8.79771388 -27.83654432]\n", + "[ 83.30769569 -2.06006558 9.38487693 -27.20761997]\n", + "62.0 82.58716276454999 meter\n", + "[ 0. 1. 16.90473047 36.25231148]\n", + "[1.73142016e-05 1.00003713e+00 1.69047269e+01 3.62522937e+01]\n", + "[3.46284032e-04 1.00074261e+00 1.69046585e+01 3.62519564e+01]\n", + "[5.19424389e-04 1.00111390e+00 1.69046225e+01 3.62517789e+01]\n", + "[1.38512433e-03 1.00297038e+00 1.69044426e+01 3.62508912e+01]\n", + "[1.53902558e-03 1.00330041e+00 1.69044106e+01 3.62507334e+01]\n", + "[1.73140173e-03 1.00371295e+00 1.69043706e+01 3.62505361e+01]\n", + "[1.73140173e-03 1.00371295e+00 1.69043706e+01 3.62505361e+01]\n", + "[5.19416834e-03 1.01113867e+00 1.69036510e+01 3.62469854e+01]\n", + "[6.92538581e-03 1.01485072e+00 1.69032913e+01 3.62452104e+01]\n", + "[1.55812893e-02 1.03341002e+00 1.69014929e+01 3.62363357e+01]\n", + "[1.71200205e-02 1.03670898e+00 1.69011733e+01 3.62347582e+01]\n", + "[1.90433931e-02 1.04083247e+00 1.69007737e+01 3.62327864e+01]\n", + "[1.90433926e-02 1.04083247e+00 1.69007737e+01 3.62327864e+01]\n", + "[ 0.05366369 1.11505332 16.8935822 36.19729405]\n", + "[ 0.07095727 1.15208196 16.889997 36.17958014]\n", + "[ 0.15740712 1.33713543 16.87208253 36.09104575]\n", + "[ 0.17276673 1.36998743 16.86890369 36.07532454]\n", + "[ 0.19196166 1.41103074 16.86493297 36.05568155]\n", + "[ 0.19196114 1.41102916 16.86493322 36.05568219]\n", + "[ 0.53742995 2.14960982 16.79348579 35.70218657]\n", + "[ 0.70851784 2.51075384 16.75880712 35.52862131]\n", + "[ 1.56250845 4.30858149 16.58635411 34.66369072]\n", + "[ 1.71375977 4.62463912 16.55610483 34.5112512 ]\n", + "[ 1.9019254 5.01620127 16.51878466 34.32206388]\n", + "[ 1.9014005 5.01460461 16.51904023 34.32271001]\n", + "[ 5.28523432 12.04542147 15.84935314 30.92378087]\n", + "[ 6.82282182 14.77754664 15.60847749 29.50308293]\n", + "[14.68148318 28.58303637 14.32941538 22.20634053]\n", + "[16.38548854 31.75011257 13.97094376 20.60026216]\n", + "[17.9824747 34.04262416 13.77015011 19.20277361]\n", + "[17.41418644 32.37475254 14.02620787 19.82728214]\n", + "[23.28625305 40.6754367 13.28523221 14.6770814 ]\n", + "[25.87330103 42.40013299 13.10475401 12.56933024]\n", + "[39.83495648 51.80677376 11.88068005 1.26718632]\n", + "[43.8572224 56.33884168 11.28301839 -1.56213803]\n", + "[46.60131977 55.96973161 11.15468294 -3.80518663]\n", + "[44.04812117 49.71535064 11.78417129 -2.38473489]\n", + "[51.68251172 48.17039707 11.30726943 -8.63716802]\n", + "[ 55.15212533 42.84094257 10.99609092 -11.40658219]\n", + "[ 71.27636198 15.23978174 9.13624868 -24.21597524]\n", + "[ 73.31054614 11.20139146 8.49755815 -26.35198527]\n", + "[ 76.62625627 1.13194547 7.98640576 -28.33885077]\n", + "[ 77.31019395 -3.15905151 8.41696208 -27.97144919]\n", + "65.0 76.34016117578483 meter\n", + "[ 0. 1. 14.98426374 37.08735418]\n", + "[1.73141482e-05 1.00004285e+00 1.49842601e+01 3.70873340e+01]\n", + "[3.46282964e-04 1.00085708e+00 1.49841918e+01 3.70869496e+01]\n", + "[5.19422575e-04 1.00128561e+00 1.49841558e+01 3.70867473e+01]\n", + "[1.38511855e-03 1.00342825e+00 1.49839759e+01 3.70857358e+01]\n", + "[1.53901897e-03 1.00380915e+00 1.49839439e+01 3.70855560e+01]\n", + "[1.73139403e-03 1.00428529e+00 1.49839039e+01 3.70853312e+01]\n", + "[1.73139403e-03 1.00428529e+00 1.49839039e+01 3.70853312e+01]\n", + "[5.19414052e-03 1.01285562e+00 1.49831843e+01 3.70812854e+01]\n", + "[6.92532667e-03 1.01713974e+00 1.49828246e+01 3.70792629e+01]\n", + "[1.55810501e-02 1.03855915e+00 1.49810263e+01 3.70691510e+01]\n", + "[1.71197370e-02 1.04236644e+00 1.49807067e+01 3.70673535e+01]\n", + "[1.90430489e-02 1.04712529e+00 1.49803072e+01 3.70651069e+01]\n", + "[1.90430482e-02 1.04712528e+00 1.49803072e+01 3.70651069e+01]\n", + "[ 0.0536622 1.13278191 14.9731164 37.02466743]\n", + "[ 0.07095308 1.17550509 14.96953302 37.00448966]\n", + "[ 0.15738721 1.38900588 14.95162916 36.90364641]\n", + "[ 0.1727429 1.42690216 14.94845299 36.88574234]\n", + "[ 0.19193227 1.47424436 14.94448603 36.86337345]\n", + "[ 0.1919316 1.47424203 14.94448635 36.86337439]\n", + "[ 0.53729532 2.32614632 14.87311009 36.46083567]\n", + "[ 0.7081215 2.74163306 14.83860863 36.26369811]\n", + "[ 1.56067809 4.80913607 14.66713737 35.28166185]\n", + "[ 1.71166305 5.17233995 14.63708841 35.10870678]\n", + "[ 1.89930451 5.62156133 14.60012052 34.89438475]\n", + "[ 1.89862994 5.61921549 14.60044955 34.89533981]\n", + "[ 5.27276099 13.68345002 13.93731707 31.04568318]\n", + "[ 6.78742203 16.71471443 13.71110041 29.47674928]\n", + "[14.60198538 32.22113591 12.47417703 21.31225239]\n", + "[16.40010975 36.10303874 12.08051603 19.38843363]\n", + "[17.97209677 38.55991666 11.8992664 17.85749054]\n", + "[17.23805488 36.10778759 12.22543539 18.76369068]\n", + "[22.54391083 44.25125542 11.608063 13.56292925]\n", + "[24.89540577 45.78370944 11.46822476 11.41431354]\n", + "[37.62071486 54.11018658 10.49115946 -0.09371483]\n", + "[41.30846873 58.41015576 10.01405046 -2.93017532]\n", + "[43.8095134 57.6743899 9.91703385 -5.25720377]\n", + "[41.4700671 51.36970533 10.41171701 -3.88642738]\n", + "[ 48.14788931 48.87704528 10.02612964 -10.02797928]\n", + "[ 51.20858076 43.19929287 9.73412223 -12.72757852]\n", + "[ 65.07164687 14.11897217 8.13035252 -25.0885201 ]\n", + "[ 66.27062904 9.94212828 7.69981852 -26.99942841]\n", + "[ 69.14989651 -0.39564011 7.2524863 -28.87543359]\n", + "[ 70.59684924 -4.69592026 7.43263114 -28.74029105]\n", + "68.0 69.34714056465755 meter\n", + "[ 0. 1. 13.02272618 37.82074302]\n", + "[1.73140732e-05 1.00005028e+00 1.30227226e+01 3.78207195e+01]\n", + "[3.46281465e-04 1.00100567e+00 1.30226542e+01 3.78202734e+01]\n", + "[5.19420044e-04 1.00150850e+00 1.30226182e+01 3.78200386e+01]\n", + "[1.38511055e-03 1.00402260e+00 1.30224383e+01 3.78188647e+01]\n", + "[1.53900983e-03 1.00446954e+00 1.30224063e+01 3.78186560e+01]\n", + "[1.73138340e-03 1.00502822e+00 1.30223664e+01 3.78183951e+01]\n", + "[1.73138340e-03 1.00502822e+00 1.30223664e+01 3.78183951e+01]\n", + "[5.19410237e-03 1.01508434e+00 1.30216468e+01 3.78136994e+01]\n", + "[6.92524659e-03 1.02011099e+00 1.30212871e+01 3.78113522e+01]\n", + "[1.55807292e-02 1.04524271e+00 1.30194889e+01 3.77996164e+01]\n", + "[1.71193571e-02 1.04970975e+00 1.30191694e+01 3.77975304e+01]\n", + "[1.90425880e-02 1.05529321e+00 1.30187699e+01 3.77949230e+01]\n", + "[1.90425871e-02 1.05529321e+00 1.30187699e+01 3.77949230e+01]\n", + "[ 0.05366021 1.15579199 13.01158008 37.74799145]\n", + "[ 0.07094752 1.20590099 13.00799908 37.72458222]\n", + "[ 0.15736081 1.45629267 12.99010917 37.60759741]\n", + "[ 0.17271132 1.50072777 12.98693649 37.5868318 ]\n", + "[ 0.19189331 1.55623359 12.98297448 37.56089008]\n", + "[ 0.19189243 1.55622998 12.98297491 37.56089156]\n", + "[ 0.53711688 2.55499478 12.91169211 37.09407674]\n", + "[ 0.70759673 3.04041271 12.87742296 36.86623015]\n", + "[ 1.55827535 5.454615 12.70722678 35.7317206 ]\n", + "[ 1.70893221 5.87837816 12.67742702 35.5320587 ]\n", + "[ 1.89588419 6.40121859 12.64091755 35.28518441]\n", + "[ 1.89498288 6.39757108 12.64135775 35.28667689]\n", + "[ 5.20992808 15.65080183 11.99578166 30.91478119]\n", + "[ 6.67694998 18.98766895 11.78955349 29.1848136 ]\n", + "[14.34383444 36.36467144 10.61360274 20.01903459]\n", + "[16.24583939 41.22640015 10.17790117 17.66982467]\n", + "[17.7716416 43.81783054 10.02066489 15.99401329]\n", + "[16.82835707 40.17079639 10.43197636 17.31510134]\n", + "[21.54972199 48.0073663 9.93609531 12.05669153]\n", + "[23.65792211 49.24828413 9.8353593 9.85513211]\n", + "[35.10278994 55.91884396 9.09693944 -1.91813735]\n", + "[38.44100096 59.81610302 8.74918777 -4.77558097]\n", + "[40.68266266 58.5661222 8.67295079 -7.21369715]\n", + "[38.5681647 52.28103842 9.01522534 -5.88008405]\n", + "[ 44.22334516 48.59250761 8.69897283 -11.82127522]\n", + "[ 46.82775482 42.55552153 8.42849887 -14.3877699 ]\n", + "[ 58.34893868 12.21848973 7.0933825 -26.11617257]\n", + "[ 58.88073569 8.31049133 6.88491731 -27.88822502]\n", + "[ 61.27410058 -2.15008367 6.50895467 -29.64118993]\n", + "[ 63.21762766 -6.97691866 6.42306887 -29.5576848 ]\n", + "71.0 61.63878192638946 meter\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 11.02549423 38.45046784]\n", + "[1.73139632e-05 1.00006038e+00 1.10254906e+01 3.84504399e+01]\n", + "[3.46279264e-04 1.00120762e+00 1.10254223e+01 3.84499091e+01]\n", + "[5.19416353e-04 1.00181141e+00 1.10253863e+01 3.84496297e+01]\n", + "[1.38509898e-03 1.00483034e+00 1.10252064e+01 3.84482328e+01]\n", + "[1.53899663e-03 1.00536702e+00 1.10251744e+01 3.84479845e+01]\n", + "[1.73136807e-03 1.00603788e+00 1.10251344e+01 3.84476741e+01]\n", + "[1.73136807e-03 1.00603788e+00 1.10251344e+01 3.84476741e+01]\n", + "[5.19404770e-03 1.01811319e+00 1.10244148e+01 3.84420868e+01]\n", + "[6.92513327e-03 1.02414888e+00 1.10240552e+01 3.84392940e+01]\n", + "[1.55802795e-02 1.05432511e+00 1.10222573e+01 3.84253306e+01]\n", + "[1.71188252e-02 1.05968863e+00 1.10219377e+01 3.84228487e+01]\n", + "[1.90419434e-02 1.06639253e+00 1.10215383e+01 3.84197466e+01]\n", + "[1.90419422e-02 1.06639252e+00 1.10215383e+01 3.84197466e+01]\n", + "[ 0.05365744 1.18705797 11.01434984 38.36390934]\n", + "[ 0.0709398 1.2471934 11.01077212 38.33607089]\n", + "[ 0.15732426 1.54765583 10.99290133 38.1969652 ]\n", + "[ 0.17266765 1.60096112 10.98973344 38.17227989]\n", + "[ 0.19183944 1.66753833 10.98577821 38.14144527]\n", + "[ 0.1918382 1.66753229 10.98577882 38.14144776]\n", + "[ 0.53687012 2.86544615 10.91462427 37.58661677]\n", + "[ 0.70687197 3.44479923 10.88067302 37.31705817]\n", + "[ 1.55499567 6.32416941 10.71219988 35.9755685 ]\n", + "[ 1.70524575 6.82916762 10.68271633 35.73962794]\n", + "[ 1.89125397 7.44985324 10.64682801 35.44888073]\n", + "[ 1.8899853 7.4437322 10.64744807 35.45139515]\n", + "[ 4.76972268 17.03201168 10.09361339 30.95683099]\n", + "[ 6.0410758 20.45858805 9.9201927 29.19058388]\n", + "[12.70823716 38.38487964 8.9202917 19.79181224]\n", + "[14.3922208 43.53030078 8.53544969 17.33763284]\n", + "[15.71734203 46.16788777 8.40617703 15.62952404]\n", + "[14.85007837 42.1812761 8.78021704 17.05601326]\n", + "[18.89857279 50.04568016 8.37670412 11.75346018]\n", + "[20.71350601 51.22729231 8.30305378 9.52680974]\n", + "[30.60571302 57.55988904 7.74525033 -2.39235487]\n", + "[33.51867288 61.42133413 7.48885832 -5.26972739]\n", + "[35.452401 60.00838271 7.43794234 -7.77089381]\n", + "[33.59944848 53.61192241 7.68137544 -6.4465871 ]\n", + "[ 38.3663922 49.61126939 7.4330066 -12.3198734 ]\n", + "[ 40.57646343 43.51046262 7.20028902 -14.84800878]\n", + "[ 50.23674759 12.95724888 6.09338888 -26.37875884]\n", + "[ 50.49196136 9.07042346 5.96563468 -28.08451665]\n", + "[ 52.51381989 -1.3766083 5.6493687 -29.80083823]\n", + "[ 54.44621001 -6.21314172 5.50458861 -29.77236664]\n", + "74.0 53.256101549629825 meter\n", + "[ 0. 1. 8.99804217 38.97480259]\n", + "[1.73137902e-05 1.00007499e+00 8.99803858e+00 3.89747681e+01]\n", + "[3.46275804e-04 1.00149989e+00 8.99797021e+00 3.89741137e+01]\n", + "[5.19410590e-04 1.00224980e+00 8.99793423e+00 3.89737693e+01]\n", + "[1.38508106e-03 1.00599933e+00 8.99775433e+00 3.89720473e+01]\n", + "[1.53897622e-03 1.00666590e+00 8.99772235e+00 3.89717411e+01]\n", + "[1.73134440e-03 1.00749910e+00 8.99768237e+00 3.89713585e+01]\n", + "[1.73134440e-03 1.00749910e+00 8.99768237e+00 3.89713585e+01]\n", + "[5.19396398e-03 1.02249662e+00 8.99696281e+00 3.89644705e+01]\n", + "[6.92496224e-03 1.02999240e+00 8.99660323e+00 3.89610277e+01]\n", + "[1.55796088e-02 1.06746801e+00 8.99480558e+00 3.89438152e+01]\n", + "[1.71180328e-02 1.07412861e+00 8.99448611e+00 3.89407559e+01]\n", + "[1.90409842e-02 1.08245362e+00 8.99408683e+00 3.89369321e+01]\n", + "[1.90409823e-02 1.08245361e+00 8.99408683e+00 3.89369321e+01]\n", + "[ 0.05365334 1.2322964 8.98690027 38.86810647]\n", + "[ 0.07092841 1.30691982 8.98332734 38.83381558]\n", + "[ 0.15727056 1.67971419 8.96548445 38.66249186]\n", + "[ 0.17260358 1.74582383 8.96232349 38.6321014 ]\n", + "[ 0.1917604 1.82837668 8.95837816 38.59414761]\n", + "[ 0.19175852 1.82836541 8.95837909 38.59415227]\n", + "[ 0.53650795 3.31360196 8.88741143 37.91127417]\n", + "[ 0.7058102 4.02665578 8.85392178 37.5817297 ]\n", + "[ 1.55027191 7.56721319 8.68790579 35.94273422]\n", + "[ 1.70002409 8.18786606 8.65882989 35.65450108]\n", + "[ 1.88466751 8.94571015 8.62383096 35.30133641]\n", + "[ 1.88274514 8.93426394 8.62477036 35.30605061]\n", + "[ 4.30878875 18.86542907 8.16665556 30.67410683]\n", + "[ 5.37684064 22.36523813 8.02676013 28.86699302]\n", + "[11.00189227 40.7802796 7.2085519 19.20196735]\n", + "[12.45400342 46.24325667 6.87878988 16.62685827]\n", + "[13.570448 48.89316436 6.77753347 14.88058165]\n", + "[12.78977896 44.48332554 7.10864375 16.42728906]\n", + "[16.15322243 52.25587119 6.7958466 11.06759507]\n", + "[17.66844475 53.28922201 6.74724965 8.80341357]\n", + "[25.96633338 58.78244444 6.35889587 -3.32537559]\n", + "[28.43685295 62.48114729 6.19793212 -6.23963059]\n", + "[30.0484011 60.76894248 6.16191573 -8.82993547]\n", + "[28.46942213 54.28303579 6.2968948 -7.49903398]\n", + "[ 32.32492991 49.69147363 6.10073943 -13.26584472]\n", + "[ 34.11756746 43.42338042 5.90453123 -15.71882286]\n", + "[ 41.86246495 12.3544797 5.02059433 -26.93404927]\n", + "[ 41.90554835 8.71269433 4.97681609 -28.62038337]\n", + "[ 43.52631137 -1.75525914 4.72229115 -30.2791352 ]\n", + "[ 45.33508569 -7.0030961 4.51451837 -30.19739911]\n", + "77.0 44.246680677829886 meter\n", + "[ 0. 1. 6.94592711 39.39231012]\n", + "[1.73134864e-05 1.00009819e+00 6.94592351e+00 3.93922653e+01]\n", + "[3.46269728e-04 1.00196379e+00 6.94585514e+00 3.93914134e+01]\n", + "[5.19400556e-04 1.00294564e+00 6.94581916e+00 3.93909651e+01]\n", + "[1.38505021e-03 1.00785482e+00 6.94563927e+00 3.93887236e+01]\n", + "[1.53894114e-03 1.00872753e+00 6.94560729e+00 3.93883251e+01]\n", + "[1.73130380e-03 1.00981841e+00 6.94556732e+00 3.93878270e+01]\n", + "[1.73130380e-03 1.00981841e+00 6.94556732e+00 3.93878270e+01]\n", + "[5.19382172e-03 1.02945410e+00 6.94484780e+00 3.93788611e+01]\n", + "[6.92467714e-03 1.03926692e+00 6.94448830e+00 3.93743802e+01]\n", + "[1.55785082e-02 1.08832546e+00 6.94269112e+00 3.93519782e+01]\n", + "[1.71167348e-02 1.09704407e+00 6.94237177e+00 3.93479968e+01]\n", + "[1.90394153e-02 1.10794107e+00 6.94197265e+00 3.93430206e+01]\n", + "[1.90394121e-02 1.10794104e+00 6.94197265e+00 3.93430206e+01]\n", + "[ 0.05364667 1.30407464 6.93478921 39.25345395]\n", + "[ 0.07091001 1.40163912 6.93122393 39.2088772 ]\n", + "[ 0.1571843 1.88892168 6.91342553 38.98621265]\n", + "[ 0.17250088 1.97527598 6.91027552 38.9467396 ]\n", + "[ 0.19163367 2.08307144 6.90634597 38.89745852]\n", + "[ 0.1916305 2.08304667 6.90634753 38.89746877]\n", + "[ 0.5359271 4.02217096 6.8356777 38.01089535]\n", + "[ 0.70411197 4.94201077 6.80291947 37.58761888]\n", + "[ 1.54291614 9.50369706 6.6406888 35.48374202]\n", + "[ 1.69211723 10.30424193 6.61213219 35.1130818 ]\n", + "[ 1.87462194 11.26918854 6.57851266 34.6639244 ]\n", + "[ 1.87136196 11.24392677 6.58010294 34.67433542]\n", + "[ 3.82126303 21.51907355 6.22254761 29.88610884]\n", + "[ 4.67701372 25.06037418 6.11699741 28.03142772]\n", + "[ 9.20909551 43.83504543 5.48761076 18.05356901]\n", + "[10.41136386 49.65729634 5.21876319 15.33883105]\n", + "[11.30975359 52.25787568 5.14562281 13.54475111]\n", + "[10.63069038 47.30116038 5.42593208 15.22560324]\n", + "[13.2976551 54.78487858 5.20196014 9.78020478]\n", + "[14.50728945 55.5156382 5.17638563 7.45328565]\n", + "[21.17293009 59.28216323 4.94537706 -5.02062383]\n", + "[23.185795 62.58438036 4.88942446 -8.0342915 ]\n", + "[ 24.45651897 60.34349729 4.84872225 -10.7511024 ]\n", + "[23.16040989 53.81280186 4.85836558 -9.33825967]\n", + "[ 26.09981097 48.16298195 4.69760403 -14.95844141]\n", + "[ 27.46008984 41.51271879 4.53761554 -17.28676759]\n", + "[ 33.28365315 9.19281593 3.86213154 -28.04040004]\n", + "[ 33.20893772 6.11074058 3.88753301 -29.80069439]\n", + "[ 34.41141626 -4.51470233 3.69509353 -31.36905787]\n", + "[ 35.94542863 -10.84333124 3.44563063 -31.03897131]\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": 12, + "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": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 33.01363222 22.58539546]\n", + "[1.73143076e-05 1.00001185e+00 3.30136286e+01 2.25853879e+01]\n", + "[3.46286152e-04 1.00023690e+00 3.30135602e+01 2.25852434e+01]\n", + "[5.19428378e-04 1.00035535e+00 3.30135243e+01 2.25851674e+01]\n", + "[1.38513857e-03 1.00094760e+00 3.30133443e+01 2.25847873e+01]\n", + "[1.53904211e-03 1.00105288e+00 3.30133124e+01 2.25847198e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[5.19424509e-03 1.00355344e+00 3.30125527e+01 2.25831151e+01]\n", + "[6.92557206e-03 1.00473773e+00 3.30121930e+01 2.25823550e+01]\n", + "[1.55821126e-02 1.01065899e+00 3.30103941e+01 2.25785547e+01]\n", + "[1.71210039e-02 1.01171156e+00 3.30100743e+01 2.25778791e+01]\n", + "[1.90445968e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[1.90445967e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[ 0.05366906 1.03670869 33.00248022 22.56183461]\n", + "[ 0.0709728 1.04853149 32.9988877 22.55424032]\n", + "[ 0.15748217 1.10762567 32.98093031 22.51627519]\n", + "[ 0.17285676 1.11812098 32.97774057 22.50952913]\n", + "[ 0.1920728 1.13123555 32.97375461 22.50109801]\n", + "[ 0.19207268 1.1312354 32.97375467 22.50109806]\n", + "[ 0.53794055 1.36725362 32.90201893 22.34935198]\n", + "[ 0.71002798 1.48347208 32.86661851 22.2740486 ]\n", + "[ 1.56961172 2.06268096 32.69008565 21.8981101 ]\n", + "[ 1.72202249 2.16471736 32.6589301 21.83156523]\n", + "[ 1.91221516 2.29168457 32.62015169 21.74857008]\n", + "[ 1.91209642 2.29154006 32.62020716 21.74862124]\n", + "[ 5.33369084 4.57279354 31.92323259 20.25599242]\n", + "[ 6.96224272 5.53728508 31.61886526 19.56292129]\n", + "[15.09589085 10.26332212 30.10068529 16.10854453]\n", + "[16.58349965 11.10802329 29.81353989 15.48441707]\n", + "[18.30975974 11.98466487 29.51585107 14.76238238]\n", + "[18.1851959 11.83636751 29.57264449 14.81424697]\n", + "[28.78292297 17.14523822 27.75142565 10.38996524]\n", + "[33.34754788 18.01598978 27.16714173 8.55928402]\n", + "[57.43383528 22.81811382 23.63632294 -1.06307696]\n", + "[63.88109982 25.53785478 22.21090767 -3.38940228]\n", + "[68.53702635 24.84192589 21.6713683 -5.23857282]\n", + "[64.71098884 20.63407666 23.02550611 -4.11462717]\n", + "[76.99114128 18.43962983 21.5331281 -9.07455788]\n", + "[ 82.23579926 14.36647646 20.89730891 -11.19351941]\n", + "[108.51063942 -5.88306096 17.3514598 -21.61336308]\n", + "[114.09034604 -7.60437154 16.34797643 -23.77375649]\n", + "[119.03596007 -14.83177983 15.58297543 -25.60112824]\n", + "[116.85305402 -19.80074234 16.18332714 -24.74260806]\n", + "[ 0. 1. 22.58539546 33.01363222]\n", + "[1.73142932e-05 1.00002531e+00 2.25853919e+01 3.30136194e+01]\n", + "[3.46285863e-04 1.00050617e+00 2.25853235e+01 3.30133768e+01]\n", + "[5.19427553e-04 1.00075926e+00 2.25852875e+01 3.30132490e+01]\n", + "[1.38513463e-03 1.00202467e+00 2.25851076e+01 3.30126104e+01]\n", + "[1.53903738e-03 1.00224963e+00 2.25850756e+01 3.30124969e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[5.19421899e-03 1.00759237e+00 2.25843160e+01 3.30098005e+01]\n", + "[6.92549659e-03 1.01012271e+00 2.25839562e+01 3.30085235e+01]\n", + "[1.55817469e-02 1.02277389e+00 2.25821576e+01 3.30021383e+01]\n", + "[1.71205638e-02 1.02502274e+00 2.25818379e+01 3.30010033e+01]\n", + "[1.90440541e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[1.90440538e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[ 0.05366657 1.07842961 22.57424531 32.97404738]\n", + "[ 0.07096543 1.10368352 22.57065649 32.96129538]\n", + "[ 0.15744611 1.2299046 22.55272076 32.89755354]\n", + "[ 0.17281345 1.25231873 22.54953653 32.8862311 ]\n", + "[ 0.19201929 1.28032495 22.54555827 32.87208236]\n", + "[ 0.19201901 1.28032434 22.5455584 32.8720826 ]\n", + "[ 0.53769408 1.78432869 22.47396827 32.61744564]\n", + "[ 0.70929677 2.03193868 22.43893326 32.49176873]\n", + "[ 1.56614534 3.26555584 22.26448232 31.86496341]\n", + "[ 1.7179663 3.48276535 22.23380365 31.75428821]\n", + "[ 1.90717089 3.75261673 22.19576829 31.61656487]\n", + "[ 1.90688694 3.75200413 22.19590541 31.61680649]\n", + "[ 5.31002783 8.59958501 21.51286674 29.14129215]\n", + "[ 6.8937821 10.59637825 21.24142428 28.05213113]\n", + "[14.87265803 20.51093765 19.85893236 22.56717428]\n", + "[16.43723553 22.47708158 19.55105005 21.49407015]\n", + "[18.09437471 24.25757866 19.30633285 20.39791913]\n", + "[17.79105872 23.62106401 19.44579925 20.63833413]\n", + "[25.33680253 31.62955879 18.33408858 15.65565667]\n", + "[28.62436297 33.45864445 18.02635933 13.63560557]\n", + "[46.23462431 43.43839709 16.04200928 2.81694909]\n", + "[51.20743433 47.91013643 15.12247676 0.05461775]\n", + "[54.65075842 47.94972075 14.87409034 -2.03372382]\n", + "[51.525659 42.16302125 15.82766613 -0.5671572 ]\n", + "[61.32134549 41.81200967 15.02160031 -6.6034585 ]\n", + "[65.65795854 37.43367771 14.63371352 -9.2621242 ]\n", + "[ 86.88408137 14.82748143 12.19436678 -22.02088303]\n", + "[ 90.96340579 12.21083697 11.29196656 -24.55702921]\n", + "[ 95.14005285 3.53406768 10.66600076 -26.69133723]\n", + "[ 93.95763063 -1.55514893 11.35326653 -25.74420563]\n", + "[ 0. 1. 37.28129695 14.4949956 ]\n", + "[1.73141876e-05 1.00000673e+00 3.72812934e+01 1.44949897e+01]\n", + "[3.46283753e-04 1.00013464e+00 3.72812250e+01 1.44948766e+01]\n", + "[5.19424877e-04 1.00020195e+00 3.72811890e+01 1.44948171e+01]\n", + "[1.38512966e-03 1.00053853e+00 3.72810091e+01 1.44945196e+01]\n", + "[1.53903230e-03 1.00059837e+00 3.72809771e+01 1.44944667e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[5.19421451e-03 1.00201946e+00 3.72802175e+01 1.44932105e+01]\n", + "[6.92554136e-03 1.00269249e+00 3.72798577e+01 1.44926155e+01]\n", + "[1.55820921e-02 1.00605747e+00 3.72780588e+01 1.44896406e+01]\n", + "[1.71209908e-02 1.00665562e+00 3.72777390e+01 1.44891117e+01]\n", + "[1.90445955e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[1.90445954e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[ 0.05366929 1.02086073 37.27014446 14.47655165]\n", + "[ 0.07097413 1.02757703 37.26655084 14.47060559]\n", + "[ 0.15748999 1.06114475 37.24858691 14.44087908]\n", + "[ 0.17286628 1.06710517 37.24539549 14.43559636]\n", + "[ 0.19208471 1.07455255 37.2414072 14.42899382]\n", + "[ 0.19208462 1.07455247 37.24140724 14.42899385]\n", + "[ 0.53799786 1.2085748 37.16962719 14.31015667]\n", + "[ 0.71020442 1.27434418 37.13411434 14.25108105]\n", + "[ 1.57046609 1.60186795 36.9569339 13.95605729]\n", + "[ 1.72302821 1.65942933 36.92562412 13.90378773]\n", + "[ 1.91346588 1.73100197 36.88661488 13.83855659]\n", + "[ 1.91338118 1.73092509 36.88665316 13.83858065]\n", + "[ 5.3395626 3.01630839 36.1853356 12.66520725]\n", + "[ 6.97936945 3.53638891 35.87048843 12.11090227]\n", + "[15.15611188 6.05402799 34.30374001 9.35148481]\n", + "[16.63082391 6.48716654 34.01610456 8.86007548]\n", + "[18.37559866 6.92608215 33.70021577 8.27500626]\n", + "[18.28730319 6.84769637 33.73945957 8.29952276]\n", + "[30.06112794 9.74392315 31.61399799 4.35684552]\n", + "[35.11361932 9.64420678 30.88454857 2.69009923]\n", + "[61.51654854 9.31544017 26.63183025 -5.91835573]\n", + "[68.29462259 10.56371554 25.07106451 -7.85456636]\n", + "[73.37021018 8.96509443 24.37358572 -9.51870886]\n", + "[69.58062775 5.79642504 25.75125407 -8.73203557]\n", + "[ 81.42729034 1.77932053 24.07758858 -12.67292274]\n", + "[ 86.48442035 -2.26882776 23.36199067 -14.3546176 ]\n", + "[111.79914697 -22.41424776 19.57910929 -22.65091948]\n", + "[117.01769495 -24.67303193 18.66939742 -24.32752955]\n", + "[121.78339632 -31.06220743 17.89619078 -25.81595636]\n", + "[119.98737711 -34.52452508 18.31425054 -25.23075186]\n", + "[ 0. 1. 30.00190744 26.45535012]\n", + "[1.73143247e-05 1.00001527e+00 3.00019038e+01 2.64553413e+01]\n", + "[3.46286495e-04 1.00030535e+00 3.00018355e+01 2.64551735e+01]\n", + "[5.19428808e-04 1.00045803e+00 3.00017995e+01 2.64550853e+01]\n", + "[1.38513933e-03 1.00122139e+00 3.00016196e+01 2.64546438e+01]\n", + "[1.53904288e-03 1.00135710e+00 3.00015876e+01 2.64545654e+01]\n", + "[1.73142209e-03 1.00152673e+00 3.00015476e+01 2.64544673e+01]\n", + "[1.73142209e-03 1.00152673e+00 3.00015476e+01 2.64544673e+01]\n", + "[5.19424551e-03 1.00458015e+00 3.00008280e+01 2.64527016e+01]\n", + "[6.92556377e-03 1.00610662e+00 3.00004682e+01 2.64518188e+01]\n", + "[1.55820514e-02 1.01373876e+00 2.99986694e+01 2.64474050e+01]\n", + "[1.71209283e-02 1.01509545e+00 2.99983496e+01 2.64466204e+01]\n", + "[1.90445012e-02 1.01679126e+00 2.99979500e+01 2.64456397e+01]\n", + "[1.90445010e-02 1.01679126e+00 2.99979500e+01 2.64456397e+01]\n", + "[ 0.05366858 1.04731521 29.99075586 26.42798616]\n", + "[ 0.07097128 1.06255426 29.98716421 26.41916722]\n", + "[ 0.15747451 1.13872422 29.96921186 26.37508111]\n", + "[ 0.17284754 1.15225237 29.96602342 26.36724806]\n", + "[ 0.19206138 1.1691567 29.96203925 26.35745874]\n", + "[ 0.19206123 1.16915648 29.96203933 26.35745881]\n", + "[ 0.53788756 1.47337821 29.8903376 26.18127009]\n", + "[ 0.70986969 1.62320128 29.85502282 26.09395055]\n", + "[ 1.56885582 2.3699336 29.67898092 25.65812973]\n", + "[ 1.72113439 2.50151631 29.64794044 25.58103461]\n", + "[ 1.91111153 2.66522582 29.60933708 25.48492826]\n", + "[ 1.91096148 2.6650092 29.60940813 25.48500849]\n", + "[ 5.32852357 5.60652693 28.91572261 23.75681826]\n", + "[ 6.94723012 6.85288171 28.61922075 22.96461033]\n", + "[15.0439765 12.98282576 27.13578422 19.01013547]\n", + "[16.5441885 14.10237307 26.84679399 18.28545037]\n", + "[18.25449332 15.24309833 26.56233437 17.46768903]\n", + "[18.09636001 15.01996877 26.63500584 17.54874173]\n", + "[27.81543321 21.42347799 25.02433441 12.91152952]\n", + "[32.01377181 22.72160694 24.52805849 11.01132317]\n", + "[54.27569726 29.81130644 21.47119492 0.9450646 ]\n", + "[60.34784604 33.23420126 20.17909468 -1.55773359]\n", + "[64.66617113 32.92279067 19.73448054 -3.48848913]\n", + "[60.97963885 28.16873422 21.00185854 -2.21056675]\n", + "[72.73268775 26.93165804 19.71230056 -7.55910412]\n", + "[77.79734273 22.9458311 19.15698226 -9.86405629]\n", + "[103.10856611 2.94951704 15.94778593 -21.15914687]\n", + "[108.46199629 1.26951049 14.96000078 -23.50224875]\n", + "[113.2723445 -6.21988022 14.23454348 -25.47267859]\n", + "[111.18930271 -11.47304422 14.88146092 -24.52924712]\n", + "[ 0. 1. 30.07935134 26.36726424]\n", + "[1.73143246e-05 1.00001518e+00 3.00793477e+01 2.63672554e+01]\n", + "[3.46286492e-04 1.00030355e+00 3.00792794e+01 2.63670883e+01]\n", + "[5.19428806e-04 1.00045532e+00 3.00792434e+01 2.63670004e+01]\n", + "[1.38513934e-03 1.00121419e+00 3.00790635e+01 2.63665606e+01]\n", + "[1.53904289e-03 1.00134910e+00 3.00790315e+01 2.63664824e+01]\n", + "[1.73142210e-03 1.00151773e+00 3.00789915e+01 2.63663847e+01]\n", + "[1.73142210e-03 1.00151773e+00 3.00789915e+01 2.63663847e+01]\n", + "[5.19424560e-03 1.00455314e+00 3.00782719e+01 2.63646257e+01]\n", + "[6.92556414e-03 1.00607062e+00 3.00779121e+01 2.63637462e+01]\n", + "[1.55820534e-02 1.01365776e+00 3.00761133e+01 2.63593491e+01]\n", + "[1.71209307e-02 1.01500645e+00 3.00757935e+01 2.63585674e+01]\n", + "[1.90445042e-02 1.01669226e+00 3.00753939e+01 2.63575904e+01]\n", + "[1.90445041e-02 1.01669226e+00 3.00753939e+01 2.63575904e+01]\n", + "[ 0.0536686 1.04703626 30.06819974 26.34000337]\n", + "[ 0.07097133 1.06218548 30.06460807 26.33121762]\n", + "[ 0.15747473 1.13790643 30.04665559 26.28729742]\n", + "[ 0.1728478 1.15135485 30.0434671 26.27949382]\n", + "[ 0.19206171 1.16815954 30.03948289 26.26974131]\n", + "[ 0.19206156 1.16815933 30.03948296 26.26974138]\n", + "[ 0.53788907 1.47058794 29.96778031 26.09421507]\n", + "[ 0.70987417 1.61952892 29.9324632 26.00722076]\n", + "[ 1.56887716 2.36186527 29.75640793 25.57302037]\n", + "[ 1.72115943 2.49267323 29.72536434 25.4962106 ]\n", + "[ 1.91114266 2.65541998 29.68675621 25.40045865]\n", + "[ 1.91099352 2.65520559 29.68682681 25.40053798]\n", + "[ 5.32866932 5.5794253 28.99305178 23.67871429]\n", + "[ 6.94765304 6.81853339 28.69633665 22.88915018]\n", + "[15.04541922 12.9123183 27.21197744 18.94806399]\n", + "[16.54524785 14.02460383 26.92306261 18.2261388 ]\n", + "[18.25599684 15.15868591 26.63824915 17.41090961]\n", + "[18.09884649 14.93787504 26.71045882 17.49105919]\n", + "[27.84057336 21.31714102 25.09444402 12.85861409]\n", + "[32.04837736 22.60605725 24.59601037 10.95996095]\n", + "[54.35789033 29.64618272 21.52729831 0.90365931]\n", + "[60.44037371 33.05326678 20.23159811 -1.59522604]\n", + "[64.76755623 32.73387347 19.78467386 -3.52412162]\n", + "[61.07659516 27.9927685 21.05465594 -2.24955211]\n", + "[72.84609569 26.73527444 19.75983089 -7.58938426]\n", + "[77.91656646 22.74845534 19.20247326 -9.89004223]\n", + "[103.25910695 2.75275744 15.98449968 -21.16531667]\n", + "[108.6205369 1.07467082 14.99606415 -23.50442908]\n", + "[113.4355163 -6.40733699 14.26954096 -25.47173584]\n", + "[111.348148 -11.65643035 14.91558252 -24.53006807]\n", + "[ 0. 1. 30.12337951 26.31695284]\n", + "[1.73143245e-05 1.00001513e+00 3.01233759e+01 2.63169441e+01]\n", + "[3.46286490e-04 1.00030253e+00 3.01233075e+01 2.63167773e+01]\n", + "[5.19428804e-04 1.00045379e+00 3.01232716e+01 2.63166895e+01]\n", + "[1.38513934e-03 1.00121010e+00 3.01230916e+01 2.63162507e+01]\n", + "[1.53904290e-03 1.00134455e+00 3.01230597e+01 2.63161727e+01]\n", + "[1.73142211e-03 1.00151262e+00 3.01230197e+01 2.63160752e+01]\n", + "[1.73142211e-03 1.00151262e+00 3.01230197e+01 2.63160752e+01]\n", + "[5.19424564e-03 1.00453781e+00 3.01223000e+01 2.63143199e+01]\n", + "[6.92556434e-03 1.00605018e+00 3.01219403e+01 2.63134424e+01]\n", + "[1.55820545e-02 1.01361178e+00 3.01201415e+01 2.63090547e+01]\n", + "[1.71209321e-02 1.01495593e+00 3.01198217e+01 2.63082747e+01]\n", + "[1.90445059e-02 1.01663606e+00 3.01194220e+01 2.63072997e+01]\n", + "[1.90445058e-02 1.01663606e+00 3.01194220e+01 2.63072997e+01]\n", + "[ 0.05366861 1.04687789 30.11222792 26.28975043]\n", + "[ 0.07097135 1.06197612 30.10863622 26.28098351]\n", + "[ 0.15747485 1.13744216 30.09068366 26.23715738]\n", + "[ 0.17284795 1.15084531 30.08749516 26.22937049]\n", + "[ 0.19206189 1.16759343 30.08351093 26.21963885]\n", + "[ 0.19206174 1.16759322 30.083511 26.21963893]\n", + "[ 0.53788992 1.46900385 30.01180781 26.04448824]\n", + "[ 0.7098767 1.61744402 29.97648938 25.95767837]\n", + "[ 1.56888924 2.35728446 29.80042653 25.52439694]\n", + "[ 1.72117361 2.48765254 29.76938118 25.447749 ]\n", + "[ 1.91116028 2.64985262 29.73077035 25.35219804]\n", + "[ 1.91101166 2.6496395 29.73084068 25.35227686]\n", + "[ 5.32875184 5.56403725 29.03701491 23.63406386]\n", + "[ 6.94789252 6.79902727 28.74017884 22.84600003]\n", + "[15.04623675 12.87226589 27.25529591 18.91251005]\n", + "[16.54584907 13.98043001 26.96642321 18.19214894]\n", + "[18.25684973 15.11073339 26.68140897 17.37835714]\n", + "[18.10025498 14.89122984 26.75335755 17.45799748]\n", + "[27.85486023 21.25663178 25.1343034 12.82827672]\n", + "[32.06804478 22.54027257 24.63464084 10.93051105]\n", + "[54.40459965 29.55201669 21.55918539 0.87989847]\n", + "[60.49294482 32.95006351 20.2614419 -1.6167493 ]\n", + "[64.82515956 32.62609017 19.81320149 -3.54458316]\n", + "[61.13169743 27.89237097 21.08465651 -2.27193312]\n", + "[72.91050036 26.62317066 19.78683641 -7.60679396]\n", + "[77.98425595 22.63575048 19.22831782 -9.90500212]\n", + "[103.34447778 2.64020158 16.005352 -21.1689607 ]\n", + "[108.71041103 0.9631379 15.01655031 -23.50579066]\n", + "[113.52800119 -6.51470191 14.28942134 -25.47130994]\n", + "[111.43821055 -11.76142063 14.93495959 -24.53065365]\n", + "[ 0. 1. 30.12456468 26.31559619]\n", + "[1.73143245e-05 1.00001513e+00 3.01245611e+01 2.63155874e+01]\n", + "[3.46286490e-04 1.00030250e+00 3.01244927e+01 2.63154207e+01]\n", + "[5.19428804e-04 1.00045375e+00 3.01244567e+01 2.63153329e+01]\n", + "[1.38513934e-03 1.00120999e+00 3.01242768e+01 2.63148941e+01]\n", + "[1.53904290e-03 1.00134443e+00 3.01242448e+01 2.63148161e+01]\n", + "[1.73142211e-03 1.00151248e+00 3.01242048e+01 2.63147186e+01]\n", + "[1.73142211e-03 1.00151248e+00 3.01242048e+01 2.63147186e+01]\n", + "[5.19424565e-03 1.00453740e+00 3.01234852e+01 2.63129634e+01]\n", + "[6.92556435e-03 1.00604963e+00 3.01231254e+01 2.63120859e+01]\n", + "[1.55820546e-02 1.01361054e+00 3.01213266e+01 2.63076985e+01]\n", + "[1.71209321e-02 1.01495457e+00 3.01210069e+01 2.63069185e+01]\n", + "[1.90445060e-02 1.01663455e+00 3.01206072e+01 2.63059436e+01]\n", + "[1.90445058e-02 1.01663455e+00 3.01206072e+01 2.63059436e+01]\n", + "[ 0.05366861 1.04687363 30.11341308 26.28839536]\n", + "[ 0.07097135 1.06197048 30.10982139 26.27962894]\n", + "[ 0.15747486 1.13742967 30.09186883 26.23580534]\n", + "[ 0.17284796 1.1508316 30.08868033 26.2280189 ]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0.19206189 1.1675782 30.08469609 26.21828782]\n", + "[ 0.19206175 1.16757799 30.08469616 26.2182879 ]\n", + "[ 0.53788994 1.46896123 30.01299296 26.04314731]\n", + "[ 0.70987677 1.61738792 29.97767449 25.9563424 ]\n", + "[ 1.56888956 2.35716122 29.80161144 25.52308569]\n", + "[ 1.72117399 2.48751745 29.77056604 25.44644209]\n", + "[ 1.91116075 2.64970283 29.73195514 25.35089654]\n", + "[ 1.91101214 2.64948974 29.73202547 25.35097535]\n", + "[ 5.32875406 5.56362323 29.03819833 23.63285946]\n", + "[ 6.94789896 6.79850241 28.74135901 22.84483598]\n", + "[15.04625873 12.87118806 27.25646199 18.91155033]\n", + "[16.54586525 13.97924131 26.96759041 18.19123127]\n", + "[18.25687267 15.10944295 26.68257077 17.37747814]\n", + "[18.10029284 14.88997449 26.75451234 17.45710482]\n", + "[27.85524475 21.2550024 25.13537636 12.82745754]\n", + "[32.06857413 22.53850081 24.63568069 10.9297158 ]\n", + "[54.4058568 29.54947896 21.56004366 0.87925665]\n", + "[60.49435963 32.94728202 20.26224519 -1.61733076]\n", + "[64.82670978 32.62318498 19.81396933 -3.545136 ]\n", + "[61.1331805 27.88966482 21.08546391 -2.27253777]\n", + "[72.91223332 26.62014842 19.78756319 -7.60726456]\n", + "[77.98607712 22.63271168 19.22901333 -9.90540669]\n", + "[103.34677366 2.63716478 16.00591311 -21.16906016]\n", + "[108.71282769 0.96012796 15.0171016 -23.50582853]\n", + "[113.5304879 -6.51759994 14.28995633 -25.47129957]\n", + "[111.44063243 -11.76425413 14.93548097 -24.5306706 ]\n", + "[ 0. 1. 30.1244113 26.31577177]\n", + "[1.73143245e-05 1.00001513e+00 3.01244077e+01 2.63157630e+01]\n", + "[3.46286490e-04 1.00030251e+00 3.01243393e+01 2.63155962e+01]\n", + "[5.19428804e-04 1.00045376e+00 3.01243034e+01 2.63155085e+01]\n", + "[1.38513934e-03 1.00121001e+00 3.01241234e+01 2.63150697e+01]\n", + "[1.53904290e-03 1.00134445e+00 3.01240915e+01 2.63149917e+01]\n", + "[1.73142211e-03 1.00151250e+00 3.01240515e+01 2.63148942e+01]\n", + "[1.73142211e-03 1.00151250e+00 3.01240515e+01 2.63148942e+01]\n", + "[5.19424564e-03 1.00453745e+00 3.01233318e+01 2.63131390e+01]\n", + "[6.92556435e-03 1.00604970e+00 3.01229720e+01 2.63122615e+01]\n", + "[1.55820546e-02 1.01361070e+00 3.01211733e+01 2.63078740e+01]\n", + "[1.71209321e-02 1.01495474e+00 3.01208535e+01 2.63070940e+01]\n", + "[1.90445060e-02 1.01663474e+00 3.01204538e+01 2.63061191e+01]\n", + "[1.90445058e-02 1.01663474e+00 3.01204538e+01 2.63061191e+01]\n", + "[ 0.05366861 1.04687419 30.1132597 26.28857073]\n", + "[ 0.07097135 1.06197121 30.10966801 26.27980425]\n", + "[ 0.15747486 1.13743129 30.09171545 26.23598032]\n", + "[ 0.17284796 1.15083337 30.08852695 26.22819382]\n", + "[ 0.19206189 1.16758017 30.08454271 26.21846267]\n", + "[ 0.19206175 1.16757996 30.08454278 26.21846275]\n", + "[ 0.53788994 1.46896674 30.01283958 26.04332085]\n", + "[ 0.70987676 1.61739518 29.97752112 25.9565153 ]\n", + "[ 1.56888952 2.35717717 29.8014581 25.52325539]\n", + "[ 1.72117394 2.48753494 29.7704127 25.44661123]\n", + "[ 1.91116069 2.64972222 29.73180181 25.35106498]\n", + "[ 1.91101208 2.64950912 29.73187214 25.35114379]\n", + "[ 5.32875377 5.56367681 29.03804517 23.63301533]\n", + "[ 6.94789813 6.79857033 28.74120627 22.84498663]\n", + "[15.04625589 12.87132755 27.25631108 18.91167454]\n", + "[16.54586315 13.97939515 26.96743936 18.19135004]\n", + "[18.2568697 15.10960995 26.68242042 17.37759191]\n", + "[18.10028794 14.89013695 26.75436289 17.45722035]\n", + "[27.85519499 21.25521327 25.1352375 12.82756356]\n", + "[32.06850562 22.53873011 24.63554612 10.92981873]\n", + "[54.40569411 29.54980739 21.55993258 0.87933971]\n", + "[60.49417653 32.947642 20.26214124 -1.61725551]\n", + "[64.82650916 32.62356097 19.81386996 -3.54506444]\n", + "[61.13298857 27.89001505 21.08535942 -2.27245951]\n", + "[72.91200905 26.62053956 19.78746913 -7.60720365]\n", + "[77.98584143 22.63310496 19.22892332 -9.90535433]\n", + "[103.34647655 2.63755781 16.0058405 -21.16904729]\n", + "[108.71251494 0.96051752 15.01703025 -23.50582363]\n", + "[113.53016609 -6.51722487 14.28988709 -25.47130091]\n", + "[111.44031901 -11.76388741 14.93541349 -24.53066841]\n", + "[ 0. 1. 30.12471806 26.31542061]\n", + "[1.73143245e-05 1.00001512e+00 3.01247145e+01 2.63154118e+01]\n", + "[3.46286490e-04 1.00030250e+00 3.01246461e+01 2.63152451e+01]\n", + "[5.19428804e-04 1.00045375e+00 3.01246101e+01 2.63151573e+01]\n", + "[1.38513934e-03 1.00120998e+00 3.01244302e+01 2.63147185e+01]\n", + "[1.53904290e-03 1.00134442e+00 3.01243982e+01 2.63146405e+01]\n", + "[1.73142211e-03 1.00151247e+00 3.01243582e+01 2.63145430e+01]\n", + "[1.73142211e-03 1.00151247e+00 3.01243582e+01 2.63145430e+01]\n", + "[5.19424565e-03 1.00453735e+00 3.01236386e+01 2.63127879e+01]\n", + "[6.92556435e-03 1.00604956e+00 3.01232788e+01 2.63119104e+01]\n", + "[1.55820546e-02 1.01361038e+00 3.01214800e+01 2.63075230e+01]\n", + "[1.71209321e-02 1.01495439e+00 3.01211603e+01 2.63067430e+01]\n", + "[1.90445060e-02 1.01663435e+00 3.01207606e+01 2.63057681e+01]\n", + "[1.90445058e-02 1.01663435e+00 3.01207606e+01 2.63057681e+01]\n", + "[ 0.05366861 1.04687308 30.11356646 26.28821998]\n", + "[ 0.07097135 1.06196975 30.10997477 26.27945363]\n", + "[ 0.15747486 1.13742806 30.09202221 26.23563036]\n", + "[ 0.17284796 1.15082982 30.0888337 26.22784397]\n", + "[ 0.1920619 1.16757623 30.08484947 26.21811297]\n", + "[ 0.19206175 1.16757602 30.08484954 26.21811304]\n", + "[ 0.53788995 1.46895571 30.01314634 26.04297376]\n", + "[ 0.70987678 1.61738066 29.97782786 25.9561695 ]\n", + "[ 1.5688896 2.35714527 29.80176479 25.52291599]\n", + "[ 1.72117404 2.48749997 29.77071938 25.44627295]\n", + "[ 1.91116081 2.64968345 29.73210847 25.3507281 ]\n", + "[ 1.91101221 2.64947036 29.7321788 25.35080691]\n", + "[ 5.32875435 5.56356965 29.03835148 23.63270358]\n", + "[ 6.94789979 6.79843448 28.74151174 22.84468533]\n", + "[15.04626158 12.87104858 27.25661289 18.91142612]\n", + "[16.54586734 13.97908748 26.96774146 18.1911125 ]\n", + "[18.25687564 15.10927595 26.68272112 17.37736438]\n", + "[18.10029774 14.88981202 26.75466179 17.45698928]\n", + "[27.85529452 21.25479154 25.13551521 12.82735151]\n", + "[32.06864263 22.53827152 24.63581527 10.92961287]\n", + "[54.4060195 29.54915053 21.56015473 0.87917358]\n", + "[60.49454272 32.94692205 20.26234915 -1.61740602]\n", + "[64.8269104 32.62280899 19.8140687 -3.54520755]\n", + "[61.13337243 27.8893146 21.0855684 -2.27261602]\n", + "[72.91245759 26.61975728 19.78765724 -7.60732547]\n", + "[77.9863128 22.6323184 19.22910334 -9.90545905]\n", + "[103.34707077 2.63677175 16.00598573 -21.16907304]\n", + "[108.71314043 0.9597384 15.01717294 -23.50583344]\n", + "[113.53080971 -6.51797502 14.29002556 -25.47129823]\n", + "[111.44094585 -11.76462086 14.93554844 -24.5306728 ]\n", + "Wall time: 1.3 s\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": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
fun103.46837822354611 meter
status0
successTrue
messageSolution found.
x41.1391
nfev9
\n", + "
" + ], + "text/plain": [ + "fun 103.46837822354611 meter\n", + "status 0\n", + "success True\n", + "message Solution found.\n", + "x 41.1391\n", + "nfev 9\n", + "dtype: object" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`x` is the optimal angle and `fun` the optional range." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "41.139142795614596 degree" + ], + "text/latex": [ + "$41.139142795614596 degree$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "optimal_angle = res.x * degree" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "103.46837822354611 meter" + ], + "text/latex": [ + "$103.46837822354611 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "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": 17, + "metadata": {}, + "outputs": [], + "source": [ + "%psource max_bounded" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "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": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def event_func_wall(state, t, system):\n", + " x, y, vx, vy = state\n", + " return 94.5 - x\n", + "\n", + "def height_func(angle, params): \n", + " \"\"\"Computes height for a given launch velocity.\n", + " \n", + " angle: launch angle in degrees\n", + " params: Params object\n", + " \n", + " returns: height 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_wall)\n", + " height = get_last_value(results.y) * m\n", + " return height\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Always test the height function with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "wall_height 11.28 meter\n", + "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\n" + ] + }, + { + "ename": "ValueError", + "evalue": "too many values to unpack (expected 4)", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\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[0mslope_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmake_system\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mslope_func\u001b[1;34m(state, t, system)\u001b[0m\n\u001b[0;32m 9\u001b[0m \"\"\"\n\u001b[0;32m 10\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 11\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvy\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mstate\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 12\u001b[0m \u001b[0munpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msystem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mValueError\u001b[0m: too many values to unpack (expected 4)" + ] + } + ], + "source": [ + "slope_func(params, 0, make_system(params))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 33.01363222 22.58539546]\n", + "[1.73143076e-05 1.00001185e+00 3.30136286e+01 2.25853879e+01]\n", + "[3.46286152e-04 1.00023690e+00 3.30135602e+01 2.25852434e+01]\n", + "[5.19428378e-04 1.00035535e+00 3.30135243e+01 2.25851674e+01]\n", + "[1.38513857e-03 1.00094760e+00 3.30133443e+01 2.25847873e+01]\n", + "[1.53904211e-03 1.00105288e+00 3.30133124e+01 2.25847198e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[5.19424509e-03 1.00355344e+00 3.30125527e+01 2.25831151e+01]\n", + "[6.92557206e-03 1.00473773e+00 3.30121930e+01 2.25823550e+01]\n", + "[1.55821126e-02 1.01065899e+00 3.30103941e+01 2.25785547e+01]\n", + "[1.71210039e-02 1.01171156e+00 3.30100743e+01 2.25778791e+01]\n", + "[1.90445968e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[1.90445967e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[ 0.05366906 1.03670869 33.00248022 22.56183461]\n", + "[ 0.0709728 1.04853149 32.9988877 22.55424032]\n", + "[ 0.15748217 1.10762567 32.98093031 22.51627519]\n", + "[ 0.17285676 1.11812098 32.97774057 22.50952913]\n", + "[ 0.1920728 1.13123555 32.97375461 22.50109801]\n", + "[ 0.19207268 1.1312354 32.97375467 22.50109806]\n", + "[ 0.53794055 1.36725362 32.90201893 22.34935198]\n", + "[ 0.71002798 1.48347208 32.86661851 22.2740486 ]\n", + "[ 1.56961172 2.06268096 32.69008565 21.8981101 ]\n", + "[ 1.72202249 2.16471736 32.6589301 21.83156523]\n", + "[ 1.91221516 2.29168457 32.62015169 21.74857008]\n", + "[ 1.91209642 2.29154006 32.62020716 21.74862124]\n", + "[ 5.33369084 4.57279354 31.92323259 20.25599242]\n", + "[ 6.96224272 5.53728508 31.61886526 19.56292129]\n", + "[15.09589085 10.26332212 30.10068529 16.10854453]\n", + "[16.58349965 11.10802329 29.81353989 15.48441707]\n", + "[18.30975974 11.98466487 29.51585107 14.76238238]\n", + "[18.1851959 11.83636751 29.57264449 14.81424697]\n", + "[28.78292297 17.14523822 27.75142565 10.38996524]\n", + "[33.34754788 18.01598978 27.16714173 8.55928402]\n", + "[57.43383528 22.81811382 23.63632294 -1.06307696]\n", + "[63.88109982 25.53785478 22.21090767 -3.38940228]\n", + "[68.53702635 24.84192589 21.6713683 -5.23857282]\n", + "[64.71098884 20.63407666 23.02550611 -4.11462717]\n", + "[76.99114128 18.43962983 21.5331281 -9.07455788]\n", + "[ 82.23579926 14.36647646 20.89730891 -11.19351941]\n", + "[108.51063942 -5.88306096 17.3514598 -21.61336308]\n", + "[114.09034604 -7.60437154 16.34797643 -23.77375649]\n", + "[119.03596007 -14.83177983 15.58297543 -25.60112824]\n", + "[116.85305402 -19.80074234 16.18332714 -24.74260806]\n", + "[ 0. 1. 22.58539546 33.01363222]\n", + "[1.73142932e-05 1.00002531e+00 2.25853919e+01 3.30136194e+01]\n", + "[3.46285863e-04 1.00050617e+00 2.25853235e+01 3.30133768e+01]\n", + "[5.19427553e-04 1.00075926e+00 2.25852875e+01 3.30132490e+01]\n", + "[1.38513463e-03 1.00202467e+00 2.25851076e+01 3.30126104e+01]\n", + "[1.53903738e-03 1.00224963e+00 2.25850756e+01 3.30124969e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[5.19421899e-03 1.00759237e+00 2.25843160e+01 3.30098005e+01]\n", + "[6.92549659e-03 1.01012271e+00 2.25839562e+01 3.30085235e+01]\n", + "[1.55817469e-02 1.02277389e+00 2.25821576e+01 3.30021383e+01]\n", + "[1.71205638e-02 1.02502274e+00 2.25818379e+01 3.30010033e+01]\n", + "[1.90440541e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[1.90440538e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[ 0.05366657 1.07842961 22.57424531 32.97404738]\n", + "[ 0.07096543 1.10368352 22.57065649 32.96129538]\n", + "[ 0.15744611 1.2299046 22.55272076 32.89755354]\n", + "[ 0.17281345 1.25231873 22.54953653 32.8862311 ]\n", + "[ 0.19201929 1.28032495 22.54555827 32.87208236]\n", + "[ 0.19201901 1.28032434 22.5455584 32.8720826 ]\n", + "[ 0.53769408 1.78432869 22.47396827 32.61744564]\n", + "[ 0.70929677 2.03193868 22.43893326 32.49176873]\n", + "[ 1.56614534 3.26555584 22.26448232 31.86496341]\n", + "[ 1.7179663 3.48276535 22.23380365 31.75428821]\n", + "[ 1.90717089 3.75261673 22.19576829 31.61656487]\n", + "[ 1.90688694 3.75200413 22.19590541 31.61680649]\n", + "[ 5.31002783 8.59958501 21.51286674 29.14129215]\n", + "[ 6.8937821 10.59637825 21.24142428 28.05213113]\n", + "[14.87265803 20.51093765 19.85893236 22.56717428]\n", + "[16.43723553 22.47708158 19.55105005 21.49407015]\n", + "[18.09437471 24.25757866 19.30633285 20.39791913]\n", + "[17.79105872 23.62106401 19.44579925 20.63833413]\n", + "[25.33680253 31.62955879 18.33408858 15.65565667]\n", + "[28.62436297 33.45864445 18.02635933 13.63560557]\n", + "[46.23462431 43.43839709 16.04200928 2.81694909]\n", + "[51.20743433 47.91013643 15.12247676 0.05461775]\n", + "[54.65075842 47.94972075 14.87409034 -2.03372382]\n", + "[51.525659 42.16302125 15.82766613 -0.5671572 ]\n", + "[61.32134549 41.81200967 15.02160031 -6.6034585 ]\n", + "[65.65795854 37.43367771 14.63371352 -9.2621242 ]\n", + "[ 86.88408137 14.82748143 12.19436678 -22.02088303]\n", + "[ 90.96340579 12.21083697 11.29196656 -24.55702921]\n", + "[ 95.14005285 3.53406768 10.66600076 -26.69133723]\n", + "[ 93.95763063 -1.55514893 11.35326653 -25.74420563]\n", + "[104.19557046 -24.77028507 9.85660966 -31.18771107]\n", + "[107.79620921 -41.90019035 9.09272625 -32.35063472]\n", + "[ 123.86300151 -108.69556346 6.78144172 -43.16734207]\n", + "[123.58591208 -89.88003234 8.54126573 -54.71325398]\n", + "[ 124.69269367 -105.04019068 8.64575644 -58.99754981]\n", + "[ 129.63703917 -159.68316995 4.92665121 -40.26411003]\n", + "[100.29180116 -15.91825652 10.42729119 -29.11207966]\n", + "[102.87769278 -25.21367547 9.95450742 -30.22243698]\n", + "[115.06421743 -68.35045385 7.95064608 -36.50327558]\n", + "[116.49427349 -70.43245022 8.03150744 -39.18136908]\n", + "[118.55576542 -81.66912973 7.63680897 -40.13399963]\n", + "[119.32558197 -91.69528395 6.97488292 -37.20570011]\n", + "[ 0. 1. 37.28129695 14.4949956 ]\n", + "[1.73141876e-05 1.00000673e+00 3.72812934e+01 1.44949897e+01]\n", + "[3.46283753e-04 1.00013464e+00 3.72812250e+01 1.44948766e+01]\n", + "[5.19424877e-04 1.00020195e+00 3.72811890e+01 1.44948171e+01]\n", + "[1.38512966e-03 1.00053853e+00 3.72810091e+01 1.44945196e+01]\n", + "[1.53903230e-03 1.00059837e+00 3.72809771e+01 1.44944667e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[5.19421451e-03 1.00201946e+00 3.72802175e+01 1.44932105e+01]\n", + "[6.92554136e-03 1.00269249e+00 3.72798577e+01 1.44926155e+01]\n", + "[1.55820921e-02 1.00605747e+00 3.72780588e+01 1.44896406e+01]\n", + "[1.71209908e-02 1.00665562e+00 3.72777390e+01 1.44891117e+01]\n", + "[1.90445955e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[1.90445954e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[ 0.05366929 1.02086073 37.27014446 14.47655165]\n", + "[ 0.07097413 1.02757703 37.26655084 14.47060559]\n", + "[ 0.15748999 1.06114475 37.24858691 14.44087908]\n", + "[ 0.17286628 1.06710517 37.24539549 14.43559636]\n", + "[ 0.19208471 1.07455255 37.2414072 14.42899382]\n", + "[ 0.19208462 1.07455247 37.24140724 14.42899385]\n", + "[ 0.53799786 1.2085748 37.16962719 14.31015667]\n", + "[ 0.71020442 1.27434418 37.13411434 14.25108105]\n", + "[ 1.57046609 1.60186795 36.9569339 13.95605729]\n", + "[ 1.72302821 1.65942933 36.92562412 13.90378773]\n", + "[ 1.91346588 1.73100197 36.88661488 13.83855659]\n", + "[ 1.91338118 1.73092509 36.88665316 13.83858065]\n", + "[ 5.3395626 3.01630839 36.1853356 12.66520725]\n", + "[ 6.97936945 3.53638891 35.87048843 12.11090227]\n", + "[15.15611188 6.05402799 34.30374001 9.35148481]\n", + "[16.63082391 6.48716654 34.01610456 8.86007548]\n", + "[18.37559866 6.92608215 33.70021577 8.27500626]\n", + "[18.28730319 6.84769637 33.73945957 8.29952276]\n", + "[30.06112794 9.74392315 31.61399799 4.35684552]\n", + "[35.11361932 9.64420678 30.88454857 2.69009923]\n", + "[61.51654854 9.31544017 26.63183025 -5.91835573]\n", + "[68.29462259 10.56371554 25.07106451 -7.85456636]\n", + "[73.37021018 8.96509443 24.37358572 -9.51870886]\n", + "[69.58062775 5.79642504 25.75125407 -8.73203557]\n", + "[ 81.42729034 1.77932053 24.07758858 -12.67292274]\n", + "[ 86.48442035 -2.26882776 23.36199067 -14.3546176 ]\n", + "[111.79914697 -22.41424776 19.57910929 -22.65091948]\n", + "[117.01769495 -24.67303193 18.66939742 -24.32752955]\n", + "[121.78339632 -31.06220743 17.89619078 -25.81595636]\n", + "[119.98737711 -34.52452508 18.31425054 -25.23075186]\n", + "[ 0. 1. 30.59668446 25.76514895]\n", + "[1.73143232e-05 1.00001458e+00 3.05966809e+01 2.57651404e+01]\n", + "[3.46286465e-04 1.00029160e+00 3.05966125e+01 2.57649774e+01]\n", + "[5.19428781e-04 1.00043740e+00 3.05965765e+01 2.57648917e+01]\n", + "[1.38513934e-03 1.00116640e+00 3.05963966e+01 2.57644629e+01]\n", + "[1.53904291e-03 1.00129600e+00 3.05963646e+01 2.57643867e+01]\n", + "[1.73142214e-03 1.00145800e+00 3.05963246e+01 2.57642914e+01]\n", + "[1.73142214e-03 1.00145800e+00 3.05963246e+01 2.57642914e+01]\n", + "[5.19424606e-03 1.00437394e+00 3.05956050e+01 2.57625762e+01]\n", + "[6.92556640e-03 1.00583170e+00 3.05952452e+01 2.57617187e+01]\n", + "[1.55820663e-02 1.01312022e+00 3.05934464e+01 2.57574313e+01]\n", + "[1.71209465e-02 1.01441584e+00 3.05931266e+01 2.57566692e+01]\n", + "[1.90445239e-02 1.01603530e+00 3.05927270e+01 2.57557165e+01]\n", + "[1.90445238e-02 1.01603530e+00 3.05927270e+01 2.57557165e+01]\n", + "[ 0.05366869 1.04518504 30.58553279 25.73856837]\n", + "[ 0.07097161 1.05973808 30.58194096 25.73000166]\n", + "[ 0.15747616 1.13247917 30.56398756 25.68717622]\n", + "[ 0.17284953 1.14539837 30.56079885 25.67956703]\n", + "[ 0.19206384 1.16154178 30.55681432 25.67005741]\n", + "[ 0.19206369 1.16154159 30.55681439 25.67005749]\n", + "[ 0.53789892 1.45206958 30.48510561 25.49890242]\n", + "[ 0.7099035 1.59515435 30.4497731 25.41405492]\n", + "[ 1.56901692 2.3083037 30.27362971 24.99055127]\n", + "[ 1.72132351 2.43396697 30.24256557 24.9156253 ]\n", + "[ 1.91134657 2.59031954 30.20392601 24.82221335]\n", + "[ 1.91120337 2.59011948 30.20399366 24.8222869 ]\n", + "[ 5.32962415 5.39945066 29.50962838 23.1425005 ]\n", + "[ 6.95042448 6.59023746 29.21150578 22.37044246]\n", + "[15.05490396 12.44301603 27.72103023 18.51793143]\n", + "[16.55226362 13.50717467 27.43257738 17.81416491]\n", + "[18.26593143 14.59675584 27.14542195 17.01573002]\n", + "[18.11516567 14.39082402 27.21462803 17.09008219]\n", + "[28.00818184 20.60338218 25.56282842 12.49031513]\n", + "[32.27917305 21.82854916 25.04985196 10.60230216]\n", + "[54.905837 28.52599281 21.90156354 0.61419269]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[61.056555 31.82462996 20.58201295 -1.85779034]\n", + "[65.44270612 31.44948923 20.11949263 -3.77400289]\n", + "[61.72314805 26.79622602 21.40642764 -2.52260372]\n", + "[73.59951569 25.39667586 20.07639371 -7.8029455 ]\n", + "[ 78.70755312 21.40115282 19.50532852 -10.07440805]\n", + "[104.2520186 1.39823182 16.2286294 -21.21433806]\n", + "[109.66428161 -0.27097769 15.23607163 -23.52596236]\n", + "[114.50888984 -7.70525115 14.50244617 -25.47171296]\n", + "[112.39478235 -12.92357747 15.14231158 -24.54233284]\n", + "[ 0. 1. 29.73110726 26.75932102]\n", + "[1.73143252e-05 1.00001558e+00 2.97311037e+01 2.67593121e+01]\n", + "[3.46286504e-04 1.00031167e+00 2.97310353e+01 2.67591421e+01]\n", + "[5.19428813e-04 1.00046751e+00 2.97309993e+01 2.67590526e+01]\n", + "[1.38513931e-03 1.00124668e+00 2.97308194e+01 2.67586054e+01]\n", + "[1.53904285e-03 1.00138519e+00 2.97307874e+01 2.67585258e+01]\n", + "[1.73142204e-03 1.00155834e+00 2.97307474e+01 2.67584264e+01]\n", + "[1.73142204e-03 1.00155834e+00 2.97307474e+01 2.67584264e+01]\n", + "[5.19424517e-03 1.00467497e+00 2.97300278e+01 2.67566373e+01]\n", + "[6.92556244e-03 1.00623305e+00 2.97296680e+01 2.67557428e+01]\n", + "[1.55820441e-02 1.01402319e+00 2.97278692e+01 2.67512705e+01]\n", + "[1.71209195e-02 1.01540797e+00 2.97275495e+01 2.67504754e+01]\n", + "[1.90444902e-02 1.01713888e+00 2.97271498e+01 2.67494817e+01]\n", + "[1.90444901e-02 1.01713888e+00 2.97271498e+01 2.67494817e+01]\n", + "[ 0.05366853 1.04829475 29.71995572 26.73159386]\n", + "[ 0.07097113 1.06384924 29.71636415 26.72265798]\n", + "[ 0.15747373 1.14159584 29.69841229 26.67798742]\n", + "[ 0.17284661 1.15540399 29.69522397 26.67005058]\n", + "[ 0.19206023 1.17265818 29.69123998 26.66013159]\n", + "[ 0.19206007 1.17265796 29.69124005 26.66013167]\n", + "[ 0.53788223 1.48317595 29.6195416 26.48160941]\n", + "[ 0.70985383 1.63609574 29.58423506 26.39314431]\n", + "[ 1.56878035 2.39826038 29.40824026 25.95161598]\n", + "[ 1.72104582 2.53256263 29.37721074 25.87351588]\n", + "[ 1.91100145 2.69965136 29.33862418 25.77616143]\n", + "[ 1.91084815 2.69942676 29.33869683 25.7762449 ]\n", + "[ 5.32800805 5.70165794 28.64532676 24.02563395]\n", + "[ 6.94573441 6.97338767 28.34957616 23.224131 ]\n", + "[15.03888401 13.22998066 26.86938125 19.22255973]\n", + "[16.54046622 14.37505055 26.58011411 18.48813402]\n", + "[18.24920278 15.53897404 26.29689878 17.66147889]\n", + "[18.08757427 15.30753998 26.37121094 17.74576543]\n", + "[27.72742398 21.79440598 24.77919678 13.09212866]\n", + "[31.89265291 23.12408902 24.29042764 11.18656762]\n", + "[53.98796422 30.38368484 21.27486729 1.08598139]\n", + "[60.02374043 33.86101744 19.99541308 -1.43027149]\n", + "[64.31103521 33.57679012 19.55882765 -3.36745741]\n", + "[60.64027984 28.77783973 20.81696917 -2.07804428]\n", + "[72.33493587 27.61042612 19.54581507 -7.45664256]\n", + "[77.3788845 23.62740296 18.99759849 -9.77646608]\n", + "[102.57847791 3.62532708 15.81904668 -21.13998702]\n", + "[107.90315346 1.93739813 14.83359549 -23.49678737]\n", + "[112.69692526 -5.5783491 14.11186745 -25.47792815]\n", + "[110.62966905 -10.84470374 14.76175646 -24.52848536]\n", + "[ 0. 1. 27.17943783 29.34754094]\n", + "[1.73143229e-05 1.00001870e+00 2.71794342e+01 2.93475308e+01]\n", + "[3.46286458e-04 1.00037391e+00 2.71793659e+01 2.93473384e+01]\n", + "[5.19428656e-04 1.00056086e+00 2.71793299e+01 2.93472371e+01]\n", + "[1.38513850e-03 1.00149562e+00 2.71791500e+01 2.93467307e+01]\n", + "[1.53904187e-03 1.00166180e+00 2.71791180e+01 2.93466406e+01]\n", + "[1.73142083e-03 1.00186952e+00 2.71790780e+01 2.93465281e+01]\n", + "[1.73142083e-03 1.00186952e+00 2.71790780e+01 2.93465281e+01]\n", + "[5.19423957e-03 1.00560848e+00 2.71783584e+01 2.93445025e+01]\n", + "[6.92554579e-03 1.00747768e+00 2.71779986e+01 2.93434898e+01]\n", + "[1.55819624e-02 1.01682332e+00 2.71761999e+01 2.93384263e+01]\n", + "[1.71208211e-02 1.01848460e+00 2.71758801e+01 2.93375262e+01]\n", + "[1.90443687e-02 1.02056113e+00 2.71754804e+01 2.93364011e+01]\n", + "[1.90443686e-02 1.02056113e+00 2.71754804e+01 2.93364011e+01]\n", + "[ 0.05366797 1.05793791 27.16828672 29.31614942]\n", + "[ 0.07096946 1.07659727 27.16469599 29.30603391]\n", + "[ 0.1574656 1.16986206 27.14674907 29.25546774]\n", + "[ 0.17283683 1.18642582 27.14356201 29.24648411]\n", + "[ 0.19204815 1.20712306 27.13957978 29.23525724]\n", + "[ 0.19204797 1.20712274 27.13957987 29.23525736]\n", + "[ 0.5378266 1.57960189 27.06791465 29.0331989 ]\n", + "[ 0.70968872 1.76294529 27.03269154 28.93319533]\n", + "[ 1.56799602 2.67667662 26.85717313 28.43419218]\n", + "[ 1.72012654 2.83766867 26.82625359 28.34597729]\n", + "[ 1.9098587 3.03789523 26.78783699 28.23606952]\n", + "[ 1.90967009 3.0375782 26.78792711 28.23619047]\n", + "[ 5.32265327 6.63508101 26.09774655 26.26010234]\n", + "[ 6.93021889 8.15059288 25.80956175 25.36646558]\n", + "[14.98702147 15.62727632 24.3612675 20.89570977]\n", + "[16.50420009 17.02617509 24.06822266 20.06128001]\n", + "[18.19692515 18.407742 23.79735316 19.14715917]\n", + "[17.99722472 18.08008207 23.88941584 19.26882682]\n", + "[26.89011493 25.25294735 22.47131664 14.47693769]\n", + "[30.74268299 26.83261422 22.05063834 12.52577029]\n", + "[51.25404897 35.44466351 19.41529027 2.13365042]\n", + "[56.93113961 39.37356439 18.25893231 -0.4933455 ]\n", + "[60.92214476 39.29178014 17.89450219 -2.48681982]\n", + "[57.41988638 34.09770275 19.05657039 -1.1063698 ]\n", + "[68.509222 33.45388774 17.95675177 -6.74530067]\n", + "[73.3338867 29.440419 17.4725581 -9.1965058]\n", + "[ 97.33704721 9.08106144 14.57569855 -21.14743458]\n", + "[102.33203733 7.22486902 13.61528462 -23.61389105]\n", + "[106.94365866 -0.59156474 12.92831156 -25.68005735]\n", + "[105.07703039 -5.91027439 13.60079902 -24.68761821]\n", + "[ 0. 1. 28.58951267 27.97569955]\n", + "[1.73143255e-05 1.00001694e+00 2.85895091e+01 2.79756901e+01]\n", + "[3.46286511e-04 1.00033885e+00 2.85894407e+01 2.79755104e+01]\n", + "[5.19428786e-04 1.00050828e+00 2.85894047e+01 2.79754159e+01]\n", + "[1.38513907e-03 1.00135539e+00 2.85892248e+01 2.79749431e+01]\n", + "[1.53904255e-03 1.00150599e+00 2.85891928e+01 2.79748590e+01]\n", + "[1.73142166e-03 1.00169423e+00 2.85891528e+01 2.79747539e+01]\n", + "[1.73142166e-03 1.00169423e+00 2.85891528e+01 2.79747539e+01]\n", + "[5.19424318e-03 1.00508263e+00 2.85884332e+01 2.79728628e+01]\n", + "[6.92555588e-03 1.00677658e+00 2.85880734e+01 2.79719172e+01]\n", + "[1.55820106e-02 1.01524601e+00 2.85862747e+01 2.79671898e+01]\n", + "[1.71208789e-02 1.01675154e+00 2.85859549e+01 2.79663494e+01]\n", + "[1.90444400e-02 1.01863338e+00 2.85855552e+01 2.79652990e+01]\n", + "[1.90444398e-02 1.01863338e+00 2.85855552e+01 2.79652990e+01]\n", + "[ 0.0536683 1.05250596 28.57836131 27.94639103]\n", + "[ 0.07097042 1.06941649 28.5747701 27.93694605]\n", + "[ 0.15747029 1.15394068 28.55682037 27.889731 ]\n", + "[ 0.17284246 1.16895242 28.55363259 27.88134236]\n", + "[ 0.1920551 1.18771048 28.54964936 27.87085887]\n", + "[ 0.19205494 1.18771021 28.54964944 27.87085897]\n", + "[ 0.53785861 1.52529213 28.47796529 27.68217802]\n", + "[ 0.70978365 1.69151205 28.44269468 27.58872919]\n", + "[ 1.56844657 2.51994691 28.26690525 27.12237327]\n", + "[ 1.72065435 2.66592328 28.23592332 27.03990268]\n", + "[ 1.91051488 2.84751245 28.19741002 26.93712216]\n", + "[ 1.9103469 2.84725066 28.19748994 26.93722069]\n", + "[ 5.3257288 6.10998419 27.50549502 25.08914263]\n", + "[ 6.93912571 7.48952433 27.21301315 24.24751411]\n", + "[15.01657467 14.2848729 25.74676685 20.04215744]\n", + "[16.52448551 15.54014339 25.45608882 19.26498188]\n", + "[18.22634376 16.80150609 25.1782486 18.4000834 ]\n", + "[18.04891177 16.53138599 25.25995466 18.49941889]\n", + "[27.35466124 23.34655886 23.74615086 13.78045415]\n", + "[31.38014119 24.7983741 23.28840751 11.85350544]\n", + "[52.76972098 32.71717291 20.4448759 1.6158987 ]\n", + "[58.6483974 36.40994885 19.21965961 -0.95335523]\n", + "[62.80395439 36.22811623 18.81611144 -2.91655149]\n", + "[59.20437708 31.24635329 20.033202 -1.58260583]\n", + "[70.63953679 30.34298545 18.83925875 -7.08222709]\n", + "[75.59041204 26.3596555 18.32039806 -9.46256958]\n", + "[100.28554373 6.2682212 15.26977568 -21.10098387]\n", + "[105.4758908 4.52614132 14.29498258 -23.5112757 ]\n", + "[110.19367694 -3.11134565 13.58893583 -25.53402677]\n", + "[108.20426026 -8.41658809 14.25000179 -24.56203642]\n", + "[ 0. 1. 28.57458428 27.99094734]\n", + "[1.73143255e-05 1.00001696e+00 2.85745807e+01 2.79909379e+01]\n", + "[3.46286511e-04 1.00033921e+00 2.85745123e+01 2.79907581e+01]\n", + "[5.19428785e-04 1.00050882e+00 2.85744763e+01 2.79906635e+01]\n", + "[1.38513907e-03 1.00135684e+00 2.85742964e+01 2.79901903e+01]\n", + "[1.53904255e-03 1.00150759e+00 2.85742644e+01 2.79901062e+01]\n", + "[1.73142165e-03 1.00169604e+00 2.85742244e+01 2.79900011e+01]\n", + "[1.73142165e-03 1.00169604e+00 2.85742244e+01 2.79900011e+01]\n", + "[5.19424315e-03 1.00508806e+00 2.85735048e+01 2.79881085e+01]\n", + "[6.92555579e-03 1.00678381e+00 2.85731450e+01 2.79871623e+01]\n", + "[1.55820101e-02 1.01526229e+00 2.85713463e+01 2.79824314e+01]\n", + "[1.71208783e-02 1.01676942e+00 2.85710265e+01 2.79815904e+01]\n", + "[1.90444393e-02 1.01865328e+00 2.85706268e+01 2.79805392e+01]\n", + "[1.90444391e-02 1.01865328e+00 2.85706268e+01 2.79805392e+01]\n", + "[ 0.05366829 1.05256203 28.56343293 27.96161757]\n", + "[ 0.07097041 1.0694906 28.55984172 27.95216574]\n", + "[ 0.15747024 1.15410501 28.54189202 27.90491649]\n", + "[ 0.17284241 1.16913277 28.53870425 27.89652178]\n", + "[ 0.19205503 1.18791084 28.53472103 27.88603069]\n", + "[ 0.19205487 1.18791058 28.53472111 27.88603079]\n", + "[ 0.53785829 1.52585273 28.46303715 27.6972133 ]\n", + "[ 0.70978269 1.69224955 28.42776702 27.60369751]\n", + "[ 1.56844203 2.52156578 28.25198035 27.13700807]\n", + "[ 1.72064902 2.66769737 28.22099906 27.05447879]\n", + "[ 1.91050826 2.84947926 28.18248675 26.95162541]\n", + "[ 1.91034008 2.84921695 28.18256677 26.95172416]\n", + "[ 5.3256978 6.11541268 27.49059035 25.10233749]\n", + "[ 6.93903588 7.49637394 27.19815239 24.26017334]\n", + "[15.01627365 14.29883212 25.73209175 20.05209092]\n", + "[16.52427366 15.55557559 25.44139248 19.27433668]\n", + "[18.22603901 16.81821035 25.16362404 18.40892931]\n", + "[18.04838808 16.5475415 25.24543226 18.50847807]\n", + "[27.34976759 23.3667703 23.73264668 13.7886984 ]\n", + "[31.37341849 24.82006962 23.27530274 11.86148155]\n", + "[52.75373639 32.74689564 20.43399924 1.62215908]\n", + "[58.63032046 36.4423424 19.20950157 -0.94774966]\n", + "[62.78414546 36.26172052 18.80637706 -2.91127581]\n", + "[59.1855462 31.27763345 20.02290927 -1.57678899]\n", + "[70.6171824 30.37740073 18.82997051 -7.07793873]\n", + "[75.56678332 26.39392993 18.3114867 -9.45905198]\n", + "[100.25497557 6.30059846 15.26251978 -21.1009252 ]\n", + "[105.4434266 4.5575866 14.28787307 -23.51187063]\n", + "[110.16015745 -3.08161897 13.58203032 -25.53512799]\n", + "[108.17188179 -8.38719963 14.2432298 -24.56287482]\n", + "[ 0. 1. 28.502722 28.06412013]\n", + "[1.73143255e-05 1.00001705e+00 2.85027184e+01 2.80641106e+01]\n", + "[3.46286510e-04 1.00034096e+00 2.85026500e+01 2.80639302e+01]\n", + "[5.19428781e-04 1.00051143e+00 2.85026140e+01 2.80638352e+01]\n", + "[1.38513904e-03 1.00136381e+00 2.85024341e+01 2.80633604e+01]\n", + "[1.53904252e-03 1.00151535e+00 2.85024021e+01 2.80632760e+01]\n", + "[1.73142162e-03 1.00170476e+00 2.85023622e+01 2.80631705e+01]\n", + "[1.73142162e-03 1.00170476e+00 2.85023622e+01 2.80631705e+01]\n", + "[5.19424300e-03 1.00511422e+00 2.85016425e+01 2.80612713e+01]\n", + "[6.92555533e-03 1.00681870e+00 2.85012828e+01 2.80603218e+01]\n", + "[1.55820078e-02 1.01534077e+00 2.84994840e+01 2.80555744e+01]\n", + "[1.71208756e-02 1.01685565e+00 2.84991642e+01 2.80547305e+01]\n", + "[1.90444359e-02 1.01874919e+00 2.84987646e+01 2.80536756e+01]\n", + "[1.90444357e-02 1.01874919e+00 2.84987646e+01 2.80536756e+01]\n", + "[ 0.05366828 1.05283228 28.49157065 28.03468779]\n", + "[ 0.07097037 1.06984788 28.48797947 28.02520295]\n", + "[ 0.15747001 1.15489721 28.47002991 27.97778869]\n", + "[ 0.17284213 1.17000219 28.46684217 27.96936468]\n", + "[ 0.1920547 1.18887677 28.462859 27.95883699]\n", + "[ 0.19205453 1.1888765 28.46285908 27.95883709]\n", + "[ 0.53785673 1.52855522 28.39117605 27.76936085]\n", + "[ 0.70977808 1.69580484 28.35590826 27.67552207]\n", + "[ 1.56842011 2.52936968 28.18013493 27.20722376]\n", + "[ 1.72062333 2.67624946 28.14915672 27.12441132]\n", + "[ 1.91047633 2.85896038 28.11064915 27.02120651]\n", + "[ 1.91030716 2.85869551 28.11072966 27.02130629]\n", + "[ 5.32554815 6.1415798 27.41884251 25.16560717]\n", + "[ 6.93860221 7.52938687 27.12661638 24.32086042]\n", + "[15.01482114 14.36609635 25.6614507 20.09963326]\n", + "[16.52325288 15.62994326 25.37064812 19.31908572]\n", + "[18.22456992 16.89870115 25.09322578 18.45122526]\n", + "[18.04586037 16.62537407 25.17552789 18.55180707]\n", + "[27.32620346 23.46404436 23.66764227 13.82811801]\n", + "[31.34104917 24.92444791 23.21221879 11.89961423]\n", + "[52.67677093 32.88970568 20.38163347 1.65205824]\n", + "[58.54326969 36.59795727 19.16059832 -0.92098922]\n", + "[62.68875412 36.42311791 18.7595103 -2.88610017]\n", + "[59.09487925 31.42786635 19.97334721 -1.54902303]\n", + "[70.50951025 30.54261031 18.78524174 -7.05751292]\n", + "[75.45295735 26.55841006 18.2685694 -9.44232971]\n", + "[100.10762563 6.45567355 15.22756417 -21.10080682]\n", + "[105.28689891 4.70809374 14.25362419 -23.5148817 ]\n", + "[109.99852853 -2.93943415 13.54876296 -25.54056247]\n", + "[108.01579105 -8.24658339 14.21060105 -24.56705663]\n", + "[ 0. 1. 28.50995626 28.05677092]\n", + "[1.73143255e-05 1.00001704e+00 2.85099527e+01 2.80567614e+01]\n", + "[3.46286510e-04 1.00034078e+00 2.85098843e+01 2.80565811e+01]\n", + "[5.19428781e-04 1.00051117e+00 2.85098483e+01 2.80564861e+01]\n", + "[1.38513905e-03 1.00136311e+00 2.85096684e+01 2.80560115e+01]\n", + "[1.53904252e-03 1.00151456e+00 2.85096364e+01 2.80559271e+01]\n", + "[1.73142162e-03 1.00170388e+00 2.85095964e+01 2.80558216e+01]\n", + "[1.73142162e-03 1.00170388e+00 2.85095964e+01 2.80558216e+01]\n", + "[5.19424301e-03 1.00511159e+00 2.85088768e+01 2.80539231e+01]\n", + "[6.92555537e-03 1.00681518e+00 2.85085170e+01 2.80529740e+01]\n", + "[1.55820080e-02 1.01533286e+00 2.85067182e+01 2.80482282e+01]\n", + "[1.71208759e-02 1.01684696e+00 2.85063985e+01 2.80473846e+01]\n", + "[1.90444363e-02 1.01873953e+00 2.85059988e+01 2.80463301e+01]\n", + "[1.90444361e-02 1.01873953e+00 2.85059988e+01 2.80463301e+01]\n", + "[ 0.05366828 1.05280505 28.49880491 28.02734892]\n", + "[ 0.07097037 1.06981187 28.49521373 28.01786741]\n", + "[ 0.15747003 1.15481737 28.47726415 27.97046979]\n", + "[ 0.17284216 1.16991458 28.47407641 27.96204873]\n", + "[ 0.19205473 1.18877942 28.47009323 27.95152473]\n", + "[ 0.19205456 1.18877916 28.47009331 27.95152483]\n", + "[ 0.53785689 1.52828287 28.39841019 27.76211501]\n", + "[ 0.70977855 1.69544655 28.36314216 27.6683088 ]\n", + "[ 1.56842232 2.52858325 28.18736748 27.2001727 ]\n", + "[ 1.72062592 2.67538763 28.15638897 27.11738881]\n", + "[ 1.91047955 2.85800493 28.11788092 27.01421944]\n", + "[ 1.91031048 2.85774032 28.11796138 27.01431911]\n", + "[ 5.32556325 6.13894292 27.42606523 25.15925644]\n", + "[ 6.93864597 7.52606047 27.13381774 24.31477 ]\n", + "[15.01496762 14.35931989 25.66856187 20.09486786]\n", + "[16.52335571 15.62245074 25.37776978 19.3146021 ]\n", + "[18.22471796 16.89059224 25.10031255 18.44698884]\n", + "[18.04611534 16.61753402 25.18256479 18.54746617]\n", + "[27.32857615 23.45425337 23.67418601 13.82416966]\n", + "[31.34430831 24.91394473 23.21856936 11.89579515]\n", + "[52.68452033 32.87534933 20.38690562 1.64906609]\n", + "[58.55203534 36.58231578 19.16552166 -0.9236664 ]\n", + "[62.69835964 36.40689772 18.76422885 -2.88861806]\n", + "[59.10400795 31.41276833 19.97833766 -1.55180058]\n", + "[70.5203541 30.52601324 18.78974579 -7.05955285]\n", + "[75.46442215 26.54189029 18.2728913 -9.44399732]\n", + "[100.12247413 6.44012103 15.23108513 -21.10080643]\n", + "[105.30267511 4.69300719 14.25707386 -23.51456754]\n", + "[110.01481986 -2.95367919 13.55211386 -25.54000539]\n", + "[108.03152143 -8.26067499 14.21388797 -24.56662471]\n", + "[ 0. 1. 28.5101359 28.05658837]\n", + "[1.73143255e-05 1.00001704e+00 2.85101323e+01 2.80565789e+01]\n", + "[3.46286510e-04 1.00034078e+00 2.85100639e+01 2.80563985e+01]\n", + "[5.19428781e-04 1.00051116e+00 2.85100280e+01 2.80563036e+01]\n", + "[1.38513905e-03 1.00136309e+00 2.85098480e+01 2.80558290e+01]\n", + "[1.53904252e-03 1.00151454e+00 2.85098161e+01 2.80557446e+01]\n", + "[1.73142162e-03 1.00170386e+00 2.85097761e+01 2.80556391e+01]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.73142162e-03 1.00170386e+00 2.85097761e+01 2.80556391e+01]\n", + "[5.19424301e-03 1.00511152e+00 2.85090564e+01 2.80537406e+01]\n", + "[6.92555537e-03 1.00681509e+00 2.85086967e+01 2.80527914e+01]\n", + "[1.55820080e-02 1.01533266e+00 2.85068979e+01 2.80480457e+01]\n", + "[1.71208759e-02 1.01684674e+00 2.85065781e+01 2.80472021e+01]\n", + "[1.90444363e-02 1.01873929e+00 2.85061785e+01 2.80461476e+01]\n", + "[1.90444361e-02 1.01873929e+00 2.85061785e+01 2.80461476e+01]\n", + "[ 0.05366828 1.05280437 28.49898456 28.02716663]\n", + "[ 0.07097037 1.06981098 28.49539338 28.01768519]\n", + "[ 0.15747004 1.15481539 28.4774438 27.97028799]\n", + "[ 0.17284216 1.1699124 28.47425606 27.961867 ]\n", + "[ 0.19205473 1.18877701 28.47027288 27.9513431 ]\n", + "[ 0.19205456 1.18877674 28.47027296 27.9513432 ]\n", + "[ 0.5378569 1.52827611 28.39858984 27.76193502]\n", + "[ 0.70977856 1.69543765 28.3633218 27.66812962]\n", + "[ 1.56842238 2.52856372 28.18754709 27.19999756]\n", + "[ 1.72062599 2.67536623 28.15656856 27.11721437]\n", + "[ 1.91047963 2.8579812 28.11806051 27.01404588]\n", + "[ 1.91031056 2.8577166 28.11814097 27.01414555]\n", + "[ 5.32556363 6.13887745 27.4262446 25.15909868]\n", + "[ 6.93864705 7.52597788 27.13399657 24.3146187 ]\n", + "[15.01497125 14.35915162 25.66873847 20.09474946]\n", + "[16.52335826 15.62226469 25.37794663 19.31449069]\n", + "[18.22472164 16.89039089 25.10048854 18.44688357]\n", + "[18.04612167 16.61733934 25.18273953 18.54735831]\n", + "[27.32863507 23.45401022 23.67434851 13.82407155]\n", + "[31.34438924 24.91368389 23.21872706 11.89570025]\n", + "[52.68471277 32.87499276 20.38703654 1.64899174]\n", + "[58.55225301 36.58192728 19.16564392 -0.92373293]\n", + "[62.69859817 36.40649485 18.76434603 -2.88868063]\n", + "[59.10423464 31.41239333 19.97846158 -1.5518696 ]\n", + "[70.52062338 30.52560099 18.78985763 -7.05960356]\n", + "[75.46470684 26.54147994 18.27299862 -9.44403878]\n", + "[100.12284283 6.43973464 15.23117256 -21.10080646]\n", + "[105.30306683 4.69263236 14.25715952 -23.51455977]\n", + "[110.01522437 -2.95403313 13.55219706 -25.53999158]\n", + "[108.03191202 -8.26102511 14.21396958 -24.56661402]\n", + "[ 0. 1. 28.51029945 28.05642217]\n", + "[1.73143255e-05 1.00001704e+00 2.85102959e+01 2.80564127e+01]\n", + "[3.46286510e-04 1.00034077e+00 2.85102275e+01 2.80562323e+01]\n", + "[5.19428781e-04 1.00051116e+00 2.85101915e+01 2.80561374e+01]\n", + "[1.38513905e-03 1.00136308e+00 2.85100116e+01 2.80556628e+01]\n", + "[1.53904252e-03 1.00151453e+00 2.85099796e+01 2.80555784e+01]\n", + "[1.73142162e-03 1.00170384e+00 2.85099396e+01 2.80554729e+01]\n", + "[1.73142162e-03 1.00170384e+00 2.85099396e+01 2.80554729e+01]\n", + "[5.19424301e-03 1.00511146e+00 2.85092200e+01 2.80535744e+01]\n", + "[6.92555538e-03 1.00681501e+00 2.85088602e+01 2.80526253e+01]\n", + "[1.55820080e-02 1.01533248e+00 2.85070614e+01 2.80478796e+01]\n", + "[1.71208759e-02 1.01684655e+00 2.85067417e+01 2.80470360e+01]\n", + "[1.90444363e-02 1.01873907e+00 2.85063420e+01 2.80459815e+01]\n", + "[1.90444361e-02 1.01873907e+00 2.85063420e+01 2.80459815e+01]\n", + "[ 0.05366828 1.05280376 28.49914811 28.02700067]\n", + "[ 0.07097037 1.06981017 28.49555693 28.01751931]\n", + "[ 0.15747004 1.15481359 28.47760735 27.97012248]\n", + "[ 0.17284216 1.16991042 28.47441961 27.96170156]\n", + "[ 0.19205473 1.18877481 28.47043643 27.95117774]\n", + "[ 0.19205457 1.18877454 28.47043651 27.95117784]\n", + "[ 0.5378569 1.52826995 28.39875339 27.76177117]\n", + "[ 0.70977857 1.69542955 28.36348535 27.6679665 ]\n", + "[ 1.56842243 2.52854594 28.1877106 27.1998381 ]\n", + "[ 1.72062605 2.67534675 28.15673207 27.11705556]\n", + "[ 1.9104797 2.85795961 28.118224 27.01388787]\n", + "[ 1.91031064 2.85769501 28.11830446 27.01398754]\n", + "[ 5.32556397 6.13881784 27.42640788 25.15895506]\n", + "[ 6.93864804 7.52590268 27.13415938 24.31448096]\n", + "[15.01497457 14.35899844 25.66889923 20.09464167]\n", + "[16.52336059 15.62209532 25.37810763 19.31438927]\n", + "[18.22472498 16.89020759 25.10064875 18.44678774]\n", + "[18.04612743 16.61716211 25.18289862 18.54726012]\n", + "[27.32868871 23.45378887 23.67449645 13.82398224]\n", + "[31.34446292 24.91344643 23.21887064 11.89561386]\n", + "[52.68488796 32.87466814 20.38715573 1.64892404]\n", + "[58.55245118 36.5815736 19.16575523 -0.9237935 ]\n", + "[62.69881532 36.40612807 18.7644527 -2.8887376 ]\n", + "[59.10444102 31.41205192 19.9785744 -1.55193244]\n", + "[70.52086852 30.52522567 18.78995946 -7.05964972]\n", + "[75.46496602 26.54110637 18.27309633 -9.44407652]\n", + "[100.12317848 6.43938288 15.23125215 -21.10080648]\n", + "[105.30342344 4.69229112 14.2572375 -23.5145527 ]\n", + "[110.01559262 -2.95435536 13.55227281 -25.53997902]\n", + "[108.0322676 -8.26134386 14.21404389 -24.56660428]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
fun11.04782805563812 meter
status0
successTrue
messageSolution found.
x44.5406
nfev12
\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": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = max_bounded(height_func, [0, 90], params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your function with a launch angle of 45 degrees:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "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": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 1. 33.01363222 22.58539546]\n", + "[1.73143076e-05 1.00001185e+00 3.30136286e+01 2.25853879e+01]\n", + "[3.46286152e-04 1.00023690e+00 3.30135602e+01 2.25852434e+01]\n", + "[5.19428378e-04 1.00035535e+00 3.30135243e+01 2.25851674e+01]\n", + "[1.38513857e-03 1.00094760e+00 3.30133443e+01 2.25847873e+01]\n", + "[1.53904211e-03 1.00105288e+00 3.30133124e+01 2.25847198e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[1.73142132e-03 1.00118449e+00 3.30132724e+01 2.25846353e+01]\n", + "[5.19424509e-03 1.00355344e+00 3.30125527e+01 2.25831151e+01]\n", + "[6.92557206e-03 1.00473773e+00 3.30121930e+01 2.25823550e+01]\n", + "[1.55821126e-02 1.01065899e+00 3.30103941e+01 2.25785547e+01]\n", + "[1.71210039e-02 1.01171156e+00 3.30100743e+01 2.25778791e+01]\n", + "[1.90445968e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[1.90445967e-02 1.01302722e+00 3.30096746e+01 2.25770347e+01]\n", + "[ 0.05366906 1.03670869 33.00248022 22.56183461]\n", + "[ 0.0709728 1.04853149 32.9988877 22.55424032]\n", + "[ 0.15748217 1.10762567 32.98093031 22.51627519]\n", + "[ 0.17285676 1.11812098 32.97774057 22.50952913]\n", + "[ 0.1920728 1.13123555 32.97375461 22.50109801]\n", + "[ 0.19207268 1.1312354 32.97375467 22.50109806]\n", + "[ 0.53794055 1.36725362 32.90201893 22.34935198]\n", + "[ 0.71002798 1.48347208 32.86661851 22.2740486 ]\n", + "[ 1.56961172 2.06268096 32.69008565 21.8981101 ]\n", + "[ 1.72202249 2.16471736 32.6589301 21.83156523]\n", + "[ 1.91221516 2.29168457 32.62015169 21.74857008]\n", + "[ 1.91209642 2.29154006 32.62020716 21.74862124]\n", + "[ 5.33369084 4.57279354 31.92323259 20.25599242]\n", + "[ 6.96224272 5.53728508 31.61886526 19.56292129]\n", + "[15.09589085 10.26332212 30.10068529 16.10854453]\n", + "[16.58349965 11.10802329 29.81353989 15.48441707]\n", + "[18.30975974 11.98466487 29.51585107 14.76238238]\n", + "[18.1851959 11.83636751 29.57264449 14.81424697]\n", + "[28.78292297 17.14523822 27.75142565 10.38996524]\n", + "[33.34754788 18.01598978 27.16714173 8.55928402]\n", + "[57.43383528 22.81811382 23.63632294 -1.06307696]\n", + "[63.88109982 25.53785478 22.21090767 -3.38940228]\n", + "[68.53702635 24.84192589 21.6713683 -5.23857282]\n", + "[64.71098884 20.63407666 23.02550611 -4.11462717]\n", + "[76.99114128 18.43962983 21.5331281 -9.07455788]\n", + "[ 82.23579926 14.36647646 20.89730891 -11.19351941]\n", + "[108.51063942 -5.88306096 17.3514598 -21.61336308]\n", + "[114.09034604 -7.60437154 16.34797643 -23.77375649]\n", + "[119.03596007 -14.83177983 15.58297543 -25.60112824]\n", + "[116.85305402 -19.80074234 16.18332714 -24.74260806]\n", + "[ 0. 1. 22.58539546 33.01363222]\n", + "[1.73142932e-05 1.00002531e+00 2.25853919e+01 3.30136194e+01]\n", + "[3.46285863e-04 1.00050617e+00 2.25853235e+01 3.30133768e+01]\n", + "[5.19427553e-04 1.00075926e+00 2.25852875e+01 3.30132490e+01]\n", + "[1.38513463e-03 1.00202467e+00 2.25851076e+01 3.30126104e+01]\n", + "[1.53903738e-03 1.00224963e+00 2.25850756e+01 3.30124969e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[1.73141552e-03 1.00253082e+00 2.25850356e+01 3.30123550e+01]\n", + "[5.19421899e-03 1.00759237e+00 2.25843160e+01 3.30098005e+01]\n", + "[6.92549659e-03 1.01012271e+00 2.25839562e+01 3.30085235e+01]\n", + "[1.55817469e-02 1.02277389e+00 2.25821576e+01 3.30021383e+01]\n", + "[1.71205638e-02 1.02502274e+00 2.25818379e+01 3.30010033e+01]\n", + "[1.90440541e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[1.90440538e-02 1.02783368e+00 2.25814383e+01 3.29995845e+01]\n", + "[ 0.05366657 1.07842961 22.57424531 32.97404738]\n", + "[ 0.07096543 1.10368352 22.57065649 32.96129538]\n", + "[ 0.15744611 1.2299046 22.55272076 32.89755354]\n", + "[ 0.17281345 1.25231873 22.54953653 32.8862311 ]\n", + "[ 0.19201929 1.28032495 22.54555827 32.87208236]\n", + "[ 0.19201901 1.28032434 22.5455584 32.8720826 ]\n", + "[ 0.53769408 1.78432869 22.47396827 32.61744564]\n", + "[ 0.70929677 2.03193868 22.43893326 32.49176873]\n", + "[ 1.56614534 3.26555584 22.26448232 31.86496341]\n", + "[ 1.7179663 3.48276535 22.23380365 31.75428821]\n", + "[ 1.90717089 3.75261673 22.19576829 31.61656487]\n", + "[ 1.90688694 3.75200413 22.19590541 31.61680649]\n", + "[ 5.31002783 8.59958501 21.51286674 29.14129215]\n", + "[ 6.8937821 10.59637825 21.24142428 28.05213113]\n", + "[14.87265803 20.51093765 19.85893236 22.56717428]\n", + "[16.43723553 22.47708158 19.55105005 21.49407015]\n", + "[18.09437471 24.25757866 19.30633285 20.39791913]\n", + "[17.79105872 23.62106401 19.44579925 20.63833413]\n", + "[25.33680253 31.62955879 18.33408858 15.65565667]\n", + "[28.62436297 33.45864445 18.02635933 13.63560557]\n", + "[46.23462431 43.43839709 16.04200928 2.81694909]\n", + "[51.20743433 47.91013643 15.12247676 0.05461775]\n", + "[54.65075842 47.94972075 14.87409034 -2.03372382]\n", + "[51.525659 42.16302125 15.82766613 -0.5671572 ]\n", + "[61.32134549 41.81200967 15.02160031 -6.6034585 ]\n", + "[65.65795854 37.43367771 14.63371352 -9.2621242 ]\n", + "[ 86.88408137 14.82748143 12.19436678 -22.02088303]\n", + "[ 90.96340579 12.21083697 11.29196656 -24.55702921]\n", + "[ 95.14005285 3.53406768 10.66600076 -26.69133723]\n", + "[ 93.95763063 -1.55514893 11.35326653 -25.74420563]\n", + "[104.19557046 -24.77028507 9.85660966 -31.18771107]\n", + "[107.79620921 -41.90019035 9.09272625 -32.35063472]\n", + "[ 123.86300151 -108.69556346 6.78144172 -43.16734207]\n", + "[123.58591208 -89.88003234 8.54126573 -54.71325398]\n", + "[ 124.69269367 -105.04019068 8.64575644 -58.99754981]\n", + "[ 129.63703917 -159.68316995 4.92665121 -40.26411003]\n", + "[100.29180116 -15.91825652 10.42729119 -29.11207966]\n", + "[102.87769278 -25.21367547 9.95450742 -30.22243698]\n", + "[115.06421743 -68.35045385 7.95064608 -36.50327558]\n", + "[116.49427349 -70.43245022 8.03150744 -39.18136908]\n", + "[118.55576542 -81.66912973 7.63680897 -40.13399963]\n", + "[119.32558197 -91.69528395 6.97488292 -37.20570011]\n", + "[ 0. 1. 37.28129695 14.4949956 ]\n", + "[1.73141876e-05 1.00000673e+00 3.72812934e+01 1.44949897e+01]\n", + "[3.46283753e-04 1.00013464e+00 3.72812250e+01 1.44948766e+01]\n", + "[5.19424877e-04 1.00020195e+00 3.72811890e+01 1.44948171e+01]\n", + "[1.38512966e-03 1.00053853e+00 3.72810091e+01 1.44945196e+01]\n", + "[1.53903230e-03 1.00059837e+00 3.72809771e+01 1.44944667e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[1.73141041e-03 1.00067316e+00 3.72809371e+01 1.44944006e+01]\n", + "[5.19421451e-03 1.00201946e+00 3.72802175e+01 1.44932105e+01]\n", + "[6.92554136e-03 1.00269249e+00 3.72798577e+01 1.44926155e+01]\n", + "[1.55820921e-02 1.00605747e+00 3.72780588e+01 1.44896406e+01]\n", + "[1.71209908e-02 1.00665562e+00 3.72777390e+01 1.44891117e+01]\n", + "[1.90445955e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[1.90445954e-02 1.00740327e+00 3.72773393e+01 1.44884507e+01]\n", + "[ 0.05366929 1.02086073 37.27014446 14.47655165]\n", + "[ 0.07097413 1.02757703 37.26655084 14.47060559]\n", + "[ 0.15748999 1.06114475 37.24858691 14.44087908]\n", + "[ 0.17286628 1.06710517 37.24539549 14.43559636]\n", + "[ 0.19208471 1.07455255 37.2414072 14.42899382]\n", + "[ 0.19208462 1.07455247 37.24140724 14.42899385]\n", + "[ 0.53799786 1.2085748 37.16962719 14.31015667]\n", + "[ 0.71020442 1.27434418 37.13411434 14.25108105]\n", + "[ 1.57046609 1.60186795 36.9569339 13.95605729]\n", + "[ 1.72302821 1.65942933 36.92562412 13.90378773]\n", + "[ 1.91346588 1.73100197 36.88661488 13.83855659]\n", + "[ 1.91338118 1.73092509 36.88665316 13.83858065]\n", + "[ 5.3395626 3.01630839 36.1853356 12.66520725]\n", + "[ 6.97936945 3.53638891 35.87048843 12.11090227]\n", + "[15.15611188 6.05402799 34.30374001 9.35148481]\n", + "[16.63082391 6.48716654 34.01610456 8.86007548]\n", + "[18.37559866 6.92608215 33.70021577 8.27500626]\n", + "[18.28730319 6.84769637 33.73945957 8.29952276]\n", + "[30.06112794 9.74392315 31.61399799 4.35684552]\n", + "[35.11361932 9.64420678 30.88454857 2.69009923]\n", + "[61.51654854 9.31544017 26.63183025 -5.91835573]\n", + "[68.29462259 10.56371554 25.07106451 -7.85456636]\n", + "[73.37021018 8.96509443 24.37358572 -9.51870886]\n", + "[69.58062775 5.79642504 25.75125407 -8.73203557]\n", + "[ 81.42729034 1.77932053 24.07758858 -12.67292274]\n", + "[ 86.48442035 -2.26882776 23.36199067 -14.3546176 ]\n", + "[111.79914697 -22.41424776 19.57910929 -22.65091948]\n", + "[117.01769495 -24.67303193 18.66939742 -24.32752955]\n", + "[121.78339632 -31.06220743 17.89619078 -25.81595636]\n", + "[119.98737711 -34.52452508 18.31425054 -25.23075186]\n", + "[ 0. 1. 30.59668446 25.76514895]\n", + "[1.73143232e-05 1.00001458e+00 3.05966809e+01 2.57651404e+01]\n", + "[3.46286465e-04 1.00029160e+00 3.05966125e+01 2.57649774e+01]\n", + "[5.19428781e-04 1.00043740e+00 3.05965765e+01 2.57648917e+01]\n", + "[1.38513934e-03 1.00116640e+00 3.05963966e+01 2.57644629e+01]\n", + "[1.53904291e-03 1.00129600e+00 3.05963646e+01 2.57643867e+01]\n", + "[1.73142214e-03 1.00145800e+00 3.05963246e+01 2.57642914e+01]\n", + "[1.73142214e-03 1.00145800e+00 3.05963246e+01 2.57642914e+01]\n", + "[5.19424606e-03 1.00437394e+00 3.05956050e+01 2.57625762e+01]\n", + "[6.92556640e-03 1.00583170e+00 3.05952452e+01 2.57617187e+01]\n", + "[1.55820663e-02 1.01312022e+00 3.05934464e+01 2.57574313e+01]\n", + "[1.71209465e-02 1.01441584e+00 3.05931266e+01 2.57566692e+01]\n", + "[1.90445239e-02 1.01603530e+00 3.05927270e+01 2.57557165e+01]\n", + "[1.90445238e-02 1.01603530e+00 3.05927270e+01 2.57557165e+01]\n", + "[ 0.05366869 1.04518504 30.58553279 25.73856837]\n", + "[ 0.07097161 1.05973808 30.58194096 25.73000166]\n", + "[ 0.15747616 1.13247917 30.56398756 25.68717622]\n", + "[ 0.17284953 1.14539837 30.56079885 25.67956703]\n", + "[ 0.19206384 1.16154178 30.55681432 25.67005741]\n", + "[ 0.19206369 1.16154159 30.55681439 25.67005749]\n", + "[ 0.53789892 1.45206958 30.48510561 25.49890242]\n", + "[ 0.7099035 1.59515435 30.4497731 25.41405492]\n", + "[ 1.56901692 2.3083037 30.27362971 24.99055127]\n", + "[ 1.72132351 2.43396697 30.24256557 24.9156253 ]\n", + "[ 1.91134657 2.59031954 30.20392601 24.82221335]\n", + "[ 1.91120337 2.59011948 30.20399366 24.8222869 ]\n", + "[ 5.32962415 5.39945066 29.50962838 23.1425005 ]\n", + "[ 6.95042448 6.59023746 29.21150578 22.37044246]\n", + "[15.05490396 12.44301603 27.72103023 18.51793143]\n", + "[16.55226362 13.50717467 27.43257738 17.81416491]\n", + "[18.26593143 14.59675584 27.14542195 17.01573002]\n", + "[18.11516567 14.39082402 27.21462803 17.09008219]\n", + "[28.00818184 20.60338218 25.56282842 12.49031513]\n", + "[32.27917305 21.82854916 25.04985196 10.60230216]\n", + "[54.905837 28.52599281 21.90156354 0.61419269]\n", + "[61.056555 31.82462996 20.58201295 -1.85779034]\n", + "[65.44270612 31.44948923 20.11949263 -3.77400289]\n", + "[61.72314805 26.79622602 21.40642764 -2.52260372]\n", + "[73.59951569 25.39667586 20.07639371 -7.8029455 ]\n", + "[ 78.70755312 21.40115282 19.50532852 -10.07440805]\n", + "[104.2520186 1.39823182 16.2286294 -21.21433806]\n", + "[109.66428161 -0.27097769 15.23607163 -23.52596236]\n", + "[114.50888984 -7.70525115 14.50244617 -25.47171296]\n", + "[112.39478235 -12.92357747 15.14231158 -24.54233284]\n", + "[ 0. 1. 29.73110726 26.75932102]\n", + "[1.73143252e-05 1.00001558e+00 2.97311037e+01 2.67593121e+01]\n", + "[3.46286504e-04 1.00031167e+00 2.97310353e+01 2.67591421e+01]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.19428813e-04 1.00046751e+00 2.97309993e+01 2.67590526e+01]\n", + "[1.38513931e-03 1.00124668e+00 2.97308194e+01 2.67586054e+01]\n", + "[1.53904285e-03 1.00138519e+00 2.97307874e+01 2.67585258e+01]\n", + "[1.73142204e-03 1.00155834e+00 2.97307474e+01 2.67584264e+01]\n", + "[1.73142204e-03 1.00155834e+00 2.97307474e+01 2.67584264e+01]\n", + "[5.19424517e-03 1.00467497e+00 2.97300278e+01 2.67566373e+01]\n", + "[6.92556244e-03 1.00623305e+00 2.97296680e+01 2.67557428e+01]\n", + "[1.55820441e-02 1.01402319e+00 2.97278692e+01 2.67512705e+01]\n", + "[1.71209195e-02 1.01540797e+00 2.97275495e+01 2.67504754e+01]\n", + "[1.90444902e-02 1.01713888e+00 2.97271498e+01 2.67494817e+01]\n", + "[1.90444901e-02 1.01713888e+00 2.97271498e+01 2.67494817e+01]\n", + "[ 0.05366853 1.04829475 29.71995572 26.73159386]\n", + "[ 0.07097113 1.06384924 29.71636415 26.72265798]\n", + "[ 0.15747373 1.14159584 29.69841229 26.67798742]\n", + "[ 0.17284661 1.15540399 29.69522397 26.67005058]\n", + "[ 0.19206023 1.17265818 29.69123998 26.66013159]\n", + "[ 0.19206007 1.17265796 29.69124005 26.66013167]\n", + "[ 0.53788223 1.48317595 29.6195416 26.48160941]\n", + "[ 0.70985383 1.63609574 29.58423506 26.39314431]\n", + "[ 1.56878035 2.39826038 29.40824026 25.95161598]\n", + "[ 1.72104582 2.53256263 29.37721074 25.87351588]\n", + "[ 1.91100145 2.69965136 29.33862418 25.77616143]\n", + "[ 1.91084815 2.69942676 29.33869683 25.7762449 ]\n", + "[ 5.32800805 5.70165794 28.64532676 24.02563395]\n", + "[ 6.94573441 6.97338767 28.34957616 23.224131 ]\n", + "[15.03888401 13.22998066 26.86938125 19.22255973]\n", + "[16.54046622 14.37505055 26.58011411 18.48813402]\n", + "[18.24920278 15.53897404 26.29689878 17.66147889]\n", + "[18.08757427 15.30753998 26.37121094 17.74576543]\n", + "[27.72742398 21.79440598 24.77919678 13.09212866]\n", + "[31.89265291 23.12408902 24.29042764 11.18656762]\n", + "[53.98796422 30.38368484 21.27486729 1.08598139]\n", + "[60.02374043 33.86101744 19.99541308 -1.43027149]\n", + "[64.31103521 33.57679012 19.55882765 -3.36745741]\n", + "[60.64027984 28.77783973 20.81696917 -2.07804428]\n", + "[72.33493587 27.61042612 19.54581507 -7.45664256]\n", + "[77.3788845 23.62740296 18.99759849 -9.77646608]\n", + "[102.57847791 3.62532708 15.81904668 -21.13998702]\n", + "[107.90315346 1.93739813 14.83359549 -23.49678737]\n", + "[112.69692526 -5.5783491 14.11186745 -25.47792815]\n", + "[110.62966905 -10.84470374 14.76175646 -24.52848536]\n", + "[ 0. 1. 27.17943783 29.34754094]\n", + "[1.73143229e-05 1.00001870e+00 2.71794342e+01 2.93475308e+01]\n", + "[3.46286458e-04 1.00037391e+00 2.71793659e+01 2.93473384e+01]\n", + "[5.19428656e-04 1.00056086e+00 2.71793299e+01 2.93472371e+01]\n", + "[1.38513850e-03 1.00149562e+00 2.71791500e+01 2.93467307e+01]\n", + "[1.53904187e-03 1.00166180e+00 2.71791180e+01 2.93466406e+01]\n", + "[1.73142083e-03 1.00186952e+00 2.71790780e+01 2.93465281e+01]\n", + "[1.73142083e-03 1.00186952e+00 2.71790780e+01 2.93465281e+01]\n", + "[5.19423957e-03 1.00560848e+00 2.71783584e+01 2.93445025e+01]\n", + "[6.92554579e-03 1.00747768e+00 2.71779986e+01 2.93434898e+01]\n", + "[1.55819624e-02 1.01682332e+00 2.71761999e+01 2.93384263e+01]\n", + "[1.71208211e-02 1.01848460e+00 2.71758801e+01 2.93375262e+01]\n", + "[1.90443687e-02 1.02056113e+00 2.71754804e+01 2.93364011e+01]\n", + "[1.90443686e-02 1.02056113e+00 2.71754804e+01 2.93364011e+01]\n", + "[ 0.05366797 1.05793791 27.16828672 29.31614942]\n", + "[ 0.07096946 1.07659727 27.16469599 29.30603391]\n", + "[ 0.1574656 1.16986206 27.14674907 29.25546774]\n", + "[ 0.17283683 1.18642582 27.14356201 29.24648411]\n", + "[ 0.19204815 1.20712306 27.13957978 29.23525724]\n", + "[ 0.19204797 1.20712274 27.13957987 29.23525736]\n", + "[ 0.5378266 1.57960189 27.06791465 29.0331989 ]\n", + "[ 0.70968872 1.76294529 27.03269154 28.93319533]\n", + "[ 1.56799602 2.67667662 26.85717313 28.43419218]\n", + "[ 1.72012654 2.83766867 26.82625359 28.34597729]\n", + "[ 1.9098587 3.03789523 26.78783699 28.23606952]\n", + "[ 1.90967009 3.0375782 26.78792711 28.23619047]\n", + "[ 5.32265327 6.63508101 26.09774655 26.26010234]\n", + "[ 6.93021889 8.15059288 25.80956175 25.36646558]\n", + "[14.98702147 15.62727632 24.3612675 20.89570977]\n", + "[16.50420009 17.02617509 24.06822266 20.06128001]\n", + "[18.19692515 18.407742 23.79735316 19.14715917]\n", + "[17.99722472 18.08008207 23.88941584 19.26882682]\n", + "[26.89011493 25.25294735 22.47131664 14.47693769]\n", + "[30.74268299 26.83261422 22.05063834 12.52577029]\n", + "[51.25404897 35.44466351 19.41529027 2.13365042]\n", + "[56.93113961 39.37356439 18.25893231 -0.4933455 ]\n", + "[60.92214476 39.29178014 17.89450219 -2.48681982]\n", + "[57.41988638 34.09770275 19.05657039 -1.1063698 ]\n", + "[68.509222 33.45388774 17.95675177 -6.74530067]\n", + "[73.3338867 29.440419 17.4725581 -9.1965058]\n", + "[ 97.33704721 9.08106144 14.57569855 -21.14743458]\n", + "[102.33203733 7.22486902 13.61528462 -23.61389105]\n", + "[106.94365866 -0.59156474 12.92831156 -25.68005735]\n", + "[105.07703039 -5.91027439 13.60079902 -24.68761821]\n", + "[ 0. 1. 28.58951267 27.97569955]\n", + "[1.73143255e-05 1.00001694e+00 2.85895091e+01 2.79756901e+01]\n", + "[3.46286511e-04 1.00033885e+00 2.85894407e+01 2.79755104e+01]\n", + "[5.19428786e-04 1.00050828e+00 2.85894047e+01 2.79754159e+01]\n", + "[1.38513907e-03 1.00135539e+00 2.85892248e+01 2.79749431e+01]\n", + "[1.53904255e-03 1.00150599e+00 2.85891928e+01 2.79748590e+01]\n", + "[1.73142166e-03 1.00169423e+00 2.85891528e+01 2.79747539e+01]\n", + "[1.73142166e-03 1.00169423e+00 2.85891528e+01 2.79747539e+01]\n", + "[5.19424318e-03 1.00508263e+00 2.85884332e+01 2.79728628e+01]\n", + "[6.92555588e-03 1.00677658e+00 2.85880734e+01 2.79719172e+01]\n", + "[1.55820106e-02 1.01524601e+00 2.85862747e+01 2.79671898e+01]\n", + "[1.71208789e-02 1.01675154e+00 2.85859549e+01 2.79663494e+01]\n", + "[1.90444400e-02 1.01863338e+00 2.85855552e+01 2.79652990e+01]\n", + "[1.90444398e-02 1.01863338e+00 2.85855552e+01 2.79652990e+01]\n", + "[ 0.0536683 1.05250596 28.57836131 27.94639103]\n", + "[ 0.07097042 1.06941649 28.5747701 27.93694605]\n", + "[ 0.15747029 1.15394068 28.55682037 27.889731 ]\n", + "[ 0.17284246 1.16895242 28.55363259 27.88134236]\n", + "[ 0.1920551 1.18771048 28.54964936 27.87085887]\n", + "[ 0.19205494 1.18771021 28.54964944 27.87085897]\n", + "[ 0.53785861 1.52529213 28.47796529 27.68217802]\n", + "[ 0.70978365 1.69151205 28.44269468 27.58872919]\n", + "[ 1.56844657 2.51994691 28.26690525 27.12237327]\n", + "[ 1.72065435 2.66592328 28.23592332 27.03990268]\n", + "[ 1.91051488 2.84751245 28.19741002 26.93712216]\n", + "[ 1.9103469 2.84725066 28.19748994 26.93722069]\n", + "[ 5.3257288 6.10998419 27.50549502 25.08914263]\n", + "[ 6.93912571 7.48952433 27.21301315 24.24751411]\n", + "[15.01657467 14.2848729 25.74676685 20.04215744]\n", + "[16.52448551 15.54014339 25.45608882 19.26498188]\n", + "[18.22634376 16.80150609 25.1782486 18.4000834 ]\n", + "[18.04891177 16.53138599 25.25995466 18.49941889]\n", + "[27.35466124 23.34655886 23.74615086 13.78045415]\n", + "[31.38014119 24.7983741 23.28840751 11.85350544]\n", + "[52.76972098 32.71717291 20.4448759 1.6158987 ]\n", + "[58.6483974 36.40994885 19.21965961 -0.95335523]\n", + "[62.80395439 36.22811623 18.81611144 -2.91655149]\n", + "[59.20437708 31.24635329 20.033202 -1.58260583]\n", + "[70.63953679 30.34298545 18.83925875 -7.08222709]\n", + "[75.59041204 26.3596555 18.32039806 -9.46256958]\n", + "[100.28554373 6.2682212 15.26977568 -21.10098387]\n", + "[105.4758908 4.52614132 14.29498258 -23.5112757 ]\n", + "[110.19367694 -3.11134565 13.58893583 -25.53402677]\n", + "[108.20426026 -8.41658809 14.25000179 -24.56203642]\n", + "[ 0. 1. 28.57458428 27.99094734]\n", + "[1.73143255e-05 1.00001696e+00 2.85745807e+01 2.79909379e+01]\n", + "[3.46286511e-04 1.00033921e+00 2.85745123e+01 2.79907581e+01]\n", + "[5.19428785e-04 1.00050882e+00 2.85744763e+01 2.79906635e+01]\n", + "[1.38513907e-03 1.00135684e+00 2.85742964e+01 2.79901903e+01]\n", + "[1.53904255e-03 1.00150759e+00 2.85742644e+01 2.79901062e+01]\n", + "[1.73142165e-03 1.00169604e+00 2.85742244e+01 2.79900011e+01]\n", + "[1.73142165e-03 1.00169604e+00 2.85742244e+01 2.79900011e+01]\n", + "[5.19424315e-03 1.00508806e+00 2.85735048e+01 2.79881085e+01]\n", + "[6.92555579e-03 1.00678381e+00 2.85731450e+01 2.79871623e+01]\n", + "[1.55820101e-02 1.01526229e+00 2.85713463e+01 2.79824314e+01]\n", + "[1.71208783e-02 1.01676942e+00 2.85710265e+01 2.79815904e+01]\n", + "[1.90444393e-02 1.01865328e+00 2.85706268e+01 2.79805392e+01]\n", + "[1.90444391e-02 1.01865328e+00 2.85706268e+01 2.79805392e+01]\n", + "[ 0.05366829 1.05256203 28.56343293 27.96161757]\n", + "[ 0.07097041 1.0694906 28.55984172 27.95216574]\n", + "[ 0.15747024 1.15410501 28.54189202 27.90491649]\n", + "[ 0.17284241 1.16913277 28.53870425 27.89652178]\n", + "[ 0.19205503 1.18791084 28.53472103 27.88603069]\n", + "[ 0.19205487 1.18791058 28.53472111 27.88603079]\n", + "[ 0.53785829 1.52585273 28.46303715 27.6972133 ]\n", + "[ 0.70978269 1.69224955 28.42776702 27.60369751]\n", + "[ 1.56844203 2.52156578 28.25198035 27.13700807]\n", + "[ 1.72064902 2.66769737 28.22099906 27.05447879]\n", + "[ 1.91050826 2.84947926 28.18248675 26.95162541]\n", + "[ 1.91034008 2.84921695 28.18256677 26.95172416]\n", + "[ 5.3256978 6.11541268 27.49059035 25.10233749]\n", + "[ 6.93903588 7.49637394 27.19815239 24.26017334]\n", + "[15.01627365 14.29883212 25.73209175 20.05209092]\n", + "[16.52427366 15.55557559 25.44139248 19.27433668]\n", + "[18.22603901 16.81821035 25.16362404 18.40892931]\n", + "[18.04838808 16.5475415 25.24543226 18.50847807]\n", + "[27.34976759 23.3667703 23.73264668 13.7886984 ]\n", + "[31.37341849 24.82006962 23.27530274 11.86148155]\n", + "[52.75373639 32.74689564 20.43399924 1.62215908]\n", + "[58.63032046 36.4423424 19.20950157 -0.94774966]\n", + "[62.78414546 36.26172052 18.80637706 -2.91127581]\n", + "[59.1855462 31.27763345 20.02290927 -1.57678899]\n", + "[70.6171824 30.37740073 18.82997051 -7.07793873]\n", + "[75.56678332 26.39392993 18.3114867 -9.45905198]\n", + "[100.25497557 6.30059846 15.26251978 -21.1009252 ]\n", + "[105.4434266 4.5575866 14.28787307 -23.51187063]\n", + "[110.16015745 -3.08161897 13.58203032 -25.53512799]\n", + "[108.17188179 -8.38719963 14.2432298 -24.56287482]\n", + "[ 0. 1. 28.502722 28.06412013]\n", + "[1.73143255e-05 1.00001705e+00 2.85027184e+01 2.80641106e+01]\n", + "[3.46286510e-04 1.00034096e+00 2.85026500e+01 2.80639302e+01]\n", + "[5.19428781e-04 1.00051143e+00 2.85026140e+01 2.80638352e+01]\n", + "[1.38513904e-03 1.00136381e+00 2.85024341e+01 2.80633604e+01]\n", + "[1.53904252e-03 1.00151535e+00 2.85024021e+01 2.80632760e+01]\n", + "[1.73142162e-03 1.00170476e+00 2.85023622e+01 2.80631705e+01]\n", + "[1.73142162e-03 1.00170476e+00 2.85023622e+01 2.80631705e+01]\n", + "[5.19424300e-03 1.00511422e+00 2.85016425e+01 2.80612713e+01]\n", + "[6.92555533e-03 1.00681870e+00 2.85012828e+01 2.80603218e+01]\n", + "[1.55820078e-02 1.01534077e+00 2.84994840e+01 2.80555744e+01]\n", + "[1.71208756e-02 1.01685565e+00 2.84991642e+01 2.80547305e+01]\n", + "[1.90444359e-02 1.01874919e+00 2.84987646e+01 2.80536756e+01]\n", + "[1.90444357e-02 1.01874919e+00 2.84987646e+01 2.80536756e+01]\n", + "[ 0.05366828 1.05283228 28.49157065 28.03468779]\n", + "[ 0.07097037 1.06984788 28.48797947 28.02520295]\n", + "[ 0.15747001 1.15489721 28.47002991 27.97778869]\n", + "[ 0.17284213 1.17000219 28.46684217 27.96936468]\n", + "[ 0.1920547 1.18887677 28.462859 27.95883699]\n", + "[ 0.19205453 1.1888765 28.46285908 27.95883709]\n", + "[ 0.53785673 1.52855522 28.39117605 27.76936085]\n", + "[ 0.70977808 1.69580484 28.35590826 27.67552207]\n", + "[ 1.56842011 2.52936968 28.18013493 27.20722376]\n", + "[ 1.72062333 2.67624946 28.14915672 27.12441132]\n", + "[ 1.91047633 2.85896038 28.11064915 27.02120651]\n", + "[ 1.91030716 2.85869551 28.11072966 27.02130629]\n", + "[ 5.32554815 6.1415798 27.41884251 25.16560717]\n", + "[ 6.93860221 7.52938687 27.12661638 24.32086042]\n", + "[15.01482114 14.36609635 25.6614507 20.09963326]\n", + "[16.52325288 15.62994326 25.37064812 19.31908572]\n", + "[18.22456992 16.89870115 25.09322578 18.45122526]\n", + "[18.04586037 16.62537407 25.17552789 18.55180707]\n", + "[27.32620346 23.46404436 23.66764227 13.82811801]\n", + "[31.34104917 24.92444791 23.21221879 11.89961423]\n", + "[52.67677093 32.88970568 20.38163347 1.65205824]\n", + "[58.54326969 36.59795727 19.16059832 -0.92098922]\n", + "[62.68875412 36.42311791 18.7595103 -2.88610017]\n", + "[59.09487925 31.42786635 19.97334721 -1.54902303]\n", + "[70.50951025 30.54261031 18.78524174 -7.05751292]\n", + "[75.45295735 26.55841006 18.2685694 -9.44232971]\n", + "[100.10762563 6.45567355 15.22756417 -21.10080682]\n", + "[105.28689891 4.70809374 14.25362419 -23.5148817 ]\n", + "[109.99852853 -2.93943415 13.54876296 -25.54056247]\n", + "[108.01579105 -8.24658339 14.21060105 -24.56705663]\n", + "[ 0. 1. 28.50995626 28.05677092]\n", + "[1.73143255e-05 1.00001704e+00 2.85099527e+01 2.80567614e+01]\n", + "[3.46286510e-04 1.00034078e+00 2.85098843e+01 2.80565811e+01]\n", + "[5.19428781e-04 1.00051117e+00 2.85098483e+01 2.80564861e+01]\n", + "[1.38513905e-03 1.00136311e+00 2.85096684e+01 2.80560115e+01]\n", + "[1.53904252e-03 1.00151456e+00 2.85096364e+01 2.80559271e+01]\n", + "[1.73142162e-03 1.00170388e+00 2.85095964e+01 2.80558216e+01]\n", + "[1.73142162e-03 1.00170388e+00 2.85095964e+01 2.80558216e+01]\n", + "[5.19424301e-03 1.00511159e+00 2.85088768e+01 2.80539231e+01]\n", + "[6.92555537e-03 1.00681518e+00 2.85085170e+01 2.80529740e+01]\n", + "[1.55820080e-02 1.01533286e+00 2.85067182e+01 2.80482282e+01]\n", + "[1.71208759e-02 1.01684696e+00 2.85063985e+01 2.80473846e+01]\n", + "[1.90444363e-02 1.01873953e+00 2.85059988e+01 2.80463301e+01]\n", + "[1.90444361e-02 1.01873953e+00 2.85059988e+01 2.80463301e+01]\n", + "[ 0.05366828 1.05280505 28.49880491 28.02734892]\n", + "[ 0.07097037 1.06981187 28.49521373 28.01786741]\n", + "[ 0.15747003 1.15481737 28.47726415 27.97046979]\n", + "[ 0.17284216 1.16991458 28.47407641 27.96204873]\n", + "[ 0.19205473 1.18877942 28.47009323 27.95152473]\n", + "[ 0.19205456 1.18877916 28.47009331 27.95152483]\n", + "[ 0.53785689 1.52828287 28.39841019 27.76211501]\n", + "[ 0.70977855 1.69544655 28.36314216 27.6683088 ]\n", + "[ 1.56842232 2.52858325 28.18736748 27.2001727 ]\n", + "[ 1.72062592 2.67538763 28.15638897 27.11738881]\n", + "[ 1.91047955 2.85800493 28.11788092 27.01421944]\n", + "[ 1.91031048 2.85774032 28.11796138 27.01431911]\n", + "[ 5.32556325 6.13894292 27.42606523 25.15925644]\n", + "[ 6.93864597 7.52606047 27.13381774 24.31477 ]\n", + "[15.01496762 14.35931989 25.66856187 20.09486786]\n", + "[16.52335571 15.62245074 25.37776978 19.3146021 ]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[18.22471796 16.89059224 25.10031255 18.44698884]\n", + "[18.04611534 16.61753402 25.18256479 18.54746617]\n", + "[27.32857615 23.45425337 23.67418601 13.82416966]\n", + "[31.34430831 24.91394473 23.21856936 11.89579515]\n", + "[52.68452033 32.87534933 20.38690562 1.64906609]\n", + "[58.55203534 36.58231578 19.16552166 -0.9236664 ]\n", + "[62.69835964 36.40689772 18.76422885 -2.88861806]\n", + "[59.10400795 31.41276833 19.97833766 -1.55180058]\n", + "[70.5203541 30.52601324 18.78974579 -7.05955285]\n", + "[75.46442215 26.54189029 18.2728913 -9.44399732]\n", + "[100.12247413 6.44012103 15.23108513 -21.10080643]\n", + "[105.30267511 4.69300719 14.25707386 -23.51456754]\n", + "[110.01481986 -2.95367919 13.55211386 -25.54000539]\n", + "[108.03152143 -8.26067499 14.21388797 -24.56662471]\n", + "[ 0. 1. 28.5101359 28.05658837]\n", + "[1.73143255e-05 1.00001704e+00 2.85101323e+01 2.80565789e+01]\n", + "[3.46286510e-04 1.00034078e+00 2.85100639e+01 2.80563985e+01]\n", + "[5.19428781e-04 1.00051116e+00 2.85100280e+01 2.80563036e+01]\n", + "[1.38513905e-03 1.00136309e+00 2.85098480e+01 2.80558290e+01]\n", + "[1.53904252e-03 1.00151454e+00 2.85098161e+01 2.80557446e+01]\n", + "[1.73142162e-03 1.00170386e+00 2.85097761e+01 2.80556391e+01]\n", + "[1.73142162e-03 1.00170386e+00 2.85097761e+01 2.80556391e+01]\n", + "[5.19424301e-03 1.00511152e+00 2.85090564e+01 2.80537406e+01]\n", + "[6.92555537e-03 1.00681509e+00 2.85086967e+01 2.80527914e+01]\n", + "[1.55820080e-02 1.01533266e+00 2.85068979e+01 2.80480457e+01]\n", + "[1.71208759e-02 1.01684674e+00 2.85065781e+01 2.80472021e+01]\n", + "[1.90444363e-02 1.01873929e+00 2.85061785e+01 2.80461476e+01]\n", + "[1.90444361e-02 1.01873929e+00 2.85061785e+01 2.80461476e+01]\n", + "[ 0.05366828 1.05280437 28.49898456 28.02716663]\n", + "[ 0.07097037 1.06981098 28.49539338 28.01768519]\n", + "[ 0.15747004 1.15481539 28.4774438 27.97028799]\n", + "[ 0.17284216 1.1699124 28.47425606 27.961867 ]\n", + "[ 0.19205473 1.18877701 28.47027288 27.9513431 ]\n", + "[ 0.19205456 1.18877674 28.47027296 27.9513432 ]\n", + "[ 0.5378569 1.52827611 28.39858984 27.76193502]\n", + "[ 0.70977856 1.69543765 28.3633218 27.66812962]\n", + "[ 1.56842238 2.52856372 28.18754709 27.19999756]\n", + "[ 1.72062599 2.67536623 28.15656856 27.11721437]\n", + "[ 1.91047963 2.8579812 28.11806051 27.01404588]\n", + "[ 1.91031056 2.8577166 28.11814097 27.01414555]\n", + "[ 5.32556363 6.13887745 27.4262446 25.15909868]\n", + "[ 6.93864705 7.52597788 27.13399657 24.3146187 ]\n", + "[15.01497125 14.35915162 25.66873847 20.09474946]\n", + "[16.52335826 15.62226469 25.37794663 19.31449069]\n", + "[18.22472164 16.89039089 25.10048854 18.44688357]\n", + "[18.04612167 16.61733934 25.18273953 18.54735831]\n", + "[27.32863507 23.45401022 23.67434851 13.82407155]\n", + "[31.34438924 24.91368389 23.21872706 11.89570025]\n", + "[52.68471277 32.87499276 20.38703654 1.64899174]\n", + "[58.55225301 36.58192728 19.16564392 -0.92373293]\n", + "[62.69859817 36.40649485 18.76434603 -2.88868063]\n", + "[59.10423464 31.41239333 19.97846158 -1.5518696 ]\n", + "[70.52062338 30.52560099 18.78985763 -7.05960356]\n", + "[75.46470684 26.54147994 18.27299862 -9.44403878]\n", + "[100.12284283 6.43973464 15.23117256 -21.10080646]\n", + "[105.30306683 4.69263236 14.25715952 -23.51455977]\n", + "[110.01522437 -2.95403313 13.55219706 -25.53999158]\n", + "[108.03191202 -8.26102511 14.21396958 -24.56661402]\n", + "[ 0. 1. 28.51029945 28.05642217]\n", + "[1.73143255e-05 1.00001704e+00 2.85102959e+01 2.80564127e+01]\n", + "[3.46286510e-04 1.00034077e+00 2.85102275e+01 2.80562323e+01]\n", + "[5.19428781e-04 1.00051116e+00 2.85101915e+01 2.80561374e+01]\n", + "[1.38513905e-03 1.00136308e+00 2.85100116e+01 2.80556628e+01]\n", + "[1.53904252e-03 1.00151453e+00 2.85099796e+01 2.80555784e+01]\n", + "[1.73142162e-03 1.00170384e+00 2.85099396e+01 2.80554729e+01]\n", + "[1.73142162e-03 1.00170384e+00 2.85099396e+01 2.80554729e+01]\n", + "[5.19424301e-03 1.00511146e+00 2.85092200e+01 2.80535744e+01]\n", + "[6.92555538e-03 1.00681501e+00 2.85088602e+01 2.80526253e+01]\n", + "[1.55820080e-02 1.01533248e+00 2.85070614e+01 2.80478796e+01]\n", + "[1.71208759e-02 1.01684655e+00 2.85067417e+01 2.80470360e+01]\n", + "[1.90444363e-02 1.01873907e+00 2.85063420e+01 2.80459815e+01]\n", + "[1.90444361e-02 1.01873907e+00 2.85063420e+01 2.80459815e+01]\n", + "[ 0.05366828 1.05280376 28.49914811 28.02700067]\n", + "[ 0.07097037 1.06981017 28.49555693 28.01751931]\n", + "[ 0.15747004 1.15481359 28.47760735 27.97012248]\n", + "[ 0.17284216 1.16991042 28.47441961 27.96170156]\n", + "[ 0.19205473 1.18877481 28.47043643 27.95117774]\n", + "[ 0.19205457 1.18877454 28.47043651 27.95117784]\n", + "[ 0.5378569 1.52826995 28.39875339 27.76177117]\n", + "[ 0.70977857 1.69542955 28.36348535 27.6679665 ]\n", + "[ 1.56842243 2.52854594 28.1877106 27.1998381 ]\n", + "[ 1.72062605 2.67534675 28.15673207 27.11705556]\n", + "[ 1.9104797 2.85795961 28.118224 27.01388787]\n", + "[ 1.91031064 2.85769501 28.11830446 27.01398754]\n", + "[ 5.32556397 6.13881784 27.42640788 25.15895506]\n", + "[ 6.93864804 7.52590268 27.13415938 24.31448096]\n", + "[15.01497457 14.35899844 25.66889923 20.09464167]\n", + "[16.52336059 15.62209532 25.37810763 19.31438927]\n", + "[18.22472498 16.89020759 25.10064875 18.44678774]\n", + "[18.04612743 16.61716211 25.18289862 18.54726012]\n", + "[27.32868871 23.45378887 23.67449645 13.82398224]\n", + "[31.34446292 24.91344643 23.21887064 11.89561386]\n", + "[52.68488796 32.87466814 20.38715573 1.64892404]\n", + "[58.55245118 36.5815736 19.16575523 -0.9237935 ]\n", + "[62.69881532 36.40612807 18.7644527 -2.8887376 ]\n", + "[59.10444102 31.41205192 19.9785744 -1.55193244]\n", + "[70.52086852 30.52522567 18.78995946 -7.05964972]\n", + "[75.46496602 26.54110637 18.27309633 -9.44407652]\n", + "[100.12317848 6.43938288 15.23125215 -21.10080648]\n", + "[105.30342344 4.69229112 14.2572375 -23.5145527 ]\n", + "[110.01559262 -2.95435536 13.55227281 -25.53997902]\n", + "[108.0322676 -8.26134386 14.21404389 -24.56660428]\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
fun11.04782805563812 meter
status0
successTrue
messageSolution found.
x44.5406
nfev12
\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": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = max_bounded(height_func, [0, 90], params);" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
fun11.04782805563812 meter
status0
successTrue
messageSolution found.
x44.5406
nfev12
\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": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "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": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 1. 7.12757486 7.01410554]\n", + "[1.73131001e-05 1.00001704e+00 7.12757396e+00 7.01408085e+00]\n", + "[3.46262002e-04 1.00034075e+00 7.12755687e+00 7.01361175e+00]\n", + "[5.19392020e-04 1.00051110e+00 7.12754788e+00 7.01336485e+00]\n", + "[1.38504102e-03 1.00136281e+00 7.12750291e+00 7.01213038e+00]\n", + "[1.53893360e-03 1.00151421e+00 7.12749491e+00 7.01191092e+00]\n", + "[1.73129909e-03 1.00170345e+00 7.12748492e+00 7.01163660e+00]\n", + "[1.73129909e-03 1.00170345e+00 7.12748492e+00 7.01163660e+00]\n", + "[5.19387541e-03 1.00510974e+00 7.12730505e+00 7.00669875e+00]\n", + "[6.92506527e-03 1.00681019e+00 7.12721519e+00 7.00423003e+00]\n", + "[0.01558091 1.01530945 7.12676599 6.99188671]\n", + "[0.01711967 1.01681886 7.12668617 6.98969246]\n", + "[0.01904309 1.01870495 7.12658643 6.9869497 ]\n", + "[0.01904309 1.01870495 7.12658643 6.9869497 ]\n", + "[0.05366449 1.05264798 7.12479117 6.93758061]\n", + "[0.07096537 1.06934968 7.12390129 6.91291711]\n", + "[0.15745958 1.1525602 7.11946024 6.78962209]\n", + "[0.17283129 1.16719808 7.11867508 6.76771485]\n", + "[0.19204266 1.18542648 7.11769565 6.74033607]\n", + "[0.19204176 1.18542403 7.11769578 6.74033629]\n", + "[0.53782383 1.51287374 7.10008453 6.24756867]\n", + "[0.70975235 1.64966727 7.09202409 6.00316909]\n", + "[1.56896909 2.30542491 7.05228023 4.78253594]\n", + "[1.72182366 2.40811895 7.0455204 4.56632225]\n", + "[1.9118047 2.52755838 7.03731734 4.29666388]\n", + "[1.91090101 2.52513421 7.03741207 4.29692069]\n", + "[4.64292631 4.19326106 6.92036968 0.4209547 ]\n", + "[ 5.95782172 3.33453008 6.88464698 -1.44325389]\n", + "[ 12.63284771 -2.33084675 6.53514211 -10.796537 ]\n", + "[ 14.05841655 -3.74727822 6.36484306 -12.71957127]\n", + "[ 15.45967613 -6.55736774 6.24534358 -14.63056659]\n", + "[ 15.02261763 -7.37653206 6.38625573 -14.09833631]\n", + "[ 18.10288148 -14.17654095 6.13855704 -18.27832024]\n", + "[ 19.50860766 -19.84467961 5.95967895 -19.989883 ]\n", + "[ 25.91604371 -47.4606039 5.17367721 -28.24187227]\n", + "[ 26.38466498 -50.35328099 5.16724779 -29.87365278]\n", + "[ 27.67758665 -58.56853927 4.96079763 -31.19775662]\n", + "[ 28.55549617 -63.10143409 4.73749807 -30.56257255]\n", + "[ 32.57576993 -89.03704541 4.09148461 -34.7113552 ]\n", + "[ 33.96916887 -105.96562257 3.78591369 -35.45644631]\n", + "[ 40.51394177 -174.9550829 2.76721126 -44.20368703]\n", + "[ 40.97831395 -161.38428662 3.30904748 -54.90473593]\n", + "[ 41.51374216 -176.21269454 3.29700881 -58.50886581]\n", + "[ 42.55384463 -222.02138136 2.08285205 -41.18931824]\n", + "[ 31.18978768 -80.09578935 4.31419661 -33.28106973]\n", + "[ 32.24213398 -90.29354356 4.10819116 -34.0823573 ]\n", + "[ 37.26544951 -137.65620155 3.23254093 -39.14921803]\n", + "[ 37.94071435 -140.17288773 3.26199927 -41.99371234]\n", + "[ 38.76160365 -151.87681493 3.09979299 -42.78224786]\n", + "[ 38.94310274 -162.21511458 2.82350452 -39.27456059]\n", + "[ 40.73230056 -187.10261092 2.45746396 -40.39304883]\n", + "[ 41.3659529 -200.34371793 2.31789111 -40.62581724]\n", + "[ 44.73372744 -263.75732174 1.62519869 -42.92212145]\n", + "[ 45.71145159 -270.42692715 1.48557444 -45.24495734]\n", + "[ 46.19985618 -284.70423593 1.37960086 -45.73414684]\n", + "[ 45.46509942 -292.6818447 1.43184155 -42.37887089]\n", + "[ 46.47807619 -322.66338248 1.20867109 -42.70674246]\n", + "[ 46.8069438 -337.91510347 1.13461442 -42.75653557]\n", + "[ 48.72592752 -413.02806647 0.71272285 -43.50813107]\n", + "[ 49.53331186 -424.44543003 0.54694198 -44.49713527]\n", + "[ 49.80618089 -441.07387168 0.4853796 -44.70334473]\n", + "[ 48.97224466 -444.45148591 0.65035748 -43.20479047]\n", + "[ 49.54175571 -482.28545625 0.52250082 -43.29272367]\n", + "[ 4.97005532e+01 -5.01289069e+02 4.86619869e-01 -4.32981427e+01]\n", + "[ 5.07912235e+01 -5.95803283e+02 2.42227606e-01 -4.35504906e+01]\n", + "[ 5.14723635e+01 -6.11712769e+02 9.15853816e-02 -4.39957373e+01]\n", + "[ 5.16285755e+01 -6.32594082e+02 5.59587544e-02 -4.41092838e+01]\n", + "[ 5.07822415e+01 -6.34192574e+02 2.42708128e-01 -4.33910431e+01]\n", + "[ 5.08556852e+01 -6.47322740e+02 2.26150373e-01 -4.33963576e+01]\n", + "[ 5.08867703e+01 -6.53889633e+02 2.19140188e-01 -4.33982059e+01]\n", + "[ 5.10427581e+01 -6.86721753e+02 1.83966667e-01 -4.34084998e+01]\n", + "[ 5.10747326e+01 -6.92554403e+02 1.76762359e-01 -4.34122051e+01]\n", + "[ 5.11039175e+01 -6.99852024e+02 1.70179780e-01 -4.34137794e+01]\n", + "[ 5.10933742e+01 -6.99859653e+02 1.72547595e-01 -4.34103524e+01]\n" + ] + }, + { + "ename": "TypeError", + "evalue": "max_bounded() missing 1 required positional argument: 'bounds'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mnewParams\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mParams\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvelocity\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvelocity\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[0mmax_bounded\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheight_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mangle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnewParams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0merror_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mm\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0ms\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36merror_func\u001b[1;34m(velocity, params)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0merror_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvelocity\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mnewParams\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mParams\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvelocity\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mvelocity\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmax_bounded\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mheight_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mangle\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnewParams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0merror_func\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mm\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0ms\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: max_bounded() missing 1 required positional argument: 'bounds'" + ] + } + ], + "source": [ + "def error_func(velocity, params):\n", + " newParams = Params(params, velocity=velocity)\n", + " results = max_bounded(height_func(angle, newParams))\n", + "error_func(10 * m / s, params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Test your error function before you call `fsolve`." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "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": 29, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And just to check, run `error_func` with the value you found." + ] + }, + { + "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/conda-meta/history b/code/conda-meta/history new file mode 100644 index 00000000..36ebe8ec --- /dev/null +++ b/code/conda-meta/history @@ -0,0 +1,3 @@ +==> 2019-12-24 12:34:32 <== +# cmd: /usr/local/Caskroom/miniconda/base/bin/conda create --prefix ./code +# conda version: 4.8.0 diff --git a/code/figs/chap01-fig01.pdf b/code/figs/chap01-fig01.pdf new file mode 100644 index 00000000..381e0594 Binary files /dev/null and b/code/figs/chap01-fig01.pdf differ diff --git a/code/figs/chap02-fig01.pdf b/code/figs/chap02-fig01.pdf new file mode 100644 index 00000000..ad4decaf Binary files /dev/null and b/code/figs/chap02-fig01.pdf differ diff --git a/code/figs/chap02-fig02.pdf b/code/figs/chap02-fig02.pdf new file mode 100644 index 00000000..b9ea067b Binary files /dev/null and b/code/figs/chap02-fig02.pdf differ diff --git a/code/figs/chap03-fig01.pdf b/code/figs/chap03-fig01.pdf new file mode 100644 index 00000000..2885b344 Binary files /dev/null and b/code/figs/chap03-fig01.pdf differ diff --git a/code/figs/chap03-fig02.pdf b/code/figs/chap03-fig02.pdf new file mode 100644 index 00000000..81171130 Binary files /dev/null and b/code/figs/chap03-fig02.pdf differ diff --git a/code/figs/chap03-fig03.pdf b/code/figs/chap03-fig03.pdf new file mode 100644 index 00000000..b3ca7d6b Binary files /dev/null and b/code/figs/chap03-fig03.pdf differ diff --git a/code/figs/chap03-fig04.pdf b/code/figs/chap03-fig04.pdf new file mode 100644 index 00000000..496d53b9 Binary files /dev/null and b/code/figs/chap03-fig04.pdf differ diff --git a/code/figs/chap03-fig05.pdf b/code/figs/chap03-fig05.pdf new file mode 100644 index 00000000..3aebd407 Binary files /dev/null and b/code/figs/chap03-fig05.pdf differ diff --git a/code/figs/chap04-fig01.pdf b/code/figs/chap04-fig01.pdf new file mode 100644 index 00000000..ad631b9e Binary files /dev/null and b/code/figs/chap04-fig01.pdf differ diff --git a/code/figs/chap04-fig02.pdf b/code/figs/chap04-fig02.pdf new file mode 100644 index 00000000..f74506ed Binary files /dev/null and b/code/figs/chap04-fig02.pdf differ diff --git a/code/figs/chap05-fig02.pdf b/code/figs/chap05-fig02.pdf new file mode 100644 index 00000000..f1290ece Binary files /dev/null and b/code/figs/chap05-fig02.pdf differ diff --git a/code/figs/chap05-fig03.pdf b/code/figs/chap05-fig03.pdf new file mode 100644 index 00000000..1e220390 Binary files /dev/null and b/code/figs/chap05-fig03.pdf differ diff --git a/code/figs/chap05-fig04.pdf b/code/figs/chap05-fig04.pdf new file mode 100644 index 00000000..cd6d10d1 Binary files /dev/null and b/code/figs/chap05-fig04.pdf differ diff --git a/code/figs/chap05-fig05.pdf b/code/figs/chap05-fig05.pdf new file mode 100644 index 00000000..3e7a36cf Binary files /dev/null and b/code/figs/chap05-fig05.pdf differ diff --git a/code/figs/chap05-fig06.pdf b/code/figs/chap05-fig06.pdf new file mode 100644 index 00000000..5bd89ced Binary files /dev/null and b/code/figs/chap05-fig06.pdf differ diff --git a/code/figs/chap06-fig01.pdf b/code/figs/chap06-fig01.pdf new file mode 100644 index 00000000..9bc1ceb1 Binary files /dev/null and b/code/figs/chap06-fig01.pdf differ diff --git a/code/figs/chap06-fig02.pdf b/code/figs/chap06-fig02.pdf new file mode 100644 index 00000000..2859e4bc Binary files /dev/null and b/code/figs/chap06-fig02.pdf differ diff --git a/code/figs/chap06-fig03.pdf b/code/figs/chap06-fig03.pdf new file mode 100644 index 00000000..88bfbf3b Binary files /dev/null and b/code/figs/chap06-fig03.pdf differ diff --git a/code/figs/chap06-fig04.pdf b/code/figs/chap06-fig04.pdf new file mode 100644 index 00000000..0c565930 Binary files /dev/null and b/code/figs/chap06-fig04.pdf differ diff --git a/code/figs/chap10-fig03.pdf b/code/figs/chap10-fig03.pdf new file mode 100644 index 00000000..77da231f Binary files /dev/null and b/code/figs/chap10-fig03.pdf differ diff --git a/code/figs/simulatedOlinBikeshare.pdf b/code/figs/simulatedOlinBikeshare.pdf new file mode 100644 index 00000000..32450c21 Binary files /dev/null and b/code/figs/simulatedOlinBikeshare.pdf differ diff --git a/code/figs/simulatedOlinBikeshare.png b/code/figs/simulatedOlinBikeshare.png new file mode 100644 index 00000000..d336a258 Binary files /dev/null and b/code/figs/simulatedOlinBikeshare.png differ diff --git a/code/jump2.ipynb b/code/jump2.ipynb new file mode 100644 index 00000000..2113d5fc --- /dev/null +++ b/code/jump2.ipynb @@ -0,0 +1,1636 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Bungee dunk example, taking into account the mass of the bungee cord\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": 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": [ + "### Bungee jumping" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Chapter 21, we simulated a bungee jump with a model that took into account gravity, air resistance, and the spring force of the bungee cord, but we ignored the weight of the cord.\n", + "\n", + "It is tempting to say that the weight of the cord doesn't matter, because it falls along with the jumper. But that intuition is incorrect, as explained by [Heck, Uylings, and Kędzierska](http://iopscience.iop.org/article/10.1088/0031-9120/45/1/007). As the cord falls, it transfers energy to the jumper. They derive a differential equation that relates the acceleration of the jumper to position and velocity:\n", + "\n", + "$a = g + \\frac{\\mu v^2/2}{\\mu(L+y) + 2L}$ \n", + "\n", + "where $a$ is the net acceleration of the number, $g$ is acceleration due to gravity, $v$ is the velocity of the jumper, $y$ is the position of the jumper relative to the starting point (usually negative), $L$ is the length of the cord, and $\\mu$ is the mass ratio of the cord and jumper.\n", + "\n", + "If you don't believe this model is correct, [this video might convince you](https://www.youtube.com/watch?v=X-QFAB0gEtE).\n", + "\n", + "Following the example in Chapter 21, we'll model the jump with the following modeling assumptions:\n", + "\n", + "1. Initially the bungee cord hangs from a crane with the attachment point 80 m above a cup of tea.\n", + "\n", + "2. Until the cord is fully extended, it applies a force to the jumper as explained above.\n", + "\n", + "3. After the cord is fully extended, it obeys [Hooke's Law](https://en.wikipedia.org/wiki/Hooke%27s_law); that is, it applies a force to the jumper proportional to the extension of the cord beyond its resting length.\n", + "\n", + "4. The jumper is subject to drag force proportional to the square of their velocity, in the opposite of their direction of motion.\n", + "\n", + "First I'll create a `Param` object to contain the quantities we'll need:\n", + "\n", + "1. Let's assume that the jumper's mass is 75 kg and the cord's mass is also 75 kg, so `mu=1`.\n", + "\n", + "2. The jumpers's frontal area is 1 square meter, and terminal velocity is 60 m/s. I'll use these values to back out the coefficient of drag.\n", + "\n", + "3. The length of the bungee cord is `L = 25 m`.\n", + "\n", + "4. The spring constant of the cord is `k = 40 N / m` when the cord is stretched, and 0 when it's compressed.\n", + "\n", + "I adopt the coordinate system and most of the variable names from [Heck, Uylings, and Kędzierska](http://iopscience.iop.org/article/10.1088/0031-9120/45/1/007).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "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", + "kg = UNITS.kilogram\n", + "N = UNITS.newton" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
v_init0.0 meter / second
g9.8 meter / second ** 2
M75 kilogram
m_cord75 kilogram
area1 meter ** 2
rho1.2 kilogram / meter ** 3
v_term60.0 meter / second
L25 meter
k40.0 newton / meter
\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", + " 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" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now here's a version of `make_system` that takes a `Params` object as a parameter.\n", + "\n", + "`make_system` uses the given value of `v_term` to compute the drag coefficient `C_d`.\n", + "\n", + "It also computes `mu` and the initial `State` object." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "def make_system(params):\n", + " \"\"\"Makes a System object for the given params.\n", + " \n", + " params: Params object\n", + " \n", + " returns: System object\n", + " \"\"\"\n", + " unpack(params)\n", + " \n", + " # back out the coefficient of drag\n", + " C_d = 2 * M * g / (rho * area * v_term**2)\n", + " \n", + " mu = m_cord / M\n", + " init = State(y=0*m, v=v_init)\n", + " t_end = 10 * s\n", + "\n", + " return System(params, C_d=C_d, mu=mu,\n", + " init=init, t_end=t_end)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's make a `System`" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
v_init0.0 meter / second
g9.8 meter / second ** 2
M75 kilogram
m_cord75 kilogram
area1 meter ** 2
rho1.2 kilogram / meter ** 3
v_term60.0 meter / second
L25 meter
k40.0 newton / meter
C_d0.3402777777777778 dimensionless
mu1.0 dimensionless
inity 0 meter\n", + "v 0.0 meter / secon...
t_end10 second
\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)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`drag_force` computes drag as a function of velocity:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "def drag_force(v, system):\n", + " \"\"\"Computes drag force in the opposite direction of `v`.\n", + " \n", + " v: velocity\n", + " \n", + " returns: drag force in N\n", + " \"\"\"\n", + " unpack(system)\n", + " f_drag = -np.sign(v) * rho * v**2 * C_d * area / 2\n", + " return f_drag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's drag force at 20 m/s." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "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)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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}$ " + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "def cord_acc(y, v, system):\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", + " \n", + " returns: acceleration in m/s\n", + " \"\"\"\n", + " unpack(system)\n", + " \n", + " mu = m_cord / M\n", + " \n", + " \n", + " a = (mu * v **2 / 2) / (mu * (L + y) + 2 * L)\n", + " \n", + " return a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's acceleration due to tension in the cord if we're going 20 m/s after falling 20 m." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "3.6363636363636362 meter/second2" + ], + "text/latex": [ + "$3.6363636363636362 \\frac{meter}{second^{2}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = -20 * m\n", + "v = -20 * m/s\n", + "cord_acc(y, v, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now here's the slope function:" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "def slope_func1(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing g, rho,\n", + " C_d, area, and mass\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system)\n", + " \n", + " # Fill this in\n", + " dvdt = -(g + cord_acc(y, v, system)) + drag_force(v, system)/M\n", + " \n", + " return v, dvdt" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, let's test the slope function with the initial params." + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, )" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slope_func1(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll need an event function to stop the simulation when we get to the end of the cord." + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [], + "source": [ + "def event_func(state, t, system):\n", + " \"\"\"Run until y=-L.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing g, rho,\n", + " C_d, area, and mass\n", + " \n", + " returns: difference between y and -L\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system)\n", + "\n", + " # Fill this in\n", + " return L + y" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [], + "source": [ + "# Solution goes here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can test it with the initial conditions." + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "25 meter" + ], + "text/latex": [ + "$25 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "event_func(system.init, 0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And then run the simulation." + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'A termination event occurred.'" + ] + }, + "execution_count": 86, + "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" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how long it takes to drop 25 meters." + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.211816442174678" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_final = get_last_label(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's the plot of position as a function of time." + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "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", + " decorate(xlabel='Time (s)',\n", + " ylabel='Position (m)')\n", + " \n", + "plot_position(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's velocity as a function of time:" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_velocity(results):\n", + " plot(results.v, color='C1', label='v')\n", + " \n", + " decorate(xlabel='Time (s)',\n", + " ylabel='Velocity (m/s)')\n", + " \n", + "plot_velocity(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Velocity when we reach the end of the cord." + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-23.87566214906311 meter/second" + ], + "text/latex": [ + "$-23.87566214906311 \\frac{meter}{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min(results.v) * m/s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sweeping cord weight\n", + "\n", + "Now let's see how velocity at the crossover point depends on the weight of the cord." + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "def sweep_m_cord(m_cord_array, params):\n", + " sweep = SweepSeries()\n", + "\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, \n", + " events=event_func)\n", + " min_velocity = min(results.v) * m/s\n", + " sweep[m_cord.magnitude] = min_velocity\n", + " \n", + " return sweep" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "metadata": {}, + "outputs": [], + "source": [ + "m_cord_array = linspace(1, 201, 51) * kg\n", + "sweep = sweep_m_cord(m_cord_array, params);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's what it looks like. As expected, a heavier cord gets the jumper going faster.\n", + "\n", + "There's a hitch near 25 kg that seems to be due to numerical error." + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(sweep)\n", + "\n", + "decorate(xlabel='Mass of cord (kg)',\n", + " ylabel='Fastest downward velocity (m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Phase 2\n", + "\n", + "Once the jumper falls past the length of the cord, acceleration due to energy transfer from the cord stops abruptly. As the cord stretches, it starts to exert a spring force. So let's simulate this second phase." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`spring_force` computes the force of the cord on the jumper:" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": {}, + "outputs": [], + "source": [ + "def spring_force(y, system):\n", + " \"\"\"Computes the force of the bungee cord on the jumper:\n", + " \n", + " y: height of the jumper\n", + " \n", + " Uses these variables from system:\n", + " y_attach: height of the attachment point\n", + " L: resting length of the cord\n", + " k: spring constant of the cord\n", + " \n", + " returns: force in N\n", + " \"\"\"\n", + " unpack(system)\n", + " distance_fallen = -y\n", + " extension = distance_fallen - L\n", + " f_spring = k * extension\n", + " return f_spring" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The spring force is 0 until the cord is fully extended. When it is extended 1 m, the spring force is 40 N. " + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "0.0 newton" + ], + "text/latex": [ + "$0.0 newton$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spring_force(-25*m, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "40.0 newton" + ], + "text/latex": [ + "$40.0 newton$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spring_force(-26*m, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The slope function for Phase 2 includes the spring force, and drops the acceleration due to the cord." + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": {}, + "outputs": [], + "source": [ + "def slope_func2(state, t, system):\n", + " \"\"\"Compute derivatives of the state.\n", + " \n", + " state: position, velocity\n", + " t: time\n", + " system: System object containing g, rho,\n", + " C_d, area, and mass\n", + " \n", + " returns: derivatives of y and v\n", + " \"\"\"\n", + " y, v = state\n", + " unpack(system)\n", + " \n", + " a_drag = drag_force(v, system) / M\n", + " a_spring = spring_force(y, system) / M\n", + " dvdt = -g + a_drag + a_spring\n", + " \n", + " return v, dvdt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I'll run Phase 1 again so we can get the final state." + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
v_init0.0 meter / second
g9.8 meter / second ** 2
M75 kilogram
m_cord75 kilogram
area1 meter ** 2
rho1.2 kilogram / meter ** 3
v_term60.0 meter / second
L25 meter
k40.0 newton / meter
C_d0.3402777777777778 dimensionless
mu1.0 dimensionless
inity 0 meter\n", + "v 0.0 meter / secon...
t_end10 second
\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": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system1 = make_system(params)" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A termination event occurred.\n" + ] + } + ], + "source": [ + "event_func.direction=-1\n", + "results1, details1 = run_ode_solver(system1, slope_func1, \n", + " events=event_func, max_step=0.1)\n", + "print(details1.message)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now I need the final time, position, and velocity from Phase 1." + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.211816442174678" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_final = get_last_label(results1)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
y-25.000000
v-23.875662
\n", + "
" + ], + "text/plain": [ + "y -25.000000\n", + "v -23.875662\n", + "Name: 2.211816442174678, dtype: float64" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init2 = results1.row[t_final]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And that gives me the starting conditions for Phase 2." + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
v_init0.0 meter / second
g9.8 meter / second ** 2
M75 kilogram
m_cord75 kilogram
area1 meter ** 2
rho1.2 kilogram / meter ** 3
v_term60.0 meter / second
L25 meter
k40.0 newton / meter
C_d0.3402777777777778 dimensionless
mu1.0 dimensionless
inity -25.000000\n", + "v -23.875662\n", + "Name: 2.21181644...
t_end12.2118
t_02.21182
\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 -25.000000\n", + "v -23.875662\n", + "Name: 2.21181644...\n", + "t_end 12.2118\n", + "t_0 2.21182\n", + "dtype: object" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system2 = System(system1, t_0=t_final, t_end=t_final+10, init=init2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's how we run Phase 2, setting the direction of the event function so it doesn't stop the simulation immediately. " + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A termination event occurred.\n" + ] + }, + { + "data": { + "text/plain": [ + "8.104199118651167" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "event_func.direction=+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)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plot the results on the same axes." + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "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')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And get the lowest position from Phase 2." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-77.04862516095776 meter" + ], + "text/latex": [ + "$-77.04862516095776 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min(results2.y) * m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To see how big the effect of the cord is, I'll collect the previous code in a function." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "def simulate_system2(params):\n", + " \n", + " system1 = make_system(params)\n", + " event_func.direction=-1\n", + " results1, details1 = run_ode_solver(system1, slope_func1, events=event_func, max_step=0.1)\n", + "\n", + " t_final = get_last_label(results1)\n", + " init2 = results1.row[t_final]\n", + " \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", + " return TimeFrame(pd.concat([results1, results2]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can run both phases and get the results in a single `TimeFrame`." + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [], + "source": [ + "results = simulate_system2(params);" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": {}, + "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": 109, + "metadata": {}, + "outputs": [], + "source": [ + "params_no_cord = Params(params, m_cord=1*kg)\n", + "results_no_cord = simulate_system2(params_no_cord);" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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')" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "-74.63749938066775 meter" + ], + "text/latex": [ + "$-74.63749938066775 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "min(results_no_cord.y) * m" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-2.411125780290007" + ] + }, + "execution_count": 112, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "diff = min(results.y) - min(results_no_cord.y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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 +} diff --git a/code/lotka-volterra-allen-downey.ipynb b/code/lotka-volterra-allen-downey.ipynb new file mode 100644 index 00000000..23deee98 --- /dev/null +++ b/code/lotka-volterra-allen-downey.ipynb @@ -0,0 +1,418 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Modeling and Simulation in Python\n", + "\n", + "Quick implementation of Lotka-Volterra (with no explicit dt).\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": 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": 2, + "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": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def update_func(state, t, system):\n", + " \"\"\"Update the SIR model.\n", + " \n", + " state: State(x, y)\n", + " t: time\n", + " system: System object\n", + " \n", + " returns: State(x, y)\n", + " \"\"\"\n", + " unpack(system)\n", + " x, y = state\n", + "\n", + " dxdt = alpha * x - beta * x * y\n", + " dydt = delta * x * y - gamma * y\n", + " \n", + " x += dxdt\n", + " y += dydt\n", + " \n", + " return State(x=x, y=y)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
x1
y1
\n", + "
" + ], + "text/plain": [ + "x 1\n", + "y 1\n", + "dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(x=1, y=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
alpha0.05
beta0.10
gamma0.10
delta0.10
t00.00
t_end200.00
\n", + "
" + ], + "text/plain": [ + "alpha 0.05\n", + "beta 0.10\n", + "gamma 0.10\n", + "delta 0.10\n", + "t0 0.00\n", + "t_end 200.00\n", + "dtype: float64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = System(alpha=0.05,\n", + " beta=0.1,\n", + " gamma=0.1,\n", + " delta=0.1,\n", + " t0=0,\n", + " t_end=200)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
x0.95
y1.00
\n", + "
" + ], + "text/plain": [ + "x 0.95\n", + "y 1.00\n", + "dtype: float64" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "update_func(init, 0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
xy
0.011
1.00.951
2.00.90250.995
3.00.8578260.985299
4.00.8161960.97129
\n", + "
" + ], + "text/plain": [ + " x y\n", + "0.0 1 1\n", + "1.0 0.95 1\n", + "2.0 0.9025 0.995\n", + "3.0 0.857826 0.985299\n", + "4.0 0.816196 0.97129" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = run_simulation(system, update_func)\n", + "results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results.plot()" + ] + }, + { + "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/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/notebook.tex b/code/notebook.tex new file mode 100644 index 00000000..eedb14e4 --- /dev/null +++ b/code/notebook.tex @@ -0,0 +1,1162 @@ + +% Default to the notebook output style + + + + +% Inherit from the specified cell style. + + + + + +\documentclass[11pt]{article} + + + + \usepackage[T1]{fontenc} + % Nicer default font (+ math font) than Computer Modern for most use cases + \usepackage{mathpazo} + + % Basic figure setup, for now with no caption control since it's done + % automatically by Pandoc (which extracts ![](path) syntax from Markdown). + \usepackage{graphicx} + % We will generate all images so they have a width \maxwidth. This means + % that they will get their normal width if they fit onto the page, but + % are scaled down if they would overflow the margins. + \makeatletter + \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth + \else\Gin@nat@width\fi} + \makeatother + \let\Oldincludegraphics\includegraphics + % Set max figure width to be 80% of text width, for now hardcoded. + \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=.8\maxwidth]{#1}} + % Ensure that by default, figures have no caption (until we provide a + % proper Figure object with a Caption API and a way to capture that + % in the conversion process - todo). + \usepackage{caption} + \DeclareCaptionLabelFormat{nolabel}{} + \captionsetup{labelformat=nolabel} + + \usepackage{adjustbox} % Used to constrain images to a maximum size + \usepackage{xcolor} % Allow colors to be defined + \usepackage{enumerate} % Needed for markdown enumerations to work + \usepackage{geometry} % Used to adjust the document margins + \usepackage{amsmath} % Equations + \usepackage{amssymb} % Equations + \usepackage{textcomp} % defines textquotesingle + % Hack from http://tex.stackexchange.com/a/47451/13684: + \AtBeginDocument{% + \def\PYZsq{\textquotesingle}% Upright quotes in Pygmentized code + } + \usepackage{upquote} % Upright quotes for verbatim code + \usepackage{eurosym} % defines \euro + \usepackage[mathletters]{ucs} % Extended unicode (utf-8) support + \usepackage[utf8x]{inputenc} % Allow utf-8 characters in the tex document + \usepackage{fancyvrb} % verbatim replacement that allows latex + \usepackage{grffile} % extends the file name processing of package graphics + % to support a larger range + % The hyperref package gives us a pdf with properly built + % internal navigation ('pdf bookmarks' for the table of contents, + % internal cross-reference links, web links for URLs, etc.) + \usepackage{hyperref} + \usepackage{longtable} % longtable support required by pandoc >1.10 + \usepackage{booktabs} % table support for pandoc > 1.12.2 + \usepackage[inline]{enumitem} % IRkernel/repr support (it uses the enumerate* environment) + \usepackage[normalem]{ulem} % ulem is needed to support strikethroughs (\sout) + % normalem makes italics be italics, not underlines + + + + + % Colors for the hyperref package + \definecolor{urlcolor}{rgb}{0,.145,.698} + \definecolor{linkcolor}{rgb}{.71,0.21,0.01} + \definecolor{citecolor}{rgb}{.12,.54,.11} + + % ANSI colors + \definecolor{ansi-black}{HTML}{3E424D} + \definecolor{ansi-black-intense}{HTML}{282C36} + \definecolor{ansi-red}{HTML}{E75C58} + \definecolor{ansi-red-intense}{HTML}{B22B31} + \definecolor{ansi-green}{HTML}{00A250} + \definecolor{ansi-green-intense}{HTML}{007427} + \definecolor{ansi-yellow}{HTML}{DDB62B} + \definecolor{ansi-yellow-intense}{HTML}{B27D12} + \definecolor{ansi-blue}{HTML}{208FFB} + \definecolor{ansi-blue-intense}{HTML}{0065CA} + \definecolor{ansi-magenta}{HTML}{D160C4} + \definecolor{ansi-magenta-intense}{HTML}{A03196} + \definecolor{ansi-cyan}{HTML}{60C6C8} + \definecolor{ansi-cyan-intense}{HTML}{258F8F} + \definecolor{ansi-white}{HTML}{C5C1B4} + \definecolor{ansi-white-intense}{HTML}{A1A6B2} + + % commands and environments needed by pandoc snippets + % extracted from the output of `pandoc -s` + \providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} + % Add ',fontsize=\small' for more characters per line + \newenvironment{Shaded}{}{} + \newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{{#1}}} + \newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{{#1}}} + \newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{{#1}}}} + \newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{{#1}}} + \newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{{#1}}} + \newcommand{\RegionMarkerTok}[1]{{#1}} + \newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{{#1}}}} + \newcommand{\NormalTok}[1]{{#1}} + + % Additional commands for more recent versions of Pandoc + \newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{{#1}}} + \newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{{#1}}} + \newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{{#1}}} + \newcommand{\ImportTok}[1]{{#1}} + \newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{{#1}}}} + \newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{{#1}}} + \newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{{#1}}}} + \newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{{#1}}} + \newcommand{\BuiltInTok}[1]{{#1}} + \newcommand{\ExtensionTok}[1]{{#1}} + \newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{{#1}}} + \newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{{#1}}} + \newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + \newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{{#1}}}}} + + + % Define a nice break command that doesn't care if a line doesn't already + % exist. + \def\br{\hspace*{\fill} \\* } + % Math Jax compatability definitions + \def\gt{>} + \def\lt{<} + % Document parameters + \title{Project\_3 } + + + + + % Pygments definitions + +\makeatletter +\def\PY@reset{\let\PY@it=\relax \let\PY@bf=\relax% + \let\PY@ul=\relax \let\PY@tc=\relax% + \let\PY@bc=\relax \let\PY@ff=\relax} +\def\PY@tok#1{\csname PY@tok@#1\endcsname} +\def\PY@toks#1+{\ifx\relax#1\empty\else% + \PY@tok{#1}\expandafter\PY@toks\fi} +\def\PY@do#1{\PY@bc{\PY@tc{\PY@ul{% + \PY@it{\PY@bf{\PY@ff{#1}}}}}}} +\def\PY#1#2{\PY@reset\PY@toks#1+\relax+\PY@do{#2}} + +\expandafter\def\csname PY@tok@w\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} +\expandafter\def\csname PY@tok@c\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@cp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.74,0.48,0.00}{##1}}} +\expandafter\def\csname PY@tok@k\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@kp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@kt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.69,0.00,0.25}{##1}}} +\expandafter\def\csname PY@tok@o\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@ow\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@nb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@nc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@nn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@ne\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.82,0.25,0.23}{##1}}} +\expandafter\def\csname PY@tok@nv\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@no\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@nl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@ni\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.60,0.60,0.60}{##1}}} +\expandafter\def\csname PY@tok@na\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.49,0.56,0.16}{##1}}} +\expandafter\def\csname PY@tok@nt\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@nd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.67,0.13,1.00}{##1}}} +\expandafter\def\csname PY@tok@s\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sd\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@si\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@se\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.13}{##1}}} +\expandafter\def\csname PY@tok@sr\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.40,0.53}{##1}}} +\expandafter\def\csname PY@tok@ss\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@sx\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@m\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@gh\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@gu\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@gd\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@gi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} +\expandafter\def\csname PY@tok@gr\endcsname{\def\PY@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} +\expandafter\def\csname PY@tok@ge\endcsname{\let\PY@it=\textit} +\expandafter\def\csname PY@tok@gs\endcsname{\let\PY@bf=\textbf} +\expandafter\def\csname PY@tok@gp\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PY@tok@go\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.53,0.53,0.53}{##1}}} +\expandafter\def\csname PY@tok@gt\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} +\expandafter\def\csname PY@tok@err\endcsname{\def\PY@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} +\expandafter\def\csname PY@tok@kc\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@kd\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@kn\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@kr\endcsname{\let\PY@bf=\textbf\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@bp\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.50,0.00}{##1}}} +\expandafter\def\csname PY@tok@fm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.00,0.00,1.00}{##1}}} +\expandafter\def\csname PY@tok@vc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@vg\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@vi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@vm\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.10,0.09,0.49}{##1}}} +\expandafter\def\csname PY@tok@sa\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sc\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@dl\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@s2\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@sh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@s1\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.73,0.13,0.13}{##1}}} +\expandafter\def\csname PY@tok@mb\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@mf\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@mh\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@mi\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@il\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@mo\endcsname{\def\PY@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PY@tok@ch\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@cm\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@cpf\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@c1\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} +\expandafter\def\csname PY@tok@cs\endcsname{\let\PY@it=\textit\def\PY@tc##1{\textcolor[rgb]{0.25,0.50,0.50}{##1}}} + +\def\PYZbs{\char`\\} +\def\PYZus{\char`\_} +\def\PYZob{\char`\{} +\def\PYZcb{\char`\}} +\def\PYZca{\char`\^} +\def\PYZam{\char`\&} +\def\PYZlt{\char`\<} +\def\PYZgt{\char`\>} +\def\PYZsh{\char`\#} +\def\PYZpc{\char`\%} +\def\PYZdl{\char`\$} +\def\PYZhy{\char`\-} +\def\PYZsq{\char`\'} +\def\PYZdq{\char`\"} +\def\PYZti{\char`\~} +% for compatibility with earlier versions +\def\PYZat{@} +\def\PYZlb{[} +\def\PYZrb{]} +\makeatother + + + % Exact colors from NB + \definecolor{incolor}{rgb}{0.0, 0.0, 0.5} + \definecolor{outcolor}{rgb}{0.545, 0.0, 0.0} + + + + + % Prevent overflowing lines due to hard-to-break entities + \sloppy + % Setup hyperref package + \hypersetup{ + breaklinks=true, % so long urls are correctly broken across lines + colorlinks=true, + urlcolor=urlcolor, + linkcolor=linkcolor, + citecolor=citecolor, + } + % Slightly bigger margins than the latex defaults + + \geometry{verbose,tmargin=1in,bmargin=1in,lmargin=1in,rmargin=1in} + + + + \begin{document} + + + \maketitle + + + + + \hypertarget{why-walk-when-you-can-zipline}{% +\section{Why Walk When You Can +Zipline?}\label{why-walk-when-you-can-zipline}} + +\hypertarget{sam-daitzman-and-jocelyn-jimenez}{% +\subsection{Sam Daitzman and Jocelyn +Jimenez}\label{sam-daitzman-and-jocelyn-jimenez}} + +December, 2018 + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{c+c1}{\PYZsh{} Configure Jupyter so figures appear in the notebook} + \PY{o}{\PYZpc{}}\PY{k}{matplotlib} inline + + \PY{c+c1}{\PYZsh{} Configure Jupyter to display the assigned value after an assignment} + \PY{o}{\PYZpc{}}\PY{k}{config} InteractiveShell.ast\PYZus{}node\PYZus{}interactivity=\PYZsq{}last\PYZsq{} + + \PY{c+c1}{\PYZsh{} import functions from the modsim.py module} + \PY{k+kn}{from} \PY{n+nn}{modsim} \PY{k}{import} \PY{o}{*} +\end{Verbatim} + + + \hypertarget{introduction}{% +\section{Introduction}\label{introduction}} + +Although Olin is a very small campus, it is sometimes very tedious +having to walk through various curved paths and flights of stairs. We +noticed that there was great potential of a zip line from Olin's +Academic Center to West Hall. Initially there were multiple issues that +arose. For instance, where will the landing spot be? In the case of our +model, we believe it is best if the zip line ends on the corner room in +West Hall on the second floor because it gives us the fastest access to +most dorms in West Hall. If we were to ask ``Which floor in the AC +allows us to get faster to our destination?'' the answer would be +obvious, the 4th floor; but if you zipline at too steep an angle, you +are likely to get injured. As a result, we decided to take into +consideration the safety of the individual in order to make it a more +useful model. Our model asks what the fastest safe zip line starting +mount-point would be to get from the AC to West Hall as fast as (safely) +possible. Stick around to find out where to anchor a zip-line in the +Academic Center. + + \hypertarget{code-setup}{% +\section{Code Setup}\label{code-setup}} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{c+c1}{\PYZsh{} units!} + \PY{n}{year} \PY{o}{=} \PY{n}{UNITS}\PY{o}{.}\PY{n}{year} + \PY{n}{s} \PY{o}{=} \PY{n}{UNITS}\PY{o}{.}\PY{n}{second} + \PY{n}{N} \PY{o}{=} \PY{n}{UNITS}\PY{o}{.}\PY{n}{newton} + \PY{n}{kg} \PY{o}{=} \PY{n}{UNITS}\PY{o}{.}\PY{n}{kilogram} + \PY{n}{m} \PY{o}{=} \PY{n}{UNITS}\PY{o}{.}\PY{n}{meter} +\end{Verbatim} + + + To prove the point that is is a good idea for Olin to have a zip line, +we modeled how the change in position will affect the velocity of the +individual. We considered important initial/constant variables like the +starting position, where (0,0) is at the tallest part of the Academic +Center. For the following model, the starting velocity of the person in +the x and y dimensions is 0 m/s, which can be seen below. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{c+c1}{\PYZsh{}Starting position on the x and y axis} + \PY{n}{x\PYZus{}0} \PY{o}{=} \PY{p}{(}\PY{l+m+mi}{0} \PY{o}{*} \PY{n}{m}\PY{p}{)} + \PY{n}{y\PYZus{}0} \PY{o}{=} \PY{p}{(}\PY{l+m+mi}{0} \PY{o}{*} \PY{n}{m}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Starting velocity in the x and y dimension} + \PY{n}{vx\PYZus{}0} \PY{o}{=} \PY{l+m+mi}{0} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s} + \PY{n}{vy\PYZus{}0} \PY{o}{=} \PY{l+m+mi}{0} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s} + + \PY{n}{init} \PY{o}{=} \PY{n}{State}\PY{p}{(}\PY{n}{x}\PY{o}{=}\PY{n}{x\PYZus{}0}\PY{p}{,} + \PY{n}{y}\PY{o}{=}\PY{n}{y\PYZus{}0}\PY{p}{,} + \PY{n}{vx}\PY{o}{=}\PY{n}{vx\PYZus{}0}\PY{p}{,} + \PY{n}{vy}\PY{o}{=}\PY{n}{vy\PYZus{}0}\PY{p}{)} +\end{Verbatim} + + + Other constants include the mass, density, and area of the individual, +gravity, drag force, the height of the West Hall window, the maximum +landing speed and the end time. These constants are defined as the +parameters of the model. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{params} \PY{o}{=} \PY{n}{Params}\PY{p}{(}\PY{n}{init}\PY{o}{=}\PY{n}{init}\PY{p}{,} + + \PY{c+c1}{\PYZsh{} Mass of the individual ziplining} + \PY{n}{m\PYZus{}human}\PY{o}{=}\PY{l+m+mi}{70} \PY{o}{*} \PY{n}{kg}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Gravity} + \PY{n}{grav} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{0} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{2}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{9.81}\PY{p}{)}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Mass Density of the Fluid} + \PY{n}{rho} \PY{o}{=} \PY{l+m+mf}{1.275} \PY{o}{*} \PY{n}{kg} \PY{o}{/} \PY{n}{m} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{3}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Reference Area of individual} + \PY{n}{area} \PY{o}{=} \PY{l+m+mf}{0.7} \PY{o}{*} \PY{n}{m} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{2}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Drag Coefficent } + \PY{n}{cd} \PY{o}{=} \PY{l+m+mf}{1.2}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}End Time} + \PY{n}{t\PYZus{}end}\PY{o}{=}\PY{l+m+mf}{100e6} \PY{o}{*} \PY{n}{s}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Height of West Hall Window in meters} + \PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height} \PY{o}{=} \PY{l+m+mf}{59.3}\PY{p}{,} + + \PY{c+c1}{\PYZsh{}Maximum Landing Speed} + \PY{n}{max\PYZus{}landing\PYZus{}speed} \PY{o}{=} \PY{l+m+mi}{12} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s} + \PY{p}{)} + + \PY{c+c1}{\PYZsh{}Creates a system containing constants} + \PY{k}{def} \PY{n+nf}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{zipline}\PY{p}{)}\PY{p}{:} + \PY{n}{unpack}\PY{p}{(}\PY{n}{params}\PY{p}{)} + + \PY{n}{system} \PY{o}{=} \PY{n}{System}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{z}\PY{o}{=}\PY{n}{zipline}\PY{p}{)} + + \PY{k}{return} \PY{n}{system} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} init x 0 meter + y 0 me{\ldots} + m\_human 70 kilogram + grav [0.0 meter / second ** 2, -9.81 meter / second{\ldots} + rho 1.275 kilogram / meter ** 3 + area 0.7 meter ** 2 + cd 1.2 + t\_end 100000000.0 second + WH\_window\_abs\_height 59.3 + max\_landing\_speed 12.0 meter / second + z [100.0 meter, -25.1 meter] + dtype: object +\end{Verbatim} + + \hypertarget{force-functions}{% +\section{Force Functions}\label{force-functions}} + + We decided to calculate the different forces that might affect the +zip-liner by including forces like gravity, drag, net and effective +force. The cells below demonstrate functions and equations that +contribute to the final velocity of the individual. We calculate the +force of gravity pulling the zipliner downward and the drag force +resisting their motion, and their sum is the net force. Then we +calculate the effective force, which is the component of the force in +line with the zip-line. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{earth\PYZus{}grav}\PY{p}{(}\PY{n}{m}\PY{p}{,} \PY{n}{g}\PY{p}{)}\PY{p}{:} + \PY{k}{return} \PY{n}{g} \PY{o}{*} \PY{n}{m} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{earth\PYZus{}grav}\PY{p}{(}\PY{l+m+mi}{100}\PY{o}{*}\PY{n}{kg}\PY{p}{,} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)}\PY{o}{.}\PY{n}{grav}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $\begin{pmatrix}0.0 & -981.0\end{pmatrix}\ \frac{\mathrm{kilogram} \cdot \mathrm{meter}}{\mathrm{second}^{2}}$ + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{drag\PYZus{}force}\PY{p}{(}\PY{n}{rho}\PY{p}{,} \PY{n}{v}\PY{p}{,} \PY{n}{area}\PY{p}{,} \PY{n}{cd}\PY{p}{)}\PY{p}{:} + + \PY{c+c1}{\PYZsh{}Direction} + \PY{n}{direction}\PY{o}{=} \PY{o}{\PYZhy{}}\PY{n}{v}\PY{o}{.}\PY{n}{hat}\PY{p}{(}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Drag Equation} + \PY{n}{drag} \PY{o}{=} \PY{p}{(}\PY{l+m+mi}{1}\PY{o}{/}\PY{l+m+mi}{2}\PY{p}{)} \PY{o}{*} \PY{n}{rho} \PY{o}{*} \PY{n}{v}\PY{o}{.}\PY{n}{mag}\PY{o}{*}\PY{o}{*}\PY{l+m+mi}{2} \PY{o}{*}\PY{n}{area} \PY{o}{*} \PY{n}{cd} + + \PY{c+c1}{\PYZsh{}Drag as a Vector} + \PY{k}{return} \PY{n}{direction} \PY{o}{*} \PY{n}{drag} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{drag\PYZus{}force}\PY{p}{(}\PY{l+m+mi}{20} \PY{o}{*} \PY{n}{kg} \PY{o}{/} \PY{n}{m} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{3}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{3} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s}\PY{p}{,} \PY{l+m+mi}{4}\PY{p}{)}\PY{p}{,} \PY{l+m+mi}{10} \PY{o}{*} \PY{n}{m} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{2}\PY{p}{,} \PY{l+m+mf}{0.8}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $\begin{pmatrix}-1200.0 & -1600.0\end{pmatrix}\ \frac{\mathrm{kilogram} \cdot \mathrm{meter}}{\mathrm{second}^{2}}$ + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{effective\PYZus{}force}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{l+s+sd}{\PYZdq{}\PYZdq{}\PYZdq{}Calculates gravitational force for arbitrary objects\PYZdq{}\PYZdq{}\PYZdq{}} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + \PY{n}{unpack}\PY{p}{(}\PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Force of Gravity} + \PY{n}{grav\PYZus{}f} \PY{o}{=} \PY{n}{earth\PYZus{}grav}\PY{p}{(}\PY{n}{m\PYZus{}human}\PY{p}{,} \PY{n}{grav}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Force of Drag} + \PY{n}{drag\PYZus{}f} \PY{o}{=} \PY{n}{drag\PYZus{}force}\PY{p}{(}\PY{n}{rho}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{)}\PY{p}{,} \PY{n}{area}\PY{p}{,} \PY{n}{cd}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Net Force} + \PY{n}{net\PYZus{}force} \PY{o}{=} \PY{n}{grav\PYZus{}f} \PY{o}{+} \PY{n}{drag\PYZus{}f} + + \PY{c+c1}{\PYZsh{}Effective Force} + \PY{n}{effective\PYZus{}force} \PY{o}{=} \PY{n}{net\PYZus{}force}\PY{o}{.}\PY{n}{proj}\PY{p}{(}\PY{n}{z}\PY{o}{.}\PY{n}{hat}\PY{p}{(}\PY{p}{)}\PY{p}{)} + + \PY{k}{return} \PY{n}{effective\PYZus{}force} +\end{Verbatim} + + + \hypertarget{simulation-setup}{% +\section{Simulation Setup}\label{simulation-setup}} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{slope\PYZus{}func}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{t}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + + \PY{n}{unpack}\PY{p}{(}\PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} make velocity} + \PY{n}{v} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} calculate force} + \PY{n}{force} \PY{o}{=} \PY{n}{effective\PYZus{}force}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} calculate acceleration} + \PY{n}{a} \PY{o}{=} \PY{n}{force} \PY{o}{*} \PY{p}{(}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{m\PYZus{}human}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} cast acceleration to modsimvector} + \PY{n}{a} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{a}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{,} \PY{n}{a}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} return velocity and acceleration} + \PY{k}{return} \PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{,} \PY{n}{a}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{a}\PY{o}{.}\PY{n}{y} + + \PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{,} \PY{n}{ax}\PY{p}{,} \PY{n}{ay} \PY{o}{=} \PY{n}{slope\PYZus{}func}\PY{p}{(}\PY{n}{init}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{,} \PY{n}{ax}\PY{p}{,} \PY{n}{ay}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +0.0 meter / second 0.0 meter / second 2.3163759958833534 meter / second ** 2 -0.5814103749667217 meter / second ** 2 + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{event\PYZus{}func}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{t}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + \PY{n}{position} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{)} + \PY{k}{return} \PY{n}{position}\PY{o}{.}\PY{n}{mag} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{mag} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{event\PYZus{}func}\PY{p}{(}\PY{n}{init}\PY{p}{,} \PY{l+m+mi}{0}\PY{p}{,} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $-103.10193984596022\ \mathrm{meter}$ + + + + \hypertarget{simulation}{% +\section{Simulation}\label{simulation}} + + This simulation shows the zip-liner descending from the AC to West Hall +from a particular starting height. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{results}\PY{p}{,} \PY{n}{details} \PY{o}{=} \PY{n}{run\PYZus{}ode\PYZus{}solver}\PY{p}{(}\PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)}\PY{p}{,} \PY{n}{slope\PYZus{}func}\PY{p}{,} \PY{n}{events}\PY{o}{=}\PY{n}{event\PYZus{}func}\PY{p}{,} \PY{n}{method}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{LSODA}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{results}\PY{o}{.}\PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{y}\PY{o}{.}\PY{n}{magnitude}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{go\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_23_0.png} + \end{center} + { \hspace*{\fill} \\} + + This plot shows the position over time. Each point along the line is a +different moment in time. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{y}\PY{p}{,} \PY{n}{label}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{label}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Position over Time}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Time (s)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{legend}\PY{o}{=}\PY{k+kc}{True}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_25_0.png} + \end{center} + { \hspace*{\fill} \\} + + These lines represent the change in X and Y position over time. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{v\PYZus{}final} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vx}\PY{p}{)} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s}\PY{p}{,} \PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vy}\PY{p}{)}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{v\PYZus{}final}\PY{o}{.}\PY{n}{mag}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +15.73897673293782 meter / second + + \end{Verbatim} + + The cell above shows how we obtain the arrival velocity. + + \hypertarget{sweeping-start-height}{% +\section{Sweeping Start Height}\label{sweeping-start-height}} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{thresholds} \PY{o}{=} \PY{n}{linspace}\PY{p}{(}\PY{l+m+mi}{60}\PY{p}{,} \PY{l+m+mi}{90}\PY{p}{,} \PY{l+m+mi}{10}\PY{p}{)} + \PY{k}{for} \PY{n}{i}\PY{p}{,}\PY{n}{e} \PY{o+ow}{in} \PY{n+nb}{enumerate}\PY{p}{(}\PY{n}{thresholds}\PY{p}{)}\PY{p}{:} + \PY{n}{thresholds}\PY{p}{[}\PY{n}{i}\PY{p}{]} \PY{o}{\PYZhy{}}\PY{o}{=} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{thresholds}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +[ 0.7 4.03333333 7.36666667 10.7 14.03333333 17.36666667 + 20.7 24.03333333 27.36666667 30.7 ] + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{for} \PY{n}{y} \PY{o+ow}{in} \PY{n}{thresholds}\PY{p}{:} + \PY{n}{system} \PY{o}{=} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{n}{y}\PY{p}{)}\PY{p}{)} + \PY{n}{results}\PY{p}{,} \PY{n}{details} \PY{o}{=} \PY{n}{run\PYZus{}ode\PYZus{}solver}\PY{p}{(}\PY{n}{system}\PY{p}{,} \PY{n}{slope\PYZus{}func}\PY{p}{,} \PY{n}{events}\PY{o}{=}\PY{n}{event\PYZus{}func}\PY{p}{,} \PY{n}{method}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{LSODA}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{results}\PY{o}{.}\PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{y}\PY{o}{.}\PY{n}{magnitude} \PY{o}{+} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{ro\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall (Different Starting Points)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} [] +\end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_31_10.png} + \end{center} + { \hspace*{\fill} \\} + + The plot above shows the process of zip-lining from various starting +heights. We obtained the range of height differences using Olin +College's blueprints, by comparing the absolute heights of the top of +the AC, bottom of the AC, and our destination room in West Hall. + + \hypertarget{finding-end-velocities}{% +\section{Finding End Velocities}\label{finding-end-velocities}} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{thresholds} \PY{o}{=} \PY{n}{linspace}\PY{p}{(}\PY{l+m+mi}{60}\PY{p}{,} \PY{l+m+mi}{90}\PY{p}{,} \PY{l+m+mi}{15}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{thresholds}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +[60. 62.14285714 64.28571429 66.42857143 68.57142857 70.71428571 + 72.85714286 75. 77.14285714 79.28571429 81.42857143 83.57142857 + 85.71428571 87.85714286 90. ] + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{landing\PYZus{}speed}\PY{p}{(}\PY{n}{startHeight}\PY{p}{,} \PY{n}{params}\PY{p}{)}\PY{p}{:} + \PY{n}{height\PYZus{}y} \PY{o}{=} \PY{n}{startHeight} \PY{o}{\PYZhy{}} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height} + \PY{n}{system} \PY{o}{=} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{n}{height\PYZus{}y}\PY{p}{)}\PY{p}{)} + \PY{n}{results}\PY{p}{,} \PY{n}{details} \PY{o}{=} \PY{n}{run\PYZus{}ode\PYZus{}solver}\PY{p}{(}\PY{n}{system}\PY{p}{,} \PY{n}{slope\PYZus{}func}\PY{p}{,} \PY{n}{events}\PY{o}{=}\PY{n}{event\PYZus{}func}\PY{p}{,} \PY{n}{method}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{LSODA}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{v\PYZus{}final} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vx}\PY{p}{)} \PY{o}{*} \PY{n}{m} \PY{o}{/} \PY{n}{s}\PY{p}{,} \PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vy}\PY{p}{)}\PY{p}{)} + \PY{k}{return} \PY{n}{v\PYZus{}final}\PY{o}{.}\PY{n}{mag} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{landing\PYZus{}speed}\PY{p}{(}\PY{l+m+mi}{60}\PY{p}{,} \PY{n}{params}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $2.651921049001805\ \frac{\mathrm{meter}}{\mathrm{second}}$ + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{landing} \PY{o}{=} \PY{n}{SweepSeries}\PY{p}{(}\PY{p}{)} + + \PY{k}{for} \PY{n}{y} \PY{o+ow}{in} \PY{n}{thresholds}\PY{p}{:} + \PY{n}{landing}\PY{p}{[}\PY{n}{y}\PY{p}{]} \PY{o}{=} \PY{n}{landing\PYZus{}speed}\PY{p}{(}\PY{n}{y}\PY{p}{,} \PY{n}{params}\PY{p}{)} + + \PY{n}{plot}\PY{p}{(}\PY{n}{landing}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{ro\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Starting Height (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Landing speed(m/s)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_37_0.png} + \end{center} + { \hspace*{\fill} \\} + + This plot shows the landing speed depending on starting height. By +looking at this plot, we can choose a particular start height depending +on our desired landing speed. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{landing} +\end{Verbatim} + + +\begin{Verbatim}[commandchars=\\\{\}] +{\color{outcolor}Out[{\color{outcolor}0}]:} 60.000000 2.651921049001805 meter / second + 62.142857 5.343746587591299 meter / second + 64.285714 7.074894599711499 meter / second + 66.428571 8.456477911463677 meter / second + 68.571429 9.63932336233028 meter / second + 70.714286 10.688617419758609 meter / second + 72.857143 11.63984596447041 meter / second + 75.000000 12.514808133787712 meter / second + 77.142857 13.327981059112659 meter / second + 79.285714 14.08954798936296 meter / second + 81.428571 14.806934586049014 meter / second + 83.571429 15.48581549457082 meter / second + 85.714286 16.130651554946795 meter / second + 87.857143 16.745008583241006 meter / second + 90.000000 17.33179174000917 meter / second + dtype: object +\end{Verbatim} + + \hypertarget{ideal-starting-height}{% +\section{Ideal Starting Height}\label{ideal-starting-height}} + + We wanted to calculate our ideal starting height. We wrote an error +function that approaches zero as the ideal starting height is +approached. The maximum landing speed is determined based on the maximum +safe landing speed of a hang-glider, which exerts analagous forces on a +human. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{error\PYZus{}func}\PY{p}{(}\PY{n}{startHeight}\PY{p}{,} \PY{n}{params}\PY{p}{)}\PY{p}{:} + \PY{k}{return} \PY{n}{params}\PY{o}{.}\PY{n}{max\PYZus{}landing\PYZus{}speed} \PY{o}{\PYZhy{}} \PY{n}{landing\PYZus{}speed}\PY{p}{(}\PY{n}{startHeight}\PY{p}{,} \PY{n}{params}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{error\PYZus{}func}\PY{p}{(}\PY{l+m+mi}{60}\PY{p}{,} \PY{n}{params}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $9.348078950998195\ \frac{\mathrm{meter}}{\mathrm{second}}$ + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{res} \PY{o}{=} \PY{n}{fsolve}\PY{p}{(}\PY{n}{error\PYZus{}func}\PY{p}{,} \PY{l+m+mi}{75}\PY{p}{,} \PY{n}{params}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{res}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +[73.71902744] + + \end{Verbatim} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{error\PYZus{}func}\PY{p}{(}\PY{n}{fsolve}\PY{p}{(}\PY{n}{error\PYZus{}func}\PY{p}{,} \PY{l+m+mi}{75}\PY{p}{,} \PY{n}{params}\PY{p}{)}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{,} \PY{n}{params}\PY{p}{)} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $2.1085355683680973e-12\ \frac{\mathrm{meter}}{\mathrm{second}}$ + + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{system} \PY{o}{=} \PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{p}{(}\PY{n}{fsolve}\PY{p}{(}\PY{n}{error\PYZus{}func}\PY{p}{,} \PY{l+m+mi}{75}\PY{p}{,} \PY{n}{params}\PY{p}{)}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]} \PY{o}{\PYZhy{}} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height}\PY{p}{)}\PY{p}{)}\PY{p}{)} + \PY{n}{results}\PY{p}{,} \PY{n}{details} \PY{o}{=} \PY{n}{run\PYZus{}ode\PYZus{}solver}\PY{p}{(}\PY{n}{system}\PY{p}{,} \PY{n}{slope\PYZus{}func}\PY{p}{,} \PY{n}{events}\PY{o}{=}\PY{n}{event\PYZus{}func}\PY{p}{,} \PY{n}{method}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{LSODA}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{results}\PY{o}{.}\PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{y}\PY{o}{.}\PY{n}{magnitude} \PY{o}{+} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{ro\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_46_0.png} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{y}\PY{o}{.}\PY{n}{magnitude} \PY{o}{+} \PY{n}{params}\PY{o}{.}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{ro\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Time (s)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_47_0.png} + \end{center} + { \hspace*{\fill} \\} + + This plot represents the ideal descent of a zip-liner from the AC to +West Hall. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{Vector}\PY{p}{(}\PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vx}\PY{p}{)}\PY{p}{,} \PY{n}{get\PYZus{}last\PYZus{}value}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{vy}\PY{p}{)}\PY{p}{)}\PY{o}{.}\PY{n}{mag} +\end{Verbatim} + +\texttt{\color{outcolor}Out[{\color{outcolor}0}]:} + + $11.999999999997891\ dimensionless$ + + + + The zip-liner arrives incredibly close to, but slightly below, the +maximum safe velocity. + + \hypertarget{conclusions}{% +\section{Conclusions}\label{conclusions}} + +In this model, we find that the ideal starting height to arrive as +quickly as possible (but at a safe speed) when zip-lining to West Hall +would be around the third floor (about 15m above the first floor of the +AC). The zip-liner would arrive safely at a speed slightly below 12 m/s. +Before attempting this, we would want to conduct more precise modeling +and account for the forces we've abstracted out of our model, like the +tension in the rope and the changing normal force of the rope against +the zip-liner through the handle. + + \hypertarget{future-steps-questioning-assumptions.-straight-zipline}{% +\section{Future Steps: Questioning Assumptions. Straight +Zipline?}\label{future-steps-questioning-assumptions.-straight-zipline}} + + We didn't have time to finish this modeling work, but with more work we +might be able to simulate a more accurate zip-line curvature. To +simplify our modeling, we assumed the line would be under infinite +tension (in other words, perfectly straight) and the wheel would roll +perfectly. For the wheel to behave efficiently, it's more likely that +the line would have to maintain some slack. To get a more accurate +estimate, we would continue this modeling work. + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{calc\PYZus{}parabola\PYZus{}vertex}\PY{p}{(}\PY{n}{x1}\PY{p}{,} \PY{n}{y1}\PY{p}{,} \PY{n}{x2}\PY{p}{,} \PY{n}{y2}\PY{p}{,} \PY{n}{x3}\PY{p}{,} \PY{n}{y3}\PY{p}{)}\PY{p}{:} + \PY{l+s+sd}{\PYZsq{}\PYZsq{}\PYZsq{}} + \PY{l+s+sd}{ Adapted and modifed to get the unknowns for defining a parabola:} + \PY{l+s+sd}{ http://stackoverflow.com/questions/717762/how\PYZhy{}to\PYZhy{}calculate\PYZhy{}the\PYZhy{}vertex\PYZhy{}of\PYZhy{}a\PYZhy{}parabola\PYZhy{}given\PYZhy{}three\PYZhy{}points} + \PY{l+s+sd}{ With thanks to http://chris35wills.github.io/parabola\PYZus{}python/} + \PY{l+s+sd}{ \PYZsq{}\PYZsq{}\PYZsq{}} + + \PY{n}{d} \PY{o}{=} \PY{p}{(}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{x2}\PY{p}{)} \PY{o}{*} \PY{p}{(}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{x3}\PY{p}{)} \PY{o}{*} \PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x3}\PY{p}{)}\PY{p}{;} + \PY{n}{A} \PY{o}{=} \PY{p}{(}\PY{n}{x3} \PY{o}{*} \PY{p}{(}\PY{n}{y2}\PY{o}{\PYZhy{}}\PY{n}{y1}\PY{p}{)} \PY{o}{+} \PY{n}{x2} \PY{o}{*} \PY{p}{(}\PY{n}{y1}\PY{o}{\PYZhy{}}\PY{n}{y3}\PY{p}{)} \PY{o}{+} \PY{n}{x1} \PY{o}{*} \PY{p}{(}\PY{n}{y3}\PY{o}{\PYZhy{}}\PY{n}{y2}\PY{p}{)}\PY{p}{)} \PY{o}{/} \PY{n}{d}\PY{p}{;} + \PY{n}{B} \PY{o}{=} \PY{p}{(}\PY{n}{x3}\PY{o}{*}\PY{n}{x3} \PY{o}{*} \PY{p}{(}\PY{n}{y1}\PY{o}{\PYZhy{}}\PY{n}{y2}\PY{p}{)} \PY{o}{+} \PY{n}{x2}\PY{o}{*}\PY{n}{x2} \PY{o}{*} \PY{p}{(}\PY{n}{y3}\PY{o}{\PYZhy{}}\PY{n}{y1}\PY{p}{)} \PY{o}{+} \PY{n}{x1}\PY{o}{*}\PY{n}{x1} \PY{o}{*} \PY{p}{(}\PY{n}{y2}\PY{o}{\PYZhy{}}\PY{n}{y3}\PY{p}{)}\PY{p}{)} \PY{o}{/} \PY{n}{d}\PY{p}{;} + \PY{n}{C} \PY{o}{=} \PY{p}{(}\PY{n}{x2} \PY{o}{*} \PY{n}{x3} \PY{o}{*} \PY{p}{(}\PY{n}{x2}\PY{o}{\PYZhy{}}\PY{n}{x3}\PY{p}{)} \PY{o}{*} \PY{n}{y1}\PY{o}{+}\PY{n}{x3} \PY{o}{*} \PY{n}{x1} \PY{o}{*} \PY{p}{(}\PY{n}{x3}\PY{o}{\PYZhy{}}\PY{n}{x1}\PY{p}{)} \PY{o}{*} \PY{n}{y2}\PY{o}{+}\PY{n}{x1} \PY{o}{*} \PY{n}{x2} \PY{o}{*} \PY{p}{(}\PY{n}{x1}\PY{o}{\PYZhy{}}\PY{n}{x2}\PY{p}{)} \PY{o}{*} \PY{n}{y3}\PY{p}{)} \PY{o}{/} \PY{n}{d}\PY{p}{;} + + \PY{k}{return} \PY{n}{A}\PY{p}{,}\PY{n}{B}\PY{p}{,}\PY{n}{C} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n+nb}{range} \PY{o}{=} \PY{n}{linrange}\PY{p}{(}\PY{l+m+mi}{60}\PY{p}{,} \PY{l+m+mi}{90}\PY{p}{,} \PY{l+m+mi}{5}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{:} + \PY{n}{xNum} \PY{o}{=} \PY{n}{linrange}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{100}\PY{p}{)} + \PY{n}{x1}\PY{p}{,}\PY{n}{y1}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{i}\PY{p}{]} + \PY{n}{x3}\PY{p}{,}\PY{n}{y3}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mf}{59.3}\PY{p}{]} + + \PY{n}{x2}\PY{p}{,}\PY{n}{y2}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{50}\PY{p}{,}\PY{n}{y3}\PY{o}{\PYZhy{}}\PY{p}{(}\PY{n}{y1}\PY{o}{\PYZhy{}}\PY{n}{y3}\PY{p}{)}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{)}\PY{p}{]} + + \PY{c+c1}{\PYZsh{}Calculate the unknowns of the equation y=ax\PYZca{}2+bx+c} + \PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c}\PY{o}{=}\PY{n}{calc\PYZus{}parabola\PYZus{}vertex}\PY{p}{(}\PY{n}{x1}\PY{p}{,} \PY{n}{y1}\PY{p}{,} \PY{n}{x2}\PY{p}{,} \PY{n}{y2}\PY{p}{,} \PY{n}{x3}\PY{p}{,} \PY{n}{y3}\PY{p}{)} + + \PY{n}{zline} \PY{o}{=} \PY{n}{SweepSeries}\PY{p}{(}\PY{p}{)} + \PY{n}{dz} \PY{o}{=} \PY{n}{SweepSeries}\PY{p}{(}\PY{p}{)} + + \PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n}{xNum}\PY{p}{:} + \PY{n}{zline}\PY{p}{[}\PY{n}{x}\PY{p}{]} \PY{o}{=} \PY{n}{a} \PY{o}{*} \PY{n}{x} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{2} \PY{o}{+} \PY{n}{b} \PY{o}{*} \PY{n}{x} \PY{o}{+} \PY{n}{c} + \PY{n}{dz}\PY{p}{[}\PY{n}{x}\PY{p}{]} \PY{o}{=} \PY{l+m+mi}{2} \PY{o}{*} \PY{n}{a} \PY{o}{*} \PY{n}{x} \PY{o}{+} \PY{n}{b} + + \PY{n}{plot}\PY{p}{(}\PY{n}{xNum}\PY{p}{,} \PY{n}{zline}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Parabolic Zip\PYZhy{}line Curves}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_56_0.png} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{for} \PY{n}{i} \PY{o+ow}{in} \PY{n+nb}{range}\PY{p}{:} + \PY{n}{xNum} \PY{o}{=} \PY{n}{linrange}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{,} \PY{l+m+mi}{100}\PY{p}{)} + \PY{n}{x1}\PY{p}{,}\PY{n}{y1}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{i}\PY{p}{]} + \PY{n}{x3}\PY{p}{,}\PY{n}{y3}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{100}\PY{p}{,}\PY{l+m+mf}{59.3}\PY{p}{]} + + \PY{n}{x2}\PY{p}{,}\PY{n}{y2}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{50}\PY{p}{,}\PY{n}{y3}\PY{o}{\PYZhy{}}\PY{p}{(}\PY{n}{y1}\PY{o}{\PYZhy{}}\PY{n}{y3}\PY{p}{)}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{)}\PY{p}{]} + + \PY{c+c1}{\PYZsh{}Calculate the unknowns of the equation y=ax\PYZca{}2+bx+c} + \PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c}\PY{o}{=}\PY{n}{calc\PYZus{}parabola\PYZus{}vertex}\PY{p}{(}\PY{n}{x1}\PY{p}{,} \PY{n}{y1}\PY{p}{,} \PY{n}{x2}\PY{p}{,} \PY{n}{y2}\PY{p}{,} \PY{n}{x3}\PY{p}{,} \PY{n}{y3}\PY{p}{)} + + \PY{n}{zline} \PY{o}{=} \PY{n}{SweepSeries}\PY{p}{(}\PY{p}{)} + \PY{n}{dz} \PY{o}{=} \PY{n}{SweepSeries}\PY{p}{(}\PY{p}{)} + + \PY{k}{for} \PY{n}{x} \PY{o+ow}{in} \PY{n}{xNum}\PY{p}{:} + \PY{n}{zline}\PY{p}{[}\PY{n}{x}\PY{p}{]} \PY{o}{=} \PY{n}{a} \PY{o}{*} \PY{n}{x} \PY{o}{*}\PY{o}{*} \PY{l+m+mi}{2} \PY{o}{+} \PY{n}{b} \PY{o}{*} \PY{n}{x} \PY{o}{+} \PY{n}{c} + \PY{n}{dz}\PY{p}{[}\PY{n}{x}\PY{p}{]} \PY{o}{=} \PY{l+m+mi}{2} \PY{o}{*} \PY{n}{a} \PY{o}{*} \PY{n}{x} \PY{o}{+} \PY{n}{b} + + \PY{n}{plot}\PY{p}{(}\PY{n}{xNum}\PY{p}{,} \PY{n}{dz}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Parabolic Zip\PYZhy{}line Derivatives}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_57_0.png} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{effective\PYZus{}parabolic\PYZus{}force}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{l+s+sd}{\PYZdq{}\PYZdq{}\PYZdq{}Calculates gravitational force for arbitrary objects\PYZdq{}\PYZdq{}\PYZdq{}} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + \PY{n}{unpack}\PY{p}{(}\PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Force of Gravity} + \PY{n}{grav\PYZus{}f} \PY{o}{=} \PY{n}{earth\PYZus{}grav}\PY{p}{(}\PY{n}{m\PYZus{}human}\PY{p}{,} \PY{n}{grav}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Force of Drag} + \PY{n}{drag\PYZus{}f} \PY{o}{=} \PY{n}{drag\PYZus{}force}\PY{p}{(}\PY{n}{rho}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{)}\PY{p}{,} \PY{n}{area}\PY{p}{,} \PY{n}{cd}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Net Force} + \PY{n}{net\PYZus{}force} \PY{o}{=} \PY{n}{grav\PYZus{}f} \PY{o}{+} \PY{n}{drag\PYZus{}f} + + \PY{c+c1}{\PYZsh{} Find parabola} + \PY{n}{x1}\PY{p}{,}\PY{n}{y1}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{,}\PY{n}{z}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{o}{.}\PY{n}{magnitude}\PY{p}{]} \PY{c+c1}{\PYZsh{} AC startpoint} + \PY{n}{x3}\PY{p}{,}\PY{n}{y3}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{100}\PY{p}{,}\PY{n}{WH\PYZus{}window\PYZus{}abs\PYZus{}height}\PY{p}{]} \PY{c+c1}{\PYZsh{} WH endpoint} + + \PY{n}{x2}\PY{p}{,}\PY{n}{y2}\PY{o}{=}\PY{p}{[}\PY{l+m+mi}{50}\PY{p}{,}\PY{n}{y3}\PY{o}{\PYZhy{}}\PY{p}{(}\PY{n}{y1}\PY{o}{\PYZhy{}}\PY{n}{y3}\PY{p}{)}\PY{o}{/}\PY{p}{(}\PY{l+m+mi}{2}\PY{o}{*}\PY{n}{pi}\PY{p}{)}\PY{p}{]} \PY{c+c1}{\PYZsh{} midpoint} + + \PY{c+c1}{\PYZsh{}Calculate the unknowns} + \PY{n}{a}\PY{p}{,}\PY{n}{b}\PY{p}{,}\PY{n}{c}\PY{o}{=}\PY{n}{calc\PYZus{}parabola\PYZus{}vertex}\PY{p}{(}\PY{n}{x1}\PY{p}{,} \PY{n}{y1}\PY{p}{,} \PY{n}{x2}\PY{p}{,} \PY{n}{y2}\PY{p}{,} \PY{n}{x3}\PY{p}{,} \PY{n}{y3}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} Find the tangent vector} + \PY{n}{tangent\PYZus{}vector} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{,} \PY{l+m+mi}{2} \PY{o}{*} \PY{n}{a} \PY{o}{*} \PY{n}{x} \PY{o}{+} \PY{n}{b}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{n}{tangent\PYZus{}vector}\PY{p}{)} + + \PY{c+c1}{\PYZsh{}Effective Force} + \PY{n}{effective\PYZus{}force} \PY{o}{=} \PY{n}{net\PYZus{}force}\PY{o}{.}\PY{n}{proj}\PY{p}{(}\PY{n}{tangent\PYZus{}vector}\PY{o}{.}\PY{n}{hat}\PY{p}{(}\PY{p}{)}\PY{p}{)} + + \PY{k}{return} \PY{n}{effective\PYZus{}force} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{slope\PYZus{}func\PYZus{}parabolic}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{t}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + + \PY{n}{unpack}\PY{p}{(}\PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} make velocity} + \PY{n}{v} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} calculate force} + \PY{n}{force} \PY{o}{=} \PY{n}{effective\PYZus{}parabolic\PYZus{}force}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{system}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} calculate acceleration} + \PY{n}{a} \PY{o}{=} \PY{n}{force} \PY{o}{*} \PY{p}{(}\PY{l+m+mi}{1}\PY{o}{/}\PY{n}{m\PYZus{}human}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} cast acceleration to modsimvector} + \PY{n}{a} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{a}\PY{p}{[}\PY{l+m+mi}{0}\PY{p}{]}\PY{p}{,} \PY{n}{a}\PY{p}{[}\PY{l+m+mi}{1}\PY{p}{]}\PY{p}{)} + + \PY{c+c1}{\PYZsh{} return velocity and acceleration} + \PY{k}{return} \PY{n}{vx}\PY{p}{,} \PY{n}{vy}\PY{p}{,} \PY{n}{a}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{a}\PY{o}{.}\PY{n}{y} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{k}{def} \PY{n+nf}{event\PYZus{}func\PYZus{}parabolic}\PY{p}{(}\PY{n}{state}\PY{p}{,} \PY{n}{t}\PY{p}{,} \PY{n}{system}\PY{p}{)}\PY{p}{:} + \PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{,} \PY{n}{vx}\PY{p}{,} \PY{n}{vy} \PY{o}{=} \PY{n}{state} + \PY{n}{position} \PY{o}{=} \PY{n}{Vector}\PY{p}{(}\PY{n}{x}\PY{p}{,} \PY{n}{y}\PY{p}{)} + \PY{k}{return} \PY{n}{position}\PY{o}{.}\PY{n}{mag} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{mag} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{results}\PY{p}{,} \PY{n}{details} \PY{o}{=} \PY{n}{run\PYZus{}ode\PYZus{}solver}\PY{p}{(}\PY{n}{make\PYZus{}system}\PY{p}{(}\PY{n}{params}\PY{p}{,} \PY{n}{Vector}\PY{p}{(}\PY{l+m+mi}{100} \PY{o}{*} \PY{n}{m}\PY{p}{,} \PY{o}{\PYZhy{}}\PY{l+m+mf}{25.1}\PY{p}{)}\PY{p}{)}\PY{p}{,} \PY{n}{slope\PYZus{}func\PYZus{}parabolic}\PY{p}{,} \PY{n}{events}\PY{o}{=}\PY{n}{event\PYZus{}func\PYZus{}parabolic}\PY{p}{,} \PY{n}{method}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{LSODA}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{results}\PY{o}{.}\PY{n}{y} \PY{o}{\PYZhy{}} \PY{n}{z}\PY{o}{.}\PY{n}{y}\PY{o}{.}\PY{n}{magnitude}\PY{p}{,} \PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{go\PYZhy{}}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Zip\PYZhy{}lining from AC to West Hall}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +[ 1. -1.48010425] dimensionless +[ 1. -1.48010425] dimensionless +[ 1. -1.48010425] dimensionless +[ 1. -1.48010425] dimensionless +[ 1. -1.48010425] dimensionless +[ 1. -1.48009196] dimensionless +[ 1. -1.48009196] dimensionless +[ 1. -1.48005512] dimensionless +[ 1. -1.48005512] dimensionless +[ 1. -1.47999374] dimensionless +[ 1. -1.47999374] dimensionless +[ 1. -1.47994324] dimensionless +[ 1. -1.47994324] dimensionless +[ 1. -1.47988327] dimensionless +[ 1. -1.47988327] dimensionless +[ 1. -1.47981382] dimensionless +[ 1. -1.47981382] dimensionless +[ 1. -1.47961671] dimensionless +[ 1. -1.47961672] dimensionless +[ 1. -1.47936885] dimensionless +[ 1. -1.47936885] dimensionless +[ 1. -1.47907025] dimensionless +[ 1. -1.47907025] dimensionless +[ 1. -1.47839559] dimensionless +[ 1. -1.47839563] dimensionless +[ 1. -1.47755259] dimensionless +[ 1. -1.47755265] dimensionless +[ 1. -1.47654139] dimensionless +[ 1. -1.47654146] dimensionless +[ 1. -1.47420988] dimensionless +[ 1. -1.47421032] dimensionless +[ 1. -1.47129704] dimensionless +[ 1. -1.47129773] dimensionless +[ 1. -1.46780456] dimensionless +[ 1. -1.46780542] dimensionless +[ 1. -1.45969223] dimensionless +[ 1. -1.45969747] dimensionless +[ 1. -1.44956597] dimensionless +[ 1. -1.44957438] dimensionless +[ 1. -1.43744636] dimensionless +[ 1. -1.4374568] dimensionless +[ 1. -1.41010184] dimensionless +[ 1. -1.41012485] dimensionless +[ 1. -1.37635458] dimensionless +[ 1. -1.37635986] dimensionless +[ 1. -1.33635607] dimensionless +[ 1. -1.33637233] dimensionless +[ 1. -1.29041791] dimensionless +[ 1. -1.29043259] dimensionless +[ 1. -1.22404196] dimensionless +[ 1. -1.22406891] dimensionless +[ 1. -1.14923573] dimensionless +[ 1. -1.14926861] dimensionless +[ 1. -1.06674115] dimensionless +[ 1. -1.06677028] dimensionless +[ 1. -0.977353] dimensionless +[ 1. -0.97738114] dimensionless +[ 1. -0.80995055] dimensionless +[ 1. -0.81009713] dimensionless +[ 1. -0.62979874] dimensionless +[ 1. -0.63009574] dimensionless +[ 1. -0.44292993] dimensionless +[ 1. -0.4432954] dimensionless +[ 1. -0.25607017] dimensionless +[ 1. -0.25646415] dimensionless +[ 1. -0.00772528] dimensionless +[ 1. -0.00835732] dimensionless + + \end{Verbatim} + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_61_1.png} + \end{center} + { \hspace*{\fill} \\} + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{y}\PY{p}{,} \PY{n}{label}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Y position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{plot}\PY{p}{(}\PY{n}{results}\PY{o}{.}\PY{n}{x}\PY{p}{,} \PY{n}{label}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{X position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{)} + \PY{n}{decorate}\PY{p}{(}\PY{n}{title}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Position over Time}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{xlabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Time (s)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{ylabel}\PY{o}{=}\PY{l+s+s1}{\PYZsq{}}\PY{l+s+s1}{Position (m)}\PY{l+s+s1}{\PYZsq{}}\PY{p}{,} + \PY{n}{legend}\PY{o}{=}\PY{k+kc}{True}\PY{p}{)} +\end{Verbatim} + + + \begin{center} + \adjustimage{max size={0.9\linewidth}{0.9\paperheight}}{output_62_0.png} + \end{center} + { \hspace*{\fill} \\} + + Third floor near the ceiling + + \begin{Verbatim}[commandchars=\\\{\}] +{\color{incolor}In [{\color{incolor}0}]:} \PY{c+c1}{\PYZsh{} Imports} + \PY{k+kn}{from} \PY{n+nn}{IPython}\PY{n+nn}{.}\PY{n+nn}{display} \PY{k}{import} \PY{n}{clear\PYZus{}output} + \PY{k+kn}{import} \PY{n+nn}{os} + \PY{k+kn}{import} \PY{n+nn}{time} + + \PY{c+c1}{\PYZsh{} Install Python libraries} + \PY{o}{!}pip3 install pandas seaborn sympy beautifulsoup4 lxml pint \PY{n+nv}{scipy}\PY{o}{=}\PY{o}{=}\PY{l+m}{1}.1.0 numpy + + \PY{c+c1}{\PYZsh{} Removes code before re\PYZhy{}downloading it} + \PY{o}{!}rm \PYZhy{}rf ./ModSimPy + \PY{o}{!}rm \PYZhy{}rf ./modsim.py + + \PY{c+c1}{\PYZsh{} Grabs ModSimPy} + \PY{o}{!}git clone https://github.com/AllenDowney/ModSimPy.git + \PY{o}{!}cp \PY{l+s+s2}{\PYZdq{}ModSimPy/code/modsim.py\PYZdq{}} . + + \PY{c+c1}{\PYZsh{} Resets kernel to flush outdated libraries (especially SciPy)} + \PY{n}{clear\PYZus{}output}\PY{p}{(}\PY{p}{)} + \PY{n+nb}{print}\PY{p}{(}\PY{l+s+s2}{\PYZdq{}}\PY{l+s+s2}{Configured for ModSimPy. Restarting kernel.}\PY{l+s+s2}{\PYZdq{}}\PY{p}{)} + \PY{n}{time}\PY{o}{.}\PY{n}{sleep}\PY{p}{(}\PY{l+m+mi}{1}\PY{p}{)} + \PY{n}{os}\PY{o}{.}\PY{n}{\PYZus{}exit}\PY{p}{(}\PY{l+m+mi}{0}\PY{p}{)} +\end{Verbatim} + + + \begin{Verbatim}[commandchars=\\\{\}] +Configured for ModSimPy. Restarting kernel. + + \end{Verbatim} + + + % Add a bibliography block to the postdoc + + + + \end{document} diff --git a/code/orbit_homework.ipynb b/code/orbit_homework.ipynb new file mode 100644 index 00000000..46dd633d --- /dev/null +++ b/code/orbit_homework.ipynb @@ -0,0 +1,499 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qEb5Fl3ZyVJm" + }, + "source": [ + "# Modeling and Simulation in Python\n", + "Sam Daitzman\n", + "\n", + "Chapter 20" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Y1DkmasdyVJp" + }, + "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'\n", + "\n", + "# import functions from the modsim.py module\n", + "from modsim import *" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "EBbygIvbyVLj" + }, + "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", + "\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": 141, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "XcpC9qV2yVLl" + }, + "outputs": [], + "source": [ + "# units!\n", + "year = UNITS.year\n", + "s = UNITS.second\n", + "N = UNITS.newton\n", + "kg = UNITS.kilogram\n", + "m = UNITS.meter\n", + "AU = UNITS.astronomical_unit;" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Nq0vKaw0yVLn" + }, + "outputs": [], + "source": [ + "x_0 = (0 * AU).to_base_units()\n", + "y_0 = (1 * AU).to_base_units()\n", + "\n", + "vx_0 = 30330 * m / s\n", + "vy_0 = 0 * m / s\n", + "\n", + "init = State(x=x_0,\n", + " y=y_0,\n", + " vx=vx_0,\n", + " vy=vy_0)" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2mYVqxxmyVLq" + }, + "outputs": [], + "source": [ + "system = System(init=init,\n", + " G=6.674e-11 * N / kg ** 2 * m ** 2,\n", + " m_sun=1.99e30 * kg,\n", + " m_earth=5.972e24 * kg,\n", + " t_end=100e6 * s,\n", + " r_final=695.508e6 * m + 6.371e6 * m)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "G4ijoX3dyVLt" + }, + "outputs": [], + "source": [ + "def universal_grav(state, system):\n", + " \"\"\"Calculates gravitational force for arbitrary objects\"\"\"\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " position = Vector(x, y)\n", + " \n", + " mag = G * m_sun * m_earth / position.mag ** 2\n", + " direction = -position.hat()\n", + " \n", + " force = direction * mag\n", + " \n", + " return force\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0euiUJCfyVL0" + }, + "outputs": [], + "source": [ + "def slope_func(state, t, system):\n", + " x, y, vx, vy = state\n", + " unpack(system)\n", + " \n", + " v = Vector(vx, vy)\n", + " force = universal_grav(state, system)\n", + " a = force / m_earth\n", + " \n", + " return vx, vy, a.x, a.y" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "yxNvIgrGyVL2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30330.0 meter / second 0.0 meter / second -0.0 newton / kilogram -0.005934559038759181 newton / kilogram\n" + ] + } + ], + "source": [ + "vx, vy, ax, ay = slope_func(init, 0, system)\n", + "print(vx, vy, ax, ay)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "BDP2V-W97UdW" + }, + "outputs": [], + "source": [ + "def event_func(state, t, system):\n", + " x, y, vx, vy = state\n", + " position = Vector(x, y)\n", + " return position.mag - system.r_final" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 333 + }, + "colab_type": "code", + "id": "oDu_ADwk7bMA", + "outputId": "708f4205-baa3-42d5-b2f1-71f5aa3aa126" + }, + "outputs": [ + { + "data": { + "text/html": [ + "148895991691.0 meter" + ], + "text/latex": [ + "$148895991691.0 meter$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 154, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "event_func(init, 0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 331 + }, + "colab_type": "code", + "id": "0PSP5uH6yVL4", + "outputId": "2f274108-86fd-4d0f-db33-9fcd9a1879fd" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results, details = run_ode_solver(system, slope_func, method='LSODA')\n", + "results.index /= 60 * 60 * 24\n", + "# results.r *= (0.000621371 / 1000)\n", + "plot(results.x, results.y, 'go-')\n", + "decorate(title='Earth Orbit',\n", + " xlabel='X Position (m)',\n", + " ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 297 + }, + "colab_type": "code", + "id": "ZBi2VbR7yVL_", + "outputId": "348bc2da-d0e9-48af-ebee-8515b7a426e6" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXl0JFd56H9VvWtp7dLs9sxYuvaw25h9scYBYwjYGMcxNgRiwpIALy88OIRAWEIcCCSEBEIcwAQwNgN4ZTHBgGQDYYl3bM/4Sp7ds2iXuqXeu+r9catb1bKk0cx0q6tb93dOn+nu21X11ZSqvnu/1bBtG41Go9FovIZZbQE0Go1Go1kMraA0Go1G40m0gtJoNBqNJ9EKSqPRaDSeRCsojUaj0XgSraA0Go1G40n81RZAo/EyQogDwBlLDF8rpfzIKe63C3iFlPIm5/PdwH1SyvevYNtrgK8AG6WUxxcZ/xGQlFJefoL9nAnsB54hpXz0pE+idF9fB5qklJcLIQzgz4AbpJSp09mvZm2jV1AazYn5G2D9Iq9Pn8Y+PwNcdorb3gykgTcsHBBCdACvAG44ddFOib9EKSWAlwFfRk+ANaeJ/gPSaE5MfLGVymlinOqGUsqYEOIO4Arg3xcMXw7MAHeehmynItOM6+Mpn5tG40YrKI3mNBFC+IFPAFcDG4FJYBfwPill3jF/+YFe57UbeLGzrS2lLDzQu4QQtwKvAqaAT0kpv7jEYW8AfiCEWC+lPOb6/o3ALill1tn/OuDfgIuBWeBHwP9boFAK5xFCrRb/BLVCvM/57e+c8QjwD84xIsDdwF9IKY8UTHzA+4FBZ5dxIcS7gE8BH5BSXu861gDwSynlx5b6f9VotIlPozl9PgC8GXgLSgF9AHg3cKnrN1cD/wHsBF4NfBf4IUoRFHgT6uH+dJSJ7N+EEGcvccy7gHFcZj4hxEbgpcA3Xb+7FXWfvxB4LbAdpTwX44vANY7szwEeA34qhCjIeB1wiSPnC4Aw8J0F+zjskmm7I8vNKKVWkHMD8HLgpiXk0GgAraA0mpXwz0KI2UVeW5zxx4C3SinvkVIekFJ+E9gD7HDtQ0opvy6lfEhKGQOSQHqB6fBHUsovSCn3AZ8EssAzFxNISpkDvg38kevrPwaGpJT3Aggh+p3tr5ZSPiqlvA+lKF8lhHi6e39CiFbgT4G/klLeKaXcA/w5SuG8RwjRAlzljP/MGX8X8CshRNAlVx61ggQYlVImgW8BFwghepzvrwQekFLKpf7DNRrQCkqjWQmfAp69yOsogJTy+4AthPiMEOJ2IcQ+4GmAz7WPvSs4TvE3UkoLiKNMaUtxA/AS1wrnjZQGRzwNaAAmCkoVGHLGxIJ9CUfe3yyQ4dfOfvpQZsp7XeP7pZR/LaXMnOC8folSdAVlehVw4wm20Wi0D0qjWQHjUsonlhoUQnwcFcX2NeAW4IM81YyWXMFx8ot8t2TAgZTyfiGEBC4XQtwJnEtpZJ8fOIiK6lvICNCxAvkM1ES2oIROuv2BlNIWQtwE/LEQ4ico5f6HJ7sfzdpDKyiN5vR5NyqY4GtQDDY4g+Wj2crV5+YG4PWoldI9UspDrrE9wAZUFOKII9sW4AvA+yhViE+gTIovRPmMcPKZXoCKCNzn/P5cVKAFQogzgAeBZ6zg3G5AKe63AgMViIrU1CFaQWk0J6bZiYZbSEZKOQlMAK8RQvwCiAIfB9qA0DL7nAWeLoQ4Q0p58DRku9E5XifwuQVjP0X5x3YJId4P5FDKqR04AGwu/FBKmRBCfAH4FyFEAqWQ3gNsA74ipYwLIb4KfE4IEUcFaPwz8Hsnim/huQGcJ4S4X0o5K6V8XAjxEEoxvus0zlezhtA+KI3mxPwDcGyR163O+FuBrcAjwO2oh//1wHnL7PPrwDpgzxLKb0U4K6ZfoyLmblkwZgGvQwUtDAL3oJTpq51ghoV8CBWV91/AA6iVUb+UctgZ/3/Ofm5zjhlHBWYs5BFUhOJdwDtc3xei9m59yhYazSIYuqOuRqNZDYQQnwU2SSnfeMIfazRoE59Go6kwQojnoVZj7wReU2VxNDWENvFpNJpKsxNVzeJLUspfVlsYTe2gTXwajUaj8STaxHeKOKHE56Oc5Ys5nDUajWat4kOV8bpXSpk+1Z1oBXXqnI/KkNdoNBrN4rwU+NWpbqwV1KlzDODGG29k3bpTjhLWaDSauuP48eNcffXV4DwnTxWtoE6dPMC6devYtGlTtWXRaDQaL3Ja7g8dxafRaDQaT+KpFZQQ4g9RWftbgVHgM1LK/3TK+X8R1S00D3xOSvkp13bvRdX5agHuAN4ppZxzxvqBf0Vl2j8MvFlKudcZ24LK+H+Bc7z3SilXtROpRqPRaBbHMysop2XAzcAHpZTNqNL8nxdCnIvqVipQSuZ84C1CiD9xtrsI+DBwESpqJIyqN4YQohNVeuYTQCuqRMtPhBCF894F/B5V1fntqJpl2yp/thqNRqM5EZ5RUE7b6i4p5Y8dBdKBKm4ZR3UqvVZKOSWlPAD8EyorHWfsa1LKx6SUs8BfA1cJIZqAy4DHpJS3SCmzUsrPogp4XiiE6AOeC3xUSpmRUg4A3wfetmonrdFoNJol8ZSJz6mY3ADMoGT7R2AMtTLa7frp48yX+N+BagdQYC9K8fY5Y+7tAKSzbSNwqGAKdO33eWU5Gc1pExsaZmxgkNTIKOGebrp29hPt6622WGuaYz/7Ofu/9g3sOXXbmKEQ6173h2x901VVlkxTbmKxGKOjo2Sz2UXHGxsb2bRpE6ZZuXWOpxSUQwqlPJ6JUjyFRmoJ128SqP43AE3uMac5WsoZb1qwnXvb5cY0VSQ2NMyRW29j5tHHMANBzMYGEocPM/6rXxN9+tPYeNmlWlFVgWM/+zn7vvSfkJ8PzLLSaY5+7xbSExOc/ZfvraJ0mgLlmNjFYjFGRkbYuHEjkUgEwyhtbWZZFkeOHGF8fJzu7u5yil+C5xSU0yIgA9wnhPgyygwHpa2vG5jvOTPnHnOarIWd8TmeqnAaXGML22m796upArGhYQ596ybm9h/AzubIptMwNYURCGAGA8zu3cvhm3ax+aortZJaZY7d8YMS5eRmYvBujj1tB+v/4MJVlkoD6r4Z/fkgs8PDZMYn8Lc0E+zoJDsTO6X7ZXR0lI0bN9LQsPh83TRNenp6OHjwYEUVlGd8UEKIlwsh7l/wdQiYAo6jgiQKnM286W73grHtqE6mw4uMubfdDWwRQkQWGdNUgdjQME/82xeJDw2Tm53Ftm0MywbDAMvCyubITEwyu28/T3zh34kNDZ94p5qykRmfWHrQhgNfuZ5jP/v56gmkAdR9c+BrXyf26KOkjh8nl0qSHhkjeeQImclJzEiYsYHBk9pnNpslElk4fy8lEAiQy+VOR/QT4qUV1EPARiHE+1Bh4c9HBSy8HqWgPiaE+D3KNPd+5zegWklfL4S4GdUF9NPArVLKOSHEbcBnhBBXoCL4/hKwgLullBkhxMPAtUKIDwEvAi5BtbzWrDKxoWEO3fht0hPOQ9AwsDMZMAwMnw87lwUrD4aJbVnkYnG9klpFUqOjYC7XwR6sVJoDX7keQK+kVpGRu35KdnoGw2di5/IYPh/YNvm5BGnbJnn0GDhFwU/G3LfQrHey4+XAMysoKeUM8GpU5N0k8GXgz6SU9wAfBR5Fta++F9U59DpnuzuBT6Lyn46gVk/vdMZGgdeiOoVOovKoXiulzDiHfQNwDioH6qvA26SUj1b6XDVPZWxgEPJ5DMMEbAy/H3ymWj2ZBpgm2GAGAti5LIbPxNfYcNIzQ83Jk08mOf7fdxHZsuWEv7XzFk9++zt6dbuKxOVQcfJgBvyYPh++UJh8Jk0uFiefTmEDmalpDt+0q6aujZdWUEgpHwBessj3KeDdzmux7b4EfGmJsV8Az1li7DBw8anKqykfqeMjZONxfA0RcrE4vlAIAk3kpqfVrNAwMaMNalVl2Rg+P2YgQGpktNqi1zW2ZXH8rp+Rm52lcfMmTL+fmByC9CIFqk0TwzCwc3nGBgb1ynYVSBw6BLaNncthBAI0bN1G6uhRbANMnw/bBgMDXyRMLhYj0N5WU9fGMysozdrGDIXIJ5P4QiECrS0Eos0YVp7Ixg1s+4t3Et6wHtMwMYNBjEiY3NwcE7+7l/T4eE3NCGuJ2NAwu//uWo5+/wfEdu8hMz3Ntre9lRd/9ya2vfcvMMMhZ4VrqpdlYeVy5BIJJu+9X1+XCmNls4zd80vCG9Zj5/KY4TDh9T2EN27AAAzTRyAaxd8SxRcMko3FMUxfTU3qPLWC0qxN7HweXySCnctjAeENG/A3NpCfSxR9TI1btnD4pl1k5xIkDh4ElE3d39SkfVEVIDY0zP6vfo3s9DRmKISVyZAZGyefUTkxBR/Tga9cj523sC1LKStbmWcNv09flwozdd/9ZONxgq2tmDvOxhcOkxmfoGHjBs5489WMDQySjcfJjE+Qm50FbJJHj9Lce9aK9m/b9rJ+ptVodqsVlKaqxIaGOXLzrczu3at8TqaJgU2guZkNl7yu+HCL9vWy+aoreeIL/45hGBg+P77GBky/v+iL0g/C8jH68wFys3OYgQAAgbY2gh0dJf/PBSX15Le/Q3Ymhg2Yfh9YeSIbN+Jzosf0dSkvsaFhjt/5Y2YeeRRfJEJ4w3o2vf5Souec/ZTfHr5pF77GBrLxOHYuRz6Vou35J65FEAgESCaTS4aZg4r08/srq0K0gtJUjWLk3tg4ZiiEncvhb2hg81VvXPShFu3rJdTZSWTTJpKHDgGQnZ4h2N1VU2aLWiBx6DBqlaqiKCObNoJpPuX/ef0fXEjjli3If/wncnNz2JaFYRjMDg0TaGnBXOYBpzl5CvdMdmqquLJNHn5SmVgXUJjUjQ0Mkjo+ihkMEt6wntxM7ITH6e7u5siRI8sm6o6MjNDS0lK2c1sMraA0VWNsYBBsC/W3b2CGw4R6upeddYd7usnG4piBANnZWfKJJJnfTRJoayM2NKxn62XC9PmLjvdASwuGz0dubo5wz1OTMqN9vbSffx7x4WGSh48AKrgil0xgpJL6upSRsYFB7FweO59XloRgkPC6dYwN3k1U9D3l99G+XqJ9vSSefJID3/wWqaPHOHjDjcw88ig9F71iyesSjUYBOHr06LKljjo7O8t3cougFZSmaqRGRsmnM8XPwfZ2/E1Ny66Gunb2c/imXVi2RTYWB2wM00ewtVX7PMqElcvhb2nGPnoUC/BHm8nNzZGfS7Dhktctuk3Xzn4m//c+lbdmmNhWHvJ5Ilu2aDNfGUmNjJJPzldoC3V0EmhrPaEFITeXIHnoSWwrjxkKkjh0+IT3SzQaLSqqaqGj+DRVI9TZSXZ6uvg50NJCPpFYdJZeoGC2IJcH28L0B/A3NxHs6NB5UWUicegQ/sZGGs/ahr+piXwiSaC5efmHWV8vwU51DWwrryLI2toIrevR5tcyEmhtcQIeAMMg2NlxwnsGYGzwbsLrujEDAQzDwEql8EUinr9f9ApKUzWaRC9T9z+AZdv4m5qwctllZ+kFon29hLq78TU2kneqaufiMQLt7fphWAbiUoWHB1tb6bnwQjqef/6KtmvathV/NEriwAHyiSSpY8fIJ5I0bjuzgtKuLRrOPIOZhx/BQgWu5FPJFd0zqZFRgp1dZKZmsHNZbCuP7XzvZfQKSlM17GyWxrO2YQaDACecpbsJ93RjBoLFz7nZ2RXNJDXLk0+nSRw8VPzcLFZumuva2U92ZoZcLI6dVw/A3NwsmYlJnRNVJuxUev6ese0V3zPhnm7yyQSBaHPxu8z4uOfvF72C0lQFK5MhcfAwwdZWgq2tbLnqSoKtrSvevmtnPwe/+S2sbBbD7yczPYMZCp9wJqlZnrl9+5X/CAh1dZ3UNYn29RLq6CAzOkY+lcT0+Ql1dhHq7tJ+qDKQmZ4hPTFBsLWVUHsHW695S3FydyIKvlvD58d2Kk9Y0zN09V9QWaFPE72C0lSFuYOH5h+EHR0n9SAE9TA840/ehL+5GSudxgwE6L7wAv0QPE3iQ0PF9ytN6HRjpdNEn/kMQp2dBNtawbbwRSKeNyXVAnN79xbfN2zZvGLlBPO+21BPF1YmixkM0rD1jJO+71YbvYLSVIXZJ+Zvtsbt205pH9G+Xja94fVMP/QwgFNoVnOq5GbnSB455nwyaDoFBVVIAzD8KkzdzufJTE153pRUC8zu3Vd833QK90wh5HzkZwPFicjc/v2evjb6jtasOjO793Dszh8zdf8DxHbvgdMo29/gqrCdOHhoVcqv1Cvx4WEKJaQaNm3E39h40vvo2tlPPpFQCsq2sbJZslPTdO3sL7O0a4vM9Azp8XFA1dhrOPOMU95X47atxfdz+w+crmgVRSsozaoSGxrmwH99U5nlQiEAjv3gR6fsRI+sX1csx5ONx8lOTZ9gC81SzA4/UXx/KqsncJmSOjvVNQ4Gie7YoU2vp0mJeW/zJlXt/xRp2LxJ9YwCMlNTZKa9e89oBaVZVVQmfLaYjxHq6jyt/CVVhmdT8XPi0KFlfq1Zisn77mfsF79Uq9o9j2Mt0dp9JUT7eul971/Qdt65RHecg53PYVW482q9U2LeO2v7ae3LDARo2LKZzPQ0sd172P3Jf2DvdV/2ZKSlVlCaVSV1fATLVTol0BzF19BwWk70xjO2FG+2vV++3rM3m1eJDQ1z6FvfxspkMEMhzECAIzffelr/h/6mJgJOnTY7nyd1/Hi5xF1zZGfKZ94r4vMz98Q+rIyq5JKNxz3ZzFArKM2qEog2F28KMxDADIdOO38pn8nM32wGZGZmPHmzeZWxgUGsbGZ+VdvdXZaqHA2b51e2ySePnK6Yaxb36ul0zXsF5oaGMfyq6aeVSuELhTxZiUUrKM2q0njWdtX3KZvFbGgo1ng7HSf65G9/h7+xQT1gAcPGkzebV0kePTYfXGIY+JsaT3tVC6gK6IVjaAV1SsSGhjl0065iQJFxEqHly5GemMDvStrNzc2V5ZqXG62gNKuKgVHMhLdzuZOqHrEUqZFRAm3z+Ry5RMKTN5tX8Tc0YDs+Il8kgmGaZanKEdm4EVARmqnRMfKLtYnXLElsaJiD3/wW2VhMtdbIZhn/5a/KYhkI93Rj+uazjPJzCU9WYtEKSrNqFHwRwdZWojvOYcff/g3b3/WO047wCvd0l+RA5RPevNm8SsOZZxRXtb5IeVa1AL5QiHB3l/PJJnlEr6JOhrGBQWzLKppeg62t+JubymIZ6NrZD4ZqG2/bNpnp6bJc83KjFZRm1UiNjhWjuQLNzQSam0+wxcro2tmPbVnFmy0bj5ObnfPczeZZbLu4qrWymbKsagtoM9+pkxoZLa5sAQLR0w8oKlCoxGKGQljOynbDZa/3XDqAriShWTXcM2hl/ikP0b5etrz5avZd92WyMzP4IhHWveqVnrvZvEgukSQzNeXUd2tn69v+tJhXVg4imzYy9cCDACQOP1m2/a4FQt1dpB4+VsxZ8jU2ltUy0LLjHLr7LyhGWAYaImXZbznxjIISQrwC+DTQC4wCn5VS/qcQohX4KvAKYBb4iJTyv5xtDOCTwDuAIPBfwAeklDln/ArgH4D1wD3AW6WUo87Ys4DrgGcC+4BrpJT3rtLprkmSR44W30c2bijrvqN9vax/9cXFEi7+iPduNi+SOnas+D7U3V1W5QQQXreObCxO8sknySeTZCYn6blITx5WQuu5z2bq3vsx/BZmOIKVyZBPnLi1xskQ2biB2OOPkzp6jLgcJnqOoGtnv2eujydMfEKIzcAtwN8DrcAbgU8JIS4C/gPIo5TMa4BPCyFe7mz6DuAy4FyUYjsf+BtnnzuA64G3Ah3AMLDLGQsCdwDfcY53LXCXEKK67SPrmIW5MOVWUADhdT3F96njI2Xffz1SsqrdsL7s+5/dt5/koUPFHKv0yKhOAVgh/lC4aHo1sAlEy2d6LWBlsvMpGqbhuXwor6ygzgRuklLe5ny+VwhxN3AhcDnwNCllAnhICPEVlGK6B3gL8Hkp5ZMAQoiPA98A/g54E/ADKeWvnLEPAVNCiF5gKxCQUn7eOd4uIcR7gD8GvlLhc12TpEZGsJ3qBIGWFvxNTWU/RrjHpaBGtIJaCcmj8yuocppdC4wNDOJvaSEXiwFgWxZ+JwXAK7N0r5I8eqzYjqbr5S+j5Wk7yn6MmUcewQj4Mf1+7EymmGPllevjiRWUlPKXUsp3FT4LIdqBlwLHUNUr3er8ceAZzvsdwO4FYxuc7UvGHAV32Nl2B7BngRju/WrKTIl5rwIzdYBgRzumX5mocnNz862xNYtSMLkBGIZRsgItF6mRUYLt7SXH1CkAJ8a27RLza6XumfTYOH5XsFI+4a3r4wkF5UYI0QJ8H/gdcD+QklK6S1QngAbnfZPz2T2GM75wzL3tcmOaCpA86vY/lX+mDmCYJqGeruLn5DFdXmc5khX2P4FKAVB9v1Q+lJXJkIvHdQrACchMThXzxnyRCIEK9W0K93RjmK4UjWTSUykanlJQQog+4LfACMq0FwfCTjBEgQZUsATAHBBZMIYzvnDMve1yY5oyM7PncUZ+NlDMhs8lkhU7ltvMl9ZmvmWZ7/0EkQ3l9wmCSgGwkikM05hvvzE9o1MATkDKPaFbvx7jNFrSLEfhOhTzoWZmPJUP5RkFJYR4GWrVdDtwuZQyhTLtGSifUYGzmTfd7QbEgrFjUsrphWNCiAZgi/P9wu0W7ldTJmJDwxz8xg3z7TVsm6O331ExJ2x43briex0osTwlD8GNlTEhFdpvBFpbi+03Ol70Qk/4N7yMe3UbrpB5D5wUjauuVDlw6TRYFpuvvMIz18cTQRJCiO3AD4EPSym/UPheSjkrhLgNFdH3NmA78HZUZB7ADcD7hRA/R62KPu58B3AT8CshxAXAb4BPAQ9KKYeEEAcAQwjxV8AXgTegws0LQRqaMjE2MAgGRfNRoK2tWCevEjdBeF0PmelpUkePMXX/g6RGR+n+gws9c8N5hXwqRXrC7X9ad4ItTp1oXy+br7yCsXt+AYAvVJ56cvWKbduk3MEr6yunoADanv0sZs5/Lrm5OQBCnZ0VPd7J4JUV1LuBZpQimnW9/hF4J2ABB4E7gWullD92trsO+B7wa9RqazfwUQAp5SPANc5vxoGnAX/kjGWAi1GKaRL4MHCplHJsFc51TZEaGcXOz7sQ/Q0NFXXCzh06TOJAIaw5SHp83FNhs14hdew4he65oa4uzDIVIV2K+ZJHkB7Vt9lyZGdi5BLKRW4GgwQ72k+wxekT6p73OXkpAtYTKygp5fuA9y3zkzcusZ0FfMx5LTZ+Cyq/arGxR4GXnJykmpMl1N1N6pFHijZ0XyRcUSfs2MAg/mgTVjLlfGPga4x4JmzWK7iDVippQioQbG/HMH3YVp5sPE4+lcIXDlf8uLVISfTe+nUlQQyVIryuh7n9+wFIj4xCBULaTwWvrKA0dUr7C56HlUqrJoWGiZXNVdQJmxoZJdAyH/FkJVOeCpv1CqVh/5UJkHBj+HwlK4H02HjFj1mrlEweKmzeKx6np7vY9PPwd7/nmaafWkFpKkqgqamYDY9tVSQb3k24pxvseZNiPpXyVNisF8in06THJ5xPBuH1lfM/uQl1uc18esKwFCX+p1VY3QJkpmeY21uoKOEjMz3tCdO4VlCaipIeHSu21zjjzVeXpb3GcnTt7MfO5bCyOWzbVgm78VnPhM16gYnf/pbY7t1M3f8Ac/v2MXfw0Koc1z1JSGk/1KLkZmfJxuMAmH5/iVKvJOO/+CX+Bqfpp6Fay3uh6adWUJqK4p4pu3OUKkW0r5ctb7oKf3OTE9YcYN3FF2n/k0NsaJgjt32/WBsP01y1mbI7Oiw9phXUYrhLT4V6eoqVzCtNamQUX3S+FKlXKn5oBaWpGLZllTyIQt2rMxuM9vWy7qJX0nbeuUR3nEMgWp6+U/XA2MAguJrghdrbV22mHGxvwzDVAzc3O1vRhO1aJVkF8x44FSWYTwa2UmlPmMa1gtJUjMzkVLFBob+xEX9j46odO9Tlnq1PLPPLtUXq+AiWU7QXwNcQWbWZsuHzEersKH7OjOtVlJvY0DBHf/DDYsWVfCazasfu2tmPbbuafsa8UVFCKyhNxXCb99x5FquB25yUGdcRYwUCLS3Y2SygkqcNv39VZ8ruVbT2Q80TGxrm0A03kovHVZfbbJaRu366akEK0b5eznjz1fMVJQyDTVdcXnXTuFZQmorhTvhbbVNBsGN+pp6emMC2rFU9vldp3nE2di6Plc1ihsPk5uZWdaZcGsmnFVSBsYFBMI2i6TUQjeJvalrVIIWWc86m8yUvLprGg21tq3bspdAKSlMx3A+g1QiQcONviBRNinY+T3Z6ZlWP71V8oVAx7N/KZgk0VzbsfyHuFZQOlJgnNTKKba1exZWlKDXBVt/y4IlKEpr6w8pmi7XewCjxCa0WwY6OYn2x9MQEwfbqzwirTSHsP9jayobX/iENmzet6vGDbW0YPh92Pq9SABIJ/A26y024p5vYnseLn32RSFWCFEKdncQds6IXkqn1CkpTEdTsWM0Ig+1tFa/1thhupeiF2WC1sXK5YoNCWL2oSjeGaWIDsd17mLr/AZ744n9UPRnUC3Rd8HJys3PFIAXbsqsSpBB0pwJ44J5Z8QpKCGGiWlJ0A3ngOPDEgmaCGg2xoWGe/O7NzO3fjy8SoeNFL6iKHCGP3WzVJjMxWfTFBVpaiu29V5PY0DDx3XuKeViZyUkO37RrVc2MXiTU1Unj9q2kjh7DymQItrfStbN/1f9PQl2dxW4A+WSK9PgE3X+ws2rX5oQrKCHEy4QQtwBTwKPAAHAPqkX6mBDiW0KIF1VWTE2tEBsa5vBNu8hMTqpopEyGqQceqsosuSRQYnwC217bc6mSnLRVqlCwkLGBQQLRaDEYABtPVCyoNpP3PeAohSShzs6qKCeAuYOHSBw4ON8NYHKiqiWPllRQQoheIcQA8DVgH3AZsBEIo7rPnonqy3QU2CWEGHQ64mrWMGMDg/gaG8CyMAwVlRRoaanKAyjQEsX0qz5U+WSS/Fxi1WW55q9gAAAgAElEQVTwEiVVPapg3gOnmK+rfXk+pYv5xoaGOf6jO4urStu2q6YUxgYG8Tc2FicQpmFWdQKxnInvW8DfSSl/tMT4Yef1QyHEB4FLnW2eV14RNbWEegC1qOrlAIZBsLW1Kg8gwzCwbEslPSaT5OYSbLjktWvWlOTOO6rWCirc0012JgaGAbaNncuSi8erXrGgmowNDIJtF5t6BtvawKAqLWJSI6P4W6JknACJfCpFqLWlahOI5Ux8L1hGOZUgpbSllLcBzy+PWJpaJdzTTXZqPqTbFw6TTyWr8gBayt+xFp3yVjZLZnLK+VSdqEpQFQvyySSGYWDbNlY2S3YmVvWKBdVEVfco5OkZ+CLhqq0qVcmjeardDWBJBbUw+EEI0SSECDnvdwgh3u+0U19yG83ao2tnP9lYbD4ayTCqVjJlbGCQQHNz0VxhsHb9Haq9hhNV2dZalahKcNq/X3Ul/paoU8w3SNfLX7pmV7UA/uZm7JxT3SMUxPD5qqYUunb2Y+fnSx7l4nFys3NVm0CsKMxcCPEqlK/ppUKIjcAvgfcAPxZCXFNB+TQ1RrSvl5ZnP6tYMiXU1lq1CC1lrmgpfs6n02vW3+GFAIkC0b5eNl32+mLFgrWeB9Us+lzVPUKrXt3DTaEbAKZJZmKCzNQUhr966bIrzYP6B+BfUdF7fwpMAttRQRIfrIhkmprF5/cR3XEObeedy9Zr3lq12XG4pxvbmi+MaqUz5Gfn1qS/w13Voxr5TwsJts93181MTC7zy/omNjTMxG9+Sz6XJTc7Ry4WX/XqHk/BMDBNk0BLC8GODuxspmqm8ZUqqHOAr0gps8DrgB9KKfPAb4AtlRJOU3tY2SyZYlkhoyTUe7Xp2tmPlUyBjePvyJCNrU1/R0nh3iqvoIDS9u8Tk2syBaCQkpGdnibQ1IS/qRF/NFq1EPMCYwOD+Jub5k3jVYzkW6mCGgO2CCHOAM4DCsETz0WZ/jQaADITC3wdTmRSNSj4OwJuf8fOC9acv8PKZIqTBsMwSuqtVQt/U1Pxb8PKpNdkCsDYwKBqGom6LmYwSLBKKRluUiOjBFwrXAyjaqbxlRoXvwLcDqSAh4GfCyH+HPgs8NEKyaapQZQzXlHN1VOBaF8vG173h0w9+BAAgaamKku0+qiaaoWyU+1VnTQUMAy1uk4dPw5AZnICf9Pq9QvzAqmRUczwfDUPXziMr6mx6j7ScE832ViccE8PVjZLsL29akEbK1pBSSk/Cbwd+CfglU603nHgrVLKz1VQPk2N4S4pVK1Q5oWU+Dsm156/w0sBEm7cxXvnQ+DXDuGe7pIq+2Y47Ikutl07+8knEpiRMKF1PeTTqaoFbSy5ghJC/BS4C/iplPIhJ8+pyMLP5UII8TyUj6vb+RwEvghcjqoB+Dkp5adcv38vKlCjBbgDeKeUcs4Z60cFd2xHrfzeLKXc64xtAa4HXgCMAu+VUt5ZiXNaS2RcKyh3LbxqUqqg1t6DMOWxAIkC7uuSnlh7XY+7dvYz829fxMpmVaScDfm5BBsueV1V5SqYxscGBkmNjBLu6WbDJa+riml8ORPfZ4FXAN8QQvQAP2deYZXd7ySEMIC3oVZpbj4BCJSSaQH+WwhxREr5TSHERcCHgQuBg8DXgS8A1wghOlFmyWuA7wP/F/iJEKJPSmkBu1BBHq8BXgLcLoR4tpRyX7nPba1gW1bJg8YLvg6AQFsrYAA22ZkYVi6HWcXQ2dXGawESBUIuE/BanDhE+3pp6utldmjYqcHXzrrXvNoTPtJoX68n5FguUfcuKeUHpJTPAp4F/BjYCdwrhHhUCPEvQoiLhRDlSmL4BPDnwN8v+P4twLVSyikp5QGUAnuna+xrUsrHpJSzwF8DVwkhmlC1Ax+TUt4ipcxKKT8LhIALnZqBzwU+KqXMSCkHUErsbWU6lzVJZmoaO6/Cuv2NjfgikSpLpDD9fgItUeeTTXZquqryrCb5dJpsLAaoVhdemTTAQhPf5Jrrejzz2O6icvJFIvS86iJPKAUvsVIf1IiU8ltSyrdIKTcCb0TV4fs/wJNlkuU6KeV5wH2FL4QQrcB6YLfrd48Dz3De71gwthd1Tn2LjAFIZ9sdwKGCKXCR/WpOAXfPJa+Y9wosfBiuFSb/975i76XZvfuI7/WOgcAXiRQnMXY+TzYWr7JEq0dsaJiD37qxWIYL4MnvfG9NluFajlNqWCilfERK+Tkp5cXAunIIsoTZsBBy5Y5BTaCqqRfGi2NO8EbKGW9asJ172+XGNKeIO0Ai6DkFtfYCJWJDwxy57fb5KtnguVqEpWa+teOHGhsYxDB9xVyjQDS6ZstwLceKDPFCiGcDnweehjKTubFRvqFKUFjhuG1FDcCsa7w45vixws74HE9VOA2usYX2J/d+NadAaQSfd0xJsDYDJQoPu0JYeai1BSMYrEqV7KUIdrSTeFIZYTITk7BtW5UlWh1SI6MlycnVLBDrZVbqKf4GMA28H7VCWRWklFNCiOOoIIkjztdnM2+62+2MFdiO8oYPO2NXL9jl2cBnUAEVW4QQESllcpH9ak4S27ZJj7kDJLzjjIe1aeJLjYyW+HXMcAQzHPLUQ3CtljwK93QTe2z+ceMLRzwRYu41VqqgzgKeK6XcU0lhluAG4GNCiN+jTHPvR4WOF8auF0LcjGqq+GngVinlnBDiNuAzQogrgNuAvwQs4G4pZUYI8TBwrRDiQ8CLgEuAF67midUTUw89zPRDD5FPJvE3NpE8doxAtLnaYhUJtrYWWzxk43FVmNMDCauVJNTZSfLIEec8DXyhEDmPPQTXoukVoOuClzF5730YPh+G34+Vz2Gl0lUPMfcaK/VB/RJ4ZiUFWYaPolrNPwbcC9wCXAfg5C19EpX/dAS1enqnMzYKvBb4EKq47eXAa6WUGWe/b0DVGBwFvgq8TUr56OqcUn0RGxrm8Le/M+/wNQwOf/s7nvJ1GD5fSSfXtWDma3nOs4pVso1ggFwyUbWEy6VQK1vVgSg7M4OVy1VXoFUi2N5O4/ZtmMEgdj5PsLV6Vf+9zEpXUO8AfiuEeA1qpVISDyql/LtyCSSlvBtodX1OAe92Xov9/kvAl5YY+wXwnCXGDgMXn6a4GgoOX7O4Igm0zDt8vXTD5TOZYnfd7EyMjW94vafkKzfB5mYaz9pG6ugxyOcJNDdXLeFyKcxAgEC0mWwspla3U9OeqUBSSaYefIjU0WPkk0nCPT1VLxDrVVaqoD4OdKMKxZ6zYMwGyqagNLXHUxy+oZDnHL6xoWFmHnp4vrvu1BSHb9pV17PW9Pg4wdZWgq2tdL7ohbQ++1nVFmlRgh3txVytzORk3Suo2NAwx+/87/noStuu+7/FU2WlCuoK4FIp5Q8rKYymNgn3dDPz+0cLlhrP1BRzo1oINGNllIXXMAxPrvLKRWxomGN3/jeZyUl8kQgtz/Ruil8umSqubNOjY3X/oB4bGATbLlocgq2tYBp1+7d4OqzUBzWJMu1pNE+h86UvIZ9KOW2iwc7lPOfrSI2MEnB3103Vb3fd2NAwh278NtlYDDMUwspkGPnJTz3lEywQGxpm8je/K64mstMznsvVKjcLoyt1iPnSrHQF9QHgC0KID6CqNWTdg1LKtdfMRVMk1NFe9HXYuRyBligbXn+Jp2aD4Z5usjMxCjX57FyW3Oysp1Z55WJsYBAzECjWGzQjDfijzZ6coY8NDBJoiZJPqJRH27bremULEGhtKUZXGn4/ht9Pbm5tdno+EStVUF9EBS7cu8S4rzziaGqR9MRk0dfRdNZZrHvlH1RbpKfQtbOfwzftAgNsy8bO5VSgxOsvrbZoZSc1MqqqYzv4wt7zCRZIjYwSbG9XfaFsNXEwQ2FPylouok9/GjMPP4IFBBobyc3NeaKKuRdZqYK6vKJSaGqajLuCuauVt5cotBA4+PVvkhoZwReJ0N1fn911wz3dzO3fX/zs86BPsEC4p5tsPI4ZDGKl0wBkp6c9KWu58Eci8xaHbM6T0ZVeYbl+UK1SymkAKeU9K9mZEKJNSln/CSaaEtwVAIIeVVDgdNe95LVM3f8AUL/ddbt29jPz+UewcjkMvx/btj07Qy+ubFHmPTuXIxeL0XXlFVWWrDLEhoY5escPSI+P44tEWP/a19Cz84Jqi+VZlguSuEcI8UEhxAnr7AkhOoUQHwF+UT7RNLWAbdukSxSUt2rwLSTY5ip5NFWfc6loXy8N27cXVyXBjg7PRsYVVraB1lasdBozGKT9Bc/3pKyny2LBK6MDg3UdEHK6LGfiezGqN9OTQoj/Af4bVc1hHOVp7kL1iXo58FJUvb4XV1RajefIz81hZZRpxgwG8Xt8VbIWFFQukcAfCRPdcQ6mP8DWt1+DYRjVFmtJon29nHHVlRy/66eAMknWI2MDg5ihEIap1gVmKEwgGq3rgJDTZUkF5TQA/L9CiE+jygddharKUAiIyAIPAj8C3l6JLrsa71Oyempv9/SDEJ7aXdfO5zF89RXj4+7LFezw/jUBCLgmDtk6nTikRkYxg8HiZzMcxtfozeAVr3DCIAkp5XFUt9tPCCFMoAOwpJRrp3mLZkkyHmzxvhym30+guYlsPA7YZKanS3oS1QNTD/2+mPga2biR6DOe7vkZerC1pe6L+YZ7upk7cLD42RcOeTZ4xSucVMNCKaUlpRzTyklTID0+/6fg5QAJN6WtN+prth4bGmbkrp/Nl9HJWzWR+Gr4fCWJ1PVofu3a2U/OUb6F0mBeS2j3GqfUUVejAaem2E/uYur+B4jt3lMzLbtLzEnT01WUpPy4y+gYhkGwrbVmOrWWmvnq67qA8rU1nlUbwSteQSsozSlRiEjKxWeLEUnHf/wTz8/Uob4DJVLHR1yFew1MDyfpLqTee0NNP/Ioc3v3kU8m8TU0sO5Vr9TK6QRoBaU5JcYGBjECfsyAH8Mw8Dc04G9uqomZerCtfvtCBaJR7JyqRGYGAximWTN+jno3vR668dtF06thGBze9d2amNBVkxUpKCHEfwkhLhRCeD8cSLMqpEZGMYz5Px8zXDsFL0tNfDMlhTtrneYd5xSbFJqhULGMTi34Oep5ZTs2MAiGUTS9+qPRmjG9VpOVrqBs4GbgiBDic0KIcysok6YGUMVXZ4qffSHvltNZiC8Uwt/YCIBt5WvGd7YS/A2qjI4ZDGJlswSam2vGzxFobaHYXTcWr6vuuqmRUfUUdfDV0ISumqxIQUkprwF6gPcAm4FfCSEeF0J8RAixvZICarxJ185+8rNzxYgk27ZqZqYOlLR/r6e8m/T4BMHWVqI7zqH3/7yH7e96R00oJ3BSAFqizie7rgIlwj3d5OKx4mcv10f0Eiv2QUkpM1LKW6WUf4RSVt8B/gYYEkL8jxDiqkoJqfEeKiJpmysiqb1mZupQn+akmBxi7O57ilGVmRqMUCy5LnUUKNH5speST873TLPy3uuZ5kVWWs0cAMe0dyWqw24P8EPgJmAD8BkhxCullG8tt5Aa75FPJvGFVTkdw+dj29vfVizhUgvUm0M+NjTMwRtuJJ9Kqfwny+LIrbfji0RqZtIA6rrMHTgA1M/EASAzPQM+U5nFTZOGLZtrakJXLVakoIQQn0Appu3Ar1A1+r4npZxx/WYK+DLw1vKLqfEaTylxVEPKCepvBTU2MIhhmsXqC/7GRvxNjTVX563erguoycORW25VeWkdHfgiEaxUqtpi1QQn0w/q68CNUspDS/zmYeAd5RBK431qoQfUcgTa2shMT5M6eox86iHS4xN0X9hfUw9zNwud7bUUVemmNBeqPhSUO4IPINjSghkJ19zkoRqsdNr7HeBfFyonIURUCPE5ACnlY1LKm8otoMabZGqoxcZiJA4fJrHvgMpLCQbITE3VREmgpQj3dJNzRSPWqhO+JJLPKeZb66RGRsGVylCrk4dqsFzDwo1AoTjWx4ABIcRCr+WzgXcB76uMeJVHCPEs4DrgmcA+4Bop5VKt7U+b/7nkDU/57sV33FKpw1UMtwO7VmrwuRkbvBt8Jrn4LHYuh53PE+rurtlZbdfOfqbufxAMMPx+LMsCjzYpXA4zECgt5js1XRNFiJcj1NVF8uhRTL963PoitTl5qAbLraDOBx4FHnE+/8L57H59C7ixkgJWEiFEELgDtUJsBa4F7hJCRJfd8BRZTDkt971XsS2LtMvEF2yvvQdIfO9+pZysPPhMrFSa5JEjxPfuP/HGHqRxy2Yatp7hRFVmCNVYVKWbEjNfHfih2s47Fzubw8pmMfx+8qmUjuBbIcv1g7pdCHEmSontA54HjLl+YgOzUspajgW9AAhIKT/vfN4lhHgP8MfAV6omlcfJxuJF04svEsHfEKmyRCePlUpi+EyVDJrPkctkMfw+sr6TCmz1DOnxcYKtrQRbWwl1dbH5j2pr0uMm2N7G3EHVlqIe/FCBaDONZ20jdfQYdt4i0NzMhkteV5OTh9Vm2bvR5XOqrRCtlbMD2LPgu8eBZ1RBlpph6oEHi/2GQl1dxIaGa+5m80UipCcmsLMZKJRsylvkZ2dr8nwy4+6gldpb0boJtrcXA1hiux9n+sEH6dpZuwEs6bH5yUP7886n/bnnVVukmmE5H9T/AhdJKaec90sipXxe2SVbHZqAxILvEkBDFWSpCWJDwxz7wQ/n+w1Zqt9QrZmTmrZtJT06hpVKAzaGYRJobsYIBmrSD1XSl6vGfTbp6SnmntiH4ffha2wkG4/X5N9YgbSrw3Gos7OKktQey62gfgSkXe/rkTlgoX2qAZitgiw1QaG4ZTFktrUVI+CvuYd6185+xn/1a/CZGJaNbVnk5uZo6NlWk9FVtdbZeDmm738Qw+/DDASwM1n8ETVfrLW/MQDbtktXt1pBnRTL+aA+4X7vVDJvK/ichBDnAw9KKWu5ouNu4K8WfHc28M1KHCzY001mkYdfsIaieVIjo65+Q2CGQpjhUM091KN9vUTO2EJ8zx51PoaJLxwmfewowXPOrrZ4J4Wdzy+IqqxtBZUeG8cXiWDncoBNPpOp2bDs7MwMltP+xBeJ4GvUxpmTYaXtNnYAe4EPub7+AfCIEGJbJQRbJQYBQwjxV0KIgBDiSlS4+W2VOJgvFMLX2AiG07XENPA1NuILhSpxuIoQ6uoknyhYRQ18oVDNhswGmpsx/H7lg7Jt8qkUVjZHIQ+nVshMThUnDYHm5pr6e1qMcE93SSsXK52u2b+x9Fipec8wautvq9qsNPjhi8AvgU+4vtsK/A7493ILtVpIKTPAxcAbgEngw8ClUsqxZTc8RXyRCGYoiBEMqAcjhsrBqcTBKkTrc55d7DdkBAPkkomaDZlNT0xiFKP2lJnP8PlKyjjVAm4fR7AOTEhdO/uxsYuV8rMzMzX7N5bR/qfTYqUxtecDb5dSFn0zUsqkEOLvgQcqItkqIaV8FHjJahyradtW7FyO7EwMbAsMEyMQwEokaiZyrCRkNper6ZBZK5XEFwyokPl8Htu2sTJpsjVWBbye/E+gzK/rLn4Vx37wQ/LJJIbPV7sBEmPuyUPtX5vVZqUKahJ4OsrM56YPqJ9ubxWma2c/k/fep1ZP+Ty2ZWGl04R7aqeCQWZishgy2/GC59N27nOqLdIp44tESE9OloSa2zUYap6uQyd827Ofydxe9bgJtrfXzLVwY9t2aQRfV1cVpalNVqqgvgp8WQixGbgPlaR7LvC3wPUVkq3uiPb1YjY0YM/EwMqDYWIGg2Smp2umgkFJOHONO+Obtm0lMzZOJpmiEGrub2rCDAVrZsKgHoL1c00KuKuaZ6enlfm1xirm5+fmyDtVy81AwNWMUbNSVqqgrnV++7dAYRowCvwL8NkKyFW3GECgoaEY2WMG/GAYWKlkdQVbAbZt13wVczeFUHMzFMIAbNsC26Zhy5aaiRjLxWexMiobxAyG8Dc3VVmi8mAGg/gbG8nNzWFbFtmZmRKlVQsszH/SARInz4oUlJTSQhWM/ZgQohPISCljJ9hMswi+SESVCrIsDMPEymQxTR++iPfLBeXis1hZJ2S2EJFYw0T7eok+/WnEHtuNlUlj+PyEN6zHDAYI1IjyXeh/qqeHYLC9jdzcHKBq8tWcghqrr+CVarDiNbMQ4hlCiBuAu4BfCCG+LYR4UeVEq0+atm2lYfMmbMsmn04VTQDuDq9eJTNZakqqh4fhxssuxdfUCIaJncuRPHqU1OhYzUSMlc7S68O8V6C0/Xvt1eSr52uzWqw0D+piVLReB3Az8D0gCtwjhHhl5cSrP7p29pNPpzEAM6BCzu1cjszEpOd7EdWjrwMotkGwsSFv1VQWVL1eE1BNJQvUpIIa0wESp8vJ+KD+3l1dAkAI8RHgk6hVlWYFRPt6CXV0kD52HCubwfT5adiymUBri+cd8+5qBfUyIxwbGCTU011sKGcGAoS6uzx/LQrUc56Nu+1GtsbabuRTKXKzKivHMH0E21qrLFFtslIT3zks3vdpF7ry90ljpdM0bD2TUGcnwbZWzGCgJkq5uGuKuR8etUxqZJRgSyuF6hFWNocZDnv+WgDk02mnsR8YhlETZuKTwX0+mSkVyVcrlCRPd7Rj+HxVlKZ2WekK6hDwHOCJBd+fh4rm05wE4Z5u4nJY3XS5HLm5BFYuT8PGDdUWbUlm9jzO+K9/Qz6ZVPlDF0zUZOmZhYR7usnG45jBAFYmA9hkp2dq4twm77u/2PYk2NZGfO++mlj1rRRfKEQ+lWJu337yyST5dJp1F19UE+dYWuKoPqwN1WClK6h/B65zata90Hm9D/gS8B+VE68+aThrO6mRERVqbppY6RSJ/QdoOGt7tUVblNjQMAdvuLHYYgPb5snv3ux5n9lK6NrZT34uQS6VIjM1RWp0jNnhJzx7LQrEhoY5cuvt821PbJvDN+2qi2tSIDY0zOwTe4vnmJ2crJlzrGfT62qyIgUlpfw34HOoYrH/47zeB3xMSvmPlROvPkk8sZfGrWdi+gNgWximj8atZ5J4YmGhDm8wNjCIaZqYgQCGYRCIRvE1NhRbb9Qy0b5e2l/yIvJOCL3h9xNsa2XyV7/29INwbGAQDKN4TYItLXVzTQqMDQzib2wqniOmWTPnWFLdo0srqFNlxf2tpZTXAtcKIbqBpJRSlzg6RVIjo4Q3rCc9NkZudg4rmyU9PkEulT7xxlUgNTJaUtDWDIdqwme2UgoThkIQSKEtgpcDJVIjo8XADgAzHK6rawLqHP3RZvIJlQtlpdMEOzs8f44zu/cw/j+/dpnDX0543bpqi1WTLNdR99XLbSiEKL6XUt5ZRpnqnnBPN4kjR8nFZ1X1Ap9JPpHAyqQ9WQMu3NNN7HFZ/OwLhWu2/cFipEZG8bdEiwrKqoH+Q6GuLpJHjxZD5H2R+romoP7u3NegFtpuPNUcDk9+92aMGi12W22WM/H9cIWvH1RYxrqja2c/qaNHwTBU3xtbtXqIbNjgSfNFV/8F5J2Vnm3bWJZVs+0PFiPc042dz5NPp8lMTZN88ggzDz+CGQpWW7QlaTvvXOxsrmiWzKdSdXVNwGm74bR2sW2b7Owsudk5T5/j2MAgRp2aw6vBch11a6syYw0R7esl2NFBemKC/Owshs9PqKuT0LoeT87aGzZupGHbmaSOHiOfShNsa6P7wv66mRF27exn31euJxuLYxgGtgH5ZLKYPO3F8yxpe5K3arrtyVJE+3rZ8uar2Pul68jF4/giETZc6u1zfErH6Uj9mV5XkxX7oIQQJvAqVIuNrzv/Pq5r8p0aTdu24m+IFMNRDZ/fs+aLzOREscVGeN06Nl12abVFKiu1mDydHhsrXpP2551P+3PPq7ZIFSHa10v3BS8nefQoACGPJ7yGe7qJPba7+NkfiXj2vq4FVlrqaD3wECox95+AduCvgT1OO3jNSdK1sx/LZb7Izc161kRTEpFUZ+V0CljpNA1nnlEzydOlUWL1XUanJGHX4yWPOl/+MnKJxLw5PJ/37H1dC6zUjPevwG5Uq41CX4g3Ab8FPl8BueqeaF8vZ7zpKsxQCCudxjBNNl5+mSdn6+4SR8HO+qggsZBwTzfYFP1Q8aFhZn7vTT+UbVmleTZ1HsZcUjTW4yWPQm2tNG7fhhkMYufzBFtbarYbsBdYqYLaCfydlLIYBy2lTAAfBp5fCcHWAtGzBc1C4ItEyCeTjN71M0/m3pQUJG2vzxVU185+srNxsjMzqgW8bWOl0p4s4pudnsHK5QDwNzTgb2ioskSVpbQm33QVJTkx6bFxgq2tRHecw+bLL2P7u96hldNpsFIFZQDhRb7vBDLlE2dtERsaJv7448WQ1IwHM+XtfL6kUGetNylcimhfL+GebgyfH7DBMGgWfcXCsV6ipM7bGqhSsLCquTsIwWukx8aK7+vd9LoarFRB3QL8s+OLsgGEEM9ElUC6o0Ky1T0LM+UNn/cy5TNT08UHQqC5GTPoPZNXubCzOULdXcoP1dqKryHiST9UaRuH+ldQvkgYXygEgJXLkovPVlmipUmNuhRUt1ZQp8tKFdT7gOPAEaAJ5Y96ENjvjGlOgUKmfIF82nsJou6OrfXWb2gh4Z5ulZfm4NXE0PS4e5Ze/wpKVWqfX7l71Q9lZbOuIA5Dr6DKwEpbvs8CbxRC/A2ww9luj5RyqNwCCSH+Cni5lPJS13dbgOuBF6Cqp7+3UL1CCBEEvghcDuSBz0kpP+Xa9r3AB4EW1GrvnVLKOWesHxUAsh14GHizlHLVCuKFe7pJucw1XnsgxoaGOfztXSQOP4kvEiG0bn21RaooXTv7mXrgIbKxGFgWubkEwa5ONlzyumqLVsS2bdJj7jbva+MhmEuli5XbM5NTbLrics/5dpSvVlkbgm2tmIFAdQWqA5ZcQQkh/lcI8R4hRHGKJqXcL6X8kZTyjnIrJyFEkxDis8A/LzK8C/g9qqPv24FdQohtztgnAIFSMucDbxFC/Imzzzu6qgQAACAASURBVItQgRwXAetRfrQvOGOdwO3O9q3AbcBPnHyvVaFrZz92NouVzTmh5glys7OeCEmNDQ1z+KZdZKdnVKRhJsPkb3/rKf9YJTADru66Vt5z3XVz8ThWRsUqmcEQ/uamKktUeWJDw0zdd9+8r3Z62nO+WtD+p0qw3MP4XuAjwBEhxB1CiMuEEJWcEvwI2Ar8p/tLIUQf8Fzgo1LKjJRyAPg+8DbnJ28BrpVSTkkpD6DytN7pGvualPIxZxX418BVQogm4DLgMSnlLVLKrJTys0AIuLCC51hCtK+XLVdfhb+pESudxgwGWP/qV3tiZjg2MIivsQHbtjGcqtmBlhZP+cfKzdjAIKGubkId7YS7ugh1d3suSGKh/8kwvKZCy8/YwCCB5ui8rxY856sFSGv/U9lZUkFJKd8NbABeB0wCXwOOCyGuE0K88GQPJIQICiHWLfLqcX7yRinl5cDIgk13AIcKZjmHx4FnCCFaUSuj3QvHXNu6x/aizrlvkTEAySp3CI729dLyjGcUQ83HBgc9MTNMjYyqXA4nnNkwTQItUU/5x8pNamSUQGtL8bOVzuCLeMsnWDpLr3//EzjXpc19XdKeuy6gV1CVYFlzlpTSklL+REr5p0A3yrzWDvxMCDEshPioEGLrCo/1IuDYIq8jzrGOLrFdE5BY8F0CaHDGWDBeGHvKtlJKG0i5tl1qv6tGbGiYmYd/P2++mPKG+SLc012Sc2KGQuSTSc/4xypBuKcbK5PBymTJTE2TGhlh5uHfeypZdy1VkCgQ7unGSmcwnMrttmWRjXmr67GVVX8zCkN30S0TK/a3OOa1W6WUV6CU1YeBS3hqG/iltr9bSmks8jpRoMYcEFnwXQMw64yxYLww9pRthRCFfK7ZhWOLbLsqjA0M4m92NWUzDE+YL7p29pONxYolWzCMui/Z0rWzn9TYGNlYDDuff0rR2GqjAiTW3gqqa2c/+UQCDEOVD8pmyU7PeOpvUeWmOQES7W06QKJMnHRAgBDifODjwKeAs4BvlFmmhewGtggh3MrkbGC3lHIKFf4uFo65tnWPbUclHQ8vMrZw21VB9SJaYL7wQKh5tK+Xlmc9EzMYVI3i2tvrvmRLoWisLxQEbEyfn8imjZ7xQ+XnEuSTqtKY6Vc+wbVAtK+XzVddSbClxfHVBul40Qs99bfo9j+Ftf+pbKwozFwI8VzgClQo92bgLtQK6nYpZapy4oGUUgohHkZ18/0QylR4CVDwg90AfEwI8XuU2e79qNDxwtj1QoibgX3Ap4FbpZRzQojbgM8IIa5ARfD9JWABd1fyfBYS7ukmMzOD0ps2ViZLbnbWE+YL0zSJ7jgHgM1/dPmamLFb6TSN27eTOHyYfCJJ4vCT5OKzmB4oJ1RaQaJjTQRIFIj29bL5yisYHbwboJi46xXcK9u1UN1jtVguzPy5Qoh/FELsA36Hqsf3r8BGKeVrpJS7Kq2cXLwBOAeVA/VV4G1SykedsY8CjwKPoSIPbwGug2Kn30+i8p+OoLTAO52xUeC1wIdQQSCXA6+VUq5q6aaunf1YyRRgO+aLDLmZWNXNF/l0mmw8DqgAif/f3pmHyVWVCf93a+/qNemNTkJCEtIHgoqAouOomKCDfuigiCIIMo86iIOM4wjjhiijDIzO4seIIooLm/ixK8KoQ8IMbmNAZAu83VmAbL0vle7a697vj3Or+nalO0untk6f3/PkSVWdu5xT1fe857yrN6P0kUyks4PMxCTZ2F4cOweWRTaZIDMyXFU1X6ynlxdvuY3RJ/5IbPPz2JlM1fpSLcKeid+bwLgWMDuo8rC/HdQfgB3A7cCtIvJ8JTokIl+e4bMdwDtmOT4JXOr+m6n9W8C3Zmn7H+Ckufa1FOTVF1tv+Dapvj6gNlxUve7MocWLsfz+KvamcrSvX8fIHzbh4OCz/JDLYjlB6pYurVptqEJM2vhUTNropsdpOenVNaXmKjfBRS26oKTjkBnX9tFasPXY6TTpsXHAzXphdlAlY382qNNFZIWIfL5SwmkhY1k+gs3NhFpbcTLZqnvyTSvnsIAeuKbuNYTa2vAFg+4Oykd0xYqqVjvOx6ThiUkLtBzZMWkz4QsECLbkCxY609JwVRO9mMs7SCzGFzjoOrCGA7C/OKiF9ddfRWrRk28heovlaVi1kkBjI5Y/gJPNkti1i2Rff9XsgvmYtIJaz7IINbdU3ZGmGnjzQaaGa0PNZ+KfykfF0voYZqcWPfmmx9ssLAEVPXY1mbEx7GwGfD7tLLH9RaLHrq5Kf3RM2lSCVH8kQi55ZMekzYY3vqgWdlCxnl523HVPwTaYS6UOfJLhoDECqgaIdHbg5LLgZn6z02mye6vnyVccdHikZzEvJr5lK3VLluILBMGxsQJ+6lceQ3xLxfIIT6N9/bqCzUXHpPmO+Ji02Qi1tpIeGyO2+XlevvP/sfXGm6qmCp/KVzlWsA0OPvbrmoiZO1LYnxff8kp2ZCFT8OSzmApEHK9eIOJCz8qc7B8gsqQLf7QOyx8gl0yRHhll79btVelPU/caGteuLcSkhVuP/Ji02UiPjjK5ZRt2Oo3l85GJ7a2avXZww0Z8Ee3urm2DIYLNTQvONlhO9reDek4p9YmK9WQBk/fkC3oCEdtPe1PVJqCFbH8CNzZtbHS6q3kiXjVXc8e2sXBoWns8i045mdV/c8mCFE4Aw7/7X3zhkF40OQ6+UKhq9tpk/wB4YtH8kTCBhoYFaRssF/sTUNcB/6yUekwpVZxxwVBimrrXsOy972HRKSfTtPZ4AnXVCwxNe+1PC8iDL0/7+nWk9vSBz6cLGDo22DZ1S5ZUZSJMj44VHCT8dXULosTGbKQGBvDXT40/l0xWzV5bnK/SH43WVD23I4H9efFdA7wCGAf+pJT6vFJqYQTDVInpHkrVMQDHenrZ89DDBaNvZnLywCcdYTR1ryHU2oovHMaxc1g+P5Gurqq5mqcGpu4Z6excUBkkiol0dmD5psZvJxJVEwr75qtkwdoGy8V+HfZFZDvwTqXUWcDXgfcppb6CzgjuPe6h8nVx4RBune6hlK/FVCliPb28fPuPycT2Foy+/b/4FeH29gWnUmpYtRLL7ycbiwFg+f1VmwiT/VMVaBb66rx9/Tomtm7HzmSwAgEy4zGwrKpUPW48djX1K1botFiJBOH2djrP+IsF96yUk4Py4hORB9DJYU8A7gYe9Pz7Wdl6t8Dw10fxRyKA9qTLuqmGKsXgho1YgQC+YADLsghEowQaGxak0bd9/TpwHVYcxyE7Hqva6jjl2bWFOzv3c+SRTz4nX95hxHFsjj7v3KoIhdTQEIHGBprWHk/7m9/EmssuNcKpxBww5NnNXn4D8Cp0OfarK5iDb0FhWdqlO7FrF6AfgGBTU8Xun+wfAN/UmsVfV1f1eKxq0dS9huUXnM+2G28il0hgRf0c/YH3VXwCstNpT0CqZfK8AYtOfjVjT56IndZpM+u6uqrSj2SfZ2dbpT4c6cwqoNxqtdcCH0Xn5TtFRJ6rVMcWKuG2KQGVHh6BVasqdu9IZwd7PbE+vrq6BW30bXnFCbS+7tRC0txwFeLBkgODTKszFKqd4onVwrIswu3tUwu5wUGCTY0V70fSzZ0JUNd1VMXvvxDYn4qvBzgX+ISI/LkRTpUhtHhx4bU3m0MlaF+/jmxs75TRF2fBG329iXuTnozVlWK6g8TCXCjMhHcn6f2OKoXjOCT3TAmoyFFGQJWD/QmoR4DjReQ7leqMoaikQIU9+epXLCd6zPKpgNC2tgUbEJrHm1vNGx9WKaapkcwkWCDcMSWsq7FwyO6dIOt6uPqCQUKtiw9whmEuzKriE5HzKtkRg2ZaSYFYDDudrphaJzUwSKilhVBLixZO7z+nIvetZaYLqKH9HFl6HMeZ5sHnnZQXOsULh0p7vCb37Cm8jnR2YvlM1rhyYPLC1xi+QAA7Z7P3hRfIJRJsSSY56p1nVmQXM92deWF7i+XxZtJID4/g5HIVq42V3TsxVeI9GCS0qOUAZywcAo0N+MNhcqkUdjpNZjxGqKX5wCeWiOkOEmZnWy6M2K8xYj297H1B9M4pHCY1PFqxXGMpr4A6yggo0JnDg43aAO/YuYpWci3ePZlV+hSWZeEAsc3PM/rEH9lW4aSxXgcJI6DKh/mLrzH2rQ1FRXKNOY4zbVUYNgb5Al51UiXtHcZBYnZiPb3Enn1uaiE3MlKxhVwulSq4/luWZbQNZcQIqBoj2T9A0KOqsCuUaywbixVq2fhCYYLNlVOX1DpeT75K2aFiPb3seuBnnjpDJvTQy+CGjQSamqYWck5lFnKQ1zS4rv+trQsu238lMQKqxoh0doDtFN7nkklyE5NlX0FP06l3dizofG/FVNqTr5Byany8kHJq4L82mjpDHpL9A9NscnYygb+uMkHlCeNeXjGMgKox2tevw3Z3Mo7jYKfTpCtQG8r7YBt10nRmcpQoJ4MbNmL5/fgCnpRTTY0LMuXUbEQ6O7DTGexslvToGMn+AcafegpfuPwer8b+VDmMgKoxCrWhWloKtaHa3viGsnvxTbN3GAeJafgjEex0htjm5xnZtIne628o624m2T+AY9tT949GF2zKqdloX7+O5OAgmfEYTi6HY0E2Hic9PFLW38bJ5aZpG6qVZmmhYARUDdLUvYaj339OoTaUPxQu6/3Gn3+Bgf/+n4K9I+1m8DZoYj29TGzZUjDIp4eHy2qQj3R2kB2bqjMUqK9f0CmnZqKpew3h1lb84TDg4PMHiBx1FOGO9rLuNIc3Pc74M88y+sQfmejdQnz37rLdy1BDcVBKqU8CnwRaAQE+LSKPuW0nAjeiE9ZuAz4sIpvcthbge8DbgAngShH5gdtmAV8BLgZCwA+AK0Qk67a/H/gnoAv4b+CvRKQmlqneycjrblxqYj29vHTLbXq3Fg6D47Dr7vvwhcILOoOEF+1Z2VgoveEAAdcgX47vqO20NzOy6Qksvw8rEMCxLOzJeFVKStQydipF4/HHkdixAwALq6w7zVhPLzvvuqewUMHnY8cddy74bCvlpCZ2UEqps4F/AN4JLAK+DTyolGpXSoWAB4CfAC3ANcAvlVL5NN/fBnJoIXMmcJ1S6jS37WLgbOBkYA3wWuDz7j3XAjcDf4UWir3AnWUd6CEQamsrOCpkxscLHnalZnDDRiyfVfCGCjY3V62Edq2iPSunDPK5eLysE2GwsZH61SvxhUI4uRzhxYvMJDgDehHnkEulSY+OEd+xg/GnnimbHWpww0ZdZt59VkItLeZZKTM1IaDQwuWfRGSziNjuDigHvBJ4CxAUkW+ISEZE7gSeA85VSkWBc4AvikhcRP4EfBctmAAuAr4hIjtFZBD4MvAxt+0C4Gci8mu3fMjngD9XStXELOALBKZX2C1T/E2yfwAn57F3LOASG7ORnwhBLxjsVIpsbG/ZVG6JXbsItbTQtPZ4Vpx/HqsvudgIpxloX7+O1PAI2diUHSpXRjtUsn8AO5stvPfXG9tguamYis/dCc2UUdERkRuKjn0z0IAWROcBzxed8wJaeHWjZ47eora8LmQtsLmobYlSarHb9ni+QUTiSqkd7nVrwp830tlJakjH3ST7+4kevazk9wh3dDD+9NOFLAV+Y+/Yh/b169hxx51Yfh92NouTzZIeHWXpe99TlvslduwsvK5btrQs9zgSyNuh0v0D5FJJbYfqmrJDlVqoB5uaSOzapXdQfj/+cIRsvPwhIAuZSu6g3gDsmeHfLu9BSqlXoNV5V4pIP1pQxYuuFQeibltSRJwZ2pjh3Pzr6AxtxedWnWkBomVapS06+STsVBo7kwG/HyebXfAlNorJe1aGFi8ueFYufs0pZdnV5FIpT7YKi7qlS0p+jyMJO5Wi4bhuwm1tOi7KKp8dqn71KpxsDjuTwR+tJxufNM9KmanYDkpEHiWvI5kFpdQ7gVuB60Tka+7Hk0Bd0aFRtEPEJBBRSlkeIZVvm+ncvPCZmKGt+Nyq402hkhwYKEvGZn84RP2xq0ju3gOOQ7CpkSXv/kujUiqiqXsNKz98EbsffKis90nu3kM+S0G4vQ1/JFLW+813Ip0dpEfGyKVS5OIJnKEhMmPj1K86puT3sqDwrDi5HMHGRpacZZ6VclJrXnxfRXvS3eNp2gx8qujw44Bb0Ko4C1iJ9u7Lt232nKuA33ja9ojImFIq35a/fxRYznSVYFUJLmohOzFB/OUd5BIJsnsn6Hz7X5T0gcjbO0ItLbSf9maaT1hbsmsfaeisARbgkBoaJpdKuW7OpSPuUe9FjXrvgLSvX8e2795MNrYX3ASyXjtUqZ4VO5MhsXtP4Vk55kMXEGhoKMm1DbNTE04SHnfvtxYJJ4CNgKWU+pRSKqiU+gDa3fw+EZkA7gOuVUo1uO7of43eheH+f7lSaoVSqg3tJJFvuwM4Syn1FqVUGF3e/kkR6SnjUA+Jvb1bmHzxpamEmENDJY2/cXI5Erum6tqYCXH/+EIhT1YJZ1pNoFKR2Om1P5Xe5nikkbdD+SKeeKilS0oeDzX8u98z/qwb/7R1G/Hdpf/tDftSEwIK+CwQBh5RSk14/r1TRNLAO4D3AiPAF4B3u155oL3ybOAl4CHgGhF52G27EbgL+C16t7UZuApARJ4BPuweMwScALyv7CM9BAY3bCTY2DiVEJPSJsRMDQ5iZzMABBoaCDQ1HeAMQ92SKZuQV7iXguzEJGk3QNfy+U0anYPETqVo7F4zZYdynJLaoWI9vey89/7CQtHy+SuWOX2hUxMqPhE5+QDtzwJvnKVtFO3pN1ObDXzJ/TdT+z1A8Y6tZsjH32QntFksNxkn3NlRsgcvsWsqCj66bKlJEHsQ1C3tYuyppwBKvoNK7JryF4p0HYUvUBOPZ82Tt0PlyU3Gye4tXRjA4IaNONlsIWt5uK0VfFbZArUNU9TKDsowA5HODtetRAuOXDJZ0vib+M6pCbFuqVHvHQyRri7yv0dqcBA7nS7ZtY39aW60r1+HnU5h+Xw6wXImTXp4tGTedYldu6dyI1qWiX+qIEZA1TDt69dhJ1NYfs+DN1qaB8/OZqdlZTbuzAeHPxzWK2jyRR77DnDGwRGTHvY8+POp+k+ZTEmuuxAohAG0txfCAJpPfGXJdje+cBjHDdAN1Ndj+XwmVrBCGAFVwxQevNbWwoPXctJJJXnwhv/3D1NJL7dsNUbfQ8Bbanz793902LaIfD7EbDzuToY5+h7+hbFxHAJN3Ws49uMXFxIs28nUtIzwh0O4o70Q/xRobCA7aeKfKoURUDVOU/caVn30w4UHj1z2wCcdgFhPL7vuvncq6aXfGH0PllhPL6OPPzGV2Xx09LC/u7zTSyEfYkszgYZ6k+PtEAm1tRGorwfATqdKsrvNxhM42Rz1x67CFwphpzMEGxtNbsQKYQTUPCByVGfBYJ6JxcgcZjmMwQ0bcWy7MCGGFy82SS8PksENGwktWlT47pxsDl84fFjfXbJ/YJotK1Bfb2wcc8CyLKIrVhTeT7740mFfc/CxXxPbvJnJrdvwR6Msv+B8kxuxghgBNQ+w/H4iXvfmnbv2c/SBSezeg53J78QsAsboe9Ak+wcINDXir8snIXF0EbvD+O6sYID4jp2khoZIj47hOI6xccyR+pXHFF5Pbn/xsK4V6+llz08fnHIvDwSMpqHCGAE1T/B6dcU9wZxzwR8O47jxT/5oFCsQMBPiQRLp7CAXjxP0xIylh4bn/N3FenpJ7N6Dk8uS9w6c3LqN1MCgsXHMgbqlS6a0DePjhbiyuTDwq//CzmYKu+VIe7vRNFQYI6DmCXXLlpEeGyO2+Xl23nUPW75905xXcqH2NmP0nSPt69eRm4zrQoKOg53JkNkbo/WNb5jT9QY3bMQfCBJsbsby+7H8fnyRMKHWxUaNNAd8gcC0DBzxw1DzTb74EpbfD4A/EsEXDhlNQ4UxAmqekBoeJr79Rex0GisYnHPao+zE5DSjr5PNGqPvITCV2XwRODr9Uf3qVfh8/jldL7Gnj1wmjT8cJrSohUUnn0Tzq16JnSpdfNVCo37lMYXF3NabbmbrjXNczFlWwb082NIMYDQNFcaEqs8TBjc+SqCxCTuV1B/YdkHdcCiCZWLbNsAh1NJC8wlrWWrKiB8yTd1raOpew9hTTzP0m98CMLFlq/ayPARiPb0kd+8mPTaGLxjSzhfhENlJU2PocMhlMkxu2YYV8GMFgqRHxw6pNHusp5e+h/+TRF8fTjKFvz5KoKmpoGlYYp6ZimF2UPOEZP+AXrW7ZMbH8dcdurphYsvWwuuGY1eXrH8LkYbVqwqvE7t2kUskDvrcWE8vO+64E3w+sHzY2Qzp8XGSe/qMuvUwGfnt7wg01Lu2I3RuvoO0HeV/l+TuPQQbGvBF67BTaRK7dhtNQxUwAmqeEOnswAr4wZoqO54eHTmklXZ2YtITG2JRv3LVfo837J9AQwORo44iPTbG+HObefaqqw9anTS4YSNWMIgvECDY1IgvEMTy+UiPjZlJ8DBJ9g8QXDxVvDs9MnLQi7nBDRvxR+vIJVM6Jq2+noY1x9KwaqVxL68CRkDNE/Jpj3zhcME4nx4aPuiVdqynl55vXF9IpWMFgwSixfUaDYeKLxxicsu2QhxTZu/eg7INTmzbzsSWLaSGhsjFE4Tb21j8utcSbmszk+BhEunswB8KFRZzuUSC9NDQQS3mkv0D2NlswcvV8vsJt7UZx4gqYQTUPCFvnK9b0lVIe1S3bBkNq1Ye8Ny82iI1OIgvHMZOp9krYuI5SsDktu1YAT++YJBcPIE/HD6gOinW00t6aJhcPI7l8+PYOTJjY6T6+o3tqQTo5LFp/HXRwmIu2ddP+7q3HPBcXzhE7NnNhZg0XzhCLpkwv0uVMAJqHtHUvYbuv/87Ot5yGk1rjydQHz2oYMTBDRuxQkGcbBbLsvAFQ4RbW008RwlIj4x66mjpSrsHckUe3LCRQHMTOOA4NpY/AP4Aid27je2pBOQXc9HlR2On0noxt3wZ/nBov+fFenpJ7NqDnUkDFo6dI9Xfb2LSqojx4ptnWJZF4/HHseOe+0i89DKDj/4P4c4Ous56F11vPX3Gcya2bSc1OKhX7P4A4bZWAk2NRm1RAiKdHTi5HGnXQSI9MoIvEt7vijvZ14eTyxFoaiQXT2D5fATq6vBFo0a9VyLynpZDv/4NY08/A8DIHx4numLFrHXPBh7ZiGVBsLlZ/y6Wha8uYmLSqogRUPOQeF8fE9IDuRwAiR072fat75Ds62flBedPO3ZGddL4OKm+flNiowS0r1/Hy7f/GMvv17aLTIbk7j6WnfPe2U+yLOxkEn84TKC+gYY1q8klEgQbGyvX8QVCy8knMf7cZlLDwzoD/R+fpP6YFbSvXzdN6MR6ehn+3e/JJRP4AkEC9VGaTjgBKxggPTRcxREsbIyKbx6y54EHC8KpgG2z5/6f7mNXGtywEX9jw5Q6KWDUSaWkqXsNyz94HtEVK7BTKW3zSCV56Ue37uPRF+vppff6G9i7dTuZsXGy8TjhjnZyiYRxLS8TgWiU0OLFBUcWO50mE5vuyBLr6eXlW2/HyWSwLB+OnSOXSJKLx01gbpUxAmoekhkd1fEzUPBUwufDyWan2ZViPb2M/OFxknv6cNzP8uqk4OJWo7YoEU3da1Cf/jva3vwmyNlgWeRSqWkTYaynl5dv/zGTL75IsKFex9ckk2TGx018TZlJ9vfjCwXxBYPYqRTZvTF8kQiDGzYS6+lly/XfZG9PL3Yuh5PLYfl8+OoiTL70klk4VBmj4puHWH5/IQULjit63B3V3q3bgSnPPTub0Tp3t3R8k1JYoaBRJ5WBzNg4ViCALxjATiRIDQ2RGR9n81evhWwWO5fF5w/gr48SrK8nvGolkY4OVl9ycbW7fkSTHh4h1N5OZmREvx8ZJdc/QHZiksHHfkMukcAKBLB8FnbOwR+JQM7GsR2zcKgyRkDNQxrWrCb27OZ9GyyL+PbtPH/d18lO7CWxew/ZeBxyWrUXaGhg8uWXqevqMulaykBmbIxwRzuZ0VFyqRSpwSHw+XSMlOOA4+CEHLLjMYJLlxJqbTWOKhUg0tlBenwcJ5XS6YpSKTLj4zg5XRMNwEmnscJhgg0N+KNRoiuWE2xsNMKpyhgV3zxkxYcuJNTevm+D4+BkMoz87vfEnnmOzPCIVjkF/GDbOLksTjZnVoVlItLZQaChHn8kQi6eAJ9VCOC1fD6dfDRnF2LRjH2jMrSvX4edSBJqayOydIn+bRyw/D7wWdoua6GLeNZHye6dMKq9GqFmdlBKqc8AlwKLgc3Ap0XkMbdtOXAz8HpgALhMRB5y20LAN4FzgBzwbyJyree6lwGfAZqBB4CPicik27YO+L/AauAp4EIRmUpWV6M0da9BXfH3PH/NteTiCZxMZkrVV4xtQ84i1NoKPotFJ73aCKcy0b5+HTvuuJNQR7tONOo4YNtYITf+xrZxHAd/QwPZiQmTeLRC5OOiBjdsJNk/gD8SIdJ1lLbN2jmt0qurw04msONxAk3GJlgr1MQOSil1DvAJYD3QCHwfeEApla9hcCfwNNAK/DVwp1Iqn0juakChhcxrgYuUUh9yr3sG8AXgDKALiAD/4ba1Afe757cA9wG/UErVxHdyIJq619D2Z69n8amvIdjSMuUsMRO5HI6FWRWWmUIpjuZm/JE6AvX1ekcVChGsr8fv7q7shJkEK01T9xpWX3IxJ3zpShaf+hoiR3XSeLzCX1eHPxLGFw4RbGmh/phjOPayS83vUiPUymR8D3C8iGxBC5HFwAhgK6W6gdcAV4lIWkQ2AD8FPuKeexFwjYiMisiLwL8AH/O0fV9EnhORCeCzwPlKqQbgbOA5EblHRDIi8nUgDMwc7VqD5Ivn+Q4QIQ86wLfpFWvNg1dm8hOh+szl1C9fTnTlSp3Fw2fhAQJLXQAADYxJREFUCwRpWL3KTIJVJv/c+CMR6o89VselxRPUr1xpFg01RsVUfK4qbvEMTY6I9AMTSqm3Az8HssD7RcRRSq0FXs6r5VxeAE5VSrWgd0abi9pe6b5eCzzkaduKFsrdbluxp4G45/5qDkOsOPkV+6577yM1MDi7mg+o6+pi6dnvqWDvFjZetVIumcJOJvDX1VG3dMk+QaKGyjLtt+kfYNFJrza/SY1SSRvUG4CZkr/lPP3YiN5BnQv8RCl1EtAAxIvOiQNRt42i9nwbxee6Ai/pOXe2684bmrrX0PTZf2D7bXew+657Zjwm2N5mVoZVIJ9ux1B7mN9mflAxASUij+JG4+znmJT78jal1CXAO4DtQHFdiCgwAeR3VXUztOG2F9qUUhZaAObPLRZG3nPnFSsvOJ/IUZ1s+/ZNkI+RAppOOYlXXnVlFXtmMBgMc6MmvPiUUv8ArBSRj3s+DgNjaDXccqVUnYjkS5YeB2wWkVGlVB/aSWKXt819vdlty7MaLSR73bYPFnXlOOBrpRlV5el66+mzJow1GAyG+UZNCCjg18CXlFJ3AL8DPgwsB34qIkNKqaeAa5RSn0OrCs8C/sw991b33KfRarvL0a7j+bablVJ3A9uA64B7RWRSKXUf8DWl1PvRHnyfBGzg0bKP1mAwGAwHpCa8+ETkt8BHge8BQ8B5wFtFZMg95L3A8egYqO8BHxGRZ922q4BngeeATWiPwBvd6z4EfAUd/7QLvXv6mNs2ALwL+BzaY/Ac4F0iki7nWA0Gg8FwcFjOfjy/DLOjlDoG2P7II4+wbNmyanfHYDAYaoadO3dy+umngzbdvDjX69SKim8+4gfo6+urdj8MBoOhpvDMi/79HXcgjICaO10AH/xgsZ+FwWAwGFy60PGnc8IIqLmzCXgTsAcdy2UwGAwGjR8tnDYdzkWMDcpgMBgMNUlNePEZDAaDwVCMEVAGg8FgqEmMgDIYDAZDTWIElMFgMBhqEiOgDAaDwVCTGAFlMBgMhprECCiDwWAw1CRGQBkMBoOhJjGZJCqMUupEdLb1V6FLgHxYRA4r2rqcKKXehi5TsgadTf7rIvIdpVQLOrP829BFHq8UkR+451joLPIXAyHgB8AVIpKd4RYVx+3708BVIvLD+ToWpVQX8G1gHZAEbhKRLyqlQsA30Rn6c8C/ici1nvMuAz4DNKMz/X9MRCaLr19plFKvB65H13AbBK4Tke/Np/EopU4FHhSRDvf9nPuulFqHLh20GngKuFBE5pw2aC7MMJ4Ot0+no6tDPAx8UkRGyzEes4OqIO4f6wPAT4AW4Brgl0qppqp2bBaUUkejy5d8Fd3f84BrlVJnoCfGHDqdyZnAdUqp09xTLwbOBk5GC7bXAp+vbO/3y43AUs/7+TqWB9CptjqB1wMXKaXOB65GT/Kr0f29SCn1IQD3t/sCcAZ6vBHgPyrf9ekopXzo8VwvIs3ov7Vvugu6mh+PUspSSn0U+CV6IZNnTn1XSrUB97vnt6Br1v3C/Z6qOZ7vAVlgJfp5WATcUK7xGAFVWd4CBEXkGyKSEZE70XWszq1ut2blGOAOEblPRGx3p/coevV0DvBFEYmLyJ+A76Inc4CLgG+IyE4RGQS+jFuHq9oopS4CmoBn3PdR5uFYlFKvA1YBfysiSRHZjv772oju8zUiMuqWOvgXpvp8EfB9EXlORCaAzwLnK6UaKj2GIhYBHYDl7lod9ESYZn6M52rg4+jFnJe59v1s4DkRucedK76OrjJeqZLZ+4zHFSY2cLWITIrIGPpZeWO5xmMEVGVZCzxf9NkLwCur0JcDIiKPicgl+fdKqcVMJch1gF7P4d5xrAU2F7Utcc+vGkqplcCX0BWb83QzD8cCnIIWsl9WSu1SSm0F3gMk0KvX4j7PNp6t6Hmgu+w93g8iMoxWhf0IyKCTjH4e/bc2H8Zzo4icAjye/8BVHc+178VtAELl5op9xuMuUt8tIls8x70beNJ9XfLxGAFVWRqAeNFncSBahb4cEkqpZuCnwP8CTwBJEfFmGvaOo3ic+ddVG6dSyg/cBlwuIt4iXg3Ms7G45BcLGfRO6mzgcuAv3fbiPs84HnfcSao8Hnd1ngTOB+rQu8EvMU/GIyK7Z/g4v4ubS9+rOlfMMp5pKKUuRwuoz7gflXw8xkmiskyiHz4vUbRhvmZRSnWj7QObgQ8CxwMRpZTlmdi94ygeZ/6PsJrj/CIgInJv0eeTzL+xAKSAmIh82X3/lFLqe2g1C+zb5xnH46rTIlR/PGcDfy4iV7jv/1spdTPzdzyg+wZz6/sk+07eNTFXKKWCaNvSu4D1IvKC21Ty8ZgdVGXZjDaYejmOfbe+NYNS6s3oXdP9wDkikkSrwyy0oTSPdxzF4zwO2OPqrKvFB4BzlFJjSqkxtGrhW8BlzL+xgFYVRV3HmzwBYBToY98+zzae1ejxe1Wc1eBotE3CSxbtzTcfx4Pr2TbXvtfkXKGUagR+hXb4ONW12eYp+XjMDqqybEQbgT+F1re/F+1ufl9VezULSqnVwIPAF0Sk4BklIhNKqfvQHn0fQf8h/jXwV+4htwKXK6UeQa+cvux+VjVE5Djve6XUn9DODz90jbjzZiwuv0JP3v+qlPo0+uH/CNqwvQ34klLqabRq5XK0ey/ovt+slLrbPe464N4acDP/Jfo3uBhteD8Z/Tt8FHiZ+TeePLcyh767z9fXlFLvR88Pn0Q7KDxa4f4Xcyd6Y/MmESlW2ZV8PGYHVUFEJA28Ay2YRtAume92vcNqkUuBRvTEMeH5989oTyQbeAl4CO2p9LB73o3AXcBvmVo9XVXx3h88824s7k72NLT9aQ/wn8DXROQedP+eRXuIbkKHCtzonvcQOq7rAWAXeoVbda9EEXkOreb7GDAG3AF8VkQeYB6Ox8Oc+i4iA2gV2ufQc8U5wLvcOaQqKKVeBfwf4FRgwDMf7HT7XPLxmIq6BoPBYKhJzA7KYDAYDDWJEVAGg8FgqEmMgDIYDAZDTWIElMFgMBhqEiOgDAaDwVCTGAFlMBgMhprEBOoaDIeIUuqHTKXgmYmr0QGIG4FGN7Nz2XHzDf4G+JCI9MzQ/gl0LsJjytyPbwKbRORH5byP4cjH7KAMhkPnk+gs1V3opKaggxfzn/0LOrC3i6l8bJXgb4GnZhJOFeYfgX9USrVWuR+GeY7ZQRkMh4iIjAPjUCjEBjBYlCUddB62iqCUiqCj9NdX6p6zISIDbmqoy9CpoQyGOWEElMFQBpRSb8Gj4lNKOegqsZ9D5817HLgAuAK4EIgBnxORW93zG4F/RaeEcYAN6NLas5VB+AAwJiLPevrwWnTW6Veh0+z8tqiPZ6DVkSe69/g98Dci8oJS6iFgWEQu9Bx/FXC6iJymlHoPOq3NsehUS99yi9DluRedl+0aEckc/DdnMExhVHwGQ+W4Dvg7dHn25cAf0YLptegJ/TueSrA3oQXZGeicew66RPZsi8oz0fn4gEJxyf8EnkInXr0F+JSnfQW6vtdd6GJy69E1pvJC5jbgLKWUt1TEecDtSqlO4CfAv7t9vAK4RinlrY76X0ArurCiwTAnjIAyGCrHDSKy0S1R8CC6Fs7nRUSAf0PX0lmplFqF3hGdLyKb3F3RhcAxwNtnufZr0AlJ85yLrhn1CRF5QURuBn7oaQ+gHSb+VUS2i8jv0dmo17rt96OTfZ4JoJQ6GZ2Y9m5gCRAEdojISyJyN7p0d2H35iaz3eb2y2CYE0bFZzBUDm+p7DjwoqdIYtL9PwyscF+LUtNK6ETRO5YHZ7h2JzDkef8K4Jki9dofcAWciGxVSt2rlPoMcAK6Ns+JaHUdIhJXSt2LFpR3oyvdPiwiI0qpUeB29I5uG/Bz4BYR6S/q0zDQMduXYTAcCLODMhgqR7Etxp7luIB77EnAqz3/uoEfzHKOjd7xeCl+XyhtoJR6Bbro4euAJ9B1iq4sOv424EzXHnYuWighIo6IXOD27xb3Gr9XSl1YdL4fyM3SX4PhgJgdlMFQezyPVqHV5yuWKqXq0QLjn9HODMX0Ae2e90+jKwiHRSTlfnayp/0i4EkROTv/gVLqA0wXao+ga/dcATQBP3OPOxG4SET+HvgTcLVS6g60jcpbzLGNCnoyGo48jIAyGGoMERGl1E+BW5RSl6Ir516Ddq54YZbTnkCr6PLcCXwJ+K5S6p/QwumjaIEDWv12nFLqTejicmehK9gOe/phK6V+jBZQd7p2JdxrfNxV9d2Gtkm9Ho9wUko1o1WVm+b0JRgMGBWfwVCrXIR2Rb8fPck3A28TkbFZjv852tsPKMRqvRUtJJ5Eq/D+3XP89WhPu5+hhds7gUuADqXUMs9xdwARXPWee+0d6Oq370E7Ztzj9vMaz3lvRO+enjyEMRsM0zAVdQ2GIwClVBR4EXi7iPyxhNc9E+3yfrSIzGYzm+m8HwObReQrpeqLYeFhdlAGwxGAiMTRMUyXluJ6SqmVSqn3oW1eNx6icOpC7+ZuKEVfDAsXI6AMhiOHfwdepYp80+fI0WiPwZ3ojBaHwpXAlSIycsAjDYb9YFR8BoPBYKhJzA7KYDAYDDWJEVAGg8FgqEmMgDIYDAZDTWIElMFgMBhqEiOgDAaDwVCT/H/0KhC5Pb6tIQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot(results.vy, 'ro-')\n", + "decorate(title='Earth Velocity',\n", + " xlabel='Time (days)',\n", + " ylabel='Y Velocity (m/s)')" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Nq0vKaw0yVLn" + }, + "outputs": [], + "source": [ + "x_0 = (0 * AU).to_base_units()\n", + "y_0 = (1 * AU).to_base_units()\n", + "\n", + "vx_0 = 0 * m / s\n", + "vy_0 = 0 * m / s\n", + "\n", + "init = State(x=x_0,\n", + " y=y_0,\n", + " vx=vx_0,\n", + " vy=vy_0)" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "2mYVqxxmyVLq" + }, + "outputs": [], + "source": [ + "system = System(init=init,\n", + " G=6.674e-11 * N / kg ** 2 * m ** 2,\n", + " m_sun=1.99e30 * kg,\n", + " m_earth=5.972e24 * kg,\n", + " t_end=100e6 * s,\n", + " r_final=695.508e6 * m + 6.371e6 * m)" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": {}, + "outputs": [], + "source": [ + "def event_func(state, t, system):\n", + " x, y, vx, vy = state\n", + " position = Vector(x, y)\n", + " return position.mag" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "AwVA_CYZ-O_u" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl8nXWV+PHP3bJvbZqlTbqk20kLLdCylLVABUFwQ0ZHUfGnjjP+9Oe44DijiAKi4KDiDi7jAioysmkBASuyF1qgdM3pltKmbZam2de7/f54noSbNElv2+Tem+S8X6+8mme95/a2Ofkuz/d4otEoxhhjTKrxJjsAY4wxZiiWoIwxxqQkS1DGGGNSkiUoY4wxKckSlDHGmJRkCcoYY0xK8ic7AGPGAxHZA8we5vAtqnr9cd63CLhEVX/vbv8DWK+q1x3jfd4GXAecDkSBjcD3VfVPR7nu10COql49zPGvA1eq6unu9rvd+PYdS3zGHA9rQRkTvy8D04f4uvUE7vlt4KoTCUpEvgDcD6wBzgLOdLd/JSLfPpF7A7cDb3VfZzbwAJB/gvc0Ji7WgjImfm2qWjvK9/ScyMUisgS4DXiHqj4ac0hF5DXgKRF5XFXXHM/9VbUdaB+NWI05VpagjBklIuIHbgSuAcqAw8C9wOdVNex2p/mBBe7XVuBc99qoqvYlgCIReQC4DGgCvqWqPxrmZf8FeH1QcgJAVZ8WkSeBTwJr3O66s3B6TlYAn3FPzRKR3+G05GqBL6nqfW5cX+fNLr5q9/xNInKjqn792P6GjDk21sVnzOj5IvAh4FqcBPRF4FPAu2LOuQb4KXAx8DbgPmA1Tldhnw8CTwEnAz8DfiAilcO85pnA2hFiego4O2b7MuAZnATVl9QuBxqB04DvAX8QkfOGeS2AC3G6/owZU5O+BSUiZwKrVbX4GK/7HLBSVd81xLH5wCtAmdtFYiaG74jIUONNi1V1L7AF+IiqPu3u3yMiXwQW44wJAaiq/rrvQhHpAnyDug4fUdUfusdvxhn7WgpUDfHaU3FaasNpBKbFbHfhtMgi7v0BFPh3VY0CVSJyEU6r67lB92rou6f9uzaJMGkTlIh4gI9xjL8JikgO8DXgC8Cfhzj+HuCHQN4ohGlSy7eAe4bYfwBAVf8sIhe5ExMW4iSVOYAv5txdcbxO/zmqGhGRNiBzmHMPM/K/tQLgUMx2dV9yivGSm5z6rAPeG0ecxoypSZugcMYKrgC+AfRPERaRDOCbwD8BAeBhnDGEDveUR3B+k7yLgd0yiMgncKb63oTTjWMmlkOqunO4g+54zb8D/4PTYvoSzhhUrK44Xic8xL7hJii8CFwwwr3OZ2AX4FCvP/j1vEDvCPc0JiEm8xjUnaq6HFg/aP+3cZ4lOR0QoBj4Qczx97vPjNQNcc8/A5XA30Y/XDMOfAr4gqp+QVXvBvbgPDs10uy3E613cxdwsttyH0BEzsUZ5zraL0tLB22vwJnAMZjV5jEJNWlbUKp6YPA+t9vv48BFqlrn7vtPYKuI/F9V7Rnquph71rrXjFHUJslyRaR0iP29qnoYZ7znChF5Bqfb7evAFCB9hHu24ySY2ar6xrEGpKpVIvJ54B53IsX9QBBn4sM3gDtU9Wi/MJ3mjq39GrgS57mn04aJFeBUEdmnqi3HGq8xx2Iyt6CGUoTT1/+EiDSLSDPwEs5/+OFWETCTxzeBg0N8PeAe/whQAWwCHsJpQf0SWD7CPX8NlALbhkl+R6WqPwbejtPV9zzwKs4Y0r/EuSLFPTi9BRuATwD/pKqbh3idRpz38wucLnJjxpRnslfUFZELgYdUtUBEfEAnsFRV1T2eDswFtqtqOOa6rwOnjjCLbweQa7OdjDHm+FgLKoabgO4BbhORQjc53Q78JbmRGWPM5GMJ6kifBWqA13EmQiwELo9tPRljjBl7k76LzxhjTGqaVLP43C67M3AGtq1FZIwxiePDeXZ0nar2xHPBpEpQOMnp2WQHYYwxk9j5HLmM1pAmW4I6CPC73/2O0tLjmtFrjDHmONTW1nLNNdeA+3M4HpMtQYUBSktLKS8vT3YsxhgzGcU9vGKz+IwxxqQkS1DGGGNSkiUoY4wxKSkpY1BHKxIoIhcDTzKwNMBtqnqzu6DrzThrhqUBvwK+qKqhMQ7bGGNMAiU0QR1DkcBlwP+q6j8PcewTwFXuOT3AgzgVR28axVCPcP0T32Z7U3X/dpo3wEeXv4+L55474LwdjdU8Xb2W+o5GirMLWVmxggWFFWMZmjHGjLnW1lbq6+sJBoNDHg8EAhQXF5OXN3q1WhPdghqySOAQluOsrDyUa3FKCNRA/6Ktv2EME9Tg5ATQGwly17p7qG7cy9IZi/Hgobatnmf3vky6L51MfzoH2mr5zWt/4m0LL2JBYQVpvgBpvjTSfAF8Xt8wr2aMMamltbWVuro6ysrKyMzMxOMZWOIsGo3S1dXF/v37AUYtSSU6Qd2pqje4K4iPZBlQJCKfxCn29kfgevfp48UMLKZWBcwQkaluTZ5RNzg59YkCz+1bRxingnbVoZ30hkP0eoO09TiLmAcjIf605REqp80fcK3X6+1PVn1fAa/7vf/NRNa/zxcgze+e7+4L+AL9/1Cs5WaMGSv19fWUlZWRlZU15HGPx0NWVhZlZWUcOHBgfCaokYr99RERP85irQ/ijC/NAP4XJx/8B5CDUxKjT9/3WcCYJKiR9IbfbO52BXtI96UNOO73+OgKHrmqRyQSoTvSTXew+4ReP+AL0N7TwfbG3aT708nwp7OneR+7X93LO+QSlk5fRKY/44jfeIwxJl7BYJDMzMyjnpeZmTlsF+DxSLkHdd3JDqtidu0UkVuA23ASVAdOUcE+fSk9KXWX8jPyWF62lGg0yqHOJjqDnaT704lGo4SjEbqDXeSkZ1GYNYXecND96mW0FukNhoNUN+8lCoQjYTp6nXwdjIS4b8tf2Fi3jYAvQH5GLgUZ+eRn5JKfnktBZh756bkEfIFRicMYM7HF80vuaP8inHIJSkTKgM8BX1bVXnd3GtDX1NiKU/3zeXe7Ejioqs1jFdPCKRVDdvN58XL1SW9j+YwlAORn5HLfptVkBTLICmTSGeyi0xvgvUuuHNDdFo1GCUfC9EaCA5JWbyhI8Kj73jwWCjsTF4/WcguGgxzqOMyhjiMbmFlpWRRk5JKfnucmMefP3PQcvB57CsEYkzwpl6CARuAaoFNEbsIpoX098D/u8buB60RkDU5r6uvuvjHzjUv/I65ZfAsKK3jvkisHjAVdWfmWI8aCPB4Pfp8fv89PVuDozebhRKIRguEQoWiY1u42MvzpBCMhesNB2no6yErLJOALEAwP3+Tu7O2ks7eTA9QdEWNe+psJK7YFZl2GxphESIkEJSLXAHepao6qdovI5cAdOMmqE/gZ8F339DuBEuAFnO69/wVuGOsYv3Hpf8R13oLCioRNTvB6vKT707hk3vnct2k10WiUvLQcOoNdEIX3LrmS+VPn0BXqpqW7jZbuVpq7W2npbqO5u5XWnrZhuxqj0Sgt3a20dLcecezNLsM88jPyrMvQGDMmJlXBQhGZA1SvWbNmwi0Wezyz+CLRCG097f0Jq6W7jZaeVpq72+js7Rzx2uFYl6ExE8+2bduorKw8as9JNBqlqqqKRYsWHXGspqaGVatWAVSo6p54XjclWlDmxB1Py83r8TotoIw8ZlE24FgwHKSlp43mrlZaetrcJNZCS3fbCXUZxiat2C7DnYf32DR5Y1JUIBCgq6tr2Gnmfbq6uggERq8XxRKUGVLAF2Ba1lSmZU0dsD8ajZ5wl+Fe9g841tHbSXXzPrICmeSmZdPQeZg/bvoL71vydktSxqSA4uJi9u/fH9eDuiUlJaP2upagzDHxeDxkBTLJCmQyPXfgUorH22W4r/UAkWiUnlAvPaHe/nv9fuNDfPCUqyjPm066P23Y640xY6vvwdsDBw6MuNRRSUnJuF7qyExgx9tlONQ0eWfpqAbW7HoOPB5Ksqcxq2AGM/NnUJg5xWYRGpNgeXl5o5p84mEJyiTESF2GPaEemrpa8Hq9dAa76ejtoDvUS2Ygve8k6tobqGtvYF3N62SlZVKeN51Z+WWU55WSZq0rYyYkS1AmqTweD6vmncd9m1aT4Q1QkJNHR7CTlu42ls9YSjgapqHzMMSMbXX2drH90G62H9qNx+OhJKeIWflO62pqZoG1royZICxBmaQb6gHnt1de0j9BoivYzb6WA+xrOUBNay09oTfXNoxGo9S21VPbVs/LNRvISsvqT1ZleaWk2XNZxoxblqBMShhpmnxmIIOF0+aycNpcItEIDR2N7HUT1uDlmzp7O6lq2ElVw048Hg/Tc4uZ6SasKRn51royZhyxBGXGFa/HS0lOESU5RZxRdgqdwS5qWg6yt+UANa0H6Q319p8bjUY50FrHgdY6Xtr3GtlpWczKL3NbVyW26oUxKc4SlBnXsgKZA1pX9e2H+ltXjZ1NA87t6O1kW8MOtjXswOv1UppT3N8dWJCRZ60rY1KMJSgzYXg9XkpziynNLebM8lPp6O1kX8tBd+zq4IAVMCKRCAdaaznQWsvafa+Sk57dn6xm5FrryphUYAnKTFjZaVlUFs2jsmgekUiEuo5D7G3Zz76Wgxwe1Lpq7+lga/0OttY7rasZuSX9Y1f56bnWujImCSxBmUnB6/UyPbeY6bnFnFV+Gu29Hf1jV/tba49oXdW0HKSm5SAv8gq56TnOQ8J5TuvK77P/NsYkgv1PM5NSTlo2lUXzqSyaTzgSpq69oX/sqqmrZcC5bT3tbKnbzpa67fi8PqbnFruTLaaTn5HYJ+uNmUwsQZlJz+f1MSOvlBl5payYuYz2no7+ZLW/rba/cjFAOBLub10B5GXk9ier6bkl+L2+ZL0NYyYcS1DGDJKTns3i4gUsLl5AOBKmtr2hf+yqeVDrqrW7jc3dVWyuq8Ln9VGWV9o/dpWXnpOkd2DMxGAJypgR9CWdsrxSzp7pdPftaznQP3YVjoT7zw1Hwuxt3s/eZqecSEFmXn+ymp5TjM9aV8YcE0tQxhyD3PQcFhcvZHHxQkKRMLVt9f3dgS3drQPObe5qpbmrlU21Vfh9fspyS/HgYWfTHpq7Wq0wozFHYQnKmOPk9/ooz59Oef50YDmt3W39yepAW92A1lUoHGJj7VZ2Ne3F7/WTHcikN9zLHzf9mfcteYclKWOGYAnKmFGSl5HLyRnCySVCKBLmQGst+1qdhNXa3c7B9nr8Xj8Br5/ecJDecJBwNMJ9m1fz72d/lJy07GS/BWNSiiUoY8aA3+tjVkEZswqcwo0t3a3c+uxPyPRn0hXq6q8e4sVDTctB/rDxYeZNncPS0sojamYZM1lZgjImAfIz8pg3ZTZtPe1kBqbT3NPG4c4mOoPdZAbSiUaj7GysZmdjNdNzS1haWsms/DJbwcJMaklJUCJyJrBaVYuHOb4c+B6wFGgFfgHcrKpREUkH2oDemEteUNVLxzhsY07IyooV3LdpNQBT0vNI8/o53NXC3CmzCEXefNbqYFsdB9vqyM/IY0lJJQsLK2z1CjMpJfRfvYh4gI8Bt49wThbwCPAN4CJgLvA4UAv8DFgCHFbV0jEP2JhRNFJhxvqORjbVbmN3016ibv9fS3crz73xMuv2v85JxQtYXLyQrEBmkt+FMYmT6F/LbgSuwEk+1w9zzkzgRVX9kbu9Q0QeAs7DSVDLgQ1jHagxY2G4wozF2YWsmnceZ/a0s6V+O9sadvavD9gT6uHVA5vZULuVBVMrWFJaydTMgkSHbkzCJTpB3amqN4jIhcOdoKoKvLtvW0TSgMtxkhPAMqBYRDYCJcAzwGdVdf+YRW1MguSm57Bi5jKWzVhCVcNONtcr7T0dgLOIrR7ahR7aRXn+dJaWLKIsr9TGqcyEldAEpaoHjuV8d7zp90AncKe7uwN4HrgJCAI/AB4Ezhy9SI1JrjRfgKWlizi5RKhu2sfG2m00dDT2H+9bD3BKZj5LSxcxf+ocW6nCTDgpO/IqIqXA/UAEeIuqdgGo6ucHnfd5oEFEZqrqvsRHaszY8Xq8zJs6m7lTZlHXcYiNtdvY01xD3zz1pq4Wnq5ey8s1GzipWFhcNJ+MQEaSozZmdKRkghKRxTgTI/4OfEJVe2KO3QT8QVW3ubvS3D+7ExulMYnj8XgozSmidH4Rrd1tbKqvQg/t7l9pvSvYzfr9r/Pawc0sLJzLktJKCqwUiBnnUi5BicgU4AngXlW9bohTlgKni8gH3O3vA4+oakOiYjQmmfIycjl31hmcPuMUtrnjVJ29nYCzYO22hh1sa9jBrIIylpYuYnpOsY1TmXEpJRKUiFwD3KWqOcCHgDLgkyLybzGn/UVV348zTf0HwE6c+B8BPpHgkI1JunR/GqdOX8ySEmF301421m6jMaaUfd/K6tOyp7KkpJJ5U2bj9XqTGLExx8bT98zFZCAic4DqNWvWUF5enuxwjBlV0WiUg211bKyr6i/5ESsrLYuTi4VFRfNJ96cNcQdjxk5NTQ2rVq0CqFDVPfFckxItKGPMifN4PP2VgZu7WthUp2xv3N2/qnpnbycv17zGqwc3UTltHieXVFpRRZPSLEEZMwEVZOZz/pwzOb1sKVsbdrClfjvdQWceUSgcYnOdsrl+OxUFM1laWklJTlGSIzbmSJagjJnAMgMZLJ+xhFNKF7OzcQ8b67a9WbY+GqW6aS/VTXspzpnG0pJFzJlSjtdj41QmNViCMmYS8Ht9VBbNQ6bNpab1IBtrt7G/tbb/eH37If7W/iw56dksKalEps0jzRdIYsTGWIIyZlLxeDzMzJ/BzPwZNHY2samuip2Ne4hEIwC093Tw4t5XeGX/RiqL5nNyiVghRZM0lqCMmaQKs6ZwYcXZnFl2KlsatrO1fgc9IeeZ+N5wkI2129hUV8W8qbPJTcvm9dpt/auwr6xYYWXqzZizBGXMJJeVlskZZadwWulJbG/czca6Klq72wBn6vor+zeyq2kvuWnZlOQU0drTzn2bVvPeJVdakjJjyhKUMQYAv8/P4uKFLCpawBvN+9lUV+UUT2yvx+/1E4qE2d9aS3ZaJrnpOTxdvdYSlBlTlqCMMQN4PB7mTClnzpRyGjoaufWZn+CPWSm9o7eLjt5ODnc1EwqHrNqvGTM2n9QYM6yi7EIWFc2nLK+UKZn54C7pF4yECYaD3LdlNW801yQ3SDNhWYIyxoxoZcUKekNBctOymZNfjs/rIxQJMT2nmPaeDh7f8TSP73iatp72ZIdqJhhLUMaYES0orOC9S64kNz2HjmAXMm0eVy9+G8Uxq0+80VzDfZtXs+Hglv6llYw5UdZ5bIw5qgWFFUdMiOgOdvNSzQb00C7AKfXxcs0Gtjfu5txZZ1CWV5qMUM0EYi0oY8xxyQhksLJiBe9YdClTs6b072/uauURXcPfdz9PZ29XEiM0411cLSgReTtwOXA6UAyEgVpgHbBaVf82ZhEaY1JaaU4RVy2+jC3121m/fyPBcBCAnY17eKN5P2eULWVx8UJb488csxETlIh8GLgByAGeBB4EGgEfMA04BbhbRFqBW1T1t2MbrjEmFXk9XpaUVDJ3yizW7nuVXYffACAYDvLC3lfQQ7s5b/YZtmq6OSbDJigR+RtwGPg/wHOqOmRlQxHxAJfiVMD9iKpePCaRGmNSXnZaFqvmnUdl0Xyee2MdLd2tADR2NvHwtieoLJrPmeWnkuFPT3KkZjwYqQX1JVV95Wg3cBPX48DjInL6qEVmjBm3yvJKufqkt7GxbhuvHtjcP7OvqmEn1U37OKv8NGTaXDweT5IjNals2E7heJLTENesP7FwjDEThc/r47TpJ/Pek69kdkF5//6eUA/P7FnLw1VP0NjZlMQITaqLd5JEAfBZ4CTgiLa5qr5jlOMyxkwQuek5vHXBSvY01fDCvvW093QATg2q+7c+xsnFwullS63+lDlCvM9B/R5YDjwKHBq7cIwxE9WcKeWU55XyWu0WXj+41alBFY2yua6K3U1vsKJ8GfOmzrZuP9Mv3gR1AXCJqr44lsEYYyY2v8/PGWWnsKCwgufeWMcBt6pvZ28Xf9/9PFWHdnHe7DMoyMhLcqQmFcSboHbTv0zkiRORM3Genyoe5vgs4JfACqAe+H+q+qh7LA34EXA1zvNY31XVb41WbMaYsVeQkccVCy9m1+E3WFvzav8DvQdaa/nT5kdYWrqIZdNPtpXSJ7l4P/1PAj8SkR8C1UAk9qCqPhPPTdwp6R8Dbj/KqfcCLwJXAOcBD4nIqaq6G7gREGAekA/8VUT22zNYxowvHo+H+YVzmFVQxvr9G9lcrxCNEolG2HBwCzsP7+HcWacPmGBhJpd4E9QyYAlOq2awKM6Du/G4ESfpfAO4fqgTRGQhzooVl6hqL/B3EfkzTmL7CnAt8BFVbQKaROR24F8BS1DGjENpvgDnzFrOwmlOt199uzPM3bdS+uyCcs6ZtZzc9JwkR2oSLd61R74KfBMoAXIHfR1LZ/GdqrocGGk6+mJgr6p2xOyrApa4swmnA1sHHzuGGIwxKWha1lTeWXkpF8xZQXrMg7x9K6W/dnCzrZQ+ycTbgkoDfq2qDSfyYqp6II7TcoDOQfs6gSz3GIOO9x0zxoxzHo+HyqJ5zJlSzss1G6hq2Ak4K6Wvq3md7YeqmZk/na31O6jvaKQ4u5CVFSus9PwEFW8L6qfAZ0UkEas9dgCZg/ZlAe3uMQYd7ztmjJkgMvzpXDDnLN656FIKY1ZK39tcw2833M/Oxj3kpefQ1tPOfZtWs6OxOonRmrESb8JZgDPO0ygir4nIy7FfoxzTVmCWiMQmoUpgqzvuVIszSWLAsVGOwRiTAkpyinj34ss4Z9bpBHwBDrbX4/f66Qn3Ut20j3A0QlYgg6er1yY7VDMG4u3i2+R+jTlVVRF5HbhFRP4LOAd4J3C2e8rdwNdEZCNOl991wPcTEZsxJvG8Hi8nlwhzp8xic53i9zhzsiLRCPtba5mSmU9XqDvJUZqxEFeCUtUbxzIIEbkGuEtV+8aY3gP8DOcZqEPAx1R1s3vsBuA7wBacFuDPgDvHMj5jTPJlpWWyqGg+9R2HaO5uJRgOAVDf0Uh+Ri4dvZ1kp9lw9ETiiUaHrKLRV27jy6oaVxeeiJwL3JzK5TZEZA5QvWbNGsrL7dkKY8abHY3V3LdpNRn+dJq6W2jubiUUCTFvyixKc4tZNe88ZuSWJDtMM4SamhpWrVoFUKGqe+K5ZqQW1H8Cd4lIGHgA+CvOOFAvgIik4xQsXAl80L3mX44vdGOMOboFhRW8d8mVPF29lp5wDzlp2fg8XvIzcukKdvOIruHM8lNZWrLI1vSbAIZNUKq6XkTOAN4NfBq4GfCISAfOskfZQAh4zj12/3BFDY0xZrQsKKwYMK38QGstf9v9PN3BbqLRKC/te4269kNcOGcFaf60JEZqTtSIY1CqGgHuB+4XkVzgNJyHdSM4s+k2qmrbmEdpjDHDmJFXynsWX86Tu57tX4ViT9M+Huhq5tL5FzA1syDJEZrjFfdKjG4iimvNPWOMSaTstCzeLm/hpZoNbK6rAqC1u42Htj7O+XPOtAd5x6lEPHhrjDFjzuf1cc6s5Vw899z+VdBDkRBP7X6B595YZ8skjUOWoIwxE8r8wjm8e9FlFGS+uUzo1vrt/EX/RntvxwhXmlRjCcoYM+FMycznXYsuY+7UWf376tsP8cCWx6hpPZjEyMyxsARljJmQ0nwBVs09j7NnLe+fct4d6uHR7U/x6oHNDPcMqEkdcU2SEJEinPpNy4EAg6rrquqZox+aMcacGI/Hw5KSSoqypvK33c85lXujUdbvf536jkNcVHEO6TYVPWXFO4vvl8BZwD1A69iFY4wxo680t5irFl/Oml3Pc7CtDoC9zft5YOtjXDL/fKZlTU1yhGYo8SaoC4B3qurTYxmMMcaMlaxAJlfIxbxcs4GNtdsAaOtp56Ftj3PerDOpLJqX5AjNYPGOQTUBLWMZiDHGjDWvx8uKmcu4ZP4FBHwBACKRCM/sWcsze14iZFPRU0q8LagbgB+JyOeAHUBv7EFVHVwB1xhjUlbFlJlMycznyZ3P0NTl/O5d1bCTQ52Hecu888lLzznKHUwixNuC+i7OGNRaoBFoG/RljDHjSkFGHu9a9Fbmx6wycajjMA9sfYy9zfuTGJnpE28L6uoxjcIYY5Ig4AtwUcXZlOZM44W9rxCJRugN9fLXHf9g2YyTWTZjCV6PPY2TLPEWLHwawC3DvgCn5bXLFoo1xox3Ho+HxcULmZY1lSd3PUtHrzNi8dTuF3i46knSfQFKc4pZWbHC1vRLsLh+NRARn4jchjNZ4jXgVaBBRO4UkbgXnDXGmFRVnDONqxZfTlleKS3drexq2ktTVwvN3W00djVx36bV7GisTnaYk0q8bddbcIoSfhiY6X59GHgbzgQKY4wZ9zIDGVy+8CKCkTB+r5+A1084EqahoxGf18vT1WuTHeKkEm/r58PAx1X10Zh994lIG/AzLEkZYyaIvjGnOQXlHGirIxqNEo5EqG9vpCvUk+ToJpd4W1A5wM4h9u8Gpo1eOMYYk3zF2YX4PF5mF5Th9To/JnsjQdp7Omyx2QSKN0GtAz41xP5PA6+MXjjGGJN8KytW0BnsJhKJMDuvjEg0QigSojRnGn/d8Q/2NNUkO8RJId4uvi8B/xCRC3GehQJYAcwBLov3xUTkFOBOYClO6+ujqrpu0DnXAHcNujQTWKOql4pIOs6zV7EPC7+gqpfGG4cxxoxkQWEF711yJU9Xr6W+o5GF0+YSiURI96cRiUR4ctczXFRxDvML5yQ71Akt3mnm60VkGfAJYDHQBfwF+LGqxtXeFZE04GHgDpy1/d4DPCEis1W1fwFaVf0d8LuY604DngC+6O5aAhxW1dJ4XtcYY47HgsKKAdPK23raeWT7Glq724lGo/y9+gVCkRCVRfOTGOXEFvcUcVXdDlx3Aq91IRBQ1Tvc7XtF5NPA+4CfD3WBiARwktXXVfV1d/dyYMMJxGGMMccsNz2Hd8ilPLJ9jbM8UjTKM3teojccZGnpomRXHIifAAAdYUlEQVSHNyENm6BE5GXgraraJCLrgGGre8VZD2oxsG3QviqcFtFwPoXTWvtJzL5lQLGIbARKgGeAz6qqrU1ijBlTWWmZvL3yEh7d/ncOdRwGYO2+VwlFQpw2/eT+wohmdIzUgnoE6JtTuXoUXisHGLyobCeQNdTJbpfgF4F/U9XY5NgBPA/cBASBHwAPAlY00Rgz5jL86Vwpb+GvO56itq0BgPX7N9IbDnJW+WmWpEbRsAlKVW+M2XwKeFFVg7HnuBMW3hbna3XgTHaIlQW0D3P+ZUAEJ1HGxvX5QTF8HmdVi5mqui/OWIwx5ril+QJcvuAintz1LDUtzjD8xtptBMMhzpt9hiWpURLvNPOngIIh9s8Ffh/nPbYCMmhfpbt/KO8E7lPVSOxOEblJRGI7fPvqNXfHGYcxxpywgC/AW+evZM6Umf37tjXs4KnqF4lEIyNcaeI10hjUJ4G+VpQH2Coig8ehcnDW5ovHU4DHrSn1I5xZfEtxuueGsgL46hD7lwKni8gH3O3vA4+oakOccRhjzKjweX28Zd55/KN6LTvddfp2NlYTioRYNfdcfF5fkiMc30Yag/o5TrecF/gf4GYGVtWN4nTPrYnnhVS1V0Qux3kO6iZgD/AuVW0QkS8D16jqSTGXzAEODHGrj+GMO+10438EZ/q7McYknNfj5aKKswl4/Wxr2AHAnqZ9PL7zaS6ddwF+n62nfbw80eiwk/P6ichK4HlVDY19SGNHROYA1WvWrKG8vDzZ4RhjJpBoNMpLNa+xsfbNycqlucVctuBC0tzy8pNZTU0Nq1atAqhQ1T3xXDNSF9+3gRtVtQO4ArhCZPAQkkNV/+OYozXGmAnE4/FwVvlpBHwBXtm/EYDatnpW699428KLyfCnJznC8WektucZQCDm++EcvQlmjDGTgMfjYfmMJQS8ftbuexVwysj/+tX7ADjc1UJxdqEVP4zTSNPMLxrqe2OMMSNbWrqIgM/Ps2+so6WrhV1Ne8n0ZzBv6izaetq5b9Nq3rvkSktSRxHvNHNE5CIRKXK/v0ZEVovIDVZR1xhjjrSoaAEXV5zDwfYG/F7nx+QbLQdI86eRFciw4odxiLfk+3XAY8BCEVkO/ApnRt+1wLfGLjxjjBm/5hfOITuQRcCdbh4Kh9jbcoB0fzr1HY1Jji71xduC+iTwAVV9Hqe67iuqeo37/TVjFZwxxox3swvKmJZVSN/iEr2hXqqb9lKUPTW5gY0D8SaoGThFC8GZ0ddX+n0/kDfaQRljzESxsmIFAAUZ+USjUYKREG29HWQHsojnMZ/JLN4EtRNYJSJvwVne6GF3/wdxViQ3xhgzhL7ihzNyS8gIZJDm8zNvyizaezt4eb9VDhpJvBMcbgDudc+/R1U3ish3cLr+3j1WwRljzETQV/wwGo3y/N71bK3fDsDrB7eSk5bNScULkxxhaoqrBaWqDwIzgeWq+mF392+Ahar6+FgFZ4wxE4nH4+GcWcuZXfDmSjbP713PniYrxDCUuKeZA63AchH5rojcAZzD8KUyjDHGDMHr8bJq7rkU50xzdkSjrNn9PHXttt71YPFOM1+IM9Z0K3AycBLOgq9bRWT+2IVnjDETj9/n563zV5KXkQtAOBLmrzuepqW7NcmRpZZ4W1DfxymrMVtVL1XVS3BWG38e+N4YxWaMMRNWZiCDyxdc2L9GX0+oh8d2PEVX0Erb9Yk3QV0AXK+q/SXb3e9vBFaORWDGGDPR5WfkcdmCC/vrRrV2t/PXHf8gGA4e5crJId4E1cTQFXULAPubNMaY41ScM41Vc8+j70neho5G1ux+3qryEn+CehD4qYic1rdDRJYBPwYeGIvAjDFmspgzpZzzZp3ev723eT8v7F0/6R/kjfc5qK8A9wOviEiPuy8NJ3F9fiwCM8aYyWRx8ULaejt4/eBWALbW7yAnLZtTp590lCsnrrgSlKq2ApeIyMnAYqAL2KaqO8cyOGOMmUzOLDuVjt5OdjbuAeDJnc+wZvdz9ISCk7KO1IgJSkQqgLcDPcBjqroZ2JyIwIwxZrLxeDysnLOCjt4uqhp2sKtpLwGvn4opMydlHalhx6Dcdfe2Ad8A/hvYJiJXJSowY4yZjHxeH5fOv4DDXS34vX78Xj/72+pI8wcmXR2pkSZJ/CfwS2Aqzmy9nwK3JyIoY4yZzNL9aWSlZfY/IxWJRKhprSUzkDGp6kiNlKDOBG5X1ZCqRoCbgTkiUpiY0IwxZvKanlNMYdYUcOtIdQd7qGk9SHH25PkRPNIYVA7Q0behqi0i0gnkAseVwkXkFOBOYCmwG/ioqq4b4ryPAnfhjH31+ZSq/kZE0oAfAVcDYeC7qmpVfY0xE8rKihXct2k1eem5tHS1EoqGOdTZxKXzJs/aCMeyWCxA9DiuAcBNLA8Df8TpMrwFeEJEhip4uAz4jqrmxHz9xj12IyDAPOAM4FoR+fAQ9zDGmHGrr45Ued50PF5Pfx2p3c17aeuZHOt0j9SCirpfR9sXrwuBgKre4W7fKyKfBt4H/HzQuctx1v8byrXAR1S1CWgSkduBfwV+e5xxGWNMSuqrI9Ud6uGBrY/R3tNBb6iXNbuf5+3ylv4lkiaqkRKUB2e18tiElAOsE5EBa3CoanEcr7UYZ1ZgrCpgSewOEfHhdAF+SES+C3QCvwBuA/KB6cDWke5hjDETSYY/nVVzz+XPVU8SjUapbz/Ey/s3cPbM5ckObUyNlKD+zyi/Vg5OsonVCWQN2lcErMcpiHgVsAina7AV+HPMdSPdwxhjJpSSnCLOKj+NtfteBWBTbRXTc0qYM6X8KFeOX8MmqJgxn9HSAWQO2pfFoKKHqlrLwBXSN4jID4H3AH9w98Xe54h7GGPMRLSkpJIDbXXsbd4PwD/2vMh7si4nNz0nyZGNjeOa8HCctuJMbohVycDuOkTkJBG5cdB5aUC3O+5UO+g+R9zDGGMmIo/Hw4UVZ5OTng3QPx4VjoSTHNnYiHex2NHwFOARkc/hTBN/D85Y04ODzmsGviAiNTgPCp8GfAb4tHv8buBrIrIRp9vwOoafUGGMMRPKZBqPSlgLSlV7gctxEtNhnBXS36WqDSLyZRHZ4p63H3gHzsy8VpxV1G9W1T+5t7oBZz3ALcA69/idiXofxhiTbH3jUQAt3a387+bVfPVvt/OL9X9gR2N1kqMbPZ7h6o2IyCxV3ZvgeMaUiMwBqtesWUN5+cQdWDTGTHzRaJS7NzzAC/vW4/f6SfMFmJ5bRG8olJILytbU1LBq1SqAClXdE881I7WgtrjPKRljjEkxHo+HrlAXGf50Al4/0WiUpq5WMifQgrIjJahbgdtE5FkRGTy5wRhjTJI1djYzp6C8f72+rmA3PaGeCbOg7LAJSlVvAU4GWnCmen/ZfYjWGGNMCijOLiQajTIta0r/vgNt9UzJHGoFufFnxFl8qloNXCki78SpCfVPInIz0D3ovEfHLkRjjDFD6VtQNjOQQcAXoDPYRSgSIjuQRTQaxePxJDvEExJvyfeHRWQqzgrjfxp0OApYy8oYYxKsb0HZp6vX0tLTTigSYnb+DLpDPew8vCflJkocq6MmKBE5A/gxzjNL3wFuVNXuka8yxhiTCH0LygI8v3cdW+q2A/DC3lcoz5tOZiAjmeGdkJFKvheIyE+BF4AgsFxV/8uSkzHGpKYzyk4lO81ZmrQn1MOL+15JckQnZqRZfNtxSmF8WlXPVdUtCYrJGGPMcUjzBTh/9pn92zsb9/Sv2zcejZSg1gCLVPWuRAVjjDHmxMwqKGN+zNjTs2+8TG84mMSIjt9Iq5m/P5GBGGOMGR3nzFxGTcsB6tobqDq0kw0HtyDT5rGyYsW4mjiRyNXMjTHGJEBGIIOZ+TPY1bSX3nCIYCREQ+dh7tu0elyt1WcJyhhjJqCdh98gLz2HgNePBw/N3a1kBtLH1TJIlqCMMWYCauhoZFZ+Wf/Dur2hXnrDwXG1DJIlKGOMmYCKswsJhoMDlkE62FZPYcx2qrMEZYwxE9DKihV0BrtJ96fj8/oIRkL0hHspzZ6W7NDiZgnKGGMmoL5lkPLTc8nwp5Hm8zNvyiwaug7T1tOe7PDiksiS78YYYxKobxmkaDTKg9v+yqGOw0QiEdbtf52L556b7PCOylpQxhgzwXk8Hs6eubx/e2fjnnExWcISlDHGTALTc4uZM2UmLd2tVB3ayTef/iE/X/+HlH4uyhKUMcZMEsVZU9ndtI/ecAiiUNtWn9IP71qCMsaYSWL9gU1MzSxwHt71eGjr7Ujph3ctQRljzCRR39FIWV4JXq/zoz8YDhKKhFN2PCqhs/hE5BTgTpzih7uBj6rquiHOuwS4FVgA1AP/3bequojMBXYCnTGX3KuqHx/j8I0xZlwrzi6kraedqZkFHOo4DMDB9gYWFy1IcmRDS1gLSkTSgIeBPwIFwC3AEyKSN+i8mcD9wDfc894PfEtE3uqesgx4WVVzYr4sORljzFH0Pbyb4UvHg4dgJERXsIsFU+ckO7QhJbKL70IgoKp3qGpQVe8FtuAURYw1B/i9qj6oqhG3hfUPoG/S/nJgQ2JCNsaYiaP/4d2MXAI+f//Du4e6mohGo8kO7wiJ7OJbDGwbtK8KWBK7Q1WfBZ7t2xaRqcD5wN3urmVAtohsB3KAR4HrVLV5jOI2xpgJo+/h3a5gN3/Y+DCNnYd5Ye86Xj+4ldkFZSlVMyqRLagcBo4b4W5nDXeBiOQDfwZewukeBGgCngTOwElWs4CfjXawxhgzkWUGMpiSmR9TMypIa097Sk07T2QLqgPIHLQvCxhyUSgRWYiTlLYC16hqBEBV/znmtBYR+TLwnIj4VTU0+mEbY8zEVNfeQMAbwO/10RPqBSArkMHT1WtTohWVyBbUVkAG7at09w8gIhfgtJoeAq5W1W53f5aIfFtESmJOTwNCQHhMojbGmAnqcFfLgHIch7uayQpkpsy080S2oJ4CPCLyOeBHwHtwpps/GHuSiMwDVgNfUdUfxh5T1U53CnqhiHwaZ5bfrcCvVTX1RviMMSaFFWcXcri7meaeVohCR28nzT2tFGcXJjs0IIEtKFXtBS7HSUyHga8A71LVBhH5sohscU/9FJCLM7W8PebrNvf4u4Fi4ACwCdgIXJeo92GMMRPFyooVBEMh0rwBotEowUiIho7DrKxYkezQAPCk4tTCsSIic4DqNWvWUF5enuxwjDEm6XY0VvPo9r9T1bALr8eD1+OlNKeIkpyiUZ3RV1NTw6pVqwAqVHVPPNfYUkfGGDOJLSis4DMrPsrS0kWEoxGigNfjpS0FZvRZgjLGmEnO4/HQ1tOO3+sn4PXT1N1KVlpW/4y+ZLEEZYwxhmA4SJo30P99V7Ar6TP6LEEZY4yhJKeIjEB6/3Zzdyudwa6kzuizBGWMMYaVFSsIeP109HbR1NXCzsY9bG/czdyps5IWkyUoY4wxLCisYOWcFfSEewhGQvi9PvLT83hx76tJmyhhCcoYYwwAu5v2MrugnOLsQqZkFuDz+ZI6UcISlDHGGMCpuFucXQgeZ7sz2EWaL5C0iRKWoIwxxgDO0kfBcJBMfwY9oV6au1p45eAmDnUeTko3nyUoY4wxwJsVd0PhEG297QQjYcKRCAUZeUl5aNcSlDHGGODNirvBSJBINErA6yMnLYuirKlJGYuyBGWMMabfgsIKirKnUZQ1FYDWnnY2N2wnGA4mfCzKEpQxxpgB0rwBWnpaCUcjeD1euoPd7Di8p3+liURJZD0oY4wx44DH6ywY2xsOEY1G6An14vf6aA92JDQOa0EZY4wZoCcUpCy3lEg0TDgaweOBTH8G+1oOJHSihCUoY4wxAxRnF9LU3UJWIJM0XwCPx0NHqJNQJMzDW59IWByWoIwxxgzgTDfvIhKJEgyHiESiRKNR0v3pbDu0I2GtKEtQxhhjBlhQWMHi4gWECRMhQpQo0Sj0hHrwe/wJm25uCcoYY8wR3lF5KUT7tqJEcCZL9IR7qG7al5AYLEEZY4w5woLCCjL8Tn2o/jxFlO5QL83drQmJwaaZG2OMGVIwHBywHSEKROns7UzI61sLyhhjzJC6Qj1D7u8IdSXk9RPaghKRU4A7gaXAbuCjqrruWM4TkQLgF8AlQDtwvar+KjHvwBhjDMDfdz/PxXPPHdPXSFgLSkTSgIeBPwIFwC3AEyKSd4zn/RQIA9OBK4BbRWRlQt6EMcZMIl6PZ9hjd667Z+xff8xf4U0XAgFVvUNVg6p6L7AFeF+854lIFnA18FVV7VTVDcDPgU8k7F0YY8wkMTWrIKmvn8gEtRjYNmhfFbDkGM5biDOhZMdR7mGMMeYEXbX48qS+fiITVA4weOpHJ5B1DOflAN2qGh3imDHGmFE01mNMR5PIBNUBZA7al4Uz0SHe8zqADBHxDHHMGGPMBJLIBLUVkEH7Kt398Z63A/AAFUe5hzHGmHEukQnqKcAjIp8TkYCI/DPONPIH4z1PVdvd878lIjnudPR/Ae5O4PswxphJ4773/fSY9o+mhD0Hpaq9InI5zvNNNwF7gHepaoOIfBm4RlVPGuk891b/CvwEeAPoBm5R1ccS9T6MMWaySUQyGoonGo0e/awJQkTmANVr1qyhvLw82eEYY8ykUVNTw6pVqwAqVHVPPNfYUkfGGGNSkiUoY4wxKWmyrWbuA6itrU12HMYYM6nE/Nz1xXvNZEtQ0wGuueaaZMdhjDGT1XRgVzwnTrYEtQ44HziIs+CsMcaYxPDhJKcjKlgMZ1LN4jPGGDN+2CQJY4wxKckSlDHGmJRkCcoYY0xKsgRljDEmJVmCMsYYk5IsQRljjElJlqCMMcakJEtQxhhjUtJkW0niuLnFEe/EKZ64G/ioqsb9RHSyiciZwGpVLXa304AfAVfjrKrxXVX9VhJDHJaIXALcCiwA6oH/VtW7RKQA+AVwCdAOXK+qv0pepCMTkSuBb+JUhK4Hvu2+j3HzWfRx/+43Ajeo6q/H4WfxUeAuoCdm96eAPzBOPgsRmQ78FLgIpzbez1T1q+Px39NwrAUVB/cDfxj4I1AA3AI8ISJ5SQ0sDiLiEZGPA08AaTGHbgQEmAecAVwrIh9OQogjEpGZwP3AN3D+7t+PU1H5rTj/OcM4y6dcAdwqIiuTFetI3B8mfwK+pKq5wD8Bd4jIMsbJZzHInUBZzPa4+Sxcy4DvqGpOzNdvGF+fxcM4y7aVACtwYv0A4+s9jMgSVHwuBAKqeoeqBlX1XmAL8L7khhWXG4FP4vyAj3UtTjXiJrd42O041YpTzRzg96r6oKpG3FbrP4BVOL8hflVVO1V1A/Bz4BNJi3QEqnoQKFLVx0TECxQCIaCN8fNZACAi1wJ5wCZ3O4tx9Fm4lgMbhtg/Lj4LETkLmAt8RlW7VbUa5+fUU4yT9xAP6+KLz2Jg26B9VcCSJMRyrO5U1RtE5MK+HW53zHRga8x5Kfl+VPVZ4Nm+bRGZirPg77NAFNgRc3oV8I6EBngMVLXN/WHegvN/7zaggXHyWQCISAXwNeAc4K/u7oWMo89CRHw4XfUfEpHvAp043ZN3MX4+i+U4vyB8XUQ+gtPF9xPgl4yf93BUlqDik4PzjzhWJ5CVhFiOiaoeGGJ3jvtn7HtK+fcjIvnAn4GXgFeAblWNXe045d8Dzg+SbJwfkI8CXe7+lP8s3B/s9wDXqWqtiPQdymF8fRZFwHrgN8BVwCKc7rK+LvCU/yyAvl/UnsZpSVXi/MLQ4B4fD+/hqCxBxacDyBy0LwtnMHg86nD/jH1PKf1+RGQhzg+RrcA1OD9UMkTEE/ODMaXfA4CqRoBeYL2I/Aw43T00Hj6LrwKqqg8M2t/BOPosVLUWiB0f2yAiPwQud7fHw2fRA7Sq6tfd7ddF5Bc43XswPt7DUdkYVHy24gw6xqpkYDN63FDVJqCWge8pZd+PiFyA02p6CLhaVbtxupM8ODPi+qTye1gpIq8M2p0OjKfP4p+Bq0WkWUSacbqNfgL8P8bXZ3GSiNw4aHcaTut2vHwWVUCWO4Grj5/x9e/pqKwFFZ+nAI+IfA5n+uZ7cLpoHkxqVCfmbuBrIrIRp4vmOuD7yQ3pSCIyD1gNfEVVf9i3X1XbReRBnBl9H8OZsfQvwEeSEujRbQDKROTzOH/PZwEfA96N8wMl5T8LVa2M3RaRDcAd7jTzHMbPZ9EMfEFEanDGbE4DPgN8GmfyU8p/FsCTON153xGRL+AkpI/hTIjazfh4D0dlLag4qGovTvP/PcBh4CvAu1S1YcQLU9sNwGac/5DrcKZy35nUiIb2KSAX54dfe8zXbTgzkyLAGzjjObeo6mNJjHVYqtoCvA1nzOMw8DPg46r6NOPnsxjJePos9uNM4PhXoBXn7/tmVf0T4+SzcHsRVuKMPx3EGX/6tqrezzh5D/GwirrGGGNSkrWgjDHGpCRLUMYYY1KSJShjjDEpyRKUMcaYlGQJyhhjTEqyBGWMMSYl2YO6xgxBRH7Nm8vGDOVGnFXVnwJyVTUhS8m46+E9D3xYVbcPcfzTOGvlzRnjOH4ErHNLVBgzJqwFZczQ/h1nVejpOGUMAM6M2Xc78IL7fccQ14+VzwCvD5WcEuwm4CYRKUxyHGYCsxaUMUNwV35oARCRae7uBneh0ViDt8eMiGQA/wVcnKjXHI6q1ovIGpx1+L6e5HDMBGUJypjj5NbY6u/iE5EoTsXf/8JZG2098EHgi8CHcJbV+S9Vvdu9Phf4Dk6xvyjwd+DfhymRAs5irc2qujkmhjOAH+KsDbkOp1UXG+NbcbojT3FfYy3wf1W1SkQeBRpV9UMx598ArFLVlSLybuBmYD7Ocjo/UdX/jrn9A8AvReQWVQ3G/zdnTHysi8+Y0XUr8FmcEtyzgFdxEtMZOD/Q73IXVgVnPT4B3oqzrloUeFxEhvvF8QreLBLYV7zxr8DrOCXMfwt8Lub4bJz6Wf+LU3TzYpw6Qn1J5h7gnSISW5rh/cDvRKQE+CPwPTfGLwK3iMiqmHP/hlMZeHkcfy/GHDNLUMaMrh+r6lNu2fPVOHV4vqyqCnwXp05PhYjMxWkRfUBV17mtog/hlLi/bJh7n46zAGif9+HUBfq0qlap6i+BX8cc9+NMmPiOqlar6lqcVewXu8cfwimTcQWAiCzDWXz0T8AMIADsU9U33IVUV+EsQgr0L1i6mzdrWhkzqqyLz5jRtTPm+05gT0wRv273z3Rgtvu9xlSmBae4nOAkt8FKgEMx2ycDmwZ1r72Mm+BUdZeIPCAiXwJOwqkLdApOdx2q2ikiD+Akyj8BHwAeU9XDItIE/A6nRbcbeAT4rarWDYqpESge7i/DmBNhLShjRtfgsZjIMOf53XNPA06N+VoI/GqYayI4LZ5Yg7d7+74RkZNxCtudBbyCUxfo+kHn3wNc4Y6HvQ8nKaGqUVX9oBvfb917rBWRDw263geEh4nXmBNiLShjkmMbThdattsdiIhk4ySM23AmMwxWCxTFbG/EqXCbrqo97r5lMcevBV5T1av6dojIPzMwqa3BqU/1RSAP+It73inAtar6eZxiizeKyO9xxqjujrl+GgmcyWgmF0tQxiSBqqqI/Bn4rYh8Cqc66i04kyuqhrnsFZwuuj73Al8Dfi4i38RJTh/HSTjgdL9Visj5wH7gnTiVbhtj4oiIyB9wEtS97rgS7j0+6Xb13YMzJrWCmOQkIvk4XZXrjusvwZijsC4+Y5LnWpyp6A/h/JDPBy5R1eZhzn8EZ7Yf0P+s1ltwksRrOF1434s5/wc4M+3+gpPcrgT+DSgWkfKY834PZOB277n33odT/ffdOBMz7nfjvCXmuvNwWk+vHcN7NiZuVlHXmHFCRLKAPcBlqvrqKN73Cpwp7zNVdbgxs6Gu+wOwVVVvHq1YjIllLShjxglV7cR5hulTo3E/EakQkX/CGfO68xiT03Sc1tyPRyMWY4ZiCcqY8eV7wFIZNDf9OM3EmTFYg7OixbG4HrheVQ8f9UxjjpN18RljjElJ1oIyxhiTkixBGWOMSUmWoIwxxqQkS1DGGGNSkiUoY4wxKen/A3qwuGunah1hAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "results, details = run_ode_solver(system, slope_func, events=event_func, method='RK23')\n", + "results.index /= 60 * 60 * 24\n", + "# results.r *= (0.000621371 / 1000)\n", + "plot(results.y, 'go-')\n", + "decorate(title='Earth Orbit',\n", + " xlabel='Time (days)',\n", + " ylabel='Y Position (m)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wNRcyudo-PDq" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "uftDQ7GI-PJG" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "l4LgemZu-PRE" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "k1o3Wo4A-QNK" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "colab_type": "code", + "id": "Ax8EsdFJypUT", + "outputId": "57f2e86e-b569-47de-bb1d-38e2e28c8d35" + }, + "outputs": [], + "source": [ + "# # Imports\n", + "# from IPython.display import clear_output\n", + "# import os\n", + "# import time\n", + "\n", + "# # Install Python libraries\n", + "# !pip3 install pandas seaborn sympy beautifulsoup4 lxml pint scipy==1.1.0 numpy\n", + "\n", + "# # Removes code before re-downloading it\n", + "# !rm -rf ./ModSimPy\n", + "# !rm -rf ./modsim.py\n", + "\n", + "# # Grabs ModSimPy\n", + "# !git clone https://github.com/AllenDowney/ModSimPy.git\n", + "# !cp \"ModSimPy/code/modsim.py\" .\n", + "\n", + "# # Resets kernel to flush outdated libraries (especially SciPy)\n", + "# clear_output()\n", + "# print(\"Configured for ModSimPy. Restarting kernel.\")\n", + "# time.sleep(1)\n", + "# os._exit(0)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "orbit_homework.ipynb", + "provenance": [], + "version": "0.3.2" + }, + "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/output_23_0.png b/code/output_23_0.png new file mode 100644 index 00000000..5ff6d678 Binary files /dev/null and b/code/output_23_0.png differ diff --git a/code/output_25_0.png b/code/output_25_0.png new file mode 100644 index 00000000..2d14bda3 Binary files /dev/null and b/code/output_25_0.png differ diff --git a/code/output_31_10.png b/code/output_31_10.png new file mode 100644 index 00000000..8e9d4ecf Binary files /dev/null and b/code/output_31_10.png differ diff --git a/code/output_37_0.png b/code/output_37_0.png new file mode 100644 index 00000000..3ff6df54 Binary files /dev/null and b/code/output_37_0.png differ diff --git a/code/output_46_0.png b/code/output_46_0.png new file mode 100644 index 00000000..8b69c8e4 Binary files /dev/null and b/code/output_46_0.png differ diff --git a/code/output_47_0.png b/code/output_47_0.png new file mode 100644 index 00000000..0a9837c1 Binary files /dev/null and b/code/output_47_0.png differ diff --git a/code/output_56_0.png b/code/output_56_0.png new file mode 100644 index 00000000..759acc21 Binary files /dev/null and b/code/output_56_0.png differ diff --git a/code/output_57_0.png b/code/output_57_0.png new file mode 100644 index 00000000..63e3d365 Binary files /dev/null and b/code/output_57_0.png differ diff --git a/code/output_61_1.png b/code/output_61_1.png new file mode 100644 index 00000000..f94cd8c2 Binary files /dev/null and b/code/output_61_1.png differ diff --git a/code/output_62_0.png b/code/output_62_0.png new file mode 100644 index 00000000..cab5b378 Binary files /dev/null and b/code/output_62_0.png differ diff --git a/code/world_pop_transition2_from_allendowney_github.ipynb b/code/world_pop_transition2_from_allendowney_github.ipynb new file mode 100644 index 00000000..77755248 --- /dev/null +++ b/code/world_pop_transition2_from_allendowney_github.ipynb @@ -0,0 +1,580 @@ +{ + "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": 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": "code", + "execution_count": 2, + "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": 3, + "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": 4, + "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", + "empty = TimeSeries()\n", + "plot_results(census, un, empty, 'World population estimates')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Why is world population growing linearly?\n", + "\n", + "Since 1970, world population has been growing approximately linearly, as shown in the previous figure. During this time, death and birth rates have decreased in most regions, but it is hard to imagine a mechanism that would cause them to decrease in a way that yields constant net growth year after year. So why is world population growing linearly?\n", + "\n", + "To explore this question, we will look for a model that reproduces linear growth, and identify the essential features that yield this behavior.\n", + "\n", + "Specifically, we'll add two new features to the model:\n", + "\n", + "1. Age: The current model does not account for age; we will extend the model by including two age groups, young and old, roughly corresponding to people younger or older than 40.\n", + "\n", + "2. The demographic transition: Birth rates have decreased substantially since 1970. We model this transition with an abrupt change in 1970 from an initial high level to a lower level." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll use the 1950 world population from the US Census as an initial condition, assuming that half the population is young and half old." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.278814327" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "half = get_first_value(census) / 2" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.278814
old1.278814
\n", + "
" + ], + "text/plain": [ + "young 1.278814\n", + "old 1.278814\n", + "dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(young=half, old=half)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll use a `System` object to store the parameters of the model." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
birth_rate10.0555556
birth_rate20.04
transition_year1970
mature_rate0.025
death_rate0.025
t_01950
t_end2016
inityoung 1.278814\n", + "old 1.278814\n", + "dtype: flo...
\n", + "
" + ], + "text/plain": [ + "birth_rate1 0.0555556\n", + "birth_rate2 0.04\n", + "transition_year 1970\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": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = System(birth_rate1 = 1/18,\n", + " birth_rate2 = 1/25,\n", + " transition_year = 1970,\n", + " mature_rate = 1/40,\n", + " death_rate = 1/40,\n", + " t_0 = 1950,\n", + " t_end = 2016,\n", + " init=init)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's an update function that computes the state of the system during the next year, given the current state and time." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def update_func1(state, t, system):\n", + " if t <= system.transition_year:\n", + " births = system.birth_rate1 * state.young\n", + " else: \n", + " births = system.birth_rate2 * state.young\n", + " \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": "markdown", + "metadata": {}, + "source": [ + "We'll test the update function with the initial condition." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.317889
old1.278814
\n", + "
" + ], + "text/plain": [ + "young 1.317889\n", + "old 1.278814\n", + "dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = update_func1(init, system.t_0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can do one more update using the state we just computed:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.358158
old1.279791
\n", + "
" + ], + "text/plain": [ + "young 1.358158\n", + "old 1.279791\n", + "dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = update_func1(state, system.t_0, system)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `run_simulation` function is similar to the one in the book; it returns a time series of total population." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": "markdown", + "metadata": {}, + "source": [ + "Now we can run the simulation and plot the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "results = run_simulation(system, update_func1);" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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BdwIfBe4Z8QjPAKfFe3hs2KzN8qSWdNYMrvvQocfbaxmQ2k9AMcVTme+Suyz/d11uygq3wvAyQtTmZ0V12f7G59Usm1X04DnPlJf/vKXeeutt/jqV79KSkoKCxcu5JRTTuG0004b9JjKykq+9rWvDXnep59+mmXLlnHFFVcAkJ6ezrXXXsvDDz/M5Zdf3rPfxRdfzIoVKwC46qqruPDCC+no6CA4OJiamhpWrlxJamoqADk5OQG/rj179jB79mwKCwsBes4hhBgbe/fuZd26dbjdB1ZdT0tLY86cORNuooOhEtQcrbXvUCfQWpcDVyulZNDKCLLb7fzmN7+hsrKSNWvW8Nlnn3H99ddzxhln8Ktf/eqwz1taWso777zD/Pnze8q8Xi8+X98fdffjPICEhAQAGhsbmT59OpdccglXXHEFxx13HMcddxxnnHEGMTExAV3/nHPO4Vvf+hYlJSUcf/zxnH766cyaNeuwX48QIjCGYbBjxw6Kiop62pssFgsFBQWkp6cD0FGlCUpIxeoMHc9QewyaoAJJTv32N448nKkhLCyM1tbWg8pbWloOGmuQnp5Oeno6F154If/85z+58cYbue666waseaSnp1NRUTHktdvb2znrrLP43ve+N+R+dvuBX43uAbPdSezGG2/krLPO4r333uPll1/mN7/5Dc8//zypqalYLJaeX/5uvWeDKCwsZPXq1bz33nt8+OGHfOMb3+CGG27gsssuGzIeIcThG6i9yel0snDhQuLi4jC8XbRu+ZCO6lIccdOJWnImFsv416YC7sWnlJoJrACS6Nd2pbX++QjHNSKWzB760dvxc2dw/NwZg24/eWEqJy8c/BHUl5am86Wl6cOOKz09/aC2pdbWViorK8nIyBj0uKysLMBMMgPG86Uv8fjjj3PdddcRF9f3cWRLSwsRERHk5eXx2Wef9XxiOly5ubnk5uby3e9+l6985Su8/fbbfOtb3yI2NpaGhoae/RobG/t8DxAdHc25557Lueeeyx//+Ef+8Y9/SIISYpS0t7fz+eef09zc3FMWHR3NokWLCAkJwdvWzP71b+JpMZszuvbupq1iM01hWaQmRYxX2ECACUopdQnwF6ADqAV6f0Q2MDtQiABdcsklfPvb32b27NksX76c1tZWHn30UZKSkjj++OMBeOaZZ9ixYwcrV65kxowZ1NbW8utf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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(census, un, results, 'World population estimates')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This figure shows the results from our model along with world population estimates from the United Nations Department of Economic and Social Affairs (UN DESA) and the US Census Bureau.\n", + "\n", + "We adjusted the parameters by hand to fit the data as well as possible. Overall, the model fits the data well.\n", + "\n", + "Nevertheless, between 1970 and 2016 there is clear curvature in the model that does not appear in the data, and in the most recent years it looks like the model is diverging from the data.\n", + "\n", + "In particular, the model would predict accelerating growth in the near future, which does not seem consistent with the trend in the data, and it contradicts predictions by experts.\n", + "\n", + "It seems that this model does not explain why world population is growing linear. We conclude that adding two age groups to the model is not sufficient to produce linear growth. Modeling the demographic transition with an abrupt change in birth rate is not sufficient either.\n", + "\n", + "In future work, we might explore whether a gradual change in birth rate would work better, possibly using a logistic function. We also might explore the behavior of the model with more than two age groups." + ] + }, + { + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/code/world_pop_transition_from_allendowney_github.ipynb b/code/world_pop_transition_from_allendowney_github.ipynb new file mode 100644 index 00000000..d06d2c61 --- /dev/null +++ b/code/world_pop_transition_from_allendowney_github.ipynb @@ -0,0 +1,491 @@ +{ + "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": 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": "code", + "execution_count": 2, + "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": 3, + "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": 4, + "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", + "empty = TimeSeries()\n", + "plot_results(census, un, empty, 'World population estimates')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.278814327" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "half = get_first_value(census) / 2" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.278814
old1.278814
\n", + "
" + ], + "text/plain": [ + "young 1.278814\n", + "old 1.278814\n", + "dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "init = State(young=half, old=half)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
birth_rate10.0555556
birth_rate20.0384615
mature_rate0.025
death_rate0.025
t_01950
t_end2016
inityoung 1.278814\n", + "old 1.278814\n", + "dtype: flo...
\n", + "
" + ], + "text/plain": [ + "birth_rate1 0.0555556\n", + "birth_rate2 0.0384615\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": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system = System(birth_rate1 = 1/18,\n", + " birth_rate2 = 1/26,\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": 15, + "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", + " \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": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.317889
old1.278814
\n", + "
" + ], + "text/plain": [ + "young 1.317889\n", + "old 1.278814\n", + "dtype: float64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = update_func1(init, system.t_0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
young1.358158
old1.279791
\n", + "
" + ], + "text/plain": [ + "young 1.358158\n", + "old 1.279791\n", + "dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = update_func1(state, system.t_0, system)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": 28, + "metadata": {}, + "outputs": [], + "source": [ + "results = run_simulation(system, update_func1);" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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lVto7jHXY2vt7KO2qYcoQtm45xDXrsn16YLzJzn19/eze/du6uuHh6PabDbmz59PWlraKevSO9KMT1DbDu1hR22hX8fmxeWwKuNsn20bKrdQ0rj/mOcsSc5nWcrCE4pxpBUrVuB0OvnJT37CD37wg3Gfv3LlSi6++GL+7//+z69E0tjYSGxsLE6nE4fDQUJCAj//+c+HZlgHc2LYtLS0oUR32223nZIHokKIYQNuJ9sO7WFvg4YRpd6zo+Owt0QTaITT0NpHY2sv8TEhfl+3oaGBXbt2+UzyGhERwZIlS6bdMjozPkHNNBaLhZ/85CdcddVVnH/++Vx44YXjvkZeXh7vv//+0Ovf/e53vP766z7HPProoyiluP3227njjjs455xzKCgoYMmSJVx22WWkpg4vMfLHP/6Rq6++mvz8fOLi4njllVeGlvAQQpx8VW01fFi1le6BnqFtNquNpckLWZiQxybrYVra+1iRn0xctH+/TLrdbvbt20dFRYXP9pM9tmk8JEFNorEWLBwUHx/Pww8/zL333ntUYvHXyLWejtfFl5eXx1tvvUVRURFbt25l48aNPP300zz11FOsWbOGoqIiSkpKhmYnv/rqq/nDH/7A5z73uWnTzBfiTLL54A721O1jwOWhrqmLqIgg5iamcX768qGiiBX5yeNa3bajo4MdO3b4FEIEBgayePHi466mfarN+AS1LGXhCXXBrco4+6huv4kaa8HCkdasWcOll17K3Xffjd0+vm/D3r17fYosjsXlcvHggw/yrW99iwULFrBgwQK+9KUvsW7dOl588UXWrFnDCy+8gN1uH1qV1+Vy0dDQwIYNG0Zdil4IMbXSolLYWL6bgw1dWDx24kjn4pWrcAQMf074m5wMw6CiooJ9+/b5FEIkJiaycOFCv56Dn0qyYOEkGmvBwiPdc889NDQ08NFHH/l9j/fff5/169dz/fXXj3ms3W6noqKCdevWDa2Q63K5OHDgAPPmzaOjo4M333yTp59+mnfffZd3332XDRs2cOWVV/L73//e75iEEJMnOTyBhcm5RNuSyLAsw94fy8H6rnFfp7e3l82bN/tU6dlsNhYuXMiyZcumfXKC06AFNZ2MtWDhkQIDA3niiSeOKvkeadu2bVx11VWA2YUYHx/Pb37zG+LihhcdG+0Z1KJFi3jwwQd56qmneOyxx1i7di3B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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": [] + } + ], + "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/environment.yml b/environment.yml index f0663176..a7058774 100644 --- a/environment.yml +++ b/environment.yml @@ -135,5 +135,5 @@ dependencies: - zope=1.0=py36_0 - zope.interface=4.5.0=py36h14c3975_0 - pint=0.7.2=py36_2 -prefix: /home/downey/anaconda3/envs/ModSimPy +# prefix: /home/downey/anaconda3/envs/ModSimPy diff --git a/modsim.py b/modsim.py new file mode 100644 index 00000000..a0b411fb --- /dev/null +++ b/modsim.py @@ -0,0 +1,1361 @@ +""" +Code from Modeling and Simulation in Python. + +Copyright 2017 Allen Downey + +License: https://creativecommons.org/licenses/by/4.0) +""" + +import logging +logger = logging.getLogger(name='modsim.py') + +#TODO: Make this Python 3.7 when conda is ready + +# make sure we have Python 3.6 or better +import sys +if sys.version_info < (3, 6): + logger.warn('modsim.py depends on Python 3.6 features.') + +import inspect +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import scipy +import sympy + +import seaborn as sns +sns.set(style='white', font_scale=1.2) + +import pint +UNITS = pint.UnitRegistry() +Quantity = UNITS.Quantity + +# expose some names so we can use them without dot notation +from copy import copy +from numpy import sqrt, log, exp, pi +from pandas import DataFrame, Series +from time import sleep + +from scipy.interpolate import interp1d +from scipy.interpolate import InterpolatedUnivariateSpline +from scipy.integrate import odeint +from scipy.integrate import solve_ivp +from scipy.optimize import leastsq +from scipy.optimize import minimize_scalar + +import scipy.optimize + + +def flip(p=0.5): + """Flips a coin with the given probability. + + p: float 0-1 + + returns: boolean (True or False) + """ + return np.random.random() < p + + +# For all the built-in Python functions that do math, +# let's use the NumPy version instead. + +abs = np.abs +min = np.min +max = np.max +pow = np.power +sum = np.sum +round = np.round + + + +def cart2pol(x, y, z=None): + """Convert Cartesian coordinates to polar. + + x: number or sequence + y: number or sequence + z: number or sequence (optional) + + returns: theta, rho OR theta, rho, z + """ + x = np.asarray(x) + y = np.asarray(y) + + # TODO: use hypot? + rho = np.sqrt(x**2 + y**2) + theta = np.arctan2(y, x) + + if z is None: + return theta, rho + else: + return theta, rho, z + + +def pol2cart(theta, rho, z=None): + """Convert polar coordinates to Cartesian. + + theta: number or sequence + rho: number or sequence + z: number or sequence (optional) + + returns: x, y OR x, y, z + """ + if hasattr(theta, 'units'): + if theta.units == UNITS.degree: + theta = theta.to(UNITS.radian) + if theta.units != UNITS.radian: + msg = """In pol2cart, theta must be either a number or + a Quantity in degrees or radians.""" + raise ValueError(msg) + + x = rho * np.cos(theta) + y = rho * np.sin(theta) + + if z is None: + return x, y + else: + return x, y, z + + +def linspace(start, stop, num=50, **options): + """Returns an array of evenly-spaced values in the interval [start, stop]. + + start: first value + stop: last value + num: number of 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 + """ + underride(options, dtype=np.float64) + + # see if either of the arguments has units + units = getattr(start, 'units', None) + units = getattr(stop, 'units', units) + + array = np.linspace(start, stop, num, **options) + if units: + array = array * units + return array + + +def linrange(start=0, stop=None, step=1, **options): + """Returns an array of evenly-spaced values in the interval [start, stop]. + + This function works best if the space between start and stop + is divisible by step; otherwise the results might be surprising. + + By default, the last value in the array is `stop-step` + (at least approximately). + If you provide the keyword argument `endpoint=True`, + the last value in the array is `stop`. + + start: first value + stop: last value + step: space between values + + returns: array or Quantity + """ + if stop is None: + stop = start + start = 0 + + # TODO: what breaks if we don't make the dtype float? + #underride(options, endpoint=True, dtype=np.float64) + underride(options, endpoint=False) + + # see if any of the arguments has units + units = getattr(start, 'units', None) + units = getattr(stop, 'units', units) + units = getattr(step, 'units', units) + + n = np.round((stop - start) / step) + if options['endpoint']: + n += 1 + + array = np.full(int(n), magnitude(step)) + array[0] = magnitude(start) + array = np.cumsum(array) + + if units: + array = array * units + return array + + +def magnitude(x): + """Returns the magnitude of a Quantity or number. + + x: Quantity or number + + returns: number + """ + return x.magnitude if isinstance(x, Quantity) else x + + +def magnitudes(x): + """Returns the magnitude of a Quantity or number, or sequence. + + x: Quantity or number, or sequence + + returns: number + """ + try: + return [magnitude(elt) for elt in x] + except TypeError: # not iterable + return magnitude(x) + + +def units(x): + """Returns the units of a Quantity or number. + + x: Quantity or number + + returns: Unit object or 1 + """ + return x.units if isinstance(x, Quantity) else 1 + + +def remove_units(series): + """Removes units from the values in a Series. + + Only removes units from top-level values; + does not traverse nested values. + + returns: new Series object + """ + res = copy(series) + print(type(res)) + for label, value in res.iteritems(): + res[label] = magnitude(value) + return res + + +def require_units(x, units): + """Apply units to `x`, if necessary. + + x: Quantity or number + units: Pint Units object + + returns: Quantity + """ + if isinstance(x, Quantity): + return x.to(units) + else: + return Quantity(x, units) + + +def fit_leastsq(error_func, params, *args, **options): + """Find the parameters that yield the best fit for the data. + + `params` can be a sequence, array, or Series + + Whatever arguments are provided are passed along to `error_func` + + error_func: function that computes a sequence of errors + params: initial guess for the best parameters + data: the data to be fit; will be passed to min_fun + options: any other arguments are passed to leastsq + """ + # if any of the params are quantities, strip the units + x0 = [magnitude(x) for x in params] + + # override `full_output` so we get a message if something goes wrong + options['full_output'] = True + + # run leastsq + with units_off(): + best_params, cov_x, infodict, mesg, ier = leastsq(error_func, + x0=x0, args=args, **options) + + details = ModSimSeries(infodict) + details.set(cov_x=cov_x, mesg=mesg, ier=ier) + + # if we got a Params object, we should return a Params object + if isinstance(params, Params): + best_params = Params(Series(best_params, params.index)) + + # return the best parameters and details + return best_params, details + + +def min_bounded(min_func, bounds, *args, **options): + """Finds the input value that minimizes `min_func`. + + Wrapper for https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html + + min_func: computes the function to be minimized + bounds: sequence of two values, lower and upper bounds of the + range to be searched + args: any additional positional arguments are passed to min_func + options: any keyword arguments are passed as options to minimize_scalar + + returns: ModSimSeries object + """ + # try: + # print(bounds[0]) + # min_func(bounds[0], *args) + # except Exception as e: + # msg = """Before running scipy.integrate.min_bounded, I tried + # running the slope function you provided with the + # initial conditions in system and t=0, and I got + # the following error:""" + # logger.error(msg) + # raise(e) + + underride(options, xatol=1e-3) + + # TODO: Do we need to remove units from bounds? + + with units_off(): + res = minimize_scalar(min_func, + bracket=bounds, + bounds=bounds, + args=args, + method='bounded', + options=options) + + if not res.success: + msg = """scipy.optimize.minimize_scalar did not succeed. + The message it returned is %s""" % res.message + raise Exception(msg) + + return ModSimSeries(res) + + +def max_bounded(max_func, bounds, *args, **options): + """Finds the input value that maximizes `max_func`. + + Wrapper for https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize_scalar.html + + min_func: computes the function to be maximized + bounds: sequence of two values, lower and upper bounds of the + range to be searched + args: any additional positional arguments are passed to max_func + options: any keyword arguments are passed as options to minimize_scalar + + returns: ModSimSeries object + """ + def min_func(*args): + return -max_func(*args) + + res = min_bounded(min_func, bounds, *args, **options) + # we have to negate the function value before returning res + res.fun = -res.fun + return res + + +def minimize(min_func, x0, *args, **options): + """Finds the input value that minimizes `min_func`. + + Wrapper for https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html + + min_func: computes the function to be minimized + x0: initial guess + args: any additional positional arguments are passed to min_func + options: any keyword arguments are passed as options to minimize_scalar + + returns: ModSimSeries object + """ + underride(options, tol=1e-3) + + with units_off(): + res = scipy.optimize.minimize(min_func, x0, *args, **options) + + return ModSimSeries(res) + + +def run_odeint(system, slope_func, **options): + """Integrates an ordinary differential equation. + + `system` should contain system parameters and `ts`, which + is an array or Series that specifies the time when the + solution will be computed. + + system: System object + slope_func: function that computes slopes + + returns: TimeFrame + """ + # make sure `system` contains `ts` + if not hasattr(system, 'ts'): + msg = """It looks like `system` does not contain `ts` + as a system variable. `ts` should be an array + or Series that specifies the times when the + solution will be computed:""" + raise ValueError(msg) + + # make sure `system` contains `ts` + if not hasattr(system, 'init'): + msg = """It looks like `system` does not contain `init` + as a system variable. `init` should be a State + object that specifies the initial condition:""" + raise ValueError(msg) + + # make the system parameters available as globals + unpack(system) + + # try running the slope function with the initial conditions + try: + slope_func(init, ts[0], system) + except Exception as e: + msg = """Before running scipy.integrate.odeint, I tried + running the slope function you provided with the + initial conditions in system and t=0, and I got + the following error:""" + logger.error(msg) + raise(e) + + # when odeint calls slope_func, it should pass `system` as + # the third argument. To make that work, we have to make a + # tuple with a single element and pass the tuple to odeint as `args` + args = (system,) + + # now we're ready to run `odeint` with `init` and `ts` from `system` + with units_off(): + array = odeint(slope_func, list(init), ts, args, **options) + + # the return value from odeint is an array, so let's pack it into + # a TimeFrame with appropriate columns and index + frame = TimeFrame(array, columns=init.index, index=ts, dtype=np.float64) + return frame + + +def run_ode_solver(system, slope_func, **options): + """Computes a numerical solution to a differential equation. + + `system` must contain `init` with initial conditions, + `t_0` with the start time, and `t_end` with the end time. + + It can contain any other parameters required by the slope function. + + `options` can be any legal options of `scipy.integrate.solve_ivp` + + system: System object + slope_func: function that computes slopes + + returns: TimeFrame + """ + # make sure `system` contains `init` + if not hasattr(system, 'init'): + msg = """It looks like `system` does not contain `init` + as a system variable. `init` should be a State + object that specifies the initial condition:""" + raise ValueError(msg) + + # make sure `system` contains `t_end` + if not hasattr(system, 't_end'): + msg = """It looks like `system` does not contain `t_end` + as a system variable. `t_end` should be the + final time:""" + raise ValueError(msg) + + # make the system parameters available as globals + unpack(system) + + # the default value for t_0 is 0 + t_0 = getattr(system, 't_0', 0) + + # try running the slope function with the initial conditions + # try: + # slope_func(init, t_0, system) + # except Exception as e: + # msg = """Before running scipy.integrate.solve_ivp, I tried + # running the slope function you provided with the + # initial conditions in `system` and `t=t_0` and I got + # the following error:""" + # logger.error(msg) + # raise(e) + + # wrap the slope function to reverse the arguments and add `system` + f = lambda t, y: slope_func(y, t, system) + + def wrap_event(event): + """Wrap the event functions. + + Make events terminal by default. + """ + wrapped = lambda t, y: event(y, t, system) + wrapped.terminal = getattr(event, 'terminal', True) + wrapped.direction = getattr(event, 'direction', 0) + return wrapped + + # wrap the event functions so they take the right arguments + events = options.pop('events', []) + try: + events = [wrap_event(event) for event in events] + except TypeError: + events = wrap_event(events) + + # remove dimensions from the initial conditions. + # we need this because otherwise `init` gets copied into the + # results array along with its units + y_0 = [magnitude(x) for x in init] + + # run the solver + with units_off(): + bunch = solve_ivp(f, [t_0, t_end], y_0, events=events, **options) + + # separate the results from the details + y = bunch.pop('y') + t = bunch.pop('t') + details = ModSimSeries(bunch) + + # pack the results into a TimeFrame + results = TimeFrame(np.transpose(y), index=t, columns=init.index) + return results, details + + +def fsolve(func, x0, *args, **options): + """Return the roots of the (non-linear) equations + defined by func(x) = 0 given a starting estimate. + + Uses scipy.optimize.fsolve, with extra error-checking. + + func: function to find the roots of + x0: scalar or array, initial guess + args: additional positional arguments are passed along to fsolve, + which passes them along to func + + returns: solution as an array + """ + # make sure we can run the given function with x0 + try: + func(x0, *args) + except Exception as e: + msg = """Before running scipy.optimize.fsolve, I tried + running the error function you provided with the x0 + you provided, and I got the following error:""" + logger.error(msg) + raise(e) + + # make the tolerance more forgiving than the default + underride(options, xtol=1e-6) + + x0 = magnitude(x0) + + # run fsolve + with units_off(): + result = scipy.optimize.fsolve(func, x0, args=args, **options) + + return result + + +def crossings(series, value): + """Find the labels where the series passes through value. + + The labels in series must be increasing numerical values. + + series: Series + value: number + + returns: sequence of labels + """ + interp = InterpolatedUnivariateSpline(series.index, series-value) + return interp.roots() + + +def interpolate(series, **options): + """Creates an interpolation function. + + series: Series object + options: any legal options to scipy.interpolate.interp1d + + returns: function that maps from the index of the series to values + """ + # TODO: add error checking for nonmonotonicity + + if sum(series.index.isnull()): + msg = """The Series you passed to interpolate contains + NaN values in the index, which would result in + undefined behavior. So I'm putting a stop to that.""" + raise ValueError(msg) + + # make the interpolate function extrapolate past the ends of + # the range, unless `options` already specifies a value for `fill_value` + underride(options, fill_value='extrapolate') + + # call interp1d, which returns a new function object + interp_func = interp1d(series.index, series.values, **options) + + units = getattr(series, 'units', None) + if units: + return lambda x: Quantity(interp_func(x), units) + else: + return interp_func + + +def interp_inverse(series, **options): + """Interpolate the inverse function of a Series. + + series: Series object, represents a mapping from `a` to `b` + kind: string, which kind of iterpolation + options: keyword arguments passed to interpolate + + returns: interpolation object, can be used as a function + from `b` to `a` + """ + inverse = Series(series.index, index=series.values) + T = interpolate(inverse, **options) + return T + + +def unpack(series): + """Make the names in `series` available as globals. + + series: Series with variables names in the index + """ + # TODO: Make this a context manager, so the syntax is + # with series: + # and maybe even add an __exit__ that copies changes back + frame = inspect.currentframe() + caller = frame.f_back + caller.f_globals.update(series) + + +def source_code(obj): + """Prints the source code for a given object. + + obj: function or method object + """ + print(inspect.getsource(obj)) + + +def underride(d, **options): + """Add key-value pairs to d only if key is not in d. + + If d is None, create a new dictionary. + + d: dictionary + options: keyword args to add to d + """ + if d is None: + d = {} + + for key, val in options.items(): + d.setdefault(key, val) + + return d + + +def plot(*args, **options): + """Makes line plots. + + args can be: + plot(y) + plot(y, style_string) + plot(x, y) + plot(x, y, style_string) + + options are the same as for pyplot.plot + """ + # TODO: add lines to REPLOT_CACHE + + x, y, style = parse_plot_args(*args, **options) + if isinstance(x, pd.DataFrame) or isinstance(y, pd.DataFrame): + raise ValueError("modsimpy.plot can't handle DataFrames.") + + if x is None: + if isinstance(y, np.ndarray): + x = np.arange(len(y)) + + if isinstance(y, pd.Series): + x = y.index + y = y.values + + x = magnitudes(x) + y = magnitudes(y) + underride(options, linewidth=3, alpha=0.6) + + if style is not None: + lines = plt.plot(x, y, style, **options) + else: + lines = plt.plot(x, y, **options) + return lines + +REPLOT_CACHE = {} + +def replot(*args, **options): + """ + """ + try: + label = options['label'] + except KeyError: + raise ValueError('To use replot, you must provide a label argument.') + + axes = plt.gca() + key = (axes, label) + + if key not in REPLOT_CACHE: + lines = plot(*args, **options) + if len(lines) != 1: + raise ValueError('Replot only works with a single plotted element.') + REPLOT_CACHE[key] = lines[0] + return lines + + line = REPLOT_CACHE[key] + x, y, style = parse_plot_args(*args, **options) + line.set_xdata(x) + line.set_ydata(y) + + +def parse_plot_args(*args, **options): + """Parse the args the same way plt.plot does.""" + x = None + y = None + style = None + + if len(args) == 1: + y = args[0] + elif len(args) == 2: + if isinstance(args[1], str): + y, style = args + else: + x, y = args + elif len(args) == 3: + x, y, style = args + + return x, y, style + + +def contour(df, **options): + """Makes a contour plot from a DataFrame. + + Note: columns and index must be numerical + + df: DataFrame + """ + x = results.columns + y = results.index + X, Y = np.meshgrid(x, y) + cs = plt.contour(X, Y, results, **options) + plt.clabel(cs, inline=1, fontsize=10) + + +def savefig(filename, **options): + """Save the current figure. + + Keyword arguments are passed along to plt.savefig + + https://matplotlib.org/api/_as_gen/matplotlib.pyplot.savefig.html + + filename: string + """ + print('Saving figure to file', filename) + plt.savefig(filename, **options) + + +def decorate(**options): + """Decorate the current axes. + + Call decorate with keyword arguments like + + decorate(title='Title', + xlabel='x', + ylabel='y') + + The keyword arguments can be any of the axis properties + + https://matplotlib.org/api/axes_api.html + + In addition, you can use `legend=False` to suppress the legend. + + And you can use `loc` to indicate the location of the legend + (the default value is 'best') + """ + loc = options.pop('loc', 'best') + if options.pop('legend', True): + legend(loc=loc) + + plt.gca().set(**options) + plt.tight_layout() + + +def legend(**options): + """Draws a legend only if there is at least one labeled item. + + options are passed to plt.legend() + https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html + + """ + underride(options, loc='best') + + ax = plt.gca() + handles, labels = ax.get_legend_handles_labels() + ax.legend(handles, labels, **options) + + +def remove_from_legend(bad_labels): + """Removes some labels from the legend. + + bad_labels: sequence of strings + """ + ax = plt.gca() + handles, labels = ax.get_legend_handles_labels() + handle_list, label_list = [], [] + for handle, label in zip(handles, labels): + if label not in bad_labels: + handle_list.append(handle) + label_list.append(label) + ax.legend(handle_list, label_list) + + +# TODO: Either finish SubPlots or remove it +class SubPlots: + + def __init__(self, fig, axes_seq): + self.fig = fig + self.axes_seq = axes_seq + self.current_axes_index = 0 + + def current_axes(): + return self.axes_seq(self.current_axes_index) + + # TODO: consider making SubPlots iterable + def next_axes(self): + self.current_axes_index += 1 + return current_axes() + + +def subplots(*args, **options): + fig, axes_seq = plt.subplots(*args, **options) + return SubPlots(fig, axes_seq) + + +def subplot(nrows, ncols, plot_number, **options): + figsize = {(2, 1): (8, 8), + (3, 1): (8, 10)} + key = nrows, ncols + default = (8, 5.5) + width, height = figsize.get(key, default) + + plt.subplot(nrows, ncols, plot_number, **options) + fig = plt.gcf() + fig.set_figwidth(width) + fig.set_figheight(height) + + +class ModSimSeries(pd.Series): + """Modified version of a Pandas Series, + with a few changes to make it more suited to our purpose. + + In particular: + + 1. I provide a more consistent __init__ method. + + 2. Series provides two special variables called + `dt` and `T` that cause problems if we try to use those names + as variables. I override them so they can be used variable names. + + 3. Series doesn't provide a good _repr_html, so it doesn't look + good in Jupyter notebooks. + + 4. ModSimSeries provides a set() method that takes keyword arguments. + """ + + def __init__(self, *args, **kwargs): + """Initialize a Series. + + Note: this cleans up a weird Series behavior, which is + that Series() and Series([]) yield different results. + See: https://github.com/pandas-dev/pandas/issues/16737 + """ + if args or kwargs: + underride(kwargs, copy=True) + super().__init__(*args, **kwargs) + else: + super().__init__([], dtype=np.float64) + + def _repr_html_(self): + """Returns an HTML representation of the series. + + Mostly used for Jupyter notebooks. + """ + df = pd.DataFrame(self.values, index=self.index, columns=['values']) + return df._repr_html_() + + def __copy__(self, deep=True): + series = super().copy(deep=deep) + return self.__class__(series) + + copy = __copy__ + + def set(self, **kwargs): + """Uses keyword arguments to update the Series in place. + + Example: series.set(a=1, b=2) + """ + for name, value in kwargs.items(): + self[name] = value + + @property + def dt(self): + """Intercept the Series accessor object so we can use `dt` + as a row label and access it using dot notation. + + https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html + """ + return self.loc['dt'] + + @property + def T(self): + """Intercept the Series accessor object so we can use `T` + as a row label and access it using dot notation. + + https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.T.html + """ + return self.loc['T'] + + +def get_first_label(series): + """Returns the label of the first element.""" + return series.index[0] + +def get_last_label(series): + """Returns the label of the first element.""" + return series.index[-1] + +def get_index_label(series, i): + """Returns the ith label in the index.""" + return series.index[i] + +def get_first_value(series): + """Returns the value of the first element.""" + return series.values[0] + +def get_last_value(series): + """Returns the value of the first element.""" + return series.values[-1] + +def gradient(series): + """Computes the numerical derivative of a series.""" + a = np.gradient(series, series.index) + return TimeSeries(a, series.index) + + +class TimeSeries(ModSimSeries): + """Represents a mapping from times to values.""" + pass + + +class SweepSeries(ModSimSeries): + """Represents a mapping from parameter values to metrics.""" + pass + + +class System(ModSimSeries): + """Contains system variables and their values. + + Takes keyword arguments and stores them as rows. + """ + + def __init__(self, *args, **kwargs): + """Initialize the series. + + If there are no positional arguments, use kwargs. + + If there is one positional argument, copy it and add + in the kwargs. + + More than one positional argument is an error. + """ + if len(args) == 0: + super().__init__(list(kwargs.values()), index=kwargs) + elif len(args) == 1: + super().__init__(*args, copy=True) + self.set(**kwargs) + else: + msg = '__init__() takes at most one positional argument' + raise TypeError(msg) + + +class State(System): + """Contains state variables and their values. + + Takes keyword arguments and stores them as rows. + """ + pass + + +class Condition(System): + """Represents the condition of a system. + + Condition objects are often used to construct a System object. + """ + pass + + +class Params(System): + """Represents a set of parameters. + """ + pass + + +def compute_abs_diff(seq): + xs = np.asarray(seq) + diff = np.ediff1d(xs, np.nan) + if isinstance(seq, Series): + return Series(diff, seq.index) + else: + return diff + +def compute_rel_diff(seq): + xs = np.asarray(seq) + diff = np.ediff1d(xs, np.nan) + return diff / seq + + +class ModSimDataFrame(pd.DataFrame): + """ModSimDataFrame is a modified version of a Pandas DataFrame, + with a few changes to make it more suited to our purpose. + + In particular: + + 1. DataFrame provides two special variables called + `dt` and `T` that cause problems if we try to use those names + as variables. I override them so they can be used as row labels. + + 2. When you select a row or column from a ModSimDataFrame, you get + back an appropriate subclass of Series: TimeSeries, SweepSeries, + or ModSimSeries. + """ + column_constructor = ModSimSeries + row_constructor = ModSimSeries + + def __init__(self, *args, **options): + # TODO: currently ModSimDataFrame underrides to float64 and + # ModSimSeries does not. Does this inconsistency make sense? + # underride(options, dtype=np.float64) + super().__init__(*args, **options) + + def __getitem__(self, key): + """Intercept the column getter to return the right subclass of Series. + """ + obj = super().__getitem__(key) + if isinstance(obj, Series): + obj = self.column_constructor(obj) + return obj + + @property + def dt(self): + """Intercept the Series accessor object so we can use `dt` + as a column label and access it using dot notation. + + https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dt.html + """ + return self['dt'] + + @property + def T(self): + """Intercept the Series accessor object so we can use `T` + as a column label and access it using dot notation. + + https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.T.html + """ + return self['T'] + + @property + def row(self): + """Gets or sets a row. + + Returns a wrapper for the Pandas LocIndexer, so when we look up a row + we get the right kind of ModSimSeries. + + returns ModSimLocIndexer + """ + li = self.loc + return ModSimLocIndexer(li, self.row_constructor) + + +class ModSimLocIndexer: + """Wraps a Pandas LocIndexer.""" + + def __init__(self, li, constructor): + """Save the LocIndexer and constructor. + """ + self.li = li + self.constructor = constructor + + def __getitem__(self, key): + """Get a row and return the appropriate type of Series. + """ + result = self.li[key] + if isinstance(result, Series): + result = self.constructor(result) + return result + + def __setitem__(self, key, value): + """Setting just passes the request to the wrapped object. + """ + self.li[key] = value + + +class TimeFrame(ModSimDataFrame): + """A DataFrame that maps from time to State. + """ + column_constructor = TimeSeries + row_constructor = State + + +class SweepFrame(ModSimDataFrame): + """A DataFrame that maps from a parameter value to a SweepSeries. + """ + column_constructor = SweepSeries + row_constructor = SweepSeries + + +def Vector(*args, units=None): + """Make a ModSimVector. + + args: can be a single argument or sequence + units: Pint Unit object or Quantity + + If there's only one argument, it should be a sequence. + + Otherwise, the arguments are treated as coordinates. + + returns: ModSimVector + """ + if len(args) == 1: + args = args[0] + + # if it's a series, pull out the values + if isinstance(args, Series): + args = args.values + + # see if any of the arguments have units; if so, save the first one + for elt in args: + found_units = getattr(elt, 'units', None) + if found_units: + break + + if found_units: + # if there are units, remove them + args = [magnitude(elt) for elt in args] + + # if the units keyword is provided, it overrides the units in args + if units is not None: + found_units = units + + return ModSimVector(args, found_units) + + +## Vector functions (should work with any sequence) + +def vector_mag(v): + """Vector magnitude with units. + + returns: number or Quantity + """ + return np.sqrt(np.dot(v, v)) * units(v) + +def vector_mag2(v): + """Vector magnitude squared with units. + + returns: number of Quantity + """ + return np.dot(v, v) * units(v) * units(v) + +def vector_angle(v): + """Angle between v and the positive x axis. + + Only works with 2-D vectors. + + returns: number in radians + """ + assert len(v) == 2 + x, y = v + return np.arctan2(y, x) + +def vector_polar(v): + """Vector magnitude and angle. + + returns: (number or quantity, number in radians) + """ + return vector_mag(v), vector_angle(v) + +def vector_hat(v): + """Unit vector in the direction of v. + + The result should have no units. + + returns: Vector or array + """ + # get the size of the vector + mag = vector_mag(v) + + # check if the magnitude of the Quantity is 0 + if magnitude(mag) == 0: + if isinstance(v, ModSimVector): + return Vector(magnitude(v)) + else: + return magnitude(np.asarray(v)) + else: + return v / mag + +def vector_perp(v): + """Perpendicular Vector (rotated left). + + Only works with 2-D Vectors. + + returns: Vector + """ + assert len(v) == 2 + x, y = v + return Vector(-y, x) + +def vector_dot(v, w): + """Dot product of v and w. + + returns: number or Quantity + """ + return np.dot(v, w) * units(v) * units(w) + +def vector_cross(v, w): + """Cross product of v and w. + + returns: number or Quantity for 2-D, Vector for 3-D + """ + res = np.cross(v, w) + + if len(v)==3 and (isinstance(v, ModSimVector) or + isinstance(w, ModSimVector)): + return ModSimVector(res, units(v) * units(w)) + else: + return res * units(v) * units(w) + +def vector_proj(v, w): + """Projection of v onto w. + + Results has the units of v, but that might not make sense unless + v and w have the same units. + + returns: array or Vector with direction of w and units of v. + """ + w_hat = vector_hat(w) + return vector_dot(v, w_hat) * w_hat + +def scalar_proj(v, w): + """Returns the scalar projection of v onto w. + + Which is the magnitude of the projection of v onto w. + + Results has the units of v, but that might not make sense unless + v and w have the same units. + + returns: scalar with units of v. + """ + return vector_dot(v, vector_hat(w)) + +def vector_dist(v, w): + """Euclidean distance from v to w, with units.""" + if isinstance(v, list): + v = np.asarray(v) + return vector_mag(v-w) + +def vector_diff_angle(v, w): + """Angular difference between two vectors, in radians. + """ + if len(v) == 2: + return vector_angle(v) - vector_angle(w) + else: + #TODO: see http://www.euclideanspace.com/maths/algebra/ + # vectors/angleBetween/ + raise NotImplementedError() + + +class ModSimVector(Quantity): + """Represented as a Pint Quantity with a NumPy array + + x, y, z, mag, mag2, and angle are accessible as attributes. + """ + + @property + def x(self): + """Returns the x component with units.""" + return self[0] + + @property + def y(self): + """Returns the y component with units.""" + return self[1] + + @property + def z(self): + """Returns the z component with units.""" + return self[2] + + @property + def mag(self): + """Returns the magnitude with units.""" + return vector_mag(self) + + @property + def mag2(self): + """Returns the magnitude squared with units.""" + return vector_mag2(self) + + @property + def angle(self): + """Returns the angle between self and the positive x axis.""" + return vector_angle(self) + + # make the vector functions available as methods + polar = vector_polar + hat = vector_hat + perp = vector_perp + dot = vector_dot + cross = vector_cross + proj = vector_proj + comp = scalar_proj + dist = vector_dist + diff_angle = vector_diff_angle + + + +def plot_segment(A, B, **options): + """Plots a line segment between two Vectors. + + For 3-D vectors, the z axis is ignored. + + Additional options are passed along to plot(). + + A: Vector + B: Vector + """ + xs = A.x, B.x + ys = A.y, B.y + plot(xs, ys, **options) + + +@property +def dimensionality(self): + """Unit's dimensionality (e.g. {length: 1, time: -1}) + + This is a simplified version of this method that does no caching. + + returns: dimensionality + """ + dim = self._REGISTRY._get_dimensionality(self._units) + return dim + +# monkey patch Unit and Quantity so they use the non-caching +# version of `dimensionality` +pint.unit._Unit.dimensionality = dimensionality +pint.quantity._Quantity.dimensionality = dimensionality + + +class units_off: + SAVED_PINT_METHOD_STACK = [] + + def __enter__(self): + """Make all quantities behave as if they were dimensionless. + """ + self.SAVED_PINT_METHOD_STACK.append(UNITS._get_dimensionality) + UNITS._get_dimensionality = lambda self: {} + + + def __exit__(self, type, value, traceback): + """Restore the saved behavior of quantities. + """ + UNITS._get_dimensionality = self.SAVED_PINT_METHOD_STACK.pop()