본문 바로가기
항공우주/우주역학

라그랑지 계수 (Lagrange coefficients) - 1

by 깊은대학 2023. 11. 27.

어느 우주비행체의 초기 위치벡터 r0 와 속도벡터 v0 가 주어졌을 때, 실제 비행각(true anomaly)이 Δθ 만큼 변화한 후, 변화된 위치벡터와 속도벡터 r,v 를 초기 위치벡터 및 속도벡터, 그리고 Δθ 의 함수로 표현하고자 한다.

 

 

우주비행체는 궤도면(orbital plane) 상에서만 운동하므로(https://pasus.tistory.com/96) 위치벡터와 속도벡터 r,v 는 항상 궤도면 상에 존재한다. 따라서 임의의 시간에서의 위치벡터와 속도벡터는 초기 위치벡터와 속도벡터 r0,v0 의 선형 조합으로 표현할 수 있다. 즉,

 

(1)r=f r0+g v0v=f˙ r0+g˙ v0

 

여기서 fg 는 시간의 함수로서 라그랑지 계수(Lagrange coefficients) 또는 'fg 함수' 라고 한다. 따라서 fgΔθ 의 함수로 나타낼 수 있다면 목적을 달성할 수 있다.

먼저 궤도중심좌표계(perifocal frame)에서 위치벡터와 속도벡터를 구해 보자 (https://pasus.tistory.com/288). 참고로 궤도중심좌표계는 관성좌표계이므로 3차원 공간상에 고정되어 있다.

 

(2)r=x p^1+y p^2v=x˙ p^1+y˙ p^2

 

여기서

 

(3)x=rcosθ,     y=rsinθx˙=μhsinθ,     y˙=μh(e+cosθ)

 

이다. 식 (2)에 의해서 초기 위치벡터와 속도벡터도 다음과 같이 표현할 수 있다.

 

(4)r0=x0 p^1+y0 p^2v0=x˙0 p^1+y˙0 p^2

 

식 (4)로부터 궤도중심좌표계의 p^1 축과 p^2 축을 r0v0 의 함수로 나타낼 수 있다면 식 (2)에 의해서 식 (1)과 같은 관계식을 얻을 수 있을 것이다.

식 (4)에서 p^2 를 계산하면,

 

(5)p^2=1y0r0x0y0p^1

 

인데 이를 v0 식에 대입하면 다음과 같이 된다.

 

(6)v0=x˙0 p^1+y˙0(1y0r0x0y0p^1)=(x˙0y0y˙0x0y0)p^1+y˙0y0r0

 

한편 각운동량 벡터는 정의에 의해서 다음과 같이 계산할 수있다.

 

(7)h0=r0×v0=(x0y˙0y0x˙0)p^3=h p^3

 

여기서

 

h=x0y˙0y0x˙0

 

이다. h 를 식(6)에 대입하면 v0 는 다음과 같이 된다.

 

(8)v0=hy0p^1+y˙0y0r0

 

식 (8)에서 p^1 을 계산하고,

 

(9)p^1=y˙0hr0y0hv0

 

이를 식 (5)에 대입하면,

 

(10)p^2=1y0r0x0y0(y˙0hr0y0hv0)=hx0y˙0y0hr0+x0hv0=x˙0hr0+x0hv0

 

이 된다. 이제 p^1p^2r0v0 의 함수로 구했으므로 식 (9)와 (10)을 식 (2)에 대입한다.

 

(11)r=x(y˙0hr0y0hv0)+y(x˙0hr0+x0hv0)=xy˙0yx˙0hr0+xy0+yx0hv0v=x˙(y˙0hr0y0hv0)+y˙(x˙0hr0+x0hv0)=x˙y˙0y˙x˙0hr0+x˙y0+y˙x0hv0

 

식 (11)과 (1)을 비교하면 라그랑지 계수를 다음과 같이 구할 수 있다.

 

(12)f=xy˙0yx˙0h,     g=xy0+yx0hf˙=x˙y˙0y˙x˙0h,     g˙=x˙y0+y˙x0h

 

다시 식 (1)을 이용하며 각운동량 벡터를 계산해 보면,

 

(13)h=r×v=(fr0+gv0)×(f˙r0+g˙v0)=(fg˙f˙g)(r0×v0)=(fg˙f˙g)h0

 

이 되는데, 각운동량 벡터는 상수벡터이므로 h=h0 이기 때문에

 

(14)fg˙f˙g=1

 

이 됨을 알 수 있다. 즉 라그랑지 계수 4개는 서로 독립적이지 않고 4개 중 3개만 알면 나머지는 식 (14)를 이용하여 계산할 수 있다.

한편 식 (3)에 의해서 초기 위치와 속도의 성분은 다음과 같이 계산할 수 있으므로,

 

(15)x0=r0cosθ0,     y0=r0sinθ0x˙0=μhsinθ0,     y˙0=μh(e+cosθ0)

 

이를 식 (3)과 함께 식 (12)에 대입하면 라그랑지 계수를 계산할 수 있다.

 

 

먼저 f 를 계산해 보자.

 

(16)f=xy˙0yx˙0h=1h[rcosθμh(e+cosθ0)+rsinθμhsinθ0]=μrh2[ecosθ+cosθcosθ0+sinθsinθ0]=μrh2(ecosθ+cos(θθ0))=μrh2(ecosθ+cosΔθ)

 

여기서 Δθ=θθ0 이다. 한편

 

(17)r=h2μ11+ecosθ

 

에서 ecosθ=h2μr1 이기 때문에 식 (16)은 다음과 같이 정리된다.

 

(18)f=1μrh2(1cosΔθ)

 

같은 방법으로 g 를 계산해 보면 다음과 같다.

 

(19)g=xy0+yx0h=1h[(rcosθ)r0sinθ0+rsinθr0cosθ0]=rr0h(cosθsinθ0+sinθcosθ0)=rr0hsin(θθ0)=rr0hsinΔθ

 

g˙ 은 다음과 같이 계산된다.

 

(20)g˙=x˙y0+y˙x0h=1h[μhsinθr0sinθ0+μh(e+cosθ)r0cosθ0]=μr0h2(sinθsinθ0+cosθcosθ0+ecosθ0)=μr0h2(cos(θθ0)+(h2μr01))=1μr0h2(1cosΔθ)

 

마지막으로 f˙ 은 식 (14)를 이용하여 계산할 수 있다.

 

(21)f˙=1g(fg˙1)=hrr0sinΔθ[(1μrh2(1cosΔθ))(1μr0h2(1cosΔθ))1]=hrr0sinΔθ[μr0h2(1cosΔθ)μrh2(1cosΔθ)+μ2rr0h4(1cosΔθ)2]=μh(1cosΔθ)sinΔθ[μh2(1cosΔθ)1r01r]

 

식 (18)~(21)에 r 이 있으므로 이것도 r0,v0Δθ 의 함수로 표현할 필요가 있다. 식 (17)로부터 다음식을 얻을 수 있다.

 

(22)r=h2μ11+ecos(θ0+Δθ)=h2μ11+ecosθ0cosΔθesinθ0sinΔθ

 

여기서 ecosθ0=h2μr01 이고, r˙=μhesinθ 이므로(https://pasus.tistory.com/288), rr˙=rv 의 관계식을 이용하면,

 

(23)esinθ0=hμr˙0=hμr0v0r0

 

이 된다. 이를 식 (22)에 대입하면 r 은 다음과 같이 된다.

 

(24)r=h2μ11+(h2μr01)cosΔθ(hμr0v0r0)sinΔθ

 

정리하면, 어느 우주비행체의 초기 위치벡터 r0 와 속도벡터 v0 가 주어졌을 때, 실제 비행각이 Δθ 만큼 변화한 후의 위치벡터와 속도벡터 r,v 를 구하는 방법은 다음과 같다.

1. r0v0 로부터 r0 와 각운동량 h 를 계산한다.
2. 식 (24)로 r 을 계산한다.
3. 식 (18)~(21)로 라그랑지 계수를 계산한다.
4. 식 (1)로 r,v 를 계산한다.

 

 

다음은 위 알고리즘을 매트랩 코드로 구현한 것이다.

 

function [r_vec, v_vec] = kepler_the(r0_vec, v0_vec, d_the)

% [r_vec, v_vec] = kepler_the(r0_vec, v0_vec, d_the)
%        given r0_vec, r0_vec and true anomaly increments
%        compute r_vec and v_vec
%       
% Input  r0_vec: initial position vector in km
%        v0_vec: initial velocity vector in km/sec
%        d_the: true anomaly change (degrees)
% Output r_vec: final position vector in km
%        v_vec: final velocity vector in km/sec
%
% all in inertial frame
%
% coded by st.watermelon

mu_e=398600; % gravitational parameter km^3/s^2

% step 1
r0 = sqrt(r0_vec'*r0_vec);
h_vec = cross(r0_vec, v0_vec);
h = sqrt(h_vec'*h_vec);

% step 2
d_the = d_the * pi/180;
r_tmp = 1 + ( h^2/(mu_e*r0) - 1 )*cos(d_the) ...
         - (h/mu_e)*r0_vec'*v0_vec/r0*sin(d_the);
r = h^2/mu_e/r_tmp;

% step 3 : Lagrange coefficients
f = 1 - mu_e*r/h^2 * (1-cos(d_the));
g = r*r0/h * sin(d_the);
f_dot = mu_e/h*(1-cos(d_the))/sin(d_the) * (mu_e/h^2*(1-cos(d_the))-1/r0-1/r);
g_dot = 1 - mu_e*r0/h^2*(1-cos(d_the));

% step 4
r_vec = f*r0_vec + g*v0_vec;
v_vec = f_dot*r0_vec + g_dot*v0_vec;

댓글