From bbd101c3edaf02ac669c2b0e08a7eb108aba35fd Mon Sep 17 00:00:00 2001 From: Heejin Ohn Date: Tue, 26 Apr 2022 12:44:51 -0500 Subject: [PATCH 1/2] Changes to be committed: modified: .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 43b2257af..8bc7f517d 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,6 @@ ENV/ Untitled* *~ + +# Environment +Pipfile* From 97ec0c4921d29163797135266c0ea130e5aef16b Mon Sep 17 00:00:00 2001 From: Heejin Ohn Date: Tue, 26 Apr 2022 17:53:39 -0500 Subject: [PATCH 2/2] Update notebook Ch1 and Ch2 --- .gitignore | 3 + notebooks/chap01.ipynb | 459 ++++++++++++-- notebooks/chap02.ipynb | 1313 +++++++++++++++++++++++++++++++++++++--- notebooks/chap03.ipynb | 65 +- 4 files changed, 1686 insertions(+), 154 deletions(-) diff --git a/.gitignore b/.gitignore index 8bc7f517d..31ecf734c 100644 --- a/.gitignore +++ b/.gitignore @@ -96,3 +96,6 @@ Untitled* # Environment Pipfile* + +# Output +*.pdf diff --git a/notebooks/chap01.ipynb b/notebooks/chap01.ipynb index 4d73a4a05..746c03957 100644 --- a/notebooks/chap01.ipynb +++ b/notebooks/chap01.ipynb @@ -136,7 +136,15 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python 3.10.2\r\n" + ] + } + ], "source": [ "!python --version" ] @@ -145,7 +153,15 @@ "cell_type": "code", "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6.4.11\r\n" + ] + } + ], "source": [ "!jupyter-notebook --version" ] @@ -195,7 +211,24 @@ "cell_type": "code", "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "meter" + ], + "text/latex": [ + "$\\mathrm{meter}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "meter = UNITS.meter" ] @@ -204,7 +237,24 @@ "cell_type": "code", "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "second" + ], + "text/latex": [ + "$\\mathrm{second}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "second = UNITS.second" ] @@ -218,10 +268,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "UNITS??" + ] }, { "cell_type": "markdown", @@ -232,9 +284,26 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "9.8 meter/second2" + ], + "text/latex": [ + "$9.8\\ \\frac{\\mathrm{meter}}{\\mathrm{second}^{2}}$" + ], + "text/plain": [ + "9.8 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a = 9.8 * meter / second**2" ] @@ -248,9 +317,26 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "4 second" + ], + "text/latex": [ + "$4\\ \\mathrm{second}$" + ], + "text/plain": [ + "4 " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "t = 4 * second" ] @@ -264,9 +350,26 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "78.4 meter" + ], + "text/latex": [ + "$78.4\\ \\mathrm{meter}$" + ], + "text/plain": [ + "78.4 " + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "a * t**2 / 2" ] @@ -280,11 +383,28 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "39.2 meter/second" + ], + "text/latex": [ + "$39.2\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "39.2 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a * t" ] }, { @@ -294,15 +414,6 @@ "**Exercise**: Why would it be nonsensical to add `a` and `t`? What happens if you try?" ] }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -333,7 +444,24 @@ "cell_type": "code", "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "381 meter" + ], + "text/latex": [ + "$381\\ \\mathrm{meter}$" + ], + "text/plain": [ + "381 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "h = 381 * meter" ] @@ -353,7 +481,24 @@ "cell_type": "code", "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "8.817885349720552 second" + ], + "text/latex": [ + "$8.817885349720552\\ \\mathrm{second}$" + ], + "text/plain": [ + "8.817885349720552 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "t = sqrt(2 * h / a)" ] @@ -371,7 +516,24 @@ "cell_type": "code", "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "86.41527642726142 meter/second" + ], + "text/latex": [ + "$86.41527642726142\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "86.41527642726142 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "v = a * t" ] @@ -387,7 +549,24 @@ "cell_type": "code", "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "hour" + ], + "text/latex": [ + "$\\mathrm{hour}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "mile = UNITS.mile\n", "hour = UNITS.hour" @@ -397,7 +576,24 @@ "cell_type": "code", "execution_count": 17, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "193.30546802805432 mile/hour" + ], + "text/latex": [ + "$193.30546802805432\\ \\frac{\\mathrm{mile}}{\\mathrm{hour}}$" + ], + "text/plain": [ + "193.30546802805432 " + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "v.to(mile/hour)" ] @@ -417,18 +613,45 @@ "cell_type": "code", "execution_count": 18, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "foot" + ], + "text/latex": [ + "$\\mathrm{foot}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "foot = UNITS.foot" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "384.048 meter \n", + " 1260.0 foot\n" + ] + } + ], "source": [ - "# Solution goes here" + "pole_height = 10 * foot\n", + "print(h + pole_height, '\\n', pole_height + h)" ] }, { @@ -452,45 +675,104 @@ "cell_type": "code", "execution_count": 20, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "18.0 meter/second" + ], + "text/latex": [ + "$18.0\\ \\frac{\\mathrm{meter}}{\\mathrm{second}}$" + ], + "text/plain": [ + "18.0 " + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_a_v = 18 * meter / second" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "1.8367346938775508 second" + ], + "text/latex": [ + "$1.8367346938775508\\ \\mathrm{second}$" + ], + "text/plain": [ + "1.8367346938775508 " + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_a_t = max_a_v / a" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "16.530612244897956 meter" + ], + "text/latex": [ + "$16.530612244897956\\ \\mathrm{meter}$" + ], + "text/plain": [ + "16.530612244897956 " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_a_h = a * max_a_t ** 2 / 2" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "outputs": [ + { + "data": { + "text/html": [ + "364.46938775510205 meter" + ], + "text/latex": [ + "$364.46938775510205\\ \\mathrm{meter}$" + ], + "text/plain": [ + "364.46938775510205 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "h_left = h - max_a_h" ] }, { @@ -515,8 +797,9 @@ } ], "metadata": { + "hide_input": false, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -530,7 +813,67 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.5" + "version": "3.10.2" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": true, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false } }, "nbformat": 4, diff --git a/notebooks/chap02.ipynb b/notebooks/chap02.ipynb index 192035b5f..182efff40 100644 --- a/notebooks/chap02.ipynb +++ b/notebooks/chap02.ipynb @@ -54,7 +54,55 @@ "cell_type": "code", "execution_count": 2, "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": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -70,7 +118,18 @@ "cell_type": "code", "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "10" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.olin" ] @@ -81,7 +140,18 @@ "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley" ] @@ -131,7 +201,55 @@ "cell_type": "code", "execution_count": 6, "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": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare" ] @@ -147,7 +265,55 @@ "cell_type": "code", "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
wellesley3
\n", + "
" + ], + "text/plain": [ + "olin 9\n", + "wellesley 3\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare.wellesley += 1\n", "bikeshare" @@ -184,7 +350,55 @@ "cell_type": "code", "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
olin8
wellesley4
\n", + "
" + ], + "text/plain": [ + "olin 8\n", + "wellesley 4\n", + "dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bike_to_wellesley()\n", "bikeshare" @@ -202,7 +416,18 @@ "cell_type": "code", "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bike_to_wellesley" ] @@ -227,16 +452,66 @@ "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "def bike_to_olin():\n", + " bikeshare.olin += 1\n", + " bikeshare.wellesley -= 1" ] }, { "cell_type": "code", "execution_count": 12, "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": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# Solution goes here" + "bikeshare" ] }, { @@ -255,15 +530,6 @@ "The Python function `help` looks up a function and displays its documentation." ] }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "help(flip)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -273,9 +539,20 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "flip(0.7)" ] @@ -289,7 +566,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -306,9 +583,17 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "heads\n" + ] + } + ], "source": [ "if flip(0.7):\n", " print('heads')\n", @@ -327,9 +612,57 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "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": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -343,9 +676,57 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "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": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "if flip(0.5):\n", " bike_to_wellesley()\n", @@ -363,9 +744,57 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "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": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "if flip(0.4):\n", " bike_to_olin()\n", @@ -383,7 +812,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -406,9 +835,57 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "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": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "step()\n", "bikeshare" @@ -427,11 +904,12 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def step(p1, p2):\n", + " print('p1: ', p1, '\\np2: ', p2)\n", " if flip(p1):\n", " bike_to_wellesley()\n", " print('Moving a bike to Wellesley')\n", @@ -450,9 +928,67 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1: 0.5 \n", + "p2: 0.4\n", + "Moving a bike to Wellesley\n", + "Moving a bike to Olin\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
olin10
wellesley2
\n", + "
" + ], + "text/plain": [ + "olin 10\n", + "wellesley 2\n", + "dtype: int64" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "step(0.5, 0.4)\n", "bikeshare" @@ -467,11 +1003,20 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p1: 0.3 \n", + "p2: 0.2\n" + ] + } + ], "source": [ - "# Solution goes here" + "step(.3,.2)" ] }, { @@ -490,7 +1035,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -511,9 +1056,57 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "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": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -527,9 +1120,57 @@ }, { "cell_type": "code", - "execution_count": 27, + "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
olin6
wellesley6
\n", + "
" + ], + "text/plain": [ + "olin 6\n", + "wellesley 6\n", + "dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(4):\n", " bike_to_wellesley()\n", @@ -546,9 +1187,57 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "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
olin5
wellesley7
\n", + "
" + ], + "text/plain": [ + "olin 5\n", + "wellesley 7\n", + "dtype: int64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(4):\n", " step(0.3, 0.2)\n", @@ -565,9 +1254,57 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 28, "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
olin4
wellesley8
\n", + "
" + ], + "text/plain": [ + "olin 4\n", + "wellesley 8\n", + "dtype: int64" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "for i in range(60):\n", " step(0.3, 0.2)\n", @@ -597,9 +1334,47 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
\n", + "
" + ], + "text/plain": [ + "TimeSeries([], dtype: float64)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results = TimeSeries()" ] @@ -613,9 +1388,52 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
04
\n", + "
" + ], + "text/plain": [ + "0 4\n", + "dtype: int64" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results[0] = bikeshare.olin\n", "results" @@ -632,9 +1450,57 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 31, "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": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bikeshare = State(olin=10, wellesley=2)" ] @@ -648,7 +1514,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -666,9 +1532,97 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 33, "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
values
010
110
29
39
410
510
610
711
811
911
\n", + "
" + ], + "text/plain": [ + "0 10\n", + "1 10\n", + "2 9\n", + "3 9\n", + "4 10\n", + "5 10\n", + "6 10\n", + "7 11\n", + "8 11\n", + "9 11\n", + "dtype: int64" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results" ] @@ -682,18 +1636,48 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "10.1" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results.mean()" ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "count 10.000000\n", + "mean 10.100000\n", + "std 0.737865\n", + "min 9.000000\n", + "25% 10.000000\n", + "50% 10.000000\n", + "75% 10.750000\n", + "max 11.000000\n", + "dtype: float64" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "results.describe()" ] @@ -716,9 +1700,27 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 36, "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": [ "plot(results, label='Olin')\n", "\n", @@ -736,15 +1738,6 @@ "`decorate`, which is defined in the `modsim` library, adds a title and labels the axes." ] }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [], - "source": [ - "help(decorate)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -752,15 +1745,6 @@ "`savefig()` saves a figure in a file." ] }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [], - "source": [ - "help(savefig)" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -795,20 +1779,57 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ - "# Solution goes here" + "def run_simulation(p1, p2, num_steps):\n", + " global result_olin\n", + " global result_wellesley\n", + " result_olin = TimeSeries()\n", + " result_wellesley = TimeSeries()\n", + " for i in range(num_steps):\n", + " result_olin[i] = bikeshare.olin\n", + " result_wellesley[i] = bikeshare.wellesley\n", + " step(p1, p2)\n", + " \n", + " plot(result_olin, label='Olin')\n", + " plot(result_wellesley, label='Wellesley')\n", + " decorate(title='Olin-Wellesley Bikeshare',\n", + " xlabel='Time step (min)', \n", + " ylabel='Number of bikes')\n", + "\n", + " savefig('figs/chap02-exc.pdf') " ] }, { "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], - "source": [ - "# Solution goes here" + "execution_count": 38, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saving figure to file figs/chap02-exc.pdf\n" + ] + }, + { + "data": { + "image/png": "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X19f7c+rr75aLN6IiAhl6NChSvPmzZV27dopM2fOVAoKCowe8759+5S+ffsqvr6+SseOHbXTwsvj+VUURWnWrJly5MiRItvK27k9dOhQkXiys7OVKVOmKG3btlVatWqlTJ06VcnPz9e+7+vrq/z666+KoihKQUGB8s033yiBgYFKixYtlDfffFPJyMgwWrxJSUlKgwYNFG9v7yL/hn19fZXk5ORi8WZkZCiTJk1S2rRpo/j6+iovv/yycu3aNaPFqyiKcuvWLWX8+PFKq1atFH9/f+X1119Xbt++rX2/PJ3fuz744APl3XffLXF/U5/fRyGLyQkhhDC6J2bYTQghxONDko8QQgijk+QjhBDC6CT5CCGEMDpJPkIIIYxOko8QQgijk+QjHltvv/02DRo0KPVn1qxZhIWFMX36dFOHiqIorFq1ipycHIP2ExkZyfDhw8t07KxZs+jXr59O+16/fp0+ffoYvcCteHLIcz7isXXnzh1t7a24uDjCwsJYvXo11apVAwprcOXl5WFubl6kyrYp/PXXX4SFhXH8+HHs7OwM0odGo6F///5MnjwZPz+/hz4+IyOD3NzcEss8lWT69OnY2dkxduzYh+5LiCemsKioeBwcHHBwcAAKyxUBuLq6llgqxdSM8R1v+/btqFSqMiUeKCyh9DCJMSwsjJCQEF544QWTJ3fx+JFhN/FEu3fYbdasWYwfP57PP/8cf39/2rVrx5o1a9i7dy/dunXDz8+PV199tUjJ/PXr19OtWzeaNWtG37592b17d6l93bhxg1GjRuHv70+LFi0YN24cSUlJXL16VTsU1rx5c9auXQvAnj17CA0NxcfHh169ehVZNG7t2rWEhoYyd+5cWrVqRevWrfn8889LXVIbYNmyZXTt2lX7+mF/33uH3Q4fPkxAQADr168nODgYHx8fXnrpJW7duqVtv3r16tSuXbvEpdSFeBBJPqJC2b59O7m5uaxbt46ePXsyZcoUZs6cyWeffcbs2bP5888/Wb16NVC4JMPUqVN57bXX2LBhA88++yzjxo3jxIkTJbY9ZcoU8vLyWLVqFcuWLePatWt8+umnVKtWjVmzZmn779mzJzExMYwbN46hQ4eyceNGxowZw/Tp09m0aZO2vQsXLrBr1y4WL17MtGnTWL16Nd99912Jfaenp3P06FECAwPL/Pv+2507d/j555+ZNWsWixcvJioqijlz5hTZJzAwkD179uh28oW4hwy7iQrFxsaGiRMnolarGTx4MEuWLGH06NH4+PgA0LJlS86fPw/A3LlzGTFiBD179gSgdu3anD59mh9//LHEoa2rV6/i5eVFzZo1sbKy4ssvvyQjIwO1Wo2TkxNQOCxobW3NggULCAkJ4dlnn9W2ffnyZRYuXKitxF5QUMDnn39OzZo1adSoEaNHj2b+/PmMHTu2yIq9ULgiq0ajKbZ0xcP8vv9WUFDA22+/rV1dMyQkhFOnThXZp169eqxcuVLHsy/E/5PkIyqU6tWra0vT313n5N5FxKytrbUzuGJiYjh16hRz587Vvp+Xl4eXl1eJbY8aNYqJEycSEBBA69at6dy5MyEhISXuGxMTw7lz59i4caN2W35+fpFy/dWqVSsSm4+PD7du3SIlJQVXV9ci7d26dQsbG5tia7c8zO9bEg8PD+2f7e3tycvLK/K+s7MzqampFBQUPLDkvxD3kuQjKpSSPiBLW2yuoKCAN954g44dOxbZXtp6Lj179qR169bs2rVLO2S3YcMGFi9eXGLbYWFhDB48WOdYNRpNqfGamZmVOKnhYX7fklhYWBR5/e8+NBoNZmZmxa7EhHgQuecjRCnq1q3LtWvX8PDw0P5s3LixyH2Ze3399ddcvXqV/v378/XXXzN79mwOHTrErVu3in04161bl0uXLhVp++DBgyxbtky7T0JCAsnJydrXp06dolq1ajg7Oxfru1KlSmRlZRVbwtzQ7l6FPUxCEwIk+QhRqpEjR7Jy5UpWrFjB5cuXWbFiBd9++22RYat7xcbG8uGHHxIZGcmlS5fYuHEjNWrUwNXVFVtbWwBOnz5NRkYG4eHh7N69mzlz5nDp0iW2bNnC9OnTqVKlira9vLw83nnnHWJiYti+fTtz584t9QHShg0bYmFhQXR0tP5PxH1ER0fTpEkTo/YpngySfIQoRZcuXZg0aRKLFi2iZ8+eLFq0iA8//FA7AeHfpkyZgoeHByNHjiQkJIT4+Hjmzp2LmZkZ9evXp2PHjoSHh7Nq1SqaNGnCN998w+bNm+nVqxczZsxg1KhRjBgxQtues7MzTZs2ZfDgwUyZMoWRI0fy4osvlti3vb09zZs356+//jLIuSjNkSNHig1LCqELqXAgRDm0du1apk+fzuHDh3U+ZsuWLXz33Xds2LDBgJH9v7i4OAYNGsSuXbvkIVPx0OTKR4gnRLdu3QA4evSoUfpbvnw5YWFhknhEmUjyEeIJYWZmxscff8zMmTMN3ldCQgKHDh3ilVdeMXhf4skkw25CCCGMTq58hBBCGJ0kHyGEEEYnyUcIIYTRSfIRQghhdJJ8hBBCGJ0kHyGEEEb3f1Venh2xwixnAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bikeshare = State(olin=5, wellesley=5)\n", + "run_simulation(.3, .2, 20)" ] }, { @@ -858,9 +1879,36 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 39, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function decorate in module modsim.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)" ] @@ -878,9 +1926,25 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 40, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "def 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", + " return np.random.random() < p\n", + "\n" + ] + } + ], "source": [ "source_code(flip)" ] @@ -894,8 +1958,9 @@ } ], "metadata": { + "hide_input": false, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -909,7 +1974,67 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.2" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": true, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false } }, "nbformat": 4, diff --git a/notebooks/chap03.ipynb b/notebooks/chap03.ipynb index 82a9d53a8..12b7ed8eb 100644 --- a/notebooks/chap03.ipynb +++ b/notebooks/chap03.ipynb @@ -572,8 +572,9 @@ } ], "metadata": { + "hide_input": false, "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -587,7 +588,67 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.2" + }, + "latex_envs": { + "LaTeX_envs_menu_present": true, + "autoclose": true, + "autocomplete": true, + "bibliofile": "biblio.bib", + "cite_by": "apalike", + "current_citInitial": 1, + "eqLabelWithNumbers": true, + "eqNumInitial": 1, + "hotkeys": { + "equation": "Ctrl-E", + "itemize": "Ctrl-I" + }, + "labels_anchors": false, + "latex_user_defs": false, + "report_style_numbering": false, + "user_envs_cfg": false + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "varInspector": { + "cols": { + "lenName": 16, + "lenType": 16, + "lenVar": 40 + }, + "kernels_config": { + "python": { + "delete_cmd_postfix": "", + "delete_cmd_prefix": "del ", + "library": "var_list.py", + "varRefreshCmd": "print(var_dic_list())" + }, + "r": { + "delete_cmd_postfix": ") ", + "delete_cmd_prefix": "rm(", + "library": "var_list.r", + "varRefreshCmd": "cat(var_dic_list()) " + } + }, + "types_to_exclude": [ + "module", + "function", + "builtin_function_or_method", + "instance", + "_Feature" + ], + "window_display": false } }, "nbformat": 4,