Nested If-ELSEIF statements

조회 수: 11 (최근 30일)
Hans123
Hans123 2020년 6월 16일
댓글: Hans123 2020년 6월 16일
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
  댓글 수: 3
Hans123
Hans123 2020년 6월 16일
I think I figured out the issue, the reason the code skipped the rest of the if-elseif is because my end commands were clustered together at the end of the code. I should have end my if-elseif statement right afterwards before starting a new one.
Thanks^
FIX
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
...
Hans123
Hans123 2020년 6월 16일
@Bjorn, thank you for your reply - this is meant for a periodic boundary condtion statement. It is not intuitive took me a minute too

댓글을 달려면 로그인하십시오.

채택된 답변

Geoff Hayes
Geoff Hayes 2020년 6월 16일
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

추가 답변 (1개)

Image Analyst
Image Analyst 2020년 6월 16일
Without knowing the values of any of those variables? How are we supposed to do that? Can you attach them in a .mat file
save('answers.mat', 'X', 'Y', 'X', 'Nx', 'Ny', 'Nz');
But I'm sure it's going into, or skipping, whatever if/else block it's supposed to based on the variable values and nesting.
Do you want to do anything in the case that X is in the range [-Nx, Nx]? Currently that case is not handled.
Do you just want to clip values, like
X = min(X, Nx);
X = max(X, -Nx);
instead of all that if stuff?

카테고리

Help CenterFile Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by