overly convoluted elseif condition

5 views (last 30 days)
Hi, I am writing a code that uses too many else if conditions.I am wondering is there an easy way to that.
function y=gain(x)
for jj=1:4
p(jj)=1-jj/128;
end
if x==1
y=p(1);
elseif x==2
y=p(2)
elseif x==3
y=p(3);
elseif x==4
y=p(4);
else y==1;
end

Accepted Answer

Bob Thompson
Bob Thompson on 15 Nov 2019
You can replace all of them with a single statement and indexing.
if x>=1 & x<=4
y = p(x);
else
y = 1;
end

More Answers (2)

ME
ME on 15 Nov 2019
function y=gain(x)
for jj=1:4
p(jj)=1-jj/128;
end
if x<=4
y=p(x);
else
y=1;
end
end
I have assumed here that your final y==1 was supposed to assign y=1 if x is anything else that 1-4. If that is incorrect then just adjust that last part.

Steven Lord
Steven Lord on 15 Nov 2019
The approaches suggested by Bob Nbob and ME each work if the only values x can take in the range [1, 4] are integer values. If it can take values like 2.5 or pi, I'd use ismember.
% Sample data
x = [1, 2, 2.5 pi, 4, 42]
p = x.^2 + x
% Locate values of x that are 1, 2, 3, or 4
M = ismember(x, 1:4)
% Start y off with the default value of 1 and the right size (the same size as x)
y = ones(size(x))
% Fill in the elements of y where x is 1, 2, 3, or 4 with the right elements of p
y(M) = p(M)
% Let's do something with the other elements too to illustrate the technique
y(~M) = x(~M)

Categories

Find more on Loops and Conditional Statements 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!