OdeSolver#
- class scipy.integrate.OdeSolver(fun, t0, y0, t_bound, vectorized, support_complex=False)[source]#
ODE 求解器的基底類別。
為了實作新的求解器,您需要遵循以下指南
建構子必須接受基底類別中提供的參數(如下所列),以及求解器特定的任何其他參數。
建構子必須接受任意的額外參數
**extraneous
,但要使用 common.warn_extraneous 函數警告這些參數是不相關的。不要將這些參數傳遞給基底類別。求解器必須實作私有方法 _step_impl(self),該方法將求解器向前推進一步。它必須返回元組
(success, message)
,其中success
是一個布林值,指示步驟是否成功,而message
是一個字串,其中包含步驟失敗時的失敗描述,否則為 None。求解器必須實作私有方法 _dense_output_impl(self),該方法返回一個
DenseOutput
物件,涵蓋最後成功的步驟。求解器必須具有在「屬性」章節中列出的屬性。請注意,
t_old
和step_size
會自動更新。使用 fun(self, t, y) 方法進行系統 rhs 評估,這樣函數評估的次數 (nfev) 將會自動追蹤。
為了方便起見,基底類別提供了 fun_single(self, t, y) 和 fun_vectorized(self, t, y),分別用於以非向量化和向量化方式評估 rhs(無論建構子中的 fun 如何實作)。這些呼叫不會增加 nfev。
如果求解器使用 Jacobian 矩陣和 LU 分解,則應追蹤 Jacobian 評估的次數 (njev) 和 LU 分解的次數 (nlu)。
依照慣例,用於計算 Jacobian 的有限差分近似的函數評估不應計入 nfev,因此在計算 Jacobian 的有限差分近似時,請使用 fun_single(self, t, y) 或 fun_vectorized(self, t, y)。
- 參數:
- fun可呼叫物件
系統的右側:時間
t
時狀態y
的時間導數。呼叫簽名為fun(t, y)
,其中t
是純量,而y
是len(y) = len(y0)
的 ndarray。fun
必須返回與y
相同形狀的陣列。有關更多資訊,請參閱 vectorized。- t0浮點數
初始時間。
- y0類陣列, 形狀 (n,)
初始狀態。
- t_bound浮點數
邊界時間 — 積分不會超過此時間繼續進行。它也決定了積分的方向。
- vectorized布林值
是否可以向量化方式呼叫 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 進行有限差分近似,但會導致其他方法的執行速度變慢。在某些情況下(例如,小的len(y0)
),也可能導致 ‘Radau’ 和 ‘BDF’ 的整體執行速度變慢。- support_complex布林值, 可選
是否應支援在複數域中進行積分。通常由衍生求解器類別的功能決定。預設值為 False。
- 屬性:
- n整數
方程式的數量。
- status字串
求解器的目前狀態:‘running’、‘finished’ 或 ‘failed’。
- t_bound浮點數
邊界時間。
- direction浮點數
積分方向:+1 或 -1。
- t浮點數
目前時間。
- yndarray
目前狀態。
- t_old浮點數
先前的時間。如果尚未執行任何步驟,則為 None。
- step_size浮點數
最後成功步驟的大小。如果尚未執行任何步驟,則為 None。
- nfev整數
系統 rhs 評估的次數。
- njev整數
Jacobian 評估的次數。
- nlu整數
LU 分解的次數。
方法
計算最後成功步驟的局部內插器。
step
()執行一個積分步驟。