由其计算的样条曲线scipy.interpolate
具有k
连续的1 ... k-1
:th 导数。对于您的案例订单k=3
将具有连续的一阶和二阶导数。您可以通过样条曲线的数值微分自己检查这是否正确:
将 numpy 导入为 np
从 scipy 导入插值
将 matplotlib.pyplot 导入为 plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
spl = interpolate.splrep(x, y, k=3)
xx = np.linspace(0, 10, 100000)
yy = interpolate.splev(xx, spl)
d1 = np.diff(yy) / np.diff(xx)
d2 = np.diff(d1) / np.diff(xx[1:])
d3 = np.diff(d2) / np.diff(xx[1:-1])
plt.subplot(311)
plt.plot(xx[1:], d1)
plt.title('一阶导数')
plt.subplot(312)
plt.plot(xx[1:-1], d2)
plt.title('二阶导数')
plt.subplot(313)
plt.plot(xx[2:-1], d3)
plt.title('三阶导数')
plt.show()
三阶导数是第一个显示不连续性的导数。
取二阶导数确实可以直接通过splev(..., der=2)
.
(不看论文,我无法评论你的第二个问题。)