MATLAB: Nested If-ELSEIF statements

elseelseififMATLAB

I tried looking up this question in litreature and the forum and I couldn't find anything pertaining to my situation.
I have the following nested if-elseif statements, and I observed by using breakpoints, the code skips after processing the first if-elseif statement. It skips the caulations at the ellipsis too. I want it to run through the rest of the elseif and check the logic and calculate results – any help is appreciated
This excerpt is supposed to change the extreme points out of Nx and -Nx.
if X<-Nx
X=Nx;
elseif X>Nx
X=-Nx;
if Y<-Ny
Y=Ny;
elseif Y>Ny
Y=-Ny;
if Z<-Nz
Z=Nz;
elseif Z>Nz
Z=-Nz;
...
end
end
end

Best Answer

Hans123 - do you really need nested if-elseif blocks to change the extreme points? Wouldn't you just do them for x, y, and z seperately? Otherwise you might see this "skipping" depending upon which condition evaluates to true. For example,
if X<-Nx
X=Nx;
elseif X>Nx
X=-Nx;
if Y<-Ny
Y=Ny;
elseif Y>Ny
% etc.
if the first condition evaluates to true i.e. X < -Nx then the code to check Y and Z will not be evaluated since they are nested within the elseif body. Instead try
if X<-Nx
X=Nx;
elseif X>Nx
X=-Nx;
end
if Y<-Ny
Y=Ny;
elseif Y>Ny
Y=-Ny;
end
if Z<-Nz
Z=Nz;
elseif Z>Nz
Z=-Nz;
end
Note how the above code is duplicated for x, y, and z. This might be okay for just three variables, but if you have more, you may want to use arrays to manage this.
bounds = [Nx Ny Nz];
values = [X Y Z];
for k = 1:length(bounds)
if values(k) < -bounds(k)
values(k) = bounds(k);
elseif values(k) > bounds(k)
values(k) = -bounds(k);
end
end
Related Question