home about terms twitter

PythonのSympyを用いた因数分解と展開(二次式)

date: 2020-02-09 | mod: 2020-02-09

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に得ています。