在给定范围内查找函数的根

Jür*_*aak 5 python numpy function scipy

我有一组f_t具有多个根的函数(实际上是两个)。我想找到“第一个”根,并且在fsolve大多数情况下都可以正常工作。问题是,随着 t 趋于无穷大,两个根会收敛。(我的功能的一个简单例子是f_t(x) = x^2 - 1/t)。所以越大t,犯的错误就越多fsolve。是否有一个预定义的函数,类似于fsolve我可以告诉它应该只在给定范围内查找的函数(例如,始终在[0, inf)中查找根)。

该问题与https://mathematica.stackexchange.com/questions/91784/how-to-find-numerically-all-roots-of-a-function-in-a-given-range?noredirect=1&lq基本相同=1,但是有 Mathematica 的答案,我想要它们在 Python 中。

PS:我现在如何编写自己的算法,但由于这些算法往往比内置函数慢,我希望找到一个可以实现相同功能的内置函数。特别是我读过这篇文章Find root of a function in a given interval

Ale*_*lex 7

人们普遍认为,对于平滑、性能良好的函数,布伦特方法是保证给出根的最快方法。与列出的其他两种方法一样,您必须提供一个区间 [a,b],函数在该区间内连续并改变符号。

Scipy 实现记录在此处。您提到的函数的示例用例可能如下所示:

from __future__ import division
import scipy

def func(x,t):
    return(x**2 - 1/t)

t0 = 1
min = 0
max = 100000 # set max to some sufficiently large value

root = scipy.optimize.brentq(func, min, max, args = (t0)) # args just supplies any extra
                                                       # argument for the function that isn't the varied parameter
Run Code Online (Sandbox Code Playgroud)