# Hi Everyone, I need your help on my problem.

1 view (last 30 days)
Engdaw Chane on 7 Mar 2018
Commented: Walter Roberson on 7 Mar 2018
I have a 3D matrix (abc), and I need to do if and elseif conditions to this matrix. However, the only the first expression(aa=abc-5) is applied to all elements. %
%
ab=[10,2,2;4,12,6;7,5,9];
abc=repmat(ab,1,1,3);
if 1<abc<=5
aa=abc-5;
elseif 6<abc<=10
aa=abc+10;
end
How can I make the elseif expression work?
Thank you.
Chane

Jan on 7 Mar 2018
Edited: Jan on 7 Mar 2018
1 < abc <= 5
This will not do, what you expect. Matlab processes this expression from left to right:
1. 1 < abc. This is either TRUE or FALSE, which is interpreted as 1 or 0
2. 1 <= 5 or 0 <= 5. This is TRUE in both cases.
You want:
1 < abc && abc <= 5
Then your if and elseif will work.
For productive code using logical indexing as suggested by Birdman is usually more efficient and nicer. But understanding why a<b<c fails is essential.
Engdaw Chane on 7 Mar 2018
@Jan This was what I have been looking for. The others also work but I wasn't getting the dimensions I needed because of a reason in my code. Thank you.

Birdman on 7 Mar 2018
Edited: Birdman on 7 Mar 2018
Actually, you do not need a ifelse statement. Simple logical indexing will give you what you want.
ab=[10,2,2;4,12,6;7,5,9];
abc=repmat(ab,1,1,3);
abc(abc>1 & abc<=5)=abc(abc>1 & abc<=5)-5;
abc(abc>6 & abc<=10)=abc(abc>6 & abc<=10)+10
Walter Roberson on 7 Mar 2018
If the inputs are certain to be in that range then you can simplify to