Code covered by the BSD License
-
atan3 (a, b)
four quadrant inverse tangent
-
brent (f, x1, x2, rtol)
solve for a single real root of a nonlinear equation
-
getoe(ioev)
interactive request of classical orbital elements
-
j2eqm (t, y)
first order equations of orbital motion
-
kepler1 (manom, ecc)
solve Kepler's equation for circular,
-
kozai1 (iniz, t, oev1)
analytic orbit propagation
-
orb2eci(mu, oev)
convert classical orbital elements to eci state vector
-
rkf78 (deq, neq, ti, tf, h, t...
solve first order system of differential equations
-
rpt2func(x)
rz objective function
-
repeat1.m
-
repeat2.m
-
repeat3.m
-
View all files
from
Repeating Ground Track Orbit Design
by David Eagle
Three MATLAB scripts for designing and analyzing repeating ground track orbits.
|
| kozai1 (iniz, t, oev1)
|
function [oev2, r, v] = kozai1 (iniz, t, oev1)
% analytic orbit propagation
% Kozai's method - ECI version
% input
% iniz = initialization flag (1 = initialize, 0 = bypass)
% t = elapsed simulation time (seconds)
% initial orbital elements
% oev1(1) = semimajor axis (kilometers)
% oev1(2) = orbital eccentricity (non-dimensional)
% (0 <= eccentricity < 1)
% oev1(3) = orbital inclination (radians)
% (0 <= oev1(3) <= pi)
% oev1(4) = argument of perigee (radians)
% (0 <= oev1(4) <= 2 pi)
% oev1(5) = right ascension of ascending node (radians)
% (0 <= oev1(5) <= 2 pi)
% oev1(6) = mean anomaly (radians)
% (0 <= oev1(6) <= 2 pi)
% output
% final orbital elements and state vector at time = t
% oev2(1) = semimajor axis (kilometers)
% oev2(2) = orbital eccentricity (non-dimensional)
% (0 <= eccentricity < 1)
% oev2(3) = orbital inclination (radians)
% (0 <= oev2(3) <= pi)
% oev2(4) = updated argument of perigee (radians)
% (0 <= oev2(4) <= 2 pi)
% oev2(5) = updated right ascension of ascending node (radians)
% (0 <= oev2(5) <= 2 pi)
% oev2(6) = updated mean anomaly (radians)
% (0 <= oev2(6) <= 2 pi)
% oev2(7) = updated true anomaly (radians)
% (0 <= oev2(6) <= 2 pi)
% r = eci position vector (kilometers)
% v = eci velocity vector (kilometers/second)
% Orbital Mechanics with Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global j2 req mu mm pmm apdot raandot sinc cinc slr
% set final orbital elements equal to initial
oev2 = oev1;
if (iniz == 1)
sinc = sin(oev1(3));
cinc = cos(oev1(3));
% keplerian mean motion
mm = sqrt(mu / (oev1(1) * oev1(1) * oev1(1)));
% orbital semiparameter
slr = oev1(1) * (1 - oev1(2) * oev1(2));
b = sqrt(1 - oev1(2) * oev1(2));
c = req / slr;
d = c * c;
e = sinc * sinc;
% perturbed mean motion
pmm = mm * (1 + 1.5 * j2 * d * b * (1 - 1.5 * e));
% argument of perigee perturbation
apdot = 1.5 * j2 * pmm * d * (2 - 2.5 * e);
% raan perturbation
raandot = -1.5 * j2 * pmm * d * cinc;
end
% set initial values of argument of perigee,
% raan and mean anomaly
argperi = oev1(4);
raani = oev1(5);
manomi = oev1(6);
% propagate orbit
argper = mod(argperi + apdot * t, 2.0 * pi);
raan = mod(raani + raandot * t, 2.0 * pi);
manom = mod(manomi + pmm * t, 2.0 * pi);
oev2(4) = argper;
oev2(5) = raan;
oev2(6) = manom;
% solve Kepler's equation using Danby's method
ecc = oev1(2);
[ea, tanom] = kepler1(manom, ecc);
oev2(7) = tanom;
% position magnitude
rmag = slr / (1 + ecc * cos(tanom));
sargper = sin(argper);
cargper = cos(argper);
% argument of latitude
arglat = mod(argper + tanom, 2.0 * pi);
sarglat = sin(arglat);
carglat = cos(arglat);
sraan = sin(raan);
craan = cos(raan);
% eci position vector
r(1) = rmag * (craan * carglat - cinc * sarglat * sraan);
r(2) = rmag * (sraan * carglat + cinc * sarglat * craan);
r(3) = rmag * sinc * sarglat;
% eci velocity vector
c1 = sqrt(mu / slr);
c2 = ecc * cargper + carglat;
c3 = ecc * sargper + sarglat;
v(1) = -c1 * (craan * c3 + sraan * cinc * c2);
v(2) = -c1 * (sraan * c3 - craan * cinc * c2);
v(3) = c1 * c2 * sinc;
|
|
Contact us