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