求解scipy/numpy中已知y的多项式的x值

chi*_*gry 5 python math numpy scipy

我试图用已知的y求解x值.我能够得到多项式以适合我的数据,现在我想知道所选y将落在曲线上的x值.

import numpy as np

x = [50, 25, 12.5, 6.25, 0.625, 0.0625, 0.01]
y = [0.00, 0.50, 0.68, 0.77, 0.79, 0.90, 1.00]

poly_coeffs = np.polyfit(x, y, 3)

f = np.poly1d(poly_coeffs)
Run Code Online (Sandbox Code Playgroud)

我想做0.5 = f并求解x值.

我可以通过输入以下内容在WolframAlpha中解决此问题:

0.5 = -9.1e-6*x^3 + 5.9e-4*x^2 - 2.5e-2*x + 9.05e-1
Run Code Online (Sandbox Code Playgroud)

实际的x值是~26

And*_*lev 5

f(x) - y = 0您可以使用求解方程np.roots。考虑这个函数:

def solve_for_y(poly_coeffs, y):
    pc = poly_coeffs.copy()
    pc[-1] -= y
    return np.roots(pc)
Run Code Online (Sandbox Code Playgroud)

然后你可以用它来求解你想要的任何多项式y

>>> print solve_for_y(poly_coeffs, 0.5)
[ 19.99806935+37.92449551j  19.99806935-37.92449551j  25.36882693 +0.j        ]
>>> print solve_for_y(poly_coeffs, 1.)
[ 40.85615395+50.1936152j  40.85615395-50.1936152j -16.34734226 +0.j       ]
Run Code Online (Sandbox Code Playgroud)

  • 您的方法似乎修改了“poly_coeffs”,因此对该方法的第二次调用实际上会给出错误的答案,即它正在使用与原始多项式不同的多项式求解“x”的“y = 1”。 (2认同)

Cha*_*ris 5

In [1]: from numpy.polynomial import Polynomial as P

In [2]: x = [50, 25, 12.5, 6.25, 0.625, 0.0625, 0.01]

In [3]: y = [0.00, 0.50, 0.68, 0.77, 0.79, 0.90, 1.00]

In [4]: p = P.fit(x, y, 3)

In [5]: (p - .5).roots()
Out[5]: 
array([ 19.99806935-37.92449551j,  19.99806935+37.92449551j,
        25.36882693 +0.j        ])
Run Code Online (Sandbox Code Playgroud)

看起来你想要的根是25.36882693.