王明浩
湖北大學(xué)物理系 湖北武漢 430062
大學(xué)物理是大學(xué)理工科類學(xué)生的基礎(chǔ)必修課程。通過(guò)本課程的學(xué)習(xí),學(xué)生可以了解自然界物質(zhì)的結(jié)構(gòu)、性質(zhì)、物質(zhì)之間的相互作用及其運(yùn)動(dòng)的基本規(guī)律[1]。良好的科學(xué)素養(yǎng)不論是在后續(xù)的學(xué)習(xí)還是未來(lái)的工作和生活中,都將會(huì)為學(xué)生提供幫助,可以說(shuō)是受益終身[2]。然而,在大學(xué)物理的教學(xué)中,經(jīng)常會(huì)有學(xué)生抱怨物理學(xué)太難了。這體現(xiàn)在一方面物理學(xué)需要大量的數(shù)學(xué)知識(shí),而往往由于課程安排的緣故(譬如高等數(shù)學(xué)和大學(xué)物理同時(shí)開課),這些所需的數(shù)學(xué)知識(shí)學(xué)生尚未學(xué)習(xí)和掌握;另一方面,物理學(xué)自身也存在大量的抽象概念,單純從公式上很難理解其背后的物理圖像[3]。
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,各類計(jì)算軟件層出不窮,這使得人們從繁重的計(jì)算任務(wù)中解放出來(lái),從而投入更具創(chuàng)新性的活動(dòng)中。計(jì)算軟件的應(yīng)用十分廣泛,譬如,計(jì)算仿真軟件可以仿真各種實(shí)驗(yàn),而不需要真實(shí)地做實(shí)驗(yàn)。這為我們節(jié)省了大量的資金和資源[4-5]??茖W(xué)計(jì)算有望為解決大學(xué)物理教學(xué)中的上述問(wèn)題提供幫助。
Python是目前最流行的高級(jí)程序設(shè)計(jì)語(yǔ)言之一,因其免費(fèi)、易學(xué)習(xí)、可擴(kuò)展以及豐富的第三方庫(kù)等特點(diǎn),廣泛應(yīng)用于科學(xué)研究中[6]。免費(fèi)、易學(xué)習(xí)這兩個(gè)特點(diǎn)使其非常適合低年級(jí)本科生學(xué)習(xí)和使用。這將為Python引入大學(xué)物理的教學(xué)中提供了可能。Python擁有豐富的第三方庫(kù)。譬如,SCIPY可以處理最優(yōu)化、積分、常微分方程求解等;MATPLOTLIB可以繪制各種精美的圖形,可以將計(jì)算結(jié)果可視化等。Python的這些庫(kù)可以幫助學(xué)生們有效地解決物理中的各種數(shù)學(xué)問(wèn)題;同時(shí),Python提供的諸多工具包可以將結(jié)果可視化,這有助于學(xué)生更好地理解抽象的物理過(guò)程,掌握其背后的物理圖像[7]。最后,在這個(gè)過(guò)程中,學(xué)生將逐漸培養(yǎng)出一種將問(wèn)題歸結(jié)為計(jì)算問(wèn)題,然后利用計(jì)算機(jī)進(jìn)行求解的計(jì)算思維。新工科環(huán)境下,這種全新的思維方式顯得越來(lái)越重要,對(duì)學(xué)生未來(lái)的學(xué)習(xí)和工作大有裨益[8]。
大學(xué)物理中的很多問(wèn)題,學(xué)生們?cè)谡莆樟讼鄳?yīng)的物理知識(shí)之后,通??梢皂樌亓谐鱿鄳?yīng)的等式、方程組或者微分方程。然而,若在講授這些內(nèi)容時(shí),由于課程安排,學(xué)生尚未掌握求解這類問(wèn)題的數(shù)學(xué)知識(shí),必然會(huì)對(duì)物理教學(xué)產(chǎn)生影響。這是大學(xué)物理教學(xué)中普遍存在的現(xiàn)象,是導(dǎo)致學(xué)習(xí)大學(xué)物理困難的主要原因之一。我們發(fā)現(xiàn)借助Python科學(xué)計(jì)算,學(xué)生通過(guò)調(diào)用相關(guān)計(jì)算包可以容易地求解這類數(shù)學(xué)問(wèn)題,這使得學(xué)生繞過(guò)復(fù)雜的數(shù)學(xué)求解,降低了學(xué)習(xí)的難度。同時(shí),這也讓學(xué)生節(jié)省了大量精力,將注意力集中到物理問(wèn)題本身,從而進(jìn)一步討論其背后的物理。
這里我們用具體案例,討論P(yáng)ython在求解物理中數(shù)學(xué)問(wèn)題的應(yīng)用。
案例1:物體在黏滯流體中運(yùn)動(dòng)會(huì)受到流體的阻力作用。當(dāng)速率不太大時(shí),對(duì)于球形的物體,黏滯阻力大小約為Fr=6πηrv,其中r為物體半徑,v為其速率,η為流體的黏度。假設(shè)如圖1所示,質(zhì)量為m半徑為r的球形物體由水面靜止釋放沉入水中,求球體的運(yùn)動(dòng)情況[1]。
圖1
本題是典型的運(yùn)動(dòng)學(xué)問(wèn)題。按圖1所示,受力分析得小球在水中受到重力G、浮力FB以及阻力Fr共同作用,運(yùn)動(dòng)軌跡豎直向下。這里給定小球之后,重力G、浮力FB便確定了,相比較黏滯阻力Fr卻隨小球的運(yùn)動(dòng)情況而變化。
G-FB-Fr=ma
(1)
Fr=6πηrv
(2)
(3)
v(t=0)=0
(4)
聯(lián)立公式(1)、(2)、(3)和(4),我們有:
(5)
其中F=G-FB,b=6πηr。
大部分同學(xué)經(jīng)過(guò)受力分析,利用牛頓定律都可以順利地列出上述方程。然而,數(shù)學(xué)知識(shí)的缺乏使得許多學(xué)生止步于此,后續(xù)的物理討論更是無(wú)法進(jìn)行下去。這里,我們討論如何使用Python解決這一數(shù)學(xué)問(wèn)題。學(xué)生只需敲下如下代碼:
1.FROM SYMPY IMPORT * # 從SYMPY包中導(dǎo)入函數(shù)
2.T,M,F(xiàn),B=SYMBOLS('T,M,F(xiàn),B') # 聲明T,M,F(xiàn),B為符號(hào)
3.V=FUNCTION('V')(T) # 聲明V是關(guān)于T的函數(shù)
4.RESULT=DSOLVE(F-B * V-V.DIFF(T),ICS={V.SUBS(T,0):0})# 調(diào)用DSOLVE函數(shù),求解微分方程。其中方程F-B * V-V.DIFF(T)等于0,表示待求方程,ICS={V.SUBS(T,0):0})表示初始條件V(T=0)=0
5.PRINT(RESULT) # 輸出計(jì)算結(jié)果
代碼1
便可以得到如下結(jié)果:EQ(V(T),(F+EXP(B*(-T/M+LOG(-F)/B)))/B),此即微分方程(5)的解:
案例1是大學(xué)物理力學(xué)部分非常典型的問(wèn)題。從該案例可以看出,借助Python科學(xué)計(jì)算,學(xué)生們可以跳過(guò)微分方程復(fù)雜的求解過(guò)程,即使不懂如何求解微分方程,也可以順利得到結(jié)果。該方法并不復(fù)雜,低年級(jí)本科生可以很容易地掌握。這體現(xiàn)了一種非常重要思維——計(jì)算思維。學(xué)生在借助Python科學(xué)計(jì)算學(xué)習(xí)大學(xué)物理的同時(shí),也培養(yǎng)和訓(xùn)練了計(jì)算思維。
學(xué)習(xí)大學(xué)物理的另一個(gè)困難之處在于有些公式和結(jié)果過(guò)于抽象。初學(xué)者理解起來(lái)比較困難。Python科學(xué)計(jì)算提供了豐富的可視化工具。借助這些工具,學(xué)生可以很容易地將抽象的計(jì)算結(jié)果可視化,從而更容易地理解物理過(guò)程和圖像。本小節(jié)借助具體的案例,討論如何利用Python完成對(duì)物理問(wèn)題和概念的可視化。
我們首先討論對(duì)函數(shù)的可視化。
案例2:接著案例1討論,我們已經(jīng)求得v(t)的具體表達(dá)式,但是該表達(dá)式代表什么樣的物理過(guò)程呢?v-t圖可以幫助我們理解這個(gè)物理過(guò)程。借助Python,我們可以很容易地得到v-t圖。
1.IMPORT MATPLOTLIB.PYPLOT AS PLT # 導(dǎo)入相關(guān)包
2.IMPORT NUMPY AS NP
3.T=NP.LINSPACE(0,60,100) # 離散化時(shí)間
4.B_LIST=[0.1,0.2,0.3] # 設(shè)定B的可能取值
5.V_LIST=[]
6.FOR B IN B_LIST: # 循環(huán)帶入B的值,計(jì)算不同時(shí)刻得到速度
7.V=1/B *(1-NP.EXP(-B * T))
8.V_LIST.APPEND(V)
9.PLT.PLOT(T,V_LIST[0],LABEL="B=0.1") # 繪圖B=0.1時(shí)的V-T圖
10.PLT.PLOT(T,V_LIST[1],LABEL="B=0.2") # 繪圖B=0.2時(shí)的V-T圖
11.PLT.PLOT(T,V_LIST[2],LABEL="B=0.3") # 繪圖B=0.3時(shí)的V-T圖
12.PLT.XLABEL("T")
13.PLT.YLABEL("V")
14.PLT.LEGEND()
15.PLT.SHOW() # 顯示圖片
代碼2
運(yùn)行結(jié)果為:
圖2 速度隨時(shí)間變化曲線
圖2給出了v-t圖。借助這個(gè)圖,學(xué)生可以清楚地看出速度隨時(shí)間的變化趨勢(shì):隨著時(shí)間的推移,小球的速度越來(lái)越大,但是卻會(huì)收斂于某個(gè)值;b越小最后的收斂值越大。有了這個(gè)結(jié)論,不難對(duì)其進(jìn)行物理上的解釋,即隨著小球速度逐漸增大,受到的阻力會(huì)隨之增大,當(dāng)G-FB=Fr時(shí),小球處于受力平衡狀態(tài),根據(jù)公式(1),小球加速度為零,速度不再增加;并且b越小,阻力越小,小球最終的速度也就越大;特別的,若b=0,則小球?qū)⒁恢奔铀傧氯?。借助這個(gè)結(jié)果,學(xué)生們就很容易聯(lián)想并理解為什么雨點(diǎn)降落到地面時(shí)的速度是有限的了。
大學(xué)物理中還有另外一個(gè)極為重要的概念——場(chǎng)。但由于其較為抽象,學(xué)生理解起來(lái)也較為困難。接下來(lái),我們討論P(yáng)ython對(duì)場(chǎng)的可視化,從視覺上感受其分布。
案例3:光學(xué)是大學(xué)物理的重要組成部分,已知雙縫干涉接收屏上光場(chǎng)的強(qiáng)度分布近似為:
(7)
其中I1和I2分別為狹縫1和2到達(dá)接收屏上任意一點(diǎn)的光強(qiáng),λ為波長(zhǎng),d′為接收屏到狹縫的距離,d為狹縫之間的距離。這樣的一個(gè)光場(chǎng)是什么樣的分布呢?
為了方便可視化,我們假設(shè)I1=I2=1。輸入如下代碼
1.IMPORT NUMPY AS NP # 導(dǎo)入相關(guān)包
2.IMPORT MATPLOTLIB.PYPLOT AS PLT
3.X,Y=NP.MESHGRID(NP.LINSPACE(-15,15,100),NP.LINSPACE(-7.5,7.5,100)) # 離散數(shù)據(jù)點(diǎn)
4.I1=2+2*NP.COS(X) # 輸入場(chǎng)分布
5.I2=2+2*NP.COS(0.5*X)
6.PLT.SUBPLOT(2,1,1)
7.PLT.PCOLORMESH(X,Y,I1) # 繪圖
8.PLT.COLORBAR()
9.PLT.XLABEL("X")
10.PLT.YLABEL("Y")
11.PLT.TITLE("A",LOC='LEFT')
12.PLT.SUBPLOTS_ADJUST(HSPACE=0.5)
13.PLT.SUBPLOT(2,1,2)
14.PLT.PCOLORMESH(X,Y,I2)
15.PLT.COLORBAR()
16.PLT.XLABEL("X")
17.PLT.YLABEL("Y")
18.PLT.TITLE("B",LOC='LEFT')
19.PLT.SHOW()
代碼3
輸出結(jié)果為:
圖3 雙縫干涉圖
這里圖3中的圖a對(duì)應(yīng)2πd/d′λ=1,圖b對(duì)應(yīng)2πd/d′λ=0.5。
代碼3看似復(fù)雜,實(shí)際上核心語(yǔ)句只是4和5行。學(xué)生們稍作修改就可以繪出其他光場(chǎng),不難掌握。學(xué)生可以從圖上直接感受到光場(chǎng)分布,并且容易得出結(jié)論:圖b和圖a相比,相當(dāng)于增大λ或者減小d,不論何種,實(shí)際效果都增大了條紋間距。
本文討論了Python科學(xué)計(jì)算在大學(xué)物理教學(xué)中的應(yīng)用。Python科學(xué)計(jì)算的引入首先可以有效地解決本科生數(shù)學(xué)基礎(chǔ)薄弱的問(wèn)題,使學(xué)生們跳過(guò)復(fù)雜的數(shù)學(xué)求解,將精力更多地投入物理問(wèn)題中,從而降低學(xué)習(xí)物理的難度,這將極大地維護(hù)學(xué)生學(xué)習(xí)物理的興趣。此外,Python眾多的第三方庫(kù)可以便捷高效地將函數(shù)、場(chǎng)等物理結(jié)果可視化。這些豐富的可視化可以有效地幫助學(xué)生理解物理概念和物理圖像。當(dāng)然,我們這里只是列舉了幾個(gè)簡(jiǎn)單的案例。如果調(diào)用更高級(jí)的第三方庫(kù),可以繪制更加美觀的圖片,甚至是三維模型。這將進(jìn)一步為學(xué)生提供更多的思考視角和幫助。本文的重點(diǎn)是闡述可視化思想,因此不再過(guò)多舉例。最后,學(xué)生們?cè)诶肞ython學(xué)習(xí)大學(xué)物理的同時(shí),還可以早些掌握一門高級(jí)計(jì)算語(yǔ)言,更重要的是計(jì)算思維得到了一定的訓(xùn)練,這將為后續(xù)的學(xué)習(xí)以及未來(lái)的科研打下良好的基礎(chǔ)。