V tomto tutoriálu je představen modul Sympy, který slouží k počtům se symbolickou proměnnou v Pythonu. Kód pro import Sympy a nastavení Pylabu následuje.
In [1]:
# inline plots
%matplotlib inline
# import sympy
import sympy as sp
Aby bylo možné zobrazit výstup ze Sympy pomocí Latex rovnicí v Jupyter Notebook, následující nastavení musí být provedeno.
In [2]:
sp.init_printing(use_latex='mathjax')
In [3]:
x, y, z = sp.symbols('x y z')
Od teď je možné proměnné x, y, z
(Sympy objekty proměnná) používat při počtech.
In [4]:
sp.Eq(x + y, z) # create equation
Out[4]:
In [5]:
sp.simplify(x**2 + y - 2*z / (x*z)) # simplify expression
Out[5]:
Některé funkce Sympy dokáží také pracovat s výrazem/rovnicí zadanou jako text. V tomto případě není potřeba proměnné vytvářet předem. V následujícím příkladu užijeme proměnné a a b, které předtím nijak nedefinujeme!
In [6]:
sp.simplify("a + b**2")
Out[6]:
Některé funkce vrací svůj výsledek ve formě objektu, který je možný následně použít. Ukázáno na příkladu.
In [7]:
f = sp.simplify("a + b**2 / (a*b)") # creation of Sympy object - expression
type(f)
Out[7]:
In [8]:
f.cancel()
Out[8]:
Poznámka: alternativní použití podobných funkcí je možno přímo s textem jako argument - příklad následuje:
In [9]:
sp.cancel("a + b**2 / (a*b)")
Out[9]:
In [10]:
f = '(1+(x**3+1/x**2))/(2*(1-x)+x**2)'
In [11]:
sp.sympify(f)
Out[11]:
In [12]:
sp.cancel(f)
Out[12]:
In [13]:
sp.factor(f)
Out[13]:
In [14]:
sp.expand(f)
Out[14]:
In [15]:
fs = sp.simplify(f)
sp.apart(fs)
Out[15]:
In [16]:
fs.subs("x", 5)
Out[16]:
In [17]:
f = "x**2 +3*x -4"
In [18]:
sp.roots(f)
Out[18]:
Nebo:
In [19]:
sp.solve(f)
Out[19]:
In [20]:
a, b, c = sp.symbols("a, b, c")
equations = [
sp.Eq(a + b, 1),
sp.Eq(a**4, c),
sp.Eq(b - 5/2, 3),
]
sp.solve(equations)
Out[20]:
Poznámka: všiměte si, že vrácen je slovnik uvnitř listu.
In [21]:
fd = sp.Derivative('2*x*sqrt(1/x)',x)
fd
Out[21]:
In [22]:
fd.doit()
Out[22]:
In [23]:
fi = sp.Integral('2*x*sqrt(1/x)',x)
fi
Out[23]:
In [24]:
fi.doit()
Out[24]:
In [25]:
fl = sp.Limit('sin(x)/x', x, 0)
fl
Out[25]:
In [26]:
fl.doit()
Out[26]:
In [27]:
sp.plot(x**2)
Out[27]:
In [28]:
sp.plot(x**3)
Out[28]:
In [29]:
A = sp.Matrix([[x, -1], [3, x], [1, 2]])
A
Out[29]:
In [30]:
B = sp.Matrix([[1, -1, 0], [3, 2, 4]])
B
Out[30]:
In [31]:
(A * B)**2
Out[31]:
In [32]:
2.5 * (B * A)
Out[32]:
In [33]:
sp.eye(3)
Out[33]:
In [34]:
sp.ones(3,2)
Out[34]:
In [35]:
sp.zeros(2,3)
Out[35]:
In [36]:
C = sp.Matrix([[1, -x, 0], [x, 2, 4], [-3, 2, -4]])
C.det()
Out[36]:
Následující kód získa charakteristický polynom matice C.
In [37]:
p = C.charpoly()
sp.factor(p)
Out[37]:
In [38]:
D = sp.Matrix([[1, -1], [x, 2]])
D.eigenvals()
Out[38]:
In [39]:
D.eigenvects()
Out[39]:
In [40]:
A = sp.Matrix([[5, -3], [-4, 3]])
B = sp.Matrix([z, 2])
X = A**-1 * B
X
Out[40]: