関数のプログラム
Python で数学の関数をプログラムする場合、以下の 2 種類があります。
def f (x)
を使ったプログラム- SymPy を使ったプログラム
def f(x)
を使う場合
Python では def 関数名(引数):
というように関数を定義します。例として、 2 次関数 をプログラムしてみましょう。引数 、戻り値 の関数を作成します。
# x**2 を計算する関数 def f(x): return x**2 # f(2) = 2*2 を計算 f(2)
出力結果
4
SymPy を使う場合
SymPy を使って関数プログラムを行います。まず、必要なモジュールをインポートし、変数 のオブジェクトを symbols
で作成します。
Numpy や symbols
については、「SymPy の基礎: 文字式の計算、因数分解・展開」を参考にしてください。
from sympy import init_printing, symbols init_printing(use_latex='mathjax') x = symbols('x')
つづいて、関数 のオブジェクトf
を作成します。
f = x**2 f
出力結果
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
を の範囲でプロットしてみましょう。
# f = x**2 をプロット plot(f, (x, -2, 2), legend = True)
出力結果
legend = True
は、グラフに凡例を表示する bool 型のオプションです。凡例を示したい場合はlegend = True
を設定しましょう。
さまざまな関数とグラフ
三角関数
三角関数の定義
平面の原点を中心とした半径の円を考えましょう。この円は単位円と言います。角度の座標をとするとき、三角関数は次の式で定義されます。 は弧度法で与えられる単位ラジアンの角度です。弧度法では半径 1 の円の演習の長さが度数法の に相当します。
単位円のプロット
三角関数の定義から、単位円上の点 には次のような関係があります。
2 つの変数 を共通の変数で表すことを媒介変数表示といいます。媒介変数表示を利用すれば、曲線のプロットを簡単に作成することができる場合がありますが、単位円をプロットしてみましょう。
# 三角関数と円周率 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
関数を使用し、媒介変数表示の の軌跡をプロットしましょう。範囲は です。
# 媒介変数を t とする t = symbols('t') # 媒介変数表示を使用した単位円のプロットを作成 plot_parametric(cos(t), sin(t), (t, 0, 2*pi), legend = True) # 描画サイズの調整 plt.rcParams['figure.figsize'] = 6, 4
出力結果
半径 , 中心 の円をプロットできたので、 は単位円上の点であることがわかりました。このことから、次の三角関数の公式を得ることができます。
と のプロット
# 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()
出力結果
指数関数と対数関数
指数関数 と対数関数 を同じグラフにプロットします。 の直線も、参考として同じグラフにプロットします。
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()
出力結果