我正在尝试编写一个函数,当y值接近零时,该函数返回某些数据的x值。我给了两个列表来输入函数,如[x的值为[1,4,5],x值为[-3,5,9],例如。我已经使用插值编写了这个函数,然后使用索引在y值接近零时首先找到y值的索引,并使用它来找到此时的x值:(请注意:我添加了图形并且y = 0行仅用于说明目的。)
def root(xs, ys):
xfine = np.linspace(min(xs), max(xs), 10000)
y0 = inter.interp1d(xs, ys, kind = 'linear')
f1 = xfine, y0(xfine)
x2fine = np.linspace(min(xs), max(xs), 10000)
y2 = np.linspace(0,0, 10000)
f2 = x2fine, y2
pl.plot(xfine, y0(xfine))
pl.plot(x2fine, y2)
pl.show()
closest = min(abs(y0(xfine)))
xindex = numpy.searchsorted(y0(xfine), closest)
print round(xfine[xindex], 3)
这似乎给了我正确的答案,但我被告知我应该在我的功能中使用brentq。但是我只给出了上面提到的数据,我发誓brentq需要输入两个连续函数吗?如何只使用新数字而不是函数来为brentq做这项工作?
答案 0 :(得分:0)
虽然你可以在插值函数上使用brentq,因为你已经在使用插值,只需用它来反转函数:
finv = inter.interp1d(y, x)
print (finv(0))