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])