{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sympy : Symbolic Mathematics in Python\n", "\n", "http://www.scipy-lectures.org/packages/sympy.html\n", "\n", "![](./img/sympylogo.png)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy import *\n", "x = Symbol('x')\n", "y = Symbol('y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Integration" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x**3, (x, -1, 1))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "log(x)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate( 1/x )" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "log(2*x + 1)/2" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate( 1/(1 +2*x) )" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-log(2*x - 1)/2" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate( 1/(1 - 2*x) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Equation solving" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{x: -3, y: 1}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Differential Equations" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "f, g = symbols('f g', cls=Function)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "f(x) + Derivative(f(x), x, x)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f(x).diff(x, x) + f(x)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Eq(f(x), C1*sin(x) + C2*cos(x))" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve(f(x).diff(x, x) + f(x), f(x))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[Eq(f(x), -asin(sqrt(C1/(sin(x)**2 - 1) + 1)) + pi),\n", " Eq(f(x), asin(sqrt(C1/(sin(x)**2 - 1) + 1)) + pi),\n", " Eq(f(x), -asin(sqrt(C1/(sin(x)**2 - 1) + 1))),\n", " Eq(f(x), asin(sqrt(C1/(sin(x)**2 - 1) + 1)))]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve(sin(x)*cos(f(x)) + cos(x)*sin(f(x))*f(x).diff(x), f(x), hint='separable')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(x, x)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-1/x**2" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(1/x, x)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "-1/(2*y**2)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(1/(2*y), y)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1/(2*y**2) - 1/x**2" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(1/x, x) - diff(1/(2*y), y)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from __future__ import division\n", "from sympy import *\n", "x, y, z, t = symbols('x y z t')\n", "k, m, n = symbols('k m n', integer=True)\n", "f, g, h = symbols('f g h', cls=Function)\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(Eq(Derivative(x(t), t), 12*t*x(t) + 8*y(t)),\n", " Eq(Derivative(y(t), t), 7*t*y(t) + 21*x(t)))" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq = (Eq(Derivative(x(t),t), 12*t*x(t) + 8*y(t)), Eq(Derivative(y(t),t), 21*x(t) + 7*t*y(t)))\n", "eq" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[Eq(x(t), C1*x0 + C2*x0*Integral(8*exp(Integral(7*t, t))*exp(Integral(12*t, t))/x0**2, t)),\n", " Eq(y(t), C1*y0 + C2(y0*Integral(8*exp(Integral(7*t, t))*exp(Integral(12*t, t))/x0**2, t) + exp(Integral(7*t, t))*exp(Integral(12*t, t))/x0))]" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve(eq)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Eq(Derivative(x(t), t), 12*t*x(t) + 8*y(t))" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq1 = (Eq(Derivative(x(t),t), 12*t*x(t) + 8*y(t)))\n", "eq1" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Eq(-4*Integral(2*y(t)*exp(-6*t**2), t) - 4*Integral(3*t*x(t)*exp(-6*t**2), t), C1)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve(eq1)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Eq(Derivative(1/x, x) - Derivative(1/(2*y), y), 0)" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eq1 = (Eq(Derivative(1/x,x)- Derivative((2*y)**(-1), y)))\n", "eq1" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ValueError", "evalue": "The function cannot be automatically detected for Derivative(1/x, x) - Derivative(1/(2*y), y).", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdsolve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meq1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/Users/chengjun/anaconda/lib/python2.7/site-packages/sympy/solvers/ode.py\u001b[0m in \u001b[0;36mdsolve\u001b[0;34m(eq, func, hint, simplify, ics, xi, eta, x0, n, **kwargs)\u001b[0m\n\u001b[1;32m 623\u001b[0m hints = _desolve(eq, func=func,\n\u001b[1;32m 624\u001b[0m \u001b[0mhint\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhint\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msimplify\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxi\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meta\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0meta\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'ode'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mics\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mics\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 625\u001b[0;31m x0=x0, n=n, **kwargs)\n\u001b[0m\u001b[1;32m 626\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 627\u001b[0m \u001b[0meq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'eq'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/chengjun/anaconda/lib/python2.7/site-packages/sympy/solvers/deutils.py\u001b[0m in \u001b[0;36m_desolve\u001b[0;34m(eq, func, hint, ics, simplify, **kwargs)\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0;31m# preprocess the equation and find func if not given\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprep\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 175\u001b[0;31m \u001b[0meq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_preprocess\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 176\u001b[0m \u001b[0mprep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/chengjun/anaconda/lib/python2.7/site-packages/sympy/solvers/deutils.py\u001b[0m in \u001b[0;36m_preprocess\u001b[0;34m(expr, func, hint)\u001b[0m\n\u001b[1;32m 75\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfuncs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 76\u001b[0m raise ValueError('The function cannot be '\n\u001b[0;32m---> 77\u001b[0;31m 'automatically detected for %s.' % expr)\n\u001b[0m\u001b[1;32m 78\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfuncs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 79\u001b[0m \u001b[0mfvars\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mValueError\u001b[0m: The function cannot be automatically detected for Derivative(1/x, x) - Derivative(1/(2*y), y)." ] } ], "source": [ "dsolve(eq1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }