本版《 MATLAB數(shù)值計算》是經(jīng) MATLAB、數(shù)值分析和科學計算之父 Cleve Moler本人正式授權(quán)的 Numerical Computing with MATLAB初譯本的修訂版。
譯本全面繼承原著編寫宗旨和闡述內(nèi)容。全書共 11章,內(nèi)容涉及:MATLAB入門、線性方程組、插值、零點和根、最小二乘、定積分、常微分方程、傅立葉分析、隨機數(shù)、特征值和奇異值、偏微分方程。該書不以深奧的數(shù)值分析理論為重筆,而以易于理解的數(shù)學思維和便于掌握的數(shù)學計算編程邏輯為要旨。該書摒棄以往數(shù)值分析教材中常見的程式性定理、定理證明、收斂性理論和冗長公式推演。該書數(shù)值算法原理的表述,言簡意賅、層次豐富、見解獨到、權(quán)威精辟。
譯本附錄 A是為幫助 MATLAB初學者理解本書代碼編寫的;附錄 B可供讀者從 MATLAB命令代碼查詢書中敘述;附錄 C可供讀者由專業(yè)中文詞匯檢索書中內(nèi)容。配套于英文原版的 M文件由 Cleve Moler本人精心編寫,且被其本人引以為傲。讀者通過這些文件的運行、 GUI界面的操作以及文件代碼的研讀,可以更深入地理解數(shù)值計算編程之精粹,更通透地掌握交互操作編程之要領(lǐng)。
該版修訂內(nèi)容有:一,為適配 MATLAB R2022a,對該書所涉 MATLAB代碼進行了全面的審核、運行和修正;二,為充分適應(yīng) MATLAB自 R2016起提供的實時編輯器綜合工作環(huán)境,為本書各章節(jié)新編了適配于 MATLAB R2022a的 66個. mlx實時腳本文件。它們不僅匯集了對應(yīng)節(jié)次的全部可運行代碼,而且可以確保那些代碼無障礙地運行。這些實時腳本也為教師、科技人員、學生制作可視化數(shù)字演講稿、科研報告、學習筆記提供了結(jié)構(gòu)性框架。
本書英文原版是 Cleve Moler專為高校研究生、本科生、理工科技人員編寫的數(shù)值計算與 MATLAB結(jié)合的一體性教材。初譯本自 2015年以來的發(fā)行記錄也表明,本書適合用作高校教材,也是廣大科技人員自學、精讀或隨時查閱的最可信賴的參考書。
修訂說明
《MATLAB數(shù)值計算》作為Numerical Computing with MATLAB的中譯本自 2015年公開發(fā)行 8年以來,受到廣大讀者的歡迎。他們不僅對此書數(shù)值計算之嚴謹和MATLAB編程之靈巧給予了高度的贊譽和肯定,同時也從自身教學實踐或自身學習體驗中對此書提出了若干建議。此番譯本修訂就為積極響應(yīng)讀者的建議并盡力改善讀者的用書感受。
多年來MATLAB版本升級一方面導致配套于初譯本的M文件出錯報警逐年遞增,另一方面新版MATLAB又新增了集文字、公式、圖片、代碼、輸出結(jié)果于一體的 MLX實時腳本應(yīng)用平臺。正是基于以上原因,譯者決計對初譯本正文、附錄及其相應(yīng)文件進行修訂。
本次修訂以MATLAB R2022a為平臺,修改涉及以下幾個方面:
①為適應(yīng) MATLAB的版本升級,刪除或更換了初譯本中那些已經(jīng)或即將被廢棄的語句代碼,適配了新的語句、代碼、運算結(jié)果以及相應(yīng)的文字解說,以確保代碼運行的順暢,及與書本敘文的一致。
②為適應(yīng)MATLAB的版本升級,上機檢驗了配套于初譯本正文的全部 M文件,并進行了適配性修改。
③為響應(yīng)讀者建議,調(diào)整了若干節(jié)中某些段落的次序,使之更適宜自學或查閱。
④為滿足讀者熟悉和運用 GUI(圖形用戶界面)的熱切需求,凡譯本正文中述及圖形用戶界面處,均采用完整的界面截圖替換了原先的純坐標軸圖。
⑤為滿足教師學者講演、學生筆記需要,也為讀者無障礙實踐譯本代碼,本書譯者在 MATLAB R2022a平臺上新編了與此譯本各章節(jié)配套的66個MLX文件。若在 MATLAB實時編輯器中打開 MLX文件,既可以看到已編寫好的或您現(xiàn)場修改的運行代碼,又可以實時地看到相應(yīng)的計算結(jié)果和圖形;MLX文件既可以作單純的運行文件使用,也可以在文件中填寫所需文字、公式后當作課堂講授或?qū)W術(shù)報告的可視化數(shù)字演講稿。
張志涌、張子燕、楊祖櫻
2023年 2月于南京
譯文前言
2012年仲秋,我作為 Moler十年前訪華晤面過的熟人,再次受 MathWorks中國公司的邀請,出席 Cleve Moler的訪華歡迎會。在歡迎午餐席間, Moler表達了希望在中國見到由他本人授權(quán)的著作中譯本的強烈意愿。我欣然允諾翻譯,隨即 Moler把 Numerical Computing with MATLAB的翻譯工作委托于我,并將出版權(quán)授予北京航空航天大學出版社。對此,我深感榮幸,因為從 MathWorks網(wǎng)站首次出現(xiàn)此書電子版起的這些年里,我一直持有翻譯此書的強烈沖動和期盼譯著在中國出版發(fā)行的迫切愿望。
我喜歡此書,因為 Numerical Computing with MATLAB一書,既能讓讀者初讀時感受易學易懂之愉悅,又能讓讀者細讀時領(lǐng)受滲透于字里碼間的睿智點化;既能使讀者從 MATLAB中獲得前所未有的數(shù)值解算能力,又可使讀者欣賞到浮點計算之數(shù)學優(yōu)雅。
我推崇此書,因為 Numerical Computing with MATLAB的作者是 Cleve Moler,一個始終懷揣那樸實的、讓學生學數(shù)學更輕松理念的大學教授,一個始終懷揣那讓他人最放心、最方便使用高質(zhì)量數(shù)學計算軟件平常心的科學家。正是這濟世理念驅(qū)使他成為了高性能數(shù)值計算測試標準的 LINPACK、EISPACK軟件的主要貢獻者,驅(qū)使他發(fā)明了對世界工程教學和科研領(lǐng)域產(chǎn)生不可估量深遠影響的 MATLAB ,使他成為了世界公認的現(xiàn)代數(shù)值分析和科學計算的一位創(chuàng)始人、給計算世界打下深深烙印的數(shù)學奇才。他是美國工業(yè)和應(yīng)用數(shù)學學會 SIAM前主席、美國工程院院士、 2012年 IEEE計算機先驅(qū)獎獲得者。然而,他喜歡自稱最愛編程的地地道道駭客( hacker),趣喻自己是圍繞數(shù)學家和計算機科學家雙核作 Lorenz混沌運動的人。
我贊賞此書,因為 Numerical Computing with MATLAB一書是 Cleve Moler從其前 20年教學生涯和后 20年專事 MATLAB經(jīng)驗中升華而成的原創(chuàng)珍品,是凝聚其對數(shù)學應(yīng)用本質(zhì)性獨特見解、展示未來教學方向的數(shù)值計算教材之圭臬。該書物化地展現(xiàn)了,Cleve Moler對數(shù)值分析和科學計算教學的如下卓識真見:
- 在科學和技術(shù)計算中,存在一個既不被數(shù)學覆蓋也不被計算機學科和其他應(yīng)用學科覆蓋的共同知識體系。它是涉及數(shù)值分析、科學編程、計算機圖形和數(shù)據(jù)庫管理等內(nèi)容的獨立知識體系。
- 對于科技領(lǐng)域的非數(shù)學從業(yè)人員而言,他們所需要解決的具體問題,往往不是單一的數(shù)學問題,而是更大更復雜的綜合性問題。這些問題的解決需要多種數(shù)學知識和數(shù)值計算方法。在此境況下,他們不可能、也不需要知道每種數(shù)值方法的微妙細節(jié)和具體公式,而只需要知道如何調(diào)用各種計算軟件去解決面前不可回避的數(shù)學問題,以騰出更多的時間和精力專注于綜合性的具體設(shè)計目標。就像在一個具體問題中遇到需要計算的正弦、余弦函數(shù)值時,人們并不會對近似計算正弦、余弦函數(shù)值的具體公式和執(zhí)行細節(jié)刻意刨根問底,而只是徑直調(diào)用它們的計算命令。
Numerical Computing with MATLAB由美國工業(yè)和應(yīng)用數(shù)學學會 SIAM于 2004年出第一版, 2008年出修訂版。此書在 2013年經(jīng) Cleve Moler再次修訂,且在其親自授權(quán)后于不久前由北京航空航天大學出版社出版。該書的章節(jié)標題不僅涵蓋常見數(shù)值分析教材的所有章節(jié)標題,而且包含隨機數(shù)和偏微分方程兩章。
Numerical Computing with MATLAB的特別之處在于:該書是由具有數(shù)值分析、科學計算之父和 MATLAB之父雙重身份的 Cleve Moler寫成的。該書不以深奧的數(shù)值分析理論為內(nèi)容,而以向讀者提供易于理解的數(shù)學思維、易于掌握的數(shù)學編程技術(shù)為宗旨。因此,在該書中,沒有某些數(shù)值分析教材中那定理和定理證明的重巒疊嶂,沒有那冗長公式和滿紙推演的濃霧密云,也沒有浮點誤差理論的濃墨重彩。在書中,能見到的是那信手拈來的博引旁征、高屋建瓴的評價結(jié)論,能見到的是脈絡(luò)清晰的引導、使人頓悟的簡明示例,能見到的是由 MATLAB代碼一步一步指引的、讀者完全可以自己在計算機上重現(xiàn)的各種算法演繹和實驗,能見到的是能準確掌控計算誤差和提供性能改善選項的 MATLAB命令。
Numerical Computing with MATLAB英文原版正文和習題中的 MATLAB代碼、隨書 NCM匯集中的 M文件,都在 MATLAB R2013a版下由 Moler進行過適配性修改。這些代碼和文件設(shè)計之精心、運用之巧妙、可讀性之強,都達到了 Moler自認的前所未有的滿意程度,并被 Moler引以自傲 1。
《MATLAB數(shù)值計算》(2013修訂版)是據(jù) 2014英文版 Numerical Computing with MATLAB翻譯的。本書正文及習題翻譯忠于原著、原意。在翻譯時,為保證讀者能重現(xiàn)英文原版所列之計算結(jié)果,也為幫助讀者準確理解原文編碼的奧妙,在個別段落中補寫了些許 M碼,在個別 M碼后增補了一點解釋。此外,為適應(yīng)我國學術(shù)和教學環(huán)境,把英文原版中實施對應(yīng)元素間運算的 Matrix、Vector詞匯,翻譯成數(shù)組、行(或列)數(shù)組。中譯版《 MATLAB數(shù)值計算》中的 MATLAB代碼、隨書 NCM匯集中的 M文件,由譯者在 MATLAB R2014a版下進行過適配性修訂。
《MATLAB數(shù)值計算》( 2013修訂版)除正文外,增添四個附錄:附錄 A. MATLAB功用釋要,是對正文提及的 MATLAB要素,從用法角度出發(fā),給予簡明系統(tǒng)地要旨介紹或補充,減少讀者閱讀困難和查閱其他幫助材料的麻煩。附錄 B. MATLAB命令和示教文件名索引,供讀者據(jù)命令名、文件名檢索書中示例。附錄 C.中文關(guān)鍵詞索引,供讀者據(jù)中文術(shù)語對照英文詞匯檢索正文表述。附錄 D. 2012年度計算機先驅(qū)獎頒獎典禮視頻整理稿,供讀者全面了解 Moler的杰出貢獻和人文精神,進而更好領(lǐng)悟 Moler原著所體現(xiàn)的科學計算思想。
《MATLAB數(shù)值計算》(2013修訂版)的編譯由張志涌、張子燕、楊祖櫻三人協(xié)同完成。全書經(jīng)通譯、 M碼運作、附錄編寫、通校、文字修飾等幾階段后完稿,前后歷時 18個月。在通譯和 M碼運作及附錄編寫期間,我們就正文敘述、 M代碼、GUI表現(xiàn)及附錄內(nèi)容等,多次向原作者請教、咨詢及建議。對此,原作者都及時地給予詳盡回復和認真處理。這使我們親身感受到 Cleve Moler對所有議題了然于胸的從容和一絲不茍的嚴謹,領(lǐng)受到 Cleve Moler對 MATLAB命令設(shè)計原由的透徹解讀和出神入化的功力。在本譯作完稿之際,我們?nèi)w譯者向 MathWorks公司首席科學家 Cleve Moler表示最真誠的深深謝意。
在譯稿出版之際,我們還要向北京航空航天大學出版社的陳守平、蔡喆、趙延永等表達最真摯的感謝,感謝他們?yōu)槲覀兙幾g所提供的各種寶貴資料和信息,感謝他們?yōu)楸WC本書高質(zhì)量出版所作出的一切努力。
《MATLAB數(shù)值計算》(2013修訂版)譯作雖經(jīng)我們多人反復修正校對,但限于我們知識的局限,誤譯、錯譯、片面理解及其他疏漏仍難以杜絕。在此,懇請各方面專家和廣大讀者不吝指教。譯者聯(lián)系電子信箱:zyzh@njupt.edu.cn。
張志涌、張子燕、楊祖櫻
2014年 10月 21日
原文序
本書是為講授數(shù)值方法、 MATLAB及工程計算而編寫的入門性教材,著重強調(diào)數(shù)學軟件的靈活應(yīng)用。我們希望你通過本書能充分理解MATLAB數(shù)學計算函數(shù)及命令的內(nèi)涵,充分辨析其局限性,正確使用它們,并能根據(jù)你自己的需要對它們加以修改。本書包含以下章節(jié):
- MATLAB入門
- 線性方程組
- 插值
- 零點和根
- 最小二乘
- 定積分
- 常微分方程
- 隨機數(shù)
- 傅里葉分析
- 特征值和奇異值
- 偏微分方程
20世紀 60年代后期,George Forsythe首先在美國斯坦福大學開創(chuàng)了基于軟件的數(shù)值方法課程。Forsythe、Malcolm和Moler三人合寫的教材 [20],及其后由 Kahaner、Moler和 Nash合寫的教材 [34],都是由斯坦福大學的那門課程演化產(chǎn)生的,且它們都建筑在 Fortran子程序庫基礎(chǔ)上。
本書以 MATLAB為基礎(chǔ)。含70多個M文件的NCM匯集是本書的重要組成部分。本書200多道習題中的許多習題都涉及對 NCM程序的修改及擴展。本書還廣泛使用計算機圖示的功能,其中包括對各種數(shù)值算法的交互式圖形展示。
選修本課程或閱讀本書的前提條件是:
- 學過微積分;
- 對常微分方程有所了解;
- 對矩陣有所了解;
- 有些計算機編程經(jīng)驗。
假如你此前從未用過 MATLAB,那么第 1章將幫助你跨入大門。假如你已經(jīng)熟悉MATLAB,那么你可以快速瀏覽第 1章的大部分內(nèi)容。但是,每位讀者都不應(yīng)跳過第 1章關(guān)于浮點算法的那節(jié)內(nèi)容。
對于一學季或一學期的課程而言,本書內(nèi)容可能偏多。建議講授前 7章的全部內(nèi)容,而在后 4章中有選擇地講授學生感興趣的部分內(nèi)容。
在你閱讀本書時,應(yīng)確定你所在計算機網(wǎng)或個人電腦上已經(jīng)安裝了 NCM程序匯集。NCM程序匯集可從如下的本書英文原版網(wǎng)站 [47]上免費獲得。
http://www.mathworks.cn/moler
NCM程序匯集中的文件有三類:
- gui文件,交互式圖形演示文件;
- tx文件,MATLAB內(nèi)建文件的示教性簡略版;
- 其他:各種配用文件,主要與習題有關(guān)。在自己機器上安裝了 NCM匯集后,你在 MATLAB中運行命令
ncmgui
便產(chǎn)生一個如下頁所示的綜合性圖形用戶界面。該綜合界面上的每個縮略小圖,實際上都是引出相應(yīng) GUI圖形用戶界面的按鈕。
離開MathWorks和SIAM的同仁,本書不可能完成。這兩個團隊中的人員都很專業(yè)、富具創(chuàng)造力和能融洽合作。他們對本書給予了巨大的支持。在眾多做出特殊貢獻的朋友和同仁中,我特別要提到其中五位。 Kathryn Ann Moler多次在斯坦福大學的課程中使用本書的早期書稿,并成為給予我最中肯批評的智者。 Tim Davis和 Charlie Van Loan給出了特別有益的審閱意見。Lisl Urban為本書做了完美無瑕的編輯工作。我妻子 Patsy始終陪伴身旁,包容、照料我的工作習慣和筆記本電腦,她深愛著我的一切。我感謝所有的人!
本書 2008修訂重印版的更改內(nèi)容有:為改進無出鏈網(wǎng)頁的處理,對Google PageRank那節(jié)所作的修訂;在隨機數(shù)那章新增一小節(jié)內(nèi)容;刪除了關(guān)于inline和feval命令的內(nèi)容;校正了幾十處小的印刷疏誤。2013年9月對本書進行了60多處重要的更新修訂。其中大多數(shù)修訂是中國南京郵電大學的張志涌教授所提議的。那時,他正在為北京航空航天大學出版社準備本書的中譯本。本書第 5.3節(jié)美國人口普查算例納入了2010年的人口數(shù)據(jù)。 format long格式下的計算結(jié)果顯示 16位有效數(shù)字。涉及符號工具包的應(yīng)用現(xiàn)已反映 MuPAD引擎所引起的變化。非常感謝張教授。
Cleve Moler
2013年 9月 16日
第1章 MATLAB入門1
1.1黃金分割比 1
1.2斐波那契數(shù) 8
1.3分形蕨 14
1.4魔方矩陣 19
1.5密碼技術(shù) 26
1.6數(shù)論問題 3n 1序列 31
1.7浮點運算 34
1.8更多閱讀. 42
習題 42
第2章 線性方程 52
2.1解線性方程組 52
2.2 MATLAB反斜杠矩陣左除算符52
2.3 33方程組算例 53
2.4排列矩陣和三角矩陣55
2.5 LU分解 56
2.6選主元的必要性 58
2.7示教 M文件 lutx、bslashtx、lugui 60
2.8舍入誤差的影響 63
2.9范數(shù)和條件數(shù) 66
2.10稀疏矩陣和帶狀矩陣72
2.11 PageRank和馬爾可夫鏈 74
2.12更多閱讀 83
習題 83
第3章 插值94
3.1插值多項式 94
3.2分段線性插值 99
3.3分段三次埃爾米特插值 101
3.4保形分段三次插值 102
3.5三次樣條 104
3.6示教 M文件 pchiptx, splinetx 108
3.7插值計算交互界面 interpgui 111
習題 113
第4章 零點和根 120
4.1二分法120
4.2牛頓法 122
4.3牛頓法失常算例124
4.4弦截法125
4.5逆二次插值126
4.6 Zeroin算法127
4.7示教 M文件 fzerotx 128
4.8 fzerogui 132
4.9值的解算和反插值 135
4.10最優(yōu)化和示教 M文件 fmintx 135
習題138
第5章 最小二乘 143
5.1模型和曲線擬合 143
5.2范數(shù)145
5.3人口模型交互界面 censusgui 146
5.4豪斯霍爾德反射 148
5.5 QR分解 149
5.6偽逆154
5.7秩虧156
5.8可分離最小二乘159
5.9更多閱讀 161
習題 161
第6章 定積分 168
6.1自適應(yīng)定積分算法 168
6.2定積分的基本法則 169
6.3示教 M文件 quadtx和 quadgui 171
6.4被積函數(shù)的表述173
6.5性能176
6.6積分離散數(shù)據(jù)178
6.7更多閱讀 180
習題 .180
第7章 常微分方程 188
7.1微分方程的積分 188
7.2微分方程組 189
7.3線性化的微分方程 190
7.4單步法193
7.5 BS23算法 195
7.6示教 M文件 ode23tx 197
7.7兩個簡單示例 201
7.8洛倫茨吸引子203
7.9剛性206
7.10事件 210
7.11多步法 214
7.12 MATLAB的 ODE解算命令214
7.13誤差 216
7.14性能 219
7.15更多閱讀221
習題221
第8章 傅里葉分析237
8.1按鍵撥號 237
8.2有限傅里葉變換 241
8.3交互界面 fftgui 242
8.4太陽黑子 246
8.5周期時間序列 249
8.6快速有限傅里葉變換250
8.7示教 M文件 ffttx 252
8.8 fftmatrix繪制傅里葉矩陣的圖 253
8.9其他傅里葉變換與級數(shù) . 255
8.10更多閱讀 256
習題 .256
第9章 隨機數(shù) 258
9.1偽隨機數(shù) 258
9.2均勻分布 258
9.3正態(tài)分布 262
9.4示教 M文件 randtx和 randntx . 265
9.5 Twister算法 267
習題 268
第10章 特征值和奇異值 271
10.1特征值與奇異值分解271
10.2小規(guī)模矩陣分解示例273
10.3分解演示界面 eigshow 275
10.4特征多項式277
10.5對稱矩陣和埃爾米特矩陣 278
10.6特征值的靈敏度和精度 279
10.7奇異值的靈敏度和精度 285
10.8約當型和舒爾型 286
10.9 QR算法288
10.10 QR算法演示界面 eigsvdgui 290
10.11主成分分析 292
10.12成圓算法296
10.13更多閱讀 301
習題301
第11章 偏微分方程 309
11.1模型問題 309
11.2有限差分法310
11.3離散拉普拉斯算子矩陣 312
11.4數(shù)值穩(wěn)定性314
11.5 L形薄膜波動 316
習題321
參考文獻 328
附錄 AMATLAB功用釋要 332
A.1 MATLAB工作界面簡介 332
A.1.1 MATLAB的啟動和工作界面簡介 332
A.1.2 MATLAB的工作機理333
A.1.3 NCM文件的兩種使用方案 333
A.1.4如何設(shè)置當前文件夾334
A.1.5如何設(shè)置搜索路徑 334
A.2如何獲取幫助信息 335
A.2.1如何利用 help命令求助法 335
A.2.2如何利用幫助瀏覽器求助 336
A.3入門要旨337
A.3.1如何在命令窗中輸入命令 337
A.3.2如何輸入數(shù)值和定義變量名338
A.3.3如何控制雙精度浮點數(shù)的顯示格式 338
A.3.4如何正確地表述復數(shù) 339
A.3.5如何正確地理解復數(shù)運算結(jié)果341
A.3.6如何清空窗口、內(nèi)存和恢復默認設(shè)置 342
A.4數(shù)組及其運算 342
A.4.1數(shù)組結(jié)構(gòu)和元素標識343
A.4.2數(shù)組運算通則345
A.4.3哪類標量循環(huán)應(yīng)被數(shù)組運算替代.347
A.5矩陣及其運算350
A.5.1矩陣和數(shù)組的異同 350
A.5.2矩陣算符和矩陣函數(shù)351
A.5.3矩陣運算為何應(yīng)摒棄標量循環(huán)352
A.6 M泛函和函數(shù)句柄354
A.6.1 M泛函及常見命令 354
A.6.2含參泛函和無參泛函 355
A.6.3具名函數(shù)和匿名函數(shù)的句柄358
A.6.4泛函與含參目標函數(shù)間參數(shù)傳遞的各種組合 360
A.6.5如何編寫含參泛函中的目標函數(shù)361
A.6.6如何編寫無參泛函中的目標函數(shù)362
A.6.7如何利用嵌套函數(shù)實現(xiàn)無參泛函中的參數(shù)傳遞 364
A.7符號計算 366
A.7.1為何及如何定義符號對象 366
A.7.2如何用 M碼符號對象精準表述含數(shù)字數(shù)學解析式368
A.7.3自由符號變量的辨認和指定370
A.7.4限定性假設(shè)的設(shè)置 372
A.7.5限定性假設(shè)的觀察和撤銷 373
A.7.6限定性假設(shè)對符號計算的影響373
附錄B MATLAB命令及示教文件名索引 377
附錄C 中文關(guān)鍵詞索引 391
附錄D 2012年度計算機先驅(qū)獎頒獎典禮視頻整理譯文 409