{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "%pylab inline\n", "figsize(6,6) #Képméret megváltoztatása" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sympy csomag használata analitikus problémák megoldására" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Számos kereskedelmi (Mathematica, Maple) számítógépes algebrai csomag létezik már, melyek bonyolult analitikus formulamanipulációs készséggel rendelkeznek. A sympy csomag egy ingyenes python könyvtár ami lassan használható alternatívát kínál kereskedelmi vetélytársaival szemben. Ebben a notebookban néhány sympy függvénnyel fogunk megismerkedni." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## !!! Fontos megjegyezni hogy mivel van pár a sympy függvényeihez hasonló nevű függvény a pylab parancs által importált csomagokban ezért a kellemetlenségek elkerülése végett célszerű mindig külön notebookot indítani a sympy-os problémák megoldásánál!!!\n", "\n", "### Konkrétabban: Mindkettő csomagban van plot parancs, és a rendszer az utoljára betöltött modul parancsát fogja használni. Azaz átdefiniáljuk a matplotlib csomag plot parancsát sympy plot-tá, ami marginálisan másként működik." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [], "source": [ "from sympy import * # a sympy csomag rutinjainak betöltése" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Változók, egyenletek és egyenlet rendszerek megoldása \n", "\n", "Ahhoz hogy változókat szimbolikusan is manipulálni tudjunk meg kell mondanunk a pythonnak hogy ezentúl tekintsen a változónkra mint valamilyen matematikai formulában előforduló szimbólumra. Ezt a legegyszerűbben így tehetjük meg:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [], "source": [ "x=symbols('x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Ezek után az $x$ változót használhatjuk szimbolikus számításokra. Oldjunk meg például a következő egyszerű egyenletet:\n", "$$3x=5$$\n", "\n", " \n", "Ezt a solve függvény segítségével tehetjük meg. A solve függvény első bemente a megoldandó egyenlet 0-ra rendezve a második pedig a keresett változó:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "[5/3]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(3*x-5,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Definiáljunk néhány további változót is!" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [], "source": [ "y,z,a,b,c=symbols('y,z,a,b,c') # Így definiálunk egyszerre több változót" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Oldjuk meg most a\n", "$$ax+b=y$$\n", "\n", " \n", "egyenletet x -re!" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "[(-b + y)/a]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(a*x+b-y,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Figyeljük meg hogy ha több megoldása is van az egyenletnek akkor lehetőség szerint mind a kettőt megtalálja:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(a*x**2+b*x+c,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Természetesen a megoldás nem feltétlenül valós szám! A komplex egységgyököt a sympy I-vel jelöli:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "[-0.707106781186548 + 0.707106781186548*I,\n", " 0.707106781186548 - 0.707106781186548*I]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(x**2+1j,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A solve függvényt egyenletrendszerek megoldására is lehet használni. Ilyenkor a nullára rendezett egyenleteket listába foglaljuk. A keresett változókat szintúgy. Oldjuk meg a következő egyenletrendszert az xx és yy változókra:\n", "$$y=x^2+ax−4b $$\n", "$$y=x−b$$\n", "\n", " \n", "Mivel xx -ben másodrendű az első egyenlet ezért két megoldáspárt várunk (A parabola legfeljebb két helyen metszi az egyenest...)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "[(-a/2 - sqrt(a**2 - 2*a + 12*b + 1)/2 + 1/2,\n", " -a/2 - b - sqrt(a**2 - 2*a + 12*b + 1)/2 + 1/2),\n", " (-a/2 + sqrt(a**2 - 2*a + 12*b + 1)/2 + 1/2,\n", " -a/2 - b + sqrt(a**2 - 2*a + 12*b + 1)/2 + 1/2)]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve([x**2 + a*x -4*b - y, x - y - b],[x,y]) # Így kell egyenletrendszert megoldani" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A `sympy` egyik legnagyobb előnye hogy a `python` nyelven belül lehetővé teszi egyszerűbb analízis beli feladatok elvégzését. Alább a teljesség igénye nélkül összefoglalunk néhány egyszerű függvényt. Vizsgáljuk meg a következő két határértéket: $$\\lim_{x\\rightarrow 0}\\frac{\\sin x}{x}=? $$ illetve $$\\lim_{x\\rightarrow \\infty}\\frac{1}{1+\\mathrm{e}^{-x}}=? $$ A határértéket a `limit` függvény segítségével tudjuk meghatározni:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(sin(x)/x,x,0)# sin(x)/x határértéke az x=0 pontban." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ha a végtelenben vagyunk kíváncsiak a határértékre akkor azt az oo-szimbólummal tudjuk elérni" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(1/(1+exp(-x)),x,oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Egy kifejezés deriváltjait a diff függvény segítségével tudjuk meghatározni. Például a sinsin függvény első xx -szerinti deriváltja:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "cos(x)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x),x)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "A második deriváltat vagy így" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "-sin(x)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x),x,x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vagy így, (talán egy kicsit átláthatóban ) írjuk." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "-sin(x)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x),x,2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Természetesen parciális deriváltak elvégzésére is van mód:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "-sin(y)*cos(x)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x)*cos(y),x,y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A magasabb rendű parciális deriváltak legyártása az egyszerű deriváltak általánosításán alapszik:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "-sin(x)*sin(y)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x)*cos(y),x,2,y,3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Az integrate függvény segítségével határozott és határozatlan integrálokat tudunk elvégezni.\n", "Határozzuk meg először az $$x^2$$ primitív függvényét:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "x**3/3" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x**2,x) # x primitív függvénye" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "image/png": "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\nxXO0vPQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(integrate(x**2,x), x**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most vegyük a $$ f(x)=\\frac{x}{x^2+2\\cdot x+1}$$ primitív függvényét:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "log(x + 1) + 1/(x + 1)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x/(x**2+2*x+1), x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ha megadjuk, hogy mettől meddig akarjuk kiintegrálni a változót, akkor kiszámolhatjuk a határozott integrált:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "run_control": { "frozen": false, "read_only": false } }, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x**2,(x,0,3)) # határozott integrál" ] } ], "metadata": { "hide_input": false, "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.5.1" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }