【问题标题】:constructing a matrix in matlab using if, elseif and else在matlab中使用if、elseif和else构造一个矩阵
【发布时间】:2014-04-12 13:35:12
【问题描述】:

谁能帮我解决这个问题。我正在尝试使用 if、elseif 和 else 在 matlab 中构造一个矩阵,但它对我不起作用。如果我跳过最后一个 else 一切正常,但如果我运行一切,包括最后一个 else 语句, elseif N==L(i) 和 elseif N==R(i) 不起作用。因此,如果我跳过最后一个 else 语句 if N==1elseif N>=2 && N<=4elseif N>=5 && N<=9elseif N==L(i)elseif R==L(i) 运行正确,但如果我运行所有 elseif N==L(i) 和 elseif 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

【问题讨论】:

  • 输出 supposed 是什么?从我得到的输出看来,向后工作会更简单 - 只需生成一个三对角矩阵并删除几行。

标签: matlab if-statement matrix for-else


【解决方案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 语句。在这种情况下,一系列elseifs 或cases 都不起作用。只需将所有elseifs 替换为单独的if 语句,而不需要任何elseifs。请注意,现在任何if 语句都可以触发,包括您不打算触发的语句。因此,您必须仔细查看每个条件。

【讨论】:

  • 对不起,这只是错字,我已经编辑了我的问题。但这似乎给出了完全相同的结果,并且发生了同样的问题,因为如果 {L(i)} 和 else 语句都为真,则只会触发 else 语句而不是 {L(i)},因为它应该和 {R(i)} 相同,只有 else 语句被触发,但没有 {R(i)}。
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多