Professional Documents
Culture Documents
1 0 0 Cos[ang] 0 - Sin[ang]
R1[ang_] := 0 Cos[ang] Sin[ang] ; R2[ang_] := 0 1 0 ;
0 - Sin[ang] Cos[ang] Sin[ang] 0 Cos[ang]
Cos[ang] Sin[ang] 0
R3[ang_] := -Sin[ang] Cos[ang] 0 ;
0 0 1
Note: All returned angles are by default in radians! return angles in degrees by setting the optional 4th input to True.
The Module by default prints out the output, suppress that by setting the 5th optional input to False.
1
= v2 - R - r vr V ;
r
e = Norm[];
.
ArcCos [[3]] 0
e
= .
;
2 - ArcCos [[3]] < 0
e
.R
ArcCos vr 0
er
= ;
.R
2 - ArcCos vr < 0
er
Q1
Clear[h, e, ]
2 SPC403HW2UpdatedsmallerFont.nb
h2 1 398 600 h2 1
FindRoot7200 == , 1 == e Sin[], 10 000 == , {{h, 1, 100 000}, {e, 0, 1.5}, {, -, }}
398 600 1 + e Cos[] h 398 600 1 - e2
{h 60 180.2, e 0.302333, -5.7603}
{h, e, } = {h, e, } /. %
(o = -5.7603035658805855` + 2 ) / Degree
29.9589
Stumpf Functions
z -Sin z
3
z>0
z
s[z_] = Sinh -z - -z
z<0 ;
3
-z
1
z0
6
1-Cos z
z>0
z
c[z_] = Cosh -z -1
z<0 ;
-z
1
z0
2
h2
PropagateByperifocal[t_, h_, e_, o_, _] := Module{a, , ro, vro, , Eo, Fo, , r}, a = ;
1 - e2
h2
ro = ;
(1 + e Cos[o])
e Sin[o]
vro = ;
h
= 1 / a;
ro vro
= /. Quiet @ FindRoot 2 c 2 + (1 - ro) 3 s 2 + ro - t, , Abs[] t;
1-e 1+e Eo
Eo = 2 ArcTan Tan[o / 2]; 2 ArcTan Tan + e<1
1+e 1-e 2 a 2
= e-1 e+1 Fo ;
Fo = 2 ArcTanh Tan[o / 2] ; 2 ArcTan Tanh + e>1
e+1 e-1 2 -a 2
o
2 ArcTan + Tan e1
h 2
after 60 minutes
{128.511, 100.04}
{229.341, 160.491}
Clear[h, e, , o]
SPC403HW2UpdatedsmallerFont.nb 3
Q2
PropagateRVBy subroutine
a)
147 426.
3.5615
4 SPC403HW2UpdatedsmallerFont.nb
b)
To COE subroutine
1
= v2 - R - r vr V ;
r
e = Norm[];
.
ArcCos [[3]] 0
e
= .
;
2 - ArcCos [[3]] < 0
e
.R
ArcCos vr 0
er
= ;
.R
2 - ArcCos vr < 0
er
To COE
e-1 o
Module{F0, Mh0, t0, t, Mh, F, , , r, v, QpX, R, V}, F0 = 2 ArcTanh Tan ;
e+1 2
Mh0 = e Sinh[F0] - F0;
h3 -32
t0 = e2 - 1 Mh0;
2
t = t0 + t;
2 32
Mh = e2 - 1 t;
h3
F = F /. FindRoote Sinh[F] - F - Mh, {F, Mh};
e+1 F
= 2 ArcTan Tanh ;
e-1 2
= If[ < 0, + 2 , ](* 2 ArcTan Range -,*);
h2 1
r= Cos[], Sin[], 0; v = -Sin[], e + Cos[], 0;
1 + e Cos[] h
QpX = R3[].R1i.R3[];
R = QpX.r;
V = QpX.v ;
{R, V}
Q3
Subroutines
7 (y + Floor[(m + 9) / 12])
JulianDay[y_, m_, d_] := 367 y - Floor + Floor[275 m / 9] + d + 1 721 013 + 1 / 2
4
= - h;
u = Cos[] Cos[], Cos[] Sin[], Sin[];
r = R + u;
360.98564724 * / 180
= 0, 0, ;
24 * 60 * 60
Rd = Cross[, R];
dot = -Ad Cos[] Sin[A] Cos[a] + ad Sin[] Cos[a] - Cos[] Cos[A] Sin[a] Cos[];
dot = [[3]] + Ad Cos[A] Cos[a] - ad Sin[A] Sin[a] + dot Sin[A] Cos[a] Tan[] Cos[] Sin[a] - Sin[] Cos[A] Cos[a];
udot = -dot Sin[] Cos[] - dot Cos[] Sin[], dot Cos[] Cos[] - dot Sin[] Sin[], dot Cos[];
v = Rd + d u + udot;
{r, v}
6 SPC403HW2UpdatedsmallerFont.nb
b) LST
17 02
J0 = JulianDay[2017, 2, 20]; UT = 3 + + ;
60 3600
J0 - 2 451 545
T0 = ; GoO = 100.4606184 + 36 000.77004 T0 + 0.000387933 T0 2 - 2.583 * 10-8 T03
36 525
6270.12
150.12
G = Go + 360.98564724 UT / 24
199.514
= G - 104.883
94.6305
a) State Vector
Q4
Subroutines
6378
rfromAa_, A_, a_, H_, _, _, f_ := Module{R, Rc, Rs, R, , h, , u, r}, R = ;
1 - 2 f - f2 Sin[]2
Rc = R + H;
2
Rs = 1 - f R + H;
R = Rc Cos[] Cos[], Rc Cos[] Sin[], Rs Sin[];
= ArcSinCos[] Cos[A] Cos[a] + Sin[] Sin[a];
Cos Sin[a]-Sin CosA Cos[a]
2 - ArcCos 0<A<
Cos
h= ;
Cos Sin[a]-Sin CosA Cos[a]
ArcCos <A 2
Cos
= - h;
u = Cos[] Cos[], Cos[] Sin[], Sin[];
r = R + u
SPC403HW2UpdatedsmallerFont.nb 7
Cross[, R2]
v2 = +S ;
Norm[] Norm[] r2
IfshowSteps, Print["r1 = ", r1, " r2 = ", r2, " r3 = ", r3];
Print["C12 = ", C12, " C23 = ", C23, " C31 = ", C31];
Print["N = ", , " D = ", , " S = ", S];
Print["v2 = ", v2];
v2
ur1 .C23 = 0.000182373
{6668.63, 7.88849}
Q5
Subroutines
3 3
6 D13 - D23 r23 + D13 2 - 32
1 1 1
3 = - D33 D0;
6 r23 + 2 - 12
B
2 = A + ;
r23
1 = R1 + 1 1;
2 = R2 + 2 2;
12 32 13 33
3 = R3 + 3 3; f1 = 1 - ; f3 = 1 - ; g1 = 1 - ; g3 = 3 - ;
2 r23 2 r23 6 r23 6 r23
-f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1
Print"After the main Gauss Algorithm \n 2 =" , 2 , " \n v2 = ", v2;
Fori = 1, i iters, i ++, r2 = Norm[2];
2 = Norm[v2];
2.v2
vr2 = ;
r2
2 22
= - ;
r2
r2 vr2
1 = /. Quiet @ FindRoot 2 c 2 + (1 - r2) 3 s 2 + r2 - 1, , Abs[] 1;
r2 vr2
3 = /. Quiet @ FindRoot 2 c 2 + (1 - r2) 3 s 2 + r2 - 1, , Abs[] 3;
12
f1 = 1 - c 12 ;
r2
13 s 12
g1 = 1 - ;
32
f3 = 1 - c 32 ;
r2
33 s 32
g3 = 3 - ;
g3
c1 = ;
f1 g3 - f3 g1
-g1
c3 = ;
f1 g3 - f3 g1
D21 D31 * c3
1 = -D11 + - D0;
c1 c1
2 = (-c1 * D12 + D22 - D32 * c3) / D0;
c1 * D13 D23
3 = - + - D33 D0;
c3 c3
1 = R1 + 1 1;
2 = R2 + 2 2;
3 = R3 + 3 3;
SPC403HW2UpdatedsmallerFont.nb 9
-f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1
Print"After the Iteration No: ", i, " \n 2 =" , 2 , " \n v2 = ", v2;
{2, v2}
6378
RfromH_, _, H_, f_: 0.00335 := Module{R, Rc, Rs, R}, R = ;
1 - 2 f - f2 Sin[]2
Rc = R + H;
2
Rs = 1 - f R + H;
R = Rc Cos[] Cos[], Rc Cos[] Sin[], Rs Sin[]
Solving
Norm /@ {r2GaussUR, v2GaussUR}(*the direct gauss result with no iterations ie result when last argument iter=0 *)
{6689.89, 7.78499}
Q6
a) Gauss
{r26aGaussUR, v26aGaussUR} = GaussOrbitDeterminationIterative[R1, R2, R3, 1, 2, 3, t1, t2, t3, 0, 398 600, True];
10 SPC403HW2UpdatedsmallerFont.nb
3 1031
2 1031
1 1031
-1 1031
-2 1031
Norm /@ {r26aGaussUR, v26aGaussUR}(*the direct gauss result with no iterations ie result when iter=0 not the above one*)
{9729.6, 6.02342}
31
3
2 10
1031
gaussplot = Residual of the 8th order Gauss Polynomial ;
8000
1012
000
000
C) Laplace
LaplaceOrbitDeterminationR1_List, R2_List, R3_List, 1_List, 2_List, 3_List, t1_, t2_, t3_, _, plot8th_: False :=
Module{L, Ldot, Lddot, , , Rd, Rdd, Ro2r, LEQ, , , rvec, dot, v, rng}, L = 2;
t2 - t3 2 t2 - t1 - t3 t2 - t1
Ldot = 1 + 2 + 3;
(t1 - t2) (t1 - t3) (t2 - t1) (t2 - t3) (t3 - t1) (t3 - t2)
2 2 2
Lddot = 1 + 2 + 3;
(t1 - t2) (t1 - t3) (t2 - t1) (t2 - t3) (t3 - t1) (t3 - t2)
= 2 Det{L, Ldot, Lddot};
360.98564724 * / 180
= 0, 0, ;
24 * 60 * 60
Rd = Cross[, R2];
Rdd = Cross[, Cross[, R2]];
Ro2r = -2 Det{L, Ldot, Rdd} - 2 Det{L, Ldot, R2} // Simplify;
r3
LEQ = Ro2r2 + 2 Ro2r L.R2 + R2.R2 - r2 // FullSimplify;
Ifplot8th, rng = Selectr /. NSolveLEQ r6 -2 * 1032 , r, Reals, Positive[[1]];
PrintPlotLEQ r6 , {r, 0, rng}, PlotStyle {Gray}, PlotLegends "Residual of the 8th order Laplace Polynomial";
= Selectr /. NSolve[LEQ, r, Reals], Positive[[1]];
= Ro2r /. r ;
rvec = L + R2;
dot = -Det{L, Rdd, Lddot} - Det{L, R2, Lddot} ;
3
v = dot L + Ldot + Rd;
{rvec, v}
SPC403HW2UpdatedsmallerFont.nb 11
{r26cLaplace, v26cLaplace} = LaplaceOrbitDetermination[R1, R2, R3, 1, 2, 3, t1, t2, t3, 398 600, True]
3 1031
2 1031
1 1031
2000 4000 6000 8000 10 000 12 000 Residual of the 8th order Laplace Polynomial
-1 1031
-2 1031
-3 1031
{9844.5, 5.96347}
31
3
2 10
1031
laplaceplot = Residual of the 8th order Laplace Polynomial ;
-3 1031 8000
1012
000
000
TableForm{%%%, %%, %}, TableHeadings "COE Gauss ", "COE Gauss improved", "COE Laplace ", "", "e", "", "i", "", ""
e i
COE Gauss 58 591.7 0.116389 269.998 29.9936 271.139 189.471
COE Gauss improved 59 607.6 0.0891108 270.056 30. 276.124 184.532
COE Laplace 58 707.2 0.12169 270.048 30.0141 281.481 179.29
12 SPC403HW2UpdatedsmallerFont.nb
3 1031
2 1031
1 1031
Residual of the 8th order Gauss Polynomial
-2 1031
-3 1031