Python 从输入数据点生成平滑曲线的算法
我正在寻找一种算法,可以在点实时出现时平滑地进行插值 例如,假设我从10(x,y)对数组开始。我目前正在使用scipy和高斯窗口生成平滑曲线。但是,我不知道如何更新平滑曲线,以响应在未来某个点生成的第11个点(而不完全重新对所有11个点进行平滑)Python 从输入数据点生成平滑曲线的算法,python,gaussian,smoothing,Python,Gaussian,Smoothing,我正在寻找一种算法,可以在点实时出现时平滑地进行插值 例如,假设我从10(x,y)对数组开始。我目前正在使用scipy和高斯窗口生成平滑曲线。但是,我不知道如何更新平滑曲线,以响应在未来某个点生成的第11个点(而不完全重新对所有11个点进行平滑) 我要寻找的是一种算法,遵循前一条平滑曲线,直到第10对(x,y),并且也在第10对和第11对之间平滑插值(以类似于重做整个算法的方式-因此没有锐边)。有什么东西能满足我的需要吗?我想你可以利用一个。给定n点的列表(x_1,y_1)-(x_n,y_n),
我要寻找的是一种算法,遵循前一条平滑曲线,直到第10对(x,y),并且也在第10对和第11对之间平滑插值(以类似于重做整个算法的方式-因此没有锐边)。有什么东西能满足我的需要吗?我想你可以利用一个。给定
n
点的列表(x_1,y_1)-(x_n,y_n)
,该算法在(x_k,y_k)
和(x_{k+1},y_{k+1})之间找到一个三次多项式p_k
,具有以下约束:
- 多项式
pk
和pk+1}
通过点(x{k+1},y{k+1})
李>
- 多项式
pk
和pk+1}
在(x{k+1},y{k+1})具有相同的一阶导数李>
- 多项式
pk
和pk+1}
在(x{k+1},y{k+1})处具有相同的二阶导数
此外,还有一些边界条件,为第一个和最后一个多项式定义。我使用了natural
,它强制曲线末端的二阶导数为零
您可以应用的步骤包括:
使用三次样条插值前10个点
将p_10
处的一阶导数值分配给变量d
对p_10
和p_11
运行三次样条曲线,强制执行p_10
处的一阶导数为d
,而p_11
处的二阶导数为零
然后,可以对其余点重复相同的步骤
此代码将为所有点生成插值:
导入matplotlib.pyplot作为plt
将numpy作为np导入
从scipy.interpolate导入线
高度=4
n=20
x=np.arange(n)
xs=np.arange(-0.1,n+0.1,0.1)
y=np.随机.均匀(低=0,高=高度,大小=n)
plt.plt(x,y,'o',label='data')
cs=立方线(x,y)
plt.plt(xs,cs(xs),颜色为橙色)
plt.ylim([0,高度+1])
现在,该代码将对前10个点进行插值,然后在点10和11之间进行另一次插值:
k=10
δ=0.001
plt.plt(x,y,'o',label='data')
xs=np.arange(x[0],x[k-1]+delta,delta)
cs=立方线(x[0:k],y[0:k])
plt.plt(xs,cs(xs),color='red')
d=cs(x[k-1],1)
xs2=np.arange(x[k-1],x[k]+delta,delta)
cs2=立方线(x[k-1:k+1],y[k-1:k+1],bc_类型=((1,d),‘自然’)
plt.plot(xs2,cs2(xs2),color='blue')
plt.ylim([0,高度+1])
哇,这正是我想要的。非常感谢你!