耦合谐振子的四阶龙格-库塔法

计算科学 龙格库塔
2021-12-10 09:17:22

我正在尝试编写一个 C 程序来从耦合弹簧系统中收集值:有一堵墙,通过一个弹簧连接到质量,然后这个质量通过另一个弹簧连接到第二个质量m1m2

我需要的值是两个质量的位置和它们的速度。

使用位置和速度的初始值,我打算使用 4 阶 Runge-Kutta 方法计算两个质量的运动。我已经成功地为位置做到了这一点,但我不知道如何为速度做到这一点。速度的微分方程为:

v˙1=ω12(x1R1)+ω22(x2x1wR2)v˙2=ω22(x2x1wR2)

其中是弹簧的静止长度,是位置,是宽度。方程是正确的;那不是问题。Rxw

我遇到的问题是,当两个 位置都变化时,我只是不知道如何表达速度的龙格-库塔算法,我是否在算法中同时增加它们?我要增加一个然后取平均值吗?x

3个回答

压力在正确的轨道上,但我会详细说明一下。

您正在求解一个耦合 ODE 系统,但您似乎将其视为两个方程的两个系统。您需要将它们组合起来,使您的系统看起来像:

(x˙1x˙2v˙1v˙2)=(v1v2ω12(x1R1)+ω22(x2x1wR2)ω22(x2x1wR2))

用 RK4 求解这个由四个 ODE 组成的系统将同时求解所有状态变量。位置和速度不需要单独处理(也不应该)。

由于您的系统是哈密顿系统,不涉及任何摩擦,您还可以使用 Newton-Stoermer-Verlet-Leapfrog(发明者更多,请参阅维基百科文章中提到的 Hairer 等人的论文)方法来获得具有合理物理的快速简单方法特性。这些所谓的辛积分器以同步的方式分别处理位置和速度。

你打算做的事情是不可能也不需要的。在 Runge-Kutta 中,您应该已经有了速度表达式。如果没有,您可以通过使用有限差分来近似位置相对于时间的一阶导数来计算速度。