plotting for loop answers with changing variables
1 view (last 30 days)
Show older comments
Hello
I am running into an issue with some code I am writing for a class, I have defined the mathematical aspect of the code, which gives me the answer I need for on simulation, but how would I go about plotting the same code but variables changing in step intervals? I am new to indexing and I believe that may be the answer to my question but I am unsure how to execute it in this example.
I want to re run the code for KC to start from 2 to 20 in 2 step intervals to compare results and overlay them for my power plot, and run another simulation where I keep KC constant but change one of my other constants to an interval in the same fashion and overlay results etc, the problem is I do not know if I need to have multiple for loops or just an indexing line?
%% Variables
KC = 2
pi = acos(-1);
Um = 1.6;
T = 1.8 %(KC*D)/Um;
D = 0.16;
L = 1;
m = 50;
rho = 1024;
K = 200;
c = 100;
CA = 1;
CD = 1.8;
omega = 2*pi/T;
md = 1;
Ap = D*L;
dt = T/40;
ndt = T/dt*5;
X(1:ndt+1) = 0;
V(1:ndt+1) = 0;
%% Governing equations
time(1:ndt+1) = (0:ndt)*dt;
P(1:ndt+1)= 0;
Pavg=0;
Kc=(Um*T)/D;
for n=1:ndt,
%for KC = 2:2:20,
% Calculation of kx1 and kv1
ta= time(n);
aw= omega*Um*cos(omega*ta)-(2*Um*omega*cos(omega*ta))/3;
Vw= Um*sin(omega*ta)- (Um/3)*sin(2*omega*ta);
Va= V(n);
Xa= X(n);
t1= CA*md*aw;
t2= 0.5*rho*CD*Ap*abs(Vw-Va)*(Vw-Va);
t3= -K*Xa-c*Va;
kx1= V(n);
kv1= (t1+t2+t3)/(m+CA*md);
%% Calculation of kx2 and kv2
ta= time(n)+dt/2;
aw= omega*Um*cos(omega*ta)-(2*Um*omega*cos(omega*ta))/3;
Vw= Um*sin(omega*ta)- (Um/3)*sin(2*omega*ta)
Va= V(n)+0.5*dt*kv1;
Xa= X(n)+0.5*dt*kx1;
t1= CA*md*aw;
t2= 0.5*rho*CD*Ap*abs(Vw-Va)*(Vw-Va);
t3= -K*Xa-c*Va;
kx2= V(n)+0.5*dt*kv1;
kv2= (t1+t2+t3)/(m+CA*md);
%% Calculation of kx3 and kv3
ta= time(n)+dt/2;
aw= omega*Um*cos(omega*ta)-(2*Um*omega*cos(omega*ta))/3;
Vw= Um*sin(omega*ta)-(Um/3)*sin(2*omega*ta);
Va= V(n)+0.5*dt*kv2;
Xa= X(n)+0.5*dt*kx2;
t1= CA*md*aw;
t2= 0.5*rho*CD*Ap*abs(Vw-Va)*(Vw-Va);
t3= -K*Xa-c*Va;
kx3= V(n)+0.5*dt*kv2;
kv3= (t1+t2+t3)/(m+CA*md);
%% Calculation of kx4 and kv4
ta= time(n)+dt;
aw= omega*Um*cos(omega*ta)-(2*Um*omega*cos(omega*ta))/3; % acceleration of the fluid
Vw= Um*sin(omega*ta)- (Um/3)*sin(2*omega*ta); % velocity of the fluid
Va= V(n)+0.5*dt*kv3;
Xa= X(n)+0.5*dt*kx3;
t1= CA*md*aw;
t2= 0.5*rho*CD*Ap*abs(Vw-Va)*(Vw-Va);
t3= -K*Xa-c*Va;
kx4= V(n)+dt*kv3;
kv4= (t1+t2+t3)/(m+CA*md);
%% Step Equations
X(n+1)= X(n)+(dt/6)*(kx1+2*kx2+2*kx3+kx4);
V(n+1)= V(n)+(dt/6)*(kv1+2*kv2+2*kv3+kv4);
P(n+1)= c*(V(n)^2);
Pavg= P(n)+(1/ndt)*P(n);
end %end
%% Plot of cylinder displacement, velocity and power output
% X Displacement plot
figure (1);
plot(time(1:ndt),X(1:ndt),'-g');
xlabel('time (s)');
ylabel('X (m)');
title('X displacment');
legend ('RK method');
% V Velocity plot
figure (2);
plot(time(1:ndt),V(1:ndt),'-b');
xlabel('time (s)');
ylabel('V (m/s)');
title('V Velocity');
legend ('RK method');
% P Power plot
figure (3);
plot (time(1:ndt),P(1:ndt),'-b');
xlabel('time (s)');
ylabel('P (W)');
title('P Power');
legend ('R-K method');
hold;
After writing the code I am now confused on what to do since the second for loop I have implemented doesnt seeem to do anything and the results are the same so I am confused as to why or how to actually get it to do what I want it to?
note: I took out the second loop and replaced the variable KC with a constant to get one answer.
3 Comments
DGM
on 28 Apr 2021
Your results are already vectors, so if they're all the same length each time, just concatenate them into a 2D array.
If they're not the same length, you'd have to use a cell array or take a different approach.
Answers (0)
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!