這樣做的原因代碼是找到它需要用於與2個行星(顆粒)的行星系統具有彼此之間的近距離接觸的時間。然而,我想解決這個問題的時間是一個有5個粒子的行星系統。這將打印在最後一行print(sim.t)
。我在這裏有一段代碼,它可以發現兩個粒子彼此之間有密切的接觸。 5粒子呢?
http://rebound.readthedocs.io/en/latest/examples.html這裏是關於使用REBOUND的一些文檔,您可以在這裏找到我所做的一些聲明的最佳解釋。
sim = setupSimulation()
sim.exit_min_distance = 0.01
Noutputs = 10000
year = 2.*np.pi
times = np.linspace(0.,10E+9.*year, Noutputs)
distances = np.zeros(Noutputs)
ps = sim.particles
try:
for i,time in enumerate(times):
sim.integrate(time)
dp = ps[1] - ps[2]
distances[i] = np.sqrt(dp.x*dp.x+dp.y*dp.y+dp.z*dp.z)
except rebound.Encounter as error:
print(error)
print(sim.t)
第2行定義了這兩個顆粒之間的親密接觸(達到該值時模擬將停止)。
線11取入顆粒的座標的差,如果< = 0.01,打印有一個近距離接觸。
我正沿着一個if-then語句的思路:
if ps[1] - ps[2] <= .01:
dp = ps[1] - ps[2]
else ps[2] - ps[3] <= .01:
dp = ps[2] - ps[3]
等等...
我想,以確保這個工程之前,我運行它僅僅是因爲模擬時間爲10e + 9年,只能在本地超級計算機上運行,以在合理的時間內獲得結果。
你肯定不應該是'ps的[0]'?什麼是'sim'?什麼類型是'p'? – Eric
'ps [0]'是顆粒1-5正在軌道運行的恆星。我正在使用稱爲反彈的N體積分器,其中'sim'就是模擬本身。你想看看被遺漏的代碼嗎?在此塊之前,我使用sim.add()六次來添加一個星形和五個旋轉物體。我不完全確定你最後一個問題的含義。 – dlsj
如果沒有比您提供的更多信息,我們可能無法回答這個問題。首先,你真的需要描述你正在使用的模擬庫(一個鏈接到它的文檔將是一個好的開始)。如果不知道'sim'是什麼,我們就不可能知道你所顯示的代碼中發生了什麼。這也不是很清楚你要求什麼。當您使用5個粒子運行模擬器時,您期望什麼輸出(以及它與僅有兩個粒子有何不同)? – Blckknght