摘要:分析大學工科計算方法課程教學中存在的常見問題,基于課程特點,從計算機科學與技術專業教學角度,研究計算方法課程的基本定位、教學內容與重點、教學方式與講授順序,探討課程實踐教學的內容與方式。
關鍵詞:計算方法;教學;數值算法;實踐
文章編號:1672-5913(2013)18-0069-04
中圖分類號:G642
0 引言
作為科學方法論的三大組成部分之一,科學計算在人類生活中正扮演著日益重要的角色,而選用計算方法作為整個科學計算全過程中的一個重要環節,是程序設計和對數值計算結果進行分析的依據和基礎。計算方法課程作為工學本科專業,尤其是計算機專業的一門重要選修課程,講授內容包括常用的數值計算方法及其相關理論。通過該課程的學習,為學生進一步學習和解決各類科學或工程實際問題,培養自身的學科基本能力與創新能力奠定良好的基礎。
長期以來,計算方法課程教學存在著過分強調理論教學,輕視實踐教學,重視課堂教育,輕視算法設計與實現綜合訓練,以及缺少與科學、工程實際相關的教學案例等傾向,教學效果不甚理想。因此,計算方法課程教學改革勢在必行。近幾年,筆者一直從事計算機專業本科生計算方法課程的教學,在教學過程中,從教學內容、教學方法及實踐教學等方面進行改革與實踐,并取得了較好的效果,對該課程的教學有了較為深刻的認識與體會。
1 計算方法課程的定位、內容及教材選用
計算方法是從計算機的角度考察計算數學,形成“面向計算機”的數值算法設計學,它以數學問題為對象,研究各種數值算法及其相關理論。對于計算機專業的學生,學習計算方法的主要目的在于運用,即針對科學研究和工程設計中的實際問題,通過建立數學模型,運用理論設計相應的算法,編制相應的計算機程序,最終上機計算求出結果。因此,課程的主要任務是使學生掌握最常用、最基本的數值計算的基本概念、基本方法和基本理論。
計算方法課程包括插值方法、數值積分與數值微分、常微分方程的差分方法、非線性方程的求根、線性方程組的迭代法與直接法等內容。它們構成兩大模塊:①數值微積分模塊,討論將微積分方法化歸為代數問題或解方程,包括插值方法、數值微積分和常微分方程的差分法;②方程(組)求解模塊,致力于討論方程(組)的解法,包括非線性方程求根、線性方程組的迭代法與直接法。課程具有以下特點:借助計算機提供切實可行的數學算法,所提出的算法必須具有可靠的理論分析、理想的精確度、收斂且穩定,誤差可以分析或估計,計算復雜性好(該特點通過時間復雜性和空間復雜性兩個指標衡量,即節省時間與空間存儲量),并通過數值實驗證明算法行之有效。
課程內容可安排在56課時內完成,其中課堂講授40課時,上機實驗16課時。教材選用由華中科技大學出版社、王能超教授編寫的《計算方法》。該教材完全摒棄了依據微積分知識設計算法的傳統做法,代之以幾種富于概括性的設計思想和方法原則,概念清晰,結構編排由淺入深,分析問題具有很強的啟發性。
2 計算方法的教學重點、方式與順序
2.1 教學重點
學習計算方法課程,不必追求數學理論的完整性與嚴密性,重要的是進行算法的設計,它是科學計算成敗的關鍵。合理地選擇算法是建立在正確的算法分析基礎之上,通過算法分析掌握算法的適用性、有效性、收斂性、可靠性和穩定性,但對計算機專業學生這部分內容可以不作為重點。課程講授的重點應放在算法的設計與實現上,教會學生掌握各種算法的設計機理并靈活運用其進行算法的設計。
基于以上理念,在教學中我們合理設置了各部分內容的側重點。
1)插值方法。
使學生明確插值過程實際是直接利用所給數據進行加權平均,基于代數精度的概念將插值公式的設計化歸為確定平均化系數的代數問題。教學中應重點講授多項式插值,包括Lagrange插值及Hermite插值,在此基礎上使學生掌握通過線性插值的重復化得到高階插值公式的Aitken逐步插值算法與Neville逐步插值算法,并重點介紹分段插值的基本思想與公式。至于樣條插值,可不作考核要求。
2)數值積分與數值微分。
應強調數值積分的基本思想是通過若干個求積節點上的函數值的加權平均生成平均高度,數值微分則是將導數計算化歸為若干個節點處函數值的加權平均。教師必須教會學生在盡可能高的代數精度目標下進行求積公式的設計,且設計求積公式時可利用對稱性原理減少待定參數。具體內容以等距節點上的Newton-Cotes公式、非等距的Gauss公式為重點,明確Gauss公式的精度較高,但需同時處理求積系數和求積節點,并能利用對稱性簡化處理過程。對于固定步長、變步長的復化求積方法及Romgerg加速算法也應給予足夠重視,而數值微分及其加速方法只簡單介紹即可。
3)常微分方程的差分法。
重點介紹常用單步法的Euler方法和Runge-Kutta方法,線性多步法的Adams方法,它們又分為顯示和隱式兩種差分格式。具體實施中,使學生明確Euler方法的不同差分格式實際上是根據近似區間上導數方法的不同而得到,重點掌握顯式方法與隱式方法、兩步格式與梯形格式以及Euler預報校正系統。對于Runge-Kutta方法,關鍵在于尋求求解平均斜率的方法,重點掌握二階及經典Runge-Kutta方法。為設計多步格式,需掌握如何將所給實際問題化歸為數學問題,將數學問題化歸為代數問題,并基于代數精度概念,具體地列出方程組。
4)非線性方程求根。
重點介紹根的存在性、根的范圍和根的精確化,明確其基本思想是將隱式的非線性化模型逐步顯式化、線性化。實際應用中,應通過運用基本的算法設計技術,舍棄高階小量,將難以處理的非線性方程加工成容易求解的線性化的校正方程,逐步校正所獲得的近似根,迭代誤差逐步縮小,以保證迭代過程的收斂性,并對每一步迭代出的新值與老值進行加權平均(松弛),得出精度更好的改進值。要求學生熟練掌握Newton法及一系列改進的Newton方法。對于非線性方程組只需簡單介紹Newton方法,但由于理論的復雜性,故不作考核要求。
5)線性方程組的迭代法和直接法。
對于迭代法,教會學生將線性方程組的求解過程加工成對角方程組或三角方程組求解過程的重復。重點介紹Jacobi公式與Gauss-Seidel公式,在此基礎上掌握超松弛迭代加速方法,以及通過矩陣分裂導出上述兩者方法的迭代矩陣。對于直接法,使學生掌握方法的核心在于利用矩陣分解技術通過運算手續直接將所給線性方程組加工成某個三角方程組乃至對角方程組來求解,掌握利用求解過程的“追”手續與“趕”手續。重點講解Gauss消元法、列主元與全主元Gauss消元法、LU的Doolittle與Crout分解方法,然后使學生掌握通過LU手續利用追趕法求解三對角方程組、利用Cholesky及其改進方法求解系數矩陣為對稱正定陣的線性方程組。
2.2 教學方式
課程教學中,我們牢牢把握了1條主線、2類基本方法和4種基本技術,對學生進行正確的引導,使學生能舉一反三,快速掌握數值的校正量,要求校正方程具有逼近性和簡易性;逐步求精是指繼續迭代與否取決于改進值是否滿足精度要求,若不滿足,則用改進值作為新的猜測值重復上述步驟。
(3)松弛技術:松弛過程也是加速迭代的過程,即通過對兩個與目標值精度相當的近似值的加權平均得到精度更高的改進值,其設計機理可表述為優劣互補、激濁揚清。運用松弛技術的關鍵是選取合適的松弛因子,當近似值有優劣之分時,松弛因子一正一負,松弛技術稱為超松弛技術。
(4)二分技術:它是縮減技術的延伸,也是一種高效算法的設計技術,其設計機理變慢為快,即每一步使問題的規模減半,規模按等比級數(1/2)遞減,直至規模變為1時終止計算。
2.3 教學順序
算法設計的基本方法與過程。
1 條主線是復雜問題簡單化,將復雜計算化歸為一系列簡單計算的重復。
2 類基本方法包括直接法與迭代法。它們均按照規模縮減的原則進行演化,主要區別在于直接法是正整數規模的有限縮減過程,而迭代法是實數規模的無窮縮減過程。
數值算法設計的基本與一般性技術(包括縮減技術、校正技術、超松弛技術和二分技術)是直接法與迭代法的設計基礎。其中,二分技術是縮減技術的加速,超松弛技術是校正技術的優化。
(1)縮減技術:適用于通過有限步計算可直接得到問題解的直接法,其設計機理為大事化小,小事化了。大事化小即通過設計結構遞歸,將所考察的問題加工成規模壓縮了的同類問題,使每一步加工后的問題規模相比之前小1,最終達到規模遞減之目的;而小事化了則意味著問題的規模變得足夠小,可直接計算或能方便地得出問題的解。
(2)校正技術:是指對于無法大事化小的問題只能通過無限的逼近過程——迭代近似求解,其設計機理可概況為以簡馭繁與逐步求精。以簡馭繁是指通過構造某個簡化方程(校正方程)近似替代原先比較復雜的方程,以確定所給預報值
課程的講授順序應科學安排,循序漸進。
1)數值微積分模塊。
該模塊的3部分內容都是從簡單出發、基于平均化原則,都歸結為某些離散函數值的加權平均,最終歸結為確定權系數,將含有多個權系數的代數模型加工為每步確定一個松弛因子的遞推過程。
其中,插值方法講授函數的近似表示,由其構造出的插值函數可充當某種簡單的近似函數。插值逼近是數值微積分方法的理論基礎,如果用插值函數近似替代被積函數,可導出數值求積公式。而數值微積分講授積分與微分的近似計算,基于數值求積公式可以導出差分格式,常微分方程的差分方法講授常微分方程的近似求解,形式上可表示為積分形式。作為承上啟下重要環節的常微分方程的差分方法是數值計算的核心內容,其定解問題包括初值問題與邊值問題,其中,初值問題的隱式格式需要求解函數方程,邊值問題的差分方法化歸為大型線性方程組。
2)方程(組)求解模塊。
該模塊的3部分內容形成了一個有機的整體,進行方程(組)求解所用的迭代方法是本模塊的基礎,即都是將函數方程或線性方程組劃歸為一系列遞推算式。迭代方法不僅可用于非線性方程的求根(逐步線性化),而且還可進行線性(非線性)方程組的求解。而線性方程組的迭代法與直接法互為反方法,它們分別對矩陣施行矩陣分裂(矩陣相加)與矩陣分解(矩陣相乘)手續,基本的處理策略都是將所給的線性方程組化歸為三角方程組逐步逼近所求的解。
對于上述兩大模塊,數值微積分模塊討論將微積分方法化歸為代數問題乃至于解方程,而方程(組)求解模塊致力于討論方程的解法。因此,課程的教學順序應為:插值方法、數值積分與數值微分、常微分方程的差分方法、非線性方程的求根、線性方程組的迭代法與直接法。
3 計算方法課程實驗環節的設計
實踐教學是計算方法課程教學內容的重要組成部分。在教學中我們采取了以下措施:
1)精選實驗內容,注重提高解決實際問題能力的培養。
實驗的目的在于使學生熟悉數值算法的運算過程,加深對基本理論的理解,并最終能用于解決科學、工程實際問題。因此,在進行實驗內容設計時,我們將計算方法課程與其他學科相結合,精選一些貼近工程或科學實際的問題,啟發引導學生積極思維,讓學生自己動手,查閱文獻,分析研究,建立模型,設計算法,編寫程序并上機調試,以及分析運行結果。這樣既加深了學生對算法的理解,同時培育了學生解決實際問題的能力。
2)基于Matlab計算平臺,深入引導學生理解算法內涵。
為提高學習本課程的興趣,可借助一些數學軟件使問題簡單化,將學生的注意力從編程轉移到實際問題的解決上來。實踐中,選用了Matlab作為實驗平臺,利用Maflab軟件平臺強大的計算功能與圖形處理功能,將復雜抽象的定義、理論與算法簡單化、具體化,既能進行數值計算,又能實現計算結果的可視化,取得較好的實驗效果。
4 結語
計算機計算能力的提高需要借助于好的計算方法,計算方法課程致力于探索適合在計算機上使用的理論可靠、實現可行、計算復雜性好的數值算法之設計方法。針對計算機專業本科學生學習計算方法課程中存在的問題,我們對課程進行改革,以培養學生基本的數值算法設計與實現能力為核心目標,總結并提出了課程的教學重點、教學順序、教學方式方法,以及實踐教學環節應達到的目標。實踐表明,這種教學模式對于提高學生的學習主動性和創新意識,培養學生的程序設計能力和綜合應用能力具有較好的作用。
參考文獻:
[1]王能超,計算方法:算法設計及其Matlab實現[M],武漢:華中科技大學出版社,2010
[2]鄧建中,理工科計算方法課程教學中若干分歧問題的我見[J],大學數學,1992,8(2):84-86
[3]陳延梅,張池平,李道華,大學工科數學計算方法教學之探討[J],大學數學,2005,21(2):29-31
[4]陳瑞林,徐定華,計算科學與工程學科視覺下的計算方法課程教學改革[J],浙江理工大學學報,2012,29(6):933-937
[5]李大美,謝進,基于創新能力培養的計算方法課程改革[J],中國大學教學,2007(4):8-9
[6]何亞麗,劉春風,數值計算方法課程中實驗環節的設計[J],大學數學,2008,24(1):9-12
(見習編輯:劉麗麗)