{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[<< nazaj: Uvod](00_uvod.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Enačbe in neenačbe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "V tem delu si bomo ogledali različne pristope, kako se spopademo z **enačbami**. Spoznali bomo nekaj dodatnih knjižnic za python: [SymPy](http://www.sympy.org), [matplotlib](http://matplotlib.org) in [SciPy](http://www.scipy.org)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simbolično reševanje s SymPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simbolično reševanje je reševanje enačb s simboli. Ločimo ga od numeričnega reševanja enačb, pri katerem računamo z decimalnimi približki števil. Na vajah navadno uporabljamo simbolično reševanje. Enačbo, ki jo rešujemo, *mrcvarimo*, dokler ni zapisana v obliki, iz katere lahko preprosto razberemo njeno rešitev. V Pythonu lahko nekaj podobnega počnemo s SymPy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Primer\n", "Poišči vse rešitve enačbe\n", "$$x+\\frac{2}{x}=3.$$\n", "### Rešitev\n", "Enačbo najprej pomnožimo z $x$ in preoblikujemo v polinomsko enačbo\n", "$$ x^2+2-3x=0,$$\n", "v kateri faktoriziramo levo stran\n", "$$(x-2)(x-1)=0.$$\n", "Sklepamo, da je leva stran enaka $0$, če je en od faktorjev enak $0$. \n", "\n", "Tako dobimo dve možnosti\n", "\\begin{eqnarray}\n", "x-2=0 & \\implies & x=2\\\\\n", "x-1=0 & \\implies & x=1.\n", "\\end{eqnarray}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sympy\n", "Poskusimo priti do rešitve še s *Pythonom*. Najprej naložimo knjižnico za simbolično računanje [SymPy](http://www.sympy.org), nato pa deklariramo, naj se spremenljivka `x` obravnava kot matematični simbol." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import sympy as sym\n", "x = sym.symbols(\"x\") # spremenljivka x je matematični simbol" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Za začetek povsem sledimo korakom, ki smo jih naredili „na roke“. Povzamimo „algoritem“\n", "\n", "* vse člene damo na levo stran\n", "* enačbo pomnožimo z $x$\n", "* levo stran faktoriziramo\n", "* iz faktorjev preberemo rešitev" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "x + 2/x == 3" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "enacba = sym.Eq(x+2/x,3)\n", "enacba" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vključimo izpis formul v lepši obliki, ki ga omogoča SymPy." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFsAAAAqBAMAAAAuZjrOAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\n75nQ6/gxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABlklEQVQ4EWNgwAb8Xu/BJoxDjNGAIT8AhxwW\nYWYBBt4LWMRxCPE2MDD/wSGHRZjzI0nKgSZwfMRiDG6h+ATcclhkurGI4Rbi24BbDouMMhYx3EJc\nDxhccMtiyJxjYFDBEMQpwNKW9rgBpyyGBOf///9JUI6hHyTAkpa9AKsEdkE/Bq7vKDKMDihcNI7+\nAoYfKEJcCihcNE5sAONPFCH8yhkgjhFSdlWDGEtIOecDBgbGBPYmjglgW7Aoz5wJAvPA0sf6gBSb\nANtHLgdcysHiMILtDtB0Bk5Y6oOZzg+Mpf//P8BUIei7AkA2vwJIgG3mzBk3Z858AGJjBcA0t38B\nUOb8AQaQLqDPFcAUMpHRAQLNIKH/Agz7Cxi4BPQZmHAqR9J6m4Gh34EhfsF+BneIKBbTkZSXM3B9\nYmAQVhJKLyBGOeu71wFIurG6HUUejcMKtQVNeGhxGZVMgpKId7IYQ4VCJ/HKExnyBZYQr1yAYTbx\nikEqgdFNAuD5A8wHRIOFTB8YFIlWzfqL+wML8QmC0UhRrRy74QBXq1DR+Y17qQAAAABJRU5ErkJg\ngg==\n", "text/latex": [ "$$x + \\frac{2}{x} = 3$$" ], "text/plain": [ " 2 \n", "x + ─ = 3\n", " x " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sym.init_printing() # lepši izpis formul\n", "enacba" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIMAAAAyBAMAAACNJXWFAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC50lEQVRIDZVXO2/TUBQ+cePEdRInalhYiAUS\na8rGVi88NroxISIhCgxAVsQQiwkJAZaYIoEasdNkYQFB8w8SCTGhSmWoxENCDeKlChTuw9f34Xtj\n9w72+b7znc839j3XDoA0rkooCzQ1gtJUQ5opO0rnrqQpPVPceT1GmTuprPsxRRmIJpR+olSlo+aP\nrauMCZ8C+IZyhS+q4I1KGPEngLUxym4pCnemEGa42aAWTkfWOId6Ho8bqNr9IVv0AhkvRPYvkn4o\nix7IcDFyRiTfw3NJRhU/ptzjA1W2fLGitiuijNhapYLlSBR6MStyxvgFFAOctKT7OekaC1KJ6hSs\nALPF7/jIRjtgUfb5/MbN01T1VRS/FUFGvDmf/6ESqUryEy3ObrwSoRzfDjgu/OOxFBWnMDTfpt46\nF9vSjeE8WAdQDyk+ItBxOPE55x7wWIrsPWhFlHkuJQhoTTln/eWxGrEforGorwKsnDhz0kc1NbpI\nGJRcnsVIZzGCQqd8z8HzpBYJFCyq19lkNRZeBKVGaeYGqGCJbDgJFCwAbo0p1FmEUIDlEckv7eNT\nAo/ex+MpLfXifZlZzMkgOWcXneo+ialFAglHDqifKvhp3ej3H/X77LawPLGYjKGBiFq8c8aQSZDn\nDCq/KWSz4ElwQnAbbbCwRYk8kQRylTcCJ25pjYUXwuXBNpzDerouEsgtyl0Y+hTqLCJoHl+51sWC\nMtn3EkhryPHSzssYaSzqI650c2ydGgtxgRvbjF8FLgpxHIptZmz2dJnIDAcC+izE+UNxy4Ht/HWC\nck2IoY1XR87B+1naLieDnPWok1h7Ky+BQ7yKeD/Lr6Lafv5ZsPaGSigW2TnWVqKP25u1OeOVbwVG\na8+sn+WPA1CgtpSSvJ+fyCpvKmMzSvrZjncBJs3/uZb0c0W9qrqpMW/zeUtdjhfGZrE2U9hTaTdU\nmQyc+h0A7zJK1PRdlUCvIz/NLWB0fybg/YKCdKpJbuZ/65ailXBt9N8AAAAASUVORK5CYII=\n", "text/latex": [ "$$x \\left(x - 3 + \\frac{2}{x}\\right)$$" ], "text/plain": [ " ⎛ 2⎞\n", "x⋅⎜x - 3 + ─⎟\n", " ⎝ x⎠" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# vse člene damo na levo stran in pomnožimo z x\n", "leva = (enacba.lhs - enacba.rhs)*x\n", "leva" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGkAAAAWBAMAAAAx2K8dAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABiUlEQVQ4EZ2SP0jDQBTGv9Q0TWOpRwvOaYWu\nVXFwM4Oii1AcnMR/Qx2k2K3OTnYQHVsdGsFJEHQWaSdXs5fuilLa4n+EGHO5NJcWob3hvfd97/24\nx3EAPbk74lQDJEkbORlg3BmVtcjr4FQ0I74NTgFKexhKVoehcj5IzO7qPsuWYuO25vohwy1psQzl\nw2fZMg6p+wKrWONn0jo+vY6gUTUFNJkfOb28YTXN6xnhy+soKlWPwFzNaURNs+WUbuI3ZFSF2FRs\nYiGluqOeImxASM6sbFOLUZY6JhA2Qwdyv990fwSMY18t+qngOyARqa1otMNH6QVb2CMXfkq+BgSE\nregcoXRonWKNyiYhOGOt7oZ12xpTWceb54GqDnRsTyqXS0/lsvEnApO29VADsQsumATVPCI/1jL2\nce+6gqhBIWkE+lDP1ltp54EWEjwVMRDQsKFXsUgbXCxA6QS/R1tintrsrqVsbhaIJ2M7ToOjgo16\nRphOpAqOy6iKaXI/jYN6BKN6Gv8aQe9Cv3IiVAaAvngKAAAAAElFTkSuQmCC\n", "text/latex": [ "$$x^{2} - 3 x + 2$$" ], "text/plain": [ " 2 \n", "x - 3⋅x + 2" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# levo stran razpišemo/zmnožimo\n", "leva = sym.expand(leva)\n", "leva" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAVBAMAAACd/CwcAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMmYiu80QdonvRN2Z\nVKvu110NAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABwUlEQVQ4EaWUv0vDQBTHv02bNLU/LM6CEXFz\nKNpFcaj6B1gXB0XIYCkuUnCwUy0uOogW3Jy6O7SgoiBCB0cp3V2qm5suXRzqe5eWpOnL5EGSe9/v\n5753uQsB/t1CVlCElnacqSAAs+xkRXv1dQ34UFY4JxLYBlI8BT3Hm9HFVR26MnR73Ccl26NbHohW\nJTtlI1YbeGUJwH6bA8iLZSQ/1kTqB0aNvWsJoJk54AC4FW29xwHYI3OiKRJOgN7BBdnFykq55Mfi\nNAObZksm1ArIXAeMqvYYz/sDGlVgnsSIJRMqQMvjheawzV4y4w+4J+GdrnhHJlRAsokbyoeeU8ML\nz9y2VD/B0gxdsbpLGLsMPKRJdvYg9M0BwGSJ7yOtwtUwQCLUCiiAXoHANGx+ui3ZwpJzRPwKEqEC\n6IhoE5P2CaK2O5h708CRu4kSMdzES6DR2cTi6Pjw03m7CbyRanZFwtmDRIs/pMPj4qk1GqD3+30K\n2CGVPySBSHz9fgJ6HfHM6FBvFa5xdeeVfP1lQGv5NE9plrhY8Cj+7hkJG37RrQuqGwleo5EnQv6h\nqKFOdtAPhRCVHbYULNy0wdS+E/KQc8Af5MxoqwJlZNgAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left(x - 2\\right) \\left(x - 1\\right)$$" ], "text/plain": [ "(x - 2)⋅(x - 1)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# levo stran faktoriziramo\n", "leva = sym.factor(leva)\n", "leva" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Od tu naprej postane precej komplicirano, kako rešitve programsko izluščiti iz zadnjega rezultata. Če nas zanimajo le rešitve, lahko zgornji postopek izpustimo in preprosto uporabimo funkcijo `solve`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAADoAAAAUBAMAAAAuMzNdAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdt3NMolEECK7mavv\nZlQTUv2gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAqElEQVQoFWMQMmHABS6rMYQB5cwx5btWTmEA\nygFlO79jyLJvYIhPAMtWrsaU5S5g4DkA0cuIKcujwMD9Bacs83d8skCHMH3HqRcomx+AT1YT6iMs\nrmJg4JqAT1YaaDg4NLDp5VvA0IFb1ouBQQIhW2+AEpocqqGrFcCyXHs+7QX5Dhkw////HyILEc1A\nloSywa4Csy/gk2XHK8uLRSvQVUIq2MTBYkJqAMMTMcTTyt90AAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\left [ 1, \\quad 2\\right ]$$" ], "text/plain": [ "[1, 2]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# rešitve enačbe najlažje dobimo s funkcijo solve\n", "resitve = sym.solve(enacba)\n", "resitve" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grafična rešitev\n", "Rešitve enačbe si lahko predstavljamo grafično. Iščemo vrednosti $x$, pri katerih je leva stran enaka desni. Če narišemo graf leve in desne strani na isto sliko, so rešitve enačbe ravno *x*-koordinate presečišča obeh grafov. Za risanje grafov uporabimo knjižnico [matplotlib](http://www.matplotlib.org). Graf funkcije narišemo tako, da funkcijo tabeliramo v veliko točkah. Da lažje računamo s tabelami, uporabimo tudi knjižnico [numpy](http://www.numpy.org), ki je namenjena delu z vektorji in matrikami." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "t = np.arange(-1,3,0.01) # zaporedje x-ov, v katerih bomo tabelirali funkcijo\n", "leva_f = sym.lambdify(x,enacba.lhs) # lambdify iz leve strani enačbe naredi python funkcijo, ki jo uporabimo na t\n", "desna_f = sym.lambdify(x,enacba.rhs) # podobno za desno stran (rhs - right hand side, lhs - left hand side)\n", "plt.plot(t,leva_f(t)) # leva stran /funkcija leva_f deluje po komponentah seznama t \n", "plt.plot(t,[desna_f(ti) for ti in t]) # funkcija desna_t je konstanta (število 3) in zato ne vrne seznama iste dolžine kot t \n", "plt.ylim(0,5)\n", "plt.plot(resitve,[leva_f(r) for r in resitve],'or')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Naloga" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Poišči vse rešitve enačbe \n", "$$x^2-2=1/x.$$\n", "Uporabi `sympy.solve` in grafično predstavi rešitve." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[naprej: neenačbe >>](01b_neenacbe.ipynb)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import disqus\n", "%reload_ext disqus\n", "%disqus matpy" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }