物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

Pythonで数値的な二階微分をやってみる

今回は、正規分布を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()

f:id:onsanai:20191214005237p:plain