我在拉格朗日力学中遇到了以下微分方程组。您能否建议一种数值方法,以及有关如何解决它的相关链接和参考,以及 C 中的实现(如果可能)另外,Matlab 或 Mathematica 上是否有更短的实现?
其中 或 是时间导数,双点表示时间的二阶导数。
我在拉格朗日力学中遇到了以下微分方程组。您能否建议一种数值方法,以及有关如何解决它的相关链接和参考,以及 C 中的实现(如果可能)另外,Matlab 或 Mathematica 上是否有更短的实现?
其中 或 是时间导数,双点表示时间的二阶导数。
为什么要手动实现?Matlab、Maple 和 Mathematica 都内置了数值求解微分方程的工具,它们使用的方法比您在有限时间内自己实现的方法要好得多。在 Matlab 中,您想查看ode45。在 Maple 中它被称为dsolve(带有 'numeric' 选项集),在 Mathematica 中它是NDSolve。
您可以使用Runge-Kutta 方法对这个系统进行数值求解,首先通过执行以下替换技巧将您的二阶方程重写为一阶系统:
现在您可以使用MATLAB
'sode45
或ode23
来解决它,如果您想在 C 上实现该方法,我相信互联网上有很多 pkgs 可用,例如this。
诸如 (4,5) 之类的龙格-库塔方法也可以在GNU 科学库(用 C 语言编写)中找到。它们还包括自适应时间步长。