Построение матрицы в Matlab с использованием if, elseif и else

Кто-нибудь может мне с этим помочь. Я пытаюсь построить матрицу в Matlab, используя if, elseif и else, но это не работает для меня. Если я пропущу последнее, все будет работать правильно, но если я выполню все, включая последнее предложение, 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

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) в вашем описании, но это не появляется в вашем коде.

Редактировать:
Из вашего комментария ниже, кажется, вы хотите больше, чем один elseif или же case заявление, которое будет срабатывать одновременно. В этом случае ни серия elseifс или caseсработает. Просто замените все elseifс отдельным, индивидуальным if заявления, без каких-либо elseifs. Просто знайте, что сейчас любой if Оператор может вызвать, в том числе те, которые вы не собираетесь. Так что вам придется внимательно смотреть на каждое условие.

Другие вопросы по тегам