scipy.integrate.OdeSolver¶
- class scipy.integrate.OdeSolver(fun, t0, y0, t_bound, vectorized, support_complex=False)[源代码]¶
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 。
如果求解器使用雅可比矩阵和LU分解,则它应跟踪雅可比求值的数量 (njev )和逻辑单元分解的数量 (nlu )。
按照惯例,用于计算雅可比的有限差分近似的函数计算不应计入 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
\()执行一个集成步骤。