@Julio “s kiváló válasz leírja a repülési út szögét, és elmagyarázza, hogy a tangenciális irány (a radiális vektorra a központi testre merőleges) és az aktuális sebességvektor közötti szög.
Először megpróbáltam megszerezni a szöget ebből a kifejezésből, de nyilvánvalóan téves , mivel a $ \ arccos $ egyenletes függvény, és a szög $ – \ pi / 2 $ -tól $ \ pi / 2 $ -ig terjedhet:
$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) – \ frac {\ pi} {2} \ \ \ \ text {(helytelen!)} $$
Integráltan kerestem a GM ($ \ mu $) és az SMA ($ a $) egységeket, és a kezdő távolságok 0,2 és 1,8 között voltak. Ettől az időszak mindig $ 2 \ pi $. Amikor a funkcióm eredményét ábrázolom, túl sok csóválást kapok.
Milyen kifejezést használhatok az állapotvektoroktól kezdődően a gamma repülési út helyes szögének megszerzéséhez?
A hibás részhez tartozó felülvizsgált python értékelni fog, de biztosan nem szükséges a válaszhoz.
def deriv(X, t): x, v = X.reshape(2, -1) acc = -x * ((x**2).sum())**-1.5 return np.hstack((v, acc)) import numpy as np import matplotlib.pyplot as plt from scipy.integrate import odeint as ODEint halfpi, pi, twopi = [f*np.pi for f in (0.5, 1, 2)] T = twopi time = np.linspace(0, twopi, 201) a = 1.0 rstarts = 0.2 * np.arange(1, 10) vstarts = np.sqrt(2./rstarts - 1./a) # from vis-viva equation answers = [] for r, v in zip(rstarts, vstarts): X0 = np.array([r, 0, 0, v]) answer, info = ODEint(deriv, X0, time, full_output= True) answers.append(answer.T) gammas = [] for a in answers: xx, vv = a.reshape(2, 2, -1) dotted = ((xx*vv)**2).sum(axis=0) rabs, vabs = [np.sqrt((thing**2).sum(axis=0)) for thing in (xx, vv)] gamma = np.arccos(dotted/(rabs*vabs)) - halfpi gammas.append(gamma) if True: plt.figure() plt.subplot(4, 1, 1) for x, y, vx, vy in answers: plt.plot(x, y) plt.plot(x[:1], y[:1], ".k") plt.plot([0], [0], "ok") plt.title("y vs x") plt.subplot(4, 1, 2) for x, y, vx, vy in answers: plt.plot(time, x, "-b") plt.plot(time, y, "--r") plt.title("x (blue) y (red, dashed)") plt.xlim(0, twopi) plt.subplot(4, 1, 3) for x, y, vx, vy in answers: plt.plot(time, vx, "-b") plt.plot(time, vy, "--r") plt.title("vx (blue) vy (red), dashed") plt.xlim(0, twopi) plt.subplot(4, 1, 4) for gamma in gammas: plt.plot(time, gamma) plt.title("gamma?") plt.xlim(0, twopi) plt.show()
megjegyzések
- kéne ennek a kérdésnek legyen TLDRed, hogy jelezze, kódolási hiba volt, mivel továbbra is azt kérdezi, hogy ‘ mi a baj a képlettel
Válasz
Ez egy olyan probléma, amely olyan emberek csoportjait sújtotta, akik jól ismerik az orbitális dinamikát, de akik különböző tankönyveket tanultak: a repülési út szögének két különböző meghatározása van “!!
A $ \ gamma $ mellett, a tangenciális irány és a sebességvektor közötti szög mellett van $ \ beta $, a szög a radiális irány és a sebességvektor. Az emberek gyakran mondják a “repülési út szöge” szót anélkül, hogy megadnák, hogy melyik meghatározást használják . Zavarba ejtő! (Csak észrevettem, hogy a Julio válaszában szereplő diagram a $ \ beta $ -ot is mutatja)
Ha a $ \ beta $ helyett $ \ gamma $ helyett dolgozik, akkor a $ \ beta $ értéket a következő adja:
$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {1} $$
amely 0-tól (“egyenesen”) és $ \ pi $ ( “egyenesen lefelé”). A $ \ gamma $ használatával az “egyenesen felfelé” $ \ pi / 2 $, az “egyenesen lefelé” pedig $ – \ pi / 2 $, tehát a $ \ beta $ konvertálása $ \ gamma $ -ba csak levonja a $ \ beta $ -ot $ \ pi / 2 $:
$$ \ gamma = \ pi / 2 – \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {2} $$
Ez egyenértékű
$$ \ gamma = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$
Nem ismerem a nyelvet Ön a számításaihoz és az ábráihoz használt, ezért nem néztem meg az algoritmusát, hogy miért van “túl sok csóválás”.
Megjegyzések
- Köszi! ‘ Hozzáadtam címkéket (számok) az egyenletekhez. Azt mondanád, hogy túl sok a kuncogás, vagy valójában ésszerű ez a hullámzó viselkedés? Mivel a $ \ beta $ (eq 1) értéke megegyezik a hibás $ \ gamma $ -mmal, kivéve a fél pi eltolását, akkor a cselekményemben a wiggereknek meg kell egyezniük a $ \ beta $ megfelelő diagramjának (1. egyenlet).
- Úgy tűnik, hogy nekem túl sok csóvál. ‘ Ezt később ellenőrizni fogom.
- @uhoh, Valójában az 1. egyenletem csak az egyenleted negatív ja. Valami más nincs rendben. Természetesen tudja, hogy valami nincs rendben, mert az összes ábrázolt $ \ gamma $ s negatív vagy nulla, ami ‘ nem lehet egy befelé irányuló spirál kivételével. Kepleri excentrikus pályán a $ \ gamma $ -nak pontosan kétszer kell átlépnie a nullát, a periapsis és az apoapsis során, és monotonnak kell lennie az extrém között, mind a rövid (a végtag periapsison át a másik végletig), mind a hosszú (véglet az apoapsison át a másik végletig) esetén. ) szegmensek. ‘ Megnézem, tudok-e példát hozni arra, hogy milyen legyen a $ \ gamma $ görbe.
- Hoppá, fentebb kellett volna mondanom, ” Eq. A 2 csak a negatívum. ” Ki kell jelentkeznem és lefeküdnöm!
- @uhoh ” tangenciális ” az elsődleges középpontú gömbhöz, nem pedig a pályához. Személy szerint ‘ inkább azt mondanám, hogy ” oldalirányú sebesség “, de az első orbitális dinamika professzorom a Stanfordnál ” tangenciális “.
Válasz
A hibát a szkriptben találtam, ez a “homebrew” ponttermékemnek volt köszönhető.Volt egy extra négyzet:
dotted = ((xx*vv)**2).sum(axis=0) # WRONG dotted = (xx*vv).sum(axis=0) # Correct
Tehát ezzel a plusz @TomSpilker “s kiváló pontosítások A következő két módszert használtam a gamma kiszámításához:
1. módszer:
$$ \ gamma_1 = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$
2. módszer:
Brute-force alternatív módszer a kettős ellenőrzéshez:
$$ \ theta_r = \ arctan2 (y, x) $$
$$ \ theta_v = \ arctan2 (vy, x) $$
$$ \ theta_ {tanj} = \ theta_r + \ frac {\ pi} {2} $$
$$ \ gamma_2 = \ theta_ {tanj} – \ theta_v $$
$$ \ gamma_ {2mod} = \ mod (\ gamma_2 + \ pi, 2 \ pi) – \ pi $$
A modulo műveletre csak a számítógépes programban van szükség, mivel minden theta különálló arctan2 műveletből származik:
gammas_1, gammas_2 = [], [] for a in answers: xx, vv = a.reshape(2, 2, -1) dotted = (xx*vv).sum(axis=0) rabs, vabs = [np.sqrt((thing**2).sum(axis=0)) for thing in (xx, vv)] gamma_1 = np.arcsin(dotted/(rabs*vabs)) # Per Tom Spilker"s answer Eq. 3 theta_r = np.arctan2(xx[1], xx[0]) theta_v = np.arctan2(vv[1], vv[0]) theta_tanj = theta_r + halfpi gamma_2 = theta_tanj - theta_v gamma_2 = np.mod(gamma_2 + pi, twopi) - pi gammas_1.append(gamma_1) gammas_2.append(gamma_2) plt.figure() plt.subplot(2, 1, 1) for gamma_1 in gammas_1: plt.plot(time, gamma_1) plt.title("gammas_1", fontsize=16) plt.subplot(2, 1, 2) for gamma_2 in gammas_2: plt.plot(time, gamma_2) plt.title("gammas_2", fontsize=16)
Megjegyzések
- Valóban az új $ \ gamma $ plot az, amire számítottam. Hurrá! Jó süllyedés.