小编Hei*_*dar的帖子

来自拉格朗日的ODE求解器/ C++中的变分方法

我有一个普遍的问题,我将在一个更具体的情况下说.

如果想要找到双摆的动力学,可以在数学上推导出运动方程,重写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中数值计算的形式.有任何想法吗?

c++ simulation physics symbolic-math odeint

5
推荐指数
1
解决办法
368
查看次数

标签 统计

c++ ×1

odeint ×1

physics ×1

simulation ×1

symbolic-math ×1