Python - 从转折点坐标生成多项式
Python - Generate polynomial from turning point coordinates
Diagram
使用多项式转折点的坐标列表,我试图找到多项式系数的列表。上图以图形方式显示了我正在尝试解决的问题。
我曾尝试使用 numpy.polyfit
生成多项式,但是给出的多项式在任何地方都会通过这些点,而不是专门在转折点。
是否存在可以执行此操作的函数?
如果没有这样的函数,我正在考虑的一种方法是积分 (x-turningX[0])(x-turningX[1])(x-turningX[n])
来找到多项式,但我不确定在 python.
中我将如何处理这个问题
您可以使用 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>]
生成此图:
Diagram
使用多项式转折点的坐标列表,我试图找到多项式系数的列表。上图以图形方式显示了我正在尝试解决的问题。
我曾尝试使用 numpy.polyfit
生成多项式,但是给出的多项式在任何地方都会通过这些点,而不是专门在转折点。
是否存在可以执行此操作的函数?
如果没有这样的函数,我正在考虑的一种方法是积分 (x-turningX[0])(x-turningX[1])(x-turningX[n])
来找到多项式,但我不确定在 python.
您可以使用 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>]
生成此图: