微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。