本文簡要介紹 python 語言中 scipy.optimize.newton_krylov
的用法。
用法:
scipy.optimize.newton_krylov(F, xin, iter=None, rdiff=None, method='lgmres', inner_maxiter=20, inner_M=None, outer_k=10, 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)#
使用逆雅可比行列式的 Krylov 近似求函數的根。
此方法適用於解決large-scale 問題。
- F: 函數(x)-> f
要查找其根的函數;應該接受並返回一個類似數組的對象。
- xin: array_like
解決方案的初步猜測
- rdiff: 浮點數,可選
用於數值微分的相對步長。
- method: str 或可調用,可選
用於近似雅可比行列式的克雷洛夫方法。可以是字符串,也可以是實現與
scipy.sparse.linalg
中的迭代求解器相同接口的函數。如果是字符串,則需要是以下之一:'lgmres'
、'gmres'
、'bicgstab'
、'cgs'
、'minres'
、'tfqmr'
。默認值為
scipy.sparse.linalg.lgmres
。- inner_maxiter: 整數,可選
傳遞給“inner” Krylov 求解器的參數:最大迭代次數。即使沒有達到指定的容差,迭代也會在 maxiter 步後停止。
- inner_M: LinearOperator 或 InverseJacobian
內部 Krylov 迭代的預處理器。請注意,您也可以使用逆雅可比矩陣作為(自適應)預條件子。例如,
>>> from scipy.optimize import BroydenFirst, KrylovJacobian >>> from scipy.optimize import InverseJacobian >>> jac = BroydenFirst() >>> kjac = KrylovJacobian(inner_M=InverseJacobian(jac))
如果預條件器有一個名為‘update’的方法,則在每個非線性步驟之後它將被稱為
update(x, f)
,其中x
給出當前點,f
給出當前函數值。- outer_k: 整數,可選
LGMRES 非線性迭代中保持的子空間大小。有關詳細信息,請參閱
scipy.sparse.linalg.lgmres
。- inner_kwargs: 誇格斯
“inner” Krylov 求解器的關鍵字參數(定義為方法)。參數名稱必須以inner_在傳遞內部方法之前將被剝離的前綴。參見,例如,scipy.sparse.linalg.gmres詳情。
- 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
當沒有找到解決方案時。
參數 ::
返回 ::
拋出 ::
注意:
此函數實現Newton-Krylov 求解器。基本思想是使用迭代 Krylov 方法計算雅可比行列式的逆。這些方法隻需要評估Jacobian-vector產品,它們可以方便地通過有限差分來近似:
由於使用了迭代矩陣求逆,這些方法可以處理較大的非線性問題。
SciPy 的
scipy.sparse.linalg
模塊提供了一係列可供選擇的 Krylov 求解器。這裏的默認是關注,這是重新啟動的 GMRES 迭代的變體,它重用在先前牛頓步驟中獲得的一些信息,以在後續步驟中反轉雅可比行列式。有關 Newton-Krylov 方法的評論,請參見示例 [1],對於 LGMRES 稀疏逆方法,請參見 [2]。
參考:
[1]C. T. Kelley,用牛頓法求解非線性方程,SIAM,第 57-83 頁,2003 年。DOI:10.1137/1.9780898718898.ch3
[2]D.A.諾爾和 D.E.凱斯,J. Comp。物理。 193, 357 (2004)。 DOI:10.1016/j.jcp.2003.08.010
[3]A.H. Baker 和 E.R. Jessup 和 T. Manteuffel,SIAM J. Matrix Anal。應用程序。 26, 962 (2005)。 DOI:10.1137/S0895479803422014
例子:
以下函數定義了一個非線性方程組
>>> def fun(x): ... return [x[0] + 0.5 * x[1] - 1.0, ... 0.5 * (x[1] - x[0]) ** 2]
可以如下獲得解決方案。
>>> from scipy import optimize >>> sol = optimize.newton_krylov(fun, [0, 0]) >>> sol array([0.66731771, 0.66536458])
相關用法
- Python SciPy optimize.newton用法及代碼示例
- Python SciPy optimize.nnls用法及代碼示例
- 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.bracket用法及代碼示例
- Python SciPy optimize.milp用法及代碼示例
- Python SciPy optimize.diagbroyden用法及代碼示例
- Python SciPy optimize.bisect用法及代碼示例
- Python SciPy optimize.isotonic_regression用法及代碼示例
- Python SciPy optimize.golden用法及代碼示例
- Python SciPy optimize.brute用法及代碼示例
- Python SciPy optimize.fsolve用法及代碼示例
- Python SciPy optimize.Bounds用法及代碼示例
- Python SciPy optimize.fixed_point用法及代碼示例
- Python SciPy optimize.rosen_hess用法及代碼示例
- Python SciPy optimize.broyden1用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.optimize.newton_krylov。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。