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. Fontos megjegyezni hogy mivel van pár, a sympy
függvényeihez hasonló nevű függvény a pylab
parancs által importált modulokban, 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!
In [1]:
from sympy import * # a sympy csomag rutinjainak betöltése
init_printing() # szép kimenet
In [2]:
x=symbols('x')
Ezek után az $x$ változót használhatjuk szimbolikus számításokra. Oldjuk meg például a következő egyszerű egyenletet: $$3x=5$$
Ezt a solve
függvény segítségével tehetjük meg. A solve
függvény első bementete a megoldandó egyenlet 0-ra rendezve, a második pedig a keresett változó:
In [3]:
solve(3*x-5,x)
Out[3]:
Definiáljunk náhány további változót is!
In [4]:
y,z,a,b,c=symbols('y,z,a,b,c') # Így definiálunk egyszerre több változót
Oldjuk meg most az $$a x+b=y$$ egyenletet $x$ -re!
In [5]:
solve(a*x+b-y,x)
Out[5]:
Ha több megoldása is van az egyenletnek, akkor a sympy
solve
függvénye lehetőség szerint mind a kettőt megtalálja. Jól mutatja ezt a másodfokú egyenlet megoldásának "megtalálása":
In [6]:
solve(a*x**2+b*x+c,x)
Out[6]:
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:
In [7]:
I**2
Out[7]:
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 $x$ és $y$ változókra:
$$y=x^2+ax-4b$$
$$y=x-b$$
Mivel $x$-ben másodrendű az első egyenlet, ezért két megoldáspárt várunk (A parabola legfeljebb két helyen metszi az egyenest...)
In [8]:
solve([x**2 + a*x - y, x - y - b],[x,y]) # Így kell egyenletrendszert megoldani
Out[8]:
A solve
függvény kimenete most egy lista, amelynek az elemei a megfelelő $(x,y)$ párok.
A sympy
egyik legnagyobb előnye, hogy a Python
nyelven belül lehetővé teszi egyszerűbb analízisbeli 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:
In [9]:
limit(sin(x)/x,x,0)# sin(x)/x határértéke az x=0 pontban.
Out[9]:
Ha a végtelenben vagyunk kíváncsiak a határértékre, akkor azt az oo
-szimbólummal tudjuk elérni!
In [10]:
limit(1/(1+exp(-x)),x,oo)
Out[10]:
Egy kifejezés deriváltjait a diff
függvény segítségével tudjuk meghatározni. Például a $\sin$ függvény első $x$-szerinti deriváltja:
In [11]:
diff(sin(x),x)
Out[11]:
A második deriváltat vagy így
In [12]:
diff(sin(x),x,x)
Out[12]:
vagy így, (talán egy kicsit átláthatóbban) írjuk.
In [13]:
diff(sin(x),x,2)
Out[13]:
Természetesen parciális deriváltak elvégzésére is van mód:
In [14]:
diff(sin(x)*cos(y),x,y)
Out[14]:
A magasabb rendű parciális deriváltak legyártása az egyszerű deriváltak általánosításán alapszik:
In [15]:
diff(sin(x)*cos(y),x,2,y,3)
Out[15]:
Az integrate
függvény segítségével határozott és határozattlan integrálokat tudunk elvégezni.
Határozzuk meg először az $x^2$ primitív függvényét:
In [16]:
integrate(x**2,x)
Out[16]:
Az $$\int_0^3 x^2\mathrm{d}x$$ határozott integrált pedig az alábbi módon értékelhetjük ki.
In [17]:
integrate(x**2,(x,0,3))
Out[17]:
Természetesen az integrálás során szerepelhetnek a kifejezésben más paraméterek is:
In [18]:
integrate(x**2+y**3,(x,0,3))
Out[18]:
Többváltozós integrált egyszerűen a változók (és ha határozott integrálról van szó, akkor az integrálási határok) egymás után írásával értékelhetünk ki:
A $$\int x^2+y^3 \mathrm{d}x\mathrm{d}y $$ határozatlan integrál:
In [19]:
integrate(x**2+y**3,x,y)
Out[19]:
A $$\int_0^3\int_{-3}^{5} x^2+y^3 \mathrm{d}x\mathrm{d}y $$ határozott integrál:
In [20]:
integrate(x**2+y**3,(x,0,3),(y,-3,5))
Out[20]: