高知の田舎で耕すデータサイエンス農家のブログ

「高知と農業、あと哲学とか」からブログタイトルを一時変更中です

【スポンサーリンク】

SymPy を使った関数プログラムとグラフ作成

関数のプログラム

Python で数学の関数をプログラムする場合、以下の 2 種類があります。

  • def f (x) を使ったプログラム
  • SymPy を使ったプログラム

def f(x) を使う場合

Python では def 関数名(引数): というように関数を定義します。例として、 2 次関数  f(x) = x^2 をプログラムしてみましょう。引数  x 、戻り値  x^2 の関数を作成します。

# x**2 を計算する関数

def f(x): 
  return x**2

# f(2) = 2*2 を計算

f(2)

出力結果

4

SymPy を使う場合

SymPy を使って関数プログラムを行います。まず、必要なモジュールをインポートし、変数  x のオブジェクトを symbols で作成します。

Numpy や symbols については、「SymPy の基礎: 文字式の計算、因数分解・展開」を参考にしてください。

from sympy import init_printing, symbols
init_printing(use_latex='mathjax')

x =  symbols('x')

つづいて、関数  f(x)=x^2 のオブジェクトfを作成します。

f = x**2
f

出力結果

 x^2

def f(x):を使ってf(2)を計算したときと同じ操作をする場合は、subs メソッドを使用します。

# f に x = 2 を代入

f.subs(x, 2)

出力結果

4

関数のプロット

関数のプロットも SymPy を使ってできます。まずはプロットに必要なモジュールをインポートしましょう。

from sympy.plotting import plot
%matplotlib inline

例として、f(x)=x^2 -2\leqq x \leqq 2 の範囲でプロットしてみましょう。

# f = x**2 をプロット

plot(f, (x, -2, 2), legend = True)

出力結果

legend = True は、グラフに凡例を表示する bool 型のオプションです。凡例を示したい場合はlegend = Trueを設定しましょう。

さまざまな関数とグラフ

三角関数

三角関数の定義

xy平面の原点を中心とした半径1の円を考えましょう。この円は単位円と言います。角度\thetaの座標を(x, y)とするとき、三角関数は次の式で定義されます。\theta は弧度法で与えられる単位ラジアンの角度です。弧度法では半径 1 の円の演習の長さが度数法の 360^{\circ}に相当します。

 \displaystyle
\sin \theta = y, \cos \theta=x, \tan \theta = \dfrac{y}{x}
単位円のプロット

三角関数の定義から、単位円上の点  (x, y) には次のような関係があります。

 \displaystyle
\left\{
\begin{array}{ll}
x = \cos \theta\\
y = \sin \theta
\end{array}
\right.

2 つの変数  (x, y) を共通の変数で表すことを媒介変数表示といいます。媒介変数表示を利用すれば、曲線のプロットを簡単に作成することができる場合がありますが、単位円をプロットしてみましょう。

# 三角関数と円周率 pi をインポート

from sympy import sin, cos, tan, pi
from sympy.plotting import plot_parametric

# 描画サイズを指定する

import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = 5, 5

plot_parametric 関数を使用し、媒介変数表示の  (x, y) の軌跡をプロットしましょう。範囲は  0 \leqq \theta \leqq 2 \pi です。

# 媒介変数を t とする

t = symbols('t')

# 媒介変数表示を使用した単位円のプロットを作成

plot_parametric(cos(t), sin(t), (t, 0, 2*pi), legend = True)

# 描画サイズの調整

plt.rcParams['figure.figsize'] = 6, 4

出力結果

半径  1, 中心  (0, 0) の円をプロットできたので、  (\cos x, \sin x) は単位円上の点であることがわかりました。このことから、次の三角関数の公式を得ることができます。

 \displaystyle
\cos^{2}x + \sin^{2}x = 1
 \sin x  \cos x のプロット
# sin(x) と cos (x) のプロット
p = plot(sin(x), cos(x), (x, -2*pi, 2*pi), legend =  True, show = False)

# グラフの色を指定
p[0].line_color = 'b' # 青
p[1].line_color = 'r' #  赤

#グラフの表示

p.show()

出力結果

指数関数と対数関数

指数関数  f(x) と対数関数  g(x) を同じグラフにプロットします。 y = x の直線も、参考として同じグラフにプロットします。

from sympy import log

p = plot(2**x, log(x, 2), x, (x, -2, 4), legend = True, show = False)
p.ylim = (-2, 4)

p[0].line_color = 'b'
p[1].line_color = 'r'
p[2].line_color = 'g' # 緑

p.show()

出力結果

参考

【スポンサーリンク】