So verkleinern Sie Sonnensystemdaten auf simulierbare Werte

Okay, ich schäme mich ernsthaft dafür, das zu fragen, besonders wenn ich eigentlich Physik studiere, aber es gibt etwas, das mich an der Simulation stört, an der ich arbeite.

Ich erschaffe das Sonnensystem in einer n-Körper-Simulation, die ich zuvor programmiert habe. Und ich habe ein Problem mit dem Herunterskalieren der Sonnendaten. Selbst wenn ich kg und km als metrische Einheiten verwende, sind die Werte viel größer, als die Variablen in der Programmierung aufnehmen können. Wie einige von Ihnen wissen, ist der Gleitkommafehler größer, je größer der Wert ist. (Fehlerrauschen in Daten) Außerdem macht es die Verarbeitung langsamer.

Ich beschloss, die Daten mit einem Referenzpunkt zu verkleinern, und nahm dafür den Erdradius als 1 Einheit. Und jede andere Entfernung und jeden Radius entsprechend verkleinert. (Eine Einheit ist also 6371 km, nur um das klarzustellen)

Aber ich bin mir nicht sicher, ob ich die Masse verkleinern soll oder nicht. Mein gesunder Menschenverstand sagt, dass ich die Masse verkleinern sollte, damit die Dichte jedes Körpers gleich bleiben sollte. Also nahm ich die Dichte und berechnete einen neuen Massenwert für jeden Körper mit dem neuen verkleinerten Radius. Aber ich konnte mich irgendwie nicht davon überzeugen, ob es wahr ist oder nicht. Hier frage ich Sie also :) Soll ich auch die Masse verkleinern?

PS.1: Ich habe verwendet F = G M m / r 2 Gleichung für die Berechnungen wie gewohnt. (Iteration durch alle Körperpaare)

Wenn es andere Programmierer wie mich gibt, die daran interessiert sind, eine Simulation wie diese zu erstellen, wie haben Sie dieses Problem mit der Datengröße gelöst? Gibt es bessere Lösungen, als die Werte herunterzuskalieren?

PS. Ich habe eine Excel-Datei erstellt, die die Skalierungskonvertierung durchführt. Also teile ich das Blatt in OneDrive. ( http://1drv.ms/1NIekGo ) Wenn Sie meine Berechnungen und Werte überprüfen können, wäre ich auch sehr hilfreich für mich. Danke für jede Hilfe.

Verkleinern Sie nichts, sondern tun Sie, was die NASA tut: ilrs.gsfc.nasa.gov/docs/2014/196C.pdf , und verwenden Sie Entfernungen in astronomischen Einheiten (AE), Zeit in Sekunden und Massen im relativen Verhältnis zueinander andere, nicht in kg.
@barrycarter Welches G-Konstantenformat sollte ich in der F = GMM/r ^ 2-Gleichung verwenden? Ich meine, wenn ich Masse in relativen Proportionen und Längen in AU verwende, werden die üblichen G-Konstanteneinheiten obsolet. Ich muss es umrechnen, aber wie mache ich das mit relativen Massenwerten?
Ist Ihnen klar, wie die Einheitenumrechnung funktioniert? Wenn Sie beispielsweise den Wert der Gravitationskonstante in Einheiten von Metern^3 / (Kilogramm * Sekunden^2) erhalten, wissen Sie, wie Sie diesen in den Wert der Gravitationskonstante in Einheiten von AU^3 / umrechnen können (Erdmassen * Jahre^2)?

Antworten (3)

Wie Barrycarter in seinem Kommentar erwähnte, sollten Sie sich mehr mit Einheiten und weniger mit Maßstäben befassen.

Im Allgemeinen ist es am besten, sich an herkömmliche Einheiten zu halten, die die Leute kennen. (Das hält Ihren Kopf bei klarem Verstand und erleichtert es anderen, Ihre Arbeit zu überprüfen.) In der Astronomie unterscheiden sich diese ein wenig von den Standard-SI-Einheiten, da die Dinge – sagen wir mal – groß sind und die Zahlen außer Kontrolle geraten schnell (wie Sie bemerkt haben). Hier sind einige Einheiten, die auf der Wikipedia-Seite zum astronomischen Einheitensystem vorgeschlagen werden :

  • Zeit : Tag. Dies ist wahrscheinlich nicht allzu wichtig, also zögern Sie nicht, hier Sekunden zu verwenden. (Immerhin ist es nur ein Unterschied von 5 Größenordnungen.)
  • Masse : Es gibt mehrere Konventionen, aber die, die ich persönlich am meisten gesehen habe, sind Sonnenmassen. Da Sie unser Sonnensystem modellieren, ist dies eine praktische Referenz.
  • Länge : Ich würde auf jeden Fall astronomische Einheiten verwenden. (Was für ein passender Name!)

Wenn Sie sich an diese Einheiten halten, sollten Sie in der Lage sein, Rundungsfehler zu begrenzen und die Rechenlast großer Zahlen zu reduzieren.

Danke für die Antwort. Ja, die Verwendung von au ist viel sinnvoller. Aber es gibt immer noch etwas, das mich stört. Auf der von Ihnen verlinkten Wiki-Seite ist 1 Sonnenmasse 1,988 * E30 und GM☉ ist 1,327 × E20 kg m3s−2. Es ist also im Meter- und Kilogramm-Format. Da ich die Gleichung F = GMm / r ^ 2 verwende; Sollte ich das G-Format nicht in au und Sonnenmasse umwandeln, wenn ich au in r (Entfernung) und Sonnenmasse in Körpermassen verwende? Ich meine, es ist im Grunde das gleiche Problem mit dem Skalierungsproblem, das ich in der Hauptfrage erwähnt habe. Es gibt etwas, wovon ich mich nicht überzeugen kann und nicht weiß warum.
Um es klarer zu machen: Wenn Sie mein Excel-Blatt überprüft haben, skaliere ich beim Verkleinern der Längen auch die Massen, sodass die Körperdichten gleich bleiben. Ist das wirklich nötig? Länge und Masse sind zwei unabhängige Einheiten. Es sollte sich nicht gegenseitig beeinflussen, wenn ich die eine verkleinere. Aber andererseits sollte die Dichte gleich bleiben. Sie sind also doch durch die Dichte voneinander abhängig?
Um die Dichte brauchst du dir überhaupt keine Sorgen zu machen. Konvertieren Sie einfach Ihre Einheiten, bis sie überschaubare Skalen haben.

Stellen Sie sich eine nahezu kreisförmige Umlaufbahn vor. Im Durchschnitt, v = 2 π r / T , und die Gravitationskraft gleicht die Zentrifugalkraft aus:

G M m r 2 = m v 2 r = 4 π 2 m r T 2
Lösen für G und Ersatzwerte für die Umlaufbahn der Erde um die Sonne:
G = 4 π 2 r 3 M T 2 = 4 π 2 EIN U 3 M   j 2
Wenn Sie stattdessen Tageseinheiten wünschen, verwenden Sie einen Umrechnungsfaktor, um die Jahre zu streichen:
G = 39.5 EIN U 3 M   j 2 ( 1   j 365.25   d ) 2 = 2,96 × 10 4 EIN U 3 M   d 2
Die Factor-Label-Methode funktioniert auch, wenn Sie mit dem MKS-Wert beginnen:
G = 6.67 × 10 11 m 3 k g   s 2 ( 1   EIN U 1.496 × 10 11   m ) 3 ( 1,99 × 10 30   k g 1   M ) ( 86400   s 1   d ) 2 = 2,96 × 10 4 EIN U 3 M   d 2
Validierungstests zeigen, ob Ihre Simulation korrekt funktioniert. Richten Sie verschiedene einfache Systeme ein, bei denen Sie eine klare Vorstellung davon haben, was passieren soll, und überprüfen Sie dann, was tatsächlich passiert.

Ich habe vor einiger Zeit selbst einen programmiert. Ich habe volle SI-Einheiten in Kombination mit Doubles (64-Bit-Floating-Zahlen) verwendet. Sie funktionieren hervorragend für den Maßstab unseres Sonnensystems und sind immer noch extrem präzise.

        var sun = new Star();
        sun.Position = new Vector3D(0,0,0);
        sun.Velocity = new Vector3D(0,0,0);
        sun.Mass = 1.998855e30;

        var earth = new Planet();
        earth.Mass = 5.9722e24;
        earth.Position = new Vector3D(0, 149.6e9, 0);
        earth.Velocity = new Vector3D(29780,0,0);

        system.World.Objects.Add(sun);
        system.World.Objects.Add(earth);

Wenn Sie interessiert sind, ist mein Code für diese Simulation auf Github: https://github.com/RononDex/Simulation

Die Simulation selbst befindet sich im UnterordnerSimulation.Testing

"Sonne.Masse = 1.998855e30;" Das ist noch nicht verkleinert...
@Hohmannfan Wie gesagt, ich habe SI-Werte verwendet, die nicht herunterskaliert sind.
Was ich meine ist, dass Sie bei vielen der erforderlichen Berechnungen mehrere Zahlen dieser Größenordnung multiplizieren müssen, bevor Sie zu vernünftigen Zahlen zurückkehren. Auch wenn die Konstante selbst innerhalb der Grenzen liegt, können sie dennoch unerwartete Fehler in den Berechnungen verursachen.
@Hohmannfan Ich schlage vor, Sie lesen einige Ressourcen zum Thema doppelte Genauigkeit (64-Bit-Gleitkommazahlen). Selbst für Werte wie die Sonnenmasse mit 10 ^ 30 ist die Genauigkeit immer noch besser als 0,0001 kg (wenn 1 = 1 kg)
OK, dem Exponenten sind 11 Bit zugeordnet, und das ist immer noch eine Größenordnung von 4 Bit größer als das schlechteste Rechenbeispiel, das mir einfällt. Punkt genommen.