Entwurf einer elliptischen Transferbahn

Ich habe an einem Beispiel in Charles Browns "Elements of Spacecraft Design" gearbeitet, aber ich kann nicht herausfinden, wie die Flugzeit berechnet wurde. Hier ist das Problem Beispiel 6.5 . Ich habe beim Berechnen von a, rP und e die richtige Antwort erhalten, aber danach hatte ich keinen Erfolg. Könnte jemand helfen?

Es sieht so aus, als hätten sie gerade die julianischen Daten berechnet und sie subtrahiert. Was erscheint daran verwirrend?
Können Sie das Problem bearbeiten und hier einfügen? Wir sollten nicht woanders hingehen müssen, und es wird gegen Linkfäule helfen.
Ich habe die Frage auf das Original zurückgesetzt, Rusty. Zwei Seiten aus dem referenzierten Buch als Bilder zu haben, verstößt sowohl gegen Urheberrechts- als auch Barrierefreiheitsbedenken.

Antworten (2)

Flugzeit berechnen

Es ist einfach, wenn Sie den Gravitationsparameter kennen μ G M , die große Halbachse a , die Exzentrizität e , die anfängliche wahre Anomalie θ 0 , und die letzte wahre Anomalie θ 1 (oder gleichwertig die Änderung der wahren Anomalie Δ θ θ 1 θ 0 ).

Schritt 1: Berechnen Sie die anfänglichen und endgültigen exzentrischen Anomalien aus der Exzentrizität und den anfänglichen und endgültigen wahren Anomalien über

bräunen E 2 = 1 e 1 + e bräunen θ 2
Schritt 2: Berechnen Sie die anfänglichen und endgültigen mittleren Anomalien aus der Exzentrizität und die anfänglichen und endgültigen exzentrischen Anomalien über die Kepler-Gleichung
M = E e Sünde E
Schritt 3: Berechnen Sie die Änderung der mittleren Anomalie über
Δ M = M 2 M 1
Schritt 4: Berechnen Sie die mittlere Bewegung aus dem Gravitationsparameter und der Länge der großen Halbachse über
n = μ a 3
Schritt 5: Berechnen Sie die Flugzeit aus der mittleren Bewegung und der Änderung der mittleren Anomalie über
Δ t = Δ M n


Wie man eine Transferbahn entwirft

Das ist deutlich anspruchsvoller. Hier ist das Ziel, die Transferbahn bei der Anfangs- und Endposition des Objekts zu finden. Das ist Lamberts Problem. Die zugrundeliegenden Gleichungen sind transzendent; es gibt keine schöne Lösung in geschlossener Form. Stattdessen müssen Sie eine Vermutung anstellen und die Vermutung dann iterativ verfeinern. Es gibt eine Reihe von Möglichkeiten, Lamberts Problem iterativ zu lösen.

Im obigen Beispiel für „Theta at Earth = 180“, Theta_1 = 180 und Theta_2 = 312,99. Ich würde dann E und M für beide berechnen und diese von da an verwenden, richtig? Ich mache das, aber ich bekomme keine 116,15 Tage. Ich bekomme 168.

Bearbeiten: In der anderen Antwort von @DavidHammon finden Sie mehr über die Mathematik für hyperbolische Umlaufbahnen .

Ich werde die klare Antwort von @ David Hammon ergänzen, indem ich die parabolischen und hyperbolischen Äquivalente einbeziehe, nur um alles an einem Ort zu haben. Ich habe diese handliche Tabelle transkribiert und alternative Formen für hinzugefügt E und F aus Wikipedia. Ich habe einige Stichproben mit numerischer Integration durchgeführt, nur um sicherzustellen, dass die Ergebnisse übereinstimmen.

Ellipse, Kreis ( 0 ϵ < 1 ) :

bräunen E 2 = 1 e 1 + e bräunen θ 2
oder
cos E = e + cos θ 1 + e cos θ bräunen θ 2 ,
M = E e Sünde E ,
Δ M = M 2 M 1 ,
Δ t = a 3 μ Δ M ,

Hyperbel ( ϵ > 1 ) :

Tanh F 2 = e 1 e + 1 bräunen θ 2
oder
cosch F = e + cos θ 1 + e cos θ bräunen θ 2 ,
M = e Sünde F F ,
Δ M = M 2 M 1 ,
Δ t = ( a ) 3 μ Δ M ,

Parabel ( ϵ = 1 ) :

D = bräunen θ 2 ,
M = D + D 3 3 ,
Δ M = M 2 M 1 ,
Δ t = q 3 μ Δ M ,


Um die große Halbachse zu erhalten a oder zu bekommen q , verwenden Sie Folgendes (machen Sie sich keine Sorgen a ist negativ für die Hyperbel):

Ellipse, Hyperbel:

a = r p e r ich 1 e

Ellipse:

a = r p e r ich + r a p Ö 2

Kreis:

a = r

Parabel:

q = r p e r ich

Ein kurzer Check mit μ = 1 und r p e r ich = 1 :

 e      theta      a     v_peri    E/D/F       M         t
1.5   90.000000  -2.0   1.581139  55.14281  40.94513  2.021271
1.0   90.000000   n/a   1.414214  57.29578  76.39437  1.885618
0.5   90.000000   2.0   1.224745  60.00000  35.19020  1.737177
0.0   90.000000   1.0   1.000000  90.00000  90.00000  1.570796

Wenn Sie es in Python versuchen möchten:

def deriv(X, t):
    x, v = X.reshape(2, -1)
    acc  = -mu * x * ((x**2).sum())**-1.5
    return np.hstack((v, acc))

def get_D(theta, e):
    if e == 1.0:
        D    = np.tan(0.5*theta)
    else:
        D    = np.nan
    return D

def get_E(theta, e):
    if e < 1.0:
        term = np.sqrt((1.-e)/(1.+e)) * np.tan(0.5*theta)
        E    = 2.*np.arctan(term)
    else:
        E    = np.nan
    return E

def get_E_alt(theta, e):
    if e < 1.0:
        term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
        E    = np.arccos(term)
    else:
        E    = np.nan
    return E

def get_F(theta, e):
    if e > 1.0:
        term = np.sqrt((e-1.)/(e+1.)) * np.tan(0.5*theta)
        F    = 2.*np.arctanh(term)
    else:
        F    = np.nan
    return F

def get_F_alt(theta, e):
    if e > 1.0:
        term = (e + np.cos(theta)) / (1. + e*np.cos(theta))
        F    = np.arccosh(term)
    else:
        F    = np.nan
    return F

def get_M_from_E(E, e):
    if e < 1.0:
        M = E - e*np.sin(E)
    else: 
        M = np.nan
    return M

def get_M_from_F(F, e):
    if e > 1.0:
        M = e*np.sinh(F) - F
    else: 
        M = np.nan
    return M

def get_M_from_D(D, e):
    if e == 1.0:
        M = D + D**3/3.
    else: 
        M = np.nan
    return M

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint as ODEint

# http://www.bogan.ca/orbits/kepler/orbteqtn.html

quarterpi, halfpi, pi, twopi = [f*np.pi for f in [0.25, 0.5, 1, 2]]
rads, degs = pi/180, 180/pi

mu = 1.0

th0, th1 = 0.0, halfpi
print "th0, th1 (degs): ", degs*th0, degs*th1

eccs = [1.5, 1.0, 0.5, 0.0]

for e in eccs:

    print "e: ", e

    rp =  1.0  # periapsis

    if e < 1.0:
        print "     is ellipse!"

        ra = rp * (1+e)/(1-e)
        print "rp, ra: ", rp, ra

        a0 = 0.5*(rp + ra)
        v0 = np.sqrt(mu * (2./rp - 1./a0))
        print "a0, v0: ", a0, v0

        E0,  E1  = [get_E(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_E(E, e)  for E  in [E0,  E1 ]]
        print "E0, E1 (degs): ", degs*E0, degs*E1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "E0, E1: ", E0, E1
        print "M0, M1: ", M0, M1

        dt = np.sqrt(a0**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    elif e > 1.0:
        print "     is hyperbola!"

        ra = rp * (1+e)/(1-e)
        print "rp, ra: ", rp, ra

        a0 = 0.5*(rp + ra)
        v0 = np.sqrt(mu * (2./rp - 1./a0))
        print "a0, v0: ", a0, v0

        F0,  F1  = [get_F(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_F(F, e)  for F  in [F0,  F1 ]]
        print "F0, F1 (degs): ", degs*F0, degs*F1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "F0, F1: ", F0, F1
        print "M0, M1: ", M0, M1

        dt = np.sqrt((-a0)**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    elif e == 1.0:
        print "     is parabola!"

        print "rp: ", rp

        v0 = np.sqrt(mu * (2./rp))
        print "v0: ", v0

        D0,  D1  = [get_D(th, e) for th in [th0, th1]]
        M0,  M1  = [get_M_from_D(D, e)  for D  in [D0,  D1 ]]
        print "D0, D1 (degs): ", degs*D0, degs*D1
        print "M0, M1 (degs): ", degs*M0, degs*M1

        print "D0, D1: ", D0, D1
        print "M0, M1: ", M0, M1

        q = rp

        dt = np.sqrt(2.*q**3/mu) * (M1-M0)

        print "dt (sec): ", dt

    time = np.array([0, dt])
    X0   = np.array([rp, 0, 0, v0])

    answer, info = ODEint(deriv, X0, time, atol=1E-13, rtol=1E-13, full_output=True)

    x, y, vx, vy = answer.T
    theta = np.arctan2(y, x)

    print degs*theta[0], degs*theta[-1], " should be ", degs*th0, degs*th1
Bearbeitungsvorschläge willkommen!
Hier liegt ein Problem vor! Wie in diesem Kommentar erwähnt, wurden einige davon falsch transkribiert. Ich werde das heute nach dem Kaffee beheben ...