歐 鵬 王紹恒 高成政 劉雪蓮 吳夢蝶
(重慶三峽學院數學與統計學院,重慶萬州,404100)
借助數學軟件輔助教學多年以來,[1]收到了較好的效果.積分是高等數學系列課程的重要組成部分,某些題目的積分計算量較大,過程繁瑣,甚至無法用學過的數學方法求解.為使學生借助Mathematica軟件快速、準確地解決上述問題,筆者結合實驗與學習經歷,通過借助Mathematica軟件計算積分的典型例子,總結了幾種常見方法,供讀者參考.

Mathematica軟件的命令格式:Integrate[f[x],x],運行的結果就是f[x]的原函數F[x],但不帶任意常數.
命令Integrate與命令D表示一對互逆運算,即命令D[f [x],x]表示函數f [x]對x求導.
含參數不定積分:命令Integrate中,若被積函數含有積分變量以外的變量,運行時均獨立于積分變量而把此類變量當做常量.
由此可見,正確指定積分變量的重要性.
積分變量可以為任何表達式.

(其中f( x)可以是任意函數表達式)
大多數情況下,積分可以純粹的根據諸如指數函數、對數函數和三角函數等基本初等函數進行運算.事實上,如果給出一個僅含這種初等函數的積分,那么Integrate的重要能力之一是如果該積分能用初等函數表示,那么Integrate總能成功計算出結果.
有些函數的不定積分不能用初等函數表示,這里Mathematica軟件通常能夠用特殊內部函數表示.

其中LogIntegral[x]為系統內部函數.

有時候為了某種特殊需要,需修改命令Integrate的參數,例如下面的積分不能用初等函數來表示.

如果想加入自己定義的積分規則,需要把函數Integrate的保護屬性去掉,即:
運行Unprotect[Integrate]得
{Integrate}
定義自己的積分規則:例如定義函數
sin(cos(a+ bx))的積分為 [,]/ JSinCos a x b.運行Integrate[Sin[Cos[a_.+b_.x_]],x_]:=JSinCos[a,x]/b之后再運行

退出系統后,對Integrate的修改自動還原.
如果不定積分既不能用初等函數表示,也無法用特殊函數表示,Mathematica直接以不定積分形式輸出.
對于簡單的定積分,只需按照命令格式輸入相應的被積函數,積分變量及積分限即可進行計算.

計算定積分時,也可首先通過先求不定積分,然后計算相應積分限處的值的辦法,但值得注意的是有些函數的不定積分不能用初等函數表示,但其定積分仍可以計算.
運行Integrate[Cos[Sin[x]],x]
Integrate[Cos[Sin[x]],{x,0,2Pi}]
得2 BesselJ[0,1].
與不定積分一樣,在計算定積分的時候,積分變量也可以為任何表達式.對于那些積分變量以外的變量均當作常量處理.
在計算定積分時,有時求出來的定積分結果里面含有特殊函數,這些函數是Mathematica內部函數,我們可以對求出的結果取近似值得出近似解.如對例9中的定積分.
運行Integrate[Cos[Sin[x]],{x,0,2Pi}]得2 BesselJ[0,1]再運行N[%]得4.80788也可以直接運行NIntegrate[Cos[Sin[x]],{x,0,2Pi}]得到同樣結果.
計算定積分時,還可對命令Integrate進行設置參數,通過這些參數設置,可以更加靈活地計算定積分.在我們常見的函數中,參數GenerateConditions以及參數Assumpions使用較多.對于參數GenerateConditions的使用,如設置GenerateConditions->False,則 Mathematica會把被積函數中的參數當作最普通的值,不考慮其特殊情況.
例11:運行
Integrate[x^n,{x,0,1},GenerateConditions-> False得1/n+1.不加參數GenerateConditions->False的計算結果參看例17.
在Mathematica中,當積分算不出準確值時,我們可以通過NIntegrate[f[x],{x,a,b}]求近似值.而且對于命令 Integrate能夠計算的,NIntegrate也能計算;有些函數不能用 Integrate計算的,用函數NIntegrate還能計算.
此類定積分用人工計算比較復雜,但借助函數Integrate計算較容易.
運行

如果希望得到近似數值解,運行:
NIntegrate[x*Exp[x]Sin[x],{x,0,1}]得0.643678
對于NIntegrate命令的一個重要的作用是能處理被積函數無界的函數,函數NIntegrate在積分區間內自動檢查被積函數有無瑕點,因此對無界函數仍可直接用 NIntegrate 命令計算.NIntegrate[f,{x,xmin,xmax}]會從xmin到xmax積分f,在每個點檢查其奇異性.
由于x=0是瑕點,直接用函數NIntegrate將給出出錯信息.
如果在5.0版本下運行NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}]將輸出
該提示表明x=0為被積函數的瑕點.我們只要加入0作為中間點,就可以計算其數值解了.
運行NIntegrate[1/Sqrt[Abs[x]],{x,-1,0,1}]得4.
在7.0以上版本下運行
NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}]
可以直接得出結果4.
除此之外,數值積分不但可以求近似解,而且還可以設置參數WorkingPrecision的值控制輸出結果的精度.
運行NIntegrate[Exp[-x^5],{x,-1,0,1},WorkingPrecision->20]得
2.094968171321203348 4.
該命令等價于
N[Integrate[Exp[-x^5],{x,-1,0,1}],20].
NIntegrate利用自適應算法計算積分的近似值,它對積分區間進行分割,直到達到指定的精確度為止.
無窮區間上的廣義積分的計算仍然可行.

如果廣義積分發散,Mathematica就給出一個提示后原樣輸出.
運行
Integrate[1/x^(1/2),{x,1,Infinity}]輸出提示:
如果廣義積分的斂散性與某個符號的取值有關,Mathematica也能給出在不同情況下的積分結果.
一般地,我們采用分別討論a與p的取值,去判斷積分收斂或者發散,而利用 Mathematica求解上述廣義積分:運行Integrate[1/x^p,{x,a,Infinity}]得


無界函數的廣義積分有時要把間斷點加入才能計算.

類似地,如果b為瑕點有:

如果c(a<c<b)為瑕點時:


對于重積分的計算,在Mathematica中,處理方式與定積分相似,只是在處理多個變量積分時,需要給出它們各自的取值范圍.

與我們在數學上處理積分時原則一樣,Mathematica先對y積分時,積分限可以為x的函數.同時,多重積分限也可以為任何表達式.
運行Integrate[x^2+y^2,{x,a,b},{y,x,x+1}]得

運用Integrate求解重積分的確方便快捷.但不足之處是沒有體現積分過程.那么運用Mathematica求解積分,到底能不能將其過程展現出來呢?我們的答案是肯定的.只是在求解過程中,要運用到更多的參數選項.其命令格式相對較復雜.
可讀性計算程序如下:
Clear[x,y];
f[x_,y_]:=x^2+4y^2+1;Print[“f(x,y)=”,f[x,y]];
a= -1;b=1;c=-Sqrt[1-x^2];d=Sqrt[1-x^2];
If[NumberQ[a]&&NumberQ[b], g[x_]:=Integrate[f[x,y],{y,c,d}];Print[g[x]];Integrate[g[x],{x,a,b}],h[y_]:=Integrate[f[x,y],{x,a,b}];Print[h[y]];Integrate[h[y],{y,c,d}]]
求解過程及結果為:

[1]王紹恒.利用Mathematica與Lingo求解優化問題之比較[J].重慶三峽學院學報,2007(3).
[2]嘉木工作室編.Mathematica應用實例教程[M].北京:機械工程出版社,2002.
[3][美]D.尤金.Mathematica使用指南[M].鄧建松,彭冉冉,譯.北京:科學出版社,2002.
[4]郝艷莉,張濱燕.數學軟件 Mathematica在高等數學教學中的應用[J].南通航運職業技術學院學報,2009(3).