LoginSignup
3
1

More than 3 years have passed since last update.

Sympyモジュールを使ってグラフを作成する

Posted at

Sympyでグラフを作成する

Sympyを使って代数計算をしているときに、この数式のグラフはどんな形をしているのか、サッとみてみたいということがあります。Pythonでグラフといえば、まず思いつくのはmatplotlibだと思いますが、$y=f(x)$としたときの$x$はnumpyのarangeを使って値を代入する必要があるので何とも面倒です。こんなとき使えるのは、SympyのPlotting モジュールです。これは、式をそのままグラフにしてくれる上に、かなり込み入ったこともやってくれます。

必要なモジュールをインポート

まず、必要なモジュールをインポートします。Sympyでは、"from sympy import ~"を使うことが多いようです。変数を定義するvarのほか、今回はPlotting モジュールのすごさを実感できる"plot_implicit function"を使ってみます。また、実はSympyのグラフは、裏ではmatplotlibが動いているので、これもimportします。

必要なモジュールなどをimport
from sympy import var
from sympy.plotting import plot_implicit
import matplotlib.pyplot as plt

円の作成

ここではまず円 ($x^2 + y^2 =1$) を描いてみようと思います。

必要なモジュールなどをimport
#楕円の描画
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で、グラフの大きさなどを指定して完成です。結果は次のようになります。
image.png

双曲線の描画

次に双曲線を描いてみます。
式は、$x^2 - y^2 =1$になります。プログラムとグラフは次の通りです。

必要なモジュールなどをimport
#双曲線の描画
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)

image.png

交わる2直線

最後に交わる2直線を描いてみます。式は、$f= x^2 - y^2 - 0$です。
プログラムとグラフは次の通りです。

必要なモジュールなどをimport
 #交わる曲線の描画
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)

image.png

まとめ

いきなり特殊なものを機能を使いましたが、とても便利であると思います。ただし、3次元になるとplot_implicitは使えないようなので、ほかのモジュールを使う必要があります。これについては、もう少し研究してます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1