2011-06-29 106 views
3

我遇到了一些簡化mathematica中某些功能的問題。在我編寫的程序中,我使用Sum函數計算了一些函數,許多項最終乘以零。我希望打印這個功能,但要簡化。我嘗試使用FullSimplify,但它需要永遠運行。然後我嘗試使用簡化,但它不起作用。下面是我得到一個函數的例子,在Mathematica中簡化系列

2. Sqrt[-(-1+x) x]+ 
0. Sin[2 ArcCos[-1+2 x]]+ 
0. Sin[3 ArcCos[-1+2 x]]+ 
0. Sin[4 ArcCos[-1+2 x]]+ 
0. Sin[5 ArcCos[-1+2 x]]+ 
0. Sin[6 ArcCos[-1+2 x]]+ 
0. Sin[7 ArcCos[-1+2 x]]+ 
0. Sin[8 ArcCos[-1+2 x]]+ 
0. Sin[9 ArcCos[-1+2 x]]+ 
0. Sin[10 ArcCos[-1+2 x]]+ 
0. Sin[11 ArcCos[-1+2 x]]+ 
0. Sin[12 ArcCos[-1+2 x]]+ 
0. Sin[13 ArcCos[-1+2 x]]+ 
0. Sin[14 ArcCos[-1+2 x]]+ 
0. Sin[15 ArcCos[-1+2 x]]+ 
0. Sin[16 ArcCos[-1+2 x]]+ 
0. Sin[17 ArcCos[-1+2 x]]+ 
0. Sin[18 ArcCos[-1+2 x]]+ 
0. Sin[19 ArcCos[-1+2 x]]+ 
0. Sin[20 ArcCos[-1+2 x]]+ 
0. Sin[21 ArcCos[-1+2 x]]+ 
0. Sin[22 ArcCos[-1+2 x]]+ 
0. Sin[23 ArcCos[-1+2 x]]+ 
0. Sin[24 ArcCos[-1+2 x]]+ 
0. Sin[25 ArcCos[-1+2 x]]+ 
0. Sin[26 ArcCos[-1+2 x]] 

那麼,爲什麼不這樣簡化爲

2. Sqrt[-(-1+x) x] 

我也有一個跟進的問題,是不是完全一樣重要。但是,讓我們假設這些項中的四項具有非零係數,是否可以將它們合併爲一個項,它是原始數值的近似值?

感謝任何人的答覆!

+0

你能澄清你的第二個問題嗎? –

+1

我認爲你可以簡化你的問題。嘗試'0. + x' –

+0

@Sjoerd看看http://stackoverflow.com/questions/6459872/how-do-i-minimise-the-maximum-aspect-ratio-of-two-subpolygons –

回答

11

向機器精度問好。

(* exact *) 
0 Sin[x] 
Out[1]= 0 

(* machine precision *) 
0. Sin[x] 
Out[2]= 0. Sin[x] 

使用Chop設置數字荒謬接近於零,0準確。

expr = 2. Sqrt[-(-1 + x) x] + 0. Sin[2 ArcCos[-1 + 2 x]] + 
    0. Sin[3 ArcCos[-1 + 2 x]] + 0. Sin[4 ArcCos[-1 + 2 x]] + 
    0. Sin[5 ArcCos[-1 + 2 x]] + 0. Sin[6 ArcCos[-1 + 2 x]] + 
    0. Sin[7 ArcCos[-1 + 2 x]] + 0. Sin[8 ArcCos[-1 + 2 x]] + 
    0. Sin[9 ArcCos[-1 + 2 x]] + 0. Sin[10 ArcCos[-1 + 2 x]] + 
    0. Sin[11 ArcCos[-1 + 2 x]] + 0. Sin[12 ArcCos[-1 + 2 x]] + 
    0. Sin[13 ArcCos[-1 + 2 x]] + 0. Sin[14 ArcCos[-1 + 2 x]] + 
    0. Sin[15 ArcCos[-1 + 2 x]] + 0. Sin[16 ArcCos[-1 + 2 x]] + 
    0. Sin[17 ArcCos[-1 + 2 x]]; 

Chop[expr] 
Out[4]= 2. Sqrt[(1 - x) x] 
+0

歡迎來到10K俱樂部! –

+0

@belisarius:謝謝:) – abcd

+1

一個有趣的「訣竅」是拿一個10位數的計算器並輸入1E12 + 1 - 1E12。如果1是任何位置,但是最後一個,它將返回0.您可以對mma執行相同的操作,但其精度要高一些。在我的機器上,'1. * 10^16 + 1. - 1. * 10^16'給出0.注意小數點,如果它們全部被移除,則mma返回到精確算術並給出1。表達式中的第一項很大,mma有時會忽略小項:見最後一個例子[here](http://www.omninerd.com/articles/First_Rule_of_Computation_Don_t_Trust_Your_Calculator)。 – rcollyer

6

在那些「0」後面。條款中隱藏了一些非常小的(但非零)數字。你可以使用Chop來削減他們。

+0

感謝您的回覆,非常有意義。你應該得到與yoda一樣多的複選標記,但我必須選擇其中一個。 – adhanlon

+0

尤達在這裏比較好。我不認爲我的措辭在技術上是正確的。 –