Having two logical operators in one for statement

3 visualizaciones (últimos 30 días)
Antonio
Antonio el 21 de Oct. de 2024
Comentada: Walter Roberson el 21 de Oct. de 2024
I am trying to check if three logical statements are true in order to proceed with the for statement, otherwise the function would return 0. Does this work and if not how should I proceed?
if abs(p(i)) > sigma_d && -p(i) <= 0 && d(i) > 0
ddot = -A1*(abs(p(i))/sigma_d - 1);
else
ddot = 0;
end
  1 comentario
Walter Roberson
Walter Roberson el 21 de Oct. de 2024
&& -p(i) <= 0
as a matter of form, I recommend the test
&& p(i) >= 0
The negative logic is unnecessarily confusing.

Iniciar sesión para comentar.

Respuesta aceptada

Taylor
Taylor el 21 de Oct. de 2024
It works, but you will need to consider the precedence of the various logical operators https://www.mathworks.com/help/matlab/matlab_prog/operator-precedence.html
  3 comentarios
Steven Lord
Steven Lord el 21 de Oct. de 2024
If the first condition is false, the second and third will not be executed. false and-ed with anything is false so we know the whole expression is false.
If the first condition is true but the second condition is false, the third will not be executed for the same reason as above. true and false is false and false and-ed with anything is false.
Walter Roberson
Walter Roberson el 21 de Oct. de 2024
The && operator stops executing as soon as the left side is false. With the && operator, the right side is not executed at all if the left side is false. So you can have code such as
A = 0;
A ~= 0 && error("A non-zero")
ans = logical
0
Notice the error was not triggered: it stopped executing as soon as the left side was false

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos


Versión

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by