読者です 読者をやめる 読者になる 読者になる

【python】sympyのsympifyとsimplifyの違いについて

Pythonからはじめる数学入門」を読んでいて、少し混乱してしまったところ。 sympyパッケージがもっている「sympify」と「simplify」の違いについて。 本を読んでいれば書いてあるのだが、いつの間にか混同して使っていた。

この2つの違いは以下の通り。

  • sympify: 文字列を数式に変換する
  • simplify: 数式を簡略化する

例えばこんな使い方ができる。

from sympy import symbols, sympify, simplify

x, y = symbols('x, y')
expr = 'x**2-1'
expr = sympify(expr) # 1
expr_y = expr.subs({x:1-y}) # 2
print(simplify(expr_y)) # 3

上の例では#1でexprに格納された文字列をsympifyを用いて数式に変換している。 この時点でexprは「x2 - 1」になっている。

次に#2でexprにx=1-yを代入し、これをexpr_yと置く。 従って、expr_y = (1-y)2 - 1である。

最後に#3でsimplifyを使い、expr_yを計算・簡単な形に表現し直す。 これを実行すると「y*(y-2)」となり、expr_yが一度展開され計算された後に再度因数分解されていることがわかる。

この2つの関数は名前が似ているが、実行していることは異なる。