Невозможно добавить условие в цикл while в Matlab - PullRequest
1 голос
/ 17 марта 2011

У меня есть цикл while, который выглядит следующим образом:

while ((min_t_border>0) && (colided_border_num > 0) && (~(min_t>0)))
    ...
end

Я хочу добавить к нему еще одно условие: (exit_border_point ~= false) или (exit_border_point), когда я помещаю эфир из условий выше вif заявление, что это работает.Но когда я пытаюсь добавить его в качестве дополнительного условия в while, или даже когда я пытаюсь добавить другое условие в if, например, я попытался if ((exit_border_point ~= false) && (true)), он говорит мне:

"Операнды дляоператоры || и && должны быть преобразованы в логические скалярные значения. "

Что я делаю не так?

*exit_border_point получает эфир в виде вектора (3x1) или false

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Поскольку exit_border_point может быть вектором, попробуйте использовать функции any или all, например:

if (~any(exit_border_point))

Как вы, вероятно, можете догадаться, any возвращает true, если что-либо в массиве оценивается как true, а all возвращает true, если все в массиве true. Они как векторные эквиваленты || и &&.

1 голос
/ 17 марта 2011

Если exit_border_point является вектором 3x1, то (exit_border_point ~= false) также возвращает вектор 3x1, следовательно, ошибка. Используйте это условие вместо:

~isequal(exit_border_point, false)
1 голос
/ 17 марта 2011

Чтобы условие имело смысл в контексте оператора if или while, оно должно оцениваться как скаляр.

Таким образом, вы должны написать

all(exit_border_point)

(что эквивалентно all(exit_border_point == true)), если вы хотите true, если все верно.Замените all на any, если вы хотите выйти из цикла while, как только значение exit_border_point станет истинным.

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

...