RK45#
- class scipy.integrate.RK45(fun, t0, y0, t_bound, max_step=inf, rtol=0.001, atol=1e-06, vectorized=False, first_step=None, **extraneous)[原始碼]#
顯式五(四)階龍格-庫塔法。
此方法使用 Dormand-Prince 公式組 [1]。誤差控制假設四階方法精度,但步長是使用五階精確公式計算(進行局部外推)。四次插值多項式用於密集輸出 [2]。
可應用於複數域。
- 參數:
- fun可呼叫物件
系統的右側函數。呼叫簽名為
fun(t, y)
。此處t
是一個純量,而 ndarrayy
有兩個選項:它可以是形狀 (n,);則fun
必須傳回形狀為 (n,) 的類陣列 (array_like)。或者它可以是形狀 (n, k);則fun
必須傳回形狀為 (n, k) 的類陣列,即每一列對應於y
中的單一列。兩個選項之間的選擇由 vectorized 參數決定(請參閱下方)。- t0浮點數
初始時間。
- y0類陣列,形狀 (n,)
初始狀態。
- t_bound浮點數
邊界時間 - 積分不會超出此時間繼續進行。它也決定了積分的方向。
- first_step浮點數或 None,選用
初始步長。預設值為
None
,表示演算法應自行選擇。- max_step浮點數,選用
最大允許步長。預設值為 np.inf,即步長不受限制,僅由求解器決定。
- rtol, atol浮點數和類陣列,選用
相對和絕對容差。求解器保持局部誤差估計值小於
atol + rtol * abs(y)
。此處 rtol 控制相對精度(正確位數),而 atol 控制絕對精度(正確小數位數)。為了達到所需的 rtol,請將 atol 設定為小於從rtol * abs(y)
預期得到的最小值,以便 rtol 主導允許的誤差。如果 atol 大於rtol * abs(y)
,則不保證正確位數。相反地,為了達到所需的 atol,請設定 rtol,使rtol * abs(y)
始終小於 atol。如果 y 的分量具有不同的尺度,則為不同的分量設定不同的 atol 值可能是有益的,方法是傳遞形狀為 (n,) 的類陣列作為 atol。預設值為 rtol 的 1e-3 和 atol 的 1e-6。- vectorized布林值,選用
是否以向量化方式實作 fun。預設值為 False。
參考文獻
[1]J. R. Dormand, P. J. Prince, “A family of embedded Runge-Kutta formulae”, Journal of Computational and Applied Mathematics, Vol. 6, No. 1, pp. 19-26, 1980.
[2]L. W. Shampine, “Some Practical Runge-Kutta Formulas”, Mathematics of Computation,, Vol. 46, No. 173, pp. 135-150, 1986.
- 屬性:
- n整數
方程式數量。
- status字串
求解器的目前狀態:‘running’、‘finished’ 或 ‘failed’。
- t_bound浮點數
邊界時間。
- direction浮點數
積分方向:+1 或 -1。
- t浮點數
目前時間。
- yndarray
目前狀態。
- t_old浮點數
先前的時間。如果尚未執行任何步驟,則為 None。
- step_size浮點數
上一個成功步驟的大小。如果尚未執行任何步驟,則為 None。
- nfev整數
系統右側函數的評估次數。
- njev整數
雅可比矩陣的評估次數。對於此求解器始終為 0,因為它不使用雅可比矩陣。
- nlu整數
LU 分解次數。對於此求解器始終為 0。
方法
計算上一個成功步驟的局部內插函數。
step
()執行一個積分步驟。