scipy.integrate.

OdeSolver#

class scipy.integrate.OdeSolver(fun, t0, y0, t_bound, vectorized, support_complex=False)[source]#

ODE 求解器的基底類別。

為了實作新的求解器,您需要遵循以下指南

  1. 建構子必須接受基底類別中提供的參數(如下所列),以及求解器特定的任何其他參數。

  2. 建構子必須接受任意的額外參數 **extraneous,但要使用 common.warn_extraneous 函數警告這些參數是不相關的。不要將這些參數傳遞給基底類別。

  3. 求解器必須實作私有方法 _step_impl(self),該方法將求解器向前推進一步。它必須返回元組 (success, message),其中 success 是一個布林值,指示步驟是否成功,而 message 是一個字串,其中包含步驟失敗時的失敗描述,否則為 None。

  4. 求解器必須實作私有方法 _dense_output_impl(self),該方法返回一個 DenseOutput 物件,涵蓋最後成功的步驟。

  5. 求解器必須具有在「屬性」章節中列出的屬性。請注意,t_oldstep_size 會自動更新。

  6. 使用 fun(self, t, y) 方法進行系統 rhs 評估,這樣函數評估的次數 (nfev) 將會自動追蹤。

  7. 為了方便起見,基底類別提供了 fun_single(self, t, y)fun_vectorized(self, t, y),分別用於以非向量化和向量化方式評估 rhs(無論建構子中的 fun 如何實作)。這些呼叫不會增加 nfev

  8. 如果求解器使用 Jacobian 矩陣和 LU 分解,則應追蹤 Jacobian 評估的次數 (njev) 和 LU 分解的次數 (nlu)。

  9. 依照慣例,用於計算 Jacobian 的有限差分近似的函數評估不應計入 nfev,因此在計算 Jacobian 的有限差分近似時,請使用 fun_single(self, t, y)fun_vectorized(self, t, y)

參數:
fun可呼叫物件

系統的右側:時間 t 時狀態 y 的時間導數。呼叫簽名為 fun(t, y),其中 t 是純量,而 ylen(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 分解的次數。

方法

dense_output()

計算最後成功步驟的局部內插器。

step()

執行一個積分步驟。