夏麗莉 趙靜翔 馬余全
(北京信息科技大學理學院 北京 100192)
大學物理是理工科專業的一門必修基礎課,通常在大學一年級的下學期開始學習.課程幾乎涵蓋了物理學中的所有主要研究領域,具體內容涉及到力學、熱學、振動、波動和光學、電磁學、相對論和量子物理學[1]. 教學重點在于培養學生的實踐能力和持續的創新能力,使學生獲得嚴謹的學術研究習慣.
大學物理課程研究內容豐富,研究范圍廣泛[2,3],一般來說,大學物理的學習有如下兩個特點:
(1)研究對象的運動狀態變化通常更加一般化(變力沿曲線做功、剛體轉動對應的各種能量計算等等);
(2)注重探究系統的本質,要求學生能夠定性或定量分析產生某種物理現象的原因.
相比于高中物理中特殊情況下的處理方法,大學物理中出現了比較抽象的概念,而且大部分章節的學習要求熟練掌握高等數學的微積分和矢量的知識.所以,相對于理工科其他專業課程的學習,大學物理的學習需要學生具有更強的邏輯分析能力和空間思維能力.學生創新能力培養也要基于這兩方面能力的提升.在大學物理的教學過程中,如何培養學生的邏輯分析能力和空間思維能力是我們教學過程中的主要任務.大部分學生認為物理模型的演化過程不直觀,同時解析求解常微分(偏微分)方程也讓大家望而生畏,這也是大學物理的學習過程中學生面臨的兩方面困難.
一直以來,科學計算模擬是科學研究的一種重要的手段[4~6].將計算機的優勢廣泛應用到大學物理的教學中,這是很多教師正在施行或即將實施的教學手段.同時,基于培養創新型人才的目標,大部分理工科院校的大學生需要具備能夠利用計算機語言編寫簡單的程序代碼實現專業知識學習的能力.鑒于此,本文將Matlab輔助教學方式應用到大學物理的教學中.通過兩個具體例子闡述如何將Matlab的圖像和符號計算的優勢應用到大學物理的學習過程中,從而解決學生面臨的困難,在一定程度上實現培養創新型人才的目標.
Matlab的融入使大學物理的教學具有以下特點:
(1)Matlab中編程語言簡單易學,而且有很多已經編好的程序塊,可以直接調用,能求解方程的解析解,對于沒有解析解的問題,通過給定初值或邊界條件,同樣能得到數值解.有利于學生理解基本物理概念,同時能夠直接應用到實際問題中,理論聯系實際,更準確地理解基本概念.
(2)對于不同的知識點,我們都能找到相應的應用模型,根據物理模型的特點和數學知識,能夠建立系統的狀態方程,然后運用數學知識解出解析解.然而,解析解的數學形式準確但不夠直觀,如果引入Matlab輔助工具數值模擬系統的狀態,可以動態地給出研究對象的發展趨勢和各階段的特征.
用Matlab數值模擬系統的狀態和動態變化對理解物理規律和運用物理知識具有直接的促進作用[7].一方面,直觀的圖片和動畫信息能夠使學生的注意力集中,讓晦澀難懂的直接講述變為有意思的直觀感受,增強學生的學習積極性.另一方面,對于很多非線性且沒有解析解的物理模型,我們仍然可以通過輔助工具完成求解數值解,并能夠預測系統的發展趨勢,這對于擴展學生的知識面和直觀理解更復雜的物理問題具有積極的作用.
這里我們分為兩部分說明Matlab符號計算和數值模擬在物理教學中的應用.對于符號計算,大學物理中一般用于求解常微分或部分偏微分方程(組)的解析解.在講解機械振動部分內容時,我們引入線性簡諧振子的模型,其數學建模是非線性常微分方程,當擺角足夠小時可以簡化為線性模型,此線性微分方程有解析解,我們利用Matlab符號計算能夠快速得到其解析解.對于數值模擬,我們用非線性諧振子的例子,非線性諧振子的數學模型沒有解析解,文中通過數值模擬同樣能夠給出此模型的特征和演化趨勢.
相比于中學物理,大學物理中很多的物理過程需要在微積分和求解微分方程的基礎上給出分析過程.大學物理的第一部分力學涉及到很多變速曲線運動,大學一年級第一學期,學生已經學習完高等數學的微積分求解,因此,大部分的高校都將大學物理課程的教學安排在大學一年級的第二學期開設.但是,微積分還沒有具體應用于空間曲線和曲面,對于剛體部分涉及到面積分和體積分的求解,相對復雜.特別到了振動部分,需要學生求解二階微分方程(線性或非線性),傳統手算只能解決簡單問題,相對復雜的如非線性高階微分方程很難求解,而借助機器求解能夠幫助學生從繁重的數學計算中解脫出來[8].
Matlab作為一種計算工具,具有強大的符號計算能力.內部嵌有多種函數,大學物理中常用的主要有:創建變量函數(sym 函數)、求微分函數(diff)、求積分函數(int)、解代數方程(組)函數(solve)、解常微分方程函數(dsolve)等等[5,9].我們以機械振動的諧振子模型為例探討Matlab在學習理論過程中起到的作用.對于一維線性諧振子,通過牛頓第二定律建立簡諧振子動力學方程,方程的形式是二階常微分方程,對于最簡單的一維線性諧振子,假設振子的質量是m,彈簧的勁度系數為κ,其動力學方程可表示為
(1)
式(1)中x是任意時刻質點相對于平衡位置的位移.這類方程的解的形式是
x=Acos(ωt+φ)
(2)

y=dsolve(f1, f2, … , fm) %默認的自變量為t
y=dsolve(f1, f2, … , fm,‘x’) %指明自變量為x
其中,字符串型變量fi既可以描述微分方程,又可以代表初始條件或邊界條件.如果我們給定無量綱化方程中彈簧振子的質量和勁度系數的大小分別為1,可以通過直接引用dsolve()函數:
? y=dsolve('D2x+x=0')
求得方程的通解:
y =C2*cos(t) + C3*sin(t)
如果給定初始條件x(0)=1,v(0)=0,通過直接引用dsolve()函數:
? y=dsolve('D2x+x=0','x(0)=1','Dx(0)=0','t')
可以得到方程的特解:
y =cos(t)
這里我們直接應用Matlab給出諧振子模型的通解和特解,求解過程邏輯清晰且效率高.在講述機械振動物理模型時,如果我們利用機器符號計算,可以很快得到方程的解,這樣計算過程消耗的時間幾乎可以忽略,諧振動方程的由來非常清晰:由牛頓第二定律給出系統的動力學方程,通過求解動力學方程,得到系統的運動學方程.當然這個例子相對簡單,如果物理模型復雜,理論推導的過程中出現復雜的符號運算,學生不能順利得到計算結果,勢必會對結論的推導過程產生疑問,從而影響學生理解物理規律及其深層次的物理意義.
在機械振動的分析過程中,通常要分析質點相對于平衡點的位移隨時間的變化趨勢,如果基于符號計算得到方程的解,在此基礎上可以直接畫出解曲線:
? t =0:.01:100;
x = cos(t);
plot(t,x)
對于線性諧振子式(1),可以直接從系統的微分方程出發,通過Matlab符號計算的結果給出解曲線,但是如果是非線性諧振子,沒有解析解,那么我們也可以通過數值模擬得到系統的解曲線.
非線性諧振子的動力學方程可表示為
(3)
這里我們采用適用于一般的微分方程的數值解法,即如果系統的方程不能用一階顯式微分方程組給出,以下的代碼同樣適用.具體代碼如下:
clear all
t=[0:0.1:500];
x0=[1 0];
[t,xx]=ode23('xiezhenzi_ode',t,x0);
format long
plot(t,xx(:,1));
xlabel('time'),title('x')
function dy=xiezhenzi_ode(t,y)
a=0.1
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=-a*sin(y(1));
圖1給出了非線性諧振子的軌跡曲線,這里的function函數文件是一個獨立的文件,是Matlab中用于解微分方程的功能函數,主函數可以調用這類函數,類似的功能函數還有很多,我們可以根據需要調用,方便快捷.在講述非線性諧振子時,我們通過數值模擬系統的軌跡,可以很直觀地解釋非線性諧振子的運動趨勢,并能夠分析位移、速度、加速度和時間的關系,而且可以在不同初始條件探索振子的運動規律,體現初始條件對系統整體運動形態的影響.對于類似的新理論,我們都可以簡單地引入Matlab數值模擬,學生通過觀察圖像易于接受給定的結論,為探究未知領域提供基礎,有利于培養學生的創新思維.

圖1 非線性諧振子的軌跡
本文采用Matlab簡單數值計算融入物理教學的方式,從模擬經典力學的簡單物理模型入手,應用到波動和光學的學習中,最后形成一系列的典型模型的數值模擬小程序.讓學生從直觀圖片和動畫中理解概念,探究物理現象的本質.一定程度上避免了繁瑣的符號計算和數學推導,增加了學生學習物理的興趣和自信心.同時,緊緊圍繞我校培養高素質創新型人才的目標,通過對Matlab的學習,學生可以自己模擬簡單物理模型,并培養分析數據和總結結果的能力,使學生掌握了一種編寫程序代碼的技能,這也是科學研究必備的學術素質.