SymPyは代数計算(数式処理)を行うPythonのライブラリ.
因数分解したり,方程式(連立方程式)を解いたり,微分積分を計算したりすることができる便利ツール.
SymPyのインストール
ターミナル/コマンドプロンプトを開いて入力.
$ pip install sympy
基本的な使い方
- 変数と式の定義
- 変数に値を代入&式を計算
- 式の展開と因数分解
- (連立)方程式を解く
- 微分・積分を使う
- 三角関数や対数を使う
変数と式の定義
symbolic.py
import sympy as sp
# 方程式(シンボリック式)の中での変数は,シンボリック変数と呼ばれ,
## 通常の(コード内に書かれた)変数とは別に扱われる
x = sp.Symbol('x') # シンボリック変数 x
y = sp.Symbol('y') # シンボリック変数 y
expr = x**2 + y + 1 # シンボリック式 expr
# # 定数は通常通り変数を使って記述してもよい
# a = 2
# b = 1
# c = 1
# expr = x**a + b*y + c
print(expr)
どちらもx**2 + y + 1
を返す.
変数に値を代入&式を計算
symbolic.py
import sympy as sp
# 方程式(シンボリック式)の中での変数は,シンボリック変数と呼ばれ,
## 通常の(コード内に書かれた)変数とは別に扱われる
x = sp.Symbol('x') # シンボリック変数 x
y = sp.Symbol('y') # シンボリック変数 y
expr = x**2 + y + 1 # シンボリック式 expr
# # 定数は通常通り変数を使って記述してもよい
# a = 2
# b = 1
# c = 1
# expr = x**a + b*y + c
print(expr)
# シンボリック式の変数(シンボリック変数)に
## 好きな値を代入
print(expr.subs(x,1)) # x=1を代入
print(expr.subs(x,y)) # x=yを代入
# x, y の2変数に値を代入するときは,
## subs()の引数にタプルで入力
p = expr.subs([(x,1),(y,2)]) # x=1, y=2を代入
print(p)
このときの出力は以下
x**2 + y + 1
y + 2
y**2 + y + 1
4
式の展開と因数分解
symbolic.py
import sympy as sp
# 式の展開と因数分解
x = sp.Symbol('x') # シンボリック変数 x
# 式の展開
before = (x+1)**2
after = sp.expand(before)
print(after)
# 式の因数分解
# before2 = x**2 + 2*x + 1
before2 = after
after2 = sp.factor(before2)
print(after2)
出力は以下
x**2 + 2*x + 1
(x + 1)**2
(連立)方程式を解く
solve()
メソッドを用いる.()内の値は,式=0
が成り立つような式
を入力する.
連立方程式を解く際,引数はリストでもタプルでもどちらでもよい(代入の時の引数は必ずタプル)
symbolic.py
import sympy as sp
# 式の展開と因数分解
x = sp.Symbol('x') # シンボリック変数 x
y = sp.Symbol('y') # シンボリック変数 y
expr = x**2 + y + 1 # シンボリック式 expr
# 式の展開
before = (x+1)**2
# 方程式を解く
print(sp.solve(before)) # (x+1)**2=0を解く
print(sp.solve(x**2 + x + 1)) # x**2+x+1=0を解く
print(sp.solve(expr, x)) # xについて解く
print(sp.solve(expr, y)) # yについて解く
# 連立方程式を解く
expr1 = 3 * x + 5 * y - 29
expr2 = x + y - 7
print(sp.solve([expr1, expr2])) # 関係式をリストorタプルで引数に入力
この時の出力は以下となり,ちゃんと解けている.ただし,√はsqrt()
,虚数iはI
で表示される.
[-1]
[-1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2]
[-sqrt(-y - 1), sqrt(-y - 1)]
[-x**2 - 1]
{x: 3, y: 4}