摘要:本文介紹了偽代碼的教學(xué)方式在數(shù)值分析課程實(shí)驗(yàn)教學(xué)中的重要性。一方面從教學(xué)角度分析了數(shù)值分析課程中算法設(shè)計(jì)的重要性,另一方面從實(shí)驗(yàn)教學(xué)中分析了偽代碼在實(shí)現(xiàn)這些算法中的方便性。通過(guò)加入偽代碼的教學(xué),使得學(xué)生更加理解算法的設(shè)計(jì),并使得學(xué)生更容易把算法編程程序?qū)崿F(xiàn)。本文針對(duì)本校學(xué)生在Matlab為零基礎(chǔ)的實(shí)際情況下,論證了偽代碼在運(yùn)用軟件Matlab實(shí)現(xiàn)數(shù)值分析中算法的必要性。
關(guān)鍵詞:數(shù)值分析;偽代碼;Matlab
中圖分類(lèi)號(hào):G642.41 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2018)26-0268-02
一、數(shù)值分析中算法的重要性
數(shù)值分析課程的內(nèi)容主要包含線性插值、數(shù)值積分、方程求根和解線性方程組的直接法和迭代法。這些都是處理數(shù)學(xué)模型和離散數(shù)據(jù)的有力工具,也是處理利息理論中未知利率的有力手段。因此數(shù)值分析是信息與計(jì)算科學(xué)專(zhuān)業(yè)的必修課程,也是很多高校中工科專(zhuān)業(yè)的選修課。
在大學(xué)的第一年中,學(xué)生已經(jīng)學(xué)習(xí)過(guò)線性代數(shù)、高等數(shù)學(xué)等基礎(chǔ)知識(shí),這都為學(xué)習(xí)數(shù)值分析這門(mén)課程打下了堅(jiān)實(shí)的基礎(chǔ)。中學(xué)階段的數(shù)學(xué)學(xué)習(xí)方式和大一基礎(chǔ)數(shù)學(xué)課學(xué)習(xí)方式一樣。學(xué)生學(xué)習(xí)數(shù)學(xué)主要靠一張紙和一支筆,通過(guò)題海戰(zhàn)術(shù)來(lái)得到關(guān)于定理的理解和應(yīng)用。這樣使得很多學(xué)生對(duì)于深入學(xué)習(xí)數(shù)學(xué)沒(méi)有太大興趣,覺(jué)得比較枯燥。更多的學(xué)生愿意通過(guò)自己多動(dòng)手和多操練來(lái)增加自己的實(shí)踐能力。數(shù)值分析課程中就有很多算法的講解。這使得學(xué)生對(duì)于傾向于學(xué)些數(shù)值分析這門(mén)課程。作者當(dāng)年在學(xué)習(xí)數(shù)值分析這類(lèi)課程的時(shí)候,是在2000年左右,當(dāng)時(shí)的計(jì)算機(jī)本身就不算多,算法的實(shí)現(xiàn)不夠成熟。2000年左右的計(jì)算機(jī)是新生事物,是剛冒出嫩芽的階段,所以不可能讓學(xué)生在電腦上實(shí)現(xiàn)。但是基于計(jì)算機(jī)的普及以及高校學(xué)習(xí)環(huán)境的改善,算法的實(shí)現(xiàn)就變得簡(jiǎn)單多了。從軟件方面來(lái)講,軟件Matlab早由美國(guó)Mathworks公司發(fā)布,它將數(shù)值分析、矩陣計(jì)算、可視化等諸多功能集成在環(huán)境中,為科學(xué)研究、工程設(shè)計(jì)以及必須進(jìn)行有效數(shù)值計(jì)算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案。
二、算法的設(shè)計(jì)
基于現(xiàn)實(shí)的情況,我們?cè)跀?shù)值分析這門(mén)課程中就需要加入上機(jī)實(shí)踐環(huán)節(jié),讓學(xué)生通過(guò)上機(jī)來(lái)完成這些算法。盡管要編程實(shí)現(xiàn)這些算法就需要付出很多努力。但是如有對(duì)算法有了好的理解,對(duì)編程的算法的流程一目了然,在這基礎(chǔ)上實(shí)現(xiàn)起來(lái)就容易的多。以前對(duì)于算法的優(yōu)點(diǎn)只是從理論分析入手,現(xiàn)在結(jié)合算法真正實(shí)現(xiàn),可以更加清楚地看到算法的優(yōu)點(diǎn)、精度等。目前針對(duì)算法的講解主要有三種方式——自然語(yǔ)言、框圖法、偽語(yǔ)言。一般來(lái)講,自然語(yǔ)言描述算法的方法讓學(xué)生從表述的方式更加容易接受,因此相對(duì)比較容易掌握,可是這種方式也存在很大的缺陷。比如,當(dāng)算法中包含多個(gè)分支或循環(huán)操作時(shí)文字語(yǔ)言就很難表述清楚。另一方面,使用自然語(yǔ)言描述算法也容易對(duì)一些問(wèn)題造成歧義。例如,“武松打死老虎”既可以理解為“武松/打死/老虎”,又可以理解為“武松/打/死老虎”。在自然語(yǔ)言中的表述中,語(yǔ)氣和停頓對(duì)相同的一句話產(chǎn)生不同的理解。特別是對(duì)較復(fù)雜的問(wèn)題,用自然語(yǔ)言難以表達(dá)準(zhǔn)確。綜上,無(wú)論是通過(guò)自然語(yǔ)言還是框圖法來(lái)描述算法,它們僅僅可以表述算法設(shè)計(jì)的理解和一種思路,但是都無(wú)法直接被計(jì)算機(jī)接受并進(jìn)行直接識(shí)別和執(zhí)行。
三、偽代碼嵌入的時(shí)機(jī)
偽代碼是一種算法描述語(yǔ)言。我們使用偽代碼的目的在于使學(xué)生更好地理解和實(shí)現(xiàn)算法。所以偽代碼在被用來(lái)描述算法的時(shí)候,必須以一種很容易地讓任何一種編程語(yǔ)言都可以實(shí)現(xiàn)的方式。所以一方面?zhèn)未a需要表述清楚,讓人容易理解。另一方面從計(jì)算機(jī)語(yǔ)言的角度講,必須結(jié)構(gòu)清晰、代碼簡(jiǎn)單、可讀性好。所以偽代碼有點(diǎn)類(lèi)似自然語(yǔ)言,又有點(diǎn)類(lèi)似編程語(yǔ)言。這樣偽代碼就需要將整個(gè)算法運(yùn)行過(guò)程的結(jié)構(gòu)或者流程用接近自然語(yǔ)言的形式描述出來(lái)并且容易編程計(jì)算機(jī)語(yǔ)言。這種形式可以使用大家熟悉的文字,但關(guān)鍵是可以把程序中的意思表達(dá)清楚。這樣偽代碼可以幫助寫(xiě)出程序流程,也讓算法的實(shí)現(xiàn)變得更加方便,還可使得不同的編程人員方便的交流。比如:
If 8點(diǎn)以前 then
do 讀英語(yǔ);
if 8點(diǎn)到20點(diǎn) then
學(xué)習(xí)+吃飯;
else
回家睡覺(jué);
end if
從上面的結(jié)構(gòu)中我們可以看出,這種形式一方面節(jié)約了時(shí)間,另一方面使結(jié)構(gòu)比較清晰,表達(dá)方式更加直觀。在接觸了偽代碼的方便之處后,我們有必要把偽代碼在教學(xué)過(guò)程中介紹出來(lái)。在數(shù)值分析的教材中,針對(duì)算法設(shè)計(jì)的描述,自然語(yǔ)言和框圖法的使用具有廣泛性。但是在數(shù)值分析的教學(xué)中,在已定本課程所采取的計(jì)算機(jī)高級(jí)語(yǔ)言確定的情況下,可以使用偽代碼的教學(xué)手段。例如,經(jīng)常在講解數(shù)值分析的課程中,教師確定使用Matlab作為實(shí)現(xiàn)的工具,因此在課堂教學(xué)中可以使用偽代碼的教學(xué)手段,其中計(jì)算機(jī)高級(jí)語(yǔ)言采用Matlab的控制結(jié)構(gòu)來(lái)描述算法的步驟。目前經(jīng)常采用的手段是采取框圖法讓學(xué)生理解,可是在學(xué)生真正編程實(shí)現(xiàn)的時(shí)候還是遇到了很大的困難,特別是針對(duì)Matlab語(yǔ)言為0基礎(chǔ)的情況下,學(xué)生應(yīng)用起來(lái)就很費(fèi)勁。在培養(yǎng)學(xué)生過(guò)程中,把算法的設(shè)計(jì)思路和實(shí)現(xiàn)在課堂教學(xué)中展示出來(lái),能夠增加學(xué)生的興趣,增強(qiáng)算法設(shè)計(jì)的理念和加強(qiáng)算法理解。
四、從算法入手滲透?jìng)未a應(yīng)注意的問(wèn)題
實(shí)際中,當(dāng)學(xué)生上機(jī)時(shí),課本中的關(guān)于算法設(shè)計(jì)的自然語(yǔ)言描述或者框架圖,也從某個(gè)方面讓學(xué)生理解了算法,但是偽代碼的出現(xiàn)讓學(xué)生更快更好地讓算法實(shí)現(xiàn)。因?yàn)槲覀冎缽目蚣軋D和自然語(yǔ)言仍是很難把算法轉(zhuǎn)化計(jì)算機(jī)可執(zhí)行語(yǔ)言,因此在課堂教學(xué)中,采用偽代碼的描述手段對(duì)于算法重新進(jìn)行敘述就有很好的作用。我們針對(duì)數(shù)值分析中算法的設(shè)計(jì),在教學(xué)中,不僅僅通過(guò)自然語(yǔ)言或框架圖講解,并且增加偽代碼的描述。對(duì)于沒(méi)有Matlab基礎(chǔ)的學(xué)生,通過(guò)課堂教學(xué)中算法偽代碼講解,首先課堂中展示把具體的算法通過(guò)偽代碼來(lái)用Matlab軟件實(shí)現(xiàn),并在上機(jī)操作中提高學(xué)生把算法用Matlab實(shí)現(xiàn)的能力,更好地讓學(xué)生掌握把自然語(yǔ)言轉(zhuǎn)化為偽代碼的能力,并提高偽代碼轉(zhuǎn)化為Matlab語(yǔ)言的能力。進(jìn)一步讓學(xué)生喜歡并且愛(ài)上偽代碼。這樣在課堂教學(xué)中加入偽代碼的描述,使得學(xué)生對(duì)于算法設(shè)計(jì)和執(zhí)行都能起到促進(jìn)作用。通過(guò)使用教材中的算法設(shè)計(jì)的框架圖或自然語(yǔ)言在課堂教學(xué)中都增加偽代碼描述部分,從而加強(qiáng)學(xué)生對(duì)算法設(shè)計(jì)的思路和上機(jī)實(shí)驗(yàn)的操作。
五、算法的實(shí)現(xiàn)
確定在教學(xué)中采用Matlab語(yǔ)言進(jìn)行編程實(shí)現(xiàn)的首選,因?yàn)镸atlab相對(duì)0基礎(chǔ)的學(xué)生入門(mén)簡(jiǎn)單。在教學(xué)中第一次講解算法的設(shè)計(jì)時(shí),首先通過(guò)自然語(yǔ)言或框架圖讓學(xué)生對(duì)于算法有一定認(rèn)識(shí),在此基礎(chǔ)上,把算法的偽代碼描述出來(lái)。并通過(guò)計(jì)算機(jī)把偽代碼變成可執(zhí)行語(yǔ)句,進(jìn)一步實(shí)現(xiàn)。從各個(gè)角度讓學(xué)生對(duì)于算法和算法的上機(jī)操作有深刻的體會(huì)。針對(duì)數(shù)值分析教學(xué)中采用Matlab進(jìn)行上機(jī)實(shí)習(xí)的算法,寫(xiě)出相應(yīng)的偽語(yǔ)言。學(xué)生通過(guò)偽語(yǔ)言進(jìn)行上機(jī)實(shí)習(xí)加強(qiáng)了學(xué)生對(duì)于算法設(shè)計(jì)轉(zhuǎn)化為應(yīng)用的能力,使學(xué)生對(duì)于上機(jī)實(shí)習(xí)能更加從容,并加強(qiáng)了學(xué)生對(duì)算法設(shè)計(jì)和算法實(shí)現(xiàn)的實(shí)行能力。
參考文獻(xiàn):
[1]陳芳,黃靜靜.Matlab在《數(shù)值分析》課程教學(xué)中的應(yīng)用[J].考試周刊,2014,(49):118.
[2]姚祖喜.《數(shù)學(xué)分析》教學(xué)中若干問(wèn)題的思考與實(shí)踐[J].中央民族大學(xué)學(xué)報(bào),2003,(12):254-258.