Having two logical operators in one for statement

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

&& -p(i) <= 0
as a matter of form, I recommend the test
&& p(i) >= 0
The negative logic is unnecessarily confusing.

댓글을 달려면 로그인하십시오.

 채택된 답변

Taylor
Taylor 2024년 10월 21일

0 개 추천

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

Since I am using only && operators here, will the operation check all three conditions or will it stop running after checking the first two?
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.
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Signal Processing Toolbox에 대해 자세히 알아보기

제품

릴리스

R2024a

질문:

2024년 10월 21일

댓글:

2024년 10월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by