리야프노프 궤도(Lyapunov orbit)는 (x-y) 평면에서 라그랑지 포인트 L1, L2, L3를 중심으로 공전하는 주기궤도(periodic orbit)이다. 앞서 살펴본 주기궤도의 조건 (https://pasus.tistory.com/277)에 따라 리야프노프 궤도는 x축에 대해 대칭이고, x축을 직각으로 통과한다.
따라서 시간
리야프노프 궤도를 구하기 위해서는 반주기(

리야프노프 궤도의 계산 절차는 다음과 같다.
1. 선형화 운동모델의 주기궤도로부터 초기조건의 추측값(initial guess)을 계산한다 (https://pasus.tistory.com/273).
여기서
이다. 이에 해당하는 매트랩 코드는 다음과 같다.
% cr3bp linear dynamics for Lypapunov orbit
% input:
% Lpoint: Lagrange point 1 or 2 (not 3)
% Ax: x-axis amplitude
% param
% output:
% x0: initial x-position
% vy0: initial y_dot
% wp: frequency
% kappa: Ay = kappa*Ax
%
% coded by st.watermelon
% unpack
mu = param.mu;
if Lpoint == 1
xe = param.L1; % x-position of Lagrange point
else
xe = param.L2;
end
% parameter computation
c2 = (1-mu)/(sqrt((xe+mu)^2))^3 + mu/(sqrt((xe+mu-1)^2))^3;
wp2 = 1/2 * (2 - c2 + sqrt(9*c2*c2-8*c2));
wp = sqrt(wp2);
kappa = (wp2+1+2*c2)/(2*wp);
% initial guess
x0 = xe - Ax;
vy0 = wp*kappa*Ax;
2. 초기조건의 추측값 식 (2)를 이용하여 CR3BP의 무차원 비선형 운동방정식을
여기서
이다. CR3BP 비선형 운동방정식의 매트랩 코드는 다음과 같다.
function X_dot = cr3bp_ode_2d(t, X, mu)
% CR3BP nonlinear differential equation 2D version
% input:
% t
% X: [x, y, vx, vy]
% mu
% output:
% X_dot
%
% coded by st.watermelon
X_dot = zeros(4,1);
% unpack
x = X(1);
y = X(2);
vx = X(3);
vy = X(4);
% paramter computation
r1 = sqrt((x+mu)^2 + y^2);
r2 = sqrt((x+mu-1)^2 + y^2);
% xvec_dot computation
X_dot(1) = vx;
X_dot(2) = vy;
X_dot(3) = 2*vy + x - (1-mu)*(x+mu)/r1^3 - mu*(x+mu-1)/r2^3;
X_dot(4) = -2*vx + y - (1-mu)*y/r1^3 - mu*y/r2^3;
3. 시간
여기서
이며, 각 성분은 다음과 같이 계산된다.
식 (5)의 미분방정식을 시간
function Phi_dot = state_trans_ode_2d(t, Phi, mu)
%
% CR3BP state transition matrix differential equation 2D version
% input:
% t
% Phi: 16x1 for state transition matrix
% 4x1 for cr3bp state
% mu
% output
% Phi_dot: 16x1 for state transition matrix dot
% 4x1 for cr3bp state
%
% coded by st.watermelon
Phi_dot = zeros(20,1);
% unpack
x = Phi(17);
y = Phi(18);
vx = Phi(19);
vy = Phi(20);
% parameter computation
r1 = sqrt((x+mu)^2 + y^2);
r2 = sqrt((x+mu-1)^2 + y^2);
Uxx = -1 - 3*(1-mu)*(x+mu)^2/r1^5 - 3*mu*(x+mu-1)^2/r2^5 + (1-mu)/r1^3 + mu/r2^3;
Uyy = -1 - 3*(1-mu)*y^2/r1^5 - 3*mu*y^2/r2^5 + (1-mu)/r1^3 + mu/r2^3;
Uxy = -3*(1-mu)*(x+mu)*y/r1^5 - 3*mu*(x+mu-1)*y/r2^5;
% Phi_dot computation
A = [0 0 1 0;
0 0 0 1;
-Uxx -Uxy 0 2;
-Uxy -Uyy -2 0];
PHI = reshape(Phi(1:16),4,4);
PHI_dot = A * PHI;
Phi_dot(1:16) = reshape(PHI_dot,16,1);
Phi_dot(17) = vx;
Phi_dot(18) = vy;
Phi_dot(19) = 2*vy + x - (1-mu)*(x+mu)/r1^3 - mu*(x+mu-1)/r2^3;
Phi_dot(20) = -2*vx + y - (1-mu)*y/r1^3 - mu*y/r2^3;
4. 초기속도
여기서
식 (9)에서
여기서
2번항과 4번항에 대한 매트랩 코드는 다음과 같다.
function [X0, t1, flag] = dp_cr3bp_2d(X0_guess, mu)
%
% Differential correction for CR3BP 2D version
% input:
% X0_guess: initial guess from linear dynamics
% = [x0 0 0 vy0]'
% mu
% output
% X0: corrected initial condition
% t1: corrected half period (T/2)
%
% coded by st.watermelon
% setup
max_iter = 100; % maximum DC iteration
absTol = 1e-15;
relTol = 3e-14;
X0 = X0_guess;
for iter = 1: max_iter
fprintf("iter %2d \n", iter)
% compute t1 and x, vx, vy, and state transition matrix at y=0
tspan = [0 10];
Phi0(1:16) = reshape(eye(4),16,1);
Phi0(17:20) = X0;
opt2 = odeset('RelTol',relTol,'AbsTol',absTol,'Events',@events);
[t, Phi, t1, Phi_t1, ie] = ode113(@(t,Phi) state_trans_ode_2d(t,Phi,mu), tspan, Phi0, opt2);
t1 = t1(end);
Phi_t1 = Phi_t1(end,:);
PHI_t1 = reshape(Phi_t1(1:16), 4,4);
x1 = Phi_t1(17);
y1 = Phi_t1(18);
vx1 = Phi_t1(19);
vy1 = Phi_t1(20);
r1 = sqrt((x1+mu)^2 + y1^2);
r2 = sqrt((x1+mu-1)^2 + y1^2);
vxdot1 = 2*vy1 + x1 - (1-mu)*(x1+mu)/r1^3 - mu*(x1+mu-1)/r2^3;
% update initial condition
dvy0 = -vx1/(PHI_t1(3,4)-PHI_t1(2,4)*vxdot1/vy1);
% learning rate
eta = 1-0.9^iter;
X0(4,1) = X0(4,1) + eta*dvy0;
if abs(vx1) <= 1e-11
break;
end
end
if iter == max_iter
flag = 1;
else
flag = 0;
end
end % end of function
function [value,isterminal,direction] = events(t,Phi)
%
value = Phi(18); % event y=0
isterminal = 1; % stop integration
direction = -1; % negative direction
다음은 선형 방정식으로 계산한 궤도와 비선형 방정식으로 계산한 궤도이다. 궤도의 크기가 커질수록 차이가 발생함을 알 수 있다. 리야프노프 궤도의 크기는 궤도에너지에 따라 달라지며 이에 따라 궤도 주기도 달라지므로 임무 요구조건에 따라 궤도 크기를 설계해야 한다.

다음은 선형화 방정식으로 리야프노프 궤도의 초기값을 획득한 후, x 좌표값을

궤도의 크기가 작을 때는 선형화 방정식에서 계산된 궤도의 초기값을 미분보정의 초기 추측값으로 사용해도 잘 수렴하지만 궤도가 커질 수록 초기조건의 추측값에 대해서 미분보정이 매우 민감해 지기 때문에, x 좌표값
'항공우주 > 우주역학' 카테고리의 다른 글
[CR3BP] 주기궤도의 안정성 (0) | 2023.07.22 |
---|---|
[CR3BP] 헤일로 궤도 (Halo Orbit) 계산 (0) | 2023.07.14 |
[CR3BP] 주기궤도 (Periodic Orbit)의 조건 (0) | 2023.07.04 |
미분보정 (Differential Correction) (0) | 2023.07.03 |
[CR3BP] 리야프노프 궤도, 헤일로 궤도, 그리고 리사주 궤도 (0) | 2023.06.27 |
댓글