ひとまず自前で微分できるようにする。
import numpy as np import matplotlib.pyplot as plt def differential(func, start, stop, dx, order=1): # 差分で微分を計算するので微分するたびにxの範囲が両端からdx/2ずつ狭くなる。 # その狭くなる分を最初に補っておく。 MARGIN = order * dx / 2.0 START = start - MARGIN STOP = stop + MARGIN x_list = np.arange(START, STOP + dx/10.0, dx) # 両端が含まれるようにするため、stopパラメーターに少しだけ足しておく。 y_list = func(x_list) for _ in range(order): y_list = np.diff(y_list) / dx # order回の差分計算によってずれた分を補正する。 x_list += order * dx / 2.0 x_list = x_list[:len(y_list)] return x_list, y_list ########################################################## func = np.sin start = -np.pi stop = np.pi dx = (stop - start) / 36.0 for i in range(4): plt.plot(*differential(func, start, stop, dx, i)) plt.grid() plt.show()
実行結果:
水色がsin
。
それを微分したのがオレンジ(cos
)。
さらにそれを微分したのが緑(-sin
)。
さらにそれを微分したのが赤(-cos
)。
微分するたびに位相がpi/2
ずつ進む。