Skip to content

Instantly share code, notes, and snippets.

@lidavidm
Created March 24, 2015 01:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lidavidm/d97f027079a2fd8705e6 to your computer and use it in GitHub Desktop.
Save lidavidm/d97f027079a2fd8705e6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"cells": [{"cell_type": "markdown", "source": "# Lightning Talk: SymPy\n![http://www.sympy.org/static/images/logo.png](http://www.sympy.org/static/images/logo.png)", "metadata": {}}, {"cell_type": "markdown", "source": "## Why is SymPy Cool?", "metadata": {}}, {"cell_type": "markdown", "source": "* SymPy does math\n* SymPy is open source\n* Math is cool\n* Open source is really cool\n* Therefore SymPy is really cool\n---\nMore seriously:\n\n* Python library - combine it with NumPy, matplotlib, other shiny toys\n* Python *library* - put it in your next application. Want to make [the next Wolfram|Alpha](http://sympygamma.com)? Do it with SymPy.\n* Use it interactively - helps you with math homework\n* Written in Python - don't have to deal with JavaScript \ud83d\ude01 (or Lisp, if you tried to use Maxima)\n* Don't have to pay for Maple or Mathematica\n---\nGrabbing SymPy:\n\n* `pip install sympy`, `easy_install sympy`\n* Included in Anaconda, or use `conda install sympy`\n* Part of Sage as well\n* Want the source?\n\n git clone git@github.com:sympy/sympy.git\n---\nWhat is symbolic mathematics?\n\n* TI-84 or MATLAB - do calculations with specific numbers; get approximate results\n* SymPy or Mathematica - do calculations with variables, exact constants; get exact results\n* Compare:", "metadata": {}}, {"cell_type": "code", "outputs": [], "execution_count": 148, "source": "from sympy import *\ninit_printing()", "metadata": {"collapsed": true, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 150, "data": {"text/latex": "$$\\frac{\\pi}{2}$$", "text/plain": "\u03c0\n\u2500\n2", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAAlBAMAAABrOn4UAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdpmJMlQiZrurEN1E\n782PMUhmAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAlElEQVQYGWNgkP////8nBgZmk8B0sQQGBlcG\nM0YHBhBo4FwAolgmcIMoBqYC/gUgev0C/gMgWpqB1wBEtzNwgmkQmwIAdAUQfCDBhCSNFpBqrgkM\n9geANNC1vBeANO8GBs4vQJrvF4QGMrl/AQkgOA916E4Il0kBQgtBKFYFhjQQy4mBQQxIsW021twA\npPmAztrAAADNgiR54A4W0wAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 150, "source": "integrate(sqrt(1 - x**2), (x, -1, 1))", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 152, "data": {"text/latex": "$$\\int_{-1}^{1} \\sqrt{- x^{2} + 1}\\, dx$$", "text/plain": "1 \n\u2320 \n\u23ae __________ \n\u23ae \u2571 2 \n\u23ae \u2572\u2571 - x + 1 dx\n\u2321 \n-1 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJMAAABKBAMAAABN+nvBAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMs2Zq91U7yJ2iRBE\nu2Z2muS3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAADA0lEQVRYCe1Yz2sTQRj9EpPtZneTFC96kcRQ\nUBGxSL34K0EPWjw0CKItijlpq5QG9OBFGvQqNqCXtEgWT4aCXaSi9dIcvHix8Q+QBKRXjRoDtpa4\nm53ZnS8m2yydQymZQ+e9973vTTp8zGEByPJEKdrq7hlKbjXC6hd6UdZdbAZ2/l2lN7uCbuvi8Vq2\nW2/Px/MGTszzSgtcvMcrark4yisqzysI4Dq3KPEPt6jAX25RwXUcFW90saq4h7AwfhnEUltXV2Ik\ngWy+IqKuSB6/MQ9dNWNzuYj4KcTckYbG+uUoy3QsnT7ZonSknt+otCuFKMBLONuidKShGiq9QUwn\nVyGSadU6cB8e9lettmswU2zVCN93Fxf8aNjlJK4abApdpi7cokIdm5fRsAcquGow+gRNmCX53AiJ\nUlCrfmaabfazxMTSINFIFECeRElJ7F4oES4bew4XDfaVSv9FeekhxHFUNYE4ZuzsOXLuwscCKKrS\nbzpaoh4VIilYevZ4NmuWARopE306oO8h1STNv+9hNXsJdt+c1EwRRyn3oazJamjUHyU9YiND0FQF\nwE+6mtI8LGjjMN1oEAOOeluBYyBp0rqQIXWBGqEvCXDbUF9fNtZ+0OAIMenbi1jsSiw20BSa1x7X\nYAxk8JYsj/STQuM1PUyJuePpxb/qAcjGRIazVkvwF4XyBgiDlDR3zw9EUZS8BkJVL0f6LU+fPbHx\njDdj6Tq4E6jCHCPgqDoEo+OCloeARjzMsM+oH5hGUOrBqlhhFBQFh2A1oa6kyvCEWlbSFEGwetDC\nOpCH555+YwUaNTQ9UAFYnN07XFzMLZ3RsbnyCYpAqdnYEhlAoxgJwZGKTW/YV2iLNnpnw7aIbX/e\n1tG1aE1o1x2djJ6NThXXemDNdUunBp8x/HyWv8onR08JR7lFRVRuUd+dp9LNOefdmJ29/GZBwY+b\n87FOVSnpKznVXdSC6T0ZF3Ynq1j47FTeITVPlNc/0vvm5OImt9mHoskv+tJgm/0qcp9C2sXFOlp5\nfHP6Byvm0qrG9rkeAAAAAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 152, "source": "Integral(sqrt(1-x**2), (x, -1, 1))", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "or even:", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 147, "data": {"text/latex": "$$\\frac{x}{2} \\sqrt{- x^{2} + 1} + \\frac{\\operatorname{asin}\\left(x\\right)}{2}$$", "text/plain": " __________ \n \u2571 2 \nx\u22c5\u2572\u2571 - x + 1 asin(x)\n\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 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMwAAAAsCAMAAAAeuKdCAAAANlBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHL6OuAAAAEXRSTlMAEHarIkSJ\nZt3NVLsyme8wYLg+A4EAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAPESURBVGgF1VlZgqQgDGUTWZ3h\n/pcdCEKxWdLVVd0MHwox4HskhKAI/YeF7TXondXtFVvmIENYTLdiuj4b43iLGtqyg47lUPE/EO62\nB8nHNuwVV5OIzjAI4WM1lC0eZkwr8m0mBkIktyjFhFC2kV+31E5ODIaonUjEtKMIGXlY4xFmPyKn\nl9WwbZRiv8p2QZD45UWkgvtYDx9DsArzL30LIaE9EeaSc+kYlxvYe0TPMULcYaSSdrTX42rd28pj\n0L6mDu9UmweyHR4RCpbQQEbDenBpbxEK+jawVXS+0FN2kRs6wKWP6o9n760Zwm0wgHCawMyeZGDS\nXfKzI66OBrZxGUvWzJJHhZ5L6yH5TA1LzZBx3jyYS+fCGjjJwExniCeZACLL/NLKZGCIC4jsp5aS\nDo7ikeA/YdJ35+dwSOZ0s6icQW/RzRRGJNAiYYy+2DvDcKvtuGs/2DMJbPfKmY2AQ1G/RoZkzgDQ\nwI4BYHMKaU+mTd7O994mCtx7N32H9Y7gTdyZ/S8EAO9zSIODxWt2KQ5BuIVtIfPBlBBM7J6CRTN5\nNsaORlo0Q0A1OW4WD75aZdQSjokkG9/JzjdkqHMUw9Uo7Q4IbT7ggUO1sOVof20g4OiKjbRsCu+G\nLDj4j5VROjNOCxpI/MJgtZryu8PzosB1nuvMPn010bw3DCDw+UNVVN3G1NKObqNT9b9phOVUl9uV\nHdTJlGHikiyG74GSd5Lpt/GeXoEmVW9XTFDszf5hMl3kfXZszgsgRvzErLiXGevmg+JWx5JPkymQ\n3FSZyIfVK8OUGauRSimd+cPgy5DZdplObXtm1fAvM9YDUupaYRkyCKmUbYs031iKXMLuFOTjRJvL\nUMQBt3OXC0TLAHClU0/IS63yrHIOcET3UleGAbWcXgze+oplShyv1gdQ/DTChi6TYUY6zxJt9AqZ\n0UveIcMuJHjqPGsPRmwy1k5jJTIIznv9p7YEus1YkzzflyLD/NliK5ZvRhkrbcbaPPZGrdMZ/5ni\ncDIcUIrS6hSP3lz1B5xrw9y/awbojM79m3oNZq3W1R6+OXptmH6AVoK7TLDV8OF9Qqfo1WMsHhZV\nHHDz+kgiwoeFhcoI4xAehRB8pH0fdAgcWIfqvyIcYRwCiXskXcwWNdRpjBLOGmuT+SJG0R2f6rlZ\noTWLcbv4S7UCh4RhGqP4TihOb/vwfRbj+Xvjw2i+N/wsxvQD53tv+2zvWYyQILOvbcmfRd6PPovR\nQLIff4n0o6whmcXov2BwbunV14slyExj9H92QlmazBzGf90cIxLPlu80AAAAAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 147, "source": "integrate(sqrt(1 - x**2))", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "What would the TI-84 give you? Something like $1.57\\dots$. And SymPy can do things the TI-84 can barely express, as we'll see.", "metadata": {}}, {"cell_type": "markdown", "source": "## Demos", "metadata": {}}, {"cell_type": "markdown", "source": "You're writing a complicated if expression and you're wondering if you can simplify the cases a bit.", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 154, "data": {"text/latex": "$$\\left(w \\wedge \\neg y\\right) \\vee \\left(x \\wedge y\\right) \\vee \\left(x \\wedge z\\right) \\vee \\left(x \\wedge \\neg y\\right) \\vee \\left(w \\wedge x \\wedge \\neg y\\right)$$", "text/plain": "(w \u2227 \u00acy) \u2228 (x \u2227 y) \u2228 (x \u2227 z) \u2228 (x \u2227 \u00acy) \u2228 (w \u2227 x \u2227 \u00acy)", "image/png": "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\n"}, "metadata": {}}], "execution_count": 154, "source": "x, y, z, w = symbols('x y z w')\nexpression = (x & ~y) | (x & y) | (x & z) | (~y & w) | (x & ~y & w)\nexpression", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 155, "data": {"text/latex": "$$x \\vee \\left(w \\wedge \\neg y\\right)$$", "text/plain": "x \u2228 (w \u2227 \u00acy)", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHAAAAAUBAMAAACnq6Q0AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB6UlEQVQ4EY1UPWgUQRh9e9nd+yfHpbJyiZDu\n4hVJQLBYOUQlTUiVRgw2VsJhZ3exiMFqC9MlcKWNcqigndeIRYoLFuYHAlGwsjEQsfW9mcvt7F0K\nH8y8n29n7rthdoFJ+O3JLJvk46wfuuVL00y4kLqKkX3NL40cTf5IpeJKKqf61PlI0z4nB8Uxr1IY\njR6oNCkLNU3xKDRibyPr5bzTNFOD92XvpplRi7Njgew2UL92ey6ifM3xngMNjvpX5JPSd1kvKYgu\nwIrP/ATeev5ZIWHMNis9lT9wrL9BuRn8kQ27YVc8BCu538BThLXwrBQzzUWYWlH1BeB3jzDdtg0U\n4GtfHG4Rm6qUuf8reCiSCa8De8g/qfEDgxj7yp8AN8UGLVWmI2BAKxaO8cgwFyI4xzwblueZ7okN\nWgjOMOjbhWLhHjqG2SqqHbxjw1Ql/mwxpjBooZpoS6yhVLuOXE1p+UskModTbmIToZwWabFFi2fG\nLXU4D7qfcMekwUezHo/pcknwC58VmzbZrkUF1V7wl/obZmbrB22b7lpaE508nJkz8aKccwW8pcY5\nkx3FF7hlRfbKrSi0b8DwOf5L+J2hcWn8krs14Aauci/nkjtlc/Ecn5HP8Zbeea2c6rKjJ+Rqo8/s\n8r3/69PxD53eXa6bcnX0AAAAAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 155, "source": "simplify_logic(expression)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "Or you're wondering if the if block will ever even run!", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 156, "data": {"text/latex": "$$\\neg (x \\wedge y) \\wedge \\left(x \\vee y \\vee z\\right)$$", "text/plain": "\u00ac(x \u2227 y) \u2227 (x \u2228 y \u2228 z)", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAUBAMAAAApXS8NAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAmd2JIqsyZrvNdlTv\nRBBwfNgZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC70lEQVQ4EX2VT2gTQRTGvySb/80aFbT1YlBB\nVJR6bUGXglRRQbAICkIQhN7aakHsKYhV6cUIIl6EDeIlSBtFbyK9KlRKT9JLF6WHFsEeREGx+L3Z\nnZ3pWn2Qme/7vdmd2TezG0DHoBbJfjwJnNEk+ZfPeybjNIzeqLLeRo+TCf8fO2RyRc9owDZuM8po\n+NCMrIvMGY8EWDGpMSOpHtiuLzIRzFdN8oLICeORABk/zu2LFUXuVmDZL6HWMO2Z3FWRR4xHAriz\nOufUtJI+u+hbtjivjIYDdsoDKtYTQSptgyd6cImj3PbQYliOFdQk4bZ8nAmQCu8QQbSYWX129qnP\nvsxUwROwC84HG2BhLjcKbCVTUaD5jGv+AeX60S99pjyLGSDftCHucube/MG0oizPsGR736C0JkID\nd6rVTXsT2/Yw9iLdAY7hePBKBnH9p6Q7nWriHpdZE6MhDnHmILNe9gS2gcvsnE4PCg0LwIUj/iV/\njBPomgcCPA5t3ke2Thl0+fjJLVdL0xBzfAIUG+HQT1Cn2MV7bPEFRYBqOGAzwh8jnAByN4l0gFxD\nxFKQ+64niCEnQHQ3INXJjIqvrGOkLkIDVM6JjSeQEkHuJvGCP/U29aA0y4tr9AayRLywLi1r00yr\nnsV8vgHgtbILquUTyCa/5TZNC5CbyySYRIHrCDc5htzkcjCDUiAjcCd8zThuUnkNeL6yBDdDmEOm\nisqvwpr6jqnysCJAN5Y4caqX0sCjLF3nPgbDSz/y2DBSjcqPDeDK9YnDBNtDqMrgXppu3RCfnWdT\n8tks9+32gGKd0kA+9XJ7dSdnlihWVeeeb31TQoNq/p3c5lEI2VqfioqCddX2sB0QZWDaE6/DCSLF\nXVARA3FOTTFpxmJlRLbp/qYL3+4Y2x+7GF7EV1lwMqyPXcFLJnlcRws+D320tDh/O1ZG7MeUMUat\nGOk0jNaq0t5B+dfUm/3hLLbq+iq7t9cSnQo7HerxJFJHLQk39XkPfwCS26bHy2mrhwAAAABJRU5E\nrkJggg==\n"}, "metadata": {}}], "execution_count": 156, "source": "expression = (x | y | z) & (~(x & y))\nexpression", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 157, "data": {"text/plain": "{x: False, z: True, y: False}"}, "metadata": {}}], "execution_count": 157, "source": "satisfiable(expression)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 40, "data": {"text/latex": "$$x \\wedge \\neg (x \\vee y)$$", "text/plain": "x \u2227 \u00ac(x \u2228 y)", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG0AAAAUBAMAAAB1+65sAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB50lEQVQ4EXVUvUscURD/7d7eure7Zx4KQhp5\nnpBOlKBdipMjGC3CYS9nbCwVCWgT2IQQtNsiXQhcwFYQTBFI4XUpLLzOT9A/4RRsQorMzLvbD72b\nYuf3MbPMvTd7wOBYGGS9H2SI7hwOsgvVnOPkGEqpG4rT6vlW3EOSS+0c/ZCyQovwkE6EtQQxOPmY\no59TFs4Q9lQijCeIwVwlS50ow74SXkl5qQ6MTL5+oVmyYi91AJumtiqzyzLTATk/uWZK461CuQ1r\ndeiTF3OD23SbnLsRbAJj2NF7zGnG8JCy699imn5qDFe5d35VPDjSf75L8QVeE3iHDbXPnq1RqFNe\nKsf4DfgRLJT4RRRbwCuD6FnDMNUpfDOKFeE5IzWscQ+EHcLPNCsAneaJQfQ0feAiiUusS26o8F+3\n77Qlit9G5qprMie4SGIRkeQL2LdAMYKvpmEr0ng9uNdEDXwuP+wOJkQI/mjJRwhm5FwazWPIAsuM\nyc2HcNso/g06DrVTFH8pyVdokFBexWhl5EysOdYzN0+zWC8npralHPhu8ujaTZVma3VVSnWGZoGN\nmNkzEuaNCFwQeNMj/XJmrxO7EFsPRPJ7nbgGBNVHAlFvM9C0bfFTJ1X6fbfFyjUV9Htj2meOOcMT\nSP8T/wFU4lTmh8SYDAAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 40, "source": "expression = x & ~(x | y)\nexpression", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 42, "data": {"text/plain": "False"}, "metadata": {}}], "execution_count": 42, "source": "satisfiable(expression)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "---\nYou're doing your calc homework and wondering if some series might have a simpler form:", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 44, "data": {"text/latex": "$$\\sum_{n=0}^{\\infty} \\frac{x^{n}}{n!}$$", "text/plain": " \u221e \n ____ \n \u2572 \n \u2572 n\n \u2572 x \n \u2571 \u2500\u2500\n \u2571 n!\n \u2571 \n \u203e\u203e\u203e\u203e \nn = 0 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD0AAAA5BAMAAAB33T7MAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHaZZiKJVKtEu+8y\nzd3blrGjAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACZUlEQVQ4EX2UTWgTQRiG30l2k2x+1x68CDZN\nwIsikVZBUBpQqmLRKIh4ihZBvdh4EDwIKUEPHsQgiKIHoVcRf6DFg9LFi3hq/DmIIMabRTSJtFZp\n6ziZzM7+ZNY57Hzv834zO9/OzgDdNjACHD3DQ9WDXLs7o21PZlVel4WAB3ngVpCvAakOEP2PH/8B\nvA7yoxZ2bnxDCh5/z3hOgrFhi5z/YHr8A4uY8QCv0AeaYGsKbrGs8TjYBRJWuGApE0ju6s0JlJG+\nrfbX41D2O+4gdFo5HKcwaV6U1mfqtJ+cmvgoXaBKLa7Wndg/tyJ4L68nYrQpKLRWhYfJVZt0+9Zv\nqcKNbngh1MaQZJinRSl2schYjrd1B0GjS9JnfwJIbSi/VxIWPPrrVv3xBlrohy5i0GWXUoSTK6aC\nOihFeV0O8EVk7peP+GSV1n3EK8P0iRf4Vcv1goyzn7QtEstf/CO8enPJq33K8Gyoz2RyvtLPXIQ8\ndQlFmJpSQOCrTR/agafXqZARpzj3FUDs3+KgU9w+9wxrPeEqznsin/X8siyOjBY4Ms4ey9WAd1yQ\n2V4acPyGOCrh+DQGS5jmRmrtE2/f2LaIFb1KN1C2wC5F1kZd2yXOlTlYx2HgHPdVjypwHdiisjjb\nDSwSmIH+LKKdSKAL/Q8ijXHywp8RmjjJkdGEfqXi7I+dN4ZLdqjsF5AJXhM72KtIyG9tT6CNvGRX\nP2/JJaSLIpaddr+YKMW6X/h9soN0VhoiOLJVvpSNT/T5qOGeSGXvz9T94/Ecw0k+/1uo1q+3sXBZ\nDMor6jemsKko/MiObf7p/wHJirIsKdJp7AAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 44, "source": "n = symbols('n')\nSum(x**n/factorial(n), (n, 0, oo))", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 46, "data": {"text/latex": "$$e^{x}$$", "text/plain": " x\n\u212f ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAQBAMAAAAG6llRAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAEIl2mSJE3e9UMqtmzXCQ\nkgMAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABlSURBVAgdY2AAA2Uv6wUQFrPAXvYECJOL4Q6EASKf\nwplcD7ig7DimAiYoU9pMWRHIZFQ2CYCKpAewKkCYrJ0MIgsgTO4e44MQFgPfBiiDgYFPAc7kADIN\nIDzmCwwiMMNMbA5ABAE+RA6ieYoxNgAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 46, "source": "Sum(x**n/factorial(n), (n, 0, oo)).doit()", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "Or maybe you're in 2800 instead:", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 48, "data": {"text/latex": "$$\\sum_{x=1}^{n} x^{2}$$", "text/plain": " n \n ___ \n \u2572 \n \u2572 2\n \u2571 x \n \u2571 \n \u203e\u203e\u203e \nx = 1 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAADYAAAA5BAMAAACPPcU7AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZpkydkTvIhDdq1SJ\nzbuhrXSrAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABzElEQVQ4EdWTP0gcQRjF3zoX99Zd9Vorc7FS\nCLnC3kFiETnQIFgF7iBF7O4sAukyhOMEqyu0v0LSiQd2pjnkCu3OMglisEqXS0IS/xAmu3O7881N\n3MJKnGLn995j/nyzM0DUnPzsvIIbPk4pN1y9wY+sN88wLlIy7GA1LcJLPGIpodvD9n5K9qCJYi4l\nuwf2qDQaH9ywL38qI7vx/L0sU3Z4LoC9S21MXGsMqiNdwJNN7TzW5FXZH4DJ79oZKiToLbu/Qp6U\n9Ft5kgH+RchjskEOkcdDzlZ+kEN0qLAkW2Ql5DxUFMi1xKH+BVaUOPtLXkzs84evCuuybYS1xddF\nPixlT3m+jGqJW7btbHndRAFPfgstAhFc+FUtw3Nra5HF6BctQnAvhSHHuSGQeWWquYKpSobyxRIy\nQqeM/htQan3Duo5Q58TYfFrL50h/IrRprGs7pI+F5pamPjhUgGNnRgH243WpgHf2Bai34zXcg/ga\nxzrszk5V+1gJ736D7IiGjOcg+WB2l4qlHyybsWow9+nfJutMLRbiwfa4jNj1lnejY8vBzhhO9JJ2\nBoRvPmVOsB6DmpP/N+fboBHoceWE+v3mQucodtzpK26G/wB1K43K3CLCWAAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 48, "source": "Sum(x**2, (x, 1, n))", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 50, "data": {"text/latex": "$$\\frac{n^{3}}{3} + \\frac{n^{2}}{2} + \\frac{n}{6}$$", "text/plain": " 3 2 \nn n n\n\u2500\u2500 + \u2500\u2500 + \u2500\n3 2 6", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHYAAAAvBAMAAADECCMdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACWklEQVRIDeVWO2zTQBj+kriOHdd21AEJMRCl\nShcqQAgGJJAsKKyNeM1GlQoDQxgoj8kDI0oyMTBlYWFJVFaELCEGUJCywkJgYmwlBlOpCo6d853P\n94sRIW657/F/vjufHwekrbUVLJDcre1QzqJSn+gdOZTyslcJ1Q5T9Ya9x3C+tzzzZ14pMmpcq67t\nF6vzSref55zVIo6VaOm9Up6LVpu0FgY1Z2DtT1GYB0SJ7RMGk7t97ZBhqV/BUUmRqOXZPyRpQc2P\nrx6pHaC0unHzHMzWqidXpI4zmxV3fuXslevxHdSrD9Ar5ObXoR34D9tG/MS8sEJsKveWdszBG2i/\ngKBXx1d5ugmnHcPYR/IMD4ELyixop7aH5A25BxwayjDt6CHcSQB8Ry0qK7O04zQwDBqI35Jy+FmV\npR1s1rFu91EaQbs4UGVpB8eAy19Umb+lvSQHph0WoSto5//IznibL3h9PH47Hr+bQ27MJMdNrbkq\nNfpu0g67BF1BO/9W9lLzCZtw3IurunrnsdppXku/j5qP4YSXPOXQOI1TdU6586yuh4m+dAB3xCsE\nVAngTAWewR1UOwkpfUMvzGQROCNU4u9woZXEo4A4Z6FyOVJnq1NeZOxyLCFL9dd3P7RuL+q0E3el\nBKfHGxxnqPcJzoCxk8LdZFrav87TlPUi6Nk/18mQVKr7kpDQeFvs9PSjeahSJ4Zbqijif6ednhPc\niMzWfGwo0pUpG9fpwBI3TCh+DtwQKINmvN5pQuwJhm0m53ptt7mlfOLOoDtIK49s389FMrIcf1yU\n2fL2eeA3Qn+xliVKDYwAAAAASUVORK5CYII=\n"}, "metadata": {}}], "execution_count": 50, "source": "Sum(x**2, (x, 1, n)).doit()", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 132, "data": {"text/latex": "$$\\frac{n}{6} \\left(2 n^{2} + 3 n + 1\\right)$$", "text/plain": " \u239b 2 \u239e\nn\u22c5\u239d2\u22c5n + 3\u22c5n + 1\u23a0\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n 6 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJcAAAAlBAMAAAC9s2Y0AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACqElEQVRIDa1UO4wSURQ9wAADAyyxMLGCrJHE\n+KNRE+OHmI3tbqFb6iRE18IYLPwWZgpLE9DCwgYsbCyErImVGszGxlAQOxt3tTI2arIFrmvwzps3\nj/sAwV24xbx7z7nn8ObN4yKwe+7cYUwpItHrKBemZPbYamK+MiUzp5zG6lCv3A1nKD4KrAPHh/HB\nQqg5DB+JXQH+mLLjAeu0CrF1Vo5Lw6LhC+KdoNcaKzGJlTZ+snJcGshTBymCzY9ea8LRJPGOVo4p\nDhAfaMA4UfMaL+r91oJej64sR+MN2smZpdsKy6lMJqdn7/RDvTps93LKgjbMPA6lJZjUWToRG/W2\npvCL5w6xP/xKrKkaQg5SaxLcgV0ye+qt4Q3MNCQkFombR045VL/mFKrk1EDolwfG3j+7JWkpCnxG\nuckVEgcuOAQvcQqfgERHmaW6XX/jStT3mgoXZuc1M7q+FFZnYJAokbkMTipcmGUcoZePm2LNZAcG\niS8y9l0GJ33ce81qhZutiOIFBgaJEuFgmpMKFzubT6MrQpzOS9csYkMfJPtbrTetlvdDSH1VJMc9\ns5rYjHwIwSIV/YNE7sAoILrByYGdMTfXLG5jDnyQuLwUzXRcM0bqZtWC2+vHUUoeAWfBBongpChV\ngrXOSd1M/5p0UYzl2WKDDxJulmyjvsBJ3YyuKQuyTtDnaPBBws2w89I1bcr4ZsXvK235Dwju2es5\nptLMmae+iGNuruPvCDHfumfqRiQrlsHHvUFIIBpuuqM0asO7+oit/UP0X3AyT22Zguo9prJtJFaF\nRHd7wvu9dOvZB1ey+XDRP3i6sdsOo0RSc7ONb77FEz/Z+hpxSGN2HVx1k6nEb2DVf8+JDV+RWXti\nF2lwcpo7q9KZTWtjCGVN9TUnN80VK5ObCIe/zQ+6U6Ff93EAAAAASUVORK5CYII=\n"}, "metadata": {}}], "execution_count": 132, "source": "Sum(x**2, (x, 1, n)).doit().together()", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "Or your 2930 teacher decided to assign you a really long, tedious problem:", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 137, "data": {"text/latex": "$$3 \\frac{d}{d x} y{\\left (x \\right )} - 3 \\frac{d^{2}}{d x^{2}} y{\\left (x \\right )} + \\frac{d^{3}}{d x^{3}} y{\\left (x \\right )} - 1 = e^{7 x} \\operatorname{sin}\\left(3 x\\right)$$", "text/plain": " 2 3 \n d d d 7\u22c5x \n3\u22c5\u2500\u2500(y(x)) - 3\u22c5\u2500\u2500\u2500(y(x)) + \u2500\u2500\u2500(y(x)) - 1 = \u212f \u22c5sin(3\u22c5x)\n dx 2 3 \n dx dx ", "image/png": "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\n"}, "metadata": {}}], "execution_count": 137, "source": "y = Function('y')\ndifferential_equation = Eq(y(x).diff(x, x, x) - 3 * y(x).diff(x, x) + 3 * y(x).diff(x) - 1, sin(3*x)*exp(7*x))\ndifferential_equation", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 138, "data": {"text/latex": "$$\\operatorname{y}\\left(x\\right) = C_{1} + \\frac{x}{3} + \\left(C_{2} \\operatorname{sin}\\left(\\frac{\\sqrt{3} x}{2}\\right) + C_{3} \\operatorname{cos}\\left(\\frac{\\sqrt{3} x}{2}\\right)\\right) \\left(e^{x}\\right)^{\\frac{3}{2}} + \\frac{e^{7 x}}{8294} \\left(5 \\operatorname{sin}\\left(3 x\\right) - 27 \\operatorname{cos}\\left(3 x\\right)\\right)$$", "text/plain": " \u239b \u239b ___ \u239e \u239b ___ \u239e\u239e 3/2 \n x \u239c \u239c\u2572\u2571 3 \u22c5x\u239f \u239c\u2572\u2571 3 \u22c5x\u239f\u239f \u239b x\u239e (5\u22c5sin(3\u22c5x) - 27\ny(x) = C\u2081 + \u2500 + \u239cC\u2082\u22c5sin\u239c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u239f + C\u2083\u22c5cos\u239c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u239f\u239f\u22c5\u239d\u212f \u23a0 + \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n 3 \u239d \u239d 2 \u23a0 \u239d 2 \u23a0\u23a0 82\n\n 7\u22c5x\n\u22c5cos(3\u22c5x))\u22c5\u212f \n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n94 ", "image/png": "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\nZjz/odu/Abgc8o2D+jQzAAAAAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 138, "source": "dsolve(differential_equation)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "---\nYou're doing physics homework and you have to figure out how the heck a double pendulum moves. Specifically, you want to derive the equations of motion.", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 54, "data": {"text/latex": "$$\\left[\\begin{matrix}u_{1}\\\\u_{2}\\\\\\frac{1}{2 l \\left(\\operatorname{cos}^{2}\\left(q_{1} - q_{2}\\right) - 2\\right)} \\left(g \\operatorname{sin}\\left(q_{1} - 2 q_{2}\\right) + 3 g \\operatorname{sin}\\left(q_{1}\\right) + l u^{2}_{1} \\operatorname{sin}\\left(2 q_{1} - 2 q_{2}\\right) + 2 l u^{2}_{2} \\operatorname{sin}\\left(q_{1} - q_{2}\\right)\\right)\\\\\\frac{1}{l \\left(\\operatorname{cos}^{2}\\left(q_{1} - q_{2}\\right) - 2\\right)} \\left(- g \\operatorname{sin}\\left(2 q_{1} - q_{2}\\right) + g \\operatorname{sin}\\left(q_{2}\\right) - 2 l u^{2}_{1} \\operatorname{sin}\\left(q_{1} - q_{2}\\right) - \\frac{l u^{2}_{2}}{2} \\operatorname{sin}\\left(2 q_{1} - 2 q_{2}\\right)\\right)\\end{matrix}\\right]$$", "text/plain": "\u23a1 u\u2081 \n\u23a2 \n\u23a2 u\u2082 \n\u23a2 \n\u23a2 2 2 \n\u23a2g\u22c5sin(q\u2081 - 2\u22c5q\u2082) + 3\u22c5g\u22c5sin(q\u2081) + l\u22c5u\u2081 \u22c5sin(2\u22c5q\u2081 - 2\u22c5q\u2082) + 2\u22c5l\u22c5u\u2082 \u22c5sin(q\u2081 - q\u2082\n\u23a2\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\u2500\u2500\u2500\u2500\n\u23a2 \u239b 2 \u239e \n\u23a2 2\u22c5l\u22c5\u239dcos (q\u2081 - q\u2082) - 2\u23a0 \n\u23a2 \n\u23a2 2 \n\u23a2 2 l\u22c5u\u2082 \u22c5sin(2\u22c5q\u2081 - 2\u22c5q\u2082)\n\u23a2-g\u22c5sin(2\u22c5q\u2081 - q\u2082) + g\u22c5sin(q\u2082) - 2\u22c5l\u22c5u\u2081 \u22c5sin(q\u2081 - q\u2082) - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u23a2 2 \n\u23a2\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\u2500\u2500\u2500\u2500\n\u23a2 \u239b 2 \u239e \n\u23a3 l\u22c5\u239dcos (q\u2081 - q\u2082) - 2\u23a0 \n\n \u23a4\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n)\u23a5\n\u2500\u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a5\n \u23a6", "image/png": "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\n45dimSINpP8BavczttGqDEgAAAAASUVORK5CYII=\n"}, "metadata": {}}], "execution_count": 54, "source": "from sympy.physics.mechanics import *\n\nq1, q2 = dynamicsymbols('q1 q2')\nq1d, q2d = dynamicsymbols('q1 q2', 1)\nu1, u2 = dynamicsymbols('u1 u2')\nu1d, u2d = dynamicsymbols('u1 u2', 1)\nl, m, g = symbols('l m g')\n\nN = ReferenceFrame('N')\nA = N.orientnew('A', 'Axis', [q1, N.z])\nB = N.orientnew('B', 'Axis', [q2, N.z])\n\nA.set_ang_vel(N, u1 * N.z)\nB.set_ang_vel(N, u2 * N.z)\n\nO = Point('O')\nP = O.locatenew('P', l * A.x)\nR = P.locatenew('R', l * B.x)\n\nO.set_vel(N, 0)\nP.v2pt_theory(O, N, A)\nR.v2pt_theory(P, N, B)\n\nParP = Particle('ParP', P, m)\nParR = Particle('ParR', R, m)\n\nkd = [q1d - u1, q2d - u2]\nFL = [(P, m * g * N.x), (R, m * g * N.x)]\nBL = [ParP, ParR]\n\nKM = KanesMethod(N, q_ind=[q1, q2], u_ind=[u1, u2], kd_eqs=kd)\n\n(fr, frstar) = KM.kanes_equations(FL, BL)\nkdd = KM.kindiffdict()\nmm = KM.mass_matrix_full\nfo = KM.forcing_full\nqudots = mm.inv() * fo\nqudots = qudots.subs(kdd)\nqudots.simplify()\nmechanics_printing()\nqudots", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "I sure don't want to derive *that* by hand.", "metadata": {}}, {"cell_type": "markdown", "source": "---\nHow about doing some stats? Stats is tedious. R is annoying. Python is fun. (Well, this is more like simple probability, because I don't know stats.)", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 139, "data": {"text/latex": "$$\\left \\{ 1 : \\frac{1}{6}, \\quad 2 : \\frac{1}{6}, \\quad 3 : \\frac{1}{6}, \\quad 4 : \\frac{1}{6}, \\quad 5 : \\frac{1}{6}, \\quad 6 : \\frac{1}{6}\\right \\}$$", "text/plain": "{1: 1/6, 2: 1/6, 3: 1/6, 4: 1/6, 5: 1/6, 6: 1/6}", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbMAAAAyBAMAAAAkWCh9AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEImZRO/dIma7q80y\ndlRAyO8oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEvUlEQVRoBe1az4sURxR+PTO788PdmUEwhxWZ\nYSUeQsSR1csqZCB/gCuoAYVoPHjQQwaFhZzsi3gIwRX14EU3CQaRyA7iIQSDQwJecnBJyHkXgngR\ndFWSuItO6md3VferqlYWah22Dt2vvvfq6/d1V1W/nl0A0ja26HFw2ldtqaVwqCPNwTiXXtWFkAvN\nwVAUq5j+gtvFVzEWW4+k8BhKWdX9KSgN+CAqLvM8KkvpfILv59zSxiaRkQkuT0Sf9FgetW4iHdZd\ncEuDUbc0AC9E+0ImojHLTomDl4wSOejdt8nobIuNHURpQtO6NH12sN7aXWvrTw15XAJaf2rmeyM9\nq36P1iekvLXp86rf7PQlFORt3mu2pzZ59OdQoUXN/I2Vm6hDBf0Q2aSp2UV2ceJqL+qYjNPj10wu\nBR/h5YKCpMxf6r8tpsAkkNv+cRKifV1ahgp9DHIvMSIVK7bgaagCuD08g+MKerT/XOnhZnAX9mAe\nVVqmCv1bgIMYkYqNvoHaMRXA7b/c0u7c7uBjFbTcgqtKNzKFtIdNhmRYpYcA5nrRcNwoHIBGF3cp\naPFrt7RZJd5k7jOor3H6C202MIO0+3W3NMKVYULmNqyOtCsGzRummOMEdwtpJw3BAv6yTozhWVtQ\ncJx5rUTnuTQr0c1v9jqJVn79s02DkkTV/yia+5ce5SdjcIT3DMcCW9mbugY3hYvbdtKTlSiY59Ks\nRBfhbNtBFKyE8Dm9WoporkPQD9vUJ6Vx23hM3h00UDKiTgbmIMOEBCgfM1MwT9Cvw246j1KtcgBg\nM9n2WNPWWp+2Z6kBMKFANRakANIc2i8tAJzoiSbNSJQXE4rS4UT/AIitgsaoRI/m4QM2fQiuSaOB\nSBttIaAOFTtQfqNDqV7Q1KSl/AyodDO8RU8RaSE6/sE8wO4ed2WR9jeQzO2ttuSWVr11a+4wubS1\nDXUhv2SNIM4b2lNTovNkQkL+M45kkEaqo1GXtKEZGFbmkXI1zSRhjpYn+17XEQMPyVpDY3b0KEwe\nKm1cmr6xJV6+0+Nbf6Ch2n4UrFAoaqUQntIHYiUiy4JJsxGRiu1cx0VUaQboDll4zRJaaNOTrNC1\n19Gw+IGZxQHc7/fJuk2+RU7UhZufPp24zAwbEeSuL4ckSt9wE0RnPuLbgJVo62SPXk0nInvrM4qC\nKLSYHR/G/+iRzuMYQCxedlfpvTU3D0RkUnRZQo0Wktfmdp56m4grgkTZnYsAzPBBlPyo0fO6BOUZ\nsmDmdVTvibJ7i44mej6IrNIKfJMrJfLUu6LsDnVU73khskorT+kZoj1T2a0GeyJSP0XVdIhdu7d9\nVwJKd2XZnfbEiCcii7TGTzC0GCeIWlHZjXoF6InIJm0J8kqRiyZvLruV8IYfIos08vNG6aWSIWrq\nZTcaQn8n8UFkkUaqtxL7UMUT5qi57I5HeSKySKtMZbjZxrI7VgaeiCzSRsgSce7/xrJbkeaJyCIN\nvoNNi0qGqCnLbtQpQT9EongUCmUu/Jyb+FEHsJ4ouzFXhPkhEn+mJ5+zA9fE10zZ+Zn+/innH9kw\n8uL9S92RcSD/N2vB+uniYFmT7mlZSZWW62sywXdOqnokEjQ2+84sa3Lg7yFN63+8Qac9n6mO7AAA\nAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 139, "source": "from sympy.stats import Die, Coin, density, P, E, where\nD6 = Die('A', sides=6)\nD6_ = Die('B', sides=6)\ndensity(D6).dict", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 140, "data": {"text/latex": "$$\\left \\{ H : \\frac{1}{3}, \\quad T : \\frac{2}{3}\\right \\}$$", "text/plain": "{H: 1/3, T: 2/3}", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJsAAAAyBAMAAAC5XLSZAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEImZRO/dIma7q80y\ndlRAyO8oAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADNElEQVRIDa1Xz2sTQRR+SZNu0qZNEOyhHhIi\nCj25EgTrxQXxXIW2UnqwKnjQQ0OFiqfm4MFbevCioEYEwZSSnL0kJy8eGv+CBKR4rFVR26jrmzeT\n7E529gfJPsj8+N73vszsvHmbAKCd0Fk7mj0yevGx5WJvOHyfOMqI4HJueBUArfCsyeI3b3EV7Yj3\nzna/94VOl4XMQvQHm2nHHJs4tHz2UeRNLYjca4AlCrvcpC5dt4vYx+0gcssANRJaKFFstkKdogkk\n18gIuS09DDnUWKddiGWNuDqA2Df7skaWG6+EKlcgNQhps1P8CMKS+wxaka0vnNWldJgKUW4zf/pt\noKO4dPN9iYieTcM0fzrlErWujp/znqHo3Fqpms93eKbJXPnZsaubXpMZilkeAG/pRYVHlltoAezp\nCpoMVUD7DvBYBmkm5PZyNDvXBGh3aOjRpEqQ+AfwSUFJbxNYNqhrYPsqQ0OPJgXA6qOhoExeI/Au\nd7GazI8I7inIFhRf42NxVfuO6d9sGP1FQKxbrb7Dp4IWWaXOrRF1DU7WBxi1IgJnDEKjfwCm8Kn4\nW7njwplYBDiFtZ7Z5FeApPTWMJkhOmjyGyRNNM7Zb8GMSFx2Lu5vDbskpp2LfWgBXGiSk9Iu58Kz\nwyzt1DaGm4WxG+SktDPUPAllaac2JgFwn5zr2Iq0k082Wyd/v+k/4MGTjf0lTtvA3Ngxd2HefMGD\npLwbFz8WhN5co7vLh4N5l+THJi6ZoNu6jfxLNvtigxRDLT/XIVgcZFZXkBDSdDgoYZ/Dj4c9AH4d\n/Io7JjUrWBE8fS/DsqEon86I2CKwY0g4PRJy1Yh0CZDrncQRE9qsyiFhwTaL+7wthblNZnLk8Vud\ndlZcQDcdjm/cyQSS61cbbzmIsssV4LUN8es+Sty9RMvz2Sz+VEi63k/rax7i5eywqY9c+jCQnJkJ\nJhffhnFe+K2lKEYr+OuzGGB1iRIctBTxA9ATmOalRFxWsecBFk6vFJ46QQcSK8wbBIpXUrzuoAwF\niMrUr4dDiVhBvBhDyrX4W9QAo0jvv1g7wAP319vspXziOOPP9mNMr/ZFZit+ZH//xxLj/Af+aNY2\n+K/1ZQAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 140, "source": "C = Coin('C', p=Rational(1,3)) # An unfair coin\ndensity(C).dict", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 141, "data": {"text/latex": "$$\\frac{1}{6}$$", "text/plain": "1/6", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAqBAMAAACXcryGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVO8Qq5l2zWaJMkS7\nIt2ZnNffAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdklEQVQYGWNggAEhAyCL2dUfRDEw5FODCtEv\naQCbRhbxHwQ+EKd1ZuYCoELzDawFQOooA88BBgbuv0AmAwOPApjir5oWDWTYVzAwCQCpzwysygwM\n/A8YOH4zMPAVMHD8YGBgUQDzuIByID2eDEZAlQycoV4MDACRgB7u1totwQAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 141, "source": "P(D6 + D6_ >= 10)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 142, "data": {"text/latex": "$$\\frac{7}{2}$$", "text/plain": "7/2", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAqBAMAAACXcryGAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMt2rmYlmIkR2uxDN\nVO+L8+I6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAmklEQVQYGWNgVHYNDWVgYPv///9nBgaWAgYG\nAwYGViASYACBTjDJsABMsSaAqf1gkmEOhNICU9xAzUDA+AVM8UIo9rdgHpkE0EX//38gSnOJ10Kg\nOm4DhvgGBgbmDQx8DxgY+BQYmD8yMPD8BlNAaabfQIKBoT8ATCmDSRYHMDUFTPI6MJQDGSIMDNMZ\nGNhVQ50VgNqBblBgAAC2GSI4Pf3nYQAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 142, "source": "E(D6)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 143, "data": {"text/latex": "$$\\frac{1}{3}$$", "text/plain": "1/3", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAAqBAMAAACXcryGAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAVO8Qq5l2zWYiibvdRH6G\nTkUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAB0SURBVBgZY2CAASEDIIvZ1Q9EMTDkUYMK0StpAJtG\nFvEOBB4QpXXWqo1AdZwBDHINDAxsDxn4DjAw8Ooy2BWAdYMEgV47BSI51wSDKAaGRRfAFJMyUGwC\nA/dDBga+x2CKaQMDz0sGBo4GBrkEoJKroXsZGAAuYx+6av2YygAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 143, "source": "P(Eq(C, Symbol('H'))) # What is the probability the coin lands heads", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 144, "data": {"text/latex": "$$\\frac{H}{3} + \\frac{2 T}{3}$$", "text/plain": "H 2\u22c5T\n\u2500 + \u2500\u2500\u2500\n3 3 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAqBAMAAADrFKBfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZqvNmRDdRHYyiVS7\nIu/EmopNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABrUlEQVQ4EdVVu0oDQRQ92TzddePjBwz5gUAi\ntglimWKxsA5iZeN+gUlhKyr4AamDkHyCaGW1FqkEURC0EYmPqNHgemfWfdzdFSxscmF277nn7Myd\nE2YCYN5eFMNAKPr1M+hfJ6VxsdoW1DONV5GwSBfQNdU28g2kZonJvgNTL0wigGIgf60AVzUkTMLq\nCMh9RmQ0izI6ABZ6yImGkgNgehiRJYck2wdKBrKCnDmm0RBZODLi49ufarNcLFq1sETgZhvQ3a67\nNPNeL062TsWE23WVgGXEyFI1Kipu12MCwrpI7IgKbViGtO3DydlTq+FS2iar0rY3JnDAIbArbZMw\nM4i1DfpmZ7nhdb1afWqlrHHLmSHwTNq23VBP7XKUCqj+J9X+tsYEyshEJ+jHgFqpLN1UKgVhmluX\nb1FgMYE7pf71zpF/YtgWGNOH9ujtNn3upQBj6PRFbxopZsy2mY49WUCICSwaWFKkjFlrh1gPBpmL\nDcOr84Qz6h1nfcSZh9+mg8/QFWD5/vozQVwOPmMbARBUgTH3wFbQe1/JmDlodJnHBWOyK3UzTkT/\nBS7zDb4zkmGMasu4AAAAAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 144, "source": "E(C) # What is the expected value of a coin toss", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 145, "data": {"text/latex": "$$Domain: \\left(A = 1 \\wedge B = 1\\right) \\vee \\left(A = 1 \\wedge B = 2\\right) \\vee \\left(A = 1 \\wedge B = 3\\right) \\vee \\left(A = 1 \\wedge B = 4\\right) \\vee \\left(A = 2 \\wedge B = 1\\right) \\vee \\left(A = 2 \\wedge B = 2\\right) \\vee \\left(A = 2 \\wedge B = 3\\right) \\vee \\left(A = 3 \\wedge B = 1\\right) \\vee \\left(A = 3 \\wedge B = 2\\right) \\vee \\left(A = 4 \\wedge B = 1\\right)$$", "text/plain": "Domain: (A = 1 \u2227 B = 1) \u2228 (A = 1 \u2227 B = 2) \u2228 (A = 1 \u2227 B = 3) \u2228 (A = 1 \u2227 B = 4) \n\u2228 (A = 2 \u2227 B = 1) \u2228 (A = 2 \u2227 B = 2) \u2228 (A = 2 \u2227 B = 3) \u2228 (A = 3 \u2227 B = 1) \u2228 (A =\n 3 \u2227 B = 2) \u2228 (A = 4 \u2227 B = 1)", "image/png": "iVBORw0KGgoAAAANSUhEUgAABpwAAAAUBAMAAABiwIOIAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdqu7Is1mVDKZ70SJ\nEN2OLFFaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKxklEQVR4Ae1bXYwbVxX+7B3/7NrjdVJeUiHt\nZlOilijEaipaUdEMlCYKKs3SEonwoxiUAn1pV8ADQYJYDSD1hbUSIQgtyqqhL5QWI55alcZRVUpQ\n1JqgvgRoTAGhQmm3KWna5secc+6MZ+y59tzZ3Ic89Eh75869Z76Z8/k7njN3vEBac+ppj4j774kO\nbY3urKyf96LH2Qa0HrF1QNsRwzag9YitA1qLeHXv+nXXD+gx1Oa6sBv0blWd7wf7o7df7s3NbW7p\n5rNeOOrUpF+cD4dG9bSA2w/eBFwTOcQcML/pzNy6myOHSvf2EzcOAppHrAdEsYmsJ9iqGQXoHNrc\niLhRVxuxuGQ92UgzMmLhJvSjnhbQnMIYoD5iYwqdE88sDFwf9IDsk/WoCWwkhTFAbcTCdNYL0ICR\nFAIPhF7S0wLKjFLhWSB/bugYf3d9fPgzamh3bKbwmD/kBVNvApNvBzvBlt1cyp0GDxSBnMcd5JZl\nE22+3VF7Tn9QA+jO4oUWXiSXBrulA5yuAYflOD5WmdPEvjoDEhRZA0gRsQ4QqNQk4kTAkyifl5PC\nUxtAEzFgSqHihqEsUagB1EVsTuF2FN5SoXpqA+gA+xEnUqgB1FEoTJupEH9XVzaWQoDFyipE8Q1q\nfqqOSW7zTfHJv+5rvX/EyQMX/f4uf1skpkrv9B1UR7kdA67l/S8B96jxe4Oj1S6l3HWb/FPk1Cnp\nSjWA2Q6mllCurghwsQ4cDdD9E2fOYbrLgNkGjeSrSBExdIDA1TWAIk4E3Aj8Ql2FHQoVN4xoiUIN\noC5icwpnFnBpMGIthX3RJFIYB9SJBoppAxUCmSPqAsdSqMTKKkSGbyBH6+qgxLbiicu2w2ob8c/4\nCVG8paNGM/8jOXKuDpi4nQLu59H/Av+QWWcvOQ/ZjI+zn7zEdIBTXWTfhru0IsAZD7iPOYhY6VGc\nnmfA4iyNVjpIETF0gHDurgEUcSLg48CmBl+KJQoVNwxoiUINoC5icwqfbLlUG5H1I9ZTGIgmkcI4\noE40UEwbqXDrXXKB4ykEWKysQkwsU7OjTY2J3aGcqjOtYe8gnbK/rqqpiSVSUZAKfW9xy7WkyCs1\n4XRlJpPxy5y+n7pC3t2wyh/UAeYucjrh86pqTAn4EaLgceJhyKjYY0Au8p4AUkQMLWA5V6OrI76S\nAHd3/HSyRKHPDYVhiUINoDZicL1sRGFQ7PUj1lMYiCaRQqqEVfXYB9SJBoppIxW2/XQaS6EvVhKN\nFKs4Oovyqgfx1DUfW1196ir66Lcfv7rjrqmqEfICXpZ2jbSlDvM1aEE6vYiumpieRfHlmFjFbbKJ\nQpMy2UOGNmS/DWpodai0nPBk7nxFtnSlWkBU6LZ4iHhMD3gG+OFGHzzcuK9SnwD30uYGIEXE0ALu\n4XSiiJMBAVVDW6NQuLFJYQxQGzGMKcRLbSG+H7GewkA0BhQOA44QDTNtosK8p9IpSYUiVhINFqvU\nzLSd/+C0195cdd9oFZZQ+jl2o1xaQpNGpA5zH5G4Pyztn9VReHYn2y4ZC9LpOTwn+1hcu+qWBenG\n3PLzUujtp4yqs4fbkic4lAVvJ0mPzE+n8kJZoYSAA2442gbuJn+6EaYDLJ5ZddW/+EwD53We/xmN\nECAVesUakCLiEDASsVvldOKIEwFRuiCXY41C4YbCs0bhMGAYcfQzMafw9lc6gxGHgBEKIdoyojAG\nqFehMG2iwj9CpVMShSJWVuFMg5pNrak2Kr9f+CecC8gv41QdB7Ftcr7II/xwFZiSXws7msFIsA3S\nqYvb1BCV1e7DwWx/K26FLkAl3AaS2ALPlOC8w9sB89OpAoekyKYHlNvmd2k6NSCX1admGXnQ/tAC\nCDBDyxHUSxGxFrAMTqdC1wAQlVmwWaPQLynsUTgMqI2YIjClEOVHByPWA/ZFk/iZxABHiIaZLnST\nRdP20ymJQhErq3AL/eFdHO5geqN7HgV6GKnx3t/Qma66NELZFZpEX5yb20QSGTQ/nWgtTNZfwFUw\naKVlyMStSJAvyerxVIvn75+be3PIr393otW/a9WcHpDLKCzSX2pALqtpFSpmU48JoNuVpc8UEWsB\nvyXpxBEnAnKJSWaPQuFGFlAtUTgMqI2YQjClkNYyOwMR6wH7okmmcBhQLxph2kCFhYafTkkqlHRi\nFbKO82/hCK1HVAvLmOxiqkp7Lt2T9nVAI9l58ghMxFUivqKDMumnk1/R0BCV1VREylyk6TMzuVCu\nE06L56h5JOKjunKFQQ3HQ3rANTzFgaQGpLIaGVVeMYYyx8MEpRgD/hi/ozZFxDpAt91Pp2TAplyD\nPQqFG5sUDgPqIoY5hZ+gb/MFijmMWAuoij1WfxKFcUC9aOSRnQETRPMX+OmkniT449EDBukkDy2n\nai7J6gVvch6VNo56f73AeYQ7XdDIdL3DMMqk9KkTAUu8//xrbGqRwk+nvTTMS1jyloiKSO7G3Epd\nerUoSwxS7OXJ59/sWBa812a57z878QpDzuN9foOgAKNuNE8cPk1TqQEX6/Qy6DwdGT3v9EVJJwa8\njaouv9irm0Qs70wUYBhxge7kD1fBEScC7mUlqiULKxQqbmSRxg6FMcDLpLDXUenUF42WQvrSu0i0\nmFAYAwxFM6BCYZoBE0Tz9bm5d9fSuZNUqMRKouHXTu5OgLT6S0y1cbqFHznfOYeJ+W+658o8sq/T\nJkDf+MHcWSCFLwcjwdZPJ9YBswOugovxEk7c+CEQN9ENFBN1arbRX/xnFuruxDrgYEYBPgC8Ty1F\npAakshqLNYaO2FQNFbpyfqqc+EGVWvOI5Z1JDJDuwHQOiTgBsNhExqMzWqNQcSPfRnYojAFeJoVU\nEr0+EPEICkPRJFAYA9SrUDFtpEIu29QX+jgKVTqRaDgvnm4CBzDRxI4W7gO+UMance9su7S8lUee\nzTcI0F/ZO07dT9LfBElu0FQ68VoY37sJeAl48qPUGTRxm2zT4G/oBooyndpZos4Wj5oBU+m0n8fY\nE7klDaDz6okDXeAhkKUF/Bx94x3hS41avo59VQVYkhfS5hFDC6heRUjECYB3nDj+IboUaxT63PB6\npx0K44DaiM0p/AoK/J4/jHgEhaFoEiiMAeaWNKKBYtpIhfIwlEShX0o9hOxu+hnoTyik8rEHpWZa\nTTeXr+Hk+7+3toX1da6iPv5Vmg7eO9H+n3pfRGHLJcqDqE1+8Ox62ue1MF4TU8A3Rj2kr9xyDdrJ\nMQLdcN0tZzv4Ru8VmQ+bA7+6s057G3iEFu1GAOZ6vV4X+Cx7pQT8AP9Ed4EPHLAnDt1M+wK4iyeM\nI8YIwPKWM3VIxBgPuLvXu0QntEahz409CmOAIyI2prB06CDrpR/xCAojokmgcBhQ5B1XoWLaRIV4\npseyTlAhlFhFNORtbhVvvG9JphvjndQvDZwOe6kfGY32Z7pRHD0vM06XN9YBP8WoFiOGbUDrEVsH\ntB3xlU8ha8bY8k1j1zGOx8K5e8Luynvy40P/cNuA1iO2Dmg74uBnySv/PPjIyGdiPWLrgNYpNOXu\nBlPHMX7ufDg54YX9Fffkp/H+0dYBbUfMv1y6bHuPwiubQtOru9XUcYxfVPFObYyj6VRUoNYBbUcM\n24DWI7YOaDviK59CU+U6dVPP0X57olNbozsr6+e96HG2Aa1HbB3QdsTv/XN7VE+mfVLh/wEP4sTG\nbbMyygAAAABJRU5ErkJggg==\n"}, "metadata": {}}], "execution_count": 145, "source": "where(D6 + D6_ < 6) # In what outcomes is 2d6 < 6", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "---\nYou're building the next great MMORPG and for some reason need to churn out C code that calculates the eigenvalues of a rotation matrix. Luckily SymPy has you covered all the way.", "metadata": {}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 164, "data": {"text/latex": "$$\\left[\\begin{matrix}\\cos{\\left (\\theta \\right )} & - \\sin{\\left (\\theta \\right )} & 0\\\\\\sin{\\left (\\theta \\right )} & \\cos{\\left (\\theta \\right )} & 0\\\\0 & 0 & 1\\end{matrix}\\right]$$", "text/plain": "\u23a1cos(\u03b8) -sin(\u03b8) 0\u23a4\n\u23a2 \u23a5\n\u23a2sin(\u03b8) cos(\u03b8) 0\u23a5\n\u23a2 \u23a5\n\u23a3 0 0 1\u23a6", "image/png": "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\n"}, "metadata": {}}], "execution_count": 164, "source": "theta = symbols('theta')\nM = Matrix([[cos(theta), -sin(theta), 0], [sin(theta), cos(theta), 0], [0, 0, 1]])\nM", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 165, "data": {"text/latex": "$$\\left \\{ 1 : 1, \\quad - \\sqrt{\\cos^{2}{\\left (\\theta \\right )} - 1} + \\cos{\\left (\\theta \\right )} : 1, \\quad \\sqrt{\\cos^{2}{\\left (\\theta \\right )} - 1} + \\cos{\\left (\\theta \\right )} : 1\\right \\}$$", "text/plain": "\u23a7 _____________ _____________ \u23ab\n\u23a8 \u2571 2 \u2571 2 \u23ac\n\u23a91: 1, - \u2572\u2571 cos (\u03b8) - 1 + cos(\u03b8): 1, \u2572\u2571 cos (\u03b8) - 1 + cos(\u03b8): 1\u23ad", "image/png": "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\n"}, "metadata": {}}], "execution_count": 165, "source": "M.eigenvals()", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 166, "data": {"text/latex": "$$\\sqrt{\\cos^{2}{\\left (\\theta \\right )} - 1} + \\cos{\\left (\\theta \\right )}$$", "text/plain": " _____________ \n \u2571 2 \n\u2572\u2571 cos (\u03b8) - 1 + cos(\u03b8)", "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMsAAAAaBAMAAADrt7WKAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAmSK7q0TNEFTdiWZ2\n7zJQnLHkAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADLUlEQVRIDb1WXUhTYRh+trkdt7mzRUUghieC\nQkKMbrroJsO6ifBA3VREI2xdFatA+iFcdFNhuISiX5pCQuXF8qKLMph1EyEognSXXnUXKmpJhet5\nz9k5bmdOZ0oPnO/9fb73+9v3DbBQm105LG750r2z/NxVZFboqyCXT93mSA2s3+TwrIm50dFLNw44\nPGthKlFHL52Y0MTlTgPKOwQNQxwrwA7mXk2jb4HiSizohnYPDcZubaV1+FIE+xzxMkw5Vd7d11Gh\n2cmXbc1WOuKingLUL/iJVttvKXeMuGUtIn0a8D0ejuet1KvitCfiCkYAfxpzCGQKM5TGZqtMe2HE\ntl5Te4xwAr2WS0lami0DLMASGvAe+A1l2I7klKHlynRylMMIp3HNolalLc2WMhagjt9dqHPAacPO\na5Yr405ylBFMJODTczQ/pVLdlcCVwedQP/VH4U15x+kc4C7OomoWWEerAM4yhXygKgKc1DGkw0VN\nEe4gv/qEOqJ2wpO5CCTx7eaNOJ17gIqZpkOTwBvJy4ezTCEf8KSB5qamMS5dFO5HQk3yi6Fy3p+C\nOn8ijgzGslkJPODEowhHgVti5sNZppBPXgK4D/wAKpM4fpbUYIqzmqLChcQv//QHqiZGgXDKcE+I\no/Wh4JwRM8v0xGJPY7GWRfghnX0Z26pyMTo4N3+cW/CH5A6GppWebMToiA3LtCWwmZpRxnKLdMym\niM8yyhxcw/zhTQKhJHCbLHs2U9sR5Jab4KK16ZARHLVclnSUKeJz0ZRZhDOcAUvIKToj1BgXMRTh\nwWoHDlp98QiE9ADTlj8CTr4cgVG8IJVHAMo0KiPSa30a3epX+FK8RXaJQ9AFuDL1GrVqMfPhmE0R\nP8Bea9wjpLhSbGo1uXxYr/Gzhi0v9+NY/1tdHAIulVJjvDzmvpteaTeMtXC4As5e4OTLUp0fiDPi\nG2fTkDrCtgTksjEgv+kSyJUpivKyMVEnwjPJW7gU5Oo0EMjklGJxodhleMzrimqvmN6ZvSJKwNql\n1hLxJdwezQzmHoJn40vkyrMmsMqZVlmt9WcpV+7jUiR5pIl/fqTJ7TN6+B/NX/XVD+feaBSXAAAA\nAElFTkSuQmCC\n"}, "metadata": {}}], "execution_count": 166, "source": "formulas = list(M.eigenvals().keys())\nformulas[1] # What about imaginary results?", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 167, "data": {"text/latex": "$$\\sqrt[4]{\\left(- \\sin^{2}{\\left (\\Re{\\theta} \\right )} \\sinh^{2}{\\left (\\Im{\\theta} \\right )} + \\cos^{2}{\\left (\\Re{\\theta} \\right )} \\cosh^{2}{\\left (\\Im{\\theta} \\right )} - 1\\right)^{2} + 4 \\sin^{2}{\\left (\\Re{\\theta} \\right )} \\cos^{2}{\\left (\\Re{\\theta} \\right )} \\sinh^{2}{\\left (\\Im{\\theta} \\right )} \\cosh^{2}{\\left (\\Im{\\theta} \\right )}} \\cos{\\left (\\frac{1}{2} \\operatorname{atan_{2}}{\\left (- 2 \\sin{\\left (\\Re{\\theta} \\right )} \\cos{\\left (\\Re{\\theta} \\right )} \\sinh{\\left (\\Im{\\theta} \\right )} \\cosh{\\left (\\Im{\\theta} \\right )},- \\sin^{2}{\\left (\\Re{\\theta} \\right )} \\sinh^{2}{\\left (\\Im{\\theta} \\right )} + \\cos^{2}{\\left (\\Re{\\theta} \\right )} \\cosh^{2}{\\left (\\Im{\\theta} \\right )} - 1 \\right )} \\right )} + \\cos{\\left (\\Re{\\theta} \\right )} \\cosh{\\left (\\Im{\\theta} \\right )}$$", "text/plain": " __________________________________________________________________________\n \u2571 2 \n4 \u2571 \u239b 2 2 2 2 \u239e 2 \n\u2572\u2571 \u239d- sin (re(\u03b8))\u22c5sinh (im(\u03b8)) + cos (re(\u03b8))\u22c5cosh (im(\u03b8)) - 1\u23a0 + 4\u22c5sin (re(\n \n\n__________________________________________ \n \u239b \u239b \n 2 2 2 \u239catan2\u239d-2\u22c5sin(re(\u03b8))\u22c5cos(re(\u03b8))\u22c5\n\u03b8))\u22c5cos (re(\u03b8))\u22c5sinh (im(\u03b8))\u22c5cosh (im(\u03b8)) \u22c5cos\u239c\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 \u239d \n\n \n 2 2 2 2 \nsinh(im(\u03b8))\u22c5cosh(im(\u03b8)), - sin (re(\u03b8))\u22c5sinh (im(\u03b8)) + cos (re(\u03b8))\u22c5cosh (im(\u03b8))\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\u2500\u2500\u2500\u2500\u2500\n 2 \n\n \n \u239e\u239e \n - 1\u23a0\u239f \n\u2500\u2500\u2500\u2500\u2500\u239f + cos(re(\u03b8))\u22c5cosh(im(\u03b8))\n \u23a0 ", "image/png": "iVBORw0KGgoAAAANSUhEUgAAB9EAAAAyBAMAAAAZ/zZzAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAuxBm70Qy3XaJmSJU\nq80uqJiJAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAVKUlEQVR4Ae1dfXBcV3U/2pV2tVpJVpJOm8KE\nLIOnJWkTq1PoOKQkwm1IC02yMC0dOi3etg6lDCC1pITYLew0YRoHWmvIZBrbU7zOALVDE6/rDCn0\nD4shLSmlIzVQoKFGKpM0QBrZcWqT+CPqOefe+979em/ftb0rS353xu/dd++553fO75yz72PfygB5\nW0UMVOqryJkLy5XC3IXlb+7tWTGw46xW54uXk4F39Qp811LeVg4D/qyo5OcFPzErYbS40CMrp3qE\nk8N0j4HHat3TnWvuNgM/2W0AoX+41RucHKV7DBRuYN15vXeP4m5qXjvTTe2R7pH8WU7ExUrt9LXQ\n8sKT87WV6sCFbffwRE/8L/cEZZlBdryitswWdBV+Vni3bVU72VUGl1f5HT2B/52eoCwvSKU9srC8\nFnQXfbNQn1d6d2numvbZdtdUa4o/o/VXa7fcLp1crb6hX0XpXF7pKzTI5VYvDL8QHr2X69VjveBy\nmTDKYwI4r/RlCsDZwhaPnq2GDusvxvnSXAehoOne3A+fAcpwt7lMpSnU4MruB1L1WZOTdTGQV7pF\njHkYyKq5OPtRaLBRc+HF7OrPRLK4AVdVZtKWBpLTm/vhM0EpN9PcFHNnEKLOSkki2OCd8N1smoXU\np6XwhVbpgdkZyKokNRAkPNiEsyjBurR7xx+j4nItTXsgOb25Hz4TlAxviwbXYxpxxlywwVtgsm1o\nSD+4SU5faJUemJ2BrEpSA0EgONiEsy0k3NKw7LvCOFX6fl5wa8KyQHJ6cz8chDLInhVbCQ5qw2cU\nIm19cjfIYFLzJ3BQXpAnK41nSi/IfpZKT4p0rG7l9AKzM4xVRUMgCAQFuylRDo4ruG7sB4Eq/U5S\nXRpLAAgm50zuh0OvjwACUAbmyLV3wjsSPIyHA0IUbHGAwcKg2VpsWKfeoPpeIUOlJ0a6E8j5OB+c\nnSGsKoeDQUKyU33F3c9ZqiDP9f4Pt/9qA+B7pHa0RltvCyQny/2wjRN6fYS3HE1bR/LxvThV+t+v\nXZwsEc1krsdgi0MMZnM+HBnVudM3IWUyVHpKpDsDnX8SgdkZwmrsbCBISHZW5Lm8byqG60YPn8gV\nFkjxnmTtgpzqODw+A+/9Icm9ZhyuTZSX98MHAA5srbNU4eeh2E6Upwl1fWSBpKzyoiRYRQ8i+peW\njqSaICZlPR6A4U9A6eEWDiYYH2yx1+AUBysEDoCMVNffx90U2vvHhMRDtzw3LnrJ25RIy0VWFBJC\nnU2KVZq5kBAlCW7KphAk5UV2mgFLRghiVSLgToFkLAEQwUaGMtQAXVZjq6SmZwDZ/pS54kQbik3E\nqR4lNK2VfkUdSHL2Q7G+Y2jnrjrAwMVfhZG2mt/UFL3Sq6apI++Hq2Mw2Cw806Cht/1sC75DncSm\nro8sEM+q3/0BK0lAia3SoQZb+lHcL8nx2FcVojF4faW19wv0DXyC8R0t3tTExdhCaZHy8AaxHB+i\n3A1Xf4gOTNrFtNyuaxmHaQd6pKsPXtSQspuasoM7Kwp+UpOllCrlCdi54CqMRB1Zf94oCCyQFhpM\nq4yARQhRaGXeBLFKmrlFIAkloOSUGzI7MXYZauAesbqY+rpH55BIB1FZYsr0Uc3KclYmY4K+pPqS\nnGdhBNY9Df1TAJtqa2riSoBkJrnAsbN2jg7l/fBoG76M9wTHcaS0AY7C1TSX0sT1kQXiWVUQT5kT\nUGKrFNRjNcyDI+rI3KvXTWJfZYjQ+LnCy3W4Mc34DhafMS2CxoHpgQZZ+ywMjwMcpr5JO01GbbIZ\ndePOQNzVenqkr4KKyq/IXBS1ouCSyuoSpSJVwhPMAisXPAqVqCPrz5sIQn4gIoIRsAghCq3ImzBW\nI9ZECSBIQglEgtINmZ3PQocaGKYvuQ+K1aUXIy2eTiLZkawsDDxOTBnmsn8mWmJ1JDlYA0O10QUo\nngL4IKyZgfstOYA+qnR1P4zk4GHhttq7oTwOp6DSlPKPO+t4gK+PHJBoVbzoMuomodhWyR93fTBe\njs/ymurorjHVU3sZIjT+AfqC8/oZy3glR/usFmejJdbM8vCBr32phmPIyAjufnpDqZFEO07D7Axt\nrXaldSwO9Ug/AfDLrpATBTfUuCiDlPAEqBqNXLCjhNqUqCPryQDdYpmddsA8CJw3nViNc8MPkqkE\nVHYiQ6bfti9XPURX0lge1AoneOe3IAPZwA6iDpRNSJl/IYTJGm19TZJTbuMlUt8RgNugOAFrxmGt\nI8zRUvfDWwBaKHHlJdPwOoAXoDCBR9T8lS7ONA5IYYKWGI0dSkJxrdpWw9W7dQ0Rl9Xr7EpXHyBo\n/H64HIMwYRmv6clscTZaYs0i6W9ZWqIhZGQId4Xd1yTSTmLXN2hrNUx/T9Mjjdcs8w1HxomCG2pc\nk0FKla+dC26U4kq3ZQsTjn36gMxOO2AeBM6bTqxGuaFjqE9dBMlUAuqZEDKUUANK+yBV+pDMwtM8\n6rcgA9lRpaOsmzK/SMq/SRusRrNV3y2PJTmP4uFvjWClbxwvt2ByBkbrUuDzDdlRgaXD6hTATjm+\nGUp4IfC0PPJXushKByRaJRfjTn100YiLElmlFnCl36WOaB9xWRmVHEe+yg8QUjvQmsfNC2Aar+np\nZHEgLbFmnUZARiptMWfRHi/A3jYpow8Oi5OEPkR9PdKHa1GlR+YCYSaEWteVLBWpkp5kiFJU6a6s\nyhsdGyIIkZ1uwFQeRKE18iaR1Sg3DLQYpBMvduwSakBp50ofnBCHz/POb0Ey2UpVXBg+5wb4YwTT\nGuDheAVeG39i/cL+0/CBt7znL5tq/B7sjIwcher22sY6bKvDUAtH3vPlv6pePld66rN3fxuvwL5D\nW9EGW/hhhek3smd64BgMHgN4UM6oSr9y+99B4f6tddIB8iLMAeFVhb07ZuCKu+9ju+Cyf4iNclHY\nKonEO670jTVtKOLyWqp0n6+kFubwjzp84ZO68dktDqXF0KzTCMTI5/Dfk1tBo91kBKd3WZW+fmsT\n3vijQzNAHSOOZqQBPlqzogiM6YbaxnRilZgQCVHyOu3KqrxBL0UzyBVDtMoMGBljhlbPGz+rqEPl\nhu0sTgGDuLx43SB55tFfAzyNG670ATqxY7uZt8ICQymO+8k2rVQO+pw78BQqGW4RwkW0Ue3VAFPw\nHMAfNasn1dgl2BkZOf3dD+Np4NChW/B2YAEvKsegDKNzUL4UDrah7xLaitY3jvut45iCrx85fegb\nRwCukzOy0qu/Bpvaf9CGS1mHvAhzQHjVIzOlt5a2QF+T7bpoPDbKRSGrjMaVPtnQxqJoNqnSfb6y\n2rn5Q8/8OWjGZ7c4lBZTs04jECOD90LlZLEe0w4mIyiyr6Y5iDHdAg8BXo7IjoijfKffiDQM4INX\n01xgTCfUDqYTq8SE8EfJ77Qrq/JGOWhbS+NuwMgYM7R63vhZRUUqNxyCFYjDi98NFBc8+muAp3HD\nlV6ip9bY8FYKG1tgKsVRL9lWSJSDPucauxpYvvgPqK7j9us1aNLVzo/RDbZsf4p2DY0cxbM6fATg\nZTRpCq9uN8AgXXjhixt45y62Qr48I/bzNSgvwJoFgK+IAXWfProAs4078AHBraRD3iI4ILxqEYaP\nl6ehdJzt0o1yUcgqo3GlGy+WqmhWgCrd5yupbbbma6bx2S0OpcXUrNMIyAg1k3Z8WKgzgvN4p6G3\n4TfDxhpXOneYMvVOvxFpKM/ZUQTCdEPtYHqlvJ77o+R32pVVeaP8MyHEqBswygMztHre+FlFXSo3\nHIJxjkBcXvxusFkSBcw04im54UpXv6a+jQfZAlMpjnvJtkKiHPQ6R1/OlBkAP/8Lz9yO7SMNHHr+\n43zZ/yqAF3kWNzfgWfxjWOl4kn+J77tLR3D0o5fiqRwrHYu5KbdiQX9d7De2YM003dbDJA18anHx\ntsVFSrZ1Lby8OgU4Szpkc0BoFT+UJA0vsV26US4KW3U1OXL7/7BSUem4WrTK4uIzNy8uzuHRP3Ol\n+3wltevrWOlt3fjsFofSYmoWZEp7kRFqA3jPHdNuMYLzstL5L1kfwePS1n1tqnTRYcrUO/00GhP0\nIB6Z5iaE2sF0YpWYEP4o+Z12ZTlv9Ow0co7Mx9einICRMWZo9bzxsgpxbjjOKhC3BPxusFUSBawa\niMkX5/QqVgE1rHRlgakU57xkW1YqB73O9S/gsxdCMc/phU8tteicjhd6eqXjqeXI0HEonIKhCcwh\nyqgrDp/gSh/jSuctaRPc075yCtbNwKexJyOmzukbm/gJegwrfYx0yMZG6iC0aoBsmMVYPs926Uap\nvIhR2CqljvaJ5/TCNFe6z1ehdh72NXTjs1scSoupuU+jkULMbdeMRrvFCArsqwkxuS38dxtvWDZj\nfXCHKVPv9Bvn9MEWrTCiyGnlhtrBdGKVmBD+KPmddmVV3kjXHGtp3A0YGWOGVs8bL6ukSJ7THWdj\nED07CcTvBslHsYuz0/bFOKffzovYAlOpUmVDW1YqB73O0UXhZxjAiP/fA76wY1U6XxP0TVSw0o9R\nWcPAFD77rsH1dTqnO5VOlzo/R0/1b4R1df68+E3Gib5liz62Pkc65JwDArgq+ug6wXYph2iJi0JW\nGY0rfbKtjcloDh86NH9TE3y+klq6d9mFlR4bn93iUFpMzYJMaTAyUrysgbk8pdFuMYKi1hO5vimY\n/L3aZmiKjqRMvNNvRPqrUMVvT40o8qUi3vpaoXYwnVglJoQ/Sn6nXVmVN5IQx1oadwNGxpih1fPG\nyyopkrnhOBuD2Lz43SB5vvPy1wBP40bcp58Uhzfzji0wleK4l2zLSuWg17nhU/Tsjdq/81ZuHgf4\nul3peJ8/3B6do6foN8BfoyA980CzRsa9lc7PSPY16Y6+v14hjOvwHzVUTm10AWDmLfiZ+Nukg4f4\nwYMJwqsWEai/BQPH2C7lEC1xUcgqo3Glb6xpY2i0bPS2OOu0PtVI7b/iZQ5+w6AZn91iRAiixdRs\nVDo9XhnCi5o1CxrteIOmM4Ii2xrSJbHDG6bZWxvPQUt0JGXlJs3qkS61YLBtRdETBSbVxsyeEP4o\n+Z12ZVXeCM/snBOjbsDIZDO0et74WUVdGDlutrM0SCBmdhKI3w1WQijgrQGexg1Xunr2/iYeZQtM\npTjuJdtKA+Wg17nCafWnpe5S4LR/rAavpEt3tZbGdqBd9TX1wWMDtT3Vt+LA0DQ6vgH62piZ7jm9\n0kKRgTfVBvFSv/lIGw/24j9qyD+16i/hF8WbGvAD1iHGXBBe9cg47Cy9GUanlV3RLYWLQlYZjSv9\ndfqQiibdOfh9JbUfg2NY6W/XjM9ucSgtpmaj0pF2fLR0MWybgZh2MBlBieiqiMTxCmAMdv1+7W+h\nJToyjqwL9Eg/un3Ht+woJoTawcyeEP4o+Z12ZfdC4WXhldia5IoxN2CUBypdhPtWMntYRV0qNxyC\ncY5A3BLwu8FmMd/eGuBp3HClFyfE4QnesQWmUhz3km2FRDnIsE7KPKX+tJRx1nvn+mvq71964v1L\n3/zS/80JM+gyGj77b1C48X648p4aHow2sJTvvfO+0vzpn5o//b7Lb8IObnGGmriKvmrzYh0Kex6g\nEfGALKp0uGrPTqju/Zs66aB5ag4Iryo8ubUNX9z+HyDs0oxyUcgqvYkfd+3Wh1Q0oXL56XGp0/SV\n1A69bw7W3tHUjc9scTAtumaDRmYECt96+Gl83TCiHf8HB40R8m22rnsI1Se3vvb7MPKfbe7IOBZb\nLKNH+vDS0o+sKKKMEwUm1cb0Snk9T4iS12lXFvPm9hpbLjYGhBx3A0YmG2nsJLPLKipTuWE7Szhs\nmlMCRh57Yge+GiB12Ia+8fLXcTvGBwX8vhObsEDnhka9ZJtpEDlIsq5zuxri0TtepdJ8Siu30VcU\nek1DCj2aIoxTW6xpeo2J2+PWhH7ogESrdCmtb6Pw+13avOx+Xx9S0dTHrD6p/Q2k6xfkeLIZoRbb\nBidrFtCk32h+2iebQuiLu3/ckNYP5Dv9HSNN77lmCHU2KTbAdjohSl5ZImjYJkF3K1qlBywNARck\nspqaG+RGSAk4KP5gjzbZBfkLF78FAWQnODc5vZ9h+Fpc9BK28owQz94fd329N1iDlaYc+BlrQj90\nQKJVupTWt1E8v2xA6YJ8C0ksLHTMG/WL0Qgo2YxQi22DkzULcEe/n/Y1LRYvzMGuemS12VHv9Dv3\nN6YYHmXDzCbFym2n/VESdtiyRFBFTKVs7VVpCKgm0fbU3AgEcVH8wV5XY8fomRk2vwWJBvMac+OX\n7V+4U4iVJkxx9+iV5lBhwTy2j/qserraFvAeWyCeX62ay2wUv1XFOXNVxyNbbYrxgRYHaBZWWvr9\nDkJ5gaVHatA/wT13o34U1DnS+JDGaAmY2aRIk+10gkIGtWWJ+tfyTNrGXpWGQHqy266hhoLYKAnZ\n/EYBUTmpQTndEIO9siNHvyeV/pej3BqQJ381arutxtW+OqZ6Ym/Bm5PRkQXicBUJyo6N4req3LDX\ndTi21aYYH2hxgGZho6Xf7yAMHWHp/ikYOd7BN+gYafpTBnpLwMwmRYpspxMUMqYtS9SP80zaxl6V\nhkB6stuuoYaC2CgJ2fwhATEiQqjh6d0Qg72ywy8uSH0ppy0hUTX5vla3w9c/YAwW28Zh0oEF0nmV\niZLwV4WuSYJLHDfVppkRanF2zcI4S38C7fJ/ABk9mqHSO0YasmFmk2IvTKcToiSDYcqmUa9Hz1yV\njoDrAmzXUAJBbBS/L8VpgdA/piE53RCDvbKFpaZUOtxytK+WAfuzeLX4pflB7xWLVjaeSahRfb+K\nI627uVL66gx8sNldiw9H59p/6i7QMmofqi0jeI+gb1I4G+UpQh179qs30h5nz/sh/goardwWVWJ3\nTP6L7qjNtfaYgX0K789UJ9+vLAZ+osvmfr7L+nP1vWFgY13gDLV6g5ejnGMGuv0/MJ5jc3N1y8UA\n/ukpbvcslwE57tkxwC/Gnp2KfPWFwIB8+I5P2/7xQnB39fnYP7f6fMo96gYD+LNAbO8F+Hg3tOc6\nu83AbJcfyHXb/lx/rxiYrSFS9Y7tD031CjHHOZcM/PBcKst1rWIGRlvo3Cj+eam80ldilPG3uHnL\nGcjCQLXjW7BZtOQyy8TA2voyAeewK46Br6w4i3ODYwZeEXfzXs5AKgNDc6nT+eT5zEBx7Hy2Lrft\n/GLg2+eXObk1AQy8K0A2F73QGRjKb/VWagoUnuiu5f8P7lYFwOfp2M0AAAAASUVORK5CYII=\n"}, "metadata": {}}], "execution_count": 167, "source": "formula = formulas[1].as_real_imag()[0] # Just want the real part\nformula", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 168, "data": {"text/latex": "$$\\cos{\\left (\\Re{\\theta} \\right )} + \\cos{\\left (\\frac{1}{2} \\operatorname{atan_{2}}{\\left (0,\\cos^{2}{\\left (\\Re{\\theta} \\right )} - 1 \\right )} \\right )} \\sqrt{\\left\\lvert{\\cos^{2}{\\left (\\Re{\\theta} \\right )} - 1}\\right\\rvert}$$", "text/plain": " \u239b \u239b 2 \u239e\u239e ___________________\n \u239catan2\u239d0, cos (re(\u03b8)) - 1\u23a0\u239f \u2571 \u2502 2 \u2502 \ncos(re(\u03b8)) + cos\u239c\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\u239f\u22c5\u2572\u2571 \u2502cos (re(\u03b8)) - 1\u2502 \n \u239d 2 \u23a0 ", "image/png": "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\n"}, "metadata": {}}], "execution_count": 168, "source": "formula = formula.subs(im(theta), 0) # Only dealing with real angles\nformula", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 169, "data": {"text/latex": "$$\\cos{\\left (\\theta \\right )} + \\cos{\\left (\\frac{1}{2} \\operatorname{atan_{2}}{\\left (0,\\cos^{2}{\\left (\\theta \\right )} - 1 \\right )} \\right )} \\sqrt{\\left\\lvert{\\cos^{2}{\\left (\\theta \\right )} - 1}\\right\\rvert}$$", "text/plain": " \u239b \u239b 2 \u239e\u239e _______________\n \u239catan2\u239d0, cos (\u03b8) - 1\u23a0\u239f \u2571 \u2502 2 \u2502 \ncos(\u03b8) + cos\u239c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u239f\u22c5\u2572\u2571 \u2502cos (\u03b8) - 1\u2502 \n \u239d 2 \u23a0 ", "image/png": "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\n"}, "metadata": {}}], "execution_count": 169, "source": "formula = formula.subs(re(theta), theta) # Re(theta) = theta for real angles\nformula", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [], "execution_count": 170, "source": "from sympy.utilities.codegen import codegen\n[(c_name, c_code), (h_name, c_header)] = codegen((\"f\", formula), \"C\", \"test\", header=False, empty=False)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "execute_result", "execution_count": 171, "data": {"text/plain": "'test.c'"}, "metadata": {}}], "execution_count": 171, "source": "c_name", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "stream", "text": "#include \"test.h\"\n#include <math.h>\ndouble f(double theta) {\n double f_result;\n f_result = cos(theta) + cos((1.0L/2.0L)*atan2(0, pow(cos(theta), 2) - 1))*sqrt(fabs(pow(cos(theta), 2) - 1));\n return f_result;\n}\n\n", "name": "stdout"}], "execution_count": 172, "source": "print(c_code)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "stream", "text": "test.h\n", "name": "stdout"}], "execution_count": 25, "source": "print(h_name)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "stream", "text": "#ifndef PROJECT__TEST__H\n#define PROJECT__TEST__H\ndouble f(double theta);\n#endif\n\n", "name": "stdout"}], "execution_count": 95, "source": "print(c_header)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [], "execution_count": 124, "source": "[(octave_file, octave_code)] = codegen((\"test\", formula), \"OCTAVE\", \"test\", header=False, empty=False)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "code", "outputs": [{"output_type": "stream", "text": "function out1 = test(theta)\n out1 = cos(theta) + cos(atan2(0, cos(theta).^2 - 1)/2).*sqrt(abs(cos(theta).^2 - 1));\nend\n\n", "name": "stdout"}], "execution_count": 125, "source": "print(octave_code)", "metadata": {"collapsed": false, "trusted": true}}, {"cell_type": "markdown", "source": "And more. Maybe you [need a topic for a master's thesis](http://mattpap.github.io/masters-thesis/html/index.html), or you're a [bioengineer and need to do some work](http://continuity.ucsd.edu/Continuity).", "metadata": {}}, {"cell_type": "markdown", "source": "## Contributing", "metadata": {}}, {"cell_type": "markdown", "source": "* Mailing list\n* https://github.com/sympy/sympy/wiki/Introduction-to-contributing\n* Very friendly community\n * Used to dealing with newcomers and students! (GCI/GSoC)\n * Lead dev is a former GSoC student\n * GSoC going on right now! (Submit under PSF/NumFOCUS/Sage)\n* Lots of tasks to work on\n * Documentation, triaging, new features, bug fixing...\n* Not just Python\n * Web applications\n * Client-side console\n* BSD license\n * Use it even in commercial software\n * Example: third party Android app https://while.io/mathstep", "metadata": {}}], "nbformat_minor": 0, "nbformat": 4, "metadata": {"language_info": {"nbconvert_exporter": "python", "mimetype": "text/x-python", "codemirror_mode": {"version": 3, "name": "ipython"}, "pygments_lexer": "ipython3", "file_extension": ".py", "version": "3.4.2", "name": "python"}, "kernelspec": {"language": "python", "name": "python3", "display_name": "Python 3"}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment