Problem in if-else if-else structure

Hi, I have written the following program. But it does not output the result I get from manual calculations. Perhaps I have gone wrong in writing the logic. The program is as below.
if X1(i)==a(i) && X2(i)==b(i)
t(i)= a(i)* b(i);
else if X1(i)== a(i) && X2(i)==NaN && X1(i+1)==a(i+1) && X2(i+1)==NaN
t(i)= a(i)* a(i+1);
else if X1(i)== a(i) && X2(i)==NaN && X1(i+1)==NaN && X2(i+1)==b(i+1)
t(i)= a(i)* b(i+1);
else if X1(i)==NaN && X2(i)== b(i)&& X1(i+1)==a(i+1) && X2(i+1)==NaN
t(i)= b(i)* a(i+1);
else if X1(i)==NaN && X2(i)== b(i)&& X1(i+1)==NaN && X2(i+1)==b(i+1)
t(i)= b(i)* b(i+1);
else
t(i)= 0;
end
end
end
end
end
The input is as below. X1=NaN a(2) NaN a(4) a(5) NaN NaN
X2= NaN b(2) b(3) NaN b(5) NaN NaN
i=1:7 and i=8 equals to i=1
The output is as below.
t= 0 c 0 0 d 0 0
But there should be output at t(3) and t(4). Can anybody point out where I went wrong? Thanks

1 个评论

Should I be using a 'switch' in this case? I am new to matlab and have never used 'switch' before. Can someone please help?

请先登录,再进行评论。

回答(1 个)

You can't compare to NaN with the == operator, since NaN is not equal to anything (including itself). You must use the isnan function. E.g.,
else if X1(i)== a(i) && X2(i)==NaN && X1(i+1)==a(i+1) && X2(i+1)==NaN
should be
else if X1(i)== a(i) && isnan(X2(i)) && X1(i+1)==a(i+1) && isnan(X2(i+1))
etc.
For example,
>> a = nan
a =
NaN
>> a == nan
ans =
0
>> a == a
ans =
0

6 个评论

Hi James, Thanks for the response. But now I get an error at
else if isnan(X1(i)) && X2(i)== b(i)&& X1(i+1)==a(i+1) && isnan(X2(i+1))
t(i)= b(i)* a(i+1);
Do you know why is that? Thanks again!
What error message are you seeing?
Attempted to access X1(4); index out of bounds because numel(X1)=3.
Please show the exact code you are using to build X1 and X2.
my code is long and I only showed the part where I assume the problem is. I can post it, but I assume that would confuse you. But here it is. I have substituted X1=onpointX1, X2=onpointX2 etc.
Hi All, I found out where my problem is. I had to create another for loop. Thank you very much!

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Logical 的更多信息

产品

提问:

2016-11-11

评论:

2016-11-11

Community Treasure Hunt

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

Start Hunting!

Translated by