使用if,elseif和else在matlab中构造矩阵

时间:2014-03-09 14:24:55

标签: matlab if-statement matrix for-else

任何人都可以帮助我。我正在尝试使用if,elseif和else在matlab中构建一个矩阵,但它对我不起作用。如果我跳过最后的其他一切都正常,但如果我运行所有内容,包括最后一个其他句子,elseif N==L(i)和elseif N==R(i)不起作用。因此,如果我跳过最后一个句子if N==1elseif N>=2 && N<=4elseif N>=5 && N<=9elseif 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

1 个答案:

答案 0 :(得分:1)

尝试使用switch case语句

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)但未出现在您的代码中。

编辑:
从下面的评论中,您似乎希望一次触发多个elseifcase语句。在这种情况下,一系列elseifcase都不起作用。只需将所有elseif替换为单独的,单独的if语句,而不使用任何elseif。请注意,现在任何if语句都可以触发,包括您不想要的语句。因此,您必须仔细查看每种情况。