SymPyの概要
変数を代数的に処理できる(数値計算ではない)pythonにおけるライブラリ
SymPy
例えば与えた文字式を展開したり、因数分解したり、微分、積分を行うことができる。
インストール
書きかけ(多分pip
等で出来る。google colaboratoryだとデフォルトで入っている。)
インポート
import sympy
よく使う関数
eps = sympy.Symbol('ε') #文字 ε をコード上での変数epsに代入
display(x) #人間が書く式風に表示
例
例1 方程式を解く
変数eq
をx
について解く
x = sympy.Symbol('x')
y = sympy.Symbol('y')
eq = x + y**2 - 4
print(sympy.solve(eq, x))
例2 複素数
sympy.var('z', complex=True)
display(z)
display(sympy.expand_complex(z))
display(sympy.conjugate(z))
display(sympy.expand_complex(sympy.conjugate(z)))
複素数にするときはvar
の引数でcomplex=True
にする。
例3 二次方程式
sympy.var('a')
sympy.var('b')
sympy.var('c')
display(a)
display(b)
display(c)
eq = a*x**2 - 2*b*x + c
display(sympy.solve(eq, x))
sol_list = sympy.solve(eq, x)
for sol in sol_list:
display(sol)
sympy.solve
は複数解があるときはlistで解を帰り値にする。その帰り値をdisplay
の引数に入れても適切には表示されない。解の要素を取得してdisplay
の引数に入れれば、数式で表示される。
例4 積分
import sympy
a = sympy.Symbol('a', real=True)
b = sympy.Symbol('b', real=True)
x = sympy.Symbol('x', real=True)
display(a, b, x)
display(sympy.integrate(sympy.exp(-(a+b*sympy.I)*x),x))
display(sympy.integrate(sympy.exp(-a*x**2),(x, -sympy.oo, sympy.oo)))
display(sympy.integrate(sympy.exp(-(a+sympy.I*b)*x**2),(x, -sympy.oo, sympy.oo)))
例5 式を整理する
sympy.simplify
を使うと、ある程度式を整理した形にしてくれる。
import sympy
a = sympy.Symbol('a', real=True)
b = sympy.Symbol('b', real=True)
x = sympy.Symbol('x', real=True)
display(sympy.integrate(x * sympy.besselj(2,b*x) * sympy.exp(-a*x**2),(x, 0, sympy.oo)))
display(sympy.simplify(sympy.integrate(x * sympy.besselj(2,b*x) * sympy.exp(-a*x**2),(x, 0, sympy.oo))))
simplify
以外に、separatevars
、collect
、ratsimp
、radsimp
、rad_rationalize
があるらしい。