徐明
【摘要】 Python語言具有強(qiáng)大的科學(xué)計算功能,將該語言引入到數(shù)學(xué)實(shí)驗(yàn)教學(xué)有重要意義.選取高等數(shù)學(xué)教材中的實(shí)例,通過Python語言分別實(shí)現(xiàn)了對函數(shù)求解微分和積分的實(shí)驗(yàn).結(jié)果表明,Python語言能夠用簡潔的命令語句求解各類常見的微分和積分.
【關(guān)鍵詞】 Python;數(shù)學(xué)實(shí)驗(yàn);微分;積分
一、引 言
Python是一種解釋型、面向?qū)ο蟮母呒壋绦蛟O(shè)計語言.近年來,Python語言在數(shù)學(xué)建模和各類算法大賽中的應(yīng)用備受關(guān)注.與傳統(tǒng)的數(shù)學(xué)軟件MATLAB相比,MATLAB的大部分常用功能都可以在Python中找到相應(yīng)的擴(kuò)展庫(或模塊)來實(shí)現(xiàn).此外,用Python做科學(xué)計算有自身的優(yōu)勢 [1] :一方面,MATLAB是一款商用軟件,且價格昂貴,而Python及其絕大多數(shù)擴(kuò)展庫則是完全免費(fèi)的.另一方面,相對于MATLAB等數(shù)學(xué)軟件,Python具有強(qiáng)大的網(wǎng)絡(luò)通信等功能,使開發(fā)者更容易實(shí)現(xiàn)完整的應(yīng)用程序開發(fā).鑒于Python語言強(qiáng)大的科學(xué)計算功能和廣闊的應(yīng)用前景,將Python引入到數(shù)學(xué)實(shí)驗(yàn)教學(xué)具有特殊的意義.下面僅從求解微分和積分方面介紹Python在數(shù)學(xué)實(shí)驗(yàn)教學(xué)方面的應(yīng)用.
二、相關(guān)實(shí)驗(yàn)
求解微分和積分是高等數(shù)學(xué)實(shí)驗(yàn)的基本內(nèi)容,也是進(jìn)行其他數(shù)學(xué)實(shí)驗(yàn)的重要基礎(chǔ) [2] .本實(shí)驗(yàn)分為兩部分:求解函數(shù)的微分(或?qū)?shù));求解函數(shù)的積分.實(shí)驗(yàn)的目的是掌握相關(guān)命令求解函數(shù)微分和積分.實(shí)驗(yàn)用到的例子均來自同濟(jì)大學(xué)編寫的《高等數(shù)學(xué)》 [3,4] 教材(第七版).本實(shí)驗(yàn)的實(shí)驗(yàn)環(huán)境是Windows10+Python3.5,最主要的工具是Python中符號計算模塊SymPy.
(一)求解函數(shù)的微分或?qū)?shù)
求解函數(shù)的微分關(guān)鍵是求導(dǎo)運(yùn)算,因此,這里僅討論求解函數(shù)的導(dǎo)數(shù),它可以通過SymPy模塊中的命令diff來實(shí)現(xiàn).diff命令的基本語法是:diff(f,x,kwargs),其中f表示待求導(dǎo)的函數(shù),x為函數(shù)的求導(dǎo)自變量,kwargs表示求導(dǎo)運(yùn)算的其他設(shè)置,如階數(shù)等.下面從求解單變量函數(shù)的導(dǎo)數(shù)和多變量函數(shù)的偏導(dǎo)數(shù)兩方面進(jìn)行實(shí)驗(yàn).
先看diff命令用于單變量函數(shù)求導(dǎo)的例子.
例1 ??f(x)=x3+4cosx-sin π 2 ,求f′(x)及f′? π 2?Symboln@@
為了有效地調(diào)用相關(guān)命令,在程序開始時需先導(dǎo)入SymPy模塊.代碼如下:
from sympy import *
另外,在進(jìn)行符號運(yùn)算前還需先指定符號變量.代碼如下:
x=symbols(′x′)
接著,用diff命令求解f′(x),代碼如下:
diff(x**3+4*cos(x)-sin(pi/2),x)
輸出結(jié)果為:3*x**2-4*sin(x),
即f′(x)=3x2-4sinx.
最后,計算f′? π 2? ,代碼如下:
expr1=diff(x**3+4*cos(x)-sin(pi/2),x)
expr1.subs(x,pi/2)
輸出結(jié)果為:3*x**2-4*sin(x),
即f′? π 2? =-4+ 3π2 4 .
diff命令還可以用于對多變量函數(shù)求偏導(dǎo).
(二)求解函數(shù)的積分
求解函數(shù)的積分,可以使用SymPy模塊中的命令integrate,其基本語法是:integrate(f,x),或integrate(f,(x,a,b)),其中f表示待求積分的函數(shù),x表示函數(shù)的自變量,a,b分別表示積分上下限.下面從求解一元函數(shù)的積分和多元函數(shù)的重積分兩方面進(jìn)行實(shí)驗(yàn).
先看求解一元積分的例子.
例2 ??分別計算不定積分∫e ?x ?dx和定積分∫1 0e ?x ?dx
先調(diào)入SymPy模塊,并指定符號變量.代碼為:
from sympy import*;x=symbols(′x′)
使用integrate命令求不定積分∫e ?x ?dx,代碼為:
integrate(exp(sqrt(x)),x)
輸出結(jié)果為:2*sqrt(x)*exp(sqrt(x))-2*exp(sqrt(x)),即 2 x e ?x ?-2e ?x ?.
使用integrate命令也可求定積分∫1 0e ?x ?dx,代碼為:
integrate(exp(sqrt(x)),(x,0,1))
輸出結(jié)果為:2.
另外,使用integrate命令也可以求反常積分.例如,計算反常積分∫ +∞ ?-∞ ?1 1+x2 dx,可使用命令integrate(1/(1+x**2),(x,-oo,oo)),其中,兩個o表示無窮.
重積分的計算比一元積分的計算往往要復(fù)雜得多,下面僅對求解二重積分進(jìn)行討論.
如果積分區(qū)域是矩形,重積分的計算與一般積分的計算類似,例如,求解
D xydσ,其中D是由直線
ySymbol}@@1,xSymbol}@@2以及兩個坐標(biāo)軸圍成的矩形區(qū)域.此時,可直接使用integrate命令求解積分為:integrate(x*y,(x,0,1),(y,0,2)).如果積分區(qū)域不是矩形,用integrate往往不能一次性地直接計算出結(jié)果,而需要將重積分轉(zhuǎn)化為累次積分再計算.
三、小 結(jié)
綜上可知,恰當(dāng)利用Python的相關(guān)模塊SymPy,能夠用簡潔的命令語句求解出常見的函數(shù)微分和積分.與傳統(tǒng)的數(shù)學(xué)軟件相比,Python目前在計算復(fù)雜積分方面的功能還不夠強(qiáng)大.但Python是純粹的免費(fèi)軟件,且在數(shù)值計算方面的能力仍在不斷提升.這里,對Python在微積分實(shí)驗(yàn)教學(xué)中的應(yīng)用做了積極探索.可以看出,此類數(shù)學(xué)實(shí)驗(yàn)除了有助于學(xué)生理解和應(yīng)用所學(xué)數(shù)學(xué)知識,對于學(xué)生領(lǐng)會Python語言本身的編程思想也有一定幫助.
【參考文獻(xiàn)】
[1]張若愚.Python科學(xué)計算[M].北京:清華大學(xué)出版社,2012.
[2]程村.微積分實(shí)驗(yàn)教學(xué)模式研究[J].數(shù)學(xué)學(xué)習(xí)與研究:教研版,2015(21):24-25.
[3]同濟(jì)大學(xué)數(shù)學(xué)系.高等數(shù)學(xué)(上冊):第七版[M].北京:高等教育出版社,2014.
[4]同濟(jì)大學(xué)數(shù)學(xué)系.高等數(shù)學(xué)(下冊):第七版[M].北京:高等教育出版社,2014.