{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Už jsme viděli mnoho nástrojů pro numerické výpočty. Co ale symbolické výpočty? Každý ví, že derivovat umí i cvičená opice, bude to umět i Python? Nečekaná odpověď je ano. Symbolické výpočty naučil Python [Ondřej Čertík](http://ondrejcertik.com/) v balíku [SymPy](http://sympy.org/).\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tento notebook byl z (velké) části převzat a přeložen z J.R. Johansson: [Lectures on scientific computing with Python](http://github.com/jrjohansson/scientific-python-lectures) - díky." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Na úvod\n", "\n", "Někteří z vás možná znáte nějaký systém pro *počítačovou algebru* (Computer Algebra Systems -- CAS), např. Maple, Mathematica, Derive, Maxima, Reduce. Pro Python existují dva velké projekty počítačové algebry:\n", "\n", "* [SymPy](http://sympy.org) - modul který může být použit v jakémkoli Python programu a je dobře podporován v Jupyter Notebook. \n", "* [Sage](http://www.sagemath.org/) - toto je už kompletní (a velice obsáhlý) systém, který si klade za cíl být open source konkurentem komerčním produktům.\n", "\n", "My se tady podíváme na některé základní možnosti SymPy." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline --no-import-all" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sympy" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "sympy.init_printing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definujeme symboly\n", "\n", "Pro symbolické výpočty potřebujeme pochopitelně symboly, tak jak jsme zvyklí už z matematiky na základní škole. V Pythonu samotném máme sice proměnné, které jsou v podstatě také symboly, ale operace s nimy se řídí zcela jinými pravidly než potřebujeme pro symbolické výpočty. Naštěstí tu je třída `sympy.Symbol`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABHNCSVQICAgIfAhkiAAAAMJJREFUKJHVziFPgmEUxfEfsBHoBjeaBJJ8AWkkI7PY2Kh+Ar6AFrObyUojMrqbG5ENG6PpRoCkm06h3Hdj7MWHYOGm557z/O85/OOMsEZ7Ry/gKby7fXADP5iitKXfB/iYSs8SOrH3Yu+jmIKr+MQcNwEOUU6B2dwGtMYzKnmf9tVYbL27+Dg09Rq/eIvkh0PBS3xhghO84hv1FHgR9WY4De0q0gd/gQ2sourZjjeOA808sIZ3LHGe47cCfklVP5LZAJRWKsLu3YOtAAAAAElFTkSuQmCC\n", "text/latex": [ "$$x$$" ], "text/plain": [ "x" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = sympy.Symbol('x')\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Co když napíšeme něco trochu složitějšího." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAAAUCAYAAAAJD/ojAAAABHNCSVQICAgIfAhkiAAAAu5JREFUWIXt11+o1EUUB/CPKSUi9MfMBF8CgyCoC9FbgqYVGFqWIPXiD25IklT2nyCwkPTBB03IByGNCIqiEgqjXgIrepAyLyqEyCXECiWTwjArfZiz+WPadYfd32VV7heWvfOd7zlzzpydM3MZx0WBGfgHr8V4Gh7BhziIP3ECX2IYlw0gxn4w8PxW4AzmxfjRGB/B21iHN/Bb8O9jQtNBjCEGnt9OHMPEGN+JRf5fyevxYwTxYA/rVGE7t5cg+0Bj+X0Wkw9k/ARsj7n12dyVOIVthcG+GH42F+rrqPS+wfeGbclnqGbXV36Tssln8S3WYofUd2ADlmMrXmgT+OX4oDCA0/H9d6G+KZzAFqzEPukYt3ATlkk99HPsrc01nt92qQJVjFsVeVf75v0e/sDkgsUnYST83VMSbYZKfy1iSdivzfjngh9uY9N4frOkW3EUq0L8qVTFHJPxewRRgg3h75NCfY5Kfxv8ctgvzfh3gr8t48csv3XO9aOvMKWDbnFoHi5Y/PHQHsA1BfpR5T3zjHTyumFHaG/M+B+ko31FxvedX96DWzha+3sYJzvoluAv3Sv2GDZhP+bj1+7x2oirMm4I9+FNqQB17CnwOSQd94M1bipmS335VKYfk/wewr/4SarIlg66idLTZWeXxZ8MPyO4rou2Gyq9t4irnTuRdcwJ/q2MH5P8FkoVG8F06ed+Wrplc8wLxyvO4+/50HyHa7stXoBK7xvcivf1jH8i+Kc76BvL7w6pFRzCzOCWhoOP2ug3S8+4GR38vRS2u5X13BJUet/g1dpv2Nbg7874RvJr9eBb8bH0VrxLag+kt+Juqe/Nwa6a7f34Gr+08bscr0SAu6QLIMeosoupKbT+efg+41ubc7PUQw/HuLH8ZuNnHMctbYQLpEp9U+NuD+6p9rlYo/ut/0UH2/Oh0vsveI+0IfmLaJnUa0/imeAGld9/eDWc3NCPkwsYA8/vgLJn0cWKSz2/cYxjHBcGzgKxSxQuNlrcTwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{x}{2} + \\frac{\\pi}{2}$$" ], "text/plain": [ "x π\n", "─ + ─\n", "2 2" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(sympy.pi + x) / 2" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "sympy.core.add.Add" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# co jsme to vůbec dostali za typ\n", "type(_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Můžeme také přičadit symbolům nějaké vlastnosti (to se pak pochopitelně může projevit v dalších výpočtech)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = sympy.Symbol('a', real=True)\n", "a.is_complex" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "b = sympy.Symbol('b', positive=True)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b.is_real" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC8AAAASCAYAAADLw4ffAAAABHNCSVQICAgIfAhkiAAAAa1JREFUSInt1rFrFEEUx/GPeickqBGEFIbIgRpsUopaSELAMv+Dio2VNoKNoI2FnaUIIU0KQRAsxCq1FqKCgoQIa0SJCpqkUzFn8ebwWHfvcrmVgOQLw4P5zZt58+btzPIf0Oyxnd2SKHPUkr1RoF3GEG5jJae9+JdBVUEmstzY2jDK2dmHb0NsbhZjuIfPWMdkak1cL/HPUiviBO5jGT/wHndwsH1Q7W+/njmMp1jAHAawhn2bnO8c7uI7HorAj+ICpnESS90myXQum4Y/H/DNAn1S75kfE5lexEhOm8IvPGh19FM2LT4p/uA3w0XUcQkfctq8OIlp7KWasnkpjrgKTiU7geMF+jB2iRN6VkXwyxXM0eJAsle6jNtDNZlvlvSvJ1u2xhBWc32rbdpat4WrqPkyviU7WqAdwf6C/ifJnu538czGbpvZEr0uMrkiarXFAB4l3yznc0zcNguirvPs1raxKsqmjJ/i1+IanosrroYz+Jhanjc4jxm8xmOxkToOpcC/iE12JNNf5mEHruKtyOgSbmFQ5xd2PM37TtxkX/FKvLJT3QLfZpsO/AZBHWkoM+IwKAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\mathrm{True}$$" ], "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b > 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Zlomky" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAG4AAAAVCAYAAACnvtv5AAAABHNCSVQICAgIfAhkiAAAA3lJREFUaIHt2UuolkUcx/GPerAjRsdsoRSZkRQSUXYDFymUXSC6QLSJCq2W5aJVtah3ZVEtKhdREEabiu4ISRQEYRcjKArSqOxtUac7WUpJpS1m3niannlu5z0XOucLDy/8Z+Y/v/88M/+ZeV7m+F/xBL7D4ukWMss5C4dxY5PKZ+MQbq2pd110ehg31dRdhr/wUMHWL7RPn2+aCJ0i+rrrLIs7pW4cX8A4jiwaR0oqbsEveLiis+OxFftThxmuwPwoosg+PFBSf38Dn1NJV525uAc0Gce7sQubhXdTysnCanu0Qsw8vIbPcZ9mK24HfsCCgq0fn5lOX3edZXEPaDOOu/Fl0c/8pMIN0eHTFWI243xswoF67cZi/e1C2pgt1MXdZhyfwgpsGBjSVLkhdvJOxsFq3IMH8UbsuI5LsRDPl5QdgWujqAP4MPqdaS+4i86quNuO45vx90K8khYuxp/4KNN4BO/hEyyKtp76VPmMkMNHE3tf+Ya/F+urophi+rrpzMXdZRzHYvm7A0MxVR4n5NDxTOM7sQYb8VuF4CKjuETI9b8nZdtwAZYLk+Y0PIKVsf7pDfuYbLrorIq7yzjui35WlBWuFd5q2f52rrAa703sPdUz5fJYfk1DgXB/bJM7ic0UqnTm4u46jvBVbPsfzoiNX0rsI8Ky/ljI9W063IaDwlJvyqro88cWbaaDKp1lcU9kHOEn/FpWcGxsvDOxL5G/gKZP8a6zQDgK76gQU8ZR0VeaYmYaOZ25uLuOI2FLOyRcHfDvU+U4vscpSaODeCwj/kwhX+8UZtPbhbJ1OEb7lLc2/u5t2W6qyenMxd11HAnvZB4+yIl5Vnjjq+pUR3ryS3yrcFxeVlJ2KpaW2E/Ap9HnHUnZ49G+saG2YdBFZ1XcOXqqU+WmWH7zwJDe457DVbgYn7XouIwr8Ra+LSm7GrfhdXwh5O6ThLvPKF4WNv8igxNw6QY9SXTRWRV3Vy4SJkN6/viHhcKH010NHfaUz5Rzoj33oXo9nsQe/Iw/hDT9Kq4X0kLK+8I31KMbahsGbXXWxZ2jJ7/ixoRrw4t1Tm6PTta07LzIlujjxAn4KLJEmHHpMXqmMey44Zbo87y6iqPCB83tE+hst4qNtAOXCae35UP0ORkMO+5F+Fo4ezRiHe4y90fqdLNaSKMrp1fGHHPMdv4GFacsEvhTNl8AAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left ( \\frac{4}{5}, \\quad \\frac{5}{4}\\right )$$" ], "text/plain": [ "(4/5, 5/4)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1 = sympy.Rational(4,5)\n", "r2 = sympy.Rational(5,4)\n", "r1, r2" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADsAAAAUCAYAAAAz30VQAAAABHNCSVQICAgIfAhkiAAAArlJREFUWIXt1k+IV1UUB/CPKRGajiVoi1yYVARtCkpFkVFRhAgS21qLJCRRo4JAMQYXKkhizqYWmWDtotyUaVGR9mfRQgicnAonF0YgoY3hv0oX5zx7PH9vfu9NaZv5wuW++z3nnnfOveeeexnDNazClWyrO8ifRD8O4/fUe7uh7Rn4C7tzPC3/8T5+xHmcxRE8g1tq7NyNPTiFixjCLtzR0A8wE2cwrD7YoykbxoB2wT6b+otyvCbHp/AOtmUQZ5J/F+MqNmbj15Tvx3Z8muPvxQJ2xTh8gp+wQ32wi3Bv6vdqF+wBnMb4HC/G467fwbtwMm2vrMgOJr+uwu9M/vUmjmzA31iIPvXBltGrebA9IuXeauIMNqbt/hJ3T3InXL9Ak3EOf2BSQXY6Bw+IdHgNXzR0pi0ew614r6H+5ez/LHGLsz8kNqaMYXyJiZhbkNVgJ2CfSJuNDR0ZDVaIVf+4ge4EPJXfH5X4+7MfrJn3Q/b3lQ2V8QoewgJRDW8EbsNycWYvNNDfjgfxoTijBXqyP1szr+CnFkR5Zx8Vu/kqvm7gxGixDLeLK6Yb1uNFUVlXtfxPUbmvFEQRbJG+g9jc0mhbrMAlfNBFb62oG8dE1f+tIi92rkdnTKnoXcNU/zweurVdNcZ7da/G48V1c2AEHXg+bX2H6TU6q1PnjRp5cS0tKYjizF7EmzWTHhbn+AiO+3cpvlBc9COl8MvinB7FUrE4nfBZ9stEhpYr8mTMF3XnmzYO9vnv7tl+8UScUSPfnDa+xZ0NfGv1qKhW47Z4Ihvx0oF52Jvfp/FSRf8r8cSr4mlsEYtxWBSnKoZKtuG5tLdbpOsA5ogzPohNzUMJ9Knf2UJW14ZKuo8k90KX/4zUPu8wb6Z4if0iCt/PorA1yYwbhq3C4Vn/pxM3CwOi6IxhDGMYPa4CTh/DUyirsdwAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{41}{20}$$" ], "text/plain": [ "41\n", "──\n", "20" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r1 + r2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vyčíslování" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "y = (x + sympy.pi)**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numerickou hodnotu můžeme získat pomocí funkce `N`. Často také využijeme metodu `subs`:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEcAAAASCAYAAAAJ88NbAAAABHNCSVQICAgIfAhkiAAAAw9JREFUWIXt11uIVlUUB/Cfw3QRjMIUI4iyKAwnIulOFyqEKHyQ6rF6SCEINCKIrPAjKs0iCquH7lC9FdFDFJUgU1GYVEQZg12mohtpjkSk5fT1sNY0xzPnnPnOzPQ2fzjs76y119r/vc9aa6+PWfSEo7EKr+BL/Im9eBc3oK/B9kK8jJ+wP8c3ccU0+FyLbj6raubcjy34Pvn+ho+xPvfThFacb0wiP+JFbMAzGEn5S5hTYXdn6n/Fs7gPT+BDbJqEYB2Oy3V/13w4f+GD5LkRm3PdLn5IP1VozflSrDAxQo7Bd+nsqpLumpS/hSMqfB5SQ64Jc/A2vsIDmg/n8Br5vWn3eIVuxjmvS4ebC7I+fI0/sLCtwwasxT+4CB3Nh1OH040fQBGtOPf3uNjfOR4oyM7HYpFue3AlBrAP2/B+j76LOFWkxyMYFNE8FazI8dOSvBXnXg6nH9fl7zcK8rNy/AUf4bSS3SCuFnndC/rxvEjhdT3ajOFWzMOROBMXiIPZWJo305w9KEL0tZJ8Q8oPYCcuS4JLxSF2sbXXRXA3RnFeQdbRW1r9bPxm6+J1LKqYN6Oc16TBF5hf0m1K3ajI8SLmiuu16+DN1uHsJFy+KTra1ZxFWIkhcesu+78435QTPxc3Vhm3p35njf1TqV87yTr9YjM7cFhJ1zG1gny86F0+K8lbca5r7G7Go+n8EhG2ZQzlOFLjY0+Oc2v0Y5iHU0Qx3ufg9Fifc57M94cn8TWGb8VhL8WCqXKuKsi3iUL2CZZjV42jQZEKJ+NQ0ZAVMZDjcI39GPbj6RrdMpwhuvQh7W7AY3McLcimxfku8YW2m1hjqvBCzr+nJF8uepURHFXSnYQlemu2OurTaonqdO8z3gS+Nx3Oxci53viN8Y4oxmUM47nC+y04B3eIpm2byPeV6We1iSG8JecsNnlUNeFy0UEPim56tyjIF+NEUQpWV9hNhfN/X6np2Vqx2Hw8hG9EmO7Gqzi3ZlPD6euEGn0Vp6rIGcBjIv13iXTZK/4fdTRHflvOs5jFLGYG/wI7SgOPC9OLHwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$26.436$$" ], "text/plain": [ "26.436" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.N(y.subs(x, 2), 5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To samé pomocí metody `evalf`. Pro obojí můžeme zadat počet platných číslic." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068$$" ], "text/plain": [ "3.1415926535897932384626433832795028841971693993751058209749445923078164062862\n", "08998628034825342117068" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.pi.evalf(100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pokud chceme vytvořit ze symbolického výrazu funkci, použijeme `lambdify`:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# první argument je seznam proměnných (podobně jako pro lambda funkce)\n", "f_x = sympy.lambdify([x], (x + sympy.pi)**2, 'numpy')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xa = np.linspace(-10, 10)\n", "fix, ax = plt.subplots()\n", "ax.plot(xa, f_x(xa))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Symbolické úpravy\n", "\n", "Toto je velice důležitá aplikace, která nám může v mnoha případech ušetřit nemálo práce.\n", "\n", "### Expand a factor\n", "\n", "Začněme pracovat s polynomem, zadaným jako" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMMAAAAVCAYAAAD7GFqYAAAABHNCSVQICAgIfAhkiAAABKhJREFUeJzt2luoFVUYB/CfJpUZ2NUiqpc0LCS7EQUFp5KCILq++NSQPQRWSBSRJJ2X0CKpiC70EBZFGUZBRCGYkRZ21RCSLsKxsnM0ySzISuv08K2t2+3M7PHcHHf7D5u9Z63v++b7//d8a2atNXTRRReleBFbMelgJzKCuACDmFPBthP509WAA9PAhfgXd49mRiOEm/EkVuE3QfKlEvs30I+jS2wOFf7H4zbB6TvsxA6sFn/0+AK/TtIAHsYK/CA0+AVr8aDQKA9VNADL8SsmjkSmo4x1ogB+xwbti+GiZDO/xOZQ4X+74PITXsZCPC9yH8QyjMvx6yQN4G+sEdwXicHxU8FxM07L8amigTPFiPDcCCZbhkwk1TNE/8sxTfzpPdoXA1E0m3BYTt9Y82foGlyBa+1/BzgZ36eYNxX41kmDzPCugSML2h9KcZ8u6N9Pg1YhbxUX1tIc5+Up+I0t7eOwJPUtKkl6NLAS36ZzV8WrOB2zcvrK+FMvDd7DW+LCbcYAnk2/ewp8O0UD+LOg/bX0Pa2gv0wD8Bl2y580zcQ/+Mq+I8piIcBQRpLM8EaFZvSodmeYlewezekr40/9NWjg3hTzsYL+OmmQGXn+8ECKu7igv0wDk4QI60tOsCQFyNLx/HS8VPGErQyZsS+Gycnuk5b2KvyptwYwQXAYxNUFNnXSIDMy/O9BrxgAVqWYX+LEAvsiDRDPioPiNliEU8WMvQ93JPt3cfiBZp6QGftiIDgMtLRV4U+9NSBGukG83cauLhpkRob/QIrT+LyDk9r45GkALrG3usuwsOmEH+Koisn2tSTb7rOkYtwGelQvhs1iBGxGVf7UV4O7kt8GHNfG9mBo0Gd0+RMFcAO+Fitt55fY7qPBhKaOnem7aHbewM9Nv+fgj4pJPo5jWtrOxXV4QQjVjHUV4w4FE+3l20BV/tRTg7l4QjzLXynW28twMDQYi2tgi9hH+ALfiM3DGQW2eRqAU0Q1ri450WyxetGfbJ8ZQrLNyIz9Y9J4wWFjS3sV/tRTg3kpxnpMqWBfJw0yozOBJjbfBnFCTl+RBoilsa32rfhmXCM2ONaLSckG7ML0YSSbGftiOCvZvd7S3o4/9dTgvuS/Vv6fnoc6aZAZvWLYkmIfm9O3nwbNM/9BfCAEndrieKnY0fwRVwmxFojHrLHeWxguLk7fK1vay/hTTw0WpHN/Lh6NtlX06xQNpotNxlaMF5tuU/ARtufYFGmwB7OFIHOb2maKrfl+nNFi39j2vqxC4nnIDG9UuF5MspaI1YxBcdtrtOWtIb8iJk152/R5/KmnBrckv91iObE355MV+NZJg8zQr4F54q60QuxvNF5J2Zhi9uPsAt8yDRBLYwP4OB1PTcfbcU6OfWPjYs0BkmggM7xi6FW+GtHXYj9ZTJjeLIjXyp/6atCr/WrM+zl+ddMgM/RrYAaeEhPtbeLi3iGKs1fxilo7Dfbg/pTceUNIru64U/sRrJP509WAahogltU2ifdeOgkTxbrzsjZ2ncqfrgaUaJD31uJusUZ7hHhPZdeopjZ2mIa/8Ih49i1Cp/KnqwHVNeiiiy666OJ/j/8AKHMiU6lE5LgAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left(x + 1\\right) \\left(x + 2\\right) \\left(x + 3\\right)$$" ], "text/plain": [ "(x + 1)⋅(x + 2)⋅(x + 3)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = (x+1)*(x+2)*(x+3)\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Polynom rozvineme pomocí `expand`:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAALcAAAAWCAYAAACCLg3UAAAABHNCSVQICAgIfAhkiAAAA8tJREFUaIHt2kmIHFUYwPFfYhSUCBJQFDwITkTUGA8iCgmMG2JElJAcciuJ4EFBPLngIQd1QhYRFYUg2EIuQUTFi0YRF1xgDkbBBcQ44mHU0Yy4BXXieHhvJjWV7nT366rqHqg/FDP9Xn9ffdvbqouGhoa23I3P8Fu8PsItQ7WoOh7EpODnDF7DZUO1qKFSbsMmrMVFeBT/4vJhGlURb+AOoaDX4WX8gDXDNKqhXo7grmEbUQOrcQy3DtuQhvasLFHXKdgmJP3DEvX2y0a8hGn8Hf8eFFaYMjlTiN+RkvX2whY8hfeFbdI89lcgM6rUlWPr8AfmMFvFDfrgYSFpM3gej2GfsFfeVfK9DuATYVDXzSHBz9/xpd4KNUVmFKkzx07DGK7EBH6WdtDKBKPHE+3YGuXfFGbVIqcm6m3HbmG2GBtARybd32uFc86KKN9LoabIlE1miDk+GIU3F9pXoBX7dnYx4C0814OhRTLpjq/EYfyJs3uUSfV1L37EJQl25skMlugFxvVfqL3KlFEPeTL15ngJ64VD0heWLrd7o1H7etDxtrQZIZPu+IYo+yJWCY8j78e9uKaDTIqvTyqnsFkexV1GPeTJ1JvjE2hFJVn8/FD8fMCJB9Cdwub+AmHvPYH/cHOC8Zl0x++Lsk8Lz93nC9e72o/2lt59fUY4iF2Hc3PX6gR7WR7FTX8x6kam/hwv4XwcxRTuiYKvC3vrIi18J5xYfxK2JDclGM5gjk9E2Tl8jeuFortUsH0e77SR68fXYjAXrh0J9rJ8irufGHUjU3+OOyqaxwc4I8GYkzGlc7G0u1pd9O2K3zsmLKV5Tsf3sb/d8lW1r5Tvb55x1RY3aTGaMuQcr+qgaCb3/3b81eXG/fIEziq0XSH84vmCEJg8h7rom41/D+PTQt9R4dfF7bhKeEUgT9W+Ur6/dZMSo1HK8SLbhH3ztDASnu1y07LIpC9Zm6PsZIf+3bH/gUL7sHxl+WxLyoxRpsYcFw8Em4RR9bnwfshXuBMXJxhTJ+8Je7G12u8FF567T+XalquvdTJKMUrJ8SIbhOXmMM6LbVuE0fBKmVZ2IDPYTLY/yj9SaL9RmHl+dXyZHLavjP7MXUWMMvXleJH1sWMaFxb6JqPCjYkG9UpmMMfPEU7R88Io3yM8E50T3lTcGr83Cr4ymL+3CwewluNPCr7Jte0ZUKaqGGXqyfEiY8Krm7Pav6p6Q1T2caJBvZIZfCZbg8fxLf7BL3gVV8f+UfGVwfzd4eRPHqYGkKkyRpnqc9zQ0NDQ0NDQ0NDQUBP/A/Vi2OTQk0axAAAAAElFTkSuQmCC\n", "text/latex": [ "$$x^{3} + 6 x^{2} + 11 x + 6$$" ], "text/plain": [ " 3 2 \n", "x + 6⋅x + 11⋅x + 6" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = sympy.expand(y)\n", "z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pomocí `factor` můžeme dostat zpět původní faktorizovaný výraz." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMMAAAAVCAYAAAD7GFqYAAAABHNCSVQICAgIfAhkiAAABKhJREFUeJzt2luoFVUYB/CfJpUZ2NUiqpc0LCS7EQUFp5KCILq++NSQPQRWSBSRJJ2X0CKpiC70EBZFGUZBRCGYkRZ21RCSLsKxsnM0ySzISuv08K2t2+3M7PHcHHf7D5u9Z63v++b7//d8a2atNXTRRReleBFbMelgJzKCuACDmFPBthP509WAA9PAhfgXd49mRiOEm/EkVuE3QfKlEvs30I+jS2wOFf7H4zbB6TvsxA6sFn/0+AK/TtIAHsYK/CA0+AVr8aDQKA9VNADL8SsmjkSmo4x1ogB+xwbti+GiZDO/xOZQ4X+74PITXsZCPC9yH8QyjMvx6yQN4G+sEdwXicHxU8FxM07L8amigTPFiPDcCCZbhkwk1TNE/8sxTfzpPdoXA1E0m3BYTt9Y82foGlyBa+1/BzgZ36eYNxX41kmDzPCugSML2h9KcZ8u6N9Pg1YhbxUX1tIc5+Up+I0t7eOwJPUtKkl6NLAS36ZzV8WrOB2zcvrK+FMvDd7DW+LCbcYAnk2/ewp8O0UD+LOg/bX0Pa2gv0wD8Bl2y580zcQ/+Mq+I8piIcBQRpLM8EaFZvSodmeYlewezekr40/9NWjg3hTzsYL+OmmQGXn+8ECKu7igv0wDk4QI60tOsCQFyNLx/HS8VPGErQyZsS+Gycnuk5b2KvyptwYwQXAYxNUFNnXSIDMy/O9BrxgAVqWYX+LEAvsiDRDPioPiNliEU8WMvQ93JPt3cfiBZp6QGftiIDgMtLRV4U+9NSBGukG83cauLhpkRob/QIrT+LyDk9r45GkALrG3usuwsOmEH+Koisn2tSTb7rOkYtwGelQvhs1iBGxGVf7UV4O7kt8GHNfG9mBo0Gd0+RMFcAO+Fitt55fY7qPBhKaOnem7aHbewM9Nv+fgj4pJPo5jWtrOxXV4QQjVjHUV4w4FE+3l20BV/tRTg7l4QjzLXynW28twMDQYi2tgi9hH+ALfiM3DGQW2eRqAU0Q1ri450WyxetGfbJ8ZQrLNyIz9Y9J4wWFjS3sV/tRTg3kpxnpMqWBfJw0yozOBJjbfBnFCTl+RBoilsa32rfhmXCM2ONaLSckG7ML0YSSbGftiOCvZvd7S3o4/9dTgvuS/Vv6fnoc6aZAZvWLYkmIfm9O3nwbNM/9BfCAEndrieKnY0fwRVwmxFojHrLHeWxguLk7fK1vay/hTTw0WpHN/Lh6NtlX06xQNpotNxlaMF5tuU/ARtufYFGmwB7OFIHOb2maKrfl+nNFi39j2vqxC4nnIDG9UuF5MspaI1YxBcdtrtOWtIb8iJk152/R5/KmnBrckv91iObE355MV+NZJg8zQr4F54q60QuxvNF5J2Zhi9uPsAt8yDRBLYwP4OB1PTcfbcU6OfWPjYs0BkmggM7xi6FW+GtHXYj9ZTJjeLIjXyp/6atCr/WrM+zl+ddMgM/RrYAaeEhPtbeLi3iGKs1fxilo7Dfbg/pTceUNIru64U/sRrJP509WAahogltU2ifdeOgkTxbrzsjZ2ncqfrgaUaJD31uJusUZ7hHhPZdeopjZ2mIa/8Ih49i1Cp/KnqwHVNeiiiy666OJ/j/8AKHMiU6lE5LgAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left(x + 1\\right) \\left(x + 2\\right) \\left(x + 3\\right)$$" ], "text/plain": [ "(x + 1)⋅(x + 2)⋅(x + 3)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.factor(z)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`expand` můžeme použít i pro trigonometrické funkce:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\sin{\\left (a \\right )} \\cos{\\left (b \\right )} + \\sin{\\left (b \\right )} \\cos{\\left (a \\right )}$$" ], "text/plain": [ "sin(a)⋅cos(b) + sin(b)⋅cos(a)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.expand(sympy.sin(a + b), trig=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Zjednodušování pomocí `simplify`" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAASCAYAAACAa1QyAAAABHNCSVQICAgIfAhkiAAAAHZJREFUKJFjYKACCGFgYJjMwMBwmIGB4RMDA8N/BgaGJYQ0XYAq/MzAwHCdWE2ODAwMqgwMDIwMDAwOuDSxoPH3EzKVgYGBgYkYRaOaBlwTeuQGQDEDAwODBJS2ZGBgWABlv2FgYChBN6SBAZJ0cOEH5LiMzgAA6XoX52TB9a4AAAAASUVORK5CYII=\n", "text/latex": [ "$$1$$" ], "text/plain": [ "1" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# tohle by měla být hračka\n", "sympy.simplify(sympy.sin(a)**2 + sympy.cos(a)**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Derivace a integrály\n", "\n", "SymPy umí symbolicky derivovat (je tedy aspoň tak dobrý jako cvičená opice) a i integrovat." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIAAAAAZCAYAAAD5VyZAAAAABHNCSVQICAgIfAhkiAAABKpJREFUaIHt2luolFUUwPFflual0qQ7JUN5rcgyiS4WpqEh3eittwErwi6EUKAQBUGZZkmQRUVYECYoBkLF6WKGkall0PWlUChPZdmhMLO008P6js6ZM/ub2ycIzh+Gmdlr77XXrLX29Rs6dEgwFce30X4BtuAP7MI6XFiAXR36My1HVjcGgxINx2A69rVh2HQsx5WYgf14F6Pb0NlhIH9ibkI2XYsxeA3Di7HvICfgAG4sWG9RlNCLFQXqfBW/YEQbOi4VdqWCDEtwXgO6GorBTCxt1LomOFP8kKsOg+4iKCk2AabiP8wvQNdadIsA1mISVjagp6EYbMCUZqxrkFXYhmMPg+4iGIyJwklF0IUeDCtA12UicAtz6mwR9udRNwZjsCevQossERk8tsX2ZeGA6QXZc7gZL0b/CwXq/AY7pGPzLB7Nad9QDMr4JCHrEkG4tar8GDFt9mJRjXZL8TPOz+u4DmXtJcBNeE84YB92ipluXkWdktpLQGV5Ca/jV/yNrbihRn+LsjYzE/a04suHs/LZCZ1z8XFC1nAMlolpohaTxQbia/2zcGlmWK1sf6bRjutQ1noC3Jm17RY2PoaXsFlMm32U5CfAerGh24Sn8YpIggO4tqrNVrHjTm3+WvHldZnsyYTOGfhLJFElTcVgLV7Mka/IjChn3xdm31cZeKRcLs6fM3BGxSu1kcmjrPUE+FSM+tNqyE6p+FySnwC9YhRWMjsrf7OibIQI/hd17FqhcV/CyEy+OaFvaiav/J1Nx+Ad+SeAs7EX23FP1uHbGFKjbm/i9UiO/hRl7SXAHpxcp15JfgJsV3v93SGWhD7GZ/W76vTXjC/72IufErJxmY5zK8qajkGXWAbyeLxC0UeKvy/YLm14rdeKOvrmZ/V2iqn7Fpxao14poa+v/I2E/o1iOu/jCodGcj2a9eWPYnapxaRMT6mBfg9yXNX3HpxUp82uis9zxbpTJMswqqrsYtws1t3tVbLP6+h7SozQebgP9wtHbcADYr1uhJ5E+X79p+y92fvQBnQ268thFfqr6Ytbys6GeAJrcuS3ieNNt3Dic+101gRlxRwDR2GO2OccwG8OrZkl9U8Btfggk/dxVvZ9Yx1bmvXloKz+dwn5LOyuo6Om0kq2YkKi7hwxAr/CRfgWt6t/+XAk0SM2bHeIgI7G1QX30S1GdsqPtObLCWKHn5rxJup/qmmI6gR4X9wpV99eTcNq/CAybRceEktIrbP/kcT1Bi51HBr5RS9hvfhQnDBqXbq06svLs/f1CfkUvNWCvQNYo/8FxmQxcroNfOCwRfzgokdRNWWtLwE9Yue8Wpyhl4qjVK+Y8QZn9UqKWQKI6b0Xd1eVt+PLlWK/cU5C/iVOT8ia4gK8nH0eK5z3u5iqqum7nNhURMc5lLWeAHeJ+43vxWjfLe7DH8SJFfVKikuAIcJvlbeq7fhypNj8pU4i12BxQtYSyxT3UORoZYEI6CUF6LpX/uzwvIL/ZzFc/pOnDvUZKi6J1rWpZ5i4w1idkM/Sxuko9WTpXzFl/qP/JUeHxtmPz8Tf6rYKn7bCOHGVvVj6jL+tRd0dOnTo0KFDh6OU/wGbdGq5z88swwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left(x^{2} + \\sin{\\left (x \\right )}\\right)^{2}$$" ], "text/plain": [ " 2\n", "⎛ 2 ⎞ \n", "⎝x + sin(x)⎠ " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = (x**2 + sympy.sin(x))**2\n", "y" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left(4 x + 2 \\cos{\\left (x \\right )}\\right) \\left(x^{2} + \\sin{\\left (x \\right )}\\right)$$" ], "text/plain": [ " ⎛ 2 ⎞\n", "(4⋅x + 2⋅cos(x))⋅⎝x + sin(x)⎠" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.diff(y, x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Derivovat můžeme i funkce více proměnných." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left(x^{3} + 2 x^{2} y\\right) \\cos{\\left (y \\right )}$$" ], "text/plain": [ "⎛ 3 2 ⎞ \n", "⎝x + 2⋅x ⋅y⎠⋅cos(y)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = sympy.Symbol('x')\n", "y = sympy.Symbol('y')\n", "z = sympy.cos(y) * (x**3 + 2*x**2*y)\n", "z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tohle spočítá\n", "\n", "$\\displaystyle \\frac{{{{\\rm{d}}^3}z}}{{{\\rm{d}}x{\\rm{d}}{y^2}}} $" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$- x \\left(\\left(3 x + 4 y\\right) \\cos{\\left (y \\right )} + 8 \\sin{\\left (y \\right )}\\right)$$" ], "text/plain": [ "-x⋅((3⋅x + 4⋅y)⋅cos(y) + 8⋅sin(y))" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.diff(z, x, 1, y, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Integrace" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIIAAAAXCAYAAADHqJcNAAAABHNCSVQICAgIfAhkiAAABQlJREFUaIHtmV1sVEUUx38FQbAawajRBvEm1loxEY2IwciDCYmKxhhFIj7gJ8QPfBASE/DBJ1FQYowf+IEJ+iJojQqJMY2GVtFUKGpSERO1UgxdAS2YRmuVsj6cc7uzszP33qWz7prs/2nvmXPOnPPfmTln7oU66jhOREAe2BjQ5xvAQaAxoM80XIbkcc9/OOdYEIKjoDlHhF0Is4BjwPJA/srBu0AOOLkKc5eDkBwFy3kC0AqcPVZHinbgCDA5kL9yMBtZ1KuqMHc5CMlRTebcgqz0V6oYwx6gDxhfxRiSUAmOSnIeZyncCHyMHB3DQD/QCTxg6ESUlgZTFgGbgF+Bv4Bu4AZPQHcDDcBmz3i7+r3ZkjfoXHngSZWt0OcVHl8XaE6fWPJNwHRgnsNmtsa2X21zGtNCh+5C9f07MAT0ACuBEz3xZOEawnIUIylnlqpRDll9q4ENwA5gp6EX4V8I25CGpgt4BngdWQwjwNWOObuBo/gboJlq+y3FO3adzmfukitU9rbHV7vOdbEln6d2T1vyJao/rD5jPr4GOizd1erjELAeeAr4RmUdSDk1kZVrCMtRDF/OAOxCkj7TMXa68TvCvxDywGOW7TUq/8CSNyIJ9riCMbBR7e/U51X6vJniE20C8Cewz+HjVrV51jF2qo7tMGQzgH+AAeAih8004/cctd8HnGXITwC24q7HWbkOzVEMV85Fwf0BTE2ZNMK/EPbirrV9SKkw0aI27SnzTUOO2r3AMrX5EJjo0O3U8SZD1gj8DBxACHBhCPjFeH5O/TycEhvAq6q71DHWguzWXkueletKcBTDznkUy9VBP3Ks3wSc4dCL8C+E9zyTbkcIMRHvJF/tM/EEhRPnM+Akj158RJv1cg3Fu8WF/cjOi7FTbVozxLZLdZs94306PsWQZeW6EhzFsHMuwmKkvo+ow2NI3Z9l6EQkN4sudOi4iUtU9n5KwFAgLu3PuV511uhzK/A38DnSPPkwAAwaz9+rn1MyxPaD6vpqeJeOn2vJs3BdCY5i2Dk7MQWYjxx7I8BvFOpZRJiF0KSy7SmxLEJIyqn++gTdqarbqc8fafyXJtiMU5sfDdnxnAjnecZdJ4KJJK4rwRG4c07Fa+r8Fn2OCLMQGpAbxqGEuecjO7oHOTr3IE1c0h+0G6m/t+ucLyboAlyoeu8YsnJ6hA34X9s24+4RfLC5rhRHrpxHcS3S6dqIO9/r9DkizEIAaMNfX69CbgG9FN5iLiC5FwF4WXUGEQJPS9AFuEv1lxky89Yww2Fj3hquVPufKK7z4zXOPPCoZZ+Va6gMR66cR3EE6SLbkPvlOuR6kUfusvFdOCLcQlik8gct+UyNJ0fpkRsf23M9cy2mUCvv9eiYeBNpms6x5EuQ3TwMvAU8DryEcLHN0o0b0gPAC8BaZIfmgU8p7d6zcg2V4ciXMwD3IR8kepFVNgB8BTxCcdMUEW4hTEQI+cKQNavsMKUvf6DwMqTLM9dcCnfkpAYR5Do5hH/3zEGOz4PI8duPXMsWOHRvQ2r5IPISbTdyEkxy6GblGsJzlJZz1bASCTqpoSsHW5CdfHkG3YdI3jm1gpAc1WzOk5DOemsAX3GD+HwG3cnIDm8LMG+lEYojb8618MXtKPAl8nGmG2nSysF04H7gDuT19nfIB6A0P+cj9X8tUmtrGWPlKMb/KeeyEX/AOYw0dU3J6nXUUUcdddRRRwb8CyKo8888A7BTAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\sin{\\left (x y \\right )} \\cos{\\left (x \\right )}$$" ], "text/plain": [ "sin(x⋅y)⋅cos(x)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = sympy.sin(x * y) * sympy.cos(x)\n", "f" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\begin{cases} \\frac{1}{2} \\cos^{2}{\\left (x \\right )} & \\text{for}\\: y = -1 \\\\- \\frac{1}{2} \\cos^{2}{\\left (x \\right )} & \\text{for}\\: y = 1 \\\\- \\frac{y \\cos{\\left (x \\right )}}{y^{2} - 1} \\cos{\\left (x y \\right )} - \\frac{\\sin{\\left (x \\right )}}{y^{2} - 1} \\sin{\\left (x y \\right )} & \\text{otherwise} \\end{cases}$$" ], "text/plain": [ "⎧ 2 \n", "⎪ cos (x) \n", "⎪ ─────── for y = -1\n", "⎪ 2 \n", "⎪ \n", "⎪ 2 \n", "⎪ -cos (x) \n", "⎨ ───────── for y = 1 \n", "⎪ 2 \n", "⎪ \n", "⎪ y⋅cos(x)⋅cos(x⋅y) sin(x)⋅sin(x⋅y) \n", "⎪- ───────────────── - ─────────────── otherwise \n", "⎪ 2 2 \n", "⎪ y - 1 y - 1 \n", "⎩ " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.integrate(f, x)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left(\\begin{cases} 0 & \\text{for}\\: x = 0 \\\\- \\frac{1}{x} \\cos{\\left (x y \\right )} & \\text{otherwise} \\end{cases}\\right) \\cos{\\left (x \\right )}$$" ], "text/plain": [ "⎛⎧ 0 for x = 0⎞ \n", "⎜⎪ ⎟ \n", "⎜⎨-cos(x⋅y) ⎟⋅cos(x)\n", "⎜⎪────────── otherwise⎟ \n", "⎝⎩ x ⎠ " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.integrate(f, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generace kódu\n", "\n", "Automatická generace kódu vlastnost, kterou oceníme ve chvíli, kdy cheme implementovat naše analytické výsledky v numerické simulaci. Místo abychom začali ručně přepisovat do programovacího jazyka jako je např. Fortran nebo C, může SymPy tuto nezábavnou práci udělat za nás. Navíc při tom neudělá chyby (pravděpodobně).\n", "\n", "*Pozor, tento module je work in progress.*" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGQAAAAaCAYAAABByvnlAAAABHNCSVQICAgIfAhkiAAABMxJREFUaIHt2Xmo1UUUwPFPmqVli9qmLdyoSCraxTItW7Cy5Y8sogitiIgyCINQoQWiPbFFlFYqaLWNSiuzzEgLLSrKFlqolF6paatt6uuPM7d33+/9fvd5nz816n3hwpszZ86Z35yZOTPz6KST9czm2Hk9+xyH+fgJS/As9sno9M9r2GXd9muD0wXj8e169jsUkzEIR2ElZqJ3jc4mGFW240UYk5Htjz+wV4O2KmjGfWvdqxbGiUHZ0PTEKpyUkV8txqs0puLhjGwWJnXAVkW5AemDl0qytbb0Fd92WI78uTIdjcFnNeURWCYGo1G6iX21bwn9ghtxYUm21pZH8Q665tRNE1tcKQwSke+NTfE5LinL+FqwsUime2zojuAmNGH3gvpLtN1l2jACz2Mp/sSnIjlmI7ypyBfDMBYfi5me5WS8nDr2B77BbK1ncEX+llUrr+CR1K/f8RZOzPF3uDjhbFTwfTOSzVMy8o2Sn2Zcn2SXpvKlBbb2TN/0Wk7dBHynfj49IvU1b/XoKqLVLIIwBbfgkyS7P6fNm7g9Gc0bnPNT2ybciWtxN+aJo2GVivoBmYXFyd/E1JffRbI8MtNmLN7I+8DEfqndh1oPxITk684a2cAkm1pga4Y4Re2bkd+m/WDA1sl+bnKflCqvE8u+SjfMSXVZBxOxGi8WOHxbzKDtcuq2qfm7on5AmnFlpu7YJJ+ekd+r/WR5X2p7diqPT+VHtb4OdMMKfJ1j47TU5taMfLKYoEdhh5pfz4K+rEy2WjFQDOzTBY2qM/2cjHxUMrh3Qbu38St6FdRXqagfkC/lL+uvxBZWyzQ81I6/nfBbsjs6+XhB3A+yzE71/Wpkm2OhWAVbZfSbC35XFfRlOS6i9Sq4WOyhKwoaVm+a2X35LNyBBQXOHhRbwQIx+2aL1bakQL+Id8U2k2UhDs3Iuos8VY9FYjseK7bcuSKn/JmjO0fkpUPwZJJdIYJ6Dn7M6BflriJ+QY+scLHiyNb+jhFLenuxzJu0P/tHir1/VbKxWuSEg2t0KtpP6nm8muprmS4mQnuM0fJduU8ZiROSzg2p3F8Ebq7GBz+PZWKV/kP35HD2GhoYKgb1I43dhLfGcNwlgvO9ltxSUV5AHhDvR/U4Q3xDU2o/pY5ur6RbHZ+Zov8HtONjTfkLp9cKeqROFW0764J7ks8RqVxRXkAux+t1fA8XM/x9bCsm1l/qr5IFIheemfxNrqPbCFsmewdmK96TfzavMljBWbkdjtM6V1V5Nvk7PpUrygvIMJEo8xgs8uQXWl4FTk02ig40RJ5sxs8i//Wuo9sIg0QOaTNGw8QsaRZvQBPEkfYxcQPPO/atCT+I19bHcXOyOy/5eUvLRbKivID0EMfOXTPy/VJ/mrBbpm5+sjOkwM9ILfnmvAKdjjAaTxRVDhAD960IzlKxrO/A0R10eAGeEjNyhUhg7+AybFGjV1FeQIiccG5NeXfxXcu1vcQRh5VmcfjIY0iqn6ecRF7lCS27xH+aHcXzT1k8IxL5gBJt9sErJdr713ON/NXQKNVE3pF/K9RjnLZP8v9puolHwo78Z3QXcWm8Szz9fIDNyuua3cRl/H9HH5GHGqX6VLRcHGz61VdvmINKttdJJ5100sn/nL8Bwd1UQbfhiHgAAAAASUVORK5CYII=\n", "text/latex": [ "$$e^{y} \\sin{\\left (x y^{2} \\right )}$$" ], "text/plain": [ " y ⎛ 2⎞\n", "ℯ ⋅sin⎝x⋅y ⎠" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# řekněme že chceme někde použít tento výsledek\n", "f = sympy.sin( x * y**2) * sympy.exp(y)\n", "f" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "import sympy.utilities.codegen" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "!******************************************************************************\n", "!* Code generated with sympy 1.1.1 *\n", "!* *\n", "!* See http://www.sympy.org/ for more information. *\n", "!* *\n", "!* This file is part of 'project' *\n", "!******************************************************************************\n", "\n", "REAL*8 function f_fortran(x, y)\n", "implicit none\n", "REAL*8, intent(in) :: x\n", "REAL*8, intent(in) :: y\n", "\n", "f_fortran = exp(y)*sin(x*y**2)\n", "\n", "end function\n", "\n" ] } ], "source": [ "f_source = sympy.utilities.codegen.codegen((\"f_fortran\", f), \"F95\", \"f_fortran\")\n", "print(f_source[0][1])" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/******************************************************************************\n", " * Code generated with sympy 1.1.1 *\n", " * *\n", " * See http://www.sympy.org/ for more information. *\n", " * *\n", " * This file is part of 'project' *\n", " ******************************************************************************/\n", "#include \"f_C.h\"\n", "#include \n", "\n", "double f_C(double x, double y) {\n", "\n", " double f_C_result;\n", " f_C_result = exp(y)*sin(x*pow(y, 2));\n", " return f_C_result;\n", "\n", "}\n", "\n" ] } ], "source": [ "f_source = sympy.utilities.codegen.codegen((\"f_C\", f), \"C\", \"f_C\")\n", "print(f_source[0][1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Další možnosti SymPy\n", "\n", "Ukázali jsme si základy práce se symbolickými výpočty pomocí SymPy. Není v našich silách ukázat, co všechno SymPy umí -- je toho opravdu hodně. Přehled můžeme získat, podívame-li se na obsah v [dokumentaci](http://docs.sympy.org/latest/index.html):\n", "\n", "* SymPy Core\n", "* Combinatorics Module\n", "* Number Theory\n", "* Concrete Mathematics\n", "* Numerical evaluation\n", "* Functions Module\n", "* Geometry Module\n", "* Geometric Algebra Module\n", "* Geometric Algebra Module for SymPy\n", "* Extended LaTeXModule for SymPy\n", "* Symbolic Integrals\n", "* Numeric Integrals\n", "* Logic Module\n", "* Matrices\n", "* Mpmath\n", "* Polynomials Manipulation Module\n", "* Printing System\n", "* Plotting Module\n", "* Pyglet Plotting Module\n", "* Assumptions module\n", "* Term rewriting\n", "* Series Expansions\n", "* Sets\n", "* Simplify\n", "* Details on the Hypergeometric Function Expansion Module\n", "* Statistics\n", "* Stats\n", "* ODE\n", "* PDE\n", "* Solvers\n", "* Tensor Module\n", "* Utilities\n", "* Parsing input\n", "* Physics Module\n", "* Category Theory Module\n", "* Differential Geometry Module\n", "* Contributions to docs" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 1 }