{ "metadata": { "name": "", "signature": "sha256:437ff553e16c427aa371f5c52fda93906589a1a37288c616087493dc6dbb1491" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction\n", "\n", "In this section we learn to do the following:\n", "\n", "* Import SymPy and set up pretty printing\n", "* Use mathematical operations like `sqrt` and `sin`\n", "* Make SymPy Symbols\n", "* Take derivatives of expressions\n", "* Simplify expressions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preamble" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just like NumPy and Pandas replace functions like `sin`, `cos`, `exp`, and `log` to powerful numeric implementations, SymPy replaces `sin`, `cos`, `exp` and `log` with powerful mathematical implementations." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sympy import *\n", "init_printing() # Set up fancy printing" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "import math\n", "math.sqrt(2)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$1.41421356237$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAASCAYAAACTkNaDAAAABHNCSVQICAgIfAhkiAAABIFJREFU\naIHt2W/MVnMYB/DPUz2eJLRKNWOyJLygWtJE879lbawxGiu8sYT8mzEiMizGNEQzHjEk/15oCy9q\nelF4gc2fIWv5F7IVKpUlL67fXec5z7mf+9z3c+eN57udnd3X7zrf67rO+Z3r9z2/mx78r9FSxd4P\na3FiN7hvQSseaFKManzjcRsOxBH4EHfhxwbjTsDV+Ctx9sP9+DTn9xXmYyW2YVzK4zp8mfM9FvMS\n5850noc/G6ijTH5T8FSyVWL+kxn/CE9Uqd/JyWFPNYcSOErclHlNilGNbyzexYD0uz/ex68Y3kDc\nMXgbfTO2RfgDo3O+e3LHLswu4DwB3+HU9HsY1udqKVtH2fxuLsgve0wpyNPxWI528YZ0ZwIsTtfP\na1KManzLcUzONib5vtJA3EfT2CUZ29RkW5jz3ZDyehMLUow8+ohOcUPGdiQ2YU4DdZTNb1GK04pe\nGftEPF6QZye0a3wCTMOlih9YIzG64tsq3q4hOftm/NZA3Bn4HedmbJXYD+Z8V1VPeS+uEp1hQA2/\nsnWUza/oIffHCrFk7EWvAsfuoD/O13HW7k++9RiKg3L2nWJ9rBdLcCjey9jGYjdeboBvOtZhSw2/\nsnWUze/aghgP4W5szxr71EisXtyuuujbH3wTcDB+ztgOFzdzVRPiH42ZuEZnEdiGuRiEvzFCiLiv\n03gLThNibhLOExN6OO7Bx02oo6v8spiI3vggP9DMCTBatLJv/0O+benI4nqheO/oRuypOAUX4DE8\nU+BzmFhOvk+/L8dqnCQe5CAh1oYIIXhn8jtDCLwJ+LzBOsrkl8VCXFTDpwPa1acBeuF5HJCxdUcD\nNMJHCKmtuK/BuHn0Ee12LQYX5JhFb9FeK2JsaIqzQ+fl6Aeh5quhTB218qvgbHxRg6cT2tU3AWbh\nzJytOxOgEb420W4f6cKnVtwiTEr+r5Xw3ZAOQoHvwWcFfmvF+t5WMFa2jrL5vY5nq13cDBE4TLS4\nlU3gapSvBc8JlXtTN2Ifp/MG0SfpPE2s4UQLX11wfW/x5hO6YJNQ8nnsFN1tYM5eq46y+VXQisnY\nWMCF5miAc1Jib+UCE58oo4V6fWM/8s0Xu2/zM7YZya8sDhHCrBWj7NMeu9O5RTxg4ht9XQHHYPs6\nAPGmjyzwaxOTYFPO3lUd9eRXwXjxZVHtk7gq2nXdJkfq+jNruObtA9TiuxL3FtgX1xm3r3hrv9Hx\nzRyX/LMKepkQeVlUNm7mZmzThS7I3qsW8Vn4au76WnXUk18FM9PYrIIxVO8Ala3GfnLfjWLNWSXE\nx+Qq17fmzvXGKMt3lvi+XYEXM/Y+qk+uanF3JK6NOrbtOUKQZW/iAjwt3s7t4qHeiDVprIKlQs3P\nxsPJdrF4kLfWWUc9+VVQ2VjaVTBW6PyOEC2VPeNNYi2+LOM3Cr/gyQKOQ5L/T/Yp4DW4sM4YZfk2\nZ3jyR7aN1hP3CrGp8oKY5EvFnzl5nC46wRKxXM3XcY++goGi6yzDS4l7RM6nbB315Efcpy2iS/Sg\nBz3oQQ96kMW/xkOALTogtx0AAAAASUVORK5CYII=\n", "prompt_number": 2, "text": [ "1.41421356237" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "sqrt(2) # This `sqrt` comes from SymPy" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\sqrt{2}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAbCAYAAAAZMl2nAAAABHNCSVQICAgIfAhkiAAAAZdJREFU\nSInt1j9IVWEYx/GPJRh5lQiUSJAEBzdRoaEmm+7k1hQETkJLS2MO/hkCyUGQsD9LVAiBQ5D9G6LG\nRp0Cp4iIEi74JxIqHV4TPVzPvee8Z7xfOMN5nvP8nh/Ped9zXhocpakgnd2CdKJZxqkYgRMFmCjj\nA34XoBXFC7THisRO5DJWsBFrJJbn6ChCKGYi/fiGn0UYieExulPyF7GEV1jFI3QVbaIXD1Pyg3iL\nM/v3JXzED1wo0sgC+lLyLwWzhxkQPnyLWRq1peS68KxG/Ra+oDMRr2C9HgOn8RTzKc/cxVANnVXs\noCcR/47tWiaacRtT2FT9I3VWWIC1aMW5ROy88Gre11F/0OwXblbJTWC4XqEEd/AXl7IUPcBnR//O\nJWER5qFXWDfTWQv7hTGWD8VuYSSHiRZ8wmyOWoR9/38CLXgj+/mlSdhhk3lNwFX8E8Y6hms5NKYx\nnohdzyrSjK+YwzuczFg/qvok7h/X7Dj+4J6wnW8IK75ermAGr/Ek0S/XsbIDa7IfAyv7DatdU3mM\nNGiwB8TFSHRLCRDNAAAAAElFTkSuQmCC\n", "prompt_number": 3, "text": [ " ___\n", "\u2572\u2571 2 " ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "cos(0)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$1$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAASCAYAAACNdSR1AAAABHNCSVQICAgIfAhkiAAAAF5JREFU\nKJFjYKAC4GJgYLhEjEJTBgaG0wwMDP/RJViQ2JoMDAw9DAwMrxkYGP6S4owF2ExmIsWEUcVUV8wB\npblwaRRjYGDYycDAcIUBEnv/GSBRv5+BgSGaFBfQGAAA/84M5lOscPUAAAAASUVORK5CYII=\n", "prompt_number": 4, "text": [ "1" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "Use the function `acos` on `-1` to find when cosine equals `-1`. Try this same function with the math library. Do you get the same result?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Call acos on -1 to find where on the circle the x coordinate equals -1\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "# Call `math.acos` on -1 to find the same result using the builtin math module. \n", "# Is the result the same? \n", "# What do you think `numpy.acos` give you?\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symbols\n", "\n", "Just like the NumPy `ndarray` or the Pandas `DataFrame`, SymPy has the `Symbol`, which represents a mathematical variable.\n", "\n", "We create symbols using the function `symbols`. Operations on these symbols don't do numeric work like with NumPy or Pandas, instead they build up mathematical expressions." ] }, { "cell_type": "code", "collapsed": false, "input": [ "x, y, z = symbols('x,y,z')\n", "alpha, beta, gamma = symbols('alpha,beta,gamma')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": true, "input": [ "x + 1" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$x + 1$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAACsAAAAUCAYAAAAUccS4AAAABHNCSVQICAgIfAhkiAAAAUtJREFU\nSInt1c8qRVEUx/EPGfgzMTIR+ZMkoYi8gImHkFAyMCMTZWQiDJUyuJIX8AKSQgklmUnKzEAM5D+D\nfeXQVcflXIrv5Jy99zpr/c7aa+/FP1+iGPs/LSIO7djGU6bFggQDN+MQ9zFsGzCNMzwkqOlDUqjK\n8ruMmc3PXkvueV8GbegRtqIKAxhEKcoxgaMc6ntDVGwN+jCMR2E7ttCLPKxjDzM5VRghKnYEY4JQ\nKME5NlCBWeEHfgXV78anmPyCv5RvPmDRzB5H3uuFGl2N4XwRLRnmK9GB2wxr/diJ4TsWQ7gRuskL\ntZ/0kZLQ1VWEKTSlx11Cy7uK2I1mEfhbeSmDbkHMLu5Qh4uI3biw3bmgMP0s9posvIpdE9LfhlZ0\nYg7zQs2tYDNBgWVYEs5JY3ruBAdYwHKCsZF9zX5Iku32EtcJ+v/nb/IMFVU7EHvbWc8AAAAASUVO\nRK5CYII=\n", "prompt_number": 8, "text": [ "x + 1" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "log(alpha ** beta) + gamma" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\gamma + \\log{\\left (\\alpha^{\\beta} \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAAbCAYAAAAahVOPAAAABHNCSVQICAgIfAhkiAAABGVJREFU\naIHt2GmIVmUUwPGfS+NS0YTmVolbpeVSGkqiVgRmhBlFREq2SMuHFie/tEAUlQRWoEFl67QvEJRB\nJkYQFLSCloF+EcXJcqkEM22dPpx78frOnXefqYH3Dy+X59znnue8zz3bc2nQoJtpxtI66ZqHq3El\nVqApZ85dOKpO6/VomvA6BtVB10U4OTNeg7Ny5k3C6kJh7zoY0NNYinfwU416xmA3diTj08UL3ZQz\n91tsx8Ia1+zRHI8N6FsHXVck1zvxGPZiVJH5zdiYXfu/9vxL8Sk2Y1k3rHetSA1/1VHn9yKKtuPW\nIvP2iQiYX8e1a2YUDuC+blhrPS6sg55hmF4guwVvlXjuZryUDrrK8ycrP7S3YU8X2ZGlCbPxZR10\nzcJXBbKp+LDEc5/jnHTQVZt/B07qIt3VMhS98HMddM3CyMx4svi/z5Z4bg/GStrRehSensIQkXfr\nwWe4DPuFAw/CJfinxHO/CAdoxu7s5vcSeaslUfaaKCBpceorDhEt9bG/LGYkNuxK1m/GcmwpmHe9\nOOzsEB64HuNxNt7AU+ij9OaMF1F7AANxHG4TLSWxR2OwNdFbKZ0W+lWicj+Dl0Xr9Ejm/kLMKXOR\nVsXbrkK26Vhw54tNPiEjm5DMzR5kbsKvYqPgFPwtNn6e8EgYjUNFbFiANkzJyB4Qub1PMl6JRarP\nGCMS245I93PwJo7NyIaIFjD98x1OaEVoVdvmHyNeft4ngJWiV0/5RhSyLLuEA2UZIP740Tk6J+Eg\nFhfIJ6Adc3Ei7hVRVi0TsTMdpG9gpuiB92cm7sb9wiPOw0c1LFopF4vUtznn3hbhndOS8V70K5jT\nT0fvPIgv5B//V4hi+GqBvC25nokloqA+X9r8Tpma2EDGwIc7mbxW5NhxuCfn/ouODNOUkaIP/iPn\n3hJ8XcLIMck1L0f+mVzHJXoexAc4A9+JVNOER3OeXSui/JOMbLDw7CdFZGRJnXGKiM6damM23k0H\npXLXPgzHjzmGwTWdPNcq0si2Sq1L+CG5Dsm5l34Q25VcD4l0cIN4MU3Cw/Ki5hVxEFqekY0VhbSw\nb88ySThNLfQXdej2VFBO4ZiGu2tcuFLew284LefeNJEOUu+difdF7i/FVhEt80S0cLiT2Z8zf4Do\nkNYoXqzL4To8Lf5X2ayrYqFWlRXcNpE+sixK5MMzstEix5+fkV0lXtYFOFd4/TDhzXk0i83MNhfr\nRLeXZYZIRRtEs9FbfLOvhhF4W4Vd0mjRXVRKq/I2f4HwxHbRW38swjNltjhvPIHH8ZxIAVkGiw9b\n7QW/NvEC8xiLhzLjZrwgCuoK0WIvFi3mDJGSVosoq4ZVjmyZy2IpbqxisVaVeX61jBS5fa7DvXh/\nUbCX4Xec2g12dAlrdfS0clglQr+raZHpHnLYiMu7wY6601t0K53lzv8DE8Unhbx0MFcU2KHdalEF\nFCsAg0WRaO8mW6phkyiyLSI9ph+6BoqefLoo0A0aNGjQoMF/yr9ULdlTCdhRNAAAAABJRU5ErkJg\ngg==\n", "prompt_number": 9, "text": [ " \u239b \u03b2\u239e\n", "\u03b3 + log\u239d\u03b1 \u23a0" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "sin(x)**2 + cos(x)**2" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\sin^{2}{\\left (x \\right )} + \\cos^{2}{\\left (x \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAAAZCAYAAAD9ovZ9AAAABHNCSVQICAgIfAhkiAAABH1JREFU\naIHt2VuIVVUcx/GPppVlpZiVXchGQ0WUzExTypKKiO5QEYhZRlEkWBb0EF3sQncq6AZRYz3UU3Qz\niKCkxNJ8iAqioLQMw8y8RWVp9fBfG9ccz8zZZ+bMOE7nC4e911r/vdd//fb6r9uhSRP068G6pmI6\nDsEM3IMPe7D+Jr2AwXggS1+G33HUnnFnr2AqbsJdeA+n7VFvGsRE/INRKX0w/hUdosnu9NnA6Sd6\neDEVjRcdYdIe86h302sD53T8ipsb9L6X8WiD3tUX6bWBc0Vy5LkGvGseHtKzC9W9nV4VOKMxoIvv\nOE90BNgfI7v4vkYwUdfb1Z30ucCZKRp1RPpdhFP2qEdBq97RIavRY4FTJhL2Sw4Mx2/4rBP1tOBt\nsRrOOaQT7/q/MBOHY4kInGlYjzXdUVneES4WEbpJ9L5hKf9ZMT+djcWYm9kvwgg8gU9wBg7EFCzE\nx8n2OxxU0qf+OAvvZnmTMQc7Rae8BtdhiNhS3Zna8gd+KFlPZzkBd2Az/kz+Po9Vmc1UzBcfbkDy\n8358ndm0p/eN6gucSr3KaPUtxqii1zi8X1HBbDFsFqyqSEvObxO9dl6W/6TO99xLtRWgBU+JBks+\nfCNOKWeIbdbCVJb7UJZW5Yfc6dgqdlEFL+H7LH2++ODDs7xxQo9JWbqW3mXJ9apHKzK9igcm4jBt\no/Z1MRUU5PcFG9OvBS9k+V/iWG3FKMuIirpuwW2iEcSIswnLRW9+zC4BV4utVnfQDy/iIyzN8jdi\nRbofnGyewYbM5iu8kcoop3dZcr3q0Yoqeh2Jn7FFbFXm2/0jLlW9x67BKxV5c8V2c2TtdrRhEBZU\n5B1Xkf4R97Xz/DBcVWedrcr5OU20aVEHNpcnm3OqlN2QyiYrp3cZKvWqRysyvYoRYZ2Y114Vw96T\nWCvOD8qwvaRdLYbaPSpWZ/djxDz3QTvPbxELq2osFgvdyt8FeKedssnZ8yPT9ccO/G9J1x1Vyv5O\n19G6rndBpV71aEWmV7FYnCKGuOtS+hjcKw6QXtO4D12LzXZfIOXMwl9iqCsYJRY/xFC7rZ1nr2wn\nv1X8sbOmhm/r0nVoBzY/pethVcqKxeB6jdO7I71qaUWmVzEijNe2N67F1WKuGVLSqUbwO/bJ0oPE\nYcqElD4Lnyc7wv9bM/sJ+LSbfFsuRoNZVcouEXP1W8m3MVVsJqfnl2mc3rle9WpFplf/LHOBmLsK\njhYrzvUpPVD1c4dq+QMrrvWwQWyn4Fzh/HiMxfHaRsvtYsgvGIuVnaizDDvEx5qJC7P84UL0n0SU\nXytW4yMym+PE1nqOXdNGLb3LUuhVr1ZkehXHlrPFKv9QsbcseuaDYt57BCeJeW6Z2CKdKfbTJ6b8\nlWIr80QqGyqG2xd1vMCqZF8h7JLkz8P4RSy07sbTYv/+F94U/9UTUThQ7FjqoVW5qaHg5GS/WXz8\n7UKnLZnNqbg+2ezEAXgcX6TyjvReW6f/hV4rlNeKzuvVZ2nVe4+Ye4z+tU36PFtF1DRp0qRJkyZN\nmjSp4D+SOyJ3naugoAAAAABJRU5ErkJggg==\n", "prompt_number": 10, "text": [ " 2 2 \n", "sin (x) + cos (x)" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "Use `symbols` to create two variables, `mu` and `sigma`. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "?, ? = symbols('?')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Object `` not found.\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "Use `exp`, `sqrt`, and Python's arithmetic operators like `+, -, *, **` to create the standard bell curve with SymPy objects\n", "\n", "$$ e^{\\frac{(x - \\mu)^2}{ \\sigma^2}} $$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "exp(?)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "pyerr", "traceback": [ "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m exp(?)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Derivatives\n", "\n", "One of the most commonly requested operations in SymPy is the derivative. To take the derivative of an expression use the `.diff` method" ] }, { "cell_type": "code", "collapsed": false, "input": [ "(x**2).diff(x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$2 x$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAABcAAAASCAYAAACw50UTAAAABHNCSVQICAgIfAhkiAAAAVpJREFU\nOI3t1L1Ll1EUB/CPIoSVECgJSpBvODlYEKJOUYt/hCAI4ixuhvgGUdFWW6AgEgQOghS1RFsODbkJ\nEoSDiCCCiCa+DPc+eLlkP1Fx6izPOd/7Pd9zz3MOl2u0R5jHRyzjHeqvQvgBPuNOjG/jGzZw/7Li\ni2jOsHYc4/1lxXfwG3czfAubFxEsT/xfqMWtjLOPyouIVyR+B6qwnmB1seDXLO8henEozKMfA8K8\n6jGK1VLFn0eBzgRrxBunXU9jJXK6cIShUsLNwhwmM/yt0GFhH/A9+vfwCtX/Er6BJbz+y1lDFq9h\nqtRNCyvDHMbPwW0VVvXJecUn8SzDes/gDgrbdDPBmgqnPCP3CQOZyPDu+K3EC7TF+Cl+YjfRGy6S\n0lV8jJf4hNkErxBah56Y/AMHaMF2wh3BTBGUJQdbTt+V3IpfVRMvsBkLjgnbs4c/WMCXMzT+W7AT\nqVU9myY95twAAAAASUVORK5CYII=\n", "prompt_number": 13, "text": [ "2\u22c5x" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "sin(x).diff(x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\cos{\\left (x \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAANCAYAAADWgVyvAAAABHNCSVQICAgIfAhkiAAAAjdJREFU\nSInt1Ftoz2EYB/DP5jhtNTE5xA4U0oqWc4rVyo2ExKLllEVIye0cihrKIYeUC3HjcKd2IcWNVg4X\nwg03DtPWUAwxh5mL9/23t5//yq3ac/M+z/t9n+f9vs/zvA//qRRk7Jlowkd0oxAX8DDic7ETnRiM\nUhzGsyTGCszHBwzHqLi/I66FqMPNxKcGDehBBbagMcafgH3xvm94nX3EAnzC4mTvEl5FfVkkWJbg\n0/ESsxL7dibuelxM7NUoTuwqnIkPEs8+j3wW4jf2RGxzlnRBJNWS2T+Oa/Gi99iddcRJPIr6GjxF\nSYIX43Ri78r4n82cv457UZ+IY/qqVosZqfM89OJgHmI5Qr1YmgfbHrEajMdbdOGy0FZphYr8/fjK\njP0Gh/rhMQob6StPReKUT6ri+isP9jOuU9Au/IMrQsudQhvq45mR+JLxf5HoU4WevtMPjy6MTYm3\nJ4HzSUdcx+TBcmXsxGyh7RqFMk/CVZzHMOHTF+eJkZNa/EBrsjc50UvwOSXeKmS7Nk+wlbiFr0JG\nslITfe8K/VefYG3YJHyw0hhjUIIX4Qiqo12Hx/Fcjt/e5Hw1HmQJ1AkjcHmyV4ZzUV8XCY5L8Erh\n0y6J9ga8E3o9J+W4n9gNwpiEVcL/WItpeCIkICdNwmjNyVZxhGfn+BzsF0rage9oFnoLFmFbxHsw\nAifihYTRV47RwszNZbpZyD4MFZLUEs8djY/vxQFhynQLLXNDqDah2kOEqTUgA/Kv8gckw3USQik8\njwAAAABJRU5ErkJggg==\n", "prompt_number": 14, "text": [ "cos(x)" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "(x**2 + x*y + y**2).diff(x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$2 x + y$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAADYAAAAWCAYAAACL6W/rAAAABHNCSVQICAgIfAhkiAAAAldJREFU\nWIXt1kuITmEYB/DfTHKfEmKayW2MKCHkzkZsbDQpC2pKlGRhITvXjAjZiBX5yK1IUszEwrCjSJSi\nGGQhlEhyibF4z5jX6cw4M81nlPlvvud2nvf/nPM8z/fyn2AmLqAeD3AUld3KqAswDVcxKNEH4iZe\nY3Q3ceoSXEZ1yjYVzThbxHMno1cR8/uIFxiWsr/D2yKeW1CEjiiN5CYMx4BUzBf06+qDi424BWaj\nDK8iW4VQbGPquemoxXfhba/BWmE+K7ENT4rAdzQ2ogqncDryrUcNFuVJtEcgPzeyVeGQ1q9dwOMk\nZh5+JIfnRUH+VjyM3tiA+ynfLTl3QbUwd3UZycsi/VySFEZgP4bkJEr+wuZjRSLX43zkG4BvWPen\nJH1wGwcyfGNS+kvsykGsLRTkK6w84VUpdFFN5FssbO+JLYasNVuCY2jA1gx/UySPTw66noPYcUzJ\nsI8ULgZfM3yrcSeRW2Z/udBJV6K4BcLmftgegTpsSdlq24hdJ2zN/pFtbHvJM1DQsXXfgIspW6Nw\nY/qF0lTAKmH4d6bs85PfftiLSYm+WBjiT1G+TR0g2RmMwqNI74NZwi3pF+JWXIh9whs5mYppTuQl\nAvG7wrCOw/sodrPQcsXEcwyO9D3oixtxUEkkv9N6T0yjpT2HCsW/FYrdIWzJz8KMXMK1DhItYDue\n5YyfgCO4J3TKHKGDBgvd9s+goPNXqlJhqZzIcnQ3PghfPA/O+P2PeanwpXZ3Nam/jTc4mMgVeIqV\nWYElWcZ/GMswQ1ho5UKRt9p9ogc96F78BNPZcBPkGPZHAAAAAElFTkSuQmCC\n", "prompt_number": 15, "text": [ "2\u22c5x + y" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "(x**2 + x*y + y**2).diff(y)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$x + 2 y$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAADYAAAAWCAYAAACL6W/rAAAABHNCSVQICAgIfAhkiAAAAlhJREFU\nWIXt1kuojVEUB/DflbwuJYTcvIkSQt7XRExMJGVAKVG6GRjIzDPkhkzkjsghryJJecTAY0aRKEVx\nkYG4JZI88hjs77DtznXPOc5xDe5/8n3rv9Ze39p7Pb5NB6qOaTiDi7iPg6hr14gqgMm4jN6Z3BM3\n8ArD2immVjEBnYu0PY9RCTcJ33GykkFVAjnFn/Z7PEf/hH+DlnI+3qmcRVVAMwagNuE/oXs5DtNS\nmYLl+Cqc9iqsFmq/DpvxuJwPtYEZ6IWXETdI2Oy1iBuGdRiBYzge6dZgEealzkdgv19ZzOERZmE2\nvmVOi0XO3zV+o3DAsyKuCV2wFvcS+5ta6ccm4dTyOJUZw2DsQd8SAsspf2OjhL7bHnH1WJq9X8Tp\nSFeLL2go5Gx4Ir/AjjIDo/yNdcUt7E34gZmuTsjkokg3X5ig4/JE3GPN0fuYzMHVIgI5jIkF+CHC\nT/dzAd1K3C7A1+AQLmFTosv33xIhmxci3Rxhej5oK9gGYSL1iLiRbS1KkFN6xrZjY8ItT+RLOJtw\n14Rby0/kB0V37ML4TJ4vNOeHyG59iUGWihXCgNqW8PWJPBQPI7krpgs3lZ/Il+ICIfA7QhOOxtvI\nboNQctXCXOwWsnE0ie97YvsMfSK5Ed1wPTaqyZ79MsctmaOtwpT8KPTIOVwpMdgctuBpEbZv/Lon\npkjLcywO4K5QUTOFSusjZLzqyKn+BbaTMFSOFFJUC++EjFcSJ/z+Y14oZGpnhb/zz/Ea+7L3QXiC\nZYUMawqR/zEWY6owVAYKm7z5xxUd6ED74gccwXATFU7b3AAAAABJRU5ErkJggg==\n", "prompt_number": 16, "text": [ "x + 2\u22c5y" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "In the last section you made a normal distribution" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mu, sigma = symbols('mu,sigma')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "bell = exp((x - mu)**2 / sigma**2)\n", "bell" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$e^{\\frac{1}{\\sigma^{2}} \\left(- \\mu + x\\right)^{2}}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAAgCAYAAAC8VE43AAAABHNCSVQICAgIfAhkiAAAAxxJREFU\naIHt2FuIlVUUwPHfjGM6xIxQg3YhKH2QIqILBYNdGAqEYKiQAsVsoCLoYimiREQD3cigoMtDQYHY\nQwbVSz30Jj6IEU76pC8ShkSiZCldjexh7dP5On3neM7smdMZ/P7w8a19WXsv9rf3Wmt/VHSdfrz2\nfxvRBfrxBDanJ4tF2Iip3IHmAOO4LMkf4wZiNafDT2K3ncy3q+dZhtVJPqS+iFnsnIlBepwFGEry\nF7iE6e+4Thns0jwzQaOtv+MUbhEb5Tu6s3Arpa/URR7P0B3EAw11izCGl2sVs71wi4VPODTL8zQy\nkqH7A37E9YW6tWLR5uOOjLEN4ikcFdG12VF8BsMZ8zyLBwvlDzHaht7kWdpXYAKvi0V5BJ9gaWrv\nx9YkrxFB8DhO4Oo25s/m7Uz9KVyX5AFh+FDz7v8w2aJtWP1j3IUvk7wNFxX6vdlqgoE2jMhhQUP5\nUfWvWsZX2JHkC4Rv3JfKN+KgcNRFlojd31eouxkLC+VTeDHJf2B7kkfxaZIb/dqfOC/1z+JMhw+8\nnzHfPfioUH4aLwn/1VeqUWeyzTn2ig9CBIAiL+DiZoqdBIe+Dh/4q4PxGxnDN0meh1XYJZLRM82U\n2mAcG3C58FdfC3snGvoNiyBRSu5RXSGO41V4q6T9l4yxx8TRXCeCzw5xBHOveSPiNjAugs+T+E0E\nnkZ+zZyrKevTu1kQWO/fDrddFuPwtCwKtmToEr7t+cwxzsqQ5j7lfPFnoVPuwwfTNWgGuB9XtOow\nEwnwvXijSdvP2KPz3OcafJZjVAaX4pi6fy2lLDpdK9KGEyJTHsFj/psGEMnvMuELNmUYO+eZwH6x\n6jU2i0SRyLBfxbd4B7d107heZRSnRaSscRM+F856JR5O9RvU859zkmI6MimO590i+ZyHAyJvOok7\n8Vzquxzvds3KHqTm4+YLP/WeOI5l3Coy6dP4Hrtn3boeprbjLhQ7rNXvn12zb87coZaOHBfHsewm\ncSUe6ppFc5CtYlcVU5TbxUV9YanGOUxxkQbwikhFjohrx5T4T5Vzqa6oqKioqKioaMHf1siB0YOG\ncaUAAAAASUVORK5CYII=\n", "prompt_number": 18, "text": [ " 2\n", " (-\u03bc + x) \n", " \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n", " 2 \n", " \u03c3 \n", "\u212f " ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take the derivative of this expression with respect to $x$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "?.diff(?)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Object `.diff` not found.\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "There are three symbols in that expression. We normally are interested in the derivative with repspect to `x`, but we could just as easily ask for the derivative with respect to `sigma`. Try this now" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Derivative of bell curve with respect to sigma\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "The second derivative of an expression is just the derivative of the derivative. Chain `.diff( )` calls to find the second and third derivatives of your expression." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Find the second and third derivative of `bell`\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Functions\n", "\n", "SymPy has a number of useful routines to manipulate expressions. The most commonly used function is `simplify`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "expr = sin(x)**2 + cos(x)**2\n", "expr" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\sin^{2}{\\left (x \\right )} + \\cos^{2}{\\left (x \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAAAZCAYAAAD9ovZ9AAAABHNCSVQICAgIfAhkiAAABH1JREFU\naIHt2VuIVVUcx/GPppVlpZiVXchGQ0WUzExTypKKiO5QEYhZRlEkWBb0EF3sQncq6AZRYz3UU3Qz\niKCkxNJ8iAqioLQMw8y8RWVp9fBfG9ccz8zZZ+bMOE7nC4e911r/vdd//fb6r9uhSRP068G6pmI6\nDsEM3IMPe7D+Jr2AwXggS1+G33HUnnFnr2AqbsJdeA+n7VFvGsRE/INRKX0w/hUdosnu9NnA6Sd6\neDEVjRcdYdIe86h302sD53T8ipsb9L6X8WiD3tUX6bWBc0Vy5LkGvGseHtKzC9W9nV4VOKMxoIvv\nOE90BNgfI7v4vkYwUdfb1Z30ucCZKRp1RPpdhFP2qEdBq97RIavRY4FTJhL2Sw4Mx2/4rBP1tOBt\nsRrOOaQT7/q/MBOHY4kInGlYjzXdUVneES4WEbpJ9L5hKf9ZMT+djcWYm9kvwgg8gU9wBg7EFCzE\nx8n2OxxU0qf+OAvvZnmTMQc7Rae8BtdhiNhS3Zna8gd+KFlPZzkBd2Az/kz+Po9Vmc1UzBcfbkDy\n8358ndm0p/eN6gucSr3KaPUtxqii1zi8X1HBbDFsFqyqSEvObxO9dl6W/6TO99xLtRWgBU+JBks+\nfCNOKWeIbdbCVJb7UJZW5Yfc6dgqdlEFL+H7LH2++ODDs7xxQo9JWbqW3mXJ9apHKzK9igcm4jBt\no/Z1MRUU5PcFG9OvBS9k+V/iWG3FKMuIirpuwW2iEcSIswnLRW9+zC4BV4utVnfQDy/iIyzN8jdi\nRbofnGyewYbM5iu8kcoop3dZcr3q0Yoqeh2Jn7FFbFXm2/0jLlW9x67BKxV5c8V2c2TtdrRhEBZU\n5B1Xkf4R97Xz/DBcVWedrcr5OU20aVEHNpcnm3OqlN2QyiYrp3cZKvWqRysyvYoRYZ2Y114Vw96T\nWCvOD8qwvaRdLYbaPSpWZ/djxDz3QTvPbxELq2osFgvdyt8FeKedssnZ8yPT9ccO/G9J1x1Vyv5O\n19G6rndBpV71aEWmV7FYnCKGuOtS+hjcKw6QXtO4D12LzXZfIOXMwl9iqCsYJRY/xFC7rZ1nr2wn\nv1X8sbOmhm/r0nVoBzY/pethVcqKxeB6jdO7I71qaUWmVzEijNe2N67F1WKuGVLSqUbwO/bJ0oPE\nYcqElD4Lnyc7wv9bM/sJ+LSbfFsuRoNZVcouEXP1W8m3MVVsJqfnl2mc3rle9WpFplf/LHOBmLsK\njhYrzvUpPVD1c4dq+QMrrvWwQWyn4Fzh/HiMxfHaRsvtYsgvGIuVnaizDDvEx5qJC7P84UL0n0SU\nXytW4yMym+PE1nqOXdNGLb3LUuhVr1ZkehXHlrPFKv9QsbcseuaDYt57BCeJeW6Z2CKdKfbTJ6b8\nlWIr80QqGyqG2xd1vMCqZF8h7JLkz8P4RSy07sbTYv/+F94U/9UTUThQ7FjqoVW5qaHg5GS/WXz8\n7UKnLZnNqbg+2ezEAXgcX6TyjvReW6f/hV4rlNeKzuvVZ2nVe4+Ye4z+tU36PFtF1DRp0qRJkyZN\nmjSp4D+SOyJ3naugoAAAAABJRU5ErkJggg==\n", "prompt_number": 22, "text": [ " 2 2 \n", "sin (x) + cos (x)" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "simplify(expr)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$1$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAASCAYAAACNdSR1AAAABHNCSVQICAgIfAhkiAAAAF5JREFU\nKJFjYKAC4GJgYLhEjEJTBgaG0wwMDP/RJViQ2JoMDAw9DAwMrxkYGP6S4owF2ExmIsWEUcVUV8wB\npblwaRRjYGDYycDAcIUBEnv/GSBRv5+BgSGaFBfQGAAA/84M5lOscPUAAAAASUVORK5CYII=\n", "prompt_number": 23, "text": [ "1" ] } ], "prompt_number": 23 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise\n", "\n", "In the last section you found the third derivative of the bell curve" ] }, { "cell_type": "code", "collapsed": false, "input": [ "bell.diff(x).diff(x).diff(x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\frac{1}{\\sigma^{4}} \\left(- 8 \\mu + 8 x\\right) e^{\\frac{1}{\\sigma^{2}} \\left(- \\mu + x\\right)^{2}} + \\frac{2}{\\sigma^{4}} \\left(- 2 \\mu + 2 x\\right) e^{\\frac{1}{\\sigma^{2}} \\left(- \\mu + x\\right)^{2}} + \\frac{1}{\\sigma^{6}} \\left(- 2 \\mu + 2 x\\right)^{3} e^{\\frac{1}{\\sigma^{2}} \\left(- \\mu + x\\right)^{2}}$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 24, "text": [ " 2 2 2\n", " (-\u03bc + x) (-\u03bc + x) (-\u03bc + x) \n", " \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n", " 2 2 2 \n", " \u03c3 \u03c3 3 \u03c3 \n", "(-8\u22c5\u03bc + 8\u22c5x)\u22c5\u212f 2\u22c5(-2\u22c5\u03bc + 2\u22c5x)\u22c5\u212f (-2\u22c5\u03bc + 2\u22c5x) \u22c5\u212f \n", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n", " 4 4 6 \n", " \u03c3 \u03c3 \u03c3 " ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "You might notice that this expression has lots of shared structure. We can factor out some terms to simplify this expression. \n", "\n", "Call `simplify` on this expression and observe the result." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Call simplify on the third derivative of the bell expression\n", "\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sympify\n", "\n", "The `sympify` function transforms Python objects (ints, floats, strings) into SymPy objects (Integers, Reals, Symbols). \n", "\n", "*note the difference between `sympify` and `simplify`. These are not the same function.*" ] }, { "cell_type": "code", "collapsed": false, "input": [ "sympify('r * cos(theta)^2')" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$r \\cos^{2}{\\left (\\theta \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAEMAAAAXCAYAAABQ1fKSAAAABHNCSVQICAgIfAhkiAAAA4pJREFU\nWIXt1n2o3mMYB/DPmWfbodkhtmPjHDMrIbLEYfN2SLZlyWSjTc38IXKiDkryLmyIjRIpYm1DVv5Y\n7A/CEmkkNKTkrR1j8pa3sc0f1/3bcz+/8zzNeew4q51vPf2e6+W+7+u+r1eGsQMtQ21AA3RhGtow\nHXfg9SG1aIgwBvdk9Fz8hoOHxpyhxbHYhsMTPRbbxaPscWgRaVKk8NHiMab+Hwfv7nga36J3J3oj\nRSp9XuJPwg34UUTbpdgHW/DDLrRz0HEZlti50yq4RVwyxyS8iwmJ7sUyjMDddfR3W5wrHgNaxcUa\noVfUmhyj8A4WZbwL8WX6PwH35QtGNGnoYON0tGMNDsIMVe+Wsa9ow++X+FenNcszXhs6REr1ic7V\nucusHgRMxi+iaOa/sQ305+DaEq8Vm8V8kuP+tNfoRM/FdYWwkilegG7xcheLkDoKh2Ap3k56x+Fm\nUZD+ENH1ONYneRd6sCntvx/uwifZWefjZFHAWnFA4l+Fz4S3/y3OwPMl3kVpz1Ul/nTx0H8mej3m\n495cabQoVPCpCM9T04Zf4OEkm4afkwEFnko6MFtcelwmP1JU+KkZ/UrJyAV4UnNYLdpvjhfwO17K\nfi9jK9Zlem34oLzhOcJbo4S370z8DrwnLt8iLrqmtPYBPCvybzOuqWPw0rQPzMOHar0/RvXBB4q1\nmJLRe4moXVHSmyVS5PaMN1JtxIKTxCudlhaUK3OhU94sx7wkn1FHdmWSHY+JYm74ScwQPWojaaBY\njhMyujOd1VPSeyjxj8l442WRUnSTt5JxZ+J7dUJHtbV93cCoyen7dx3ZX+k7BRtFXVklIm4ZvhJ1\nqhl8LOpagfb03ZDxKqJYrlN7tw58VBDl1tqN18QLlrExffdvYFRf+o6vIysK5CbhxRZcnozpxDN4\nVLXKDwQvivpWoHDGNxlvZrLrptLaU/RPe7C3qLLl8CpQER5cW0c2R4zCv+K2OvLn0toKFuLGkrzI\n83bNYaXIf+Lht+OITP4qHquzboWok/1wlv45VcbZosCel/HG4ZH0f75Io3xAOkwU1u5EL8R3onYU\nOFS1dTeDE9VOmm9kNi7Cm6KF55glxocdyGf+S0RUdKmfJvnBtwpP9oloWixqDhGyVyT5VjH/P6ia\nqwvE5Q8U7W+bmEUWi+hpFjNFi98g5qMlwjFbcL1wYoGJooM+8R/OG8YwhrGH4x+A+7Tv2FKoNAAA\nAABJRU5ErkJggg==\n", "prompt_number": 26, "text": [ " 2 \n", "r\u22c5cos (\u03b8)" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's useful whenever you interact with the real world, or for quickly copy-pasting an expression from an external source." ] } ], "metadata": {} } ] }