Numerische Ephemeridenrechnung
Mathematisches Verfahren, Konstanten, Reihen und sprachübergreifende Validierung
Zusammenfassung
Der beschriebene Rechenkern berechnet scheinbare topozentrische Ephemeriden von Asteroiden, Kometen und interstellaren Objekten aus oskulierenden Bahnelementen. Elliptische, parabolische und hyperbolische Anfangszustände werden ohne externen Orbitdienst behandelt. Die anschließende numerische Integration berücksichtigt solare Gravitation, die erste relativistische Korrektur, Planeten, Erde und Mond, Erd-J2, optional 16 massereiche Asteroiden sowie Marsden-A1/A2/A3. Planeten- und Asteroidenzustände werden mit kubischer Hermite-Interpolation aus kompakten Tabellen gewonnen.
Die beobachtete Richtung entsteht nach UTC-nach-TDB-Näherung, Lichtlaufzeit, Erdrotation, Nutation und Präzession. Sechs Extremobjekte mit 20 eingefrorenen JPL-Horizons-Zeilen bilden den gemeinsamen Abnahmetest aller 49 eigenständigen Zielprogramme.
1. Fachbegriffe und Symbole
Alle Fachbegriffe und Abkürzungen, die für das Verständnis der folgenden Rechnung erforderlich sind, werden hier zusammenhängend erklärt. Bei der ersten Verwendung besonders wichtiger Begriffe folgt zusätzlich eine kurze Erklärung im Fließtext.
Glossar der astronomischen und numerischen Fachbegriffe.
| Fachbegriff | Bedeutung in diesem Artikel |
|---|---|
| Ephemeride | Vorausberechnete Folge von Himmelspositionen und ergänzenden Größen für festgelegte Zeitpunkte und einen Beobachtungsort. |
| scheinbar | Bezeichnet hier die Richtung nach Lichtlaufzeit, Erdrotation, Nutation und Präzession; atmosphärische Refraktion ist nicht Teil dieses Rechenkerns. |
| topozentrisch | Auf den wirklichen Standort des Beobachters auf oder nahe der Erdoberfläche bezogen, nicht auf den Erdmittelpunkt. |
| geozentrisch / heliozentrisch | Geozentrisch bedeutet auf den Erdmittelpunkt, heliozentrisch auf den Sonnenmittelpunkt bezogen. |
| Baryzentrum | Gemeinsamer Massenschwerpunkt mehrerer Körper; EMB bezeichnet das Erde-Mond-Baryzentrum. |
| oskulierende Bahnelemente | Sechs Elemente einer momentanen Keplerbahn, die Ort und Geschwindigkeit der tatsächlich gestörten Bahn an einer Epoche berührt. |
| Epoche | Zeitpunkt, für den Bahnelemente oder ein Zustandsvektor gelten. |
| Kegelschnitt | Ellipse, Parabel oder Hyperbel; die Exzentrizität e unterscheidet die drei Bahnformen. |
| Exzentrizität e | Dimensionsloser Formparameter: e<1 Ellipse, e=1 Parabel und e>1 Hyperbel. |
| q, Tp, i, Ω, ω | Periheldistanz, Perihelzeit, Bahnneigung, Länge des aufsteigenden Knotens und Argument des Perihels. |
| M, E, H, ν | Mittlere, exzentrische, hyperbolische und wahre Anomalie; Winkel beziehungsweise Hilfsgröße für die Position auf der Bahn. |
| J2000 | In diesem Kern die feste äquatoriale Bezugsorientierung zur Standardepoche JD 2451545.0. |
| AE | Astronomische Einheit; exakt 149597870,7 Kilometer. |
| JD | Julianisches Datum, eine fortlaufende astronomische Tageszählung. |
| UTC / TAI / TDB | Koordinierte Weltzeit, Internationale Atomzeit und baryzentrische dynamische Zeit; UTC enthält Schaltsekunden, TDB dient der Dynamik. |
| Schaltsekunde | Ganzzahlige Korrektur, die UTC an die ungleichmäßige Erdrotation bindet, während TAI gleichmäßig fortläuft. |
| Gravitationsparameter μ | Produkt G·M aus Gravitationskonstante und Körpermasse. μ⊙ bezeichnet den Sonnenwert, μE den Erdwert. |
| Massenverhältnis ηb | Verhältnis Mb/M⊙ eines Störkörpers zur Sonne; gleichbedeutend mit μb/μ⊙. |
| Störkörper | Körper, dessen Gravitation die reine Zweikörperbahn zusätzlich beschleunigt. |
| direkter und indirekter Term | Direkt wirkt der Störkörper auf das Objekt; indirekt wird die gleichzeitige Beschleunigung des heliozentrischen Ursprungs abgezogen. |
| N16 | Optionaler Satz der 16 massereichsten Asteroiden, deren Störungen zusätzlich integriert werden. |
| kubische Hermite-Interpolation | Polynominterpolation dritten Grades, die an beiden Tabellenknoten Position und Geschwindigkeit exakt übernimmt. |
| Little-Endian float64 | Binärformat mit dem niederwertigsten Byte zuerst und 64-Bit-Gleitkommazahlen nach IEEE 754. |
| Runge-Kutta-Verfahren | Einschrittverfahren, das mehrere Beschleunigungsauswertungen kombiniert, um den Zustand über einen Zeitschritt fortzuschreiben. |
| eingebettetes Verfahren | Zwei Runge-Kutta-Lösungen verschiedener Ordnung benutzen dieselben Stufen; ihre Differenz schätzt den lokalen Fehler. |
| Dormand-Prince 5(4) | Eingebettetes Runge-Kutta-Paar fünfter und vierter Ordnung mit sieben Stufen. |
| Butcher-Tafel | Tabellarische Anordnung der Runge-Kutta-Koeffizienten ci, aij und bi; sie legt Stufenzeitpunkte, Zwischenzustände und Endgewichte vollständig fest. |
| lokaler Fehler | Geschätzter Fehler eines einzelnen Integrationsschritts, hier aus der Differenz der Lösungen fünfter und vierter Ordnung. |
| adaptive Schrittweite | Automatische Verkleinerung oder Vergrößerung des Zeitschritts anhand der normierten Fehlerschätzung. |
| RMS | Quadratischer Mittelwert; hier die Wurzel aus dem Mittel der sechs quadrierten, skalierten Komponentenfehler. |
| clamp | Begrenzung eines Zahlenwerts auf ein geschlossenes Minimum-Maximum-Intervall. |
| Lichtlaufzeit | Zeit, die das Licht vom Objekt zum Beobachter benötigt; sie verschiebt die ausgewertete Emissionszeit. |
| Präzession / Nutation | Langsame säkulare beziehungsweise kürzerperiodische Änderung der Orientierung der Erdachse. |
| GMST | Mittlere Greenwich-Sternzeit, also der aus UTC abgeleitete Rotationswinkel der Erde relativ zum mittleren Himmelsbezug. |
| Erd-J2 | Führender Koeffizient der Abplattung des Erdschwerefelds gegenüber einer idealen Punktmasse. |
| Marsden A1/A2/A3 | Empirische nichtgravitative Beschleunigungen eines Kometen in radialer, transversaler und normaler Richtung. |
| RA / Deklination | Rektaszension und Deklination; das äquatoriale Koordinatenpaar der scheinbaren Himmelsrichtung. |
| MPC-ρ-Faktoren | Vom Minor Planet Center verwendete dimensionslose Stationsfaktoren für Abstand von Erdachse und Äquatorebene. |
| Bogensekunde | 1/3600 Grad; das Zeichen ″ kennzeichnet diese Winkeleinheit. |
| Referenzephemeride / Residuum | Vergleichsposition aus JPL Horizons beziehungsweise der verbleibende sphärische Winkelabstand zur Kernrechnung. |
| Kovarianzfortpflanzung | Fortrechnung statistischer Unsicherheiten und Korrelationen einer Bahnlösung; sie gehört nicht zum dokumentierten Nominalkern. |
| Abnahmetest | Festgelegter Vergleich, dessen Grenzwert ein Port für die Freigabe einhalten muss. |
Die Symbole μ⊙ und μE werden im gesamten Artikel eindeutig unterschieden.
| Symbol | Bedeutung | Wert oder Einheit |
|---|---|---|
| μ⊙ = G·M⊙ | Heliozentrischer Gravitationsparameter der Sonne | 0.0002959122082855911 AE³/Tag² |
| μE = G·ME | Geozentrischer Gravitationsparameter der Erde | 8.887692445125148326e-10 AE³/Tag² |
| μMond = G·MMond | Gravitationsparameter des Mondes | 1.09318946230584718e-11 AE³/Tag² |
| ηb = μb/μ⊙ | Massenverhältnis eines Störkörpers b zur Sonne | dimensionslos |
| r, v, a | Orts-, Geschwindigkeits- und Beschleunigungsvektor | AE; AE/Tag; AE/Tag² |
| t0, Tp, Δ | Elementepoche, Perihelzeit und Differenz t0−Tp | JD beziehungsweise Tage |
| q, a, p, e | Periheldistanz, große Halbachse, Bahnparameter und Exzentrizität | AE beziehungsweise dimensionslos |
| M, E, H, ν | Mittlere, exzentrische, hyperbolische und wahre Anomalie | Radiant |
| Ω, ω, i | Knotenlänge, Perihelargument und Inklination | Grad bei Eingabe, intern Radiant |
| c | Lichtgeschwindigkeit | 173.144632674240 AE/Tag |
| ρ | Topozentrischer Objektvektor beziehungsweise im J2-Abschnitt Erdabstand | AE |
| J2, RE | Erdabplattungskoeffizient und Äquatorradius | dimensionslos beziehungsweise AE |
| A1, A2, A3 | Nichtgravitative Marsden-Parameter | AE/Tag² |
| T | Julianische Jahrhunderte seit J2000 | dimensionslos |
2. Konventionen, μ und Grundgrößen
Der dynamische Zustand y=[x,y,z,vx,vy,vz] ist heliozentrisch, rechtshändig und auf das äquatoriale J2000-System bezogen. Positionen sind AE, Geschwindigkeiten AE/Tag, Beschleunigungen AE/Tag². Interne Winkel sind Radiant. Bahnelemente, geographische Eingaben und Ergebniswinkel sind Grad.
Das Symbol μ bezeichnet grundsätzlich einen Gravitationsparameter μ=G·M, also das Produkt aus Gravitationskonstante G und Masse M. Ohne Körperindex wurde es in älteren Fassungen missverständlich für die Sonne verwendet. Dieser Artikel schreibt deshalb immer μ⊙=G·M⊙ für die Sonne und μE=G·ME für die Erde. Für einen Störkörper b gilt ηb=μb/μ⊙=Mb/M⊙.
| Symbol | Exakter Wert | Einheit |
|---|---|---|
| π | 3.141592653589793238462643383279502884 | dimensionslos |
| AE | 149597870.7 | km |
| μ⊙ = G·M⊙ | 0.0002959122082855911 | AE³/Tag² |
| μE = G·ME | 8.887692445125148326e-10 | AE³/Tag² |
| μMond = G·MMond | 1.09318946230584718e-11 | AE³/Tag² |
| Lichtgeschwindigkeit | 173.144632674240 | AE/Tag |
| Lichtlaufzeit | 0.0057755183 | Tag/AE |
| Masse Erde/Sonne | 3.0034896149156e-6 | dimensionslos |
| Masse Mond/Sonne | 3.6943033497651e-8 | dimensionslos |
| Erdradius | 6378.1363 / 149597870.7 | AE |
| J2 Erde | 1.08262668e-3 | dimensionslos |
| Schiefe J2000 | 84381.448 | Bogensekunden |
3. Anfangszustand aus oskulierenden Elementen
Eingaben sind Epoche t0, Exzentrizität e, Periheldistanz q, Perihelzeit Tp, Knoten Ω, Perihelargument ω und Inklination i. Oskulierend bedeutet, dass diese Elemente an der Epoche dieselbe Position und Geschwindigkeit wie die gestörte Bahn darstellen. Mit μ⊙=G·M⊙ und Δ=t0−Tp wird zuerst die wahre Anomalie ν bestimmt.
3.1 Ellipse
Gültigkeit: e < 1 - 1e-8
a = q / (1 - e)
n = sqrt(μ⊙ / a^3)
M = normalize(n Δ, -π, +π)
E0 = M für e < 0.8
E0 = sign(M) π sonst
Ek+1 = Ek - (Ek - e sin Ek - M) / (1 - e cos Ek)
Abbruch: |Korrektur| < 2e-14 oder nach 80 Iterationen
ν = 2 atan2(sqrt(1+e) sin(E/2), sqrt(1-e) cos(E/2))
3.2 Hyperbel
Gültigkeit: e > 1 + 1e-8
a = q / (e - 1) (positive Betragskonvention)
M = sqrt(μ⊙ / a^3) Δ
H0 = asinh(M / e)
Hk+1 = Hk - (e sinh Hk - Hk - M) / (e cosh Hk - 1)
Abbruch: |Korrektur| < 2e-14 oder nach 80 Iterationen
ν = 2 atan2(sqrt(e+1) sinh(H/2), sqrt(e-1) cosh(H/2))
3.3 Parabel und nahezu parabolischer Grenzbereich
Gültigkeit: |e - 1| <= 1e-8
s = sqrt(2 q^3 / μ⊙)
B = Δ / s
D = 2 sinh(asinh(1.5 B) / 3)
ν = 2 atan D
Die Barker-Form verhindert die numerisch schlechte Division durch 1−e oder e−1 im unmittelbaren Parabelbereich. Anschließend gelten für alle drei Fälle:
p = q (1 + e)
r = p / (1 + e cos ν)
v0 = sqrt(μ⊙ / p)
r_orb = [r cos ν, r sin ν, 0]
v_orb = [-v0 sin ν, v0 (e + cos ν), 0]
Die Drehung aus der Bahnebene verwendet Rz(Ω) Rx(i) Rz(ω). Der ausgeschriebene zweidimensionale Eingang [x,y] wird zu:
X = (cosΩ cosω - sinΩ sinω cosi) x + (-cosΩ sinω - sinΩ cosω cosi) y
Y = (sinΩ cosω + cosΩ sinω cosi) x + (-sinΩ sinω + cosΩ cosω cosi) y
Z = (sinω sini) x + (cosω sini) y
Die feste Ekliptik-nach-Äquator-Rotation ist eine x-Achsenrotation um 84381.448 Bogensekunden und wird identisch auf Position und Geschwindigkeit angewandt.
4. Störkörperdaten und Hermite-Interpolation
Jeder Tabellenknoten enthält Position r0 und Geschwindigkeit v0. Für zwei Knoten im Abstand h und u=(t−t0)/h interpoliert der Kern mit den folgenden Polynomen. Eine kubische Hermite-Interpolation übernimmt an beiden Enden Position und Geschwindigkeit exakt; dies sind die vollständigen Reihen und ihre exakten numerischen Koeffizienten:
h00(u) = 2 u^3 - 3 u^2 + 1
h10(u) = u^3 - 2 u^2 + u
h01(u) = -2 u^3 + 3 u^2
h11(u) = u^3 - u^2
r(u) = h00 r0 + h10 h v0 + h01 r1 + h11 h v1
dh00/dt = ( 6 u^2 - 6 u) / h
dh10/dt = 3 u^2 - 4 u + 1
dh01/dt = (-6 u^2 + 6 u) / h
dh11/dt = 3 u^2 - 2 u
v(u) = (dh00/dt) r0 + dh10 v0 + (dh01/dt) r1 + dh11 v1
| Störkörper | Masse/Sonnenmasse |
|---|---|
| Merkur | 1.660114153054348e-7 |
| Venus | 2.447838287784771e-6 |
| Mars | 3.227156037554996e-7 |
| Jupiter | 9.547919101886966e-4 |
| Saturn | 2.858856727222416e-4 |
| Uranus | 4.366249662744965e-5 |
| Neptun | 5.151383772628673e-5 |
| Pluto | 7.350487833457740e-9 |
| N16-Körper | Masse/Sonnenmasse |
|---|---|
| Ceres | 4.719154706681575e-10 |
| Pallas | 1.0297360324108826e-10 |
| Juno | 1.4471670474939703e-11 |
| Vesta | 1.3026875547328177e-10 |
| Iris | 8.589038999387399e-12 |
| Hygiea | 4.238598614896659e-11 |
| Eunomia | 1.5243642468487352e-11 |
| Psyche | 1.1978215785019767e-11 |
| Euphrosyne | 8.133159614634648e-12 |
| Europa | 2.0216913527078825e-11 |
| Cybele | 7.06871003275745e-12 |
| Sylvia | 1.6337820878172953e-11 |
| Thisbe | 8.965306556356798e-12 |
| Camilla | 1.0878696848144257e-11 |
| Davida | 2.9345275747768696e-11 |
| Interamnia | 2.1327387533901138e-11 |
5. Bewegungsgleichung
d/dt [r, v] = [v, a(r,v,t)]
Die solare Grundbeschleunigung ist aS=−μ⊙ r/|r|³. Für einen Störkörper mit heliozentrischer Position rb und Massenverhältnis ηb wird der direkte und indirekte Term gemeinsam addiert:
ab = μ⊙ ηb [(rb - r)/|rb - r|^3 - rb/|rb|^3]
Erde und Mond werden innerhalb 0,2 AE getrennt verwendet, außerhalb als Erde-Mond-Baryzentrum. Die acht übrigen Körper Merkur, Venus, Mars, Jupiter, Saturn, Uranus, Neptun und Pluto wirken stets. N16 wird nur bei gesetztem Schalter und vollständigen Daten ergänzt.
5.1 Relativistische Sonnenkorrektur
arel = μ⊙ / (c^2 |r|^3) * [ (4 μ⊙/|r| - |v|^2) r + 4 (r·v) v ]
5.2 Erd-J2
Innerhalb 0,02 AE von der Erde wird die übliche J2-Beschleunigung im erdfesten Näherungsrahmen des Ports als direkter minus indirekter Term addiert:
μE = G·ME = 8.887692445125148326e-10 AE^3/Tag^2
k = 1.5 J2 μE RE^2 / ρ^5
aJ2,x = k x (5 z^2/ρ^2 - 1)
aJ2,y = k y (5 z^2/ρ^2 - 1)
aJ2,z = k z (5 z^2/ρ^2 - 3)
5.3 Nichtgravitative Beschleunigung
g(r) = α (r/r0)^(-m) [1 + (r/r0)^n]^(-k)
Standard: r0=2.808, α=0.1112620426, m=2.15, n=5.093, k=4.6142
ang = g(r) [A1 er + A2 et + A3 en]
er ist radial, en liegt normal zur Bahnebene in Richtung r×v, und et=en×er ist transversal. Sind A1=A2=A3=0, wird exakt der Nullvektor geliefert.
6. Dormand-Prince 5(4)
Ein eingebettetes Runge-Kutta-Paar erzeugt gleichzeitig eine Lösung fünfter und vierter Ordnung. Die Differenz schätzt den lokalen Fehler. Eine Butcher-Tafel ist die tabellarische Sammlung der Stufenzeitpunkte ci, der Zwischengewichte aij und der Endgewichte bi eines Runge-Kutta-Verfahrens. Sie beschreibt damit den Integrationsschritt vollständig. Sämtliche im Code verwendeten Butcher-Koeffizienten sind:
c2=1/5; a21=1/5
c3=3/10; a31=3/40; a32=9/40
c4=4/5; a41=44/45; a42=-56/15; a43=32/9
c5=8/9; a51=19372/6561; a52=-25360/2187;
a53=64448/6561; a54=-212/729
c6=1; a61=9017/3168; a62=-355/33; a63=46732/5247;
a64=49/176; a65=-5103/18656
c7=1; a71=35/384; a72=0; a73=500/1113;
a74=125/192; a75=-2187/6784; a76=11/84
Ordnung 5: b = [35/384, 0, 500/1113, 125/192,
-2187/6784, 11/84, 0]
Ordnung 4: b*= [5179/57600, 0, 7571/16695, 393/640,
-92097/339200, 187/2100, 1/40]
Für jede der sechs Komponenten gilt sc=2e−15+2e−13·max(|yalt|,|yneu|). RMS bedeutet quadratischer Mittelwert; die normierte RMS-Fehlerzahl ist sqrt(sum((Fehler/sc)²)/6). Ein Schritt wird bei Fehlerzahl ≤1 oder |h|≤1e−8 Tag angenommen. Der neue Faktor ist clamp(0.9·Fehlerzahl^(−0.2),0.1,5). clamp begrenzt den Faktor auf das geschlossene Intervall [0,1;5]; bei Fehlerzahl null wird 5 verwendet. Die Schrittweite bleibt zwischen 1e−8 und 0,25 Tag. Eine Integration darf höchstens 1.000.000 Schritte ausführen.
7. Zeitskalen und Beobachter
Die öffentliche Zeit ist UTC. Für die Dynamik wird näherungsweise TDB=UTC+(TAI−UTC+32,184 s)/86400 verwendet. Die implementierten Schaltsekundenstufen lauten:
JD >= 2457754.5 : TAI-UTC = 37 s
JD >= 2457204.5 : TAI-UTC = 36 s
JD >= 2456109.5 : TAI-UTC = 35 s
JD >= 2454832.5 : TAI-UTC = 34 s
JD >= 2453736.5 : TAI-UTC = 33 s
sonst : TAI-UTC = 32 s
Mit T=(JDUTC−2451545)/36525 wird GMST in Grad berechnet. Die folgenden Polynome und kurzen trigonometrischen Reihen sind vollständig und enthalten alle im Port verwendeten Zahlen:
GMST = 280.46061837 + 360.98564736629 (JD-2451545)
+ 0.000387933 T^2 - T^3/38710000
L_sun = 280.4665 + 36000.7698 T [Grad]
L_moon = 218.3165 + 481267.8813 T [Grad]
Ω_moon = 125.04452 - 1934.136261 T [Grad]
Δψ = -17.20 sin Ω_moon -1.32 sin(2 L_sun)
-0.23 sin(2 L_moon) +0.21 sin(2 Ω_moon) [Bogensekunden]
Δε = 9.20 cos Ω_moon +0.57 cos(2 L_sun)
+0.10 cos(2 L_moon) -0.09 cos(2 Ω_moon) [Bogensekunden]
ε0 = 23 + 26/60 + 21.448/3600 Grad
-(46.8150 T + 0.00059 T^2 - 0.001813 T^3) Bogensekunden
ζ = 2306.2181 T + 0.30188 T^2 + 0.017998 T^3 [Bogensekunden]
z = 2306.2181 T + 1.09468 T^2 + 0.018203 T^3 [Bogensekunden]
θ = 2004.3109 T - 0.42665 T^2 - 0.041833 T^3 [Bogensekunden]
Der geozentrische Standortvektor wird aus MPC-ρ-Faktoren oder geodätischer Länge, Breite und Höhe gebildet, mit scheinbarer Sternzeit rotiert und über Nutation sowie Präzession nach J2000 zurückgeführt.
8. Lichtlaufzeit und scheinbare Richtung
Der Erdzustand und Beobachter werden zur Empfangszeit bestimmt. Für die Emissionszeit wird höchstens fünfmal iteriert:
t_emit,0 = t_TDB
ρk = r_object(t_emit,k) - r_earth(t_TDB) - r_observer(t_UTC)
t_emit,k+1 = t_TDB - |ρk| * 0.0057755183
Abbruch: |t_emit,k+1 - t_emit,k| < 1e-12 Tag
RA = normalize(atan2(ρy,ρx), 0, 2π)
Dec = atan2(ρz, sqrt(ρx^2+ρy^2))
9. Binärtabellen
Planetenblöcke sind von 2000 bis 2040 in neun überlappende Zeitabschnitte geteilt und verwenden 0,5 Tag Schrittweite. N16 verwendet ebenfalls neun Blöcke und exakt 1,9999817474948436 Tage. Die Überlappung erlaubt sichere Hermite-Interpolation an Abschnittsgrenzen. Alle Werte sind Little-Endian float64.
| Datensatz | Zeitraum | Schritt | Inhalt |
|---|---|---|---|
| Planeten | 2000–2040 | 0,5 Tag | 11 Körper: EMB, Erde, Mond, Merkur bis Pluto |
| N16 | 2000–2040 | 1,9999817474948436 Tage | 16 massereiche Asteroiden |
10. Extrembeispiele
Die nachfolgende Tabelle nennt UTC, eingefrorene JPL-Horizons-Referenz, die C-Port-Rechnung und den sphärisch genäherten Winkelabstand. Station A68 und dieselben nominalen Elemente wurden verwendet. Werte sind Grad.
Bahnform und Periheldistanz der sechs Prüffälle.
| Objekt | Epoche JD | e | q AE |
|---|---|---|---|
| 433 Eros | 2453311.5 | 0.2228078944584026 | 1.133355399799004 |
| C/2023 A3 | 2460448.5 | 1.000095309222603 | 0.3914300307809727 |
| 2P Encke | 2459847.5 | 0.8477496967533629 | 0.3379482792219925 |
| 2I Borisov | 2458853.5 | 3.356475782676596 | 2.006520878500843 |
| 99942 Apophis | 2459215.5 | 0.19152168935010219 | 0.74582704784665232 |
| 367943 Duende | 2456158.5 | 0.10812843436824709 | 0.893491631652941 |
Perihelzeit und Orientierung der Bahnebene.
| Objekt | Tp TDB | Ω ° | ω ° | i ° |
|---|---|---|---|---|
| 433 Eros | 2453371.5859943051 | 304.40102733795362 | 178.665326776373 | 10.8291838260782 |
| C/2023 A3 | 2460581.24084083 | 21.55947863619833 | 308.4917712569641 | 139.1121095087364 |
| 2P Encke | 2460239.6495185494 | 334.1935846036774 | 187.1342463695676 | 11.41227811179314 |
| 2I Borisov | 2458826.052845906 | 308.1477292269942 | 209.1236864378081 | 44.05264247909138 |
| 99942 Apophis | 2459101.0394224627 | 204.0389272089208 | 126.65205183685531 | 3.3367513200667558 |
| 367943 Duende | 2456261.554400227 | 147.2625010881184 | 271.08746874977783 | 10.33728752192523 |
Nichtgravitative Parameter; null bedeutet, dass der jeweilige Term entfällt.
| Objekt | A1 / A2 / A3 |
|---|---|
| 433 Eros | 0 / 0 / 0 |
| C/2023 A3 | 1.4218744044776211e-8 / 1.3486232284695711e-9 / 0 |
| 2P Encke | 2.34758107815004e-10 / -6.540690743894436e-13 / 0 |
| 2I Borisov | 4.8595882640274848e-8 / 1.8798986909513609e-8 / 2.8355032201284751e-9 |
| 99942 Apophis | 5e-13 / -2.9017666371531647e-14 / 0 |
| 367943 Duende | 0 / 0 / 0 |
Eingefrorene JPL-Horizons-Referenzpositionen.
| Objekt | UTC | JPL RA ° | JPL Dec ° |
|---|---|---|---|
| 433 Eros | 2026-07-21 22:00:00 | 188.352878680 | -15.485731924 |
| 433 Eros | 2026-07-22 22:00:00 | 189.033073621 | -15.673602566 |
| 433 Eros | 2026-07-23 22:00:00 | 189.712493431 | -15.860306533 |
| C/2023 A3 | 2026-07-21 22:00:00 | 270.131469713 | 20.765253967 |
| C/2023 A3 | 2026-07-22 22:00:00 | 269.997011490 | 20.710979861 |
| C/2023 A3 | 2026-07-23 22:00:00 | 269.864375552 | 20.655473422 |
| 2P Encke | 2026-07-21 22:00:00 | 22.086326480 | 16.151079557 |
| 2P Encke | 2026-07-22 22:00:00 | 22.204227929 | 16.258348832 |
| 2P Encke | 2026-07-23 22:00:00 | 22.318311808 | 16.365096989 |
| 2I Borisov | 2019-12-08 00:00:00 | 171.852537543 | -17.895950115 |
| 2I Borisov | 2019-12-09 00:00:00 | 172.269466247 | -18.665188729 |
| 2I Borisov | 2019-12-10 00:00:00 | 172.685173642 | -19.435471809 |
| 99942 Apophis | 2029-04-13 20:30:00 | 162.187610650 | -1.853259832 |
| 99942 Apophis | 2029-04-13 20:40:00 | 158.279644424 | 0.774049246 |
| 99942 Apophis | 2029-04-13 20:50:00 | 153.882081064 | 3.710242552 |
| 99942 Apophis | 2029-04-13 21:00:00 | 148.942949743 | 6.944475706 |
| 367943 Duende | 2013-02-15 19:15:00 | 180.339825182 | -21.468034850 |
| 367943 Duende | 2013-02-15 19:20:00 | 180.569814701 | -17.847154119 |
| 367943 Duende | 2013-02-15 19:25:00 | 180.799653390 | -14.126076156 |
| 367943 Duende | 2013-02-15 19:30:00 | 181.029779486 | -10.326525675 |
Berechnete Positionen und sphärischer Winkelabstand zur Referenz.
| Objekt | UTC | Kern RA ° | Kern Dec ° | Δ ″ |
|---|---|---|---|---|
| 433 Eros | 2026-07-21 22:00:00 | 188.352878496 | -15.485732361 | 0.001696 |
| 433 Eros | 2026-07-22 22:00:00 | 189.033073460 | -15.673603008 | 0.001687 |
| 433 Eros | 2026-07-23 22:00:00 | 189.712493295 | -15.860306981 | 0.001680 |
| C/2023 A3 | 2026-07-21 22:00:00 | 270.131471956 | 20.765254400 | 0.007710 |
| C/2023 A3 | 2026-07-22 22:00:00 | 269.997013729 | 20.710980297 | 0.007701 |
| C/2023 A3 | 2026-07-23 22:00:00 | 269.864377787 | 20.655473860 | 0.007693 |
| 2P Encke | 2026-07-21 22:00:00 | 22.086326254 | 16.151079161 | 0.001626 |
| 2P Encke | 2026-07-22 22:00:00 | 22.204227701 | 16.258348433 | 0.001638 |
| 2P Encke | 2026-07-23 22:00:00 | 22.318311578 | 16.365096587 | 0.001650 |
| 2I Borisov | 2019-12-08 00:00:00 | 171.852535053 | -17.895966055 | 0.058015 |
| 2I Borisov | 2019-12-09 00:00:00 | 172.269463755 | -18.665203001 | 0.052076 |
| 2I Borisov | 2019-12-10 00:00:00 | 172.685171171 | -19.435484512 | 0.046495 |
| 99942 Apophis | 2029-04-13 20:30:00 | 162.187667572 | -1.853286529 | 0.226242 |
| 99942 Apophis | 2029-04-13 20:40:00 | 158.279702838 | 0.774021995 | 0.232031 |
| 99942 Apophis | 2029-04-13 20:50:00 | 153.882138225 | 3.710216547 | 0.225683 |
| 99942 Apophis | 2029-04-13 21:00:00 | 148.943005706 | 6.944451473 | 0.218189 |
| 367943 Duende | 2013-02-15 19:15:00 | 180.339837945 | -21.468014339 | 0.085326 |
| 367943 Duende | 2013-02-15 19:20:00 | 180.569829577 | -17.847141796 | 0.067577 |
| 367943 Duende | 2013-02-15 19:25:00 | 180.799668504 | -14.126072752 | 0.054168 |
| 367943 Duende | 2013-02-15 19:30:00 | 181.029797039 | -10.326531491 | 0.065598 |
433 Eros prüft die gewöhnliche Ellipse. C/2023 A3 liegt fast auf der Parabel und enthält A1/A2. 2P/Encke ist ein periodischer Komet mit Nichtgravitation. 2I/Borisov erzwingt e=3,356475782676596 und A1/A2/A3. Apophis und Duende prüfen die rasche Richtungsänderung bei dichter Erdpassage.
11. Reproduzierbarkeit und Grenzen
- Die 1-Bogensekunden-Grenze gilt gegen dieselben eingefrorenen nominalen Elemente, nicht gegen eine später aktualisierte Bahnlösung.
- Die kurze Nutations-, Präzessions- und TDB-Näherung ist auf den dokumentierten Zeitraum und das angestrebte Genauigkeitsniveau zugeschnitten.
- Schaltsekunden nach der letzten eingebauten Stufe müssen vor Nutzung neuerer Epochen ergänzt werden.
- Die Tabellen decken 2000 bis 2040 ab; außerhalb dieses Bereichs ist ein neuer Datensatz erforderlich.
- Unsicherheitsellipse und Kovarianzfortpflanzung sind nicht Bestandteil dieses reinen Nominalkerns.
- Find_Orb ist kein Laufzeitbestandteil und wird nur privat als zusätzlicher lokaler Vergleich verwendet.
Anhang A. Vergleich der Programmiersprachen
Alle erfolgreichen Fassungen bestanden dieselben 20 Referenzzeilen. Die Genauigkeitstabelle ist alphabetisch nach Sprache sortiert. Die getrennte Geschwindigkeitstabelle ist nach der Medianzeit aufsteigend sortiert, also mit der schnellsten Fassung zuerst. Die Zeiten beziehen sich auf sechs Fälle, die je Sprache siebenmal in sprachübergreifend wechselnder Reihenfolge gerechnet wurden; sie zeigen auf diesem Rechner nur die relative Laufzeit.
A.1 Genauigkeit, alphabetisch
Maximaler sphärischer Winkelabstand über alle 20 Referenzzeilen.
| Sprache | Max. Δ ″ | Ergebnis | Quelle B | Paket B | Werkzeug |
|---|---|---|---|---|---|
| Ada | 0.223931 | PASS | 65.773 | 520.661 | GNAT/GCC 15.2.0 (MSYS2) |
| B4X | 0.232382 | PASS | 63.915 | 550.906 | B4J 10.50 |
| Ballerina | 0.238317 | PASS | 54.944 | 546.455 | Ballerina Swan Lake 2201.13.4 |
| BlitzMax | 1.203843 | PASS | 91.196 | 549.418 | BlitzMax NG 0.154.3.58 |
| C | 0.232031 | PASS | 55.659 | 565.802 | GCC 16.1.0 |
| C# | 0.232031 | PASS | 50.345 | 545.734 | .NET SDK 8.0.423 |
| C++ | 0.238317 | PASS | 56.461 | 546.717 | Microsoft Visual C++ Community |
| Clojure | 0.235614 | PASS | 45.101 | 486.240 | Clojure 1.12.5 / OpenJDK |
| Common Lisp | 0.223203 | PASS | 45.225 | 496.773 | SBCL 2.6.6 |
| D | 0.250215 | PASS | 38.210 | 514.240 | DMD 2.112.0 |
| Dart | 0.228185 | PASS | 42.668 | 538.284 | Dart 3.12.2 |
| Delphi/Object Pascal | 0.232316 | PASS | 56.636 | 524.660 | Free Pascal 3.2.2 |
| Elixir | 0.243787 | PASS | 53.273 | 575.919 | Elixir 1.20.2 / Erlang OTP 29 |
| Erlang | 0.243787 | PASS | 52.475 | 583.700 | Erlang/OTP 29.0.3 |
| F# | 0.216606 | PASS | 121.927 | 758.208 | .NET SDK 8.0.423 |
| Factor | 51.049773 | PASS | 43.312 | 493.140 | Factor 0.101 |
| Fantom | 0.238317 | PASS | 54.847 | 549.148 | Fantom 1.0.83 |
| Fortran | 0.226948 | PASS | 51.037 | 495.006 | GNU Fortran 16.1.0 |
| FreeBASIC | 0.252308 | PASS | 66.512 | 580.763 | FreeBASIC 1.10.1 |
| GNU Octave | 38.034360 | PASS | 35.427 | 503.786 | GNU Octave 11.3.0 |
| Go | 0.239381 | PASS | 39.667 | 526.531 | Go 1.26.5 |
| Groovy | 2.810988 | PASS | 47.731 | 586.421 | Apache Groovy 5.0.2 / OpenJDK |
| Haskell | 0.259614 | PASS | 44.580 | 498.045 | GHC 9.10.3 |
| Haxe | 0.228185 | PASS | 46.913 | 533.441 | Haxe 4.3.7 |
| Java | 0.238317 | PASS | 46.825 | 548.599 | Microsoft OpenJDK 25.0.3 |
| JavaScript | 0.236219 | PASS | 107.767 | 592.039 | Node.js 24.15.0 / Browser ES Modules |
| Julia | 0.229764 | PASS | 30.958 | 477.282 | Julia 1.12.6 |
| Kotlin | 0.238317 | PASS | 39.887 | 505.280 | Kotlin 2.4.10 / OpenJDK |
| Lua | 0.216606 | PASS | 41.719 | 521.245 | Lua 5.4 |
| Nim | 0.228185 | PASS | 38.024 | 520.143 | Nim 2.2.10 |
| OCaml | 0.232382 | PASS | 119.362 | 724.314 | OCaml 5.4.0 |
| Perl | 0.236719 | PASS | 43.107 | 469.668 | Perl 5 |
| PHP | 0.232031 | PASS | 33.017 | 516.442 | PHP 8.3.30 CLI |
| PowerShell | 37.997961 | PASS | 49.973 | 470.165 | PowerShell 7.6.4 |
| Prolog | 38.032226 | PASS | 55.733 | 632.243 | SWI-Prolog 10.0.2 |
| Python | 0.082129 | PASS | 218.903 | 787.360 | Python 3.11.9 |
| R | 0.231526 | PASS | 33.980 | 506.812 | R 4.6.1 |
| Racket | 0.218560 | PASS | 44.652 | 482.854 | Racket 9.2 |
| Ruby | 0.238317 | PASS | 37.165 | 506.816 | Ruby 3.4 |
| Rust | 0.228185 | PASS | 49.635 | 541.242 | rustc 1.94.1 |
| Scala | 0.238317 | PASS | 43.107 | 499.504 | Scala CLI 1.15.0 / OpenJDK |
| Smalltalk | 42.792737 | PASS | 34.747 | 422.800 | Pharo 12 |
| Squirrel | 0.228185 | PASS | 44.919 | 530.616 | Squirrel 3 with float64 build |
| Tcl | 0.232382 | PASS | 47.620 | 468.744 | Tcl 8.6 |
| TypeScript + WebAssembly | 0.239511 | PASS | 57.170 | 555.531 | TypeScript 7.0.2, Rust WASI, Node.js 24.15.0 |
| V | 0.236584 | PASS | 40.341 | 507.133 | V 0.4 |
| Vala/Genie | 0.228185 | PASS | 74.030 | 589.922 | Vala 0.56 |
| Visual Basic .NET | 0.232031 | PASS | 102.111 | 650.099 | .NET SDK 8.0.423 |
| Zig | 0.239824 | PASS | 44.555 | 524.110 | Zig 0.16.0 |
A.2 Geschwindigkeit, schnellste zuerst
Der Faktor 1,000 bezeichnet die schnellste Medianzeit des Prüflaufs.
| Rang | Sprache | Minimum ms | Median ms | Maximum ms | Faktor |
|---|---|---|---|---|---|
| 1 | TypeScript + WebAssembly | 597.377 | 700.999 | 1047.449 | 1.000 |
| 2 | Fortran | 596.688 | 750.360 | 1158.344 | 1.070 |
| 3 | Rust | 523.705 | 823.898 | 1294.582 | 1.175 |
| 4 | B4X | 775.000 | 971.000 | 2194.000 | 1.385 |
| 5 | Haxe | 39.747 | 1077.578 | 2013.806 | 1.537 |
| 6 | Delphi/Object Pascal | 937.000 | 1078.000 | 1672.000 | 1.538 |
| 7 | Zig | 1035.454 | 1160.447 | 2320.055 | 1.655 |
| 8 | C++ | 1223.592 | 1441.870 | 2671.024 | 2.057 |
| 9 | Java | 1284.711 | 1458.187 | 3353.160 | 2.080 |
| 10 | C | 1343.938 | 1486.065 | 3056.110 | 2.120 |
| 11 | Kotlin | 1176.612 | 1593.443 | 5530.074 | 2.273 |
| 12 | Ada | 1460.014 | 1640.974 | 3057.029 | 2.341 |
| 13 | V | 1575.736 | 1878.741 | 2571.347 | 2.680 |
| 14 | D | 1546.526 | 1890.757 | 4220.870 | 2.697 |
| 15 | Go | 1468.523 | 2141.171 | 9256.961 | 3.054 |
| 16 | Visual Basic .NET | 1696.939 | 2216.958 | 3742.810 | 3.163 |
| 17 | F# | 1783.725 | 2231.113 | 3564.241 | 3.183 |
| 18 | Nim | 2119.599 | 2326.564 | 5060.611 | 3.319 |
| 19 | C# | 2374.419 | 2552.401 | 6731.288 | 3.641 |
| 20 | Dart | 2190.595 | 2733.704 | 5027.791 | 3.900 |
| 21 | Scala | 2073.900 | 3242.849 | 7436.041 | 4.626 |
| 22 | OCaml | 2669.212 | 3467.746 | 8892.401 | 4.947 |
| 23 | FreeBASIC | 2767.911 | 3570.477 | 5810.864 | 5.093 |
| 24 | Julia | 3434.719 | 4304.078 | 8335.834 | 6.140 |
| 25 | Fantom | 4241.671 | 5794.304 | 8545.390 | 8.266 |
| 26 | Vala/Genie | 4412.042 | 5820.308 | 8666.353 | 8.303 |
| 27 | Haskell | 6047.352 | 8690.853 | 14693.710 | 12.398 |
| 28 | BlitzMax | 7899.000 | 8742.000 | 12931.000 | 12.471 |
| 29 | JavaScript | 7724.900 | 10157.720 | 23217.210 | 14.490 |
| 30 | Common Lisp | 11056.269 | 14392.095 | 22933.360 | 20.531 |
| 31 | Ballerina | 12341.616 | 16894.464 | 33663.612 | 24.101 |
| 32 | Racket | 16694.584 | 21229.729 | 44060.672 | 30.285 |
| 33 | Erlang | 19354.829 | 24802.406 | 45274.726 | 35.381 |
| 34 | Elixir | 23434.035 | 29699.584 | 53299.712 | 42.367 |
| 35 | PHP | 41451.985 | 49798.621 | 104949.488 | 71.039 |
| 36 | Prolog | 49043.000 | 69317.000 | 255244.000 | 98.883 |
| 37 | Lua | 53249.000 | 69977.000 | 130427.000 | 99.825 |
| 38 | Squirrel | 55843.000 | 71891.000 | 119351.000 | 102.555 |
| 39 | Clojure | 55241.707 | 72206.563 | 171065.047 | 103.005 |
| 40 | Ruby | 66049.112 | 90263.925 | 168102.051 | 128.765 |
| 41 | Factor | 70004.415 | 94462.332 | 151220.285 | 134.754 |
| 42 | Smalltalk | 65113.000 | 95089.000 | 157550.000 | 135.648 |
| 43 | Groovy | 68129.578 | 95282.139 | 143061.528 | 135.923 |
| 44 | Python | 74058.281 | 138890.584 | 308314.450 | 198.132 |
| 45 | Perl | 108115.457 | 154930.755 | 276448.215 | 221.014 |
| 46 | PowerShell | 206315.845 | 250942.054 | 717706.460 | 357.978 |
| 47 | Tcl | 202078.602 | 265143.768 | 494701.078 | 378.237 |
| 48 | R | 168780.000 | 343730.000 | 910730.000 | 490.343 |
| 49 | GNU Octave | 315324.607 | 419255.178 | 922894.954 | 598.082 |
Anhang B. Lizenzabgrenzung
Der projektgeschriebene Rechenkern und die zugehörigen Generatoren und Hilfen stehen, soweit LICENSE-SCOPE.md sie erfasst, unter Apache License 2.0. Datentabellen, externe Ephemeriden, JPL-Kernel und Drittprogramme sind getrennt zu beurteilen. Eine Weitergabe muss LICENSE und NOTICE beilegen, Copyright- und Lizenzvermerke erhalten und geänderte Dateien kenntlich machen. Patentlizenz und Kündigungsregel ergeben sich aus Abschnitt 3 der Apache-Lizenz.
Projektwebseite: https://www.jostjahn.de/amrum-software/ephemeris/