Kumar
48009120
26/11/14
Figure
3:
Top
subplot
shows
the
percentage
error
in
the
closest
approach
altitude
as
a
function
of
1/Time,
bottom
subplot
shows
percentage
error
vs.
Time
We
use
the
time
stepping
method
to
speed
up
things,
all
the
while
retaining
the
accuracy
needed.
We
know
that
the
force
and
acceleration
are
proportional,
since
they
just
differ
by
the
constant
mass,
so
both
force
and
acceleration
increase
by
1/s2.
We
can
use
a
decrease
in
time
of
s2,
which
means
that
the
time
increments
are
smaller
as
the
distance
to
the
planet
decreases.
Uttara
Kumar
48009120
26/11/14
sy0.txt
Initial
yposition
(km)
7320
14640
29280
58560
117120
234240
468480
936960
1873920
3747840
assign3c.m
clear;
clc;
%parameters
totalt=1280*60;
massp=3.3*10^23;
radiusp=2440*10^3;
atarget
=
195*10^3;
Uttara
Kumar
48009120
26/11/14
s0=[3050*10^3,96*radiusp];
v0=[0,
7*10^3];
deltat=60;
error
=
[];
delta
=
[];
percenterror
=
100;
while
percenterror
>
2
%tic
%
get
array
for
acc,
vel,
and
pos
[acc,
vel,
pos]
=
get_traj(s0,
v0,
deltat,
totalt,
massp,
radiusp);
%toc
altitude
=
sqrt(pos(:,1).^2+pos(:,2).^2)./1000

radiusp/1000;
ca_alt
=
min(altitude)*1000;
percenterror
=
100*(ca_altatarget)/atarget;
error
=
[error
percenterror];
delta
=
[delta
deltat];
deltat
=
deltat/2;
end
%
plot
error
percentage
against
1/deltat
figure(3);
clf;
subplot(211);
plot(1./delta,
error,
'*');
title('Percentage
error
in
closest
approach
against
per
time
increment');
xlabel('per
time
increment
(per
second)');
ylabel('Percentage
error
(%)');
subplot(212);
plot(delta,
error,
'*');
text(6,10,sprintf('Final
delta
time
is
%.2fs',
delta(end)));
title('Percentage
error
in
closest
approach
against
time
increment');
xlabel('time
increment
(seconds)');
ylabel('Percentage
error
(%)');
get_traj.m
function
[acc,
vel,
pos]
=
get_traj(s0,
v0,
deltat,
totalt,
massp,
radiusp)
%get_traj
calculates
trajectory
of
the
object
that
is
in
the
middle
of
a
flyby.
The
function
shows
3
arrays
acc,
vel
and
pos.
This
is
true
if
the
initial
position
is
not
inside
the
planet,
and
the
object
is
flying
towards
the
planet.
Otherwise,
an
error
message
shows.
checkinit(s0,
radiusp,
v0);
nt
=
totalt/deltat;
acc
=
nan(nt,
2);
vel
=
nan(nt,
2);
pos
=
nan(nt,
2);
instp
=
s0;
instv
=
v0;
Uttara
Kumar
48009120
26/11/14
for
i
=
1:nt
instA
=
gravacc(instp,
massp);
[deltap,
deltav]
=
scvelpos(instA,
instv,
deltat);
instp
=
instp
+
deltap;
instv
=
instv
+
deltav;
acc(i,:)
=
instA;
vel(i,:)
=
instv;
pos(i,:)
=
instp;
end
%Functions
function
[]
=
checkinit(s0,
radiusp,
v0)
px
=
s0(1);
py
=
s0(2);
sorigin
=
sqrt(px^2+py^2);
if
sorigin
<
radiusp
error('Initial
position
is
inside
the
planet.');
elseif
v0
<=
0;
error(Object
is
not
moving
towards
the
planet.');
end
function
instA
=
gravacc(instp,
massp)
G
=
6.67*10^(11);
px
=
instp(1);
py
=
instp(2);
sorigin
=
sqrt(px^2+py^2);
aM
=
(G*massp)/sorigin^2;
function
[deltap,
deltav]
=
scvelpos(instA,
instv,
deltat)
vx
=
instv(1);
vy
=
instv(2);
ax
=
instA(1);
ay
=
instA(2);
sinbeta
=
px/sorigin;
cosbeta
=
py/sorigin;
ax
=
aM*sinbeta;
ay
=
aM*cosbeta;
instA
=
[ax
ay];
posdeltaX
=
vx*deltat
+
0.5*ax*deltat^2;
posdeltaY
=
vy*deltat
+
0.5*ay*deltat^2;
deltap
=
[posdeltaX
posdeltaY];
veldeltaX
=
ax*deltat;
veldeltaY
=
ay*deltat;
deltav
=
[veldeltaX
veldeltaY];
assign3d.m
clear;
clc;
Uttara
Kumar
48009120
26/11/14
s0=[3050*10^3,96*radiusp];
v0=[0,
7*10^3];
atarget
=
195*10^3;
massp=3.3*10^23;
radiusp=2440*10^3;
totalt=1280*60;
deltat=5;
position
=
{};
xlabel
=
[];
ylabel
=
[];
for
i
=
1:9
v0(2)=4000+(i1)*500;
ylabel
=
[ylabel
v0(2)/1000];
for
j
=
1:4
s0(1)
=
(radiusp
+
4*atarget)
+
(j1)*atarge
xlabel
=
[xlabel
s0(1)/1000]
[acc,
vel,
pos]
=
get_traj(s0,
v0,...
deltat,
totalt,...
massp,
radiusp);
position{i,j}
=
pos;
end
end
ca_array
=
nan(size(position));
for
i
=
1:9
for
j
=
1:4
A
=
position{i,j};
ca_array(i,j)
=
min(sqrt(A(:,1).^2+A(:,2).^2))/1000radiusp/1000;
end
end
figure(1);
clf;
[c,h]=contour(ca_array,
0:25:500);
hold
on;
clabel(c,h);
[contour,altitude]=contour(ca_array,
19525:5:195+25,
'');
hold
on;
clabel(contour,170:25:220,'FontSize',
10);
set(gca,'XTickLabel',xlabel);
set(gca,'YTickLabel',ylabel);
title
('Contour
Map
of
Flyby
Parameters
that
were
Successful);
xlabel('The
Initial
xposition
in
(km)');
ylabel('The
Initial
velocity
in
(km/s)');
grid
on;
%Worked
with
Sarangadev
Krishnan
for
~5
hours