Python 减少样条插值中的振荡
我试着用Python 减少样条插值中的振荡,python,scipy,interpolation,Python,Scipy,Interpolation,我试着用单变量样条函数插值一组点,但是我得到了集合极限内通常的大振荡,你知道解决这个问题的方法吗 我的代码如下所示: 导入matplotlib.pyplot作为plt 将numpy作为np导入 作为pd进口熊猫 x=pd.read\u csv('structlaw.txt') x1=x[‘时间(秒)’] y1=x[‘推力(N)’] def花键(x1,y1): 从scipy.interpolate导入单变量样条线 si=单变量样条线(x1,y1,s=0,k=3) xs=np.linspace(0,
单变量样条函数插值一组点,但是我得到了集合极限内通常的大振荡,你知道解决这个问题的方法吗
我的代码如下所示:
导入matplotlib.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
x=pd.read\u csv('structlaw.txt')
x1=x[‘时间(秒)’]
y1=x[‘推力(N)’]
def花键(x1,y1):
从scipy.interpolate导入单变量样条线
si=单变量样条线(x1,y1,s=0,k=3)
xs=np.linspace(0,x1[len(x1)-1],10000)
ys=si(xs)
plt.绘图(x1,y1,'go')
plt.绘图(xs,ys)
plt.ylabel(“推力[N]”)
plt.xlabel(“时间[秒]”)
plt.标题(“推力曲线(样条曲线)”)
plt.grid()
plt.show()
花键(x1,y1)
结果:
将高次多项式拟合到含噪数据往往可以做到这一点。不存在此问题的插值方法是(唯一)分段三次多项式,对于每对连续点i,i+1
:
- 通过
x\u i,y\u i
- 通过
x{i+1},y{i+1}
- 在
x_i
,具有斜率(y_{i+1}-y_{i-1})/(x_{i+1}-x_{i-1})
- 在
x{i+1}
,具有斜率(y{i+2}-y{i)/(x{i+2}-x{i)
因此,每个点处的切线与从上一点到下一点的直线段平行。这迫使导数与原始数据“有些相似”,因此它不会剧烈振荡
如果我没弄错的话,这是一个Catmull-Rom样条曲线,一个特殊的例子。可能会帮助您在scipy中实现它,或者找到另一种您喜欢的插值方法。您可以提供strustralaw.txt
文件以便于实验吗?(+1)是的,可以DIY CR插值器或使用已经实现的PCHIP或Akima方案。后者保证C1平滑,这可能相关,也可能无关,取决于曲线的用途。由于scipy.interpolare提供了tge CubicHermiteSpline类,所以实现所有这些都很容易