Qual é a maneira correta de integrar em simulações de astronomia?

15

Estou criando um simulador simples de astronomia que deve usar a física newtoniana para simular o movimento de planetas em um sistema (ou qualquer objeto, por sinal). Todos os corpos são círculos em um plano euclidiano, que possuem propriedades como posição, velocidade, massa, raio e a força resultante.

Quero atualizar o universo em pequenos intervalos de tempo, geralmente alguns milissegundos, mas não sei como calcular corretamente as alterações de posição.

A força é simples: fr = sum(G * body.m * bodyi.m / dist(body, bodyi)^2).

Mas como eu continuo a partir daí?

Eu poderia fazer isso:

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

Mas isso seria, obviamente, falso. Talvez se eu adicionasse 0,5 como um fator no cálculo da posição?

jcora
fonte
É muito engraçado para não comentário: É realmente um problema astronômico comum para simular o movimento de "plantas" ;-)
Wolfgang Bangerth

Respostas:

17

Você basicamente tem a resposta - não é necessário o fator 0,5.

Essencialmente, você possui um sistema bidimensional de EDOs de primeira ordem: onde tudo é função do tempo, exceto presumivelmentem, e pontos indicam derivadas do tempo. Se você fizer uma diferenciação simples de primeira ordem no estilo Euler avançado, encontrará x n + 1 -xn

x˙=vv˙=Fm,
m ou xn+1
xn+1 1-xnΔt=vnvn+1 1-vnΔt=Fnm,
xn+1 1=xn+Δtvnvn+1 1=vn+ΔtFnm.
n

tntn+1 1tn+1 1/2x0 0v1 1/2

xn+1 1=xn+Δtvn+1 1/2vn+1 1/2=vn-1 1/2+ΔtFnm
para integrar adiante no tempo. Isso é conhecido como método saltador . Com isso, seu sistema conserva uma espécie de energia e é menos provável que as órbitas voem para o infinito ou algo parecido devido ao crescimento exponencial do erro de arredondamento.

O único problema é como obter v1 1/2, já que provavelmente você começa com v0 0. Lá, você deve usar um esquema tão preciso quanto você está escrevendo, sendo o Runge-Kutta de quarta ordem uma escolha popular. Pode ser instável a longo prazo, mas há tantos erros que você introduzirá em meio intervalo de tempo, e esse erro será mantido pequeno posteriormente pelo esquema de salto.

Finalmente, essa resposta se aplica a qualquer sim geral de gravidade newtoniana. Se você realmente deseja círculos perfeitos , como mencionado na passagem da pergunta, não os conseguirá, exceto em um sistema idealizado no qual os planetas não interagem entre si e as condições iniciais são escolhidas da maneira certa. Se for esse o caso, você não precisa se integrar, pois a velocidade angular (radianos por unidade de tempo) de um objeto é simplesmente

ω=GMr3,
Onde M é a massa do objeto central e ré o raio da órbita. Isso pode ser usado para testar a precisão da sua simulação.

fonte
Ei, você pode explicar por que não preciso do 0.5fator? Parece estar fazendo a mesma coisa que tomar a velocidade n-1/2dtsegundos atrás, o que parece estar sugerindo.
Jcora #
Isso seria o mesmo se a velocidade em (n-1 1) foi 0. O que você deseja é uma estimativa de primeira ordem da média de vn e vn+1 1 (o último que você não conhece), não a média de vn e 0 0.