You are on page 1of 7

State Vectors From Classical Orbital Elements

Classical Orbital Elements from State Vectors


Gibbs Method of Orbit Determination
Rinertial from ,A,a,
Azimuth, Elevation, Range Determination
Gauss Method of Orbit Determination
GaussOrbitDetermination[R1_List, R2_List, R3_List, 1_List,
2_List, 3_List, t1_, t2_, t3_, _: 398 600, plot8th_: False] :=
Module{, 1, 3, p1, p2, p3, D0, D11, D12, D13, D21, D22, D23, D31, D32, D33,
A, B, , a, b, c, r2, 1, 2, 3, 1, 2, 3, f1, f3, g1, g3, v2, rng}, 1 = t1 - t2;
3 = t3 - t2;
= 3 - 1;
p1 = Cross[2, 3];
p2 = Cross[1, 3];
p3 = Cross[1, 2];
D0 = 1.p1;
D11 = R1.p1;
D12 = R1.p2;
D13 = R1.p3;
D21 = R2.p1; D22 = R2.p2; D23 = R2.p3;
3 1
D31 = R3.p1; D32 = R3.p2; D33 = R3.p3; A = - D12 + D22 + D32 D0;

3 1
B = D12 32 - 2 + D32 2 - 12 (6 D0);

= R2.2 ; R2sq = R2.R2;
a = - A 2 + 2 A + R2sq;
b = - 2 B (A + );
c = - 2 B2 ;
Ifplot8th,
rng = Selectx /. NSolvex8 + a x6 + b x3 + c 2 * 1032 , Reals, Positive[[1]];
PrintPlotx8 + a x6 + b x3 + c, {x, 0, rng}, PlotStyle {Brown},
PlotLegends {"Residual of the 8th order Gauss Polynomial"};
2 Orbit Determination Subroutines.nb

r2 = Selectx /. NSolvex8 + a x6 + b x3 + c == 0, Reals, Positive[[1]];


If[Dimensions[r2] {}, Print["Error!, NSolve didnot
find a single positive value for r2, Intervene Manually!"];
Abort[]];
1 1
6 D31 3
+ D21 3
r23 + D31 3
2 - 12
1 = - D11 D0;
6 r23 + 2 - 32
3 3
6 D13 1
- D23 1
r23 + D13 1
2 - 32
3 = - D33 D0;
6 r23 + 2 - 12
B
2 = A + ;
r23
1 = R1 + 1 1;
2 = R2 + 2 2;
3 = R3 + 3 3;
12
f1 = 1 - ;
2 r23
32
f3 = 1 - ;
2 r23
13
g1 = 1 - ;
6 r23
33
g3 = 3 - ;
6 r23
- f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1
{2, v2}

R1 = {5582.84, 0, 3073.90}; 1 = {0.846428, 0, 0.532504}; t1 = 0;

R2 = {5581.50, 122.122, 3073.90}; 2 = {0.749290, 0.463023, 0.473470}; t2 = 5 * 60;

R3 = {5577.50, 244.186, 3073.90};

3 = {0.529447, 0.777163, 0.340152}; t3 = 10 * 60;

GaussOrbitDetermination[R1, R2, R3, 1, 2, 3, t1, t2, t3]


{{8282.6, 1791.26, 4780.7}, {- 1.07108, 5.89508, - 0.618321}}

Norm /@ %
{9729.6, 6.02342}
Orbit Determination Subroutines.nb 3

Iterative Improvement of Gauss


z -Sin z
3
z>0
z

In[6]:= s[z_] = Sinh -z - -z ;


3
z<0
-z

1
6
z0

1-Cos z
z
z>0
c[z_] = Cosh -z -1 ;
-z
z<0
1
2
z0

In[5]:= GaussOrbitDeterminationIterative[iters_: 1, R1_List, R2_List, R3_List,


1_List, 2_List, 3_List, t1_, t2_, t3_, _: 398 600, plot8th_: False] :=
Module{, 1, 3, p1, p2, p3, D0, D11, D12, D13, D21, D22, D23,
D31, D32, D33, A, B, , a, b, , r2, 1, 2, 3, 1, 2, 3, f1,
f3, g1, g3, v2, rng, 2, vr2, c1, c3, 1, 3, }, 1 = t1 - t2;
3 = t3 - t2;
= 3 - 1;
p1 = Cross[2, 3];
p2 = Cross[1, 3];
p3 = Cross[1, 2];
D0 = 1.p1;
D11 = R1.p1;
D12 = R1.p2;
D13 = R1.p3;
D21 = R2.p1; D22 = R2.p2; D23 = R2.p3;
3 1
D31 = R3.p1; D32 = R3.p2; D33 = R3.p3; A = - D12 + D22 + D32 D0;

3 1
B = D12 32 - 2 + D32 2 - 12 (6 D0);

= R2.2 ; R2sq = R2.R2;
a = - A 2 + 2 A + R2sq;
b = - 2 B (A + );
= - 2 B2 ;
Ifplot8th,
rng = Selectx /. NSolvex8 + a x6 + b x3 + 2 * 1032 , Reals, Positive[[1]];
PrintPlotx8 + a x6 + b x3 + , {x, 0, rng}, PlotStyle {Brown},
PlotLegends {"Residual of the 8th order Gauss Polynomial"};
r2 = Selectx /. NSolvex8 + a x6 + b x3 + == 0, Reals, Positive[[1]];
If[Dimensions[r2] {}, Print["Error!, NSolve didnot
find a single positive value for r2, Intervene Manually!"];
4 Orbit Determination Subroutines.nb

Abort[]];
1 1
6 D31 3
+ D21 3
r23 + D31 3
2 - 12
1 = - D11 D0;
6 r23 + 2 - 32
3 3
6 D13 1
- D23 1
r23 + D13 1
2 - 32
3 = - D33 D0;
6 r23 + 2 - 12
B
2 = A + ;
r23
1 = R1 + 1 1;
2 = R2 + 2 2;
3 = R3 + 3 3;
12
f1 = 1 - ;
2 r23
32
f3 = 1 - ;
2 r23
13
g1 = 1 - ;
6 r23
33
g3 = 3 - ;
6 r23
- f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1
Print["After the main Gauss Algorithm 2 =" , 2 , " And v2 = ", v2];
Fori = 0, i iters, i ++, r2 = Norm[2];
2 = Norm[v2];
2.v2
vr2 = ;
r2
2 22
= - ;
r2
1 = /. Quiet @ FindRoot
r2 vr2
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 - ;

Orbit Determination Subroutines.nb 5

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;
- f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1
Print["After the Iteration No: ", i, " 2 =" , 2 , " And v2 = ", v2];

{2, v2}

Laplace Method of Orbit Determination [from


Bates book]
6 Orbit Determination Subroutines.nb

LaplaceOrbitDetermination[R1_List, R2_List, R3_List, 1_List,


2_List, 3_List, t1_, t2_, t3_, _: 398 600, 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"};
= Select[r /. 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}
Orbit Determination Subroutines.nb 7

ss
GaussIterative[R2_List, V2_List, 1_, 3_, _: 398 600] :=
Module{r2 = Norm[R2], v2 = Norm[V2], vr2, , 1, 3,
R2.V2
f1, g1, f3, g3, c1, c3, 1, 2, 3, 1, 2, 3}, vr2 = ;
r2
2 v22
= - ;
r2
1 = /. Quiet @
r2 vr2 2
FindRoot 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;
- f3 1 + f1 3
v2 = ;
f1 g3 - f3 g1

You might also like