圖書信息
作 者:陳懷琛編著
出 版 社:電子工業出版社
出版時間: 2009-1-1
頁 數:276頁
開 本: 16開
I S B N :9787121072239
所屬分類: 圖書 >> 計算機/線性代數 >>MATLAB語言
定價:29.80元
內容簡介
本書第1版是根據“用軟體工具提高線性代數教學”的指導思想,參照美國1992—1997國家科學基金項目ATLAST的思路編寫成的線性代數補充教材,其目的是補充我國現有教材忽視套用的缺陷。它分為兩篇,第一篇介紹線性代數所用的軟體工具MATLAB語言,可以作為教材,也可以作為手冊使用;第二篇介紹線性代數實踐,包括三方面的內容:一是利用MATLAB的可視化功能,給線性代數中的概念賦予了幾何形象;二是給線性代數中煩瑣的計算提供了簡明的算法和程式;三是給出了各個工程和經濟領域中使用線性代數建模的大量實例。本書第2版在對第1版進行修訂的基礎上增加了第10章,擴展了在機械和電子專業後續課程中10多個較深的矩陣建模和求解的實例。
本書既可作為大學本科線性代數的配套教材,也可作為廣大理工和經管領域的教師、工程師、高年級本科生和研究生深入學習矩陣建模和掌握其計算機解法的參考讀物。
作者簡介
陳懷琛教授,1953年畢業於張家口軍事電信工程學院(現為西安電子科技大學),留校任教,先後在機械系、自動控制系和電子工程系講授過十多門課程。1980年,他赴美國費城賓夕法尼亞大學系統工程系做訪問學者進修:回國後,曾任西安電子科技大學副校長,主管科研和研究生教育工作,曾兼任中國自動化學會理事等職。
1995年以來,陳教授致力於推動大學課程和教學的計算機化,目的是使教師和學生都使用計算機取代計算器來解決各課程中的計算問題。他主持編寫了《控制系統CAD和MATLAB語言》、《數位訊號處理及其MATLAB實現》、《MATLAB及其在理工課程中的套用指南》、《MATLAB及其在電子信息課程中的套用》、《數位訊號處理教程——MATLAB釋義與實現》等一系列將MATLAB套用於大學課程的教材著作。
第2版序
2005年,作者根據十年來編書中使用矩陣的體會和美國線性代數教材改革的做法,編著了本書第1版。那時所寫的前言,主要反映國外的經驗,希望國內效仿。交稿以後,作者在西安電子科技大學申請了“用軟體工具提高線性代數教學水平”的教改基金項目,舉辦了一個由40多位教師參加的培訓班,組織幾位教師進行了連續三屆共800多名學生參加的教學改革試點,此項目後來又得到了教育部理工科處及數學教指委數學基礎課程分教指委的支持,並在2008年5月進行了鑑定。這第2版的序言就著重介紹近三年來我們教改的經歷和體會。
教改的基本指導原則是兩條:一是“需求牽引,面向套用”,根據對機械和電子專業後續課大量套用的分析,提出本課程的目標是能解6階以上的線性代數問題;二是“技術推動,引入機算”,借現代化手段之助,做到抽象與形象的結合,筆算與機算的結合,基礎課和專業課的結合。我們具體進行了以下幾方面的工作。
一、對課程的教學要求進行了全局的論證
四個現代化對教育現代化的要求首先表現在對專業課要求日益擴展和加深,再由專業課反映到基礎課,促進整個教學計畫的改革創新。要保證高的教學水平,必須經常對這條需求鏈進行論證,國外大學經常進行的abet論證就包括這個內容。遺憾的是,沒有見到國內對線性代數課程做過這樣的論證,似乎無人關心課程內容該如何滿足專業課的需要。我們在進行這項工作時,以量大面廣的機械、電子專業為對象,分析其後續課程在矩陣建模和計算方面的需求,以確定線性代數課程的任務。
根據十多年來把科學計算用於多門課程的編書實踐,我們找到了這兩個專業大學三年級前能用到線性方程的十多門課程:化學、高等數學、電路、理論力學、材料力學、計算方法、傳熱學、物理、計算機圖形學、信號與系統、數位訊號處理、機械振動、機器人學等(其用矩陣建模和計算的例題都已列入本版書中)。但在實際教材中,這些課程都基本上不用矩陣計算,原因在於目前線性代數所教的內容與後續課的需求脫節。
脫節的第一個表現是階次N(指方程數和變數數中的大者),化學方程配平的階次是反應式前後物質的總數,每邊三種物質,N就是6。靜力學中空間單物體平衡有6個方程,多一個物體,方程就加倍。電路圖的節點數就對應於方程數,可見大學課程需要的N至少是6以上,而工程實踐中將達到幾百和幾千。第二個表現是方程組類型,在物理實驗和各種測量學中,都使用冗餘數據提高精度,遇到的往往是超定方程,而現有課程多數不講超定方程。第三個表現是數域,交流電路、信號處理遇到的往往是複數代數方程。
根據以上的分析,教改中我們將課程的實踐目標定位為:在保持原有理論和實踐水平的基礎上,使學生學會高效地解6階以上、複數、超定線性代數問題。新舊教學要求的對比可以用圖來說明。圖中白色部分是現在大綱的覆蓋區,它一般只能解3階問題,求特徵值只到2階。灰色部分是因計算複雜而難以筆算的,黑色區則是根本沒教算法的,此外因為只限於實數問題,白色區又都縮小一半。新提出的目標是學生會解的問題能覆蓋全圖,包括實數和複數方程,階次可以擴展到幾十、幾百階,從而可與後續課程實現無縫銜接。
百分之八十以上的後續課程的題目都不會落入白色區域,會做本書題目的線性代數老師大概只是鳳毛麟角,所以我國線性代數的教育水平也可見一斑了。
二、關於如何引入計算軟體的問題
人們為什麼不願用矩陣解題呢?因為若沒有矩陣運算的工具,即使是低階的題目,其效率也低於代入法和消去法,人們寧可用中學的解題方法。至於N >4的高階複數問題,更是望洋興嘆,因此若不教工具,後續課程都不願意用矩陣。許多學生反映:他們學了線性代數在本科就沒有用過,只在考研時有用;這就根本無法體現線性代數在教學計畫中的基礎課地位,至於讓學生懂得線性代數在科學計算中的重要地位就更談不上了。
要達到解高階複數方程的目標,唯一的方法是用計算機,特別是要用最優秀的軟體工具。其實不僅是計算機幫助了線性代數,線性代數對科學計算的幫助也非常大。計算機比計算器的優越性主要不在於單次運算速度快,而在於它能夠對海量數據進行連續的運算處理,海量數據的最好組織方法便是矩陣。例如算一個1024點的傅立葉變換,就要用信號數組乘一個1024×1024的方陣,它包含100多萬個數據(見本書例10.9)。沒有矩陣的概念,這么大量的數據如何賦值、如何擺放都成問題。所以在學習矩陣之前很難充分發揮計算機的能力,而在學習線性代數的時候完成由計算器向計算機的轉變是最合適的選擇。
有一些老師對線性代數課使用計算機提出異議,其理由是學生用計算機算題,必然會放松筆算,不動腦筋,影響他們對基本概念的理解。有人甚至以禁止國小生用計算器作為論據,認為在大學一年級禁止用計算機是合理的。
持上述觀點的老師,大概沒有算過6階以上的套用題,不知道手工做幾百次乘法不許出錯是什麼滋味,更不知道CAD在現代化中的重要性。所以,怕學生“偷懶”而不教學生先進的知識,對教育和科學事業是極為有害的。歷史上“新技術讓人變懶”的論調不知重複了多少次,都不過證明了自己“懶”於跟進時代而已。在開放的信息社會中,我們應該提倡大學生從網上、從全世界去尋找解決任何問題的最新技術,怎么可以封堵知識呢?從一定意義上說,人如果不想“偷懶”,就沒有各種機器的發明和科技的進步。用科學方法來“偷懶”是要提倡的行為。大學如果不大力提倡學最新知識,那怎樣能培養“創新人才”呢?在讓學生掌握更多知識和計算技能的同時,為了避免他們囫圇吞棗,在出習題和提問的時候,要拐彎,要讓他們動腦筋,不能簡單抄襲,那是教學的藝術;但絕不能只教笨辦法,不教新技術。否則,還有什麼“三個面向”?這樣培養出的學生與已開發國家培養出的同檔次人才來比,不是成了無知的傻瓜嗎?
在我們的教學實踐中,共有800多名學生參加了教改試點,試點的學生普遍為剛進大學就能接觸到現代化工具而興高采烈,並因自己既會筆算、又會機算而自豪。不僅他們的實踐解題能力大大超越了普通班,而且他們的理論考試成績也高於普通班。我們倒沒有在理論教育上下特別的工夫,其提高的原因可能是:(1)大量的實例和形象化教學,提高了學生學習的積極性;(2)我們在課程中提倡筆算與機算相結合;(3)學生在計算上節省出的時間,有利於他們更多進行概念的思考。實踐證明,怕學生偷懶的擔心是多餘的。
我們覺得,教育部門確實要對學生從國小到大學的科學計算能力的全程培養做出規劃。防止學生上網成癮的最好方法不是封堵,而是引導他們用計算機來學習和算題。“計算機要從娃娃抓起!”從國際上看,大一學生學會用計算機算題,無論如何是不嫌早了。
三、關於如何培養學生抽象思維能力的問題
過去線性代數課程教學中,既缺乏套用實例,用數字運算又太煩瑣,因此只好把 “抽象思維能力”作為課程主要的培養目標,但我們不贊成這種提法。第一是目標欠妥,工科大一的新生,感性知識還很少,三維空間概念還有待建立,工程實際知識幾乎空白,根本沒有抽象思維的基礎;老師們放著圖中或書本中大量未解決的實際問題不學不教,卻要去教空洞的“抽象思維”,是本末倒置、有害無益的;第二是方法不對,只講理論,不聯繫實際,就能培養抽象思維能力嗎?根本不行!如果學生對自己熟悉的課程領域都不會用矩陣建模解題,怎么可能指望他們對更深奧的問題進行抽象思考呢?這是人類的思維規律啊!
不管老師還是學生,都要經過大量從感性上升到理性的訓練,才能培養抽象思維能力。所以我們在教課時要利用軟體工具的優勢,使抽象概念形象化;要大量介紹矩陣建模的實例,使學生體會到使用矩陣的優越性。事實上,見多了就會模仿。只有讓學生看到線性代數在自己熟悉的各門課程中都能建模,而且解題快捷,他們就能逐漸學會用矩陣建模了。
我在20世紀70年代開始遇到矩陣,但只用它推理,沒法用它算題;1995年接觸了MATLAB,發現它在解矩陣問題方面的特殊優勢,只要寫出矩陣表達式,問題都可快速得解。於是我在各門課程中都嘗試用矩陣建模和解題,寫出了涉及十多門課程的多本教材(見參考文獻[10]~[12]),並就逐漸地在前人沒做過的領域使用矩陣建模了。其中具有創新價值的基礎性工作是把信號流圖抽象為矩陣模型,並且用MATLAB求解。
目前國內外所有的信號與系統、信號處理及自動控制教材講信號流圖時,所用的解法都是1953年由梅森提出的以圖論為基礎的公式,既沒有證明、用起來又很煩瑣,更無法用計算機編程。掌握了MATLAB工具後,我就力求把信號流圖也表現為矩陣,並終於得到了成功(見參考文獻[8,9]),使得不管多複雜的連續和離散的信號流圖都可以方便地靠計算機求解。在本書中,它反映在8.6.3節,8.6.4節和10.11節中。這說明抽象思維既需要大量建模實踐為基礎,又要掌握先進的解題工具,才有動力;而且要靠長期的科研實踐,不是靠一門只講理論、不聯繫實際的數學課所能培養出來的。
四、理工結合和師資培訓問題
工科線性代數屬於工程數學,要把數學用於工程,教師必須既有堅實的數學基礎,又有必要的工程知識。線性代數的教改加進了數學軟體,教師必須要較好地掌握軟體的編程;此外,還要有教學經驗的積累。線性代數是一個量大面廣的課程,每年有100~200萬學生要上這門課,全國的線性代數教師可能多達1~2萬人。其中有的是數學專業出身,有的是工程專業出身,要適應筆算和機算兼顧的教學要求,是要下一番工夫才能勝任的。
有人提出,數學課必須由學數學出身的人教才能教好,這是很片面的。另外,有些學校的工程係為了給本系老師爭工作量,以為線性代數簡單、好教,不經輔導培訓就讓新上崗的工科教師來應付,這也是不對的。需求和套用是學科發展的導向,工程數學要更好地服務於套用,既需要出身於數學而對工程有興趣的老師,也需要出身於工程而對數學有興趣的教師。他們都可以對工科數學的教改作出較大貢獻。反之,出身於數學專業而對工程不感興趣的老師,或出身於工程專業而對數學不感興趣的老師,肯定教不好工科數學。根據我們的體會,工科線性代數教改中這兩類教師的結合非常重要,絕不應該有門戶之見,各自要學習對方的長處,克服自己的不足。我們新編的《工程線性代數(MATLAB版)》教材就是在工程專業和數學專業教師合作下完成的。
國外的經驗值得我們借鑑。美國關於線性代數的教改的五條LACSG Recommendations就是由數學專家和工程界的權威開會聯合提出的。美國大學的工程數學教學工作也有些就由工程系承擔,例如史丹福大學的機率論和數理統計課程。即使由數學系教授任教的工程數學,由於大學分專業晚,而且數學教授從事與工程結合的科研項目也多,他們的工程知識普遍比中國教師強得多,這可從其線性代數教材(見參考文獻[1]~[4])所具有豐富的工程背景看出。為了推動課程改革走向正確的方向,必須加強教師培訓和考核,不管出身如何,任課教師應該對工程和數學都有很大的興趣,願意把兩者更好地結合。要根據堅實的數學基礎、必要的工程知識,良好的編程能力和豐富的教學經驗四方面的條件對教師進行培訓、考核和遴選。
五、需要進一步探索的問題
為了便於檢驗教改的效果和應對考研,我們的改革是有約束條件的,那就是保持線性代數原有理論內容不變,只增加實踐內容和提高解題水平。這就必然要增加課時,增加的一個學分中,MATLAB占4學時,上機10機時(合5學時),線性代數實踐占6學時。如果不算MATLAB的9學時,線性代數多用了6學時,其中包括多講了超定方程解法和與計算有關的額外理論(如計算速度和精度、條件數、奇異值分解等)。
其實,線性代數理論的學時數確有減少的餘地。美國的LACSG Recommendations建議全課面向非數學專業,突出套用性;不再強調抽象思維,只對數學系另外開課加強抽象性。有些大學乾脆把工科線性代數改名為“矩陣套用”,這些措施都是為了減少原來的線性代數課過於抽象的 “數學味“。我認為,如果研究生統考的試題能同步改革,減少抽象性,突出套用性,那么理論部分減少6個學時應該是不困難的。當然這還有待於大家的探索,也需要教指委等教學指導部門和行政、考試部門的正確指導和干預。
六、教指委和本校專家對本項目的鑑定意見
2008年5月,由教育部高等學校數學與統計學教指委數學基礎課程分教學指導委員會和西安電子科技大學聯合組織了鑑定小組,對這個實施了多年的項目進行了驗收鑑定。鑑定意見指出:
“本項目從工程技術套用的視角,審視了線性代數課程教學內容和教學方法,將工程背景、套用實例和現代科學計算軟體融入了線性代數教學,符合國內外教學改革的方向和國際潮流,有助於實現“提高教育現代化水平”的目標,在國內線性代數課程教學中屬於首創。
課題組編寫的《線性代數實踐及MATLAB入門》和《工程線性代數(MATLAB版)》兩本教材,較好地體現了經典理論與現代計算手段相結合,將抽象概念形象化,使一些複雜的計算問題得以實現,激發了學生學習的興趣,培養了解決問題的能力,提高了教學質量,為後續相關課程中套用線性代數知識打下了很好的基礎。
本課題組的改革思想和取得的改革經驗具有示範意義,出版的教材和教學實踐在校內外產生了較大的影響,課題組舉辦的卓有成效的師資培訓班以及所提供的程式集、課件和其他教學資料,為本項目的推廣套用創造了良好的條件。
專家組高度評價了該項目組兩年多來線上性代數課程教學改革中所取得的顯著成果,一致認為:該項目改革理念先進,特色鮮明,具有創新性,是一項高水平的教學改革成果,具有很好的推廣價值。”
我們將更好地貫徹專家組的意見,為在全國推廣這一成果而努力,對本書的修訂就是措施之一,也希望全國有更多的大學和老師參與。美國在全國推廣“用軟體工具提高線性代數教學”的項目用了六年的時間,所以不下大的力氣,我國是很難在同樣時間內做到這一點的。而線性代數課中是否學會了軟體工具,會直接影響幾乎所有後續課程現代化的進程,當然也會影響我國教育現代化的進程。
對已學過線性代數理論的人員,包括高年級學生、教師和工程技術人員等,進行在崗培訓,補上線性代數實踐這一課也是一個很重要的方面,不然他們就沒法解決工程實際問題。為了更好地面向這些讀者,在本書的第2版中我們增加了第10章,增補了一些機械和電子專業後續課中較深的線性代數套用實例,低年級大學生則可不學這一章。
七、出版說明
由於把計算機與線性代數相結合,本書在印刷排版上出現了一些新問題,需要把兩者更好地融合起來。我們作了如下處理:
(1)在敘述文中,全部按原有線性代數書的排版規則,即使遇到MATLAB函式或語句,矩陣仍用黑斜體,下標則仍用小號字,如[p,lamda]=eig(A3)。
(2)書中所有人機互動的部分等用白體。即在輸入計算機的MATLAB完整程式段或程式行中全用正白體,如A1=A3*A4,因為計算機不接受黑斜體矩陣,下標也不能用小號字。這與我們提供的下載程式集一致。程式運行後計算機顯示的結果也全用正白體。如:
輸入 [p,lamda]=eig(A3)
得到
(3)除了說明矩陣階數Am×n之外,乘號運算符不用×,統一採用*,或完全省略,如A*B或AB。
陳懷琛 2008年7月於美國矽谷
第1版序
陳懷琛與龔傑民兩位教授所編寫的《線性代數實踐與MATLAB入門》由科學計算軟體MATLAB入門與線性代數實踐兩篇共九章所組成。書末有一個附錄,對美國國家科學基金項目——“用軟體工具增強線性代數教學(ATLAST)”進行了簡單的介紹。
線性代數是圍繞求解線性方程組而發展起來的一門學問,它的基本概念有向量、行列式、矩陣、線性變換、特徵值和線性空間等,解析幾何是線性方程組的幾何背景。隨著線性代數的發展,人們發現,使用它的基本概念,許多學科和許多數學分支中的問題有了幾何意義,或者幾何意義更加豐富凸顯,不少深入而複雜的題目可以用簡潔的形式來表述;還有,藉助於符號的可比性,常常能夠啟發人們發現有效的求解方法,即算法。在歷史上,人們曾經研究過這樣一個題目:如果只用直尺,不用圓規,能夠解決哪些作圖題?今天,在這裡,也構想一個問題:如果不準使用線性代數的概念和理論,許多學科將會變得如何的支離破碎,達不到今日的深度。所以我們說不僅理工科專業,甚至大學的幾乎所有專業,線性代數是一門必修課,是一門基礎課。
線性代數由理論和計算兩部分所組成。
20世紀50年代我國在理工科各專業開設線性代數課程時,以介紹理論部分為主。那時,人們已經認識到,線性代數有廣泛的套用,但教材中往往限於講授在二次型中的套用。這是因為當時計算機和編制相關程式的工作離我國的實際情況甚遠。雖然已經認識到計算機能夠快速高效地求解線性代數中的各種數字題目,但在教材中只能淡淡地指出這個方向而已。
改革開放以來,雖然提倡直接使用國外的教材(也就是說,採用國外的教學大綱),注意計算機的套用,提倡開設使用科學計算軟體的數學實驗課程,開設某些科學計算軟體的師資培訓班等,但是除了使用國外教材外,還遠沒有改變各個課程,線性代數課依然是一片“寧靜的沃土”。
現在的科學計算軟體已經發展到使用非常方便、功能異常強大,一經使用便令人驚嘆不已的地步,科學計算軟體已經成為科學工作者的高級計算器。實驗室和編寫程式的良好的環境,加上我國經濟迅速發展,計算機廣泛普及,讓大學各個專業的學生全都學會使用這些軟體應該是刻不容緩的事情。
本書介紹了大量的實際套用題目,把科學計算軟體和線性代數密切結合,充分利用軟體的可視化功能產生的圖形和動畫補充了現行教材的不足。它明顯地接受了美國ATLAST計畫所產生的先進成果影響,是一本有特色的配套教材;因此,它的出版無疑是非常及時的。值得指出的是,比照美國的實踐,我國原有的教材內容和教學水平應該說是落後了十幾年。
正在或者已經學過線性代數的人員(大學生,研究生,各方工程技術人員),定能從學習本書而加深理解線性代數和軟體MATLAB這兩門學問的知識以及它們之間聯繫的重要性,並從大量套用實際問題拓寬思路。本書每章末有足夠練習題,讀者可以從上機做實驗中培養技能和樂趣,提高學習線性代數的積極性。此外,本書還可成為使用軟體MATLAB解決有關線性代數問題的人員的上機參考手冊。
我贊成線性代數理論和實踐兩部分由同一個教師施教,並相信講授線性代數的教師對於本書中的各個方面的內容,例如令人深思的學術觀點,有趣的歷史資料,眾多有用的套用題,附錄中介紹的美國學者的敬業精神、團隊精神和工作經驗等,都會產生極大的興趣。
使用本書時可能發生的困難有兩點:
一是在增加不多的學時中,如何組織這個實驗任務。按本書參考文獻[1],美國實施這門課程總共用35學時(他們也喊學時不夠),可見理論和實際的結合可能產生事半功倍的效果,這當然有一個探索的過程。
二是少數教師可能對使用軟體MATLAB進行教學感到困難。
我在過去二十多年的教學生涯中,曾經幾次隨班聽課,甚至隨班參加考試過高級算法語言Pascal、C。雖然多次企盼自己能夠編寫某些程式,可是事情就那么困難,幾個回合敗下陣來,再加工作忙碌,無奈放棄,而後畏難情緒遲遲不能消去。近幾年,為科研工作所迫,硬著頭皮,熬!摸索三個月,算是開始能為我編製程序服務了。
科學計算軟體和數學的關係非常密切。有人說大同小異。殊不知,許多時候,所編程式之所以通不過,錯誤就出在那些小異上。
畢竟是要進入一個嶄新的學科,我們當然要認真學習;它既是一門科學,當然一定能夠學會,而且那么多的人已經學會了。
今天的科學計算軟體和算法語言已經大不一樣了。打一個不那么恰當的比喻:改革開放初期,曾經流行過一本英語教材,叫《英語會話900句》。它分成若干個部分,包含各個場合所常用的句子,問路、學習、買東西,還有開會等。現在流行的科學計算軟體也是這么一種模式,它們都有自己的“900句”。由若干個函式館所組成,分別為各個任務提供種種函式和命令。當您拿起一個軟體,首先按照教材中的例題,邊讀邊在計算機上試算一些最基本的語句,以初步了解該軟體的功能。當您學習線性代數時,無需全面熟悉其他各個分支的語句。隨著學習的進程,每次學習四、五個語句,就能讓計算機開始為您服務。當您掌握若干個語句之後,發現某些規律,學習不僅更加容易,而且延展到別的問題往往也能沿著同一思路得到解決。當您找不到現成的語句解決所提的題目,則需要組合若干基本語句來完成。為了我們的教學工作,也為了今後自身的科研工作,花一定時間來逐步掌握一兩個科學計算軟體,讓它們成為自己的一個終生的學術助手和夥伴,無論如何都是值得的。我也是一名數學老師,即便在“熬”的日子裡,也不斷地從中得到許多的樂趣,現在,在我寫書,算題,科研等工作的過程中,面對螢幕顯示的結果,不時自言自語地驚嘆說:“太好了!”深深感激科學計算軟體給我的幫助。
本書作者陳懷琛教授是計算機科學、機械、電子和控制等學科的專家。具有豐富的教學實踐經驗和教學管理經驗,對我國21世紀大學工科專業學生如何培養的問題,有許多很有價值的見解。作者對當前國內外的工科線性代數課程的施教情況十分關心。龔傑民教授是軟體專家,二十年前就出版了關於C語言的教材。他們不僅親自執筆編寫這本教材,還正面提出了具體改革的見解。聽說西安電子科技大學領導已經決定教改立項,將由陳教授親自負責使用本書書稿,先對該校全體線性代數教師組織培訓研討班,再點面結合地對部分一年級大學生用本教材進行施教,有系統地開展試驗,實在是一件大好的事情。
祝這項工作成功!
秦裕瑗
2005年 中秋節於武漢科技大學
前 言
線性代數的重要性現在比過去任何時候都更加令人刮目相看。在20世紀後半期,線性代數的套用繼續擴大到了越來越多的新領域。它在數學課程中的角色已經上升到可與微積分相匹敵。線性代數的這種發展首先是由於人們所研究問題的規模愈來愈大,愈來愈複雜,牽涉的變數成百上千,這樣複雜的問題,目前只能把變數之間的關係簡化為線性才有可能求解。所以大規模的線性代數問題就成為熱門的數學工具。除了上述的“需求牽引”之外,線性代數發展的另一個動力是“技術推動”,那就是計算機技術的推動。幾十年來計算機硬軟體的飛速發展給線性代數的研究和教學提供了前所未有的空間和機遇,線性代數課程教學上的許多新面貌、新方法都來自於計算機技術的新發展。
計算機如何推動了線性代數的套用
線性代數是一門套用性很強,但又在理論上進行了高度抽象的數學學科。一方面,中學生就學過了二元一次代數方程的解法,代入法和消去法大概每個人都會記憶一輩子,這就是最簡單的線性代數。當把方程的階次提高到了三元一次以上時,它不但要求較高級的抽象思維能力,而且也要求用十分煩瑣的計算步驟才能解決問題。對於數學家,他們重視前者,這無可厚非;但對於大多數工科學生,他們更需要的是能套用它的理論,指導完成實際的計算。事實上,線性代數的那種單調、機械、枯燥的運算,只是由於計算機的出現才賦予了在套用方面的生命力。
舉一個典型的例子,Wassily Leontief教授把美國的經濟用500個變數的500個線性方程來描述。1949年夏,由於當時大學的計算機(Mark II)能力所限,Leontief把系統簡化為42個變數的42個線性方程,編程並用穿孔卡輸入程式和數據就用了幾個月,最後計算機運行了56小時才求出了解。當Leontief在1973年成為諾貝爾經濟學獎得主時,這項工作以“第一個有實際意義的利用計算機求解大規模數學模型”列為其得獎的理由之一。他的成就和獲獎成為各國科學界用線性代數建立工程和經濟模型的巨大動力,推動了這門科學的迅速發展。可以看出,離開了計算機,線性代數在工程中就很難有用武之地。這也反映在美國的大學工科教育中,表現出對這門課的日益重視;課堂上固然著重講線性代數理論,但同時給學生加上大作業或課程設計等實踐環節。大學中的大型計算機很大程度上也支持了這門課的實踐環節,使用的軟體主要是FORTRAN或COBOL語言。線性代數的教學不能離開計算機是美國工科教育界的共識。
20世紀80年代,出現了個人計算機並迅速普及。新的硬體也帶動了新的軟體,出現了新穎的科學計算語言,也稱為數學軟體,因為它具有高效、可視化和推理能力等特點,故在大學教育和科學研究中,迅速地取代了FORTRAN和BASIC語言。這類軟體中商品化的有MATLAB、MATHEMATICA、MathCAD、MAPLE等,它們的功能大同小異,但各有所長。目前在美國大學工科中,流行最廣的是MATLAB語言。
MATLAB是“矩陣實驗室”(Matrix Laboratory)的縮寫,它是一種以矩陣運算為基礎的互動式程式語言,當然它特別適合於線性代數,並能更廣泛地適應科學和工程計算及繪圖的需求。與其他計算機語言相比,MATLAB的特點是簡捷和智慧型化,適應科技專業人員的思維方式和書寫習慣,使得編程和調試效率大大提高。它用解釋方式工作,鍵入程式立即得出結果,人機互動性能好,易於調試並為科技人員所樂於接受。特別是它可適應多種平台,並且隨計算機硬軟體的更新及時升級,因此MATLAB語言在國外的大學工學院中,特別是數值計算用得最頻繁的電子信息類學科中,已成為每個學生必須掌握的工具。它大大提高了課程教學、解題作業、分析研究的效率。我們學習掌握MATLAB,不僅可以直接幫助學習線性代數,而且也可以說是在科學計算工具上與國際接軌。
國內外線性代數教學的差距
從美國線上性代數教學中使用計算機的歷史可以看出,個人計算機和科學計算軟體的普及迅速推動了這門課程的教學方法改善,使得計算機的使用不限於大作業,也可以用於日常課程教學。1990年,美國成立了線性代數課程研究組(Linear Algebra Curiculum Study Group-LACSG),然後,在國家科學基金會(NSF)資助下組織了數學和工科專家的一次會議,提出了線性代數課程改革的五點建議,簡稱為LACSG Recommendations(見參考文獻[3]),其要點是:(1)首先要滿足非數學專業面向套用的需要;(2)要以矩陣運算為基礎;(3)要從學生的水平和需求出發;(4)要採用最新的軟體工具;(5)對想要數學學位的學生應另開相關課程以提高其抽象性。1992年美國國家科學基金會(NSF)資助了一個ATLAST計畫,ATLAST是augmentThe Teaching of Linear Algebra through the Use of Software Tools(用軟體工具增強線性代數教學)的縮寫。該計畫在1992年到1997年六個暑期組織了十八個教師研討班。共有來自各大學的425名教師參加。參加者接受了使用MATLAB軟體包的訓練,詳情可參閱附錄B。
在使用MATLAB方面,從他們的教材發展來看,在1995年算起的頭幾年,主要反映在採用MATLAB的習題並介紹MATLAB入門,見參考文獻[7]~[9]。到近十年就開始把MATLAB摻合到線性代數的各章中去,主要是對有些理論提供計算機的演示和驗證,反映在參考文獻[1]~[5]中。當然線性代數的整個理論體系,並不受使用計算機而有所改變。
在我國,線性代數課在理工科本科教學的加強開始於改革開放以後,是學習國外先進經驗的結晶。當時大學中還沒有計算機,雖然利用世行貸款,花了不少錢買了一些大型計算機,但線性代數課並沒有用。因為課程內容不作改革,有計算機也用不成,當前的情況就足以為證。如果說以前是出於無奈,那么在個人計算機已經如此普及的情況下,還不用計算機,那就是固步自封了。所以線性代數課中不談計算機、教線性代數的老師幾乎不使用計算機,已經成為我國線性代數教育界與已開發國家的明顯差距。於是我國的線性代數課程出現了不盡如人意的狀況——理論抽象愈來愈深,套用和實際計算很少結合,它成了一門學生感到抽象、冗繁而枯燥的課程。
由於缺乏感性的、實踐的基礎和套用的推動,後續課程又往往怕煩而避開矩陣方程,教出來的學生當然是理論上害怕矩陣、實踐中不會用矩陣算題的。可以做一個測試:在學生學完線性代數課以後,讓他們解一個四元一次代數方程,看他們用什麼工具解?要多少時間?做對的有多少比例?按現在的教材和教法,絕大多數學生解這個題用的完全是中學裡學的方法:用計算器一個數一個數地算乘法和加法,誰也不會用線性代數去解。而且計算的效率和正確率極低。要知道,許多後續課程都需要用線性代數,比這個四元一次方程要複雜得多,解這么簡單的題目還這樣的少慢差費,大學工科後續課程怎么能用線性代數呢?又怎么談得上為工科教育打好數學基礎呢?
如果在課程中增加4~6學時的實踐內容,情況就會完全不同。像上面的測試題,用計算機解,一分鐘就可解決問題,正確率100%。對複雜的問題,提高效率更為明顯。通過實踐不僅方便了計算,而且對理論和概念的理解也會加深,並節省很多時間。本來,線性代數的理論和實踐是應該融合併在一起實施的,因為這門課的特點就應該理論與實際相結合。不過現在在我國實現這個任務似乎還相當艱巨,首先要從上到下達成共識,然後要修改教學計畫,接著還要編寫新的教材和培養大批合格的師資。
本書的內容安排
在我國,每年學習線性代數課程的大學生大概有100萬人之多,教這門課的老師應該有上萬人。要推動“用計算機提高線性代數教學水平”的事業,不是一兩年就能做到的,美國還花了六年時間呢!現在我們的線性代數教學水平比美國已經落後了十多年,所以要奮起直追。我的建議是分兩步走。
第一步是單獨開設“線性代數實踐課”,與線性代數同步實施。其好處是暫時不影響原來教師們的備課和教材,並且讓少量的實踐領頭老師能集中精力,給更多的學生講課,也培訓現有的老師;這些老師也同時承擔實踐課的輔導任務,這有利於提高他們的計算機使用水平,為以後全面承擔這門課程創造條件。第二步是把實踐課與理論課合併實施,除了師資外,最主要的是編一本把理論與實踐緊密結合的好教材。
在我們的方案中,實踐課的計畫是一個學分,按16學時計算。考慮到我國線性代數課程大都放在大學一年級,此前大一新生未必學過MATLAB,而且以線性代數作為學習MATLAB的切入點有很大的好處,所以把線性代數實踐與MATLAB入門合成一門課實施比較合適。初步安排講課約10~12學時,其中介紹MATLAB語言入門約4學時,講解線性代數實踐原理和程式6~8學時,上機時間預計10~12小時。我們根據這樣一個思路編寫了這本教材。這本書雖然有實踐的部分,但它是從實際套用的角度對線性代數的概念進行了整體的剖析和歸納,並與工程實踐有大量的聯繫,其範圍超出了一般的數學實驗,故取名為“線性代數實踐”。
本教材中MATLAB入門部分基本上就是參考文獻[4]、[5]兩本書中的語言篇,對於線性代數實踐而言,主要用到的是第2章和第4章4.2節;雖然書的篇幅多了一些,但這樣可以維持MATLAB基本函式的完整性,使這本書兼有MATLAB的手冊功能,同時也便於利用本書作者的一套四小時講課光碟,讓老師不必花時間為MATLAB備課。實驗課安排的時間最好線上性代數開課一個月以後,這樣銜接比較好。這門課程可促進學生用計算機的經常化,故不要速戰速決,以拉開到八周以上為好。
線性代數部分則是參考國外2000年後新出版的教材(見參考文獻[1]~[4])和2003年出版的ATLAST Manual(見參考文獻[7])等資料編寫的,其中也利用了作者在多本著作中用矩陣建模和解決難題的實例(見參考文獻[10]~[12])。為了儘量加強與線性代數理論部分的銜接,能幫助學生既避免煩瑣刻板的四則運算,又能真正體會到線性代數中的推理思路,我們設計了一些簡單的MATLAB子程式,來完成高斯消元、行階梯簡化、行交換等任務。為了加強線性代數的幾何形象教學,我們又設計了一些快速簡便繪製直線和平面圖形的函式;另外,還採用了ATLAST Manual提供的某些矩陣生成子程式和演示程式。
因為全國各大學的差別很大,例如專業不同、上課的學期不同(大一上、大一下、大二上都有),造成學生的基礎不同,所以書中的實例就不得不取寬一些,並儘量避開微積分。實例並不需要全講,有的可留給後續課程中讓學生自學,書中的小字部分在初學時也可跳過。我們認為,工科大學生能用計算機和MATLAB解線性代數方程的問題,那么這門實踐課的主要目標可以說基本達到了。
本書由陳懷琛負責總的策劃與編寫,龔傑民擔任國外教材資料的翻譯及部分習題的選編。由於我們還沒見過同類書名的書籍和教材,寫書時很難找到可以直接參考的體系,這個新生事物,還缺乏實踐經驗,再加上要趕上2005級部分新生進行試點,編寫時間緊迫。我們的想法和做法,肯定有很多不當之處,歡迎批評指正。更希望各方面的專家和讀者通過自己的教學實踐向我們提出改進的建議。我們的電子郵件地址為致謝
本書榮幸地由武漢科技大學秦裕瑗教授審閱,作為一位在歐美7國14校進行過講學、有多部專著的我國數學界前輩,他不但博學,而且其嚴肅認真的治學態度和不斷接受新事物的進取精神給我們以很大的激勵。在年逾80之際,他仍在孜孜不倦地學習科學計算軟體(Mathematica和MATLAB)並把它用到自己的著作《運籌學簡明教程》中,實在令人肅然起敬。與此相反,我們看到有些年紀不過四五十歲的中年教師,已經不想學計算機了。在這裡,我們特別希望廣大的線性代數課老師,能以秦教授為榜樣,把自己用科學計算語言武裝起來,儘快把我國的線性代數課程用計算機武裝起來,創造一個嶄新的教學局面。
作 者
2005-8-28於西安電子科技大學
目 錄
第一篇 MATLAB語言入門
第1章 MATLAB語言概述 2
1.1 MATLAB語言的發展 2
1.2 MATLAB語言的特點 3
1.3 MATLAB的工作環境 4
1.3.1 命令窗 4
1.3.2 圖形窗 6
1.3.3 文本編輯窗 8
1.4 演示程式 8
第2章 基本語法 10
2.1 變數及其賦值 10
2.1.1 標識符與數 10
2.1.2 矩陣及其元素的賦值 11
2.1.3 複數 12
2.1.4 變數檢查 13
2.1.5 基本賦值矩陣 15
2.2 矩陣的初等運算 16
2.2.1 矩陣的加減乘法 16
2.2.2 矩陣除法及線性方程組的解 18
2.2.3 矩陣的乘方和冪次函式 20
2.2.4 矩陣結構形式的提取與變換 21
2.3 元素群運算 22
2.3.1 數組及其賦值 22
2.3.2 元素群的四則運算和冪次運算23
2.3.3 元素群的函式 24
2.4 邏輯判斷及流程控制 25
2.4.1 關係運算 25
2.4.2 邏輯運算 27
2.4.3 流程控制語句 28
2.5 基本繪圖方法 32
2.5.1 直角坐標中的兩維曲線 32
2.5.2 線型、點型和顏色 33
2.5.3 多條曲線的繪製 34
2.5.4 螢幕控制和其他二維繪圖 35
2.5.5 三維曲線和曲面 40
2.5.6 特殊圖形和動畫 42
2.5.7 彩色、光照和圖像 44
2.5.8 低層圖形螢幕控制功能 46
2.6M檔案及程式調試 48
2.6.1 主程式檔案 49
2.6.2 人機互動命令 50
2.6.3 函式檔案 51
2.6.4 檔案編輯器及程式調試 53
第3章 MATLAB的開發環境和工具 54
3.1 MATLAB與其他軟體的接口關係 54
3.1.1 與磁碟作業系統的接口關係 54
3.1.2 與文字處理系統winword的關係 57
3.1.3 圖形檔案的轉儲 58
3.1.4 低層輸入輸出函式館 58
3.1.5 與C和FORTRAN子程式的動態連結 60
3.2 MATLAB的檔案管理系統 60
3.2.1 安裝後的MATLAB檔案管理系統 60
3.2.2 MATLAB自身的用戶檔案格式 61
3.2.3 檔案管理和搜尋路徑 61
3.2.4 與目錄和搜尋有關的命令 62
3.2.5 搜尋順序 63
3.3 MATLAB 6.x的開發環境 63
3.3.1 桌面系統的內容 63
3.3.2 桌面命令選單簡介 64
3.3.3 MATLAB 6.x的用戶界面 65
第4章 MATLAB的其他函式館 67
4.1 數據分析函式館(datafun函式館) 67
4.1.1 基本的數據分析 67
4.1.2 用於場論的數據分析函式 69
4.1.3 用於隨機數據分析的函式 69
4.1.4 用於相關分析和傅立葉分析的函式 70
4.2 矩陣的分解與變換(matfun函式館) 72
4.2.1 線性方程組的係數矩陣 72
4.2.2 矩陣的分解 73
4.2.3 矩陣的特徵值分析 75
4.2.4 特殊矩陣庫(specmat) 75
4.3 多項式函式館(polyfun) 76
4.3.1 多項式的四則運算 77
4.3.2 多項式求導、求根和求值 78
4.3.3 多項式擬合 79
4.3.4 多項式插值 80
4.3.5 線性微分方程的解(residue) 82
4.4 函式功能和數值積分函式館(funfun) 83
4.4.1 函式功能和數值積分函式館的主要子程式 83
4.4.2 非線性函式的分析 84
4.4.3 任意函式的數值積分 86
4.5 字元串函式館(strfun) 88
4.5.1 字元串的賦值 89
4.5.2 字元串語句的執行 89
4.5.3 字元串輸入輸出 90
4.6 稀疏矩陣函式庫(sparfun) 90
4.7 圖形界面函式館(guitools) 92
4.8 數據類型函式館(datatypes) 93
4.8.1 結構陣列 94
4.8.2 單元陣列 95
4.8.3 類和對象 96
4.9 符號數學(Symbolic Math)工具箱簡介 99
4.9.1 Symbolic工具箱的主要功能 99
4.9.2 符號數學式的基本表示方法 99
4.10 習題 101
第二篇 線性代數實踐
第5章 預備知識 106
5.1 實驗線上性代數中的重要性 106
5.2 實驗部分的內容組成 108
5.3 直線和平面的快速繪製程式 109
5.4 隨機整數矩陣的生成程式 112
5.5 特殊矩陣的生成程式 113
5.6 線性代數建模與套用概述 113
5.7 習題 115
第6章 用行階梯法解線性方程 118
6.1 線性方程組的MATLAB表示方法 118
6.2 初等行變換和高斯消元子程式 121
6.3 行階梯形式的生成 123
6.4 MATLAB中的行階梯生成函式126
6.5 用行階梯法解欠定方程組 127
6.6 套用實例 130
6.6.1 平板穩態溫度的計算 130
6.6.2 化學方程的配平 131
6.6.3 電阻電路的計算 133
6.6.4 交通流量的分析 134
6.7 習題 136
第7章 用矩陣運算法解線性方程 138
7.1 矩陣運算規則的MATLAB實現 138
7.2 初等變換乘子矩陣的生成 142
7.3 行列式的定義和計算 145
7.4 矩陣的秩和矩陣求逆148
7.5 用矩陣“除法”解線性方程 150
7.6 套用實例 151
7.6.1 網路的矩陣分割和連線 151
7.6.2 用逆陣進行保密編解碼 152
7.6.3 減肥配方的實現 153
7.6.4 彈性梁的柔度矩陣 154
7.6.5 網路和圖 156
7.7 習題 158
第8章 用向量空間解線性方程組 161
8.1 向量和向量空間 161
8.2 向量空間和基向量164
8.3 向量的內積和正交性 167
8.4 齊次解空間 171
8.5 超定方程的解——最小二乘問題 173
8.6 套用實例 177
8.6.1 價格平衡模型 177
8.6.2 巨觀經濟模型 179
8.6.3 信號流圖模型 180
8.6.4 數字濾波器系統函式 182
8.7 習題 184
第9章 線性變換及其特徵 187
9.1 平面上線性變換的幾何意義 187
9.2 二維矩陣特徵值的幾何意義 189
9.3 三維空間中線性變換的幾何意義 193
9.4基變換與坐標變換 197
9.5 特徵值和特徵向量的MATLAB求法 198
9.6 對稱矩陣對角化與二次型主軸 201
9.7 奇異值分解簡介 206
9.8 套用實例 209
9.8.1 人口遷徙模型 209
9.8.2 產品成本的計算 211
9.8.3 情報檢索模型 212
9.9 習題 214
第10章 後續課矩陣建模增補 216
10.1 多項式插值問題 216
10.2 坐標測量儀測定中的擬合問題 217
10.3 天體軌道測量的曲線擬合問題 219
10.4 靜力學問題 221
10.5 材料力學的靜不定問題222
10.6 二自由度機械振動的模態分析 224
10.7 交流穩態電路的複數矩陣解 226
10.8 線性系統零輸入回響的計算 227
10.9 計算頻譜用的DFT矩陣 228
10.10 最最佳化有限衝激回響(FIR)數字濾波器設計 230
10.11 信號流圖的矩陣建模和計算機求解 232
10.12 自動控制系統的矩陣建模 235
結束語 238
附錄A 關於MATLAB基本部分函式索引的說明 240
附錄B 有關美國“用軟體工具增強線性代數教學”計畫的資料 241
參考文獻 251