MATLAB: Conditional statements not catching

conditional statementsif-statementsnesting

I'm trying to check conditions of of pairs of x and y values. Instead of nesting an if statement within another to check x and y, i initially tried to use && feature but kept getting error for "operators must be convertible to logical scalar values". After digging through here, I tried the suggestions to change && to & but logically the code wasn't checking the conditions for each individual x and y scalars in my list.
so now I'm trying to nest my if functions, the code executes but still isn't catching the conditions and triggering what I want it too.
function[theta_r,theta_d] = firstassignment_test(x,y)
theta_r = atan(y./x);
theta_d = theta_r*(180/pi);
if (x>0)
if (y>0)
theta_d = theta_r.*(180/pi);
end
elseif (x<0)
if (y>0)
theta_d = (theta_r+pi).*(180/pi);
end
elseif (x<0)
if (y<0)
theta_d = (theta_r-pi).*(180/pi);
end
elseif (x<0)
if (y==0)
theta_d = pi.*(180./pi);
end
elseif (x==0)
if (y>0)
theta_d = (pi./2)*(180./pi);
end
elseif (x==0)
if (y<0)
theta_d = (-pi./2)*(180./pi);
end
end

Best Answer

Looks like your code is intended to have arrays as inputs. Because of this, none of your if-else-etc checking is going to work as you expected. E.g., take the first check:
if (x>0)
If x is a vector, some of the elements could satisfy this and some may not. So what do you expect to happen here? Here is what happens according to the doc for "if", and this is not the behavior that you obviously want:
"An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric). Otherwise, the expression is false."
You could convert each of these blocks to logical indexing instead. E.g., this
if (x>0)
if (y>0)
theta_d = theta_r.*(180/pi);
end
could be converted to this
m = (x>0) & (y>0); % Indexes that you want
theta_d(m) = theta_r(m).*(180/pi); % Operate only on those indexes
Similarly for the other blocks.