Astronomi simülasyonlarına entegre olmanın doğru yolu nedir?


15

Bir sistemdeki (veya bu konudaki herhangi bir nesnenin) gezegenlerin hareketini simüle etmek için Newton fiziğini kullanması gereken basit bir astronomi simülatörü oluşturuyorum. Tüm cisimler, bir Öklid düzleminde, konum, hız, kütle, yarıçap ve ortaya çıkan kuvvet gibi özelliklere sahip dairelerdir.

Evreni, genellikle birkaç milisaniye gibi küçük zaman adımlarında güncellemek istiyorum, ancak konumdaki değişiklikleri nasıl doğru bir şekilde hesaplayacağımı bilmiyorum.

Kuvvet basittir: fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2).

Ama oradan nasıl devam ederim?

Bunu yapabilirdim:

a = Fr/body.m
v += a*dt
position += v*dt

Ancak bu elbette yanlış olur. Belki pozisyon hesaplamasında faktör olarak 0.5 eklesem?


Yorum yapmak çok komik: Gerçekten "bitkiler" hareketini simüle etmek için yaygın bir astronomik sorun ;-)
Wolfgang Bangerth

Yanıtlar:


17

Aslında cevabı buldunuz - 0.5 faktörüne gerek yok.

Esasen iki boyutlu birinci dereceden ODE sisteminiz var: burada muhtemelenmdışında her şey zamanın bir fonksiyonudurve noktalar zaman türevlerini gösterir. Bunların basit, ileri Euler-esque birinci dereceden farkını yaparsanız, x n + 1 -xn

x˙=vv˙=Fm,
m ya da X, n+1
xn+1-xnΔt=vnvn+1-vnΔt=Fnm,
Burada zaman testininile indeksliyorum.
xn+1=xn+Δtvnvn+1=vn+ΔtFnm.
n

tntn+1tn+1/2x0v1/2

xn+1=xn+Δtvn+1/2vn+1/2=vn-1/2+ΔtFnm

v1/2v0

ω=GMr3,
Mr

Hey, neden 0.5faktöre ihtiyacım olmadığını açıklayabilir misin ? n-1/2dtSaniyeler önce hızı almakla aynı şeyi yapıyor gibi görünüyor , bu da önerdiğiniz gibi görünüyor.
jcora

(n1)vnvn+1vn0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.