※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。

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世紀にかけてのフランスの女性数学・物理学者で、フェルマーの定理にも出てくるが、日本ではあまり知られていないようである。