scipy.integrate.OdeSolver

class scipy.integrate.OdeSolver(fun, t0, y0, t_bound, vectorized, support_complex=False)[源代码]

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. 如果求解器使用雅可比矩阵和LU分解,则它应跟踪雅可比求值的数量 (njev )和逻辑单元分解的数量 (nlu )。

  9. 按照惯例,用于计算雅可比的有限差分近似的函数计算不应计入 nfev ,因此使用 fun_single(self, t, y)fun_vectorized(self, t, y) 在计算雅可比的有限差分近似时。

参数
fun可调用

系统的右侧。调用签名为 fun(t, y) 。这里 t 是标量,ndarray有两个选项 y 。它可以具有形状(n,),然后 fun 必须返回形状为(n,)的ARRAY_LIKE。或者,可替换地,它可以具有形状(n,n_point),然后 fun 必须返回形状为(n,n_point)的ARRAY_LIKE(每列对应于 y )。在这两个选项之间的选择由以下因素决定 vectorized 参数(见下文)。

t0浮动

初始时间。

y0类似数组,形状(n,)

初始状态。

t_bound浮动

边界时间-积分不会超过它。它还决定了整合的方向。

vectorized布尔尔

是否 fun 是以矢量化的方式实现的。

support_complex布尔值,可选

是否应支持复杂域中的集成。通常由派生求解器类功能确定。默认值为False。

属性
n集成

方程式的数量。

status字符串

求解器的当前状态:“正在运行”、“已完成”或“失败”。

t_bound浮动

边界时间。

direction浮动

集成方向:+1或-1。

t浮动

当前时间。

yndarray

当前状态。

t_old浮动

上一次。如果还没有采取任何步骤,就不会有任何进展。

step_size浮动

上次成功步骤的大小。如果还没有采取任何步骤,就不会有任何进展。

nfev集成

系统的RHS评估数。

njev集成

雅可比求值的次数。

nlu集成

逻辑单元分解数。

方法:

dense_output \()

计算上一成功步骤中的局部插值。

step \()

执行一个集成步骤。