2

我正在读这篇论文。在第 286 页的这篇论文中,他们说他们使用三次样条插值来确保存在连续的一阶微分和二阶微分。

我目前正在尝试在 python 中执行此操作。从这句话我推断他们想要确保彼此相邻的样条的一阶和二阶导数相同。我现在的问题是,我怎么能用 scipy 做到这一点?我发现了这个:http ://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.splev.html

哪里有参数der(要计算的样条的导数阶数)。那么这是2的参数吗?


*关于此的后续问题*n,他们稍后使用一阶微分点。我可以假设这些只是每个样条的一阶导数吗?怎么可能得到这些?

4

1 回答 1

3

由其计算的样条曲线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).

(不看论文,我无法评论你的第二个问题。)

于 2013-04-10T22:53:26.680 回答