For loops and If statements not working correctly

8 visualizaciones (últimos 30 días)
Deepak Singh
Deepak Singh el 13 de Oct. de 2019
Comentada: Deepak Singh el 14 de Oct. de 2019
Hello,
I'm trying to plot a time to velocity graph where the velocity is calculated from 3 equations. The three equations are:
3equations.PNG
This is what my code looks like:
clc
clear
time = [0:0.1:25];
velocity = zeros(length(time),1);
for t = time
if t <= 5
velocity = 0.1553567*time.^6 - 2.0416*time.^5 + 9.1837*time.^4 - 14.829*time.^3 - 1.3703*time.^2 + 32.821*time - 1.3155;
elseif (5<t) && (t<=15.4)
velocity = 0.003980879*time.^5 - 0.2247*time.^4 + 4.8682*time.^3 - 50.442*time.^2 + 254.67*time - 430.66;
else
velocity = -0.073*time.^2 + 6.1802*time + 40.423;
end
end
plot(time,velocity)
For some reason all the time seems to go through the else statement. Can anyone please help me out, I've been struggling on this simple code for a while now. The graph should also look something similar to this:
camaro.PNG

Respuesta aceptada

Turlough Hughes
Turlough Hughes el 13 de Oct. de 2019
First of all, when you use element-wise operators (.* .^ ./) like you have been trying you don't necessarily need to run the for loop
Your answer could be:
time =[0:0.1:25];
t1=time(time<5);
velocity1=0.1553567*t1.^6 - 2.0416*t1.^5 + 9.1837*t1.^4 - 14.829*t1.^3 - 1.3703*t1.^2 + 32.821*t1 - 1.3155;
t2=time(5<=time & time<=15.4)
velocity2 = 0.003980879*t2.^5 - 0.2247*t2.^4 + 4.8682*t2.^3 - 50.442*t2.^2 + 254.67*t2 - 430.66;
t3=time(time>15.4)
velocity3=-0.073*t3.^2 + 6.1802*t3 + 40.423
velocity=[velocity1 velocity2 velocity3]
plot(time,velocity)
However, when you run the for loop you are solving for one value of time on each iteration of the loop and so element-wise operators aren't necessary. Though you will need to include an index to indicate the position to store your newly determined velocity on each iteration of the loop.
I included an index c which increments by 1 each iteration of the loop and the new value for velocity is stored in velocity(1,c)
So, the first three iteration of your loop will do the following
velocity (1,1) = answer when you plug t=0 into equations
velocity(1,2) = answer when t=0.1
velocity(1,3) = answer when t=0.2
and so on.
See the following:
clc
clear
time = [0:0.1:25];
velocity = zeros(size(time)); % time is a row vector, so best to keep velocity as a row vector.
c=0;
for t = time
c=c+1; % index
if t < 5
velocity(1,c) = 0.1553567*t^6 - 2.0416*t^5 + 9.1837*t^4 - 14.829*t^3 - 1.3703*t^2 + 32.821*t - 1.3155;
elseif 5<=t && t<=15.4
velocity(1,c) = 0.003980879*t^5 - 0.2247*t^4 + 4.8682*t^3 - 50.442*t^2 + 254.67*t - 430.66;
else
velocity(1,c) = -0.073*t^2 + 6.1802*t + 40.423;
end
end
plot(time,velocity)
  1 comentario
Deepak Singh
Deepak Singh el 14 de Oct. de 2019
Thank you very much for your help correcting the code and clearing up the mistakes I had made in your response.

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 13 de Oct. de 2019
https://www.mathworks.com/matlabcentral/answers/480004-need-help-with-taking-an-array-inside-a-for-loop-and-plotting-it#answer_391484

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by