2012-09-25 73 views
3

我正在嘗試使用Mathematica將代數表達式細化爲一個方便的形式,以確保我不會丟棄一個符號或做出其他無關緊要的滑動。經過大量的宣誓之後,我開始接受這不是一個確定性的過程,我必須一步一步做,而且代數操縱調色板是我的朋友。然而,還有一件事情讓我感到瘋狂。有時候,數學家用這些看似無關緊要的主題來表達吐出的表情。例如,現在我正在看:如何擺脫Mathematica中一個令人討厭的前因子?

0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]) 

的時候我寧願在看:

0.5*(Log[-a^2 + bigr^2] - Log[a^2 - 2.*a*bigr + bigr^2]) 

這不僅僅是一個美觀的問題更多,因爲它混淆因子[]當我嘗試將其應用於上述表達式中的一些明顯的二次分解。任何干淨的修復?

回答

6
your = 0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]) 
your /. {1. -> 1, -1. -> -1} 

(* -> 0.5 (Log[-a^2 + bigr^2] - Log[a^2 - 2. a bigr + bigr^2]) *) 

1之後的點告訴mathematica將該數字視爲非精確數量。因此,例如

1. * 1/2 
(* -> .5 *) 

1 * 1/2 
(* -> 1/2 *) 

使用確切數量在你的計算(1,2,1/2),而不是十進制數(1,2,0.5),如果您需要確切結果

+0

謝謝貝利薩留。無論如何要讓Mathematica把所有東西都保持完整的形式,所以我不必在每次操作後都繼續這樣做。 – Dessie

+0

@Dessie如果您在輸入中使用精確數字,並且絕不要求Mathematica計算數值結果(即,您始終執行代數運算),它將自動保留您的確切數字。如果由於某種原因你不能這樣做,請檢查幫助系統中的「合理化[]」 –

2
expr = 0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]); 

轉換所有近似數精確:

expr // Rationalize 
1/2 (Log[-a^2 + bigr^2] - Log[a^2 - 2 a bigr + bigr^2]) 

選擇性:

expr /. x_ /; x == 1 -> 1 
0.5 (Log[-1. a^2 + bigr^2] - 1. Log[a^2 - 2. a bigr + bigr^2])