@Julio ”s erinomainen vastaus kuvaa lentoreitin kulman ja selittää, että se on tangentiaalisen suunnan (kohtisuorassa keskirunkoon nähden säteittäiseen vektoriin nähden) ja nykyisen nopeusvektorin välinen kulma.

Olen ensin yrittänyt saada kulman tästä lausekkeesta, mutta se on ilmeisesti väärä , koska $ \ arccos $ on tasainen funktio ja kulma voi nousta $ – \ pi / 2 $ – $ \ pi / 2 $:

$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ oikea) – \ frac {\ pi} {2} \ \ \ \ text {(väärä!)} $$

Olen integroinut kiertoradat GM: n ($ \ mu $) ja SMA: n ($ a $) yhtenäisyyden ja lähtöetäisyyksien välillä 0,2-1,8. Tämä tekee ajanjaksosta aina $ 2 \ pi $. Kun piirrän toiminnoni tuloksen, saan liikaa heilumia.

Millä lausekkeella voin saada oikean lentoreitin kulmakammion tilavektoreista alkaen?

Virheellisen osan tarkistettua pythonia arvostetaan, mutta se ei todellakaan ole välttämätön vastauksen saamiseksi.

kiertoradat

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() 

Kommentit

  • jos tämä kysymys olla TLDRed osoittaakseen, että se oli koodausvirhe, koska näyttää siltä, että kysytään mitä ’ on vialla kaavassa

Vastaus

Tämä on ongelma, joka on vaivannut ihmisryhmiä, jotka tuntevat hyvin kiertoradan dynamiikan, mutta jotka oppivat käyttämään erilaisia oppikirjoja: lentoreitin kulmalle on kaksi erilaista määritelmää ”!!

$ \ gamma $: n, tangentiaalisen suunnan ja nopeusvektorin välisen kulman lisäksi on $ \ beta $, säteen suunta ja nopeusvektori. Ihmiset sanovat usein ”lentoradan kulman” sanomatta mitä määritelmää he käyttävät . Hämmentävää! (Huomasin juuri, että Julion vastauksen kaavio näyttää myös $ \ beta $)

Jos työskentelet $ \ beta $: n kanssa $ \ gamma $: n kanssa, $ \ beta $ antaa

$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {1} $$

joka siirtyy 0: sta (”suoraan ylös”) dollariin $ \ pi $ ( ”suoraan alas”). Käyttämällä $ \ gamma $, ”suoraan ylös” on $ \ pi / 2 $ ja ”suoraan alas” on $ – \ pi / 2 $, joten muuntamalla $ \ beta $ dollariksi \ gamma $ vähennät vain $ \ beta $ $ \ pi / 2 $:

$$ \ gamma = \ pi / 2 – \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ oikea) \ tag {2} $$

Tämä vastaa

$$ \ gamma = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$

En tunne kieltä käytit laskelmissasi ja juonissasi, joten en ole tarkastellut algoritmiasi saadaksesi selville, miksi ”liikaa heilumia”.

Kommentit

  • Kiitos! Olen ’ lisännyt tunnisteet (numerot) yhtälöihin. Voisitko sanoa, että heilutuksia on liikaa, vai onko tämä heiluttava käyttäytyminen todella järkevää? Koska $ \ beta $ (eq 1) on sama kuin virheellinen $ \ gamma $, lukuun ottamatta puoli-pi: n siirtymää, tontissani olevien heilutusten tulisi olla samat kuin $ \ beta $: n oikealla juovalla. (eq 1).
  • Näyttää siltä, että minulle liikaa heiluttaa. ’ Tarkistan sen myöhemmin.
  • @uhoh, Itse asiassa yhtälöni 1 on vain yhtälönne negatiivinen . Jokin muu on vialla. Tietenkin tiedät, että jokin on vialla, koska kaikki piirretyt $ \ gamma $ s ovat negatiivisia tai nollaa, mikä ’ voi olla paitsi sisäänpäin suuntautuva spiraali. Kepleriläiselle eksentriselle kiertoradalle $ \ gamma $: n tulisi ylittää nolla tarkalleen kahdesti, periapsi- ja apoapsis-kohdissa ja olla yksitoikkoinen ääripään välillä, sekä lyhyellä (ääripää periapiksen kautta toiseen ääripäähän) että pitkällä (ääripää apoapiksen kautta toiseen ääripäähän) ) segmenttejä. Katson ’, voinko tehdä esimerkin siitä, miltä $ \ gamma $ -käyrän tulisi näyttää.
  • Hups, minun olisi pitänyt sanoa yllä, ” Oma ekv. 2 on vain negatiivisi. ” Minun pitäisi kirjautua ulos ja mennä nukkumaan!
  • @uhoh ” tangentiaalinen ” ensisijaiseen palloon keskittyvälle pallolle, ei kiertoradalle. Henkilökohtaisesti minä ’ haluan sanoa mieluummin ” sivunopeus ”, mutta ensimmäinen Orbital Dynamics -professori Stanfordissa käytti ” tangentiaalista ”.

vastaus

Löysin virheen komentosarjasta, se johtui ”homebrew” pisteestä.Minulla oli ylimääräinen neliö:

dotted = ((xx*vv)**2).sum(axis=0) # WRONG dotted = (xx*vv).sum(axis=0) # Correct 

Joten käyttämällä tätä plus @TomSpilker ”s erinomaiset selvennykset Olen laskenut gammaa seuraavilla kahdella tavalla:

Tapa 1:

$$ \ gamma_1 = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$

Tapa 2:

Raaan voiman vaihtoehtoinen tapa tarkistaa uudelleen:

$$ \ 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 $$

Moduulitoimintoa tarvitaan todella vain tietokoneohjelmassa, koska jokainen teeta tulee erillisestä arctan2-toiminnosta:

kirjoita kuva kuvaus täällä

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) 

Kommentit

  • Todellakin uusi $ \ gamma $ -tontti on mitä odotin. Hurraa! Hyvä nukkuminen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *