How do I plot a line graph from two for loops?
조회 수: 1 (최근 30일)
이전 댓글 표시
How can I plot a line graph for h over t and v over t in my code below? I have two for loops I want to graph continuously. Everything else seems to be working as I want it. I want to display the values when f=0, when v is closest to 0, and when h is closest to 0. Yet, I need a line plot to visually show both v over t, velocity over time, and h over t, height over time, combining both functions from t=1:80, and t=81:442
Thank you!
s = f / l;
l = 50;
f = 4000;
a=20;
g=-9.8;
h=0;
for t=1:s
v=a*t;
f=f-l;
h=h+v;
if f==0
display (t)
display (v)
display (f)
display (h)
fprintf ('Average velocity in meters per second per second when rocket runs out of fuel is %d\v',v)
a=g;
for t=(s+1):450;
v=v+(a);
h=h+v;
if t==243
display (t)
display (v)
display (h)
fprintf ('Average maximum height in meters above the ground is %d\v',h)
else
if t==442
display (t)
display (v)
display (h)
fprintf ('Average velocity in meters per second per second right before the rocket hits the ground is %d\v',v)
break;
end
end
end
end
end
댓글 수: 3
dpb
2016년 11월 18일
편집: dpb
2016년 11월 18일
s = f / l;
l = 50;
f = 4000;
...
NB: You've calculated s prior to having defined f, l ...
Reorder to compute s after defining its constituents; else't it'll either error if were to clear variables to start fresh or it's using a previously computed value which may or may not reflect the l/f in the script (at least until the second time it's run w/o changing the two values, anyway).
채택된 답변
Nick Counts
2016년 11월 18일
If you want to do a simulation where you are stepping forward in time, I suggest saving the results of each timestep so when your simulation completes you have all the data.
In your example, you see to be recreating your data at the end in order to plot.
Note: my example is just to show you the structure I am suggesting
% Model Parameters
burnrate = 50; % kg/s
fuel = 4000; % kg
t = fuel / burnrate; % seconds
a_thrust = + 20; % m/s^2
a_gravity = -9.8; % m/s^2
y_0 = 0; % m
v_0 = 0; %m/s
% Simulate each second:
altitude = y_0;
velocity = v_0;
acceleration = 0;
time = 0;
% Simulate until rocket is below ground level
while altitude >= 0
time(end + 1) = time(end) + 1;
% Change model behavior based on fuel
if fuel > 0
deltaFuel = burnrate;
accel = a_thrust;
else
deltaFuel = 0;
accel = a_gravity;
end
% Build vectors for each parameter at each timestep
fuel = fuel - burnrate;
acceleration(end + 1,1) = accel;
velocity(end + 1,1) = velocity(end) + accel;
altitude(end + 1,1) = altitude(end) + velocity(end);
end
% Use logical indexing to select the data corresponding to a positive
% vertical velocity
% Some benefits of this approach are that you can do additional
% math on your results. For example, you could find the points with
% positive acceleration as follows (if you didn't already have an
% acceleration vector)
posAccelIndex = diff(velocity)>0; % NOTE: this vector is 1 line shorter than the model!
posAccelIndex = [true; posAccelIndex]; % Include the initial condition
% Since you do have that parameter, you can use simple logical
% indexing:
posAccelIndex = acceleration >= 0;
% Print some output - use the vectors you built in the model
disp(sprintf('Altitude reached: %f meters', max(altitude)));
disp(sprintf('Velocity at impact: %f m/s', velocity(end)));
% Plot your results using logical indexing to color code and set the legend
figure;
subplot(1,2,1)
hold on;
plot(time(posAccelIndex), velocity(posAccelIndex), 'r', 'displayname', 'Powered');
plot(time(~posAccelIndex), velocity(~posAccelIndex), 'b', 'displayname', 'Freefall');
title('Vehicle Velocity (in m/s)')
legend('show')
subplot(1,2,2)
hold on;
plot(time(posAccelIndex), altitude(posAccelIndex), 'r', 'displayname', 'Powered');
plot(time(~posAccelIndex), altitude(~posAccelIndex), 'b', 'displayname', 'Freefall');
title('Vehicle Altitude (in m)')
legend('show')
Hopefully this helps!
추가 답변 (1개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!