我正在读这个paper。在第286页的这篇论文中,他们说他们使用三次样条插值来确保连续的一阶微分和二阶微分的存在。
我目前正在尝试在python中执行此操作。从这句话我推断他们想要确保彼此相邻的样条的一阶和二阶导数是相同的。我现在的问题是,我怎么能用scipy做到这一点?我发现了这个:http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.splev.html
存在参数der
(要计算的样条的导数的阶数)。这是2的参数吗?
* 关于此问题的后续问题,他们稍后会使用一阶差分点。我可以假设这些只是每个样条曲线的一阶导数吗?怎么可能得到这些?
答案 0 :(得分:3)
由scipy.interpolate
计算的样式为k
的样条线具有连续的1 ... k-1
:衍生物。对于您的情况,订单k=3
将具有连续的一阶和二阶导数。您可以通过样条的数值微分来检查这是否属实:
import numpy as np from scipy import interpolate import matplotlib.pyplot as 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('first derivative') plt.subplot(312) plt.plot(xx[1:-1], d2) plt.title('second derivative') plt.subplot(313) plt.plot(xx[2:-1], d3) plt.title('third derivative') plt.show()
第三个衍生物是第一个显示不连续性的衍生物。
确实可以通过splev(..., der=2)
直接进行二阶导数。
(如果没有阅读论文,我就不能对你的第二个问题发表评论。)