MATLAB Answers

overly convoluted elseif condition

4 views (last 30 days)
Nafila Farheen
Nafila Farheen on 15 Nov 2019
Answered: Steven Lord on 15 Nov 2019
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

  0 Comments

Sign in to comment.

Accepted Answer

Bob Nbob
Bob Nbob 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

  0 Comments

Sign in to comment.

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.

  0 Comments

Sign in to comment.


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)

  0 Comments

Sign in to comment.

Sign in to answer this question.