我在Python中编写了一个二维N体仿真,它允许在物体之间发生碰撞。
将一个物体建模为一个圆,其面积与其质量成正比。每当sim前进一个时间步时,我会识别哪些物体具有重叠的半径,并用一个粒子代替它们(尊重动量守恒并将碰撞视为无弹性)。
这适用于N <100但是对于更高的NI遇到(不是系统地,但取决于sim的初始条件)一个奇怪的错误:粒子数N实际增加(并且迅速超过Python的最大整数值)处理)。
我相信所发生的事情是,在计算出新的身体位置后,发生(至少)4个身体相互重叠。 6对中的每一对都创建了一个新体,但我们也删除了4个体,所以N增加了os,我们有6-4 = 2。但是这6个新体的生成位置与原来的4个体大致相同,所以现在我们有更多的重叠(N现在可以增加(6选2)-6 = 9个体)。因此,为什么N能够快速增长。
如何避免此错误?
我唯一能想到的是减少物体的半径以减少相互重叠的4个粒子的变化。但这并没有明确解决问题。