映画のエンドロール観る派?観ない派?

MathmaticaでNSolveを用いて,連立方程式を解こうとしています.

得られた解が実数の場合,虚数の場合の2つでIf文による条件分岐を行いたいです.

例えば,
 解が実数の時,値をファイルに出力する
 解が虚数の時,値をファイルに出力しない

このとき,解が実数であるか,虚数であるかをプログラムで判断するにはどうすれば良いでしょうか?
目視の場合は,iがあるか,ないかで判断できるのですが,プログラムとして実施する方法を教えて頂きたいです.

よろしくお願い致します.

A 回答 (1件)

いくつか書き方はありますが、aが実数かどうかを調べる場合は


MatchQ[a, _Real]かElement[a, Reals]あたりが適当かと思います。

例)
ans = x /. NSolve[x^3 == 1]
→ {-0.5 - 0.866025 I, -0.5 + 0.866025 I, 1.}
MatchQ[#, _Real] & /@ ans
→ {False, False, True}
Element[#, Reals] & /@ ans
→ {False, False, True}

虚部が0に非常に近いときに虚数と判定されたくない場合は、
Chopなどを用いてから判定してください。

なお、NSolveの第3引数にRealsを指定することで、
最初から解を実数領域に限定できます。

例)
NSolve[x^3 == 1, x, Reals]
→ {{x -> 1.}}

参考URL:http://reference.wolfram.com/language/tutorial/T …
    • good
    • 0
この回答へのお礼

分かりやすいご回答をありがとうございました.

お礼日時:2014/08/31 20:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報