在前面, 我們說過, 各式各樣的可積分定義, 都是在理論上論斷一個函數在某個區間內是可積還是不可積; 換句話說, 其曲線下的面積, 是有限還是無限. 如果在某個定義的推論之下, 某函數 f(x) 在 [a,b] 區間內是可積的, 那也就是 f(x) 在 [a,b] 範圍內的曲線下面積是有限的; 或者說, f(x) 所描述的運動 (或變化) 在 [a,b] 範圍內的總變化量是有限的. 既然有限, 那我們當然想要知道它的數量值. 但是我們怎麼能計算 的積分值呢? 基本上只有兩種方法: (1) 回到古典的想法, 找到 f(x) 的反導函數 F(x), 然後計算 F(b)- F(a). (2) 如果找不到反導函數, 用一個數值積分的方法, 運用電腦程式來估計其積分值.
那麼, 一個學習微積分的人要問, 理論的作用是什麼呢? 為什麼不直接把積分問題丟到電腦裡面去算就好了呢? 現在, 我們要舉幾個簡單的例子, 表現數學理論的重要性. 雖然這些例子很簡單, 但是我們應當警惕: 類似這樣的情況, 很可能以更複雜的情況在實際應用中出現. 所以我們不能因為例子的簡單而忽略了它們的重要性.
在高中的時候, 我們學習了多項式的微分公式. 所以我們至少知道, 當 n 是個正整數的時候,
把這個問題改變一點點, 問
讓我們寫一個簡單的 FORTRAN 程式來估計 (2) 式中的級數和:
PROGRAM HARMS REAL X, SUM INTEGER I, N SUM = 0. DO 10 I = 2, 3000000 X = 1./I SUM = SUM + X IF (MOD(I, 100000) .EQ. 0) WRITE(6,*) I, SUM 10 CONTINUE STOP END
以上是個錯誤示範. 如果您仔細一想, 就會說: 不會吧? 當我們以 1/2 為間隔的時候, 所得到的右黎曼和是 (3). 這個數字比 (1) 小 1/2, (而計算結果也同意). 但是, 從圖形上觀察, 以 1/2 為間隔的右黎曼和應該要比以 1 為間隔的右黎曼和來得大才對啊?
我們還沒有在數學理論上證明 是可積的. 事實上, 讓我們回頭看看 (2) 式. 其實這個級數是發散的. 也就是說它沒有極限, 記作
讓我們檢查 (2) 式中的級數的前幾項.
可見, 14.40369 這個 ``收斂值'' 根本就是錯的. 為什麼電腦會算錯呢? 這是由於計算機的先天性障礙: 它只能處理有限多個有限位數的數. 詳細的情形, 應該在計算機概論課程中解釋. 凡是做浮點數 (floating number) 計算的程式, 例如以 FORTRAN 或 C 寫出來的程式, 都是如此. 像 Maple 這類計算軟體, 可以定義任意多位數的計算 (比如說, Maple 可以定義精確度到三千位數. 相對於 FORTRAN 的單精度---八位數, 和雙精度---十六位數, 的確是多了很多位. 但畢竟還是有限多位數. 像這個例子中誤判收斂的情況, 還是可能發生.) 或許可以幫助我們檢查發散的情況. 但是, 其功能還是有限的. 您可以將位數定得很高來作計算, 但是, 那就要花掉很多的時間和記憶體空間. 到最後, 要不是您的記憶體不夠用了, 就是您沒有時間等下去了.
利用 Maple 的計算位數限制功能, 我們可以模擬只有兩位數的浮點計算. 因此, 可以更快得看到計算位數對於收斂與發散的誤判所發生的影響.
Digits := 2: harm := 0: for i from 1 to 30 do harm := evalf(harm + 1/i); od;
現在我們知道 是發散的, 但是 呢? 仍然是用右黎曼和的想法, 可以看到
我們看到, 可以利用與已知收斂或發散的級數 (或數列, 積分等) 做個比較, 而判定一個級數 (或數列, 積分等) 是收斂還是發散. 但是要小心判斷的方向. 比某個收斂級數小的級數就一定會收斂, 但是比某個收斂級數大的級數可不一定就發散. 一旦我們利用這些技術證明了一個級數 (或數列, 積分等) 是收斂的, 那麼就可以大膽的使用計算機來估計其數值. 否則, 您的計算結果是非常不可信賴的. 這就是數學理論的重要性.