LSODA#
- class scipy.integrate.LSODA(fun, t0, y0, t_bound, first_step=None, min_step=0.0, max_step=inf, rtol=0.001, atol=1e-06, jac=None, lband=None, uband=None, vectorized=False, **extraneous)[source]#
具自動剛性偵測與切換功能的 Adams/BDF 方法。
這是 ODEPACK [1] Fortran 求解器的包裝函式。它會在非剛性 Adams 方法和剛性 BDF 方法之間自動切換。此方法最初詳述於 [2]。
- 參數:
- funcallable
系統的右側:時間
t
時狀態y
的時間導數。呼叫簽名為fun(t, y)
,其中t
是純量,y
是具有len(y) = len(y0)
的 ndarray。fun
必須傳回與y
相同形狀的陣列。有關更多資訊,請參閱 vectorized。- t0float
初始時間。
- y0array_like, shape (n,)
初始狀態。
- t_boundfloat
邊界時間 - 積分不會超過此時間。它也決定了積分的方向。
- first_stepfloat 或 None,選用
初始步長。預設值為
None
,表示演算法應自行選擇。- min_stepfloat,選用
最小允許步長。預設值為 0.0,即步長不受限制,僅由求解器決定。
- max_stepfloat,選用
最大允許步長。預設值為 np.inf,即步長不受限制,僅由求解器決定。
- rtol, atolfloat 和 array_like,選用
相對和絕對容差。求解器保持局部誤差估計值小於
atol + rtol * abs(y)
。此處 rtol 控制相對精度(正確位數),而 atol 控制絕對精度(正確小數位數)。若要達到所需的 rtol,請將 atol 設定為小於可從rtol * abs(y)
預期的最小值,以便 rtol 主導允許的誤差。如果 atol 大於rtol * abs(y)
,則不保證正確位數。反之,若要達到所需的 atol,請設定 rtol,使rtol * abs(y)
始終小於 atol。如果 y 的組件具有不同的尺度,則為不同的組件設定不同的 atol 值可能有利,方法是為 atol 傳遞形狀為 (n,) 的 array_like。 rtol 的預設值為 1e-3,atol 的預設值為 1e-6。- jacNone 或 callable,選用
系統右側相對於
y
的雅可比矩陣。雅可比矩陣的形狀為 (n, n),其元素 (i, j) 等於d f_i / d y_j
。此函數將以jac(t, y)
的形式呼叫。如果為 None(預設值),雅可比矩陣將透過有限差分法近似。通常建議提供雅可比矩陣,而不是依賴有限差分近似。- lband, ubandint 或 None
定義雅可比矩陣帶寬的參數,即
jac[i, j] != 0 only for i - lband <= j <= i + uband
。設定這些參數需要您的 jac 常式以封裝格式傳回雅可比矩陣:傳回的陣列必須具有n
個欄和uband + lband + 1
列,其中寫入了雅可比矩陣對角線。具體而言,jac_packed[uband + i - j , j] = jac[i, j]
。scipy.linalg.solve_banded
中也使用了相同的格式(請查看範例)。這些參數也可以與jac=None
搭配使用,以減少有限差分法估計的雅可比矩陣元素數量。- vectorizedbool,選用
fun 是否可以向量化方式呼叫。建議此求解器使用 False(預設值)。
如果
vectorized
為 False,則將始終使用形狀為(n,)
的y
呼叫 fun,其中n = len(y0)
。如果
vectorized
為 True,則可以使用形狀為(n, k)
的y
呼叫 fun,其中k
是整數。在這種情況下,fun 的行為必須使得fun(t, y)[:, i] == fun(t, y[:, i])
(即,傳回陣列的每一欄都是與y
欄對應的狀態的時間導數)。設定
vectorized=True
可以更快地使用 ‘Radau’ 和 ‘BDF’ 方法對雅可比矩陣進行有限差分近似,但會導致此求解器的執行速度變慢。
參考文獻
[1]A. C. Hindmarsh, “ODEPACK, A Systematized Collection of ODE Solvers,” IMACS Transactions on Scientific Computation, Vol 1., pp. 55-64, 1983.
[2]L. Petzold, “Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations”, SIAM Journal on Scientific and Statistical Computing, Vol. 4, No. 1, pp. 136-148, 1983.
- 屬性:
- nint
方程式數量。
- statusstring
求解器的目前狀態:「running」、「finished」或「failed」。
- t_boundfloat
邊界時間。
- directionfloat
積分方向:+1 或 -1。
- tfloat
目前時間。
- yndarray
目前狀態。
- t_oldfloat
前次時間。如果尚未執行任何步驟,則為 None。
- nfevint
右側的評估次數。
- njevint
雅可比矩陣的評估次數。
方法
計算最後成功步驟的局部內插函數。
step
()執行一個積分步驟。