SymPyで因数分解が楽勝


2016年 11月 03日

Pythonを使うと、いろいろな計算、数式処理などができることは、『Pythonからはじめる数学入門』で触れたが、実際にどのように行うのか何も書かなかった。

数学的な処理を行う場合には、まず sympy というライブラリを使うためにインポートする。

In [9]: from sympy import *

次に、数式では記号を使うので、

In [12]: x = Symbol('x')

により x をシンボルとして扱うことを宣言する。
しかし、このやり方では、シンボルの数が増えると面倒なので、もっと横着な方法を使う。

In [16]: var("a:z")
Out[16]: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z)

これにより、英小文字1文字はシンボルとして扱えるようになる。

In [19]: expr = x**2 - y**2

In [20]: factor(expr)
Out[20]: (x - y)*(x + y)

ということで、こんな感じにどんどん因数分解の宿題ができてしまう。

In [21]: factor(a**2+4*a+4-b**2)
Out[21]: (a - b + 2)*(a + b + 2)

In [22]: factor((a-b)**2*c+(b-c)**2*a+(c-a)**2*b+8*a*b*c)
Out[22]: (a + b)*(a + c)*(b + c)

In [23]: factor(a**4+4*b**4)
Out[23]: (a**2 - 2*a*b + 2*b**2)*(a**2 + 2*a*b + 2*b**2)

最後の式は、Sophie Germain Identity(ソフィージェルマンの恒等式)で、非常に美しい因数分解公式として知られている。
Sophieは、18世紀末から19世紀にかけてのフランスの女性数学・物理学者で、フェルマーの定理にも出てくるが、日本ではあまり知られていないようである。