gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:36 25 4
gpt4 key购买 nike

我有一个一般性问题,我将在更具体的情况下提出这个问题。

如果想找到双摆的动力学,可以从数学上推导出运动方程,重写 ODE 使其具有对数值计算有用的特殊形式,并使用 C++ 中的 odeint 求解 ODE(参见堆栈溢出的例子 https://stackoverflow.com/a/30582741 )。

现在假设我们想对 n 个耦合摆(n 在运行时已知)做同样的事情。这需要我们写一个所谓的拉格朗日函数(动能 - 势能),这个函数的不同导数将是我们需要求解的 ODE。此外,必须以适合 odeint 的形式重写这些 ODE。这对于一般人来说很难用手完成。

在像 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 在您的情况下是微不足道的。但是,您仍然需要获得一个衍生物。

关于c++ - 来自 C++ 中拉格朗日/变分法的 ODE 求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com