本文簡要介紹 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/2
和rtol/2
滿足上述條件。 [布倫特1973]- rtol: 編號,可選
計算的根
x0
將滿足np.allclose(x, x0, atol=xtol, rtol=rtol)
,其中x
是確切的根。該參數不能小於其默認值4*np.finfo(float).eps
。對於好的函數,布倫特的方法通常會滿足上述條件xtol/2
和rtol/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
多元局部優化器:
非線性最小二乘最小化器:
受約束的多元優化器:
全局優化器:
局部標量最小化器:
N-D root-finding:
一維root-finding:
標量定點查找器:
參考:
[布倫特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
相關用法
- Python SciPy optimize.brenth用法及代碼示例
- Python SciPy optimize.brent用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- Python SciPy optimize.brute用法及代碼示例
- Python SciPy optimize.broyden1用法及代碼示例
- Python SciPy optimize.broyden2用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.basinhopping用法及代碼示例
- Python SciPy optimize.rosen_der用法及代碼示例
- Python SciPy optimize.line_search用法及代碼示例
- Python SciPy optimize.rosen用法及代碼示例
- Python SciPy optimize.shgo用法及代碼示例
- Python SciPy optimize.minimize_scalar用法及代碼示例
- Python SciPy optimize.root用法及代碼示例
- Python SciPy optimize.fmin用法及代碼示例
- Python SciPy optimize.NonlinearConstraint用法及代碼示例
- Python SciPy optimize.KrylovJacobian用法及代碼示例
- Python SciPy optimize.toms748用法及代碼示例
- Python SciPy optimize.linprog_verbose_callback用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
- Python SciPy optimize.newton用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.brentq。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。