如何为 ODE 系统调用 Boost C++ odeint Runge-Kutta 积分器?

计算科学 数值分析 C++ 龙格库塔
2021-12-27 21:53:22

我想在如下所示的系统上使用 Boost C++ odeint Runge-Kutta 积分器:

x¨=A||x||3x

x是 3D 空间中的向量,所以基本上x(i,j,k)
x¨是它的二阶导数
||x||3是量级的三次方x
A是一个常数

我知道问题的初始条件,即x˙(t=0)x(t=0).

我已经在 odeint 文档中检查了这个示例,以及这里的完整代码示例显示了将 odeint 与单个 ODE 一起使用。但是我的问题必须分成6个ODE。

我可以对这样的系统(6 个 ODE)使用 odeint Runge Kutta 方法吗?如果可以,是否有任何示例可以帮助我解决问题?

1个回答

从理论上讲,当然,尽管出于以下几个原因我会警惕您的特定 ODE 系统:(1)当x=0,这将绊倒 Boost C++ 套件中的任何积分器,(2)基于它与原点邻域中已知的非 Lipschitz 函数的相似性,即使存在解决方案也不清楚。

实施您的系统应该很简单。将您的系统转换为一阶形式,然后按照 odeint 网站上的 Lorenz 系统吸引子示例为您的实现建模。