Numerici: come posso rinormalizzare il seguente ODE


9

Questa domanda è più su come affrontare numericamente un problema.

In un piccolo progetto volevo simulare il moto coorbitale di Giano ed Epimeto. Questo è fondamentalmente un problema a tre corpi. Scelgo Saturno da fissare all'origine, sia r1 che r2 i vettori di posizione di Janus ed Epimetheus. Poiché l'effetto si verifica quando Janus ed Epimetheus sono molto vicini, ho scelto le coordinate relative per una migliore risoluzione, cioè r=r1r2 e R=r1+r2 . Ora ottengo le seguenti equazioni di movimento:

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

dove mi corrisponde alle masse delle lune, M è la massa di Saturno e G la costante gravitazionale. Il problema sorge quando provo a risolverlo numericamente. Uno ha a che fare con valori di magnitudo completamente diversa, cioè Me28 e mie17 . E r , R sono nelle regioni da 0 a 150.000.

Ad essere sincero, non sono sicuro che questo sia il luogo in cui discutere tali problemi numerici.

Maggiori informazioni:

Il codice è scritto in Matlab e io uso un solutore ODE standard per ottenere il risultato. Tuttavia, ciò si sta esaurendo perché la dimensione del passo non può essere ridotta con la precisione della macchina. (Trovo che ciò non sorprenda perché bisogna fare i conti con gli ordini di grandezza già menzionati).


2
Stai eseguendo questa simulazione in unità SI? Come minimo, dovresti dividere tutto per un fattore di , in modo da poter eliminare alcuni ordini di grandezza. Gm2

Ciao, io questo, ma continua a non funzionare ... Gli stessi problemi si verificano come prima. :(

Devi impostare la tua unità di massa su una delle masse lunari e le tue unità di lunghezza / tempo per impostare le cose su 1. Nulla dovrebbe essere più piccolo di 1/100 se lo scrivi bene. Non è necessario un solutore da banco. Scrivi il codice per farlo da solo, dove controlli le dimensioni. In caso di collisione, possono verificarsi rotture della dimensione con questi tipi di potenziali, in cui il solutore proverà a ridurre la dimensione fino alla convergenza e alla collisione non vi è alcuna convergenza. Devi assicurarti che le orbite non siano collineari, quindi devi visualizzare la simulazione. Non puoi ottenere una risposta così com'è.
Ron Maimon,

1
Si prega di evitare abbreviazioni nel titolo. DGL = Differentialgleichung?

Quale solutore ODE standard stai usando?
Geoff Oxberry,

Risposte:


2

Il tuo attuale approccio rovina la stabilità numerica; in effetti probabilmente perderai la risoluzione in questo modo.

Prendi come coordinate per ciascun satellite le sue variabili di Keplero e l'angolo del piano contenente la posizione del satellite, la velocità e l'origine. Le equazioni differenziali in assenza di interazione tra i satelliti sono quindi banalmente semplici e solo l'interazione diventa alquanto complicata. Poiché l'interazione è minuscola se i satelliti sono lontani, la dinamica risultante dovrebbe essere numericamente stabile.


2

Invece di utilizzare un solutore ODE "classico" (rigido), è possibile utilizzare algoritmi dedicati per l'integrazione numerica geometrica. Vedi ad esempio questo libro e i codici RNL che puoi trovare sul sito Web di Ernst Hairer .


0

Che ne dici se hai tre passaggi nella tua simulazione:

  1. aggiorna la posizione di Giano calcolando la forza di Giano - Saturno.
  2. aggiorna la posizione di Epimetheus calcolando la forza di Epimetheus - Saturno.
  3. aggiorna la posizione di Giano ed Epimete calcolando la forza di Giano - Epimeteo.

Forse usando timestep più fini per # 3.

Non sono sicuro se questo aiuterà. Suppongo che il vero problema sia che l'entità della forza è diversa nella luna - luna e luna - caso di Saturno, tranne se le lune sono vicine?

In alternativa:

  1. se le lune si chiudono, calcola una lune approssimative - la forza di Saturno usando il loro centro del vettore di massa e aggiorna entrambe le posizioni con lo stesso vettore.
  2. se sono distanti, aggiornarli separatamente.
  3. come prima.

Buona fortuna!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.