Sympyでグラフを作成する
Sympyを使って代数計算をしているときに、この数式のグラフはどんな形をしているのか、サッとみてみたいということがあります。Pythonでグラフといえば、まず思いつくのはmatplotlibだと思いますが、$y=f(x)$としたときの$x$はnumpyのarangeを使って値を代入する必要があるので何とも面倒です。こんなとき使えるのは、SympyのPlotting モジュールです。これは、式をそのままグラフにしてくれる上に、かなり込み入ったこともやってくれます。
必要なモジュールをインポート
まず、必要なモジュールをインポートします。Sympyでは、"from sympy import ~"を使うことが多いようです。変数を定義するvarのほか、今回はPlotting モジュールのすごさを実感できる"plot_implicit function"を使ってみます。また、実はSympyのグラフは、裏ではmatplotlibが動いているので、これもimportします。
from sympy import var
from sympy.plotting import plot_implicit
import matplotlib.pyplot as plt
円の作成
ここではまず円 ($x^2 + y^2 =1$) を描いてみようと思います。
#楕円の描画
var('x,y')
size = 1.1
f = x**2 + y**2 - 1
plot_implicit(f, (x, -size, size), (y, -size, size),
xlim=(-size*1.1, size*1.1), ylim=(-size*1.1, size*1.1))
plt.rcParams['figure.figsize'] = (5, 5)
plot_implicitを使うと、$y=f(x)$のような形にしなくても、数式をうまくグラフにしてくれます。数式を入力して、plot_implicitで$x,y$の範囲などを指定するとだけでグラフができてしまいます。あとは、matplotloibのplt.rcParamsで、グラフの大きさなどを指定して完成です。結果は次のようになります。
双曲線の描画
次に双曲線を描いてみます。
式は、$x^2 - y^2 =1$になります。プログラムとグラフは次の通りです。
#双曲線の描画
var('x,y')
size = 5
f= x**2 - y**2 - 1
plot_implicit(f, (x, -size, size), (y, -size, size),
xlim=(-size*1.1, size*1.1), ylim=(-size*1.1, size*1.1))
plt.rcParams['figure.figsize'] = (5, 5)
交わる2直線
最後に交わる2直線を描いてみます。式は、$f= x^2 - y^2 - 0$です。
プログラムとグラフは次の通りです。
#交わる曲線の描画
var('x,y')
size = 5
f= x**2 - y**2 - 0
plot_implicit(f, (x, -size, size), (y, -size, size),
xlim=(-size*1.1, size*1.1), ylim=(-size*1.1, size*1.1))
plt.rcParams['figure.figsize'] = (5, 5)
まとめ
いきなり特殊なものを機能を使いましたが、とても便利であると思います。ただし、3次元になるとplot_implicitは使えないようなので、ほかのモジュールを使う必要があります。これについては、もう少し研究してます。