RK23#
- class scipy.integrate.RK23(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, vectorized=False, first_step=None, **extraneous)[source]#
3(2) 階顯式龍格-庫塔法。
這使用了 Bogacki-Shampine 公式對 [1]。誤差控制假設二階方法的準確性,但步驟是使用三階準確公式採取的(進行局部外推)。三次 Hermite 多項式用於密集輸出。
可應用於複數域。
- 參數:
- 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, optional
初始步長。預設值為
None
,表示演算法應自行選擇。- max_stepfloat, optional
允許的最大步長。預設值為 np.inf,即步長不受限制,僅由求解器決定。
- rtol, atolfloat 和 array_like, optional
相對和絕對容差。求解器保持局部誤差估計值小於
atol + rtol * abs(y)
。此處 rtol 控制相對精度(正確位數),而 atol 控制絕對精度(正確小數位數)。為了達到所需的 rtol,請將 atol 設置為小於可以從rtol * abs(y)
預期的最小值,以便 rtol 主導允許的誤差。如果 atol 大於rtol * abs(y)
,則不保證正確位數。相反地,為了達到所需的 atol,請設置 rtol,使rtol * abs(y)
始終小於 atol。如果 y 的組件具有不同的尺度,則通過傳遞形狀為 (n,) 的 array_like 作為 atol,可能有利於為不同的組件設置不同的 atol 值。 rtol 的預設值為 1e-3,atol 的預設值為 1e-6。- vectorizedbool, optional
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’ 進行 Jacobian 的有限差分近似,但會導致此求解器的執行速度變慢。
參考文獻
[1]P. Bogacki, L.F. Shampine, “A 3(2) Pair of Runge-Kutta Formulas”, Appl. Math. Lett. Vol. 2, No. 4. pp. 321-325, 1989.
- 屬性:
- nint
方程式數量。
- statusstring
求解器的目前狀態:‘running’、‘finished’ 或 ‘failed’。
- t_boundfloat
邊界時間。
- directionfloat
積分方向:+1 或 -1。
- tfloat
目前時間。
- yndarray
目前狀態。
- t_oldfloat
上一次時間。如果尚未執行任何步驟,則為 None。
- step_sizefloat
上次成功步驟的大小。如果尚未執行任何步驟,則為 None。
- nfevint
系統右側的評估次數。
- njevint
Jacobian 的評估次數。對於此求解器,始終為 0,因為它不使用 Jacobian。
- nluint
LU 分解的次數。對於此求解器,始終為 0。
方法
計算上一個成功步驟的局部內插值。
step
()執行一個積分步驟。