Случайное блуждание: как правильно выйти за l oop - PullRequest
0 голосов
/ 10 февраля 2020

С учетом следующего сценария случайного блуждания

 1      f = zeros(1,100);
 2      x = 40;
 3      for i = 1:1000
 4          r = rand;
 5          if r >= 0.5
 6              x = x + 1;
 7          else
 8              x=x-1;
 9          end
10          if x ~= 0 | x ~= 100
11              f(x) = f(x) + 1;
12          elseif x==0 | x==100
13              break
14          end
15      end
16      bar(f)

Иногда он выдает мне следующую ошибку:

Array indices must be positive integers or logical values.

Error in random_walk (line 11)
        f(x) = f(x) + 1;

Что нормально с x=0. Но почему условие elseif не выполняется для выполнения break и избежания этой ошибки?

1 Ответ

3 голосов
/ 10 февраля 2020

if x ~= 0 | x ~= 100 никогда не может быть ложным. Если x~=0 ложно, то x~=100 будет истиной. Один из двух компонентов всегда истинен, и, следовательно, комбинация ИЛИ всегда истинна.

Возможно, вы захотите использовать if x ~= 0 && x ~= 100.

Обратите внимание на разницу между | и || и между & и &&. Единственный оператор является поэлементным оператором и потенциально возвращает матрицу. Другой является истинным логическим оператором, который всегда возвращает простой true или false. В данном конкретном случае они идентичны, но полезно использовать правильный оператор в нужном месте.

Обратите также внимание, что следующий elseif должен быть простым else. Вы никогда не должны повторяться, это приводит только к труднопроходимым ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...