顧旭東 王市委 張援農(nóng)
摘要科學(xué)計算方法是一門面向理工科本科生的、具有廣泛用途的專業(yè)基礎(chǔ)課程,主要涉及線性及非線性方程的求解、插值與擬合、數(shù)值積分和微分方程的求解等過程所需的數(shù)值理論和方法。計算機(jī)技術(shù)的提升和算法的創(chuàng)新推動著科學(xué)計算的迅猛發(fā)展,因此科學(xué)計算方法課程的教學(xué)方法也應(yīng)及時調(diào)整以適應(yīng)當(dāng)前本科生教育。文章以科學(xué)計算方法本科生課程的開設(shè)作為實(shí)踐基礎(chǔ),從理論和實(shí)驗(yàn)教學(xué)兩個方面對教學(xué)方法進(jìn)行了探討。針對當(dāng)前本科生教育發(fā)展的需求,結(jié)合科學(xué)計算方法課程的特點(diǎn),所探討的方法在教學(xué)活動中的得以運(yùn)用,提升了學(xué)生的自主學(xué)習(xí)興趣,提高了學(xué)習(xí)效率,而且能夠?qū)W以致用,取得了良好的教學(xué)效果。
關(guān)鍵詞 教學(xué)方法;科學(xué)計算;探討與研究
中圖分類號:G424文獻(xiàn)標(biāo)識碼:ADOI:10.16400/j.cnki.kjdk.2023.12.038
科學(xué)計算是指應(yīng)用計算機(jī),基于適當(dāng)?shù)臄?shù)值方法編寫程序求解科學(xué)研究和工程技術(shù)中所遇到的數(shù)學(xué)問題。在現(xiàn)代科學(xué)和工程技術(shù)中,經(jīng)常會遇到大量復(fù)雜的數(shù)學(xué)計算問題,且用一般的計算工具來解決非常困難,而用科學(xué)計算來處理卻非常容易[1-2]。在我國“東數(shù)西算”大戰(zhàn)略的背景下,運(yùn)用科學(xué)計算解決科學(xué)研究和工程技術(shù)發(fā)展中遇到的關(guān)鍵性問題,顯得尤為重要,有望帶來巨大的經(jīng)濟(jì)效益,同時帶動科學(xué)技術(shù)本身發(fā)生根本性變化。
科學(xué)計算主要包括建立數(shù)學(xué)模型、建立求解的計算方法和計算機(jī)實(shí)現(xiàn)三個階段。建立數(shù)學(xué)模型是指依據(jù)學(xué)科理論對所研究的對象確立一系列的量化關(guān)系,即數(shù)學(xué)公式或方程[3-4]。數(shù)學(xué)模型一般包含連續(xù)變量,如微分、積分、偏微分方程等,這些不能在計算機(jī)上直接處理。為此,需要進(jìn)行離散化處理,即把問題化為包含有限未知數(shù)的離散形式,然后尋找數(shù)值求解方法。計算機(jī)實(shí)現(xiàn)包括編制程序、調(diào)試、運(yùn)算和結(jié)果分析等一系列步驟[4-5]。依據(jù)數(shù)值算法,使用程序語言(如C/C++、Fortran和MATLAB)和軟件工具編寫程序并調(diào)試。之后的工作主要依靠高性能計算資源和數(shù)據(jù)分析處理系統(tǒng)作為支撐,從而完成求解過程。在科學(xué)計算中需要物理、數(shù)學(xué)與計算機(jī)等多學(xué)科的充分交叉融合,做到物理建模、計算方法、并行算法、軟件研制和高性能計算機(jī)等方面的有機(jī)結(jié)合。
科學(xué)計算方法是一門面向理工科本科生,具有實(shí)際用途的專業(yè)基礎(chǔ)課程,主要涉及線性/非線性和偏微分/微分方程的求解、插值與擬合、數(shù)值微積分等基本的數(shù)值理論和方法。隨著計算機(jī)技術(shù)的發(fā)展,在數(shù)值計算課程教學(xué)方法上出現(xiàn)越來越多的探討,為課程教學(xué)提供了有益的參考[6-16]。本文以科學(xué)計算方法本科生課程開設(shè)的具體實(shí)踐為基礎(chǔ),從理論和實(shí)驗(yàn)教學(xué)兩個方面探討教學(xué)方法,有助于對科學(xué)計算方法的本科生教學(xué)提供有意義的指導(dǎo)和參考。
1科學(xué)計算方法課程安排
在新工科培養(yǎng)方案中,科學(xué)計算方法等專業(yè)基礎(chǔ)課程的學(xué)時被進(jìn)一步壓縮,安排的授課時間減少三分之一。在科學(xué)計算方法有限的學(xué)時中,按照4:3的比例,我們開展理論教學(xué)32個學(xué)時,實(shí)驗(yàn)教學(xué)24個學(xué)時。理論教學(xué)主要包含預(yù)備知識、非線性方程解法、線性方程組的數(shù)值解法、差值與多項(xiàng)式逼近、曲線擬合、數(shù)值積分、微分方程求解和偏微分方程數(shù)值解,共計8個部分。實(shí)驗(yàn)教學(xué)為集中時段內(nèi)的上機(jī)實(shí)驗(yàn),其目的是在進(jìn)一步鞏固科學(xué)計算的方法和原理的基礎(chǔ)上,掌握如何通過計算機(jī)編程完成特定科學(xué)計算任務(wù)并實(shí)現(xiàn)結(jié)果的輸出。為減少編程和上機(jī)實(shí)驗(yàn)的難度,選擇MATLAB語言作為科學(xué)計算方法教學(xué)的支撐,可以滿足從算法的實(shí)現(xiàn),到結(jié)果的圖形化輸出等需求。使用了國外計算機(jī)科學(xué)教材系列叢書中的《數(shù)值方法MATLAB版》為本課程的教材,緊跟當(dāng)前國際上本科生科學(xué)計算方法的教學(xué)內(nèi)容水準(zhǔn)。
2科學(xué)計算方法課程教學(xué)方法探討
2.1理論教學(xué)方法
科學(xué)計算方法理論教學(xué)重點(diǎn)講授科學(xué)計算所涉及的方法和原理,主要目的是讓學(xué)生掌握計算中需要用到的解方程、數(shù)據(jù)插值和擬合以及數(shù)值積分等相關(guān)技能。針對有一定學(xué)習(xí)基礎(chǔ)的理工本科生,相對于傳統(tǒng)的理論教學(xué)方法,科學(xué)計算方法理論教學(xué)作了如下四個方面的嘗試:
①嘗試對教學(xué)順序作出適當(dāng)改變,以利于用分類、對比的方法進(jìn)行理論教學(xué)。重新劃分了知識點(diǎn),梳理了授課內(nèi)容,制訂了詳細(xì)的授課方案。
②嘗試在與計算機(jī)編程有關(guān)的講解中,重點(diǎn)介紹程序編寫、表達(dá)式和語法上相對于C語言的差異,側(cè)重于數(shù)據(jù)的格式化文件輸出和結(jié)果的圖形化輸出。
③嘗試結(jié)合實(shí)際案例對知識點(diǎn)進(jìn)行詳細(xì)講解,引導(dǎo)學(xué)生從更深層次思考該課程的作用和意義,提高學(xué)生的興趣和學(xué)習(xí)積極性。
④嘗試在數(shù)值計算核心算法講解中,重點(diǎn)介紹原理以及實(shí)現(xiàn)途徑,結(jié)合流程圖展示程序?qū)崿F(xiàn)的步驟,詳細(xì)分析核心程序代碼,明確編程規(guī)范。
在滿足科學(xué)計算方法教學(xué)大綱要求的前提下,基于以上理論教學(xué)方法對教學(xué)思路進(jìn)行了如下的調(diào)整:
①為了能夠在既定的課時里完成教學(xué)任務(wù),達(dá)到教學(xué)目標(biāo),首先適當(dāng)改變課程教學(xué)順序,對知識點(diǎn)進(jìn)行了重新劃分,如圖2(p118)所示。在此基礎(chǔ)之上,對授課內(nèi)容進(jìn)行了重新梳理,制訂了詳細(xì)的授課方案。在解方程部分,把非線性方程、線性方程、微分方程和偏微分方程的數(shù)值算法調(diào)整在一起,依次講授,既把它們之間的區(qū)別清晰地講授清楚,又特別指出它們之間的聯(lián)系;插值和擬合放在一起進(jìn)行詳細(xì)講授,使學(xué)生掌握數(shù)據(jù)分析和處理的基本方法;積分部分在數(shù)值計算中也占有非常重要的地位,由易到難,從五個部分分別進(jìn)行講授。盡管教學(xué)順序與教材目錄排序不一致,但是通過分類、對比的方法進(jìn)行上述教學(xué)活動,顯著提高了教學(xué)成效。
②授課的對象為具有C/C++編程語言基礎(chǔ)和計算機(jī)編程思維的理工本科生,因此在講授MATLAB基礎(chǔ)的時候,重點(diǎn)介紹程序編寫、表達(dá)式和語法上相對于C語言的差異;另外,重點(diǎn)講授計算結(jié)果在MATLAB中的輸出方法,包含數(shù)據(jù)的格式化文件輸出和結(jié)果的圖形化輸出,為后續(xù)科學(xué)計算方法的上機(jī)實(shí)現(xiàn)打好基礎(chǔ)。
③結(jié)合實(shí)際案例對知識點(diǎn)進(jìn)行詳細(xì)講解,提高學(xué)生的學(xué)習(xí)興趣,鞏固相關(guān)的知識點(diǎn),下面以三個具體知識點(diǎn)的講授方法為例詳細(xì)給予說明:
④往往計算機(jī)編程的程序算法與科學(xué)計算的理論方法不完全一致,這給學(xué)生的學(xué)習(xí)帶來一定的困難,甚至出現(xiàn)學(xué)生在良好地掌握了理論方法后,依然在構(gòu)建編程算法的時候“無從下手”。本課程最終需要落實(shí)到數(shù)值計算核心算法的講解,同時注重結(jié)合算法流程圖,講授算法的具體實(shí)現(xiàn)過程。一方面增強(qiáng)學(xué)生對算法的深入理解,另一方面可以為后續(xù)的上機(jī)實(shí)驗(yàn)作好準(zhǔn)備。主要涉及算法具體為求解非線性方程的二分法、牛頓法和割線法,求解線性方程的三角分解法和迭代法,解微分方程的歐拉法、休恩法和龍格庫塔法,解偏微分方程的差分方法,用于插值的拉格朗日和牛頓法,用于擬合的曲線擬合和樣條函數(shù)法,以及用于積分的梯形、辛普森、布爾、組合積分和龍貝格法。針對每一種核心算法,給出對應(yīng)的實(shí)現(xiàn)流程圖,分析程序算法每一個步驟與理論方法的對應(yīng)關(guān)系,培養(yǎng)學(xué)生的編程思維能力。
2.2實(shí)驗(yàn)教學(xué)方法
當(dāng)前學(xué)科的發(fā)展和人才培養(yǎng)的要求,給本科生實(shí)驗(yàn)教學(xué)提出了新的任務(wù)和要求。其指導(dǎo)方針是借鑒世界一流大學(xué)拔尖人才培養(yǎng)博雅型教育和研究型學(xué)習(xí)的理念,依托學(xué)科優(yōu)勢和高水平的師資隊伍,貫徹寬口徑、厚基礎(chǔ)、強(qiáng)能力的方針,大膽探索,逐步形成具有顯著特色的培養(yǎng)模式。為了達(dá)到上述目標(biāo),科學(xué)計算方法的實(shí)驗(yàn)教學(xué)也做出積極的改變,采取了與以往本科生實(shí)驗(yàn)明顯不同的教學(xué)方法。實(shí)驗(yàn)教學(xué)相對于理論教學(xué)更加開放和靈活,因此以任務(wù)驅(qū)動的方法來進(jìn)行。以計算方法實(shí)踐為目的,將實(shí)驗(yàn)內(nèi)容依據(jù)知識點(diǎn)以及它們之間的聯(lián)系分解為若干子任務(wù),明確每個任務(wù)的基本要求,給予學(xué)生自由選題的機(jī)會。這種方式有利于學(xué)生將本課程所學(xué)的科學(xué)計算方法和其他課程所學(xué)的數(shù)學(xué)、物理方法及編程等知識進(jìn)行綜合運(yùn)用。與具體問題情景相聯(lián)系,有利于激發(fā)學(xué)生的實(shí)踐熱情和創(chuàng)造力,并培養(yǎng)學(xué)生“發(fā)現(xiàn)問題―分析問題―解決問題”的能力。
實(shí)驗(yàn)需要針對具體的問題使用算法編程實(shí)現(xiàn),并且給出數(shù)值結(jié)果。要求學(xué)生學(xué)會模塊化編程的思想,把每一個核心算法編寫成函數(shù),在編寫主程序時調(diào)用核心算法函數(shù),運(yùn)行得到結(jié)果。在此過程中,學(xué)生可以把編寫的函數(shù)與MATLAB函數(shù)庫中具有同樣功能的函數(shù)運(yùn)行結(jié)果作對比,確保所寫核心算法的正確性。實(shí)驗(yàn)評價以任務(wù)完成情況作為主要依據(jù),學(xué)生需要提交詳細(xì)的實(shí)驗(yàn)報告,包含代碼、運(yùn)行結(jié)果和小結(jié)。具體的做法是根據(jù)實(shí)驗(yàn)教學(xué)目標(biāo),擬定實(shí)驗(yàn)任務(wù),分別對應(yīng)方程求解、插值與擬合以及積分的相關(guān)知識點(diǎn)。要求學(xué)生能夠獨(dú)立完成每一項(xiàng)任務(wù),可以查閱課本、講義,也可以參考網(wǎng)絡(luò)課程資料,但是知識點(diǎn)相關(guān)算法代碼必須自己編寫。在上機(jī)實(shí)驗(yàn)過程中,充分發(fā)揮學(xué)生的“主體”地位,實(shí)驗(yàn)教師圍繞任務(wù)目標(biāo)來展開指導(dǎo),學(xué)生獨(dú)立完成具體的子任務(wù)來達(dá)成實(shí)踐目標(biāo)。
3結(jié)論
在深化本科生教學(xué)活動改革的背景下,為適應(yīng)本科生科學(xué)計算方法教學(xué)的新的要求,我們在具體的教學(xué)中作了諸多有益的嘗試。以本科生科學(xué)計算方法課程開設(shè)的具體實(shí)踐為基礎(chǔ),本文從理論教學(xué)和實(shí)驗(yàn)教學(xué)兩個方面探討所運(yùn)用的教學(xué)方法。上述方法已成功運(yùn)用到具體的教學(xué)活動中,取得了很好的教學(xué)效果:
①學(xué)生對科學(xué)計算方法課程產(chǎn)生了濃厚的學(xué)習(xí)興趣,直接提高了學(xué)生出勤率和學(xué)習(xí)的效率,在壓縮了學(xué)時之后仍然能夠在規(guī)定的時間內(nèi)有效地掌握既定知識點(diǎn)。
②學(xué)生能夠把所學(xué)的知識及時運(yùn)用于科學(xué)研究、畢業(yè)設(shè)計等后續(xù)的工作之中,學(xué)以致用,取得了良好的反響。
綜上所述,隨著當(dāng)前大學(xué)生心理和素質(zhì)的變化,在理工科科學(xué)計算方法教學(xué)活動的過程中通過一些有益的教學(xué)方法的調(diào)整,能夠有效解決當(dāng)前教學(xué)過程中面臨的“死氣沉沉,照本宣科”的狀態(tài),促使學(xué)生對本課程產(chǎn)生濃厚的學(xué)習(xí)興趣,愿意在算法原理的學(xué)習(xí)到實(shí)踐編程上投入學(xué)習(xí)時間,優(yōu)質(zhì)高效地掌握科學(xué)計算方法。更重要的是學(xué)生可以學(xué)以致用,能夠在面臨具體問題時,運(yùn)用該課程所涉及的計算方法來解決。當(dāng)然,未來需要授課老師們依據(jù)形勢的變化,豐富更多的案例,并進(jìn)行更多的嘗試和努力,共同推進(jìn)科學(xué)計算方法的本科生教學(xué)活動。
*通訊作者:顧旭東
參考文獻(xiàn)
[1]李慶揚(yáng).科學(xué)計算方法基礎(chǔ)[M].北京:清華大學(xué)出版社,2006
[2]John H. Mathews.數(shù)值方法(MATLAB版)(第四版)(Numerical Methods Using MATLAB Fourth Edition,國外計算機(jī)科學(xué)教材系列)[M].北京:電子工業(yè)出版社,2017.
[3]劉欽圣.數(shù)值方法教程[M].北京:冶金出版社,1998.
[4]關(guān)治.數(shù)值分析基礎(chǔ)[M].北京:高教出版社,1998.
[5]白峰杉.數(shù)值計算引論[M].北京:高等教育出版社,2010.
[6]謝治州.“數(shù)值分析”實(shí)驗(yàn)教學(xué)的實(shí)踐與探索[J].實(shí)驗(yàn)室研究與探索,2010,29(5):133-136.
[7]謝冰,魯興舉.信息化手段在"數(shù)值分析方法"教學(xué)中的應(yīng)用探索[J].教育教學(xué)論壇,2022(17):157-160.
[8]溫和,滕召勝,唐求,等.可視化教學(xué)方法在電氣信息類數(shù)值分析課程中的應(yīng)用[J].計算機(jī)教育,2010(19):151-153.
[9]方春華.數(shù)值分析課程教學(xué)方法與手段的實(shí)踐與認(rèn)識[J].湖南理工學(xué)院學(xué)報(自然科學(xué)版),2016,29(2):92-94.
[10]閔杰,李義寶.高?!稊?shù)值分析》課程組合式教學(xué)方法探索研究[J].高教論壇,2010(6):72-74.
[11]金煒楓.課程參與式教學(xué)研究——以《土木工程數(shù)值分析方法》為例[J].教育,2020(21):47.
[12]別敦榮.大學(xué)教學(xué)方法創(chuàng)新與提高高等教育質(zhì)量[J].清華大學(xué)教育研究,2009,30(4):95-101,118.
[13]代麗嫻.《數(shù)值分析方法》課程教學(xué)改革探討[J].教育與職業(yè),2006(26):135-137.
[14]何滿喜.數(shù)值分析課程教學(xué)的幾點(diǎn)體會及研究[J].中國大學(xué)教學(xué), 2011(3):54-55,49.
[15]胡嘉瑜.卓越教學(xué)視角下大學(xué)理論教學(xué)問題及對策研究[D].重慶:西南大學(xué),2020.
[16]孟凡.本科研究性教學(xué)的理論與實(shí)踐研究——以華中科技大學(xué)江建軍教授的教改實(shí)踐為例[D].湖北:華中科技大學(xué),2007.