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

2024-06-11 08:10:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python模拟引力N体问题。我对第i个物体加速度的代码与

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的力的负值吗?为了使程序运行得更快,我们将如何考虑这一点?我想用一个nxn数组,填充它的一半,然后进行转置,但不确定如何做,或者是否有更好的方法。在

非常感谢


Tags: 代码inforlenreturndefnp引力
1条回答
网友
1楼 · 发布于 2024-06-11 08:10:12

我建议这样做:

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>;i,这样可以避免重复计算。在

相关问题 更多 >