{ "metadata": { "name": "", "signature": "sha256:6cbe536c182f46c7cfa292cc81f32b31ba3ede18ef1a631b7d53fbcc10dad81a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Gotchas Solutions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sympy import *\n", "init_printing()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each exercise, fill in the function according to its docstring. " ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Symbols" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What will be the output of the following code?\n", "\n", " x = 3\n", " y = symbols('y')\n", " a = x + y\n", " y = 5\n", " print(a)\n", "\n", "Replace `???` in the below code with what you think the value of `a` will be. Remember to define any Symbols you need!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def symbols_exercise():\n", " \"\"\"\n", " >>> def testfunc():\n", " ... x = 3\n", " ... y = symbols('y')\n", " ... a = x + y\n", " ... y = 5\n", " ... return a\n", " >>> symbols_exercise() == testfunc()\n", " True\n", " \"\"\"\n", " y = symbols('y')\n", " return 3 + y" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "def testfunc():\n", " x = 3\n", " y = symbols('y')\n", " a = x + y\n", " y = 5\n", " return a\n", "\n", "symbols_exercise() == testfunc()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "True" ] } ], "prompt_number": 15 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Equality" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write a function that takes two expressions as input, and returns a tuple of two booleans. The first if they are equal symbolically, and the second if they are equal mathematically." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def equality_exercise(a, b):\n", " \"\"\"\n", " Determine if a = b symbolically and mathematically.\n", "\n", " Returns a tuple of two booleans. The first is True if a = b symbolically,\n", " the second is True if a = b mathematically. Note the second may be False\n", " but the two still equal if SymPy is not powerful enough.\n", "\n", " Examples\n", " ========\n", "\n", " >>> x = symbols('x')\n", " >>> equality_exercise(x, 2)\n", " (False, False)\n", " >>> equality_exercise((x + 1)**2, x**2 + 2*x + 1)\n", " (False, True)\n", " >>> equality_exercise(2*x, 2*x)\n", " (True, True)\n", " \"\"\"\n", " return (a == b, simplify(a - b) == 0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "x = symbols('x')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "equality_exercise(x, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "(False, False)" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "equality_exercise((x + 1)**2, x**2 + 2*x + 1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "(False, True)" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "equality_exercise(2*x, 2*x)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "(True, True)" ] } ], "prompt_number": 20 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`^` and `/`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Correct the following functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def operator_exercise1():\n", " \"\"\"\n", " >>> operator_exercise1()\n", " x**2 + 2*x + 1/2\n", " \"\"\"\n", " x = symbols('x')\n", " return x**2 + 2*x + Rational(1, 2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "operator_exercise1()" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$x^{2} + 2 x + \\frac{1}{2}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAGwAAAAqBAMAAACkSaOPAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIol2q1SZEGbd7zK7\nzUTvhYErAAAByklEQVRIDe2Sz0sCQRTH37bu6q5Y9hM6JRaeJaSrHoKOCVHXPEVF0hYdPdh/IJ2i\ni8cgCDx16ZCHIugQHboEDkn9AxKERNQ26s7O22mNWc/NwXnf9/1+5umMAMHXbXCEEqX2INjB4kAY\nqP+YeN34SlLXlmj30wjTLf2hX0zsI8yIK5+i3U8jzMyHv/vFxD7CADTZt9e3vzb5SbEErzvVVPHe\n2/BXc962koNs3tvyU5GE0w3Hu0XIAqOFg3tYuPULXPZqLd3dzVMIeS5pxY2iInqzuuTBYm3Q/8TG\nMpMLadO2na/kTKNnGG3oer3jhGnhROTYrPDBHLtKYE/AhkBtaTU/rAHYE7AwhOocos/euxIAvQ7Y\nY9iI3VmUMFmQRgl5OickR7uQ6Xw4XpGQE0IeOx13zdTAcoU7TSvAKAD32DQnGYlnQfXBLgAOsSdg\n6+U7GOfD2DTlKJmqYE/ASvP7s+XfmEF/dwV7AoaIbunepGC4mLLRaAoelcP8Xj3mK1MToL6zOsBO\n/7vVAHEWPbNgucmE/P5swe4AGB1QRe8sPy/6Jp9FyVgdCflyRz6KkmoOCflyDZS4fJolowWIDIBN\nJ5Nb7IgAe9W2P+AHAIprVTpk+QAAAAAASUVORK5CYII=\n", "prompt_number": 22, "text": [ " 2 1\n", "x + 2\u22c5x + \u2500\n", " 2" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "def operator_exercise2():\n", " \"\"\"\n", " >>> operator_exercise2()\n", " (x**2/2 + 2*x + 3/4)**(3/2)\n", " \"\"\"\n", " x = symbols('x')\n", " return (x**2/2 + 2*x + Rational(3, 4))**Rational(3, 2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "operator_exercise2()" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left(\\frac{x^{2}}{2} + 2 x + \\frac{3}{4}\\right)^{\\frac{3}{2}}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAJcAAAA7BAMAAACEbwXfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiUSZq1TdIu8yzRBm\ndrsuMkCWAAAEF0lEQVRYCa1XXYgTVxQ++ZlMJpPoBN8UbZ4Ly0YWRFbcDbjog2AWqqUWZOOLCgqb\nslbxQVxt/V3EFd911SIlDxrpQ6GFbvrSBUF2xX0QFDboiyBiWrGiq07vz7k/M51xJpD7MPc73/nO\nl3vv3LkzAehR61ss9ciJ2NxI1npnVk84vTOzVvfOCyA50zs3B976zBJD231M3NCeNDs+7SYY9DGx\nw/uL0z7tfjjhp3yK6DBRQs1pmBUQmYjOFsuy0nVdPs/1qmSsqXAc9KXQ963jc0pUVNl1BSOQVVw3\nCpCfQdmMNcnQ1xiTTvdVbCCagORHktiCyYOwTJF5HmPS/algFPpiFP4lmiwZHmv82cw5GJJd7Fh8\n5pIJB2PczJhCyW91CrQ1v7prZzO83J9h04SbnMb7epJG5tptezbDJdf1V3wmzlVosp+NCH753SFB\nni3cXfirdYbm4rfLPzFtrsy6cbdG+kyFBg4swW4KumiFU1TMB4Nl/SUKmrAD4y66S2yB6QYRbSOC\ni4KI2R8DeNWi2q1awQ8cm+/A1thIaLtNNBvjd4BWWG9Y3VyhA48jHXTBe4BxZjO7IOkCu5nGhxWT\npiJl9jPgCST/ZulMW6pWTFJov1xTfCK5WMAYGBxlwnRH6rNtCQPBxODTQF6RBXX4zzqKDkBmBZb4\nAAKSnDL4qtOgv8Up/9WuMybdhIyaBqF+9QvBUhttPuR3jQVWlZ2C9D96/R49YNh+LamlaQk9AM1y\ny5CKMINPsnC4LqEHoBnhMsvw3eL3D/lI4f8jgwuysNqU0AOU2TXHdvKHsjWeDjDbJwurEnmBMrsN\nCSh0DFyOALMDspKb0dcetg5PSbNUmzy06bYoEGa8grE/ixwEjizVaNy60GhUqGqRXrJ8xQYbjQON\nBj8UKc1bhBkRiZEZZTgK9KsB11aMTDiRXk1zGEVakkFhdgVgLl9fgkK4mboBEVvD3FtcVRtrPYfj\n+GsBI1NbI2LTZshtqf3x4O7aVriZ2rTzJVSBOXBbYrVmIit6bWRWhZHa46Qe9MNQUM8/JPn9Ex6y\n75MI8FTUHnR1BG0n57BSxkCP2kykHUFZzhD6XBOqJZaOdzHvtZlQOxz5sU3ZO00YLrF0vEsi12bC\ndEfq+QsFw/GQTSfVOphDMzU38apjKou/bvSKcGwvoJn2qgN8CdMqzIYb6JmEkM/XFS0+DwgzpNho\ntFuY6Z8H/dOisFARKEZvO8JMX5tMWZR+BaY2YsGG9MbISPXHBZL0fFLlOyi3ypCPb0aK+G3MVbCe\ndRcxOFIsbtD5SMzN8DMU1d9gP+669Fs8dktUX7eI+JmnIOd4wi6D5JSnwDzrCbsMMqPegm+9YXfR\ngE+eKvuILkJjxi9+6Sfix/IvoixJlSTsEtgv9IL/AHT99A+60z6FAAAAAElFTkSuQmCC\n", "prompt_number": 24, "text": [ " 3/2\n", "\u239b 2 \u239e \n", "\u239cx 3\u239f \n", "\u239c\u2500\u2500 + 2\u22c5x + \u2500\u239f \n", "\u239d2 4\u23a0 " ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }