Keep on getting 'Error using plot, Vectors must be the same length'. How can I plot it correctly?

4 次查看(过去 30 天)
t(1) = 0; %Time, seconds
T(1) = 0; %Thrust, Newtons
m = 85/1000; % mass, grams
h(1) = 0.2; %Height, meters
A_rocket = 1.2141; %Drag Area, meters^2
c_d = 0.06; %Coefficient of Drag
g = 9.81; %Gravity, meters/second^2
p = 1.225; %Air Density, kilograms/meter^3
v(1) = 0; %Velocity, meters/second
a(1) = 0; %Acceleration, meters/second^2
W = 0.324; %Weight, Newtons
%%
i = 1; %Loop Term
h_check = h(1); %Height Check
t_step = 0.01; %Time Step Intervals
while h_check >= -0.5
%Thrust Function
if t(i) <= 0.22
T(i) = 45.45*(t(i));
elseif t(i) <= 0.27
T(i) = -140*(t(i))+3;
elseif t(i) <= 0.67
T(i) = -2.5*(t(i))+3;
elseif t(i) <= 0.72
T(i) = -40*(t(i))+2;
else T(i) = 0;
break
end
a(i+1)= - m * g + T(i) - c_d * ((p * v(i).^2)/2) * 0.2 / m
v(i + 1) = v(i) + a(i) * t_step
h(i + 1) = h(i) + v(i) * t_step
t(i+1) = t(i)+t_step;
i = i + 1
end
t(end) = [];
h(end) = [];
figure
plot(t,T)
title('Time Vs. Thrust')
xlabel('Time')
ylabel('Thrust')
figure
plot(t,a)
title('Time Vs. Acceleration')
xlabel('Time')
ylabel('Acceleration')
figure
plot(t,v)
title('Time Vs. Velocity')
xlabel('Time')
ylabel('Velocity')
figure
plot(t,h)
title('Time Vs. Height')
xlabel('Time')
ylabel('Height')
  2 个评论
KSSV
KSSV 2020-12-8
To plot the x-data and y-data should be of same dimension.
We cannot run your code to check as most of the variables are not defined.
Adam
Adam 2020-12-8
Just check that the vectors you are plotting are the same length as each other. It's much easier for you to do that when you have the variables there in your workspace than for us looking at some ill-formatted code on screen. t must be the same length as T, a, v and h.

请先登录,再进行评论。

采纳的回答

Daniel Pollard
Daniel Pollard 2020-12-8
编辑:Daniel Pollard 2020-12-8
When the while loop breaks, you have defined T to have length of i_max, and t has length i_max+1. This is because of the line
t(i+1) = t(i) + t_step
which causes the vector t to be one element longer than T. To be able to plot correctly, you could either drop the last element in t (since it doesn't appear to affect the last element of T) or compute a final element of T. It looks like you already thought of my first idea, so if you remove the lines
t(end) = [];
h(end) = [];
your code should work.
Edit I made some errors in my previous answer, this is corrected now.
  4 个评论
Daniel Pollard
Daniel Pollard 2020-12-8
Excellent, glad to hear it. In that case accept the answer and close the question, so that people who search in the future know what worked for you.

请先登录,再进行评论。

更多回答(1 个)

Steven Lord
Steven Lord 2020-12-8
Looking at a portion of your code with other parts cut out:
% snip
while h_check >= -0.5
% snip
a(i+1)= - m * g + T(i) - c_d * ((p * v(i).^2)/2) * 0.2 / m
v(i + 1) = v(i) + a(i) * t_step
h(i + 1) = h(i) + v(i) * t_step
t(i+1) = t(i)+t_step;
% snip
end
At this point, the vectors a, v, h, and t are likely the same length assuming that the lines where you assign to element i+1 of each are actually growing the corresponding vector.
t(end) = [];
h(end) = [];
t and h are now one element shorter than a and v.
% snip
figure
plot(t,a)
% snip the rest of the code
These two vectors are not the same length so MATLAB correctly throws an error.
FYI for the future, one tool that can be useful in debugging this type of error is an error breakpoint. This will cause MATLAB to stop as soon as the error occurs so you can examine the size, type, and contents of the variables being used on the line where the error occurs.

类别

Help CenterFile Exchange 中查找有关 Annotations 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by