Why do I keep getting complex values from an if/else statement?

I'm trying to create values for a variable (called r2 in my code) using random numbers on [0,1] and an if/else statement. However, I keep getting complex values for r2 when that shouldn't happen. Is there an issue with the way I wrote my code? Here it is:
r = rand(25,1)
if r < 0.5
r2 = 0.5-sqrt(0.25-(r/2));
else
r2 = 0.5+sqrt((r/2)-0.25);
end

 採用された回答

Star Strider
Star Strider 2020 年 12 月 3 日

1 投票

The problem is in the if block logic and the way MATLAB evaluates vectors.
if r < 0.5
implies:
if all(r < 0.5)
that of course is not true, so the first section never evaluates.
You could put it in a loop, however this is more efficient:
r2 = (0.5-sqrt(0.25-(r/2))).*(r<0.5) + (0.5+sqrt((r/2)-0.25)).*(r>=0.5);
.

2 件のコメント

Ryan Mahoney
Ryan Mahoney 2020 年 12 月 3 日
This worked. Thank you!
Star Strider
Star Strider 2020 年 12 月 3 日
As always, my pleasure!

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

その他の回答 (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