样条由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)
完成。下半年www.ojtwist.be/ibi.pdf :),286页:
(不读报纸,我不能在你的第二个问题发表评论。)
纸张。 – Ojtwist 2013-04-11 10:06:27