Info

This question is closed. Reopen it to edit or answer.

Can anyone help me simplify this code?

1 view (last 30 days)
Scott Hunter
Scott Hunter on 25 Oct 2018
Closed: MATLAB Answer Bot on 20 Aug 2021
I have a code which relates to the simulation of orbits and satellites round a planet. I have 32 satellites in 4 orbits, and my plot is running very slowly. I know why, it's because I have so many variables (I think) but I don't know enough about coding to tidy it up properly. Some of the bulky code is;
This repeats all the way to 32
% Satelite 1
th01 = deg2rad(0); %[rad] Initial theta
%Since e = 0, M = E so,
th1 = th01 + 2*atan(tan(M1/2)); %[rad]
xp1 = a1*cos(th1); %[m]
subx1= Mars.r*cos(th1);
yp1 = a1*sin(th1); %[m]
suby1= Mars.r*sin(th1);
zp1 = xp1*0;
subz1= subx1*0;
xp1_dot = -sqrt(Mars.mu/a1)*sin(th1); %[ms^-1]
yp1_dot = sqrt(Mars.mu/a1)*cos(th1); %[ms^-1]
zp1_dot = xp1_dot*0;
pos1 = [xp1 yp1 zp1]'; %Position Matrix
sub1 = [subx1 suby1 subz1]';
vel1 = [xp1_dot yp1_dot zp1_dot]'; %Velocity Matrix
This is my plotting loop
for i = 1:length(t)
%Spin Mars
rotate(mars, [0 0 1], (rad2deg(Mars.th)));
%Draw Orbits
addpoints(Orbit1, POS1(1,i), POS1(2,i), POS1(3,i));
addpoints(Orbit2, POS9(1,i), POS9(2,i), POS9(3,i));
addpoints(Orbit3, POS17(1,i), POS17(2,i), POS17(3,i));
addpoints(Orbit4, POS25(1,i), POS25(2,i), POS25(3,i));
%Plot Satellites
S1 = scatter3(POS1(1,i), POS1(2,i), POS1(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S2 = scatter3(POS2(1,i), POS2(2,i), POS2(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S3 = scatter3(POS3(1,i), POS3(2,i), POS3(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S4 = scatter3(POS4(1,i), POS4(2,i), POS4(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S5 = scatter3(POS5(1,i), POS5(2,i), POS5(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S6 = scatter3(POS6(1,i), POS6(2,i), POS6(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S7 = scatter3(POS7(1,i), POS7(2,i), POS7(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S8 = scatter3(POS8(1,i), POS8(2,i), POS8(3,i), 'Filled', 'MarkerFaceColor', [0.6 0.3 0]);
S9 = scatter3(POS9(1,i), POS9(2,i), POS9(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S10 = scatter3(POS10(1,i), POS10(2,i), POS10(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S11 = scatter3(POS11(1,i), POS11(2,i), POS11(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S12 = scatter3(POS12(1,i), POS12(2,i), POS12(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S13 = scatter3(POS13(1,i), POS13(2,i), POS13(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S14 = scatter3(POS14(1,i), POS14(2,i), POS14(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S15 = scatter3(POS15(1,i), POS15(2,i), POS15(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S16 = scatter3(POS16(1,i), POS16(2,i), POS16(3,i), 'Filled', 'MarkerFaceColor', [0 0.4 0]);
S17 = scatter3(POS17(1,i), POS17(2,i), POS17(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S18 = scatter3(POS18(1,i), POS18(2,i), POS18(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S19 = scatter3(POS19(1,i), POS19(2,i), POS19(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S20 = scatter3(POS20(1,i), POS20(2,i), POS20(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S21= scatter3(POS21(1,i), POS21(2,i), POS21(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S22= scatter3(POS22(1,i), POS22(2,i), POS22(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S23= scatter3(POS23(1,i), POS23(2,i), POS23(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S24= scatter3(POS24(1,i), POS24(2,i), POS24(3,i), 'Filled', 'MarkerFaceColor', [0.3 0 0.6]);
S25= scatter3(POS25(1,i), POS25(2,i), POS25(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S26= scatter3(POS26(1,i), POS26(2,i), POS26(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S27= scatter3(POS27(1,i), POS27(2,i), POS27(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S28= scatter3(POS28(1,i), POS28(2,i), POS28(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S29= scatter3(POS29(1,i), POS29(2,i), POS29(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S30= scatter3(POS30(1,i), POS30(2,i), POS30(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S31= scatter3(POS31(1,i), POS31(2,i), POS31(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
S32= scatter3(POS32(1,i), POS32(2,i), POS32(3,i), 'Filled', 'MarkerFaceColor', [0.6 0 0]);
%Plot from Satellites to Sub-Sat Point
%COMMENTED OUT
% Ss1 = plot3([SUB1(1,i) POS1(1,i)], [SUB1(2,i) POS1(2,i)], [SUB1(3,i) POS1(3,i)], 'g');
% Ss2 = plot3([SUB2(1,i) POS2(1,i)], [SUB2(2,i) POS2(2,i)], [SUB2(3,i) POS2(3,i)], 'g');
% Ss3 = plot3([SUB3(1,i) POS3(1,i)], [SUB3(2,i) POS3(2,i)], [SUB3(3,i) POS3(3,i)], 'g');
% Ss4 = plot3([SUB4(1,i) POS4(1,i)], [SUB4(2,i) POS4(2,i)], [SUB4(3,i) POS4(3,i)], 'g');
% Ss5 = plot3([SUB5(1,i) POS5(1,i)], [SUB5(2,i) POS5(2,i)], [SUB5(3,i) POS5(3,i)], 'g');
% Ss6 = plot3([SUB6(1,i) POS6(1,i)], [SUB6(2,i) POS6(2,i)], [SUB6(3,i) POS6(3,i)], 'r');
% Ss7 = plot3([SUB7(1,i) POS7(1,i)], [SUB7(2,i) POS7(2,i)], [SUB7(3,i) POS7(3,i)], 'r');
% Ss8 = plot3([SUB8(1,i) POS8(1,i)], [SUB8(2,i) POS8(2,i)], [SUB8(3,i) POS8(3,i)], 'r');
% Ss9 = plot3([SUB9(1,i) POS9(1,i)], [SUB9(2,i) POS9(2,i)], [SUB9(3,i) POS9(3,i)], 'r');
% Ss10 = plot3([SUB10(1,i) POS10(1,i)], [SUB10(2,i) POS10(2,i)], [SUB10(3,i) POS10(3,i)], 'r');
% Ss11 = plot3([SUB11(1,i) POS11(1,i)], [SUB11(2,i) POS11(2,i)], [SUB11(3,i) POS11(3,i)], 'c');
% Ss12 = plot3([SUB12(1,i) POS12(1,i)], [SUB12(2,i) POS12(2,i)], [SUB12(3,i) POS12(3,i)], 'c');
% Ss13 = plot3([SUB13(1,i) POS13(1,i)], [SUB13(2,i) POS13(2,i)], [SUB13(3,i) POS13(3,i)], 'c');
% Ss14 = plot3([SUB14(1,i) POS14(1,i)], [SUB14(2,i) POS14(2,i)], [SUB14(3,i) POS14(3,i)], 'c');
% Ss15 = plot3([SUB15(1,i) POS15(1,i)], [SUB15(2,i) POS15(2,i)], [SUB15(3,i) POS15(3,i)], 'c');
drawnow
%Delete from current frame
delete(S1);
delete(S2);
delete(S3);
delete(S4);
delete(S5);
delete(S6);
delete(S7);
delete(S8);
delete(S9);
delete(S10);
delete(S11);
delete(S12);
delete(S13);
delete(S14);
delete(S15);
delete(S16);
delete(S17);
delete(S18);
delete(S19);
delete(S20);
delete(S21);
delete(S22);
delete(S23);
delete(S24);
delete(S25);
delete(S26);
delete(S27);
delete(S28);
delete(S29);
delete(S30);
delete(S31);
delete(S32);
%COMMENTED OUT
% delete(Ss1);
% delete(Ss2);
% delete(Ss3);
% delete(Ss4);
% delete(Ss5);
% delete(Ss6);
% delete(Ss7);
% delete(Ss8);
% delete(Ss9);
% delete(Ss10);
% delete(Ss11);
% delete(Ss12);
% delete(Ss13);
% delete(Ss14);
% delete(Ss15);
end
  2 Comments
John D'Errico
John D'Errico on 25 Oct 2018
Edited: John D'Errico on 25 Oct 2018
TRIVIAl. Learn to use vectors & arrays. Then you can use loops. Loops are a recent innovation. I think they were invented sometime in the last century or so. ;-)
Said differently, creating lists of numbered variables as you have done is just a short ride into programming hell, a place you seem to be inhabiting right now.
The good news is, programming hell is a moderately easy place to escape (well, compared to the more commonly described place with the same name.) That just requires that you learn to program, using vectors and arrays.
Scott Hunter
Scott Hunter on 25 Oct 2018
Yep took me a long time to change anything :(
If I were doing it using an array, would each variable i.e th0 be an array, the size of the array being however many of that variable I need?
i.e for 8,
th0 = 1:8;
for i = 1:8
th0(i) = %formula
end

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!