PythonのSympyを用いた因数分解と展開(二次式)
PythonのライブラリのうちSympyを用いることで、二次式の展開と素因数分解ができます。
動作環境:
- python 3.6.8
- sympy 1.4
index
因数分解
例として、以下の式を因数分解してみます。
$x^2 + 2x + 1$
import sympy as sp
x = sp.Symbol('x')
eq1 = x ** 2 + 2 * x + 1
eq1-ex = sp.expand(eq1)
print(eq1)
print(eq1-ex)
出力は以下の通りになります。
x**2 + 2*x + 1
(x + 1)**2
import sympy as spで、sympyをspとしてインポートしています。以降はsympyの関数を用いるときはsp.expand()のように扱います。
次に、x = sp.Symbol(‘x’)で、xを数式中の変数として扱います。
これをおこなわないと、そもそもxが変数として扱われないため、
NameError: name 'x' is not defined
のエラーが出力されます。
eq1に、因数分解したい式を入れます。Pythonでべき乗をあらわすときには、「**」に続けて数字をつけます。
そして、sp.expand(eq1)として、sympyのexpand関数でeq1を因数分解した結果をeq1-exに入れます。
最後に、因数分解前(eq1)、因数分解後(eq1-ex)の式をprint()で出力しました。
…
なお、解の公式を用いない限り、因数分解ができない式の場合は、そのまま因数分解前の式が出力されます。
たとえば、
$x^2 + 5x + 1$
の場合は、出力として、
x**2 + 5*x + 1
x**2 + 5*x + 1
となり、因数分解前後で式が変わりません。
展開
例として、以下の式を展開します。
$(x+1)^2$
同様の作業を行います。
import sympy as sp
x = sp.Symbol('x')
eq2 = (x + 1 ) ** 2
eq2_e = sp.expand(eq2)
print(eq2)
print(eq2_e)
出力は以下の通りになります。
(x + 1)**2
x**2 + 2*x + 1
因数分解の時とほとんど同じ手順です。出力結果は、一つ目が展開前の式、二つ目が展開後の式です。
この場合は、factor()関数の代わりにexpand()関数を用いて、sympyのexpand関数でeq2を展開した結果をeq2_eに得ています。