2013-04-10 42 views
2

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

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

哪里有一个参数der(要计算的样条曲线的导数的顺序)。那么这个参数是2呢?


* 后续questio * N关于这一点,他们以后使用一阶差分点。我能否假设这些只是每个样条曲线的一阶导数?怎么可能得到这些?

回答

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)完成。下半年www.ojtwist.be/ibi.pdf :),286页:

(不读报纸,我不能在你的第二个问题发表评论。)

+0

纸张。 – Ojtwist 2013-04-11 10:06:27

相关问题