我试图在Python中为一个微分问题设置一个快速数值求解器:
其中r
是某个常数。在
我想对一段时间内的,感兴趣的t积分。然而,由于dA/dt方程包含另一个变量B,这个变量本身用ODE dB/dt来描述,这就变得复杂了。B实际上是一个向量,但我已经简化了表达式,试图更清楚地突出我的问题。在
我目前有一个使用手动Euler方法的解决方案:即计算dB/dt(然后使用B = B_previous + dB/dt * dt
),并使用固定的时间步长dt
手动执行。然而,这是缓慢和不可靠的。我想在Numpy中使用内置的ODE解算器会好得多,但考虑到我试图解决的问题的耦合性质,我不确定这是否可行?在
这可以用Numpyodeint
或solve_ivp
来实现吗?如果是这样的话,有谁能给我一些建议吗!谢谢。在
你得到的是一个耦合微分方程,它是使用龙格库塔、欧拉斯和许多其他方法求解的标准方程。您可以使用此示例来指导您编写python代码:
https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html
请记住,并不是所有的方程都可以用ODEINT求解。如果你的ODE是一个“僵硬”的ODE,那么你必须精确地选择你的算法。刚性常微分方程的定义并不是完全定义的,但是如果你的常微分方程中因变量的幂次较大或非整数次幂,则通常会出现这种情况。在
解决耦合ODE的第一步是使用标准方法。如果它们不起作用,那就去调查别的东西。在
相关问题 更多 >
编程相关推荐