『Pythonからはじめる数学入門』
4章 SymPyで代数と式を計算する
の解説です。
いままでは、数値計算でしたが、
xやyといった代数においては、
式の計算(symbolic math)が必要です。
Pythonでは、SymPyを使って式の計算をおこないます。
以下は、SymPyのリファレンスです。
また、ブラウザ上で、SymPyの動作を確認できます。
表示された数式を右クリックすると、Tex記法などに変換できます。
4.1 式の記号と記号演算を定義する
SymPyでは、以下のとおり、記号を使って数式を表現します。
from sympy import Symbol x = Symbol('x') #文字列xを用いてSymbolクラスのオブジェクトを作成 print(x + x + 1) from sympy import symbols x,y,z = symbols('x,y,z') print((x+2)*(y+3)*(z+4))
結果
2*x + 1 (x + 2)*(y + 3)*(z + 4)
4.2 式を扱う
4.2.1 式の因数分解と展開
因数分解はfactor()を使い、展開はexpand()を使います。
from sympy import symbols x,y = symbols('x,y') from sympy import factor, expand expr = x**2 - y**2 factors = factor(expr) print('factors:{0}'.format(factors)) expand_result = expand(factors) print('expand:{0}'.format(expand_result))
結果
factors:(x - y)*(x + y) expand:x**2 - y**2
4.2.2 プリティプリント
式をみやすく出力したい場合は、pprint()を使います。
expr = x*x + 2*x*y + y*y print('expr:{0}'.format(expr)) from sympy import pprint pprint(expr, use_unicode=True)
結果
expr:x**2 + 2*x*y + y**2 2 2 x + 2⋅x⋅y + y
4.2.3 値に代入する
式に値を代入するには、subs()を使います。
from sympy import symbols x,y = symbols('x,y') expr = x*x + x*y + x*y + y*y res = expr.subs({x:1, y:2}) print(res)
結果
9
項の中の記号を別の式で表すこともできます。
from sympy import symbols x,y = symbols('x,y') expr = x*x + x*y + x*y + y*y res = expr.subs({x:y-1}) print(res)
結果
y**2 + 2*y*(y - 1) + (y - 1)**2
4.2.4 文字列を数式に変換する
input()で入力された文字列を数式に変換する方法です。
from sympy import sympify expr = input('input: ') input: (入力した式)y**2 + 2*y*(y - 1) + (y - 1)**2 expr =sympify(expr) print(2*expr)
結果
2*x**3 + 2*x**2 + 10*x