【问题标题】:How to account for the antisymmetric nature of the gravitational force in a simulation of N gravitational bodies如何在 N 个引力体的模拟中解释引力的反对称性质
【发布时间】:2014-10-14 10:00:05
【问题描述】:

我正在尝试在 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 的作用力的负数吗?为了让程序运行得更快,我们将如何考虑这一点?我正在考虑以某种方式获取一个 N x N 数组,填充其中的一半,然后进行转置,但不确定如何执行此操作,或者是否有更好的方法。

非常感谢

【问题讨论】:

    标签: python gravity


    【解决方案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 > i,从而避免重复计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2019-02-05
      • 2019-03-04
      相关资源
      最近更新 更多