Take the 2-minute tour ×

I have a while loop which looks like this:

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

I want to add to it another condition: (exit_border_point ~= false) or (exit_border_point) when I put ether of the conditions above in an if statement it works. But when I try to add it as an additional condition to the while, or even when I try to add another condition to the if, for example I've tried if ((exit_border_point ~= false) && (true)) it tells me:

"Operands to the || and && operators must be convertible to logical scalar values."

What am I doing wrong?

*exit_border_point gets ether a (3x1) vector or false

share|improve this question

3 Answers 3

up vote 2 down vote accepted

Since exit_border_point can be a vector, try using the any or all functions, like this:

if (~any(exit_border_point))

As you can probably guess, any returns true if anything in the array evaluates to true and all returns true if everything in the array is true. They're kind of like vector equivalents to || and &&.

share|improve this answer

For the condition to make sense in the context of an if or while statement, it should evaluate to a scalar.

Thus, you should write


(which is equivalent to all(exit_border_point == true)), if you want true if all are true. Replace all with any if you want to exit the while-loop as soon as any exit_border_point is true.

Note that && and || only work for scalars. They're short-cut operators in that the second statement won't be evaluated if the first one determines the outcome (e.g. evaluates to false in case of &&. If you want to element-wise compare arrays, use & and |.

share|improve this answer

If exit_border_point is a 3x1 vector then (exit_border_point ~= false) also returns a 3x1 vector, hence the error. Use this condition instead:

~isequal(exit_border_point, false)
share|improve this answer

Your Answer


