scipy.optimize.
diagbroyden#
- scipy.optimize.diagbroyden(F, xin, iter=None, alpha=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 Jacobian 近似法,尋找函數的根。
Jacobian 近似是從先前的迭代中推導而來,僅保留 Broyden 矩陣的對角線。
警告
此演算法可能適用於特定問題,但其是否有效可能很大程度取決於問題本身。
- 參數:
- F函數(x) -> f
尋找根的函數;應接受並返回類陣列物件。
- xin類陣列
解的初始猜測
- alpha浮點數,選用
Jacobian 的初始猜測為 (-1/alpha)。
- iter整數,選用
要進行的迭代次數。如果省略(預設),則進行達到公差所需的次數。
- verbose布林值,選用
在每次迭代時將狀態列印到 stdout。
- maxiter整數,選用
要進行的最大迭代次數。如果需要更多次才能達到收斂,則會引發
NoConvergence
。- f_tol浮點數,選用
殘差的絕對公差(以最大範數)。如果省略,預設值為 6e-6。
- f_rtol浮點數,選用
殘差的相對公差。如果省略,則不使用。
- x_tol浮點數,選用
絕對最小步長,由 Jacobian 近似法確定。如果步長小於此值,則優化將終止並視為成功。如果省略,則不使用。
- x_rtol浮點數,選用
相對最小步長。如果省略,則不使用。
- tol_norm函數(向量) -> 純量,選用
在收斂檢查中使用的範數。預設值為最大範數。
- line_search{None, ‘armijo’ (預設), ‘wolfe’},選用
要使用哪種類型的線搜索來確定 Jacobian 近似法給定方向上的步長。預設為 ‘armijo’。
- callback函數,選用
選用的回呼函數。它在每次迭代時都會被呼叫,形式為
callback(x, f)
,其中 x 是目前的解,而 f 是對應的殘差。
- 返回值:
- solndarray
包含最終解的陣列(與 x0 具有相似的陣列類型)。
- 引發:
- NoConvergence
當找不到解時。
參見
root
多變數函數尋根演算法的介面。特別參見
method='diagbroyden'
。
範例
以下函數定義了一個非線性方程式系統
>>> 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.diagbroyden(fun, [0, 0]) >>> sol array([0.84116403, 0.15883384])