Not getting the right output for my if statement? [piecewise function]

(Ajay deleted this so I (MF) am restoring it).
% code
function y = FcnEval(x)
if x < -2
y= -1./ ((x.^2) + 1)
elseif -2 <= x < -1
y= sin(x)
elseif -1 <= x < 1
y= x.^2
elseif 1 <= x < 2
y=2
else x >= 2
y=1./(x+1)
end
but when I run the test case: x1 = 3; x2 = -2:2;
y1 = FcnEval(x1)
y2 = FcnEval(x2)
I'm supposed to get y1 = 0.2500
y2= -0.9093 1.0000 0 2.0000 0.3333
what am i doing wrong?

3 件のコメント

Walter Roberson
Walter Roberson 2012 年 10 月 8 日
Meaningful part of the question has been edited out of existence by the original poster :(
Walter Roberson
Walter Roberson 2012 年 10 月 8 日
There is no such thing as an "if loop", just if statements.
Matt Fig
Matt Fig 2012 年 10 月 9 日
Saved from google cache:
% code
function y = FcnEval(x)
if x < -2
y= -1./ ((x.^2) + 1)
elseif -2 <= x < -1
y= sin(x)
elseif -1 <= x < 1
y= x.^2
elseif 1 <= x < 2
y=2
else x >= 2
y=1./(x+1)
end
but when I run the test case: x1 = 3; x2 = -2:2;
y1 = FcnEval(x1)
y2 = FcnEval(x2)
I'm supposed to get y1 = 0.2500
y2= -0.9093 1.0000 0 2.0000 0.3333
what am i doing wrong?

サインインしてコメントする。

 採用された回答

Daniel Shub
Daniel Shub 2012 年 10 月 8 日
編集済み: Daniel Shub 2012 年 10 月 8 日

1 投票

First off, I doubt your code runs since else if is not valid syntax. Second, I am pretty sure that 1 <= x < 2 is not doing what you think it is doing.

5 件のコメント

Ajay
Ajay 2012 年 10 月 8 日
i fixed my syntax and it is running, but i'm not getting the correct answers (everything outputs to "2") I still don't get what is wrong with the function?
Daniel Shub
Daniel Shub 2012 年 10 月 8 日
Again, 1 <= x < 2 is not doing what you think. Do you expect 1 <= 10 < 2 to be true (1) or false (0)? What does MATLAB say? Do you understand why?
Matt Fig
Matt Fig 2012 年 10 月 8 日
Daniel is exactly right.
MATLAB evaluates
1 <= x < 2
as:
(1 <= x) < 2
So no matter whether x is greater than or less than 1, the result of evaluating the expression in parenthesis is always less than 2! Thus all of these are true:
tf = 1 <= -inf < 2
tf = 1 <= inf < 2
tf = 1 <= 0 < 2
Ajay
Ajay 2012 年 10 月 8 日
thanks guys i just fixed it. I wasn't aware that the notation for a piecewise function was differently portrayed in matlab. I'm still not quite getting the right answer for the last part, but it's good to know I'm on the right track!
Daniel Shub
Daniel Shub 2012 年 10 月 8 日
What do you think MATLAB should do with
if 1 <= -2:2 & -2:2 < 2
disp('true');
else
disp('false');
end
MATLAB does exactly what you tell it to do. You need to be careful with arrays ...

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by