## overly convoluted elseif condition

### Nafila Farheen (view profile)

on 15 Nov 2019 at 15:22
Latest activity Answered by Steven Lord

### Steven Lord (view profile)

on 15 Nov 2019 at 15:57

### Bob Nbob (view profile)

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

### Bob Nbob (view profile)

on 15 Nov 2019 at 15:29

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

### ME (view profile)

on 15 Nov 2019 at 15:31

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 (view profile)

on 15 Nov 2019 at 15:57

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)