from __future__ import unicode_literals #ékezetes betűk
Az alábbi példákban a sympy csomag formula manipulációs készségeivel fogunk egy kicsit megismerkedni.
from sympy import * # a sympy csomag rutinjainak betöltése
init_printing() # "szép" kimenet kérése, próbáljátok ki mi történik ha ezt a sort kiveszitek!
Ahogy már az integrálós példákból is láttuk, ahoz 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 leg egyszerűbben így tehetjük meg:
x = Symbol('x') # Az x változó legyen "matematikai szimbólum" !!!
Ezek után már használhatjuk sympy rutinok által manipulált formulákban az x-et mint változót. Oldjuk meg például az $$x^2-3x+2=0$$ másod fokú egyenletet! Ezt legegyszerűbben a solve rutin segítségével tudjuk megtenni:
solve(x**2-3*x+2,x) #Egyenleteket a solve parancsal oldunk meg.
#figyeljük meg hogy az első bemenetre a megoldandó egyenlet 0-ra rendezett alakja kerül
#a második bemenet pedig az a változó amire meg akarjuk oldani az egyenletet.
A megoldások természetesen lehetnek komplex-ek is például:
x = Symbol('x')
solve(x**2+1,x)
Előfordul sokszr hogy bizonyos változókról biztosan hogy valósak (azaz nincs képzetes részük), esetleg pozitívak például két test távolsága, vagy egy test tömege. Ekkor a Symbol() rutinnal közölhetjük ezeket a tulajdonságokat:
x = Symbol('x',positive=True) # legyen x változó pozitív
solve(x**2-1,x) # Ennek az egyenletnek +1 és -1 is megoldása de mi csak a pozitívokat fogadjuk el!!
x = Symbol('x',real=True) # legyen x valós
solve(x**2+1,x) # itt +i és -i a megoldás, de nekünk egyik se jó ilyenkor az eredmény egy üres list
Egyszerre több változót is definiálhatunk:
x, y, z=symbols('x, y, z') # legyen x y és z változó!
solve(x**2+y*x+z,x) # ezek után mind a három szerepelhet!
Egy változóhoz tartozó rész a Symbol() illetve a symbols() függvények hasában azt mondja meg hogy a kiíratásnál hogy fog az adott változó megjelenni. Ha páldául az "a" változót $\alpha$ ként illetve a "b" változót $b_1$ ként szeretnénk megjeleníteni akkor így kell eljárni:
x, y, a, b=symbols('x, y, alpha, b1') # x és y a megszokott módon jelenik meg
# a \alpha-ként b pedig b_1-ként
b*sin(a) # próbáljuk meg!
Végezetül vizsgálju meg hogy több ismeretlenes egyenletrendszert hogy kell megoldani! Oldjuk meg például az $$x+y^2=a$$ $$x-y=b$$ egyenletrendszert $x$-re és $y$-ra
solve([x + y**2 - a, x - y - b],[x,y]) # Így kell egyenletrendszert megoldani
#Az eredmény 2 (x,y) páros! Ezt várjuk is hiszen y-ban másodfokú az egyenletrendszerünk!!
A következő feladatsorban szükségünk lesz a leg általánosabb két ismeretlenes lineáris egyenletrenszer megoldására. Oldjuk meg hát sympy-al az alábbi egyenletrendszert! $$ a_{11}x_1+a_{12}x_2=y_1 $$ $$ a_{21}x_1+a_{22}x_2=y_2 $$
x1, x2, y1, y2=symbols('x1,x2, y1,y2')
a11, a12, a21, a22=symbols('a11,a12, a21,a22')
solve([a11*x1+a12*x2-y1,
a21*x1+a22*x2-y2],{x1,x2})