本文簡要介紹 python 語言中 scipy.optimize.broyden2
的用法。
用法:
scipy.optimize.broyden2(F, xin, iter=None, alpha=None, reduction_method='restart', max_rank=None, verbose=False, maxiter=None, f_tol=None, f_rtol=None, x_tol=None, x_rtol=None, tol_norm=None, line_search='armijo', callback=None, **kw)#
使用 Broyden 的第二雅可比近似求函數的根。
這種方法也被稱為“布羅伊登的壞方法”。
- F: 函數(x)-> f
要查找其根的函數;應該接受並返回一個類似數組的對象。
- xin: array_like
解決方案的初步猜測
- alpha: 浮點數,可選
Jacobian 的初始猜測是
(-1/alpha)
。- reduction_method: str 或元組,可選
用於確保 Broyden 矩陣的秩保持較低的方法。可以是給出方法名稱的字符串,也可以是
(method, param1, param2, ...)
形式的元組,它給出方法名稱和附加參數的值。可用方法:
restart
: drop all matrix columns. Has no extra parameters.simple
: drop oldest matrix column. Has no extra parameters.svd
: keep only the most significant SVD components. Takes an extra parameter,to_retain
, which determines the number of SVD components to retain when rank reduction is done. Default ismax_rank - 2
.
- max_rank: 整數,可選
Broyden 矩陣的最大秩。默認為無窮大(即不降低等級)。
- iter: 整數,可選
要進行的迭代次數。如果省略(默認),則根據需要製作盡可能多的數量以滿足公差。
- verbose: 布爾型,可選
在每次迭代時將狀態打印到標準輸出。
- maxiter: 整數,可選
要進行的最大迭代次數。如果需要更多來滿足收斂,則提出NoConvergence。
- f_tol: 浮點數,可選
殘差的絕對容差(在max-norm 中)。如果省略,默認為 6e-6。
- f_rtol: 浮點數,可選
殘差的相對容差。如果省略,則不使用。
- x_tol: 浮點數,可選
絕對最小步長,由雅可比近似確定。如果步長小於此值,則優化成功終止。如果省略,則不使用。
- x_rtol: 浮點數,可選
相對最小步長。如果省略,則不使用。
- tol_norm: 函數(向量)-> 標量,可選
用於收斂檢查的範數。默認是最大規範。
- line_search: {無,‘armijo’(默認),‘wolfe’},可選
使用哪種類型的線搜索來確定雅可比近似給定方向上的步長。默認為‘armijo’。
- callback: 函數,可選
可選的回調函數。它在每次迭代中被調用為
callback(x, f)
其中x是當前的解決方案,並且f對應的殘差。
- sol: ndarray
包含最終解決方案的數組(與 x0 的數組類型相似)。
- NoConvergence
當沒有找到解決方案時。
參數 ::
返回 ::
拋出 ::
注意:
該算法實現了逆雅可比Quasi-Newton更新
對應於 Broyden 的第二種方法。
參考:
[1]學士學位van der Rotten,PhD 論文,“有限 memory Broyden 方法來求解非線性方程的高維係統”。荷蘭萊頓大學數學研究所(2003 年)。
https://web.archive.org/web/20161022015821/http://www.math.leidenuniv.nl/scripties/Rotten.pdf
例子:
以下函數定義了一個非線性方程組
>>> def fun(x): ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0, ... 0.5 * (x[1] - x[0])**3 + x[1]]
可以如下獲得解決方案。
>>> from scipy import optimize >>> sol = optimize.broyden2(fun, [0, 0]) >>> sol array([0.84116365, 0.15883529])
相關用法
- Python SciPy optimize.broyden1用法及代碼示例
- Python SciPy optimize.bracket用法及代碼示例
- Python SciPy optimize.brute用法及代碼示例
- Python SciPy optimize.brentq用法及代碼示例
- Python SciPy optimize.brenth用法及代碼示例
- Python SciPy optimize.brent用法及代碼示例
- 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.broyden2。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。