”y = 2x + 1”を”x = (y - 1)/2”に変換できたり、”y=5”とすることで”x=2”と教えてくれるようなソフトがないものかといろいろ調べているうちに”sympy”というpythonパッケージを見つけました。
ただ、見つけたのはいいものの、上に書いたようなことをsympyで実現する方法を見つけるのは結構苦労しました。
その苦労の結果をここにメモしとこうと思います。
応用が聞くように”isympy”をつかわず、”python”インタプリタで動かす例です。
# 準備 >>> from sympy import Symbol, Eq >>> from sympy.solvers import solve # x, yを数学的なの話での変数として定義 >>> x = Symbol('x') >>> y = Symbol('y') # y = 2x + 1という等式をaという変数に代入 >>> a = Eq(y, 2*x + 1) >>> a y == 1 + 2*x # xを求める式に変換(結果がリストになっているのに注意) >>> solve(a, x) [(-1/2) + (1/2)*y] # xを2としてyを求める >>> a.subs(x, 2) y == 5 # y = x + 5の式と組み合わせて解を求める >>> solve( (a, Eq(y, x + 5) ), x, y) {y: 9, x: 4}
うーん、すごいプログラムです。
SICPの3章をヒントに”こういうプログラムをつくるのはおもしろそうだなぁ”と思っていたんですが、大学の数学科の人とかに需要がありそうだから、誰かがつくってそうだと思って作り始める前に調べてみるとやっぱりあったというわけです。
そういうわけで僕にとってプログラムをつくるネタが一つ消えてしまいました。”車輪の再発明”をするにも元の車輪がすごすぎてモチベーションがでない。