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


Python SciPy optimize.brenth用法及代碼示例


本文簡要介紹 python 語言中 scipy.optimize.brenth 的用法。

用法:

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

使用 Brent 方法和雙曲外推法在括號區間中找到函數的根。

經典布倫特例程的變體,用於在參數 a 和 b 之間查找函數 f 的根,該例程使用雙曲外推法而不是逆二次外推法。 Bus & Dekker (1975) 保證了該方法的收斂性,聲稱此處函數計算的上限比二分法的上限小 4 或 5 倍。 f(a) 和 f(b) 不能具有相同的符號。一般來說,與布倫特原油原油期貨價格相當,但沒有經過嚴格測試。它是使用雙曲線外推法的割線法的安全版本。這裏的版本是由 Chuck Harris 編寫的,並實現了 [BusAndDekker1975] 的算法 M,可以在其中找到更多詳細信息(收斂屬性、附加注釋等)

參數

f 函數

Python 函數返回一個數字。 f 必須是連續的,並且 f(a) 和 f(b) 必須有相反的符號。

a 標量

包圍區間 [a,b] 的一端。

b 標量

包圍區間 [a,b] 的另一端。

xtol 編號,可選

計算出的根 x0 將滿足 np.allclose(x, x0, atol=xtol, rtol=rtol) ,其中 x 是精確根。該參數必須為正數。與 brentq 一樣,對於好的函數,該方法通常會使用 xtol/2rtol/2 滿足上述條件。

rtol 編號,可選

計算的根 x0 將滿足 np.allclose(x, x0, atol=xtol, rtol=rtol) ,其中 x 是確切的根。該參數不能小於其默認值 4*np.finfo(float).eps 。與 brentq 一樣,對於好的函數,該方法通常會滿足上述條件 xtol/2rtol/2

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。

參考

[巴士與德克爾1975]

Bus, J. C. P., Dekker, T. J.,“兩種保證收斂的高效算法,用於查找函數的零點”,ACM Transactions on Mathematical Software,Vol。 1,第 4 期,1975 年 12 月,第 330-345 頁。第 3 節:“Algorithm M”。 DOI:10.1145/355656.355659

例子

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

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.brenth。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。