当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.brentq用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.brentq 的用法。

用法:

scipy.optimize.brentq(f, a, b, args=(), xtol=2e-12, rtol=8.881784197001252e-16, maxiter=100, full_output=False, disp=True)#

使用 Brent 方法在括号区间中找到函数的根。

使用经典的布伦特方法求函数 f 在符号变化区间 [a , b] 上的根。通常被认为是这里最好的寻根例程。它是使用逆二次外推法的割线法的安全版本。布伦特的方法结合了根包围法、区间二分法和逆二次插值法。它有时被称为 van Wijngaarden-Dekker-Brent 方法。 Brent (1973) 声称 [a,b] 内可计算的函数的收敛性得到保证。

[Brent1973]提供了该算法的经典说明。另一种说明可以在最新版本的 Numerical Recipes 中找到,包括 [PressEtal1992]。第三个说明位于 http://mathworld.wolfram.com/BrentsMethod.html 。只需阅读我们的代码就应该很容易理解该算法。我们的代码与标准演示有点不同:我们为外推步骤选择不同的公式。

参数

f 函数

Python 函数返回一个数字。函数 必须是连续的,并且 必须有相反的符号。

a 标量

包围区间的一端

b 标量

包围区间的另一端

xtol 编号,可选

计算出的根 x0 将满足 np.allclose(x, x0, atol=xtol, rtol=rtol) ,其中 x 是精确根。该参数必须为正数。对于好的函数,Brent 的方法通常会用 xtol/2rtol/2 满足上述条件。 [布伦特1973]

rtol 编号,可选

计算的根 x0 将满足 np.allclose(x, x0, atol=xtol, rtol=rtol) ,其中 x 是确切的根。该参数不能小于其默认值 4*np.finfo(float).eps 。对于好的函数,布伦特的方法通常会满足上述条件 xtol/2rtol/2 。 [布伦特1973]

maxiter 整数,可选

如果在 maxiter 迭代中未实现收敛,则会引发错误。必须 >= 0。

args 元组,可选

包含函数的额外参数f.f被称为apply(f, (x)+args).

full_output 布尔型,可选

如果full_output为 False,则返回根。如果full_output为真,返回值为(x, r),其中x是根,并且r是一个RootResults对象。

disp 布尔型,可选

如果为真,如果算法没有收敛,则提高 RuntimeError。否则,收敛状态记录在任何 RootResults 返回对象中。

返回

root 浮点数

a 和 b 之间的 f 的根。

r RootResults (如果 full_output = True 则存在)

包含有关收敛信息的对象。特别是,如果例程收敛,r.converged 为 True。

注意

f 必须是连续的。 f(a) 和 f(b) 必须有相反的符号。

相关函数分为几类:

多元局部优化器

fmin , fmin_powell , fmin_cg , fmin_bfgs , fmin_ncg

非线性最小二乘最小化器

scipy.optimize.leastsq

受约束的多元优化器

fmin_l_bfgs_b , fmin_tnc , fmin_cobyla

全局优化器

basinhopping , brute , differential_evolution

局部标量最小化器

fminbound , brent , golden , bracket

N-D root-finding

scipy.optimize.fsolve

一维root-finding

brenth , ridder , bisect , newton

标量定点查找器

scipy.optimize.fixed_point

参考

[布伦特1973] (1,2,3)

Brent, R. P.,无导数最小化算法。新泽西州恩格尔伍德悬崖:Prentice-Hall,1973 年。 3-4。

[PressEtal1992]

新闻,W. H.;弗兰纳里,B. P.; Teukolsky, S. A.;和 Vetterling,W. T. FORTRAN 中的数值食谱:科学计算的艺术,第 2 版。英国剑桥:剑桥大学出版社,第 352-355 页,1992 年。第 9.3 节:“Van Wijngaarden-Dekker-Brent 方法”。

例子

>>> def f(x):
...     return (x**2 - 1)
>>> from scipy import optimize
>>> root = optimize.brentq(f, -2, 0)
>>> root
-1.0
>>> root = optimize.brentq(f, 0, 2)
>>> root
1.0

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.brentq。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。