2012-01-04 9 views
6

未定義の変数を含む演算の結果の実数部を取得しようとしています(これはxとしましょう)。MathematicaでRe [x]の結果としてxを得る

xが決して複素数ではないことが分かっている場合、Re[x]を実行すると、Mathematicaにはxが返されます。これはMathematicaにxが本当のことを伝えることを必要とすると思います。

私の場合、実数部が必要な式は単純な変数よりも複雑ですが、コンセプトは変わりません。

いくつかの例:

INPUT    OUTPUT   DESIRED RESULT 
-----    ------   -------------- 
Re[x]    Re[x]   x 
Re[1]    1    1 
Re[Sin[x]]   Re[Sin[x]]  Sin[x] 
Re[1+x+I]   1 + Re[x]  1+x 
Re[1 + x*I]  1-Im[x]  1 

答えて

13

あなたは、例えば、出力としてxを与える入力Simplify[Re[x], x \[Element] Reals]を使用することができます。

13

使用ComplexExpand。あなたがそうでないと指示しない限り、変数は実際のものであると仮定します。たとえば:

In[76]:= ComplexExpand[Re[x]] 
Out[76]= x 

In[77]:= ComplexExpand[Re[Sin[x]]] 
Out[77]= Sin[x] 

In[78]:= ComplexExpand[Re[1+x+I]] 
Out[78]= 1+x 
+0

そして、あなたはComplexExpandあなたが$を行うことができ、すべての時間を入力して保存したい場合はポスト= ComplexExpand。 Re [1 + x + 1]、Re [1 + x * 1]は、{x、Sin [x]、1 + x、1 } –

+3

@Rolfここに本当に便利な、私は同意します。一般的には、 '$ Pre'や' $ Post'の使用を避けようとしています。なぜなら、それらを忘れるのは簡単だからです。 –

5

つ以上の可能性:

Assuming[x \[Element] Reals, Refine[Re[x]]] 

Refine[Re[x], x \[Element] Reals] 

両リターンx

1

シンボルとしてUpValuesを定義すると便利なことがあります。これは堅牢ではありませんが、それにもかかわらず多くのケースを処理できます。

Re[x] ^= x; 
Im[x] ^= 0; 

Re[x] 
Re[1] 
Re[1 + x + I] 
Re[1 + x*I] 

X

1 + X

あなたが望むようRe[Sin[x]]は評価しませんが、FullSimplifyによって使用される変換の1がありませんそれをトリガする形式で配置するRe[x]

Re[Sin[x]] // FullSimplify 
Sin[x] 
関連する問題