{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Factoring Polynomials with SymPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is an example that uses [SymPy](http://sympy.org/en/index.html) to factor polynomials." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from ipywidgets import interact" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sympy import Symbol, Eq, factor" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = Symbol('x')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def factorit(n):\n", " return Eq(x**n-1, factor(x**n-1))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "x**12 - 1 == (x - 1)*(x + 1)*(x**2 + 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "factorit(12)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9oAAAAvCAYAAAAcoLJwAAAH3ElEQVR4Xu3dy2sdZRgH4MlV0m6MroSC1AvYpI2GNi4EQXduXHQj7dYL4p8g6sY/wpWX4AVFEV0IboTWG4ppiKY0Loqm0IBuxNBL2qbJOb5fm0PbGDMn9lxm5jwDLznp+Trzfs83gfxy5szpy2wECBAgQIAAAQIECBAgQIBAywT6WrYnOyJAgAABAgQIECBAgAABAgQyQdtJQIAAAQIECBAgQIAAAQIEWiggaLcQ064IECBAgAABAgQIECBAgICg7RwgQIAAAQIECBAgQIAAAQItFBC0W4hpVwQIECBAgAABAgQIECBAQNB2DhAgQIAAAQIECBAgQIAAgRYKCNotxLQrAgQIECBAgAABAgQIECAgaDsHCBAgQIAAAQIECBAgQIBACwUE7RZi2hUBAgQIECBAgAABAgQIEBC0nQMECBAgQIAAAQIECBAgQKCFAoJ2CzHtqnmBkydPPtHf338s73/09fVlIyMjo3v37l3OG+t5AgQIECBAgAABAgQIFEFA0C7CKvRYD4uLi3devnz572amXavVrg0bHx93rjYDZgwBAgQIECBAgAABAl0XEF66vgS910B6NXtoaOhYerU6b0tBO5WgnSfleQIECBAgQIAAAQIEiiKQn3SK0qk+KiMgaFdmKU2EAAECBAgQIECAAIEtBARtp0XHBQTtjpM7IAECBAgQIECAAAECHRQQtDuI7VDXBQRtZwIBAgQIECBAgAABAlUWELSrvLoFnZugXdCF0RYBAgQIECBAgAABAi0RELRbwmgnOxEQtHeiVcixD0ZXb0VNRs1EvRD1202dPhSPX4/6IurdQs5AUwQIECBAgAABAgTaKCBotxHXrrcWELRLf2a8HzN4L2ol6o2otY3QnSY2EPV41AdRr0RNl362JkCAAAECBAgQIEBghwKC9g7BDL99AUH79g27uIfROPZ9UbMbPTwWX7+Puivq5s9G/ya+f1vQ7uJKOTQBAgQIECBAgEDXBATtG/QPx8PXohaihqJejPos6rmurU5FDyxoV2ph743Z/BJ1d9T6TTM7vhGypys1W5MhQIAAAQIECBAg0ISAoH0DaTAefhKVXpl7Pmo16veoB6IWm7A0pEkBQbtJqHIMeybaTO/VfnlTu4J2OdZPlwQIECBAgAABAm0QELRvRU03ePoj6tWNf/4zvh6O+iHPfmZm5khfX9+HeeM8n2X9/f3Zrl27svDK5ajValmqS5cu5Y414LpAvV4/OjU19VEHPNICfhz1bNT5Tcc7Ht9Pb1QHWnEIAgQIECBAgAABAsURyE86xem1E528GQdJ4boRtJfi8ZGo7/IOPjc3Vx8bG8uGh4fzhvb88xcvXsyWlpZ2FLSTrS1fYHV1NVtYWMgmJyc78bP9UnT0Y9TcFp0J2vnLZQQBAgQIECBAgEBFBTrxy3iZ6P530D5x4kT94MGDZZpr13oVtNtLPzs7mx06dKjdP9tPxSzSMb78j9kI2u1dZnsnQIAAAQIECBAosEC7fxkv8NS3bC3dJTldOp4+liht6RXto1Hf5k1kfn6+vmfPnmx0NN2U2badQCNonzt3LhcqXWY+NDSUTUxM5I41IMuWl5ezs2fPJq92/mw/GdZTUemy8bTdE3V/VPrYr8b2dTyYjnrHuhAgQIAAAQIECBDoNYF2/jJeNst0bfKnUX9Fpfecjm8EifQ5wSl4X9huQvEq4kS87/inCJF3lG3ine638R7t8+c3v633352ksYODg9nVq1c73WYpj7d79+4rKysrj8bVFfNtmkD6OK+vokY27T/dEO3njX97Or6m+x2kP1Clt2H82qZe7JYAAQIECBAgQIBAIQUE7UIuS7Wbatx1/MKFbf92cQ2hEbTb/ApttcHNjgABAgQIECBAgACBjgoI2h3ldrAk0Aja6RLyvC3dmTy9oi1o50l5ngABAgQIECBAgACBoggI2kVZiR7qoxG0m/nIrhS006vagnYPnSCmSoAAAQIECBAgQKDkAoJ2yRewjO03gvaVK1eaaj8F7QMHDjhXm9IyiAABAgQIECBAgACBbgsIL91egR48fiNo7+QGZ4J2D54opkyAAAECBAgQIECgpAKCdkkXrsxtN4L2+vp67jTq9fq1Mfv373eu5moZQIAAAQIECBAgQIBAEQSElyKsQo/10AjajRC93fTTmFqtJmj32DliugQIECBAgAABAgTKLCBol3n1Stp7I2inG53lbSlkpxofH88fnLczzxMgQIAAAQIECBAgQKADAsJLB5Ad4laBRtAeGBjIpUkhe21tTdDOlTKAAAECBAgQIECAAIGiCAjaRVmJHurj1KlTj8SdxOeGh4dzZ51Cdnov99jYmHM1V8sAAgQIECBAgAABAgSKICC8FGEVerCH06dP11dXV7NmLh+PsH04Pkf78x5kMmUCBAgQIECAAAECBEooIGiXcNGq0nK6hDxvLoODg2f27dt3Jm+c5wkQIECAAAECBAgQIFAUAUG7KCuhDwIECBAgQIAAAQIECBCohICgXYllNAkCBAgQIECAAAECBAgQKIqAoF2UldAHAQIECBAgQIAAAQIECFRCQNCuxDKaBAECBAgQIECAAAECBAgURUDQLspK6IMAAQIECBAgQIAAAQIEKiEgaFdiGU2CAAECBAgQIECAAAECBIoiIGgXZSX0QYAAAQIECBAgQIAAAQKVEPgHRASBPzHwugYAAAAASUVORK5CYII=", "text/html": [ "\n", "" ] }, "metadata": { "isWidgetSnapshot": true }, "output_type": "display_data" }, { "data": { "text/plain": [ "x**21 - 1 == (x - 1)*(x**2 + x + 1)*(x**6 + x**5 + x**4 + x**3 + x**2 + x + 1)*(x**12 - x**11 + x**9 - x**8 + x**6 - x**4 + x**3 - x + 1)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interact(factorit, n=(2,40));" ] } ], "metadata": { "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.4.3+" }, "widgets": { "state": { "77f2062df66e4781a624d87f0e54549d": { "views": [] }, "8139a32e46e047808fae364be1309f4c": { "views": [] }, "a9e505fd895a4e0685243e7428a7c6be": { "views": [ { "cell": { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "trusted": true }, "outputs": [ { "data": { "image/png": "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", "text/html": "\n" }, "metadata": { "isWidgetSnapshot": true }, "output_type": "display_data" }, { "data": { "text/plain": "x**21 - 1 == (x - 1)*(x**2 + x + 1)*(x**6 + x**5 + x**4 + x**3 + x**2 + x + 1)*(x**12 - x**11 + x**9 - x**8 + x**6 - x**4 + x**3 - x + 1)" }, "metadata": {}, "output_type": "display_data" } ], "source": "interact(factorit, n=(2,40));" }, "cell_index": 7, "root": true } ] }, "b37a5b98616644f4970c9fa8e180e4e5": { "views": [] } }, "version": "0.0.1" } }, "nbformat": 4, "nbformat_minor": 1 }