積分的計算
單維彰‧2015 年 5 月
用 Maxima 做積分的指令是 integrate ,它就是「積分」的動詞,「定」或「不定」
都一樣,只是參數不同。
做不定積分
f x dx( ) 的指令形式是integrate( f(x), x ) 例如
integrate(x^2,x);
就是
x dx2 的意思,得到13x ,注意 Maxima 沒有為我們「+C」3 ,要自己記得這 個未定常數:
x dx2 13x3 。 C至於做定積分 b ( )
a f x dx
的指令則有四個參數integrate( f(x), x, a, b ) 例如
integrate(x^2, x, ‐1, 1);
就是 1 2
1x dx
的意思,得到23。以上舉的例子很簡單,那是因為只要學會輸入複雜的函數,Maxima 就會執 行。例如想作
2 1
x dx x
,可以先輸入被積分函數 x/sqrt(x^2+1);確定沒錯之後,再輸入 integrate(%o3, x);
其中 %o3 只是舉例,視實際情況決定參數。於是我們得到
2 1
x dx x
x2 1 C。但是,積分不像微分:不管多麼複雜的函數,只要寫得出數學式,就能做出導函 數。可是積分就不見得算得出反導函數。甚至,有些看起來頗單純的數學式,積 分之後會出現還不認得的反導函數。例如由指令
integrate(1/x , x);
得知
1 dx logx C
x
有些人認識 log,但其實它並不是「常用對數」的意思。而看起來不太複雜的 1 x 2 得到很複雜的反導函數:
2 1 1 2
1 sinh 1
x dx 2 x x x C
還有更嚴重的,就像
integrate(sqrt(1+x^4) , x);
得到的會應居然是把題目照抄一遍:
1x dx4
這就表示 Maxima 根本不會做。但這不一定是 Maxima 的錯,有些函數確實沒有
(由基本函數組成的)反導函數。但是 f x( ) 1x4 卻是個簡單的連續函數,
其圖形如下;它對稱於 y 軸,但是現在並不重要。
由上圖可知,雖然 1 x 4 沒有反導函數,亦即寫不出一個(基本)函數 ( )F x
使得F x( ) 1 x 4 ,但y 1x4 的曲線下面積卻顯然是存在的。例如
1 4
0 x 1dx
是存在的,它的意義就是y 1x4 與 x 軸之間,在0 x 1範圍內的面積,只 是它不能用微積分基本定理 (1)F F(0)計算而已。這種情況下,我們要用數值積 分 (Numerical Quadrature)!這是某種計算機演算法,不計算反導函數而直接估 計曲線下的面積。在教學影片中,我們示範 Maxima 之數值積分的操作程序,其 指令為
quad_qags(sqrt(1+x^4), x, 0, 1);
得到的結果,共有四個數:
[1.089429413224822, 1.2095096182660719*10^‐14, 21, 0]
第一個數 1.0894… 就是 1 4
0 x 1dx
的估計值,也就是說1 4
0 x 1dx
1.09第二個數表示1.20951014,這個大約1014的數是 Maxima 估計的計算誤差,
也就是說 1.0894… 和真正的 1 4
0 x 1dx
之間的絕對差異,大約是1014,我們可 以相信估計值到小數點下 13 位。第三個數 21 表示「迭代次數」,也就是計算過程中,一共算過幾次 1 x 4 的 函數值。最後一個數是「錯誤編碼」,而 0 是好消息:沒有錯誤。