# if statement is not working

2 views (last 30 days)

Show older comments

Lama Hamadeh
on 8 Dec 2021

Commented: Abolfazl Chaman Motlagh
on 9 Dec 2021

Hi all,

I have the follwoing code that runs fine but no output of the if statement for some reason:

theta = [-90.0000 -63.4746 -52.1364 -43.1736 -35.3765 -28.2737 -21.6183 ...

-15.2575 -9.0847 -3.0170 3.0170 9.0847 15.2575 21.6183 28.2737 ...

35.3765 43.1736 52.1364 63.4746 90.0000];

x0 = 0.1250;

y0 = 0;

if theta >= 41.19 & theta <= 90

inter_r = -(1/sin(theta))*[-sin(theta) cos(theta)*(x0-1)-y0.*sin(theta)];

end

An error of (Unrecognized function or variable 'inter_r') occurs.

Any help would be appreicted.

Thanks.

##### 0 Comments

### Accepted Answer

Jon
on 8 Dec 2021

Edited: Jon
on 8 Dec 2021

The problem is that your if statement will only be true if all of the elements of theta satisfy the condition.

If you only want to assign inte_r for elements where the condition is met you could do something like this:

theta = [-90.0000 -63.4746 -52.1364 -43.1736 -35.3765 -28.2737 -21.6183 ...

-15.2575 -9.0847 -3.0170 3.0170 9.0847 15.2575 21.6183 28.2737 ...

35.3765 43.1736 52.1364 63.4746 90.0000];

x0 = 0.1250;

y0 = 0;

% assign logical vector which is true for elements that are in range

inRange = theta >= 41.19 & theta <= 90

% select elements of theta that are in range

thetaInRange = theta(inRange)

% assign function values just for elements that are in range

inter_r = -(1.0 ./sin(thetaInRange)).*...

##### 2 Comments

### More Answers (1)

Abolfazl Chaman Motlagh
on 8 Dec 2021

the condition theta >= 41.19 & theta <= 90 is a logical vector with 20 values. if you want to calculate such a formula for those theta that satisfy the condition. you can use for loop or vectorize code.

theta = [-90.0000 -63.4746 -52.1364 -43.1736 -35.3765 -28.2737 -21.6183 ...

-15.2575 -9.0847 -3.0170 3.0170 9.0847 15.2575 21.6183 28.2737 ...

35.3765 43.1736 52.1364 63.4746 90.0000];

x0 = 0.1250;

y0 = 0;

for i=1:numel(theta)

if theta(i)>= 41.19 & theta(i)<= 90

inter_r(i,1:2) = -(1/sin(theta(i)))*[-sin(theta(i)) cos(theta(i))*(x0-1)-y0.*sin(theta(i))];

else

inter_r(i,1:2) = nan; % for example

end

end

or vectorize

Condition = theta >= 41.19 & theta <= 90;

inter_r(Condition,1:2)=repmat(-(1./sin(theta(Condition)))',[1 2]).* ...

[-sin(theta(Condition))' (cos(theta(Condition))*(x0-1)-y0.*sin(theta(Condition)))'];

inter_r(~Condition,:)=nan;

##### 2 Comments

Abolfazl Chaman Motlagh
on 9 Dec 2021

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!