有人能帮我吗。我试图在matlab中构建一个矩阵,使用if、elseif和其他方法,但它不适用于我。如果我跳过最后一句,一切正常工作,但如果我运行所有东西,包括最后一句,如果N==L(i)和N==R(i)不工作。所以,如果我跳过最后一个句子if N==1,elseif N>=2 && N<=4,elseif N>=5 && N<=9,elseif N==L(i)和elseif R==L(i),但是如果我运行其他所有的,如果N==L(i)和R==L(i)不工作的话。
N = 72;
M = 72;
adj = zeros(N,M)
L = [10:7:M-13]
R = [16:7:M-7]
for N = 1:M
for i = 1:ceil((M-10)/15)
if N==1
adj(1,2:4)= 1
elseif N>=2 && N<=4
adj(N,(N+3))=1
adj(N,(N+4))=1
adj(N,(N+5))=1
elseif N>=5 && N<=9
adj(N,(N+5))=1
adj(N,(N+6))=1
adj(N,(N+7))=1
elseif N==L(i)
adj(N,N+7)=1
adj(N,N+8)=1
elseif N==R(i)
adj(N,N+6)=1
adj(N,N+7)=1
else
adj(N,N+6)=1
adj(N,N+7)=1
adj(N,N+8)=1
end
end
end发布于 2014-03-09 14:43:49
尝试使用switch语句
N = 72;
M = 72;
adj = zeros(N,M);
L = [10:7:M-13];
R = [16:7:M-7];
for N = 1:M
for i = 1:ceil((M-10)/15)
switch(N)
case {1}
adj(1,2:4)= 1;
case {2:4}
adj(N,(N+3))=1;
adj(N,(N+4))=1;
adj(N,(N+5))=1;
case {5:9}
adj(N,(N+5))=1;
adj(N,(N+6))=1;
adj(N,(N+7))=1;
case {L(i)}
adj(N,N+7)=1;
adj(N,N+8)=1;
case {R(i)}
adj(N,N+6)=1;
adj(N,N+7)=1;
otherwise
adj(N,N+6)=1;
adj(N,N+7)=1;
adj(N,N+8)=1;
end
end
end这给出了与您的代码略有不同的答案。注意,只有第一个令人满意的case将被触发。因此,如果{5:9}和{L(i)}都为真,则只会触发{5:9}情况。
另外,它可能只是一个错误,或者我不理解它的措辞,但是您是在您的描述中编写R==L(i),但它没有出现在代码中。
编辑:
从下面的评论中可以看出,您似乎希望一次触发多个elseif或case语句。在这种情况下,一系列的elseifs或case都不能工作。只需将所有elseif语句替换为单独的、独立的if语句,而不需要任何elseif语句。请注意,现在任何if语句都可以触发,包括您不打算触发的语句。所以你必须仔细观察每一种情况。
https://stackoverflow.com/questions/22283393
复制相似问题