{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE30338](https://jckantor.github.io/CBE30338)\n", "by Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE30338.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Python Basics](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/01.02-Python-Basics.ipynb) | [Contents](toc.ipynb) | [Python Numeric Integration Revisited](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/01.04-Python-Numeric-Integration-Revisited.ipynb) >

\"Open

\"Download\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Python Conditionals and Libraries" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A Tutorial by Jacob Gerace" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conditionals in Python" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is the answer to the ultimate question\n", "This print statement is run no matter what because it is not indented!\n", "It takes me 11 minutes\n" ] } ], "source": [ "#Sometimes you want to execute code only in certain circumstances. \n", "\n", "#Change answer and see what code is executed:\n", "answer = 42\n", "\n", "if answer == 42:\n", " print('This is the answer to the ultimate question')\n", "elif answer < 42:\n", " print('This is less than the answer to the ultimate question')\n", "else:\n", " print('This is more than the answer to the ultimate question')\n", "print('This print statement is run no matter what because it is not indented!')\n", "\n", "#An if statement is an example of a structure that creates a new block. The block includes all of the code that is \n", "#indented. The indentation (tab character) is imperative. Don't forget it!\n", "\n", "#This is normally just good coding style in other languages, but in python it isn't optional\n", "\n", "#We can check multiple things at once using boolean operations\n", "snowy = True\n", "day = \"Monday\"\n", "\n", "#How long does it take me to get to class in the morning?\n", "\n", "if (snowy == False) and (day != \"Monday\"):\n", " #and is boolean and. True only if both are true. False otherwise\n", " time = 7\n", "elif (snowy == True) and (day == \"Monday\"):\n", " time = 11\n", "elif (rainy == True) or (day == \"Monday\"):\n", " time = 9\n", " \n", "print(\"It takes me %d minutes\" %(time))\n", " \n", "#You can structure these statements more neatly if you \"nest\" if statements (put an if statement inside an if statement)\n", "#But this is just for edification." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Functions in Python" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1\n", "1\n", "None\n", "1\n" ] } ], "source": [ "#We can separate off code into functions, that can take input and can give output. They serve as black boxes from the \n", "#perspective of the rest of our code\n", "\n", "#use the def keyword, and indent because this creates a new block\n", "def print_me( string ):\n", " print(string)\n", " \n", " #End with the \"return\" keyword\n", " return\n", "\n", "#Your functions can return data if you so choose\n", "def step(x):\n", " if (x < 0):\n", " return -1\n", " elif (x > 0):\n", " return 1\n", "\n", "#call functions by repeating their name, and putting your variable in the parenthesis. \n", "#Your variable need not be named the same thing, but it should be the right type!\n", "\n", "print(step(-1))\n", "print(step(1))\n", "\n", "#what happens for x = 0?\n", "print(step(0))\n", "\n", "#Python automatically adds in a \"return none\" statement if you are missing one. \n", "#If you see \"none\" make sure your program can work with that!\n", "\n", "\n", "#Fix the return none issue\n", "def step_v2(x):\n", " if (x < 0):\n", " return -1\n", " elif (x >= 0):\n", " return 1\n", " \n", "print(step_v2(0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numpy - \"The Fundamental Package for Scientific Computing with Python\"" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3]\n", "1\n", "[10 10 10]\n", "[-8 -6 -4]\n", "[ 9 16 21]\n", "[ 0.11111111 0.25 0.42857143]\n", "[[14 14 14]\n", " [32 32 32]\n", " [50 50 50]]\n", "-9.51619735393e-16\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VOW9x/HPjxCWsEMChCXsgoCsAXFfqErVFm2rYqui\ntaK1Lm2t1tba2msX761rbauXuoAbiiu41Baj1lZRCDvIKgYSQkhYEpaQ/Xf/yOClGEhCMnMyM9/3\n65XXzJw5M89vQvjm5DnPeR5zd0REJPo1C7oAERFpHAp0EZEYoUAXEYkRCnQRkRihQBcRiREKdBGR\nGKFAl5hlZrPM7IIwvG83M1ttZi0b+71FGkKBLjHJzEYAI4E5ocepZjbXzHLNzM2sbw2vaWFm282s\nrZnda2brzWyPma0xsysO7Ofu24D3gGkHvfYuM3vmMLV0MLNlZrbPzE6o4fnDtiVSHwp0iVXXAs/6\n/185VwW8DXzzCK85FVjq7nuBfcDXgA7AVOAhMzvxoH2fDbVxRGbWCpgLLAeuB14zs6GH7FZbWyJ1\nYrpSVCLJzG4FJrj7Nw/a9kfA3f3mRmxnI3CFu//7kO3NgXKgn7tnHfLc/UCOu99fw/vNBf7p7vcd\n9D67gWNDX3MBA0qBz9x9pJklAC8BBcB17l5lZt8C/hs43d2zD1P7f7QlUlc6QpdIewaYZGYd4Ytg\nnAI8VdPOZvaGmRUe5uuNw7ymDdAPWFvP2s4F3qzh/VoD44BVB7a5ewWwARjp7m8DvwNecPe27j4y\ntNsIYB5wrbtXhV73EtVdNTUegdfUlkhdNQ+6AIkv7r7VzD4ALgL+CkwCtrv7osPsf/5RNNMxdLun\nri8wswFAc3ev6ZfAo8Ay4O+HbN9zUFtf4u5LgCU1bM84QimHa0ukVjpClyDMBC4L3b8MeLqR378w\ndNuuHq85F/jboRvN7A/AcOBi/3L/ZLuD2mqwWtoSqZUCXYLwGjDCzIYD51N9grFGZvY3M9t7mK8v\nBTCAu+8DPgOOqUdN5wJvHdL2r4GvAme7++5DnmsODKT6aBqgQQF8pLZE6kpdLhJx7l5iZi8BzwEL\n3H3zEfb96lE28xZwGvDhgQ2hEScJoYctzaxVqJYkYDzVQxEP7Psz4NvAKe6+o4b3Hw9kufum0ONt\nwFlm1uxAf3ld1aEtkTrREboEZSZwHI3f3XLAdOA7ZmYHbdsP7A3dXxN6DHAmMN/dSw7a93dAGrDh\noL8Ifn7Q89+hur/7gBdDtzvMbHE9a62tLZE60bBFCYSZpVEdqt3D1cVgZs8Bs939tVr2+wuw0t3/\nUsf37Qr8Exh9yC8BkUAp0CXizKwZcD/Q3t2/2wTqmQa87u5bg65FpCEU6BJRoTHi24BNwKTDXVwj\nIvWnQBcRiRE6KSoiEiMiOmwxOTnZ+/btG8kmRUSi3qJFi7a7e0pt+0U00Pv27UtmZmYkmxQRiXpm\ntqn2vdTlIiISMxToIiIxQoEuIhIjFOgiIjFCgS4iEiPqNMrFzLKonsy/Eqhw93Qz6wy8APQFsqie\nw3lXeMoUEZHa1OcI/Qx3H+Xu6aHHtwMZ7j4IyAg9FhGRgDSky2Uy1VOgErq9oOHliIjElpLySu6a\nu4qd+8rC3lZdA92Bd8xsUWhmOoBuB81Olwd0q+mFZjbNzDLNLLOgoKCB5YqIRA935xevrWTm/CxW\nbikKe3t1vVL0ZHffEpoHep6ZrTn4SXd3M6txli93n071YgOkp6drJjARiRsvLMzmpUU53DRxEKce\nU+uV+w1WpyN0d98Sus0HXqV6+a1tZpYKELrND1eRIiLRZkVOEb+cu4pTBiVz88RBEWmz1kA3szZm\n1u7AfeBsYCUwF5ga2m0qMCdcRYqIRJPC4jK+/+wiktu04KEpo0loZrW/qBHUpculG/BqaGnG5sBz\n7v62mS0EZpvZ1VQvVnBx+MoUEYkOVVXOzc8vZdvuEmZfewKd27SIWNu1Brq7bwRG1rB9BzAxHEWJ\niESrhzLW8891BfzmguGMTusU0bZ1paiISCN5d802HspYzzfH9OI7x6dFvH0FuohII9i8o5gfPr+U\noant+e2Fwwl1U0eUAl1EpIH2l1Uy7elMzIxHLxtLq8SEQOqI6IpFIiKxxt25/ZXlrN22hyevHEda\nl6TAatERuohIA8z4KIs5S3O55axjOH1w10BrUaCLiBylTzbu4Ldvruasod24/vSBQZejQBcRORq5\nhfu5/tnFpHVO4r6LR9IsQhcPHYkCXUSknkrKK/n+M4sorahi+hXptG+VGHRJgE6KiojUi7tz52sr\nWZZTxP9ePpaBXdsGXdIXdIQuIlIPz3y8iRcX5XDTmQM5Z1j3oMv5Dwp0EZE6+mTjDn79+qecOaQr\nP/zKMUGX8yUKdBGROthy4CRolyQenDKqSZwEPZQCXUSkFvvLKrn26UzKKqr4axM6CXoonRQVETmC\nA1eCrsrdzWNXpDMgpemcBD2UjtBFRI5g+gcbmbM0l5+cPZiJx9a4dHKToUAXETmM99bmc8/bazhv\nRCrXnz4g6HJqpUAXEanBxoK93DRrCcd2b88fvjUikOlw60uBLiJyiKL95XxvZiaJCc2YfsVYklpE\nx+lGBbqIyEEqKqu4cdYSsncV8+hlY+nVKbjpcOsrOn7tiIhEyO//toYP1hVwzzeOY3y/zkGXUy86\nQhcRCZmdmc3j//6cK0/sy5TxkV8TtKEU6CIiwILPd3LHqys4ZVAyvzjv2KDLOSoKdBGJe9k7i7nu\nmUX07pTEny4dQ/OE6IzG6KxaRKSR7C2t4HszM6morOKxqel0SGqal/XXhU6Kikjcqqxybp61hA0F\ne5l51Xj6N+HL+utCR+giErd+/9ZqMtbkc9fXh3HyoOSgy2kwBbqIxKVZCzbzWGhEy+UT+gRdTqNQ\noItI3Plow3bufG0lpx2TErUjWmqiQBeRuPJZwV6ue2YR/ZLb8PC3R0ftiJaaxM4nERGpxc59ZXx3\nxkJaNG/GE1eOa7ILVRwtjXIRkbhQWlG96tDWohKenzaB3p2jZ46WuqrzEbqZJZjZEjN7I/S4s5nN\nM7P1odtO4StTROTouTu3v7yChVm7uO+ikYxJi824qk+Xy83A6oMe3w5kuPsgICP0WESkyXkoYz2v\nLtnCLWcdw9dG9gi6nLCpU6CbWS/gPOCxgzZPBmaG7s8ELmjc0kREGu6VxTk8+M56vjW2FzecOTDo\ncsKqrkfoDwK3AVUHbevm7ltD9/OAGhfbM7NpZpZpZpkFBQVHX6mISD19vHEHP315OSf078LvLjwu\nKlYdaohaA93Mzgfy3X3R4fZxdwf8MM9Nd/d0d09PSUk5+kpFROphQ/5ern16EWmdk3j0srG0aB77\ng/rqMsrlJODrZnYu0Apob2bPANvMLNXdt5pZKpAfzkJFROqqYE8pVz65gMQEY8ZV46N6wq36qPVX\nlrv/zN17uXtfYArwrrtfBswFpoZ2mwrMCVuVIiJ1tL+sku89lcn2vaU8PnVcTA5PPJyG/A1yD3CW\nma0HvhJ6LCISmMoq56bnl7A8p5A/ThnNyN4dgy4poup1YZG7vw+8H7q/A5jY+CWJiNSfu/Pr11cx\n79Nt3PW1oZw9rHvQJUVc7J8lEJG4MP2DjTw1fxPXnNKPK0/qF3Q5gVCgi0jUm7ssl9//bQ3njUjl\nZ1+NndkT60uBLiJRbf5nO/jJ7GWM79uZ+y4aSbNmsT3W/EgU6CIStdbk7Wba05n06ZLEX69Ip1Vi\nQtAlBUqBLiJRKbdwP1c+sZCkFgnM+G78jDU/EgW6iESdouJyrnxyAftKK5hx1Xh6dmwddElNguZD\nF5GoUlJeyfeeWkjW9mJmfHccx6a2D7qkJkOBLiJRo6KyihtnLSFz0y4evnQ0Jw5IDrqkJkVdLiIS\nFdydO+dUXzj0q/OHcv6I2J3X/Ggp0EUkKjwwbx2zFmzm+tMHxO2FQ7VRoItIkzfzoyz++O4GLk7v\nxa3nDA66nCZLgS4iTdoby3O56/VVnDW0W1wsUtEQCnQRabL+tb6AH72wlPQ+nXj40tE0T1BkHYm+\nOyLSJC3ZvItrn17EgJS2PDZ1XNxfBVoXCnQRaXLWbdvDVTMWktKuJU9dPZ4OrXUVaF0o0EWkScne\nWcwVjy8gMaEZT3/3eLq2axV0SVFDgS4iTUb+nhIue/wT9pdX8vTV40nrEj/LxzUGBbqINAlFxeVc\n8fgC8neX8uRV4xjSXZf015cCXUQCt6+0gqtmLGBjwT6mXzGWMWmdgi4pKinQRSRQJeWVTHs6k6XZ\nhfzx0lGcMigl6JKilibnEpHAlIcm2/pwww7uu2gkk4anBl1SVNMRuogEoqrKufXFZcz7dBv/NXkY\n3xzbK+iSop4CXUQizt2547WVvLY0l1vPGcwVJ/QNuqSYoEAXkYhyd+5+YzWzFmzmhjMG8oMzBgZd\nUsxQoItIRN33j3U88eHnXHVSX245+5igy4kpCnQRiZiHM9bzp/c2cOn43vzy/KGaObGRKdBFJCKm\nf/AZ981bxzdG9+Q3F2ga3HBQoItI2M38KIvfvbWG80ak8j/fGkFCM4V5OCjQRSSsnvtkM7+aW71A\nxYOXjNKc5mGk76yIhM3szGx+/uoKzhicwp++PZpEhXlY1frdNbNWZrbAzJaZ2Soz+3Voe2czm2dm\n60O3mnxBRL7wyuIcfvryck4ZlMwjl42lZXMtUBFudfl1WQqc6e4jgVHAJDObANwOZLj7ICAj9FhE\nhDlLt/CTF5dxQv8u/PWKdK02FCG1BrpX2xt6mBj6cmAyMDO0fSZwQVgqFJGoMndZLj96YSnj+3Xm\nsakK80iqU4eWmSWY2VIgH5jn7p8A3dx9a2iXPKDbYV47zcwyzSyzoKCgUYoWkabp9WW5/PD5JYzr\n25knrhxHUgvN/xdJdQp0d69091FAL2C8mQ0/5Hmn+qi9ptdOd/d0d09PSdG0mCKx6vVlufzwhaWk\n9+3Mk1cpzINQr1PO7l4IvAdMAraZWSpA6Da/8csTkWgwZ+kWbn5+CWPTOvGkjswDU5dRLilm1jF0\nvzVwFrAGmAtMDe02FZgTriJFpOmas3QLPzroyLxNS4V5UOrynU8FZppZAtW/AGa7+xtmNh+YbWZX\nA5uAi8NYp4g0Qa8uyeGW2csY30995k1Brd99d18OjK5h+w5gYjiKEpGm78XMbG57eTkn9O/CY1PT\nFeZNgC7bEpF6m7VgM7e+tJyTBybz+FQdmTcV+lcQkXp5en4Wd85ZxemDU3j0srEaZ96EKNBFpM4e\n+9dGfvPmar5ybDf+/J3Rupy/iVGgi0id/Pm9Dfzh72s577hUHpwyShNtNUEKdBE5Infn/nnrePjd\nDVw4uid/+NYITYHbRCnQReSwDizo/MSHnzNlXG9+e+FxWpyiCVOgi0iNKqucO15dwfMLs7nqpL5a\nAzQKKNBF5EvKK6u4ZfYy5i7L5QdnDOAnZw9WmEcBBbqI/IeS8kpueG4x76zO57ZJg7n+9IFBlyR1\npEAXkS/sLa3gmpmZzN+4g7snD+PyE/oGXZLUgwJdRADYta+MK59cwMrc3dx/8Ui+MaZX0CVJPSnQ\nRYS8ohIuf/wTNu0s5tHLxnLW0BrXq5EmToEuEueytu/jssc/obC4nJlXjeeEAV2CLkmOkgJdJI6t\n3FLElU8uoMrhuWuOZ0SvjkGXJA2gQBeJU/M/28E1T2XSoXUiT109ngEpbYMuSRpIgS4Sh95emcdN\ns5bQp0sST109ntQOrYMuSRqBAl0kzjzz8SZ+OWclI3t35Imp4+jUpkXQJUkjUaCLxAl358F31vNQ\nxnrOHNKVP317tBamiDH61xSJAxWVVdw5ZxWzFmzmW2N78ftvHKfpb2OQAl0kxu0vq+TGWdWX8l9/\n+gBuPUfzssQqBbpIDNu5r4zvzljIspxCXcofBxToIjEqa/s+rnxyAVuLSnjkO2OZNLx70CVJmCnQ\nRWLQks27uHpmJu7Oc9ccz9g+nYMuSSJAgS4SY/6+Ko+bn19Ct/atmHHVePoltwm6JIkQBbpIjHB3\nnvgwi9+8+Skje3XksanpJLdtGXRZEkEKdJEYUFFZxd1vfMrM+ZuYNKw7D1wyitYtEoIuSyJMgS4S\n5faWVnDzrCVkrMln2qn9uX3SEJppIee4pEAXiWK5hfu5emYm67bt4e4LhnP5hD5BlyQBUqCLRKkV\nOUVcPXMh+8sqeeLKcZx2TErQJUnAFOgiUeitFVv58eyldGnTkqe/fzyDu7cLuiRpAhToIlHE3fnT\nuxu4b946xqR1ZPoVGski/6/W2XnMrLeZvWdmn5rZKjO7ObS9s5nNM7P1odtO4S9XJH6VlFdy8/NL\nuW/eOi4Y1YPnrpmgMJf/UJfp1iqAW9x9KDAB+IGZDQVuBzLcfRCQEXosImGQV1TCxf87n7nLcvnJ\n2cfwwCWjaJWoYYnyn2rtcnH3rcDW0P09ZrYa6AlMBk4P7TYTeB/4aViqFIljy7ILueapTPaWVjD9\n8rGcPUxzskjN6tWHbmZ9gdHAJ0C3UNgD5AHdDvOaacA0gLS0tKOtUyQuvbI4h9tfWUHXdi155eoT\nGdK9fdAlSRNW5xnuzawt8DLwQ3ffffBz7u6A1/Q6d5/u7ununp6SomFVInVRUVnFb9/8lB/PXsaY\ntI7MveFkhbnUqk5H6GaWSHWYP+vur4Q2bzOzVHffamapQH64ihSJJ4XFZdw4awn/Wr+dqSf04Rfn\nD9XqQlIntQa6VS9t8jiw2t3vP+ipucBU4J7Q7ZywVCgSR1Zv3c20pzPZVlTKf3/zOC4Zp25Kqbu6\nHKGfBFwOrDCzpaFtP6c6yGeb2dXAJuDi8JQoEh/mLsvlpy8tp33r5jx/7QTGpGkksNRPXUa5/Bs4\n3Ew/Exu3HJH4U15ZxT1/W8Pj//6c9D6d+MtlY+jarlXQZUkU0pWiIgEq2FPKDc8t5pPPdzL1hD7c\ncd5QWjRXf7kcHQW6SEAWbdrJD55dQuH+Mh64ZCQXju4VdEkS5RToIhHm7sz4KIvfvrmaHh1b8/L3\nT2RYjw5BlyUxQIEuEkF7Syu4/eXlvLF8K185thv3XTySDq0Tgy5LYoQCXSRC1uTt5vpnFpO1Yx+3\nTRrMdacO0MpC0qgU6CIR8GJmNnfOWUm7Vok8d80EJvTvEnRJEoMU6CJhVFxWwZ2vreLlxTmcOKAL\nD00ZTUo7TXkr4aFAFwmTtXl7+MFzi/msYC83TRzEzRMHkaAuFgkjBbpII3N3XliYzV2vr6Jty0Se\nufp4ThqYHHRZEgcU6CKNaHdJOT97ZQVvLt/KyQOTuf+SkbrqUyJGgS7SSBZv3sXNzy8ht7BEo1gk\nEAp0kQaqrHIeeX8DD7yznu7tWzH72hMY20cTa0nkKdBFGiC3cD8/nr2Ujzfu5Gsje/DbC4fTvpUu\nFJJgKNBFjtLry3K549UVVFY59140km+O6Un18gEiwVCgi9TT7pJy7pqzileWbGFU7448NGUUfbq0\nCbosEQW6SH18vHEHt8xextai/dw0cRA3njlQy8NJk6FAF6mD0opK7v/HOqb/ayN9Oifx4nUn6sSn\nNDkKdJFarNxSxI9nL2Xdtr18+/g07jj3WNq01H8daXr0UylyGOWVVTzy/mf8MWM9ndu04MmrxnHG\n4K5BlyVyWAp0kRqszdvDLS8uZeWW3Uwe1YNff30YHZNaBF2WyBEp0EUOUlFZxf9+sJEH31lH+1aJ\nPPKdMXz1uNSgyxKpEwW6SMjqrbu57aXlrNhSxHkjUvmvrw+jS1tNdSvRQ4Euca+sooo/v7eBP7+3\ngY5JifzlO2M4V0flEoUU6BLXFm/exe0vL2fdtr1cMKoHv/raMDq1UV+5RCcFusSlfaUV3PuPtcz4\nKIvu7Vvx+NR0Jh7bLeiyRBpEgS5xJ2P1Nn45ZxW5Rfu5fEIfbps0hLYaVy4xQD/FEje27S7h16+v\n4q0VeRzTrS0vXXcCY/t0DroskUajQJeYV1nlPD0/i3v/sY6yyipuPWcw15zSnxbNNQeLxBYFusS0\nZdmF/OK1lazYUsQpg5K5e/Jw+iZrZkSJTQp0iUmFxWX8z9/XMmvBZpLbtuThS0dz/ohUzVcuMa3W\nQDezJ4DzgXx3Hx7a1hl4AegLZAEXu/uu8JUpUjdVVc6Li7L577fXUrS/nKtO7MePzhpEO60iJHGg\nLp2IM4BJh2y7Hchw90FARuixSKCWZhdy4V8+5Kcvr6B/chtev+Fkfvm1oQpziRu1HqG7+wdm1veQ\nzZOB00P3ZwLvAz9txLpE6ix/Twl/eHstLy7KoWu7ljx4ySgmj+qh7hWJO0fbh97N3beG7ucBh70i\nw8ymAdMA0tLSjrI5kS8rrajkyQ+zeDhjPWWVVVx7an9unDhIY8olbjX4J9/d3cz8CM9PB6YDpKen\nH3Y/kbpyd/6+Ko/f/20Nm3YU85Vju3LHeUPpp9ErEueONtC3mVmqu281s1QgvzGLEjmcFTlF3P3m\npyz4fCfHdGvLU98dz6nHpARdlkiTcLSBPheYCtwTup3TaBWJ1CB7ZzH3/mMtc5bm0qVNC3574XAu\nSe9Ncy3QLPKFugxbnEX1CdBkM8sBfkV1kM82s6uBTcDF4SxS4ldhcRmPvP8ZT36UhQHXnz6A604f\nQHuNXBH5krqMcrn0ME9NbORaRL5QUl7JjI+y+Mt7G9hTWsGFo3vyk7MH06Nj66BLE2myNBxAmpTy\nyipeWpTDQ++sJ293CWcO6cqt5wzm2NT2QZcm0uQp0KVJqKpy3lixlQfmrePz7fsYk9aRB6eMYkL/\nLkGXJhI1FOgSqANDEB+Yt5612/YwpHs7Hp+azplDuurCIJF6UqBLINydd1bn8+A761iVu5v+KW14\n+NLRnHdcKs2aKchFjoYCXSLK3Zn36TYeyljPqtzd9OmSxL0XjeSCUT00BFGkgRToEhFVVc7fVubx\n8LvrWZO3R0EuEgYKdAmr8soq5izN5dF/fsaG/L30T2nDfReNZLKCXKTRKdAlLIrLKpi9MJu//utz\nthTuZ0j3djx86WjOPS6VBPWRi4SFAl0a1c59Zcz8KIun5mexq7icsX06cfcFwzhjsEatiISbAl0a\nxcaCvTzx4ee8tCiHkvIqvnJsN647rT/pfTsHXZpI3FCgy1Fzd+Z/toMnPswiY802EhOaceGonlxz\naj8Gdm0XdHkicUeBLvVWUl7JnKVbePLDLNbk7aFzmxbceOYgLp/Qh5R2LYMuTyRuKdClzrJ3FvPM\nx5t4ITObwuJyhnRvx/98awRfH9mDVokJQZcnEvcU6HJElVXO+2vzeebjTby/roBmZpwzrBuXT+jL\nhP6ddaJTpAlRoEuN8opKmJ2ZzQsLs9lSuJ+Udi254YyBfPv4NFI7aApbkaZIgS5fKK+s4r01+czO\nzObdNflUOZw4oAs/P/dYzh7WjURdCCTSpCnQhXXb9vDyohxeXryF7XtLSW7bkmtPG8CUcb3p00UL\nL4tECwV6nNqxt5TXl+Xy8uItrNhSRPNmxplDunJxem9OG5yio3GRKKRAjyPFZRXM+3Qbry3Zwgfr\nt1NZ5QxNbc+d5w9l8qgeJLfVkEORaKZAj3El5ZV8sK6AuctyyVidz/7ySlI7tOKaU/pzwegeDOmu\npd1EYoUCPQaVlFfyz3UFvLViKxmr89lbWkGnpES+MaYnXxvZg/F9O2sRCZEYpECPEUX7y3l/bT5v\nr8zjn+sKKC6rpGNSIucdl8q5I1I5cUAX9YuLxDgFehTL3llMxuptzFu9jU827qSiyklp15ILR/dk\n0vDuTOivEBeJJwr0KFJaUcmirF28v66Ad9fksyF/LwADu7ble6f056yhXRndu5O6U0TilAK9CXN3\nPivYx4cbtvPBugLmb9xBcVkliQnG8f26cOn4NM4c0pV+yRorLiIK9CYne2cx8zfu4OONO/howw7y\ndpcA0KdLEt8c04vTjklhwoAutG2pfzoR+U9KhQAdOAJfmLWTBZ9Xf20p3A9AlzYtmNC/CycPSubk\ngcn07pwUcLUi0tQp0CNod0k5K3KKWJpdyKJNu1i8eReFxeUAJLdtwfh+nbnmlH6cMCCZY7q11UyG\nIlIvCvQw2VNSzpq8PazIKWLFliKW5xSycfs+3KufH5DShnOGdmdsn06M7duJ/sltFOAi0iAK9Aaq\nqKxi885i1ubtYU3eHtbm7WF13m427Sj+Yp9u7VtyXM8OTB7Vk1G9OzKyV0c6JCUGWLWIxCIFeh24\nOzv3lbFpZzFZ2/fx+fZ9bCzYx4b8vXy+fR9llVUAmEGfzkkM69Gei8b2YmiP9gzv0YGu7VsF/AlE\nJB40KNDNbBLwEJAAPObu9zRKVRFWUVnF9r1lbC3aT15RCblFJWzZtZ+cXcXk7NpP9s5i9pRWfLF/\nQjOjV6fWDExpy+lDUhiY0pbB3dsxqGs7WrfQUmwiEoyjDnQzSwD+DJwF5AALzWyuu3/aWMXVh7tT\nVlnF/rJKissq2Vdawe6SCvaUlLO7pIKi4jIKi8vZVVzOzn2l7NhXxva9ZRTsKWHHvrIv+rYPSGqR\nQM+OrenZqTXj+nYirUsb+nROol9KG3p3SqJFc12BKSJNS0OO0McDG9x9I4CZPQ9MBho90P+YsZ65\ny3Kpcscdqtwpr6iivMopr6yitLyK0opKqrz292rTIoHObVvQpU1LenRoxajeHUhp14qu7VqS2qEV\nqR1ak9qhFR2TEnWSUkSiSkMCvSeQfdDjHOD4Q3cys2nANIC0tLSjaqhru5YM7tYOMzAzmhkkJjQj\nMcFITGhGy+bNaJWYQMvmzUhq0Zw2LRNIatGcdq0OfCXSMSmRDq0TadlcXSIiEpvCflLU3acD0wHS\n09PrcAz9ZVPGpzFl/NH9MhARiRcN6QjeAvQ+6HGv0DYREQlAQwJ9ITDIzPqZWQtgCjC3ccoSEZH6\nOuouF3evMLMbgL9TPWzxCXdf1WiViYhIvTSoD93d3wLeaqRaRESkATSYWkQkRijQRURihAJdRCRG\nKNBFRGKE+aGTmISzMbMCYNNRvjwZ2N6I5UQDfeb4oM8cHxrymfu4e0ptO0U00BvCzDLdPT3oOiJJ\nnzk+6DM3XBCeAAAC+0lEQVTHh0h8ZnW5iIjECAW6iEiMiKZAnx50AQHQZ44P+szxIeyfOWr60EVE\n5Mii6QhdRESOQIEuIhIjoiLQzWySma01sw1mdnvQ9YSbmfU2s/fM7FMzW2VmNwddUySYWYKZLTGz\nN4KuJRLMrKOZvWRma8xstZmdEHRN4WZmPwr9TK80s1lm1iromhqbmT1hZvlmtvKgbZ3NbJ6ZrQ/d\ndgpH200+0A9ajPqrwFDgUjMbGmxVYVcB3OLuQ4EJwA/i4DMD3AysDrqICHoIeNvdhwAjifHPbmY9\ngZuAdHcfTvW021OCrSosZgCTDtl2O5Dh7oOAjNDjRtfkA52DFqN29zLgwGLUMcvdt7r74tD9PVT/\nR+8ZbFXhZWa9gPOAx4KuJRLMrANwKvA4gLuXuXthsFVFRHOgtZk1B5KA3IDraXTu/gGw85DNk4GZ\nofszgQvC0XY0BHpNi1HHdLgdzMz6AqOBT4KtJOweBG4DqoIuJEL6AQXAk6FupsfMrE3QRYWTu28B\n7gU2A1uBInf/R7BVRUw3d98aup8HdAtHI9EQ6HHLzNoCLwM/dPfdQdcTLmZ2PpDv7ouCriWCmgNj\ngEfcfTSwjzD9Gd5UhPqNJ1P9y6wH0MbMLgu2qsjz6rHiYRkvHg2BHpeLUZtZItVh/qy7vxJ0PWF2\nEvB1M8uiukvtTDN7JtiSwi4HyHH3A395vUR1wMeyrwCfu3uBu5cDrwAnBlxTpGwzs1SA0G1+OBqJ\nhkCPu8Wozcyo7ltd7e73B11PuLn7z9y9l7v3pfrf9113j+kjN3fPA7LNbHBo00Tg0wBLioTNwAQz\nSwr9jE8kxk8EH2QuMDV0fyowJxyNNGhN0UiI08WoTwIuB1aY2dLQtp+H1nCV2HEj8GzoQGUjcFXA\n9YSVu39iZi8Bi6keybWEGJwCwMxmAacDyWaWA/wKuAeYbWZXUz2F+MVhaVuX/ouIxIZo6HIREZE6\nUKCLiMQIBbqISIxQoIuIxAgFuohIjFCgi4jECAW6iEiM+D+ILGNrKIThXQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "#Here, we grab all of the functions and tools from the numpy package and store them in a local variable called np.\n", "#You can call that variable whatever you like, but 'np' is standard.\n", "\n", "#numpy has arrays, which function similarly to python lists. \n", "a = np.array([1,2,3])\n", "b = np.array([9,8,7])\n", "#Be careful with syntax. The parentheses and brackets are both required!\n", "print(a)\n", "\n", "#Access elements from them just like you would a regular list\n", "print(a[0])\n", "\n", "#Element-wise operations are a breeze!\n", "c = a + b\n", "d = a - b\n", "e = a * b\n", "f = a / b\n", "\n", "print(c)\n", "print(d)\n", "print(e)\n", "print(f)\n", "#This is different from MATLAB where you add a dot to get element wise operators.\n", "\n", "#What about multi-dimensional arrays? Matrices!\n", "\n", "#You just nest lists within lists! \n", "A = np.array( [[1,2,3], [4,5,6], [7,8,9]] )\n", "B = np.array( [[1,1,1], [2,2,2], [3,3,3]] )\n", "\n", "#Then matrix multlication\n", "C = np.matmul(A,B)\n", " \n", "print(C)\n", "\n", "#Or determinants:\n", "print(np.linalg.det(A))\n", "\n", "\n", "#Now, let's use numpy for something essential for you: Numeric Integration\n", "\n", "#Define the function you want to integrate....\n", "#dy/dt = t:\n", "def deriv(y,t):\n", " return t\n", "#Note this doesn't use y in the return. That is okay, but we need to include it just to satisfy the function we will use.\n", "\n", "#Set your initial or boundary condition\n", "IC = 0\n", "\n", "#Give the number of points to evaluate the integration\n", "start_time = 0\n", "end_time = 10\n", "num_times = 101\n", "times = np.linspace(start_time, end_time, num_times)\n", "\n", "from scipy.integrate import odeint\n", "integrated_func = odeint(deriv,IC,times)\n", "\n", "#Can we plot the result? You betcha. Just import a new package\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from ipywidgets import interact\n", "\n", "plt.plot(times, integrated_func)\n", "plt.title(\"y = (1/2)t^2\")\n", "#Very similar to MATLAB!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Additional Resources\n", "* If you still feel VERY lost: [Code Academy](https://www.codecademy.com/learn/learn-python)\n", "\n", "* If you want a good reference site: [Official Python Reference](https://docs.python.org/3/reference/)\n", "\n", "* If you want to learn python robustly: [Learn Python the Hard Way](https://learnpythonthehardway.org/book/)\n", "\n", "* Feel free to contact me at: **jgerace (at) nd (dot) edu**\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Python Basics](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/01.02-Python-Basics.ipynb) | [Contents](toc.ipynb) | [Python Numeric Integration Revisited](http://nbviewer.jupyter.org/github/jckantor/CBE30338/blob/master/notebooks/01.04-Python-Numeric-Integration-Revisited.ipynb) >

\"Open

\"Download\"" ] } ], "metadata": { "anaconda-cloud": {}, "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": 2 }