今回は、正規分布をnumpyの双曲線正接(hyperbolic tan)で囲ったような関数の微分、二階微分を求めてみる。
np.gradient
が重要だそうだ。
import numpy as np import matplotlib.pyplot as plt def func(x): return np.tanh(np.exp(-x*x)) arr = np.array([i*0.01 for i in range(-200, 200)]) y=func(arr) dy=np.gradient(func(arr))*100 ddy=np.gradient(np.gradient(func(arr))) * 100_10 plt.plot(arr, y) plt.plot(arr, dy) plt.plot(arr, ddy) plt.plot([x for x,y in zip(arr,dy) if abs(y)<0.01],[y for x,y in zip(arr,dy) if abs(y)<0.01],"o") plt.plot([x for x,y in zip(arr,ddy) if abs(y)<0.02],[y for x,y in zip(arr,ddy) if abs(y)<0.02],"o") plt.grid(True) plt.show()