SymPy による代数計算

 SymPy とは Symbol (記号) による演算、すなわちコンピュータで代数演算を実行する機能を備えた計算機代数システム (CAS ; Computer Algebra System) です。
 

Advertisement

 

SymPyの基本的な使い方

記号の定義

 x を記号として定義すると、x ** 2 + 1 のような式を x の多項式として扱うことができます。記号の定義には次の 2 通りの方法があります。

 x = sympy.Symbol('x')
 sympy.var('x')

 複数の記号を定義することもできます。

 (x, y) = sympy.symbols('x y')
 sympy.var('x y')

 生成されたオブジェクトは sympy.core.symbol.Symbolクラスに属しますが、当サイトではこのクラスに属するオブジェクトを簡単に Symbol と記述します。

# sympyをインポート
import sympy

# Symbolクラスのインスタンスを生成(記号の定義)
sympy.var('x')

# 多項式yを定義
y = x ** 2 + 1

print(y)
print(type(x))
x**2 + 1
<class 'sympy.core.symbol.Symbol'>

 

記号に数値を代入

 記号に数値を代入するときは subs()メソッドを用います。

# sympyをインポート
import sympy

# Symbolクラスのインスタンスを生成
sympy.var('x')

# 多項式yを定義
y = x ** 2 + 1

# xに3を代入
y = y.subs(x, 3)

print(y)
10

 複数の記号に数値を代入するときは、(記号, 数値) のタプルを要素に持つリストを渡します。

# sympyをインポート
import sympy

# 記号 x, y を定義
sympy.var('x y')

# 多項式zを定義
z = x ** 2 + 2 * x * y + y ** 2

# xに3, yに5を代入
z = z.subs([(x, 3), (y, 5)])

print(z)
64

 

多項式の四則演算

 式同士で加減乗除を実行すると、多項式が返ります。

# sympyをインポート
import sympy

# 記号 a, b を定義
sympy.var('a b')

# 多項式f1を定義
f1 = a + 2 * b + 1
f2 = a + b + 5

# 多項式の加減乗除
g1 = f1 + f2
g2 = f1 - f2
g3 = f1 * f2
g4 = f1 / f2

print("f1 + f2 =", g1)
print("f1 - f2 =", g2)
print("f1 × f2 =", g3)
print("f1 / f2 =", g4)
f1 + f2 = 2*a + 3*b + 6
f1 - f2 = b - 4
f1 × f2 = (a + b + 5)*(a + 2*b + 1)
f1 / f2 = (a + 2*b + 1)/(a + b + 5)

 

分数型(有理数型)オブジェクト

 sympy.Rational() に分子と分母を渡すと、分数型(有理数型)インスタンスを生成することができます。正確なクラス名は sympy.core.numbers.Rational です。

# sympyをインポート
import sympy

# a = 3/5
a = sympy.Rational(3, 5)

# b = 1/7
b = sympy.Rational(1, 7)

# 記号を定義
sympy.var('c')

print("a =", a)
print("b =", b)
print("a + b + c =", a + b + c)
a = 3/5
b = 1/7
a + b + c = c + 26/35