2014-10-14 3 views
0

파이썬에서 중력 N 바디 문제의 시뮬레이션을 시도하고 있습니다. 제 i 본체의 가속도 내 코드는 우리가 입자에 힘 불필요한 계산을 수행하지 않을되며, 여기에서이 형식 그러나N 개의 중력 몸체 시뮬레이션에서 중력의 비대칭 특성을 설명하는 방법

http://wiki.tomabel.org/index.php?title=Gravitational_N-body_Problem을 발견

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 

동일한 구조이며 입자 j로 인한 i는 입자 i에 의한 입자 j에 대한 힘의 음수가 될 것입니까? 프로그램을 빨리 실행하려면 어떻게해야할까요? 나는 어떻게 든 N × N 배열을 취해 반을 채우고 전치를 취할 생각을하고 있었지만 이것을하는 방법이 확실하지 않거나 더 좋은 방법이 있다면. 매우

감사

답변

1

나는이 같은 제안 : 내가하는 수 있습니다> 당신은 항상 J를 가정 할 수 있도록 동시에 두 i와 j 가속도를 업데이트 이런 식으로

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 

을 이중 계산을 피할 수 있습니다.

관련 문제