Построение матрицы в 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
заявления, без каких-либо elseif
s. Просто знайте, что сейчас любой if
Оператор может вызвать, в том числе те, которые вы не собираетесь. Так что вам придется внимательно смотреть на каждое условие.