# If statement is not working

1 view (last 30 days)
Mehmet Volkan Ozdogan on 18 Jul 2019
Commented: Walter Roberson on 18 Jul 2019
Hi,
angle1 variable has data from 0 to 90 but is statemant is not working. For example if angle1>=3 and if angle1>=53 give same results.
I do not understand what is the problem.
Thank you...
angle1=abs(atand((newVar(:,3)-newVar5(:,3))./(newVar(:,1)-newVar5(:,1))))
[~,idx5] = pdist2(newVar2,newVar,'euclidean','smallest',1); % indices of nearest * for EACH X
newVar6=newVar2(idx5, :);
angle2=abs(atand((newVar6(:,3)-newVar5(:,3))./(newVar6(:,1)-newVar5(:,1))))
d2=pdist2(newVar5,newVar6);
dy=d2(:)
if angle1>=19
dxs=(sind(angle1).*dx);
dys=(sind(angle2).*dy);
def=dxs-dys
else
dxs=(cosd(angle1).*dx);
dys=(cosd(angle2).*dy);
def=dxs-dys
end

Chad Greene on 18 Jul 2019
What are the newVars?
Mehmet Volkan Ozdogan on 18 Jul 2019
newVars is a matrice 100x3. they are coordinates...
Thanks

Walter Roberson on 18 Jul 2019
In MATLAB, the test
if A > B
is treated the same as if it had been
if all(A(:) > B(:))
Your angle1 is a vector. Some of the elements of it are >= 19, but not all >= 19, so the if is not considered to be true.
When you are working with non-scalars, you should get in the habit of explicitly coding all() or any() to indicate which test you intend.
... But what you probably really need is to learn about logical indexing: see https://blogs.mathworks.com/steve/2008/01/28/logical-indexing/

Rik on 18 Jul 2019
Try to find a tutorial in your native language that explains loops and logical indexing.
Your code has every indication that you should be using that instead.
Mehmet Volkan Ozdogan on 18 Jul 2019
I have now understand what you mean and solved my problem
for i=(1:100)
if all(angle1(i)>=19)
dxs(i)=(sind(angle1(i)).*dx(i));
dys(i)=(sind(angle2(i)).*dy(i));
else
dxs(i)=(cosd(angle1(i)).*dx(i));
dys(i)=(cosd(angle2(i)).*dy(i));
end
def(i)=dxs(i)-dys(i)
end
Walter Roberson on 18 Jul 2019
Example: