问题描述
从线性拟合中可以看出,曲线所拟合的点是曲线中的极值,即局部最大值和最小值。
我想通过这些点拟合样条曲线或平滑曲线,以使这些点仍保持局部最大值/最小值。 我使用的是python,但是任何以任何语言甚至普通数学完成上述工作的算法都值得赞赏。
我尝试使用InterpolatedUnivariateSpline
中的scipy.interpolate
,等级2和3的结果显示如下:
第2阶曲线接近预期的结果,但是我有办法施加这些点仍为极值的条件吗?
解决方法
对于所示数据,PchpInterpolator可能会做。
原因是,如果左侧和右侧的线性斜率具有不同的符号,则算法会在数据点处强制零斜率。
演示:
>>> from scipy.interpolate import pchip
>>> xx = np.arange(9)
>>> yy = np.cos(xx*2*np.pi/8) + 0.4*(-1)**(xx)
>>> pch = pchip(xx,yy)
>>> pch(xx,nu=1) # derivative at data points
array([-1.68578644,0.,1.68578644])
,
鉴于您的约束,您将需要进行函数拟合,而不是曲线拟合。
所以您需要一个具有约束条件的多项式
P(xi) = yi
P'(xi) = 0