在给定的极值点上强制拟合样条曲线

问题描述

我有一组点,当用直线连接时,如下图所示:

Linear Fit

从线性拟合中可以看出,曲线所拟合的点是曲线中的极值,即局部最大值和最小值。

我想通过这些点拟合样条曲线或平滑曲线,以使这些点仍保持局部最大值/最小值。 我使用的是python,但是任何以任何语言甚至普通数学完成上述工作的算法都值得赞赏。


我尝试使用InterpolatedUnivariateSpline中的scipy.interpolate,等级2和3的结果显示如下:

Order 2 Fit

Order 3 Fit

第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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...