Combine multiple if statements for something more compact
Show older comments
Friends,
I'm trying to refine my code.It works fine but I have four if conditions which I want to make more efficient. Is there an alternative way to do it?
i=1;
while (VMPH<=60)
% Vehicle speed
t(i+1) = t(i)+delt;
Vmps(i+1) = Vmps(i)+((delt*(Facc(i)))/Vm);
VMPH(i+1) = Vmps(i+1)/0.44704;
% Vehicle forces
Fr(i+1) = Fr(1);
Fd(i+1) = 0.5*Af*Cd*(Vmps(i+1))^2;
% Speed conditions
ig(i+1) = 3.78;
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
if N(i+1) > 2150
ig(i+1) = 2.06;
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
end
if N(i+1) > 2150
ig(i+1) = 1.58;
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
end
if N(i+1) > 2150
ig(i+1) = 1.21;
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
end
if N(i+1) > 2150
ig(i+1) = 0.82;
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
end
% Power and performance
Tao_b(i+1) = interp1(Speed,Torque,N(i+1));
Tao_w(i+1)= Tao_b(i+1)*io*ig(i+1)*etadrive;
Ft(i+1) = Tao_w(i+1)/Dt*2;
Pb(i+1) = 2*pi*Tao_b(i+1)*N(i+1)/60;
% Acceleration force
Facc(i+1) = Ft(i+1)-Fd(i+1)-Fr(i+1);
i=i+1;
end
Thank You!
10 Comments
Moritz
on 19 Feb 2018
Why don't you just delete all but the last one? The rest doesn't matter anyhow as it is overwritten by the last if statement.
DIP
on 19 Feb 2018
Birdman
on 19 Feb 2018
Does i stands for ith gear?
Basil C.
on 19 Feb 2018
Why do all the four IF statements have the same condition that
N(i+1)>2150
M
on 19 Feb 2018
Do you ant to execute something while
N(i+1)>2150 ?
Something like
while N(i+1)>2150 && count<4
count=count+1;
your code here
end
DIP
on 19 Feb 2018
M
on 21 Feb 2018
Why not ?
Accepted Answer
More Answers (1)
Roger Stafford
on 19 Feb 2018
Edited: Roger Stafford
on 19 Feb 2018
You can replace the part of the code after "%Speed Conditions" but before "% Power and performance" by these lines:
t = Vmps(i+1)*io*60/(pi*Dt);
x = [3.78,2.06,1.58,1.21,0.82];
ig(i+1) = x(sum(2150<(x(1:4)*t))+1);
N(i+1) = ig(i+1)*t;
They should produce an equivalent result.
2 Comments
Roger Stafford
on 22 Feb 2018
@DIP: That line should work. The expression
sum(2150<(x(1:4)*t))+1
should provide an integer value ranging from 1 to 5. This in turn should be a valid index in the vector x. You can do some checking by writing
ix = sum(2150<(x(1:4)*t))+1;
disp(ix)
to display the values of ix. By the way, it is assumed that the variable t is a scalar. If not, you would probably get a similar error message at the ix calculation.
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!