2012-01-04 75 views
6

我試圖獲得涉及未定義變量的操作結果(假設爲x)的實際部分。在數學中獲取x作爲Re [x]的結果

如果我知道x永遠不會是一個複數,我怎樣才能讓Mathematica返回x當我執行Re[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

可以使用例如輸入Simplify[Re[x], x \[Element] Reals]這將給x作爲輸出。

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 [x],Re [Sin [x]],Re [1 + x + I],Re [1 + x * I]}估計爲{x,Sin [x],1 + x,1 } – 2012-01-04 23:35:21

+3

@Rolf這裏真的很方便,我同意。雖然通常我會盡量避免使用'$ Pre'或'$ Post',因爲很容易忘記它們,並且開始得到意想不到的結果。 – 2012-01-04 23:47:00

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使用變換的人做將其放置在觸發的表單中Re[x]

Re[Sin[x]] // FullSimplify 
Sin[x]