趙振宇 鞏本學 鄭明文 賈現(xiàn)正 王迎美 由雷
摘 要:線性方程組的直接解法是計算方法課程中的基本內容與方法,在很多數(shù)值計算的過程中都有廣泛的應用。現(xiàn)有教材的教學內容和設計整體性不強,對幾類方法的相關性描述不足,不利于學生對方法的理解。本文重新梳理現(xiàn)有教材中的教學內容,對現(xiàn)有的教學設計提出幾點改進。首先,改變傳統(tǒng)教材中的教學順序,將三角分解內容前置,突出本章的教學重點;然后,以緊湊格式的LU分解為核心,串聯(lián)章節(jié)的各部分內容,使學生能夠更深刻理解各部分內容之間的內在聯(lián)系;再有,對列主元方法進行修正,避免學生產生歧義。最后,對相關實踐環(huán)節(jié)提出建議。通過以上教學設計的改進,旨在提高學生對相關內容的理解與興趣,培養(yǎng)學生的思考和創(chuàng)新能力。
關鍵詞:計算方法,線性方程組的直接解法,教學設計,啟發(fā)式教學
中圖分類號:G642;O151? 文獻標識碼:A? 文章編號:1673-260X(2022)03-0001-05
1 引言
“計算方法”是高等院校數(shù)學類專業(yè)的重要基礎課程,同時也是很多理工科專業(yè)的主要公共課程之一。隨著現(xiàn)代科學技術的迅猛發(fā)展以及計算機的廣泛應用,科學工程中所涉及的數(shù)值計算問題越來越多。科學計算已成為繼理論和試驗方法之后的第三種科學研究手段,是人們進行科學活動必不可少的科學工具[1]。計算方法課程作為科學計算的關鍵基礎課程,在培養(yǎng)高等院校工科類大學生的科學計算能力和解決工程實際問題的素質能力方面具有不可替代的重要作用。計算方法這門課程既有一般數(shù)學課程抽象性的特點,又注重與實際工程問題相結合的工程思想,關注求解的精確性和計算效率的平衡[2]。在課程教學中不但要注意培養(yǎng)學生的數(shù)學理論素養(yǎng),還要關注學生的動手實踐能力,要通過一些相對簡單的例子讓學生相關算法的操作流程。因此,在教學設計上要進行精心設計,才能取得良好的教學效果。
線性方程組的直接解法是計算方法課程中非常重要的一部分。大量的實際問題最終都要歸結到線性方程組的求解,而直接解法中涉及的LU分解等算法仍然是目前求解線性方程組的主流方法。該部分涵蓋的計算量分析、三角分解與高斯消去法的關系、對稱以及三對角矩陣LU分解的特殊性等內容對學生深刻理解算法設計的意義有著重要的作用。但現(xiàn)有大部分教材的教學體系對這部分的內容梳理不夠清晰。
1.1 高斯消去法的內容過于冗長
大部分教材采用過多的篇幅描述高斯消去法的內容,而對高斯消去法與LU分解之間的關系描述以公式的推導為主,不夠直觀。對兩種方式的計算量之間的關系簡單地一帶而過,學生對其相關性認識模糊。事實上,高斯消去的過程與線性代數(shù)的內容基本是重疊的,在這里花費太多功夫會讓學生對這門課程的本質認知不清,應盡快突出教學的重點,盡快引出矩陣分解的計算過程。然后再與高斯消去的過程進行比對,讓學生看到這門課程的角度與線性代數(shù)的關注點是完全不同的。而對計算量的分析應通過簡單的例子讓學生直觀看到實際上三角分解就是對高斯消去過程的記錄。本質上它們的計算是一樣的,只是次序不同,因此可以通過高斯消去的過程來研究三角分解的計算量問題。
1.2 改進學生難掌握的平方根方法的繁瑣公式
沒有把改進平方根法與一般LU分解之間的聯(lián)系描述清楚,學生沒有形成直觀的計算量降低的感受,對于工科學生而言,理解這部分內容存在較大困難。整體在這一部分的教學設計上應該以一般矩陣的LU分解為重點,花更多的時間讓學生掌握一般矩陣LU分解的計算過程,能夠完成一些簡單矩陣的緊湊格式的計算。在學生能夠熟練進行一般矩陣LU分解計算的基礎上再對改進平方根法進行講解,只需要講清楚它的上下三角矩陣之間的關系,學生就可以清楚地看到計算量降低的情況了。
1.3 列選主元的方法與目前一些商業(yè)軟件內置算法基本原理相悖
現(xiàn)有教材中的列主元消去法存在較大的漏洞,容易讓學生對該部分內容產生懷疑。大部分教材這一部分采用的處理方式都是直接選取列元素絕對值最大的做主元,而實際過程中有學生會提出反例,使得這種操作解決不了求解的不穩(wěn)定問題,而教師一般的處理辦法就是改成全選主元的方法。但實際上目前大部分商業(yè)軟件采用的方式是歸一化的列主元方法,而這種方法的描述并不復雜,對教材上的內容進行簡單的修正就可以解決這個問題。
1.4 課堂授課存在重理論輕實踐現(xiàn)象
目前計算方法的課程講授以理論為主,忽略學生對方法具體應用的掌握程度,這與工科學生的培養(yǎng)目標相違背,不能很好地鍛煉學生的動手能力。能夠利用軟件結合這門課所學的內容解決一些基本的計算問題才是工科學生學習這門課程的基本目的。因此,如何在有限時間內讓學生能夠掌握相關算法與程序設計的基本流程,理解同一數(shù)學目標下的不同數(shù)學處理會造成很大的差異。[4,5]
本文針對這些問題,結合近年來的教學體會和經(jīng)驗,給出相應的解決的方案,供廣大教學工作者和學生參考。
2 教學設計改進的具體描述
線性方程組直接解法的教學內容包含高斯消去法、矩陣的三角分解(LU分解、平方根法、改進平方根法、追趕法)、條件數(shù)與誤差分析。本文作者在搜集現(xiàn)有資料的基礎上,通過教學的反復實踐,對教學設計做了調整。
2.1 以三角分解為核心設計教學內容
重點參照了文獻[3]中的方式,以三角分解作為本章教學的出發(fā)點。國內大部分教材往往用很大的篇幅來描述高斯消去法,然后引出三角分解。在很多工科的教學大綱設計中因為學時的限制,甚至忽略三角分解的內容,只講高斯消去法。這樣教學效果受到很大限制。三角分解是本章內容的核心,也是目前主流的小型稠密方程組求解方法,很多軟件內置的算法基本都是以它為基礎。將其內容前置可以起到突出重點的作用,在學生對這部分內容有了認知之后,通過一個直觀的例子引出三角分解法跟高斯消去法之間的關系,可以讓學生由眼前一亮的感覺。從教學經(jīng)驗來看,這樣的編排能讓學生對這部分內容的認識更為清晰。具體教案的設計中我們從上下三角形矩陣對應的方程組出發(fā)讓學生看到系數(shù)矩陣的特殊形式可以給方程組的求解帶來方便。對于三角形矩陣對應的線性方程組,我們通過O(n2)量級的計算就可以實現(xiàn)方程組的求解。這也為后面講解用三角分解記錄高斯消去法的目的埋下伏筆。具體來說就是向學生展示
=
=
分別給出它們解的表達式
x1=xk=bk-aklxl/akk和xn=xk=bk-aklxl/akk
接下來,讓學生對它們的計算量進行簡單分析,引導學生算法設計中需要重點關注計算量問題。接下來,提出問題:一般線性方程組的矩陣是否能夠分解成上下兩個三角矩陣乘積的形式?接著直接拋出定理結論(LU分解的唯一性定理)。再引出第二個問題,在分解存在唯一的情況下,如何進行LU分解的計算?從矩陣乘法的概念出發(fā),以下圖為依據(jù),逐步的講解LU矩陣的計算過程。進一步分析數(shù)據(jù)的存儲問題,引出緊湊格式的LU分解,為后面的教學做好鋪墊。
A=LU=
在這一部分教學中一定要讓學生充分掌握緊湊格式的LU分解的計算流程,這樣他們才能在后面進一步學習平方根法、改進平方根法以及追趕法的內容時更清晰地認識到它們和一般矩陣LU分解之間的聯(lián)系。
2.2 以緊湊格式的LU分解為核心串聯(lián)幾種分解格式
本章教學內容中包含眾多的公式,尤其是改進平方根方法,在很多教材的描述中非常復雜,教師在教學過程中往往需要花費很大的工夫向學生說明算法的流程以及對應的公式的作用。比如我們觀察改進平方根最終的分解式:
A=LDLT=
很難像前面一般LU分解那樣清晰的說明它的計算流程。如果你去看很多教材上的公式描述,大部分教材中提到引入中間變量,然后給出計算公式:
di=aii-tikliktij=aij-tikljk j=1,2,…i-1lij= j=1,2,…i-1
這一部分筆者在之前的教學中經(jīng)??吹降氖菍W生一臉的困惑,不知所云,往往需要很長時間的描述才能將這一部分講清楚。但如果我們回歸到緊湊格式的三角分解方法,就可以給學生比較直觀的分析,圖1中展示了緊湊格式LU分解計算的基本過程。
學生通過一些簡單矩陣的具體操作,可以清晰地理解LU分解的具體流程,而在改進平方根方法的教學中可以通過以下的式子說明其與一般LU分解的關系,進一步回到緊湊格式的計算流程,可以明顯地看出,由于L=U0T,所以跟一般的LU分解的
U==DU0
計算相比,只需要按照原來的方式計算上三角,而下三角部分只需要對應的上三角元素除對角元素就可以得到,而不需要原來復雜的運算。這樣學生對改進平方根方法就有了直觀的認知。而追趕法的教學是類似的,其實際的計算過程跟原始的LU分解是沒有區(qū)別的,只是因為我們在具體的計算過程中發(fā)現(xiàn)找到的很多元素為零,所以簡化了計算過程。這樣幾種三角分解的計算過程就統(tǒng)一起來了。而學生也能直接感覺到后面兩種方式為什么降低了計算量。通過這樣整體的設計,原來的教學內容全部展示給學生了,只是側重點有所不同,在學生以及熟練掌握一般LU分解的基礎上再對其他三角分解格式進行描述一帶而過,基本上十幾分鐘的時間就可以完成改進平方根法和追趕法的基本教學,學生也可以更清晰的理解這一部分內容。
2.3 以具體實例描述高斯消去法與LU分解關系
這一部分大部分教材的設計基本上是通過初等變換的公式進行描述,這樣雖然也行得通,但學生往往需要較長的時間消化內容,尤其對于工科學生而言,抽象的推導會讓他們比較難以接受。因此可以在教學設計上做如下的改進。首先,通過一個簡單的例子將高斯消去法的過程進行展示,然后讓學生對例子中出現(xiàn)矩陣的LU分解進行計算,進一步思考高斯消去法與LU分解的關系是什么?從直觀上認識高斯消去法于LU分解的聯(lián)系。比如求解如下的線性方程組:
=
高斯消去法的過程為:第一步,第二個方程減去第一個方程的乘以2,然后第三個方程減去第一個方程乘以1/2,最后第四個方程減去第一個方程乘以-1,得到等價方程組:
=
第二步,第三個方程減去第二個方程乘以3,然后第四個方程減去第二個方程乘以-1/2,得到:
=
第三步,將第四個方程減去乘數(shù)2乘以第三個方程,得到與原始方程等價的上三角方程組:
=
現(xiàn)在如果我們將消元中使用的乘數(shù)按照相應的位置存儲到單位下三角矩陣,聯(lián)合最終得到的上三角矩陣組
L= U=
與原始方程組的系數(shù)矩陣直接進行三角分解對比,得出高斯消去法與LU分解等價性的結論。進一步,讓學生觀察高斯消去法的計算過程與LU分解的計算過程,指出兩者的計算是基本一致的,只是計算次序的不同,比如高斯消去過程第一步完成了所有其他行剪掉第一行倍數(shù)的運算,而LU分解中這些過程被調整了次序,我們首先把第二行減去第一行倍數(shù)的運算完成了(LU分解算上三角第二行的過程),后面每一次算上三角的過程中實際都包含了該對應行減去第一行倍數(shù)的運算,可以讓學生再次觀察緊湊格式的計算,很容易得到相應的結論。因此,高斯消去和LU分解的計算量也是基本相同的。再次提出問題,相比高斯消去法,LU分解有什么優(yōu)點?讓學生認識到LU分解完成了對高斯消去過程的記錄,這樣在改變右端項的時候,消去過程不需要再重新進行,可以提高效率。而且結構化的計算也更便于理論分析。
2.4 對現(xiàn)有教材中列主元方法的主要問題進行改進
選主元方法也是本章的教學重點內容。對這部分的學習有利于學生對計算方法設計重要性產生根本的認同。但目前國內大部分教材最終的落腳點在列選主元方法,而大部分教材中列主元選取的方式都是簡單采用選取矩陣列的絕對值最大元素,這與主流商業(yè)軟件中內置算法的過程是不一致的,而且學生也很容易舉出反例來說明這種方式的缺陷,例如,考察方程組
=
按照簡單的列選主元方式,上述方程組中兩個方程是不需要改變順序的,但如果?著比較小,會出現(xiàn)近似解為
x2=(2-?著-1)/(1-?著-1)≈1x1=(1-x2)?著-1≈0
的情況。此時是需要更換兩個方程的求解順序,也就是說在LU分解過程中是需要進行矩陣行的交換的。目前一般軟件采用的列選主元方法基本上是基于下面操作的:首先計算每一行的尺度量
si=|aij|=max{|ai1|,|ai2|,…|ain|},(1≤i≤n)
進一步,主元的選擇是考慮如下最大值
|a|/s=|ai1|/si,
這樣的操作就能夠解決前面提出的問題,而這種操作的講解并不復雜。因此,我們的教學設計上應該將目前主流軟件中采用的方式跟學生講清楚,其基本過程是要首先計算每一行的尺度量,也就是看元素的相對大小的,然后再進行列選主元,這樣就不會出問題了,在學時有限的情況下,也要對這種情況進行簡單說明,避免學生面對此類問題是產生困惑。
2.5 以LU分解的程序設計為主線鍛煉學生的動手能力
計算方法課程的一個主要目標是培養(yǎng)學生的基本程序設計能力,掌握算法設計的要點,能夠結合一些輔助軟件完成課程中的基本算法的實現(xiàn)。目前,由于學時的限制,很難抽出太多的時間專門開設相關實驗課。因此,如何在有限的時間內讓學生能夠得到程序設計的基本訓練也是這門課程教學的難點。本文作者結合教學實踐,在本章中以LU分解的Matlab設計作為課程授課的內容,然后將改進平方根方法的程序設計作為課下作業(yè),讓學生通過對程序的簡單改進一方面得到編程的基本訓練,還可以讓學生進一步理解改進平方根法相對一般LU分解的主要優(yōu)點。
3 結論及注記
本文對線性方程組直接解法教學設計中的一些基本問題進行了梳理,進一步給出了一些改進的方案。希望能夠起到拋磚引玉的作用,供廣大授課教師和學習者參考。另外,在本部分內容的教學中還有其他一些內容需要注意。
(1)一些概念性內容的補充與教學設計。這一章還有一部分教學內容是關于誤差和穩(wěn)定性討論的,里邊涉及了很多諸如范數(shù)、內積、條件數(shù)等數(shù)學概念。而從實際教學過程來看,由于目前學分等條件限制,工科大部分學生的線性代數(shù)學習中關于向量內積、矩陣特征值等概念都沒有很清楚地掌握,我們在授課過程中需要對這些內容做適當?shù)难a充教學。再有,就是對學生的學習要求以掌握概念的基本含義為主,不能也沒必要有更深層次的要求。
(2)輔助軟件的使用與教學目標的考慮。因為目前眾多的商業(yè)軟件對方程組的求解都有內置算法,在授課的過程中應該穿插講授這一部分內容,一方面可以讓學生借助這些軟件進行學習,也可以引導學生關注這門課程學習的主要任務,對一般工科學生而言,重要的是理解算法設計的一些基本要素,了解一類問題的解決方案中可能存在的問題,將來在具體應用的過程中,知道每類問題對應的解決方案以及每種方案的優(yōu)缺點,在出現(xiàn)一些情況時能夠知道大概的解決方向。
(3)注意Matlab軟件本身的一些特點。在使用Matlab輔助本章教學時需要注意Matlab軟件本身的特點:Matlab程序設計對循環(huán)語句敏感的問題始終沒有解決,如果編寫的程序中涉及循環(huán)語句尤其是多重循環(huán),其執(zhí)行效率會大幅度降低。因此,雖然有些算法看起來計算量更小,但因為編寫時需要大量循環(huán)會造成其在Matlab中執(zhí)行效率低的問題。學生在實現(xiàn)本章的幾個算法時,可能會因為這一問題使得一般LU分解、改進平方根以及追趕法之間的效率對比不明顯。
——————————
參考文獻:
〔1〕張璋.計算是第三種科學研究手段—訪計算數(shù)學家余德浩教授[N].科學時報,2002-12-18(3).
〔2〕李慶揚,王能超,易大義.數(shù)值分析(第五版)[M]. 北京:清華大學出版社,2008.
〔3〕Kincaid D,Cheney W. Numerical Analysis-Mathematics of Scientific Computing (Third Edition)[M]. 北京:機械工業(yè)出版社(影印版),2002.
〔4〕趙建平,楊曉梅.計算方法”課程混合式教學效果調查與改進建議[J].新課程研究,2021,6(17):64-65.
〔5〕楊云云.工科本科生計算方法課程教學心得[J].科教文匯,2021,19(10):65-66.