解决一阶ODE,其中包含另一个ODE(Python中的odeint / solve_ivp)

时间:2018-11-04 01:19:03

标签: python numpy ode odeint

我正尝试在Python中为以下形式的微分问题设置快速数值求解器:

Equations shown clearly as an image

其中r是一些常数。

我想在某个时间段t上积分A。但是,由于dA / dt方程包含另一个变量B本身使情况复杂化,该变量本身由ODE dB / dt描述。 B实际上是一个向量,但是我已经简化了表达式以尝试更清楚地突出我的问题。

我目前有一个使用手动Euler方法的解决方案:即计算dB / dt(然后使用B = B_previous + dB/dt * dt)并使用固定的时间步长dt手动步进。但是,这是缓慢且不可靠的。我想在Numpy中使用内置的ODE求解器会好得多,但是由于我要解决的问题具有耦合性质,因此我不确定这是否可能?

请问是否可以使用Numpy odeintsolve_ivp?如果是这样,任何人都可以建议任何建议!谢谢。

1 个答案:

答案 0 :(得分:1)

您拥有的是耦合微分方程,使用Runge kutta,Eulers和许多其他方法可以解决这些问题。您可以使用以下示例来指导您编写python代码:

https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html

请记住,并非所有方程都可以使用ODEINT求解。如果您的ODE是“硬” ODE,则必须精确选择算法。刚性ODE的定义尚未完全定义,但通常是在ODE中因变量具有较大或非整数幂的情况下出现的。

但是,解决耦合ODE的第一步是使用标准方法。如果它们不起作用,请查看其他内容。