问题
I have fit a second order polynomial to a number of x/y points in the following way:
poly = np.polyfit(x, y, 2)
How can I invert this function in python, to get the two x-values corresponding to a specific y-value?
回答1:
Here's an example that shows how you can combine your poly
with my answer at Inverse function of numpy.polyval().
First some data:
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])
Fit a polynomial to the data:
In [46]: poly = np.polyfit(x, y, 2)
Find where the polynomial has the value y0
In [47]: y0 = 4
To do that, create a poly1d
object:
In [48]: p = np.poly1d(poly)
And find the roots of p - y0
:
In [49]: (p - y0).roots
Out[49]: array([ 5.21787721, 0.90644711])
Check:
In [54]: x0 = (p - y0).roots
In [55]: p(x0)
Out[55]: array([ 4., 4.])
回答2:
np.polyfit
returns the coefficients of the best fit polynomial, highest first. Thus your poly
contains c2, c1, c0
and you have to solve
. 2
. c x + c x + c = y
. 2 1 0
The solution can be found in many places for example here.
来源:https://stackoverflow.com/questions/42179087/get-the-inverse-function-of-a-polyfit-in-numpy