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

2024-06-28 19:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用已知的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)

我想做0.5=f,求x值。

我可以在WolframAlpha中通过键入:

0.5 = -9.1e-6*x^3 + 5.9e-4*x^2 - 2.5e-2*x + 9.05e-1

实际x值是~26


Tags: 数据importnumpy键入asnp曲线poly
2条回答

你可以用^{}解方程f(x) - y = 0。考虑功能:

def solve_for_y(poly_coeffs, y):
    pc = poly_coeffs.copy()
    pc[-1] -= y
    return np.roots(pc)

然后,您可以使用它来求解您想要的任何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       ]
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        ])

看起来你想要的根是25.36882693。

相关问题 更多 >