Numéricos: Como renormalizo o seguinte ODE

9

Esta pergunta é mais sobre como resolver um problema numericamente.

Em um pequeno projeto, eu queria simular o movimento coorbital de Janus e Epimetheus. Este é basicamente um problema de três corpos. Eu escolhi Saturno para ser corrigido na origem, sejam e os vetores de localização de janus e epimetheus, respectivamente. Como o efeito ocorre quando Janus e Epimetheus estão muito próximos, escolhi coordenadas relativas para uma melhor resolução, ou seja, e . Agora eu recebo as seguintes equações de movimento:r 2 r = r 1 - r 2 R = r 1 + r 2r1r2r=r1r2R=r1+r2

d2dt2(Rr)=G(m2±m1)RR34MG(r+R(r+R)3rR(rR)3)

onde mi corresponde às massas das luas, M é a massa de Saturno e G a constante gravitacional. O problema surge quando tento resolver isso numericamente. É preciso lidar com valores de magnitudes completamente diferentes, isto é, Me28 e mie17 . E r , R estão nas regiões de 0 a 150.000.

Para ser sincero, não tenho certeza se este é o fórum para discutir esses problemas numéricos.

Mais Informações:

O código está escrito no Matlab e eu uso um solucionador de ODE padrão para obter o resultado. No entanto, isso está quebrando porque o tamanho da etapa não pode ser reduzido com precisão da máquina. (Acho que isso não é surpreendente, porque é preciso lidar com as ordens de magnitude já mencionadas).

GertVdE
fonte
2
Você está executando esta simulação em unidades SI? No mínimo, você deve dividir tudo por algum fator de , para poder eliminar algumas ordens de magnitude. Gm2
Oi, eu sou esse, mas ainda não está funcionando ... Os mesmos problemas ocorrem como antes. :(
Você precisa definir sua unidade de massa como uma das massas da lua e suas unidades de comprimento / tempo para definir as coisas como 1. Nada deve ser menor que 1/100 se você a escrever bem. Não há necessidade de um solucionador de balcão. Escreva o código para fazer isso sozinho, onde você controla o tamanho da etapa. Quebras no tamanho da etapa com esses tipos de potenciais podem ocorrer em colisões, onde o solucionador tentará reduzir o tamanho da etapa até a convergência e, na colisão, não há convergência. Você precisa ter certeza de que as órbitas não são colineares; portanto, é necessário visualizar a simulação. Você não pode obter uma resposta como está.
Ron Maimon
11
Por favor, evite abreviações no título. DGL = Differentialgleichung?
Qual solucionador de ODE padrão você está usando?
Geoff Oxberry 29/03/2012

Respostas:

2

Sua abordagem atual arruina a estabilidade numérica; na verdade, você provavelmente perde a resolução dessa maneira.

Tome como coordenadas para cada satélite suas variáveis ​​Kepler e o ângulo do plano que contém a posição do satélite, a velocidade e a origem. As equações diferenciais na ausência de interação entre os satélites são então trivialmente simples, e somente a interação se torna um pouco complicada. Como a interação é pequena se os satélites estiverem distantes, a dinâmica resultante deve ser numericamente estável.

Arnold Neumaier
fonte
2

Em vez de usar um solucionador de ODE "clássico" (rígido), você pode usar algoritmos dedicados para integração numérica geométrica. Veja, por exemplo, este livro e os códigos GNI que você pode encontrar no site da Ernst Hairer .

GertVdE
fonte
0

Que tal se você tiver três etapas na sua simulação:

  1. atualize a posição de Janus calculando a força de Janus - Saturno.
  2. atualize a posição de Epimeteu calculando a força de Epimeteu - Saturno.
  3. atualize a posição de Janus e Epimetheus calculando a força de Janus - Epimetheus.

Possivelmente usando timesteps mais finos para o # 3.

Não tenho certeza se isso vai ajudar. Suponho que o verdadeiro problema é que a magnitude da força é diferente no caso lua - lua e lua - Saturno, exceto se as luas estiverem próximas?

Alternativamente:

  1. se as luas se fecharem, calcule uma força aproximada de luas - Saturno usando seu vetor de centro de massa e atualize ambas as posições com o mesmo vetor.
  2. se estiverem distantes, atualize-os separadamente.
  3. como antes.

Boa sorte!


fonte