@Julio “의 훌륭한 답변 은 비행 경로 각도를 설명하고 설명합니다. 접선 방향 (중앙 몸체에 대한 방사형 벡터에 수직)과 현재 속도 벡터 사이의 각도입니다.
이 식에서 각도를 구하려고 시도했지만 분명히 잘못되었습니다. , $ \ arccos $는 짝수 함수이고 각도는 $-\ pi / 2 $에서 $ \ pi / 2 $까지 갈 수 있습니다.
$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right)-\ frac {\ pi} {2} \ \ \ \ text {(틀 렸습니다!)} $$
저는 GM ($ \ mu $) 및 SMA ($ a $)의 통합 궤도와 0.2에서 1.8까지의 시작 거리를 통합했습니다. 따라서 기간은 항상 $ 2 \ pi $가됩니다. 내 함수의 결과를 플로팅 할 때 너무 많은 흔들림이 발생합니다.
상태 벡터에서 시작하여 올바른 비행 경로 각도 감마를 얻기 위해 어떤 식을 사용할 수 있습니까?
잘못된 부분에 대한 수정 된 파이썬은 감사 할 것입니다. 그러나 확실히 대답을 위해 필요하지는 않습니다.
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()
댓글
- 이 질문이어야합니다. TLDRed로 표시하여 코딩 오류임을 나타내십시오. 여전히 수식에 ' 무엇이 잘못되었는지 묻는 것 같습니다.
Answer
이것은 궤도 역학에 대해 매우 잘 알고 있지만 다른 교과서를 사용하여 학습 한 사람들 그룹을 괴롭히는 문제입니다. “비행 경로 각도”에 대한 두 가지 다른 정의가 있습니다. “!!
접선 방향 과 속도 벡터 사이의 각도 인 $ \ gamma $ 외에도 $ \ beta $가 있습니다. 반경 방향 과 속도 벡터입니다. 사람들은 종종 어떤 정의를 사용하고 있는지 를 말하지 않고 “비행 경로 각도”라고 말합니다. 혼란 스럽습니다. (Julio의 답변에있는 다이어그램에도 $ \ beta $가 표시되어 있습니다.)
$ \ gamma $ 대신 $ \ beta $로 작업하는 경우 $ \ beta $는 다음에서 제공됩니다.
$$ \ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {1} $$
0 ( “직선”)에서 $ \ pi $ ( “쭉 아래로”). $ \ gamma $를 사용하면 “straight up”은 $ \ pi / 2 $이고 “straight down”은 $-\ pi / 2 $이므로 $ \ beta $를 $ \ gamma $로 변환하면 다음에서 $ \ beta $를 빼면됩니다. $ \ pi / 2 $ :
$$ \ gamma = \ pi / 2-\ arccos \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {2} $$
이것은
$$ \ gamma = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$
언어에 익숙하지 않습니다. 계산 및 플롯에 사용했기 때문에 “너무 많은 흔들림”이있는 이유를 알기 위해 “귀하의 알고리즘을 검토하지 않았습니다.
댓글
- 감사합니다! ' 등식에 태그 (숫자)를 추가했습니다. 너무 많은 흔들림이 있다고 말 하시겠습니까, 아니면 실제로 그 흔들리는 행동이 합리적입니까? $ \ beta $ (eq 1)은 1/2 파이의 오프셋을 제외하고 잘못된 $ \ gamma $와 동일하므로 내 플롯의 흔들림은 $ \ beta $의 적절한 플롯의 흔들림과 동일해야합니다. (eq 1).
- 너무 많이 흔들리는 것 같습니다. 나는 ' 나중에 확인할 것입니다.
- @uhoh, 사실 내 eq 1은 방정식의 음수 일뿐입니다. 다른 문제가 있습니다. 물론 모든 $ \ gamma $ s가 음수이거나 0이기 때문에 무언가 가 잘못되었음을 알고 있습니다. ' 내부 나선형을 제외하고는 불가능합니다. 케 플레 리안 편심 궤도의 경우 $ \ gamma $는 근점과 끝점에서 정확히 두 번 0을 교차해야하며, 극단 사이에서 단조 적이어야합니다. ) 세그먼트. ' $ \ gamma $ 곡선의 예를 그릴 수 있는지 살펴 보겠습니다.
- 이런, 위에서 말 했어야합니다. " 내 EQ. 2 는 당신의 부정적인 것입니다. " 로그 오프하고 잠자리에 들겠습니다!
- @uhoh " 접선 "은 궤도가 아니라 1 차 중심에있는 구에 연결됩니다. 개인적으로 ' " 횡 속도 "라고 말하고 싶지만 첫 번째 궤도 역학 교수 Stanford에서는 " 접선 "을 사용했습니다.
답변
스크립트에서 오류를 발견했습니다. 이는 내 “자작”내적 때문이었습니다.추가 제곱이 있습니다.
dotted = ((xx*vv)**2).sum(axis=0) # WRONG dotted = (xx*vv).sum(axis=0) # Correct
그래서 이것을 사용하여 @TomSpilker “s 뛰어난 설명 감마를 계산하기 위해 다음 두 가지 방법을 사용했습니다.
방법 1 :
$$ \ gamma_1 = \ arcsin \ left (\ frac {\ mathbf {r \ centerdot v}} {| \ mathbf {r} | \ | \ mathbf {v} |} \ right) \ tag {3} $$
방법 2 :
무차별 검사를위한 대체 방법 :
$$ \ 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 $$
각 세타가 별도의 arctan2 연산에서 나오기 때문에 모듈로 연산은 컴퓨터 프로그램에서만 실제로 필요합니다.
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)
댓글
- 참으로 새로운 $ \ 감마 $ 플롯은 내가 기대 한 것입니다. 만세! 좋은 조사입니다.