두 개의 몸체에 대한 운동 방정식을 해결할 수있는 휴 용 코드가 있지만 그 결과 입자가 돌아가고 어디에서 오류가 발생하는지 찾을 수 없습니다.Verlet에서 Python으로 입자가 누설 됨
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
DIM = 2
N = 2
ITER = 1000
def acc(r, v, a):
for i in range(N - 1):
for j in range(i+1, N):
r2 = 0.0
rij = [0.0, 0.0]
for k in range(DIM):
rij[k] = r[i][k] - r[j][k]
r2 += rij[k] * rij[k]
fg = -1.0 /np.power(np.sqrt(r2), 3)
for k in range(DIM):
a[i][k] += fg * rij[k]
a[j][k] -= fg * rij[k]
return a
def verlet(r, v, a, dt):
for i in range(N):
for k in range(DIM):
v[i][k] += 0.5 * a[i][k] * dt
r[i][k] += v[i][k] * dt
a = acc(r, v, a)
for i in range(N):
for k in range(DIM):
v[i][k] += 0.5 * a[i][k] * dt
return [r,v]
r = np.zeros((N, DIM))
v = np.zeros((N ,DIM))
a = np.zeros((N, DIM))
r[0] = [0.5,0.0]
v[0] = [0.0,1.0]
r[1] = [-0.5,0.0]
v[1] = [0.0,-1.0]
dt = 0.01
plt.ion()
for i in range(ITER):
r,v = verlet(r, v, a, dt)
plt.scatter(r[0][0], r[0][1])
plt.scatter(r[1][0], r[1][1],color='yellow')
plt.pause(0.00005)
그리고 시간이 지남에 축적되지 않습니다 velocity Verlet
Welcome to StackOverflow. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. 코드를 게시하고 정확하게 문제를 설명하기 전까지는 효과적으로 귀하를 도울 수 없습니다. 특히 실패한 출력, 디버깅 추적 및 문제에 대한 분석 또는 참조를 제공하십시오. – Prune
안녕하세요. 사실 "코드 오류"입니다. 오류는 로직에 있습니다 (2 개의 입자가 가속되어 사라지지 않아야하기 때문에). 누군가 찾을 수 있다면 나는 호핑을했다. – 0xhfff