求解 first-order ODE,其中包含另一个 ODE(odeint / solve_ivp in Python)
Solving first-order ODE, which contains another ODE (odeint / solve_ivp in Python)
我正尝试在 Python 中针对以下形式的微分问题设置一个快速数值求解器:

其中 r
是某个常数。
我想在一段时间内对 A 进行积分,t 感兴趣。然而,由于 dA/dt 方程包含另一个变量 B,它本身由 ODE dB/dt 描述,所以这很复杂。 B 实际上是一个向量,但我简化了表达式以尝试更清楚地突出我的问题。
我目前有一个使用手动 Euler 方法的解决方案:即计算 dB/dt(然后使用 B = B_previous + dB/dt * dt
)并使用固定时间步长 dt
手动步进。然而,这是缓慢且不可靠的。我想在 Numpy 中使用 built-in ODE 求解器会好得多,但考虑到我要解决的问题的耦合性质,我不确定这是否可能?
这可以使用 Numpy odeint
或 solve_ivp
吗?如果是这样,任何人都可以提出任何建议!谢谢。
你得到的是一个耦合微分方程,它是使用龙格库塔、欧拉和许多其他方法求解的标准方法。您可以使用此示例来指导您编写 python 代码:
https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html
请记住,并非所有方程都可以用 ODEINT 求解。如果您的 ODE 是 "stiff" ODE,那么您将不得不精确地选择您的算法。刚性 ODE 的定义尚未完全定义,但如果您的 ODE 中的因变量具有大幂或非整数幂,它们通常会出现。
求解耦合 ODE 的第一步是使用标准方法。如果它们不起作用,请查看其他内容。
我正尝试在 Python 中针对以下形式的微分问题设置一个快速数值求解器:
其中 r
是某个常数。
我想在一段时间内对 A 进行积分,t 感兴趣。然而,由于 dA/dt 方程包含另一个变量 B,它本身由 ODE dB/dt 描述,所以这很复杂。 B 实际上是一个向量,但我简化了表达式以尝试更清楚地突出我的问题。
我目前有一个使用手动 Euler 方法的解决方案:即计算 dB/dt(然后使用 B = B_previous + dB/dt * dt
)并使用固定时间步长 dt
手动步进。然而,这是缓慢且不可靠的。我想在 Numpy 中使用 built-in ODE 求解器会好得多,但考虑到我要解决的问题的耦合性质,我不确定这是否可能?
这可以使用 Numpy odeint
或 solve_ivp
吗?如果是这样,任何人都可以提出任何建议!谢谢。
你得到的是一个耦合微分方程,它是使用龙格库塔、欧拉和许多其他方法求解的标准方法。您可以使用此示例来指导您编写 python 代码:
https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html
请记住,并非所有方程都可以用 ODEINT 求解。如果您的 ODE 是 "stiff" ODE,那么您将不得不精确地选择您的算法。刚性 ODE 的定义尚未完全定义,但如果您的 ODE 中的因变量具有大幂或非整数幂,它们通常会出现。
求解耦合 ODE 的第一步是使用标准方法。如果它们不起作用,请查看其他内容。