在numpy中获得polyfit的反函数

时间:2017-02-11 17:42:58

标签: python numpy polynomials

我通过以下方式将二阶多项式拟合到多个x / y点:

poly  = np.polyfit(x, y, 2)

如何在python中反转此函数,以获得对应于特定y值的两个x值?

3 个答案:

答案 0 :(得分:7)

以下是一个示例,说明如何合并poly 我的回答是Inverse function of numpy.polyval()

首先是一些数据:

In [44]: x
Out[44]: array([0, 1, 2, 3, 4, 5, 6, 7])

In [45]: y
Out[45]: array([ 9,  4,  0, -1, -1,  4,  8, 16])

将多项式拟合到数据:

In [46]: poly = np.polyfit(x, y, 2)

找到多项式具有值y0

的位置
In [47]: y0 = 4

为此,请创建一个poly1d对象:

In [48]: p = np.poly1d(poly)

找到p - y0的根源:

In [49]: (p - y0).roots
Out[49]: array([ 5.21787721,  0.90644711])

检查:

In [54]: x0 = (p - y0).roots

In [55]: p(x0)
Out[55]: array([ 4.,  4.])

答案 1 :(得分:3)

2返回最佳拟合多项式的系数,最高为1。因此,np.polyfit包含poly,您必须解决

c2, c1, c0

解决方案可以在很多地方找到,例如here

答案 2 :(得分:0)

按照沃伦的回答

    p = np.poly1d(m1)
    print(p)
    y0 = returns[sr.argmax()]
    x0 = p(y0)
    #x0 = p((p - y0).roots)
    print(x0)
    print(y0)