Pythonで様々な代数計算(Sympy)
これまで配列の計算を行ってきましたがSympyライブラリを使用すれば、Pythonは代数計算にも威力を発揮します。
面倒くさい方程式などを解くときに利用できますので、今回はSympyを使用して簡単な代数計算を行ってみます。
分数型
Sympyを使用すれば、分数型を使用することができます。
from sympy import * #Sympyをimportします a = Rational(1,3) #分数型宣言Rational print (a)
1/3
Numpyなどでは0.333333…となっていたところが1/3として扱うことができます。
分数計算もこの通り
from sympy import * a = Rational(1,3) b = Rational(2,5) c = a + b print (c)
11/15
変数の取扱い
from sympy import * x = Symbol('x') y = Symbol('y') f = x + y + 2*y - 4*x +2*x*y print (f)
2*x*y - 3*x + 3*y
Symbol
関数を使用することで変数を変数のまま計算することも出来る。
展開も
from sympy import * x = Symbol('x') y = Symbol('y') f = expand((x + y)**4) print (f)
x**4 + 4*x**3*y + 6*x**2*y**2 + 4*x*y**3 + y**4
f = expand(cos(x + y), trig=True)
とtrig=True
を加えれば
-sin(x)*sin(y) + cos(x)*cos(y)
三角関数の展開も出来る(加法定理)。
方程式を解く
1元n次方程式
x2-6x-9=0を解いてみる
from sympy import * x = Symbol('x') f = x**2 + -6 * x -9 s = solve(f,x) #f=0として計算する print (s)
[3 + 3*sqrt(2), -3*sqrt(2) + 3]
solve
により方程式を解ける。
n元n次連立方程式
x2+y2=0
xy=1
の連立方程式を解こう。
from sympy import * x = Symbol('x') y = Symbol('y') f1 = x**2 + y**2 f2 = x*y - 1 s = solve([f1,f2],[x,y]) print (s)
[(-(-sqrt(2)/2 - sqrt(2)*I/2)**3, -sqrt(2)/2 - sqrt(2)*I/2), (-(-sqrt(2)/2 + sqrt(2)*I/2)**3, -sqrt(2)/2 + sqrt(2)*I/2), (-(sqrt(2)/2 - sqrt(2)*I/2)**3, sqrt(2)/2 - sqrt(2)*I/2), (-(sqrt(2)/2 + sqrt(2)*I/2)**3, sqrt(2)/2 + sqrt(2)*I/2)]
solve([f1,f2],[x,y])
と書けばx,yのペアで解いてくれる。
ある文字について解きたいとき
exp(x+y)=1をyについて解いてみる。
from sympy import * x = Symbol('x') y = Symbol('y') f = exp(x + y) - 1 s = solve(f,y) print (s)
[log(exp(-x))]
今日はここまで。