{ "metadata": { "name": "", "signature": "sha256:346ed1d88073bd614dfe4f9a62f9352b0e4f11cd6775964c5304a5ed6d7b8f98" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Simplification Solutions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from sympy import *\n", "x, y, z = symbols('x y z')\n", "init_printing()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For each exercise, fill in the function according to its docstring. " ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Polynomial/Rational Function Simplification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In each exercise, apply specific simplification functions to get the desired result." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def polysimp1(expr):\n", " \"\"\"\n", " >>> polysimp1(cos(x)*sin(x) + cos(x))\n", " (sin(x) + 1)*cos(x)\n", " >>> polysimp1(cos(x)*sin(x) + cos(x) + 1)\n", " (sin(x) + 1)*cos(x) + 1\n", " \"\"\"\n", " return collect(expr, cos(x))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "polysimp1(cos(x)*sin(x) + cos(x))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left(\\sin{\\left (x \\right )} + 1\\right) \\cos{\\left (x \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAKgAAAAVBAMAAAAgMbgsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARHYyq80Q75mJZlS7\n3SINk/qdAAAC3UlEQVQ4EbVUT2jTcBh9bde0a7uuDGSIDMP8wzaEVR14UVucCAOZ9VARUchlyGCH\nKTgU0Y16cbdaRSYiRGGHCboxGV4EhwgTFe3JgxeD9CIetunAPzvM9yVp0jTVm98hv+9773svvy+/\nJMB/iYDqs22zkfs+hkAs1QgFqiKT7zN7Qr/c1lDWzqNpF7SyhAZcqwfN2hGZ/AkTC/x0W8NaNc9V\nE3tV3pMK14FW6YrIB1UL1KxFrp1OOmNnimEmyuFjGucv2qhncUXkI2yrizGnPmtncdVOejVAGbUL\nz+KKyG+yqORepyXgDp2Ys1CPKd44rW5SIyI/CQR6HuQqa9h/cc8ulW1RjpcsDc4XgOYJS+Y1nRKw\nMnkXyULXHNoe7mApInzZ/rVLBaZwChgByngJnNaVVVJhHRjGI/0KELc37TVdYFNoFfvSBzQMKIto\nYR3W+VyKsY+RMrCAc0CHhqKYLgHfyEdSYN2LJ5xhlDXDa9pOJLyI2fQlYHn3BzSzFlEzgivxNNAO\n7i2ytg1i+tYybSWv4aiYhVbkWm+aIbJc5C3XgdaJ8UP0gYgUNC0yRUZMlXsb2TpT4LzQpmk0nz9z\nIZ/PCiCnTxGwVee7RW1rbvjTGmsx5fZUuWZwGTiI2HqNaWSORPI7b/yP8TNF7l922m9glgJThOU0\nZ+T4r4F5oFBjmtCBx8EV7ORecvRneJ/pNJEWMjqfaWaLiqgKiChm9CKoAdM8fzzV8K7GlO9R/Hdi\nNMnWv79SoXUEjXYDr+JjSBhW53N9CZ8hr1QHsLmzO9W3caRvo//ZjwnOXIby4vadHtLhFC+M6k6v\nj5/UgeMCVQo3ERq4pQdKnTdYUoSR7uESafIRg4s3rjql7zMVpvFn6orIN/g9zDimJTsLqA7ESWsL\nB3dFwlu/Podk4vzFFJ6GP4b8EBFHBOErvp5k1oaaDB9HYLARCEdk8nLKdSFHKMEPzR/BtB8TpCoi\n/wd7T6t3rXsFAgAAAABJRU5ErkJggg==\n", "prompt_number": 3, "text": [ "(sin(x) + 1)\u22c5cos(x)" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "polysimp1(cos(x)*sin(x) + cos(x) + 1)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left(\\sin{\\left (x \\right )} + 1\\right) \\cos{\\left (x \\right )} + 1$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMwAAAAVBAMAAAD4PRwmAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARHYyq80Q75mJZlS7\n3SINk/qdAAADMUlEQVRIDb1VTUgUYRh+dtedXd11FSEkQhrsh5TArYQulZISCGF2UCIK5lCE4MGC\npIhStkPZySyiiGAKOhiUYkSXIInIqChPHbo0hJfooJb9erDnnfnm25ndzWPvYb7nfZ73fZ/5vv2Y\nBf5TRMwioxrF3C5SSFRUl2KBiOnx/9CbXTX22yuSZ6xV4WRWAb2kLeC8zkLAm0OqWH9BtsctjvzK\n98QtH3f5QK3GO0rxAlKl3hwmRXrfDyBqemWWt8izXsMxhQzHBUb7PounNqLY0OLPyeuqCUfaaZNg\nY0EM6PyYQilTgSYLMPpVElryc3xdN0Vps8orzmzTTZH8UaUnPFZ3iA1e69IAUHOEUbpuEpth3pHG\nO12zi9hxautmk1VJHkpmtHMyB5QPMWfoDtfmulCzwzeRyW2aQM29DZJzDj6v/7LJBFw90CQ2B4E+\nYAbPgUO2scDiuA304r59lpVqY2GbRyyKLWB7dqeFDmMKlcxljjFS8SExA4jO0E1icxyoszAiNtPA\nV8qJajBvwkPus99tyHe4u6klGZ/CePY0MLflPcqliHPKEZ1PZQHRGSEbvn9icR3E5o1nU0UbC3ul\nMjYvz0CHa9NCZm6EL7EEVA0N7uZkgHMMlE0JFJ1RaGPcWm4tsAFOSKVrk+zuPnyyu7tVCG2z1ubN\n5eiqrt6Pi6IQ84VNeYpNsEkO7QywCxVLAZvEBMsy3/hyKxxaC3eTkt20ORiXBs7hHrM8h5KH9gqY\nBHIBm7QNPIjOYyPft0uaA/t3d3OXTCUVm79NyxoTSZME51Q4TYhagOiM0KHx9j228DZgw1uc+pPu\nz5grXejYEqJOrYOXqQGkHQ7lnKf2ND55kM+wTR2wur6hunl5T/Ny25OfQzypGRjPrt1oZGW8Wurz\nHRcHD9jAfqFmc1cQ67hqR0brL0vOOX0NvaM2oavnm5IXvl9CwqEQjnM6LfrYiOJ/THSVCxKOn/u6\nPjQRSnwIx/wGjCoUMTXFkwwmms/P8fVIqK5HV/pA/xEY6gb4grceDad+pueU1mf9Or1mWhUsczQX\nAJ0BHIB6TmldblRByHWR4MehOKLZYk4Yf05J/S/KOcD9xTt91AAAAABJRU5ErkJggg==\n", "prompt_number": 4, "text": [ "(sin(x) + 1)\u22c5cos(x) + 1" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "def polysimp2(expr):\n", " \"\"\"\n", " >>> polysimp2((2*x + 1)/(x**2 + x))\n", " 1/(x + 1) + 1/x\n", " >>> polysimp2((x**2 + 3*x + 1)/(x**3 + 2*x**2 + x))\n", " 1/(x**2 + 2*x + 1) + 1/x\n", " \"\"\"\n", " return expand(apart(expr))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "polysimp2((2*x + 1)/(x**2 + x))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\frac{1}{x + 1} + \\frac{1}{x}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAsBAMAAAAX/bLtAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAuxCrdpnvzWYiiVTd\nMkSRVyLjAAABG0lEQVQ4EWNgQABGBQQbk4UmyySPTzWaLJOxPR7VmLL+eFQzMKDLovMZUAC6LDof\nRfGo2ajBAeahhxg6H1ULmmxofmkDqgJkHn5ZZJU0YmuSZO6W4aH6Pw4A9R3MlxBVeL0cXl5+rLy8\nGK8aFEmY2SiCODkDrVoI7jIiXKL4Ca76CZyFzmCaABFRNkaoRleD4HM7QNks1FI9y3m2K8RQvGZD\nlDEt4DjBdgDsBHyqocq4GFg+cF8gqBqqjImBWQCsloEBr9kwZWwOINWs5eU16eXlBiA21jCBKGOY\nf4FBAaQGr9kMEGUcE/wZWAirhirb3yDGMAVsNF6zocoUvbSWNKCqZg37HgERQZBIyqCC8DBBKMLD\n4nPAIwmWAgAViGYs3A8cDwAAAABJRU5ErkJggg==\n", "prompt_number": 6, "text": [ " 1 1\n", "\u2500\u2500\u2500\u2500\u2500 + \u2500\n", "x + 1 x" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "polysimp2((x**2 + 3*x + 1)/(x**3 + 2*x**2 + x))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\frac{1}{x^{2} + 2 x + 1} + \\frac{1}{x}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAJMAAAAsBAMAAACTV5eGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAuxCrdpnvzWYiiVTd\nMkSRVyLjAAACDElEQVRIDWNgwAmEcMpgSjAqYIohRBQ/IdiEWEzyCniUKBsTbxSTsT0+oxhYiDeK\ngcF/1Cg80YIqNRpWqOGBj0evsGIN+x6Bzx0ocqH5pQ0oAsODwzSBav7gdhg1itgQQA+r/2SADxDL\nYEbxg42AChLrDiR1rOXlNenl5QZIQhQwYa5CM2KpsAKaCGEudqNYFVgLCOtFU4HdKJ4JnH/RFBLm\nYjeKbQPTP1S9nKGFD1BFoDxGBZgwdqMYGLjRKuPJDCy/YXqQaaTmAZ8DsgSCzb4AwoZldyMGhvMI\nWQYGqDih5gFIy2KoPpir0xQY7B9AxUAUTJxA8wCokmMBSD0QwLTUKzDEPwCLQAiYOD6jZjnPdnVg\neMVwF00L0IMKnEsst4SgiWOpXKDKmBZwnGA7wCu9Gxg4IAC3nYH3F4MWQ09DDpo4FqOgyrgYWD5w\nX2D7/x8tjzIwsAswLGDwZ9hL2CioMiYGZgGIYjQtDIEMDAoMhjA5uGuxuAqujM0BppwBObuzgDN9\nClgOWRyLUQwMEGUM8y8AbYcDuO1bGTgnMACzExNECi6OzSiIMo4J/gwsWIziDWDgmNDJ8oHBibBR\nUGX7G8QYpsDdhIjBOatWxXD/YEzgdCBoFEyZopfWkgaIajAJ88j5////MIksWuUBlYOJY2keICtD\nMgkpXSGLIlyLKoqXhyu74xJHGAYAbUWwlhzKdrAAAAAASUVORK5CYII=\n", "prompt_number": 7, "text": [ " 1 1\n", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\n", " 2 x\n", "x + 2\u22c5x + 1 " ] } ], "prompt_number": 7 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Powers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In each exercise, apply specific simplification functions to get the desired result. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def powersimp1(expr):\n", " \"\"\"\n", " >>> powersimp1(exp(x)*(exp(y) + 1))\n", " exp(x) + exp(x + y)\n", " \"\"\"\n", " return powsimp(expand(expr))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "powersimp1(exp(x)*(exp(y) + 1))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$e^{x} + e^{x + y}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFcAAAAVBAMAAADBdm84AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpmJdlTdRDKr72bN\nELv8JKevAAABJklEQVQoFWNgIAxYCStBqOBDMAmz0BWbTPdswKILIgxSzO7HwHUBooL5wjyuAEzF\nUGGQ4iv8Al1QBewMpzGVAo2DCIMUy5Yx+MGVfISzUBhA4TlnTp0548AwmWEKTIZjAQeUeREmBKIh\nwiCTGZYzrABRQNDPfIAZwmIIgdJIwmDFK9g/QGXuuarYYlEMFQYrjvQ7AFTBqOwkAFUIomAmIwmD\nFDMKcDoAqTABRgUgBQMwxUjCnEA5PoMaIMn4nYGpAaYSSEMVowuzuhgAJTlXb3FEUgtTjC4MUcKv\ngKRU58yZrDNnTgJFUIThKvgd4EwwA+oMdGGIIi6gYiCCA6hidGGIPMsBhktYgg5dGGqYkYsD3Fgg\nAxZ0aMLIShBsmGKECB5WCR45AAOfOPuPJEVeAAAAAElFTkSuQmCC\n", "prompt_number": 9, "text": [ " x x + y\n", "\u212f + \u212f " ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "def powersimp2(expr):\n", " \"\"\"\n", " >>> powersimp2(2**x*x**x)\n", " (2*x)**x\n", " >>> powersimp2(x**x*x**x)\n", " (x**2)**x\n", " \"\"\"\n", " return powsimp(expr, force=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "powersimp2(2**x*x**x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left(2 x\\right)^{x}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAXBAMAAACG4mBhAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARHYyq80Q75mJZlS7\n3SINk/qdAAABK0lEQVQoFW2QIUjEUBzGP+duu+3YPAQxCS8seOkWBG0n2AXLBTGsGASDFotFEINt\nCMrZVqxiEWxOi6BlVdMQgyLoLFfn///23jw4Px7/7/t+sLfHHxiXE0yvjFPgzEz3/+PtRkJ4QtDQ\nctucpnIaC8D70R1X1iGPRYRAH/4yulfcSQ1gsjhFDEPAjOAVFYYbw7q/6USw6ezB/FHc2lFhhr4d\noqk5nhQ/lu4N8RF8zgtgoPi69F5sxe6LnQHXiu9K34ADo2iFwKzi8uJmCgtmyqg3ygMutuCpOW+o\ndYAv4DtE9HfPI/El4NLNuzCIX1Bn0bv85/NBdps84LXqks8BXlmW2XZn6yQhsiYp/S1XobJ6D7So\nUTlCt74O0jfr9lYnDqt180UdAYM2IfULDYE8tfjIEh8AAAAASUVORK5CYII=\n", "prompt_number": 11, "text": [ " x\n", "(2\u22c5x) " ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "powersimp2(x**x*x**x)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left(x^{2}\\right)^{x}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAC8AAAAcBAMAAAAD5/ucAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARDKrEM1mIu+Zdrvd\niVTWGHL+AAABSklEQVQoFW2RPUsDQRCG35zBS2Iuxl9w21tEwY8izTZWIhEEQUGwE8GPNNaXWkQt\ntEkaQZEgooKdhVgpdlfEJiAE7SxURLSMs5uZTQoXbuZ53rnb+wLcCmpjzM3RY+Vi4ACHHQt0MdUi\nHOLhAyIVGE5g3jRvxFRauyjlWX6NT2lT7frQODPgVTyqEzazZQnIloFCMEtb+hU3CGjTDB3TF9UG\nkN53g3Wi5LdoKi+UiD0F3IsWBDD8/qqBmnhdAHvtNvGm+DiB35x8q3IQaoZr6jNYW95hLyiGBeox\nLvHCHsnDPFKgUeQYKLUYzQDYZgPcFXMm8r+Q5FGkGMwmK5lPnLCHZYZzIPczUPGP2N17hPR9bhrP\np5zjSWBQCXX6omhfLGR70v48g96dDaT0Xwnh1pGBrHK65cjAatdyvTfxuzsBG92TkNY98j/+ASBj\nPT/dHxZRAAAAAElFTkSuQmCC\n", "prompt_number": 12, "text": [ " x\n", "\u239b 2\u239e \n", "\u239dx \u23a0 " ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "def powersimp3(expr):\n", " \"\"\"\n", " >>> a, b, c = symbols('a b c')\n", " >>> powersimp3((a**b)**c)\n", " a**(b*c)\n", " >>> powersimp3((a**b)**(c + 1))\n", " a**(b*c + b)\n", " \"\"\"\n", " return powdenest(expand_power_exp(expr), force=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "a, b, c = symbols('a b c')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "powersimp3((a**b)**c)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$a^{b c}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAABoAAAAUBAMAAABhbjCNAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIqt2iUTvu2aZ3RAy\nVM0ud2cfAAAAmElEQVQYGWNgAIO4BxAaQrJMQObxXUDm8Qsg8+KNtRl2OhtAhawYmrjXsH6A8ooZ\nupgUuA9AeTkM0/kDoGwGhg8MK/YjDFrA+4DrAIM3VDbShIFR2WQDA5B0TYTrYAgTYIeZDJT6wcBZ\nAJdj+sDAZQDn8Rcw7D8A58kbMNxnABoGAfsvMOjxHoDx+Bp4V7LAOEDrTI+bwngAu6ce02hGmyoA\nAAAASUVORK5CYII=\n", "prompt_number": 15, "text": [ " b\u22c5c\n", "a " ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "powersimp3((a**b)**(c + 1))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$a^{b c + b}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAUBAMAAADrQanMAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIqt2iUTvu2aZ3RAy\nVM0ud2cfAAAA7UlEQVQYGWNgAIO4BxAaTLK+g3NYJkCZvCDaEy7OdwHKZAfRb+Hi/ALI4h/h4vHG\n2gw7nQ0YGEDqWT8bbYDKWDE0ca9h/QARZ17AoQAVL2boYlLgPgARZzfgWAAVz2GYzh/AwKD37tm7\ndwZsBzgLoOIfGFbsFwCxQebzM3A1gNhAsID3AdcBBm+IOBfDPYgoA0OkCQOjsskGiDjrZAegOKOy\nayJMGiIO4YUJsH9AiDPBmIw/GOC2w8RANNMHBi4DZAEom7+AYf8BLOLyBgz3GYAOQQf7LzDo8R5A\nF2Vg4GvgXcmCKQx0vulxU0xxABOjLWXanlaIAAAAAElFTkSuQmCC\n", "prompt_number": 16, "text": [ " b\u22c5c + b\n", "a " ] } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Logs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def logsimp1(expr):\n", " \"\"\"\n", " >>> a, b = symbols('a b', positive=True)\n", " >>> logsimp1(log(x**y*a**b))\n", " y*log(x) + log(a**b)\n", " >>> logsimp1(log(x*y*a*b))\n", " log(x) + log(y) + log(a*b)\n", " \"\"\"\n", " return logcombine(expand_log(expr, force=True))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "a, b = symbols('a b', positive=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "logsimp1(log(x**y*a**b))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$y \\log{\\left (x \\right )} + \\log{\\left (a^{b} \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAKUAAAAcBAMAAADywGJUAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEImZIkR2MlTdu+/N\nq2Z6CBlbAAADWklEQVRIDa1UWWgTURQ908x0kmnSDII/VuhYsSIo5McqLjggFAShAVFwgcSKERE0\nH4ILlOZLQZBGC/qlFgQ3UKqIC/gRFAWhQhQRlKLBBVQQU1zqhzWe9+ZNZxqXD82FuXPuufedee/O\nnQEaZ5tKjdPylZpSPmrAfa2nES8ATQ2QExJm2RNKugH2mH/3M21vbSb3EMj9TWedSr75W5HMPVcV\n2/EBiLmT9eaoM4kl8A+ESH5qou/21Bj6sCLO4B3QrBohuFgIizhuCy+sJH3gTgRQokhKEdexBNDG\ngrRVpxn05aUq0lwPXAwWSdSSVkQVJ4nEpaxe87KfQJtC0awH6jX7/cpitETIvfpWp2mU/ASsggf/\npLnDr1zTK9BHnn+2gx72jpp615YCok+6ckUg4gB65+MDXRzjlLcopLkytxg4vCW3XWRGeelP5lz1\nqpCx0WRUsYshNffZeEQqlnX4iirANLyr3ATkiVgRaJpHkHCMMRxrIg3Ri42uVRWY1p/H3kgRFwip\neQXoyZ9HZJihaLzDhx0EDBHTAs0WB/q4VcRSyd/hNn8gMiQDSqRht2TxlaFVNr4BydRTJIoMk9S0\n8UzUmVXhw5qZAvCJZU8lPwgkqohlZQC0Mzlgm+MMrXLrF0qV+vNtJKUmcI3I04yMjNy/NTJSZnwR\nH/nA7+a4dkOkQc3kENrzMpD7xDI0DzO0ylGxz3J351yRbCnQ6ePQfnf2ASYn9N5eT+YBdbIY4LGk\n9ZC9I1rp97M/rT5vqwK8bq5iM9BakrVT+2l+aU17tGgQzzsapZawjAssR6ZCSOGNLk5jw57djMQA\nRX9Yw3r2d7NkXIWVMs7ucUUlOFDxSnRQzgBDzidm5Fa4bNqLCdd8tKCCWK32iaxRhHZmVsdOwrja\nkHrvfbXH6Ovgv+hUrZZiGhkxnlv3bxWYNl/6edJ7TrsLbb1D7I8wfvk2VfXMNKYfFTipDq34exyD\nonp9HtU6xKHhhZdeTN+pkJGdpAR4z+uQAAlHeN+0z/zHOZbjx7zrx9naCkHcVqxWUqDutorbuyQ4\nsxjOyE3lFoYpTOvsXSQIvazohKtA3U3ryM2mLO1cOBPzuDAV4G4FtwXUH9DqMP8qHPw7jjrBWn0o\nwP+F3garI3aAG4l+AqYQyYpQSHZMAAAAAElFTkSuQmCC\n", "prompt_number": 19, "text": [ " \u239b b\u239e\n", "y\u22c5log(x) + log\u239da \u23a0" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "logsimp1(log(x*y*a*b))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\log{\\left (x \\right )} + \\log{\\left (y \\right )} + \\log{\\left (a b \\right )}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAAAVBAMAAABPgOQBAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMqvNid27Ipl2VBDv\nRGYoM0XMAAADmUlEQVRIDc2VTWgTQRTH/5vmq9lsEgsieHHBj1IQDY2CUJRVKjR4ieKlKKgBRS8a\nCoI9NX4gVPyIEMFF0CgoeDKg6EWhoFJUhIgoCEJzqHoSUwWxFo3v7c7sV429OtCZN+/95v+fncxu\ngf+jvRPb+LzQdrSKTSwIQkoyz3TPOnul0yu6COMZJ2cF88ieDqCy3PCvVHR7rq4uAJbsDj+ArrpM\nZGUgxiA5IOtBMKLLij06kl1cYLpoF5zedKJpET0QY4DsrkhSgmrJzkR1WbFHRzJdowTTASm8sEHq\nH4rothgDZLIuSQkmxDaCpo7kFC9hOiClZaUUojU77GD6eh7YwdSV3MpLWJZMj5lngBuXzUuUihtA\nLN97exwIl2E1j6mXPAWoQwbG6giXLQ4e09j45RoSfeNmwZbESPV9Cf3mGlu2CGUXQoY2h+Ewre1q\nAvfwofkUSIiHdk195CZar7VwzQU9povrWIGpeqRi2JLaJI5A/Y50xpItImkgNhMt4Cx5ItkADFK6\nDmgTnABcUx/5ElgaL+CAC3pMnwBjmf2IT9B6lhxr4jQSc+zFskVM1YAfoQJWEoA0EXWs4lBpce81\n9ZG/CExWMOuCrqn2k5TKK0GqtuRaYBjxLCUt2SK+kM83ZUZ9zg5sCjzjzjI9mcvtzuX6eR4gyRR3\n6sqMAOO53PrHuZxO2aieomI6uyzzsEZTlvwOdQaRMqaawvQOVb7GqtUMAUjShE4bqntq7vH6SN7j\nSXRPuKD7pAl+Un00v5kYlozNItFS0zVcqIvjpXNWfqWsJ6RdNoFP3S1cAVJZXuI9Xh95mEob6Klc\n0DUF/abLGuKjTJLqT4Sy1+kWUZ5li6CbFS1r+xaV2CFcRuJ3dCJW+dsr4yOHiD7B58VrrOYxpffj\nIN4uWsL5cBnYhJtlI1SL69a0p92LnsE1wJ52m4rQClAPbRu8SmFXgzpq4niD5Bsq3Tcv0FYlKEyV\ntV9LyootTUTa7R8EkSRGzFeHGmrfeZpKmsK7DTzaSSMmubOa/LrJ31SkJZkkO4A/MhKUTypAdSPU\nNwZNXEmuSJrCj/R3i3PT3FktL8Z3YhSDJFMGvRHWlZegVvGRqb303aA/jyTXJU3h0QzAVwPO/yE1\ny9P5zSEHEDGiBn0MO4Cx7fa9dCVZzEurg+YQ+dLronNPLVSyx2DvkCNImOf+AeJevnqcVzuSPPm7\n7CiXqF20h84933BuC4KQkoL+A6HuDQCGeipPAAAAAElFTkSuQmCC\n", "prompt_number": 20, "text": [ "log(x) + log(y) + log(a\u22c5b)" ] } ], "prompt_number": 20 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Miscellaneous " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def miscsimp1(expr):\n", " \"\"\"\n", " >>> miscsimp1(sin(x + y))\n", " 2*(-tan(x/2)**2 + 1)*tan(y/2)/((tan(x/2)**2 + 1)*(tan(y/2)**2 + 1)) + 2*(-tan(y/2)**2 + 1)*tan(x/2)/((tan(x/2)**2 + 1)*(tan(y/2)**2 + 1))\n", " \"\"\"\n", " return expand_trig(expr).rewrite(tan)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "miscsimp1(sin(x + y))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\frac{2 \\left(- \\tan^{2}{\\left (\\frac{x}{2} \\right )} + 1\\right) \\tan{\\left (\\frac{y}{2} \\right )}}{\\left(\\tan^{2}{\\left (\\frac{x}{2} \\right )} + 1\\right) \\left(\\tan^{2}{\\left (\\frac{y}{2} \\right )} + 1\\right)} + \\frac{2 \\left(- \\tan^{2}{\\left (\\frac{y}{2} \\right )} + 1\\right) \\tan{\\left (\\frac{x}{2} \\right )}}{\\left(\\tan^{2}{\\left (\\frac{x}{2} \\right )} + 1\\right) \\left(\\tan^{2}{\\left (\\frac{y}{2} \\right )} + 1\\right)}$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 22, "text": [ " \u239b 2\u239bx\u239e \u239e \u239by\u239e \u239b 2\u239by\u239e \u239e \u239bx\u239e \n", " 2\u22c5\u239c- tan \u239c\u2500\u239f + 1\u239f\u22c5tan\u239c\u2500\u239f 2\u22c5\u239c- tan \u239c\u2500\u239f + 1\u239f\u22c5tan\u239c\u2500\u239f \n", " \u239d \u239d2\u23a0 \u23a0 \u239d2\u23a0 \u239d \u239d2\u23a0 \u23a0 \u239d2\u23a0 \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\n", "\u239b 2\u239bx\u239e \u239e \u239b 2\u239by\u239e \u239e \u239b 2\u239bx\u239e \u239e \u239b 2\u239by\u239e \u239e\n", "\u239ctan \u239c\u2500\u239f + 1\u239f\u22c5\u239ctan \u239c\u2500\u239f + 1\u239f \u239ctan \u239c\u2500\u239f + 1\u239f\u22c5\u239ctan \u239c\u2500\u239f + 1\u239f\n", "\u239d \u239d2\u23a0 \u23a0 \u239d \u239d2\u23a0 \u23a0 \u239d \u239d2\u23a0 \u23a0 \u239d \u239d2\u23a0 \u23a0" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "def miscsimp2(expr):\n", " \"\"\"\n", " >>> miscsimp2(gamma(x + 4))\n", " x**4*gamma(x) + 6*x**3*gamma(x) + 11*x**2*gamma(x) + 6*x*gamma(x)\n", " \"\"\"\n", " return expand(expand_func(expr))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "miscsimp2(gamma(x + 4))" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$x^{4} \\Gamma{\\left(x \\right)} + 6 x^{3} \\Gamma{\\left(x \\right)} + 11 x^{2} \\Gamma{\\left(x \\right)} + 6 x \\Gamma{\\left(x \\right)}$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAWMAAAAZBAMAAAAWIlLBAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIol2q1SZEGbd7zK7\nzUTvhYErAAAEGklEQVRYCZ1WTYgcRRT+5rc787M7+Aeedsgu69HBDSp42A2skYCYhaAXkUTFEJDg\nmJxclG1z86AsnoKXjKgELzoHPXlIiAbEi3MQFWR10JOCMGhCgoLrq6r3qqq7p6ent2GqXr/3fd/7\nuru6pgE+2hLMNwfLK/35kDHU6lcHYcUk3MmpYlr1qD5y5Hmjev8grAz14MFilqunw0mG1Iz0oU7p\n3xnlYqXKTjHLQPkAd7mxFfxXzNcM9OeFLW+PZ8hllmq3M0tFC13P8kLPsMPxDJUL111xLoKBt7uO\n9huH77hUZpTGhp2dfvP4P5ubl7vAZ0J8WQKZg9XDQ4nr1+YgoKXWmx4Mb4XkL3+4efwvoLnBUnWr\nyQnXZgb2AuguN28CFdL5gZlIbXz3D6u7UizdmoMQfEuW9WBoYZfmqxvAEaCtrkYfIwl49tpkY585\n88pZ7QAbqPREQTdQJ69y5l20WX5pXLqTTwg2T/ShBxb4FV8Yy1VgjXPARY7SbfTlTcUSZcncZXTR\nsFcfDFjrpJlD9+681gmvGMuzCMC6EtODkmjeePoJY7kMXDGiNG5zlG6jLU/FAuGJx42DLfxppXAj\nrtUe2FJzbaWTT0habuzvT4zlGhb4eZFka8vosmWvjbacwt515N6He5qi1jIdL9CPk6s6AbDW4k9r\nL9kalXIJnmXXRtsA6l2gtHz05Iu0xZ82faa0UWs5iQ264aXGrqawgx/pheHkczpvLe9cwqFIalTK\nJTjLHosttyPgPN6KPgZqfMPZst/GWI5jy6hMakPf8id02Zz8I2F5gvJtqTnL2QRn2WOx5cYY9OKs\n41lgYWD6iGWvjbEcxwaoXjMEuWn0lyrJq1wRrV2Et6RGJb7L2QRn2WOx5cUx0MeTqkNzokb3ML02\nxnIS2+gZgucAMElt+dze3nt7e98RaHGE8G+p0bmzLMkEwVkWgGrlbAAfqIS2PL3NdOzSkK5WM83r\n95GKTTKxMFrq8qVGILacTfAt2zayMLZIgT7sgtTC8Nvwwohhw846KjHLX9OWx8m3lXs6eGHU1CKT\nGqXZcjbBWfZYbLkVAW9WJniE2o1Uk6ltjOU49lT0De42DHZAO5skE5scrmM7khpx8gn2r8RjsWXa\n2Wp3WoNSL7XJ+W2M5Tj29YfOL0facunc/rEORb8DkvxZF+zlo37sKVujp5pPOPPp9xHUIIokeN8v\nN5+naWEXwZcPHH6UwvaYBjr4YXptsrGGwWND+dZHMOBAtPg0MRUmGP77Vibxh23zLkhjXY2isCun\nZXpo+pCvVSnE58IEQ79oVZY5ym6TxlqyDuzH5xvxfOZZYYJWsh+fwShTWQp52HsEeFSCnLkwQeuV\nNli2aldiZp88rHqJ1VEZmjl3LEwwirxR4bHcBpBNTWH/B7wNdun71wGRAAAAAElFTkSuQmCC\n", "prompt_number": 24, "text": [ " 4 3 2 \n", "x \u22c5\u0393(x) + 6\u22c5x \u22c5\u0393(x) + 11\u22c5x \u22c5\u0393(x) + 6\u22c5x\u22c5\u0393(x)" ] } ], "prompt_number": 24 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Continued Fractions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we do not cover this, see http://asmeurer.github.io/scipy-2014-tutorial/html/tutorial/simplification.html#example-continued-fractions." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def list_to_frac(l):\n", " expr = Integer(0)\n", " for i in reversed(l[1:]):\n", " expr += i\n", " expr = 1/expr\n", " return l[0] + expr" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "a0, a1, a2, a3, a4 = symbols('a0:5')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Determine the list used to create the continued fraction $$\\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{2} + a_{0} a_{3} a_{4} + a_{0} + a_{1} a_{2} a_{3} + a_{1} a_{3} a_{4} + a_{1} + a_{3}}{a_{0} a_{1} a_{2} a_{4} + a_{0} a_{4} + a_{1} a_{2} + a_{1} a_{4} + 1}.$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def continued_frac():\n", " \"\"\"\n", " Determine the original list used to create the fraction. \n", "\n", " Return the original list from this function.\n", "\n", " >>> orig_frac = (a0*a1*a2*a3*a4 + a0*a1*a2 + a0*a3*a4 + a0 + a1*a2*a3 + a1*a3*a4 + a1 + a3)/(a0*a1*a2*a4 + a0*a4 + a1*a2 + a1*a4 + 1)\n", " >>> pprint(orig_frac)\n", " a\u2080\u22c5a\u2081\u22c5a\u2082\u22c5a\u2083\u22c5a\u2084 + a\u2080\u22c5a\u2081\u22c5a\u2082 + a\u2080\u22c5a\u2083\u22c5a\u2084 + a\u2080 + a\u2081\u22c5a\u2082\u22c5a\u2083 + a\u2081\u22c5a\u2083\u22c5a\u2084 + a\u2081 + a\u2083\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\u2500\n", " a\u2080\u22c5a\u2081\u22c5a\u2082\u22c5a\u2084 + a\u2080\u22c5a\u2084 + a\u2081\u22c5a\u2082 + a\u2081\u22c5a\u2084 + 1\n", " >>> cancel(list_to_frac(continued_frac())) == orig_frac\n", " True\n", " \"\"\"\n", " return [a3, a4, a0, a2, a1]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "orig_frac = (a0*a1*a2*a3*a4 + a0*a1*a2 + a0*a3*a4 + a0 + a1*a2*a3 + a1*a3*a4 + a1 + a3)/(a0*a1*a2*a4 + a0*a4 + a1*a2 + a1*a4 + 1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "orig_frac" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\frac{a_{0} a_{1} a_{2} a_{3} a_{4} + a_{0} a_{1} a_{2} + a_{0} a_{3} a_{4} + a_{0} + a_{1} a_{2} a_{3} + a_{1} a_{3} a_{4} + a_{1} + a_{3}}{a_{0} a_{1} a_{2} a_{4} + a_{0} a_{4} + a_{1} a_{2} + a_{1} a_{4} + 1}$$" ], "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 30, "text": [ "a\u2080\u22c5a\u2081\u22c5a\u2082\u22c5a\u2083\u22c5a\u2084 + a\u2080\u22c5a\u2081\u22c5a\u2082 + a\u2080\u22c5a\u2083\u22c5a\u2084 + a\u2080 + a\u2081\u22c5a\u2082\u22c5a\u2083 + a\u2081\u22c5a\u2083\u22c5a\u2084 + a\u2081 + a\u2083\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\u2500\n", " a\u2080\u22c5a\u2081\u22c5a\u2082\u22c5a\u2084 + a\u2080\u22c5a\u2084 + a\u2081\u22c5a\u2082 + a\u2081\u22c5a\u2084 + 1 " ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "cancel(list_to_frac(continued_frac())) == orig_frac" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "True" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }