Combine multiple if statements for something more compact
4 views (last 30 days)
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
Accepted Answer
Jeff Miller
on 19 Feb 2018
Maybe something like this:
IGVals = [3.78 2.06 1.58 1.21 0.82];
CurrentIG = 1;
i=1;
while (VMPH<=60)
...
% Speed conditions
ig(i+1) = IGVals(CurrentIG);
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
if N(i+1) > 2150
CurrentIG = CurrentIG + 1;
ig(i+1) = IGVals(CurrentIG);
N(i+1) = Vmps(i+1)*io*ig(i+1)*60/(pi*Dt);
end
% Power and performance
...
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.
See Also
Categories
Find more on Matrix Indexing 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!