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