當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。