Info

Questa domanda è chiusa. Riaprila per modificarla o per rispondere.

Can anyone help me simplify this code?

3 visualizzazioni (ultimi 30 giorni)
Scott Hunter
Scott Hunter il 25 Ott 2018
Chiuso: MATLAB Answer Bot il 20 Ago 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 Commenti
John D'Errico
John D'Errico il 25 Ott 2018
Modificato: John D'Errico il 25 Ott 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 il 25 Ott 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

Risposte (0)

Questa domanda è chiusa.

Community Treasure Hunt

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

Start Hunting!

Translated by