如何解释N引力体模拟中引力的反对称性

时间:2014-10-14 10:00:05

标签: python gravity

我正在尝试模拟Python中的引力N体问题。我在ith体上加速的代码与

具有相同的结构
def acc(r,m,eps):
a = np.zeros((len(r),3))
for i in range(len(r)):
    for j in range(len(r)):
        ra2 = ((r[i,:]-r[j,:])**2).sum()
        if (i != j):
            a[i,:] += -(r[i,:]-r[j,:])*m[j]/(ra2**1.5) 
return a # return acceleration

可在此处找到http://wiki.tomabel.org/index.php?title=Gravitational_N-body_Problem

然而,在这种格式中,我们不会进行不必要的计算,因为粒子j对粒子i的作用力只会是由于粒子i对粒子j的力的负面影响吗?为了让程序运行得更快,我们如何考虑这一点?我想某种方式拿一个N×N阵列,填充一半,然后进行转置,但我不确定如何做到这一点,或者是否有更好的方法。

非常感谢

1 个答案:

答案 0 :(得分:1)

我会建议这样的事情:

def acc(r,m,eps):
    a = np.zeros((len(r),3))
    for i in range(len(r))[:-1]:
        for j in range(len(r))[i+1:]:
            ra2 = ((r[i,:]-r[j,:])**2).sum()
            f= -(r[i,:]-r[j,:])*m[j]/(ra2**1.5) 
            a[i,:] += f
            a[j,:] += -f
    return a # return acceleration

通过这种方式,您可以同时更新i和j加速度,因此您可以始终假设j>我可以让你避免重复计算。