Hei*_*dar 5 c++ simulation physics symbolic-math odeint
我有一个普遍的问题,我将在一个更具体的情况下说.
如果想要找到双摆的动力学,可以在数学上推导出运动方程,重写ODE以具有对数值计算有用的特殊形式,并使用c ++中的odeint来解决ODE(参见此示例)在堆栈溢出/sf/answers/2140791901/).
现在想象一下我们想对n个耦合摆(n在运行时已知)做同样的事情.这需要我们写一个所谓的拉格朗日(动能 - 势能),这个函数的不同衍生物将是我们需要解决的ODE.此外,这些ODE必须以适合odeint的形式重写.一般来说,这很难用手去做.
在像Mathematica和Maple这样的程序中,这实际上非常简单.人们可以明确地从拉格朗日求出所需的ODE,并且ODE求解器不需要我们将方程放在任何特殊形式中(参见mathematica中的示例https://mathematica.stackexchange.com/a/84279).
是否有可能在c ++中做这样的事情而不会经历太多麻烦?
潜在方法:
一种可能的方法是使用c ++包ginac.这可以帮助我们分析地推导出ODE.但我不知道如何将来自ginac的表达式重写为适合odeint中数值计算的形式.有任何想法吗?
琐碎惯性项的帮助在于您只需要计算 dV/dq 而不是 dT/dp。odeint 提供了辛积分器的一个版本,它只期望 dV/dq 并假设 dT/dp 在您的情况下是微不足道的。但是,您仍然需要获得衍生品。