Matlab 教材:數值計算無可避免的誤差

Matlab 可以正確計算 1/2 或者 1/5,但是

1 / 3
計算結果是 0.3333; 我們知道答案應該是 0.3循環,所以 Matlab 的計算節果並不正確。 這是 所有數值計算軟體無法避免的誤差。 因為計算機的空間與人們能夠等待的時間是有限的, 所以所有的數值計算軟體,都 不可能計算小數點下無窮多位, 而必須在某個小數點下的位置切斷。 這就造成了誤差,稱為 四捨五入誤差 (round-off error) 或者 機器誤差 (machine error)。 這些誤差會「累積」,而逐漸造成較大的誤差。

數學的一門分支「數值分析」所討論的課題之一, 就是因為機器的有限性所產生的四捨五入誤差,在整個計算過程當中扮演的角色。

有時候 Matlab 聰明到可以還原具有少量誤差的小數。例如

3 * (1/3)
得到答案 1,還有
1/3 + 1/3 + 1/3
也得到答案 1。但是,雖然
7 * (1/7)
可以得到答案 1,不過
1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7
就變成了 1.0000。 這意味著 Matlab 並沒有真的算出來 1,而是非常接近 1 的一個數, 在小數點下第五位四捨五入之後,是 1.0000。

習題

  1. 計算 1/99*(1/9)1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9
[BCC16-B]
單維彰 (03/03/06) ---
[Prev] [Next] [Up]