scypy python 模块中的 odeint() 如何工作?
How does odeint() from scypy python module work?
我是一名物理专业的学生,对以数值方式求解 ODE 很感兴趣。我通常使用 Runge–Kutta 方法在 C 中编写自己的求解器。
最近学了Python,用SciPy的odeint
函数求解ODE。但我担心函数算法是如何工作的,因为它不采用步长参数。那么,我怎样才能了解它是如何工作的呢?我怎么知道他们结果的精度是多少?
我咨询过this documentation,
但它并没有提供太多信息,我也不太理解他们描述的可选参数。
SciPy 具有三个用于集成 ODE 的模块:
scipy.integrate.odeint
,使用LSODA算法
scipy.integrate.ode
,支持四种不同的后端(LSODA、DoPri5、DoP853 和 VODE)。
scipy.integrate.solve_ivp
,它支持五个后端(LSODA、DoPri5、Bogacki–Shampine、Radau 和一种向后微分方法)。
请注意,在询问第一个模块时,您使用了第二个模块的文档。
All 这些求解器调整步长。
这意味着他们估计积分误差,例如,通过比较两个简单积分器的结果(它们智能地交织在一起以节省运行时间)。
然后使用此估计来调整步长,使估计误差低于由参数 rtol
和 atol
指定的用户定义阈值。
这些参数允许您控制精度。
我是一名物理专业的学生,对以数值方式求解 ODE 很感兴趣。我通常使用 Runge–Kutta 方法在 C 中编写自己的求解器。
最近学了Python,用SciPy的odeint
函数求解ODE。但我担心函数算法是如何工作的,因为它不采用步长参数。那么,我怎样才能了解它是如何工作的呢?我怎么知道他们结果的精度是多少?
我咨询过this documentation, 但它并没有提供太多信息,我也不太理解他们描述的可选参数。
SciPy 具有三个用于集成 ODE 的模块:
scipy.integrate.odeint
,使用LSODA算法scipy.integrate.ode
,支持四种不同的后端(LSODA、DoPri5、DoP853 和 VODE)。scipy.integrate.solve_ivp
,它支持五个后端(LSODA、DoPri5、Bogacki–Shampine、Radau 和一种向后微分方法)。
请注意,在询问第一个模块时,您使用了第二个模块的文档。
All 这些求解器调整步长。
这意味着他们估计积分误差,例如,通过比较两个简单积分器的结果(它们智能地交织在一起以节省运行时间)。
然后使用此估计来调整步长,使估计误差低于由参数 rtol
和 atol
指定的用户定义阈值。
这些参数允许您控制精度。