吳昊 謝雅洵

關鍵詞:MATLAB;數學實驗;措施;算法案例;教學策略
中圖法分類號:G642 文獻標識碼:A
1引言
“數學工具與實驗”是數學與應用數學專業非常重要的一門專業必修課程,該課程具有較強的抽象性、實踐性,除了必須理解和掌握相關的數學知識,還需要應用MATLAB編程對這些知識加以呈現,對學生的數學思維和編程能力均有較高的要求,因此導致很多學生在學習這門課程時產生學習目的不明確、不知該如何動手編寫程序、理論和實際脫節等情況。此外,“數學工具與實驗”課程對提高學生的數學應用能力、分析和解決問題的能力均有較大幫助,并且還可以提升學生參加“華數杯”全國大學生數學建模競賽、全國大學生數學建模競賽等競賽的競爭力。
目前,國內已有很多學者對該課程及其相關課程的教學模式做了一些研究,但研究的側重點均有所不同?;翡浘皩Κ毩W院數學實驗課程的教學內容、教學方式和考核方式做了一些具體的研究。盧月莉通過數學實驗中的一些具體案例,講解了MATLAB編程的具體實現過程。楊然通過使用MATLAB符號,有效解決了高等數學中的許多計算問題,提高了學生的學習興趣及編寫程序的能力。梁燕來等針對應用型本科院校,提出了數學專業數學實驗課程教學改革思路。王慧敬等從培養應用型本科人才的角度出發,探討了開設數學實驗課程的意義、課程的設計目的與講授內容。馬國棟等給出了數學實驗融人課堂教學的幾個實驗的實現過程,并給出了教學改革的幾點建議。董鴿等以中藥材質量鑒別中的數據分析為例,用MATLAB實現了對數據的主成分分析,闡明可根據專業選取合適的教學內容。劉利斌等對數學實驗類課程的教學現狀進行分析,并給出了一些課程教學改革的建議。賈麗麗對數學實驗課程現狀進行了分析,并給出了相應的課程建設方案。黃小玲等提出了改革和創新數學實驗課程方式的4個方面,主要包括區別“數學實驗”與數學、加強編程指導、結合實例教學及引導網絡學習。陶淑一提出了數學實驗的分層教學設計,并給出了“交通流量問題”的分層教學設計過程。
針對以上學者的研究發現,大多數研究僅局限于課程的教學方法、教學內容、某個教學知識點的實現過程等,但對教學策略的探討,以及如何提高學生的算法思維和編程能力的研究還比較少。本文將具體針對“數學工具與實驗”課程中的教學策略、算法分析和編程教學做一些探討。
2教學措施
在從事“數學工具與實驗”課程的教學中,通過自身的探索以及和學生的交流,不斷改進該課程的教學方法。同時,要使教學內容具有科學性與先進性,讓學生看到學科的實用價值,并開闊學生的視野。此外,在教學的過程中,要以學生為主體,引導學生樹立正確的學習觀,課程教學采用啟發式、案例式、問題導向式等多種教學模式,培養學生學習的積極性,激發學生學習的熱情,加深學生對本課程的理解和認識,具體做法如下。
(1)加強實踐環節的訓練,有針對性地布置一些課后實驗讓學生自主練習,同時要加強對學生課后實踐的檢查,通過課堂提問、安排學生自主講解實驗過程、小組協作和互助等方式監督學生的學習狀況。
(2)在教學的過程中,可以采用先易后難的教學策略,實驗的設計從簡單到復雜,即程序的實現先從簡單的指令,再到一個程序模塊,最后到一段完整的程序代碼;在上機的過程中,先寫好程序讓學生照著程序寫代碼,完成后讓學生理解,再到不看程序寫代碼,最后到學生獨立自主地編寫程序。
(3)對課程中的算法問題,要舉一反三地講解。不但要講解算法思想、編程思路、程序實現,還要結合某一案例,把算法的思想及程序的實現過程有機結合起來,讓學生了解程序在具體應用中的實現過程,加深學生對算法的理解,提高學生分析問題和解決問題的能力。
(4)通過以賽促教的方式,加強學生學習的動力。在講到課程的某些知識點時,可以穿插“全國大學生數學建模競賽”中的一些題目,讓學生意識到MATLAB編程在競賽中所起到的作用,提高學生學習的積極性。
(5)加強課程考核的引領作用,期末考試以試卷考核和實驗考核相結合的方式檢查學生對課程內容的掌握情況,并在日常的教學過程中,實時公布學生在課堂實驗中所取得的平時成績。
(6)注重課程教學后的總結和反思,及時發現課程教學過程中存在的問題。在學期末安排學生撰寫學習本門課程的學習心得,并和學生交流,發現課程教學過程中存在的不足,為后續的教學提供更充足的準備。
3算法案例的教學策略
算法案例是“數學工具與實驗”課程與編程結合較為緊密的一個教學環節,然而算法是比較抽象且不易理解的,在教學的過程中,可以把算法的描述簡單化,算法的流程清晰化,算法的實現過程層次化,一步一步把算法的思想貫穿給學生。具體的做法如下。
(1)用學生容易理解的語言和方式重新描述算法,讓學生理解算法的實現過程及實現的關鍵環節。
(2)用流程圖來表示算法,使算法的思想變得更加清晰。
(3)根據算法的流程,用MATLAB編寫程序實現算法,在程序的編寫過程中要清晰地標注每一層的實現及每條語句的作用,讓學生在查閱程序時有非常直觀的印象。
(4)結合一個比較簡單的具體實例,帶領學生模擬運行一下程序的執行過程,加深學生對算法思想的直觀理解。
以Dijkstra算法為例,講解該算法在教學過程中具體實現的過程,具體做法如下。
3.1算法的描述
步驟1 初始化S,l,z(S集合為已找到最短路的頂點集合,S非集合為還未找到最短路的頂點集合,l集合為頂點到固定頂點的一條路徑權值,z集合為頂點的父親頂點)。
步驟2 用新并入S集合中的頂點(該頂點記為v),更新S非集合中的頂點(依次取,記為u)。若v的l值大于u的l值及v,u權值之和,則令v的l值等于u的l值加上v,u權值之和,v的z值等于u。
步驟3 在S非集合中找l的取值最小的頂點,并把該頂點并入S集合中。
步驟4 判斷S非集合是否為空,不為空,轉步驟2繼續執行;否則,算法結束。
3.2算法實現的流程圖
根據算法的描述,畫出Dijkstra算法實現的流程圖,如圖1所示。
3.3算法的程序描述
本文算法的實現過程主要是按照算法的思想一步一步實現的,其實現的流程和算法描述的流程一一對應,層次分明,并且在程序中清晰地標注所實現的每一層及每條語句的作用,具體程序的書寫過程如下。
%第一層:賦初始值,對應算法步驟1
n= size(w,1);
%n是圖的頂點個數
wl=w(l,:);%w1是u0到其余頂點的權值
l(1:n)= wl(l:ri); %對l賦初值
z= ones(1,n); %對z賦初值
s=[]; %s用來保存已找到最短路徑的頂點
s(1)=1;%把固定頂點的下標存到s集合中
u=s(1); %u用來保存s中最后一個元素的下標
k=1; %k用來保存s中最后一個元素的下標
%下面的代碼是用來把剩下的n-1個頂的最短路徑找出來
while k
%第二層:用新并入S集合中的頂點更新S非集合中的頂點,對應算法步驟2
for i-l:n %
if i~=s(l:k) %找不在s中的頂點
ifl(i》l(u)+w(u,i) %判斷v的l值是否大于u的l值及v,u權值之和
l(i)=l(u)+w(u,i); %修改不在s中頂點的l值
z(i)=u;%修改
不在s中頂點的z值
end
end
end
%第三層:在S非集合中找l的取值最小的頂點,對應算法步驟13
lv= inf; %1v用來保存不在s中的頂點的最小1值,v用來保存對應的下標
for i-l:n %
if i~=s(1:k)
%找不在s中的頂點
if l(i)
lv =l(i);
v =1;
end
end
end
k=k+1:
s(k)=v; %把找到的頂點并入S集合中
u=s(k);
end
以上程序代碼在實現時將算法思想和程序結合,層次分明,邏輯結構清晰,同時標注出算法實現的關鍵點,方便學生對算法的理解以及對程序的閱讀,對于學生提高編程的能力及編程習慣的養成均有幫助。
4結束語
“數學工具與實驗”課程的教學任重而道遠,學生學完本課程后,能夠利用MATLAB程序來實現一些基本的應用。由于本課程需要學生編寫程序,所以在教學過程中,應把程序實現和相關的數學知識相結合,便于學生對本課程知識的理解和掌握。同時,對于算法案例的教學,一定要采用合適的教學策略,把抽象的算法思想轉化成學生易于理解的方式,使程序設計流程盡量和算法思想相對應,最終達到比較理想的教學效果。
作者簡介:
吳昊(1982—),碩士,講師,研究方向:嵌入式系統、智能算法。
謝雅洵(1991—),碩士,講師,研究方向:數值計算(通信作者)。