Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
40 views

Matlab Code:: Global Global

This MATLAB code performs a Hohmann transfer orbit analysis. It prompts the user to input the initial and final orbital altitudes and inclinations. It then calculates orbital parameters for the initial, transfer, and final orbits. It simulates the motion over time for each orbit and plots them on a 3D graph with labeled axes.

Uploaded by

Prajwal B Naik
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views

Matlab Code:: Global Global

This MATLAB code performs a Hohmann transfer orbit analysis. It prompts the user to input the initial and final orbital altitudes and inclinations. It then calculates orbital parameters for the initial, transfer, and final orbits. It simulates the motion over time for each orbit and plots them on a 3D graph with labeled axes.

Uploaded by

Prajwal B Naik
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

MATLAB CODE:

global rtd dtr pvi pvdi


global mu req hn1 hn2 hn3 dinc
om_constants;
rtol = 1.0e-8;
clc; home;
fprintf('\nHohmann Orbit Transfer Analysis\n');
while (1)
fprintf('\n\nplease input the initial altitude (kilometers)\n');
alt1 = input('? ');
if (alt1 > 0.0)
break;
end
end
while (1)
fprintf('\n\nplease input the final altitude (kilometers)\n');
alt2 = input('? ');
if (alt2 > 0.0)
break;
end
end
while (1)
fprintf('\n\nplease input the initial orbital inclination (degrees)');
fprintf('\n(0 <= inclination <= 180)\n');
inc1 = input('? ');
if (inc1 >= 0.0 && inc1 <= 180.0)
break;
end
end
while (1)
fprintf('\n\nplease input the final orbital inclination (degrees)');
fprintf('\n(0 <= inclination <= 180)\n');
inc2 = input('? ');
if (inc2 >= 0.0 && inc2 <= 180.0)
break;
end
end
inc1 = inc1 * dtr;
inc2 = inc2 * dtr;
dinc = abs(inc2 - inc1);
r1 = req + alt1;
r2 = req + alt2;
hn1 = sqrt(2.0 * r2 / (r2 + r1));
hn2 = sqrt(r1 / r2);
hn3 = sqrt(2.0 * r1 / (r2 + r1));
v1 = sqrt(mu / r1);
v2 = sqrt(mu / r2);
smat = 0.5 * (r1 + r2);
ecct = (max(r1, r2) - min(r1, r2)) / (r1 + r2);
rp = smat * (1.0 - ecct);
ra = smat * (1.0 + ecct);
vt1 = sqrt(2.0 * mu * ra / (rp * (rp + ra)));
vt2 = sqrt(2.0 * mu * rp / (ra * (rp + ra)));
taut = 2.0 * pi * sqrt(smat^3 / mu);
tof = 0.5 * taut;
if (abs(dinc) == 0)
if (r2 > r1)
dv1 = vt1 - v1;
dv2 = v2 - vt2;
else
dv1 = v1 - vt2;
dv2 = vt1 - v2;
end
dinc1 = 0;
dinc2 = 0;
inct = inc1;
else
[xroot, froot] = brent('hohmfunc', 0, dinc, rtol);
dinc1 = xroot;
dinc2 = dinc - dinc1;
dv1 = v1 * sqrt(1.0 + hn1 * hn1 - 2.0 * hn1 * cos(dinc1));
dv2 = v1 * sqrt(hn2 * hn2 * hn3 * hn3 + hn2 * hn2 ...
- 2.0 * hn2 * hn2 * hn3 * cos(dinc2));
if (inc2 > inc1)
inct = inc1 + dinc1;
else
inct = inc1 - dinc1;
end
end
clc; home;
oevi(1) = r1;
oevi(2) = 0.0;
oevi(3) = inc1;
oevi(4) = 0.0;
oevi(5) = 0.0;
if (alt2 > alt1)
oevi(6) = 0.0;
else
oevi(6) = 180.0 * dtr;
end
[ri, vi] = orb2eci(mu, oevi);
oevti(1) = smat;
oevti(2) = ecct;
oevti(3) = inct;
oevti(4) = 0.0;
oevti(5) = 0.0;
if (alt2 > alt1)
oevti(6) = 0.0;
else
oevti(6) = 180.0 * dtr;
end
[rti, vti] = orb2eci(mu, oevti);
oevtf(1) = smat;
oevtf(2) = ecct;
oevtf(3) = inct;
oevtf(4) = 0.0;
oevtf(5) = 0.0;
if (alt2 > alt1)
oevtf(6) = 180.0 * dtr;
else
oevtf(6) = 0.0;
end
[rtf, vtf] = orb2eci(mu, oevtf);
oevf(1) = r2;
oevf(2) = 0.0;
oevf(3) = inc2;
oevf(4) = 0.0;
oevf(5) = 0.0;
if (alt2 > alt1)
oevf(6) = 180.0 * dtr;
else
oevf(6) = 0.0;
end
[rf, vf] = orb2eci(mu, oevf);
period1 = 2.0 * pi * oevi(1) * sqrt(oevi(1) / mu);
period2 = 2.0 * pi * oevti(1) * sqrt(oevti(1) / mu);
period3 = 2.0 * pi * oevf(1) * sqrt(oevf(1) / mu);
deltat1 = period1 / 300;
simtime1 = -deltat1;
deltat2 = 0.5 * period2 / 300;
simtime2 = -deltat2;
deltat3 = period3 / 300;
simtime3 = -deltat3;
for i = 1:1:301
simtime1 = simtime1 + deltat1;
simtime2 = simtime2 + deltat2;
simtime3 = simtime3 + deltat3;
[rwrk, vwrk] = twobody2 (mu, simtime1, ri, vi);
rp1_x(i) = rwrk(1) / req;
rp1_y(i) = rwrk(2) / req;
rp1_z(i) = rwrk(3) / req;
[rwrk, vwrk] = twobody2 (mu, simtime2, rti, vti);
rp2_x(i) = rwrk(1) / req;
rp2_y(i) = rwrk(2) / req;
rp2_z(i) = rwrk(3) / req;
[rwrk, vwrk] = twobody2 (mu, simtime3, rf, vf);
rp3_x(i) = rwrk(1) / req;
rp3_y(i) = rwrk(2) / req;
rp3_z(i) = rwrk(3) / req;
end
figure(1);
xaxisx = [1 1.5];
xaxisy = [0 0];
xaxisz = [0 0];
yaxisx = [0 0];
yaxisy = [1 1.5];
yaxisz = [0 0];
zaxisx = [0 0];
zaxisy = [0 0];
zaxisz = [1 1.5];
figure (1);
hold on;
grid on;
[x y z] = sphere(24);
h = surf(x, y, z);
colormap([127/255 1 222/255]);
set (h, 'edgecolor', [1 1 1]);
plot3(xaxisx, xaxisy, xaxisz, '-g', 'LineWidth', 1);
plot3(yaxisx, yaxisy, yaxisz, '-r', 'LineWidth', 1);
plot3(zaxisx, zaxisy, zaxisz, '-b', 'LineWidth', 1);
plot3(rp1_x, rp1_y, rp1_z, '-r', 'LineWidth', 1.5);
plot3(rp1_x(1), rp1_y(1), rp1_z(1), 'ob');
plot3(rp2_x, rp2_y, rp2_z, '-b', 'LineWidth', 1.5);
plot3(rp2_x(end), rp2_y(end), rp2_z(end), 'ob');
plot3(rp3_x, rp3_y, rp3_z, '-g', 'LineWidth', 1.5);
xlabel('X coordinate (ER)', 'FontSize', 12);
ylabel('Y coordinate (ER)', 'FontSize', 12);
zlabel('Z coordinate (ER)', 'FontSize', 12);
title('Hohmann Transfer: Initial, Transfer and Final Orbits', 'FontSize', 16);
axis equal;
view(50, 20);
rotate3d on;

You might also like