我用 Python 编写了一个 2d N 体模拟,它允许物体之间发生碰撞。
物体被建模为一个圆形,其面积与其质量成正比。每次模拟前进一个时间步长,我确定哪些物体具有重叠的半径,并用一个粒子替换它们(尊重动量守恒并将碰撞视为非弹性)。
这在 N<100 时效果很好,但对于更高的 NI(不是系统地,但取决于 sim 的初始条件)遇到一个奇怪的错误:粒子数 N 实际上增加了(并且很快超过了 Python 可以处理的最大整数值)。
我相信正在发生的事情是,在计算出物体的新位置之后,发生(至少)4 个物体相互重叠。6 对中的每一对都创建了一个新的 body,但我们也删除了 4 个 body,所以 N 增加了 os,我们有 6-4=2。但是这 6 个新物体的生成位置与原来的 4 个物体大致相同,所以现在我们有更多的重叠(N 现在可能增加(6 选择 2)-6=9 个物体)。因此,为什么 N 可以增长得非常快。
我怎样才能避免这个错误?
我唯一能想到的就是减少物体的半径以减少相互重叠的4个粒子的变化。但这并不能彻底解决问题。