Python - 从转折点坐标生成多项式

Posted

技术标签:

【中文标题】Python - 从转折点坐标生成多项式【英文标题】:Python - Generate polynomial from turning point coordinates 【发布时间】:2020-10-21 00:51:15 【问题描述】:

Diagram

使用多项式转折点的坐标列表,我试图找到多项式的系数列表。上图以图形方式显示了我正在尝试解决的问题。

我尝试使用numpy.polyfit 来生成多项式,但是给出的多项式在任何地方都经过这些点,而不是专门在转折点。

是否存在可以做到这一点的函数?

如果没有这样的函数,我正在考虑的一种方法是整合 (x-turningX[0])(x-turningX[1])(x-turningX[n]) 以找到多项式,但我不确定如何在 python 中解决这个问题。

【问题讨论】:

“给定的多项式在任何地方都经过这些点”到底是什么意思?你不希望它通过积分吗?请将您的代码作为minimal reproducible example 编辑到您的问题中,并将输出“拟合”曲线的图像添加到提供给numpy.polyfit() 的数据上。还请提供使用的数据 - 这样我就可以将代码粘贴到文件中,将数据粘贴到另一个文件(或包含在代码中)并运行它而不添加任何内容以查看与您获得的相同结果。 您可以像Using matplotlib to “smoothen” a line with very few points 一样通过您的点绘制贝塞尔曲线。一个普通的 polyfit 可以非常剧烈地振荡。只有由多条接触曲线组成的曲线才能具有受控行为。单个多项式无法在数学上完成您的要求。 @JohanC 谢谢你,这正是我需要的东西! @JohanC,当然,单个多项式可以完成所要求的。如果度数足够高,单个多项式可以拟合一头大象。 :) @damoys,您真的需要多项式,还是只需要通过转折点的平滑曲线? 【参考方案1】:

您可以使用scipy.interpolate.CubicHermiteSpline 创建这样的曲线,方法是为dydx 参数提供一个零数组。比如这段代码

In [60]: import numpy as np

In [61]: from scipy.interpolate import CubicHermiteSpline

In [62]: x = np.array([1, 2.5, 4.5, 6, 7])  # x coordinates of turning points

In [63]: y = np.array([1, 3, 2, 3.5, 2.5])  # y coordinates of turning points

In [64]: p = CubicHermiteSpline(x=x, y=y, dydx=np.zeros_like(y))  # interpolator   

In [65]: plot(x, y, 'o')
Out[65]: [<matplotlib.lines.Line2D at 0xa2f1aef90>]

In [66]: xx = np.linspace(0.9, 7.1, 1000)

In [67]: plot(xx, p(xx))
Out[67]: [<matplotlib.lines.Line2D at 0xa287fb9d0>]

生成此图:

【讨论】:

以上是关于Python - 从转折点坐标生成多项式的主要内容,如果未能解决你的问题,请参考以下文章

怎样用origin7.5 由已知的一些点做出一条折线图,求解折线图转折点的坐标值(未知)?

python 转折点

python 交替转折点(枢轴)

#yyds干货盘点# 3. 无转折不编程,滚雪球学 Python

ArcGIS风暴如何将矢量数据(点线面)折点坐标转为GeoJSON格式?

ArcGIS风暴如何将矢量数据(点线面)折点坐标转为GeoJSON格式?