本書分三個層次進(jìn)行內(nèi)容組織:計算基礎(chǔ)、使用MATLAB解決日常生活問題、深入研究和擴(kuò)展。計算基礎(chǔ)部分除了介紹MATLAB的基礎(chǔ)知識,還包含計算歷史和編程語言的簡要介紹,以及良好的編程實踐。這部分內(nèi)容凝練了大學(xué)中常開設(shè)的“計算機(jī)基礎(chǔ)”和“計算機(jī)科學(xué)導(dǎo)論”等課程的精華。第二部分主要涉及線性代數(shù)方程求解、數(shù)值求導(dǎo)、求根算法等內(nèi)容,利用高等數(shù)學(xué)和線性代數(shù)等課程的基本知識,簡單快速地解決日常生活中的常見問題。*后一部分是關(guān)于MATLAB的深入研究和擴(kuò)展,介紹了隨機(jī)過程、蒙特卡洛仿真、優(yōu)化問題和離散傅里葉變換等內(nèi)容,當(dāng)你深入到實際科學(xué)研究和工程項目時都會用到這方面的內(nèi)容。
本書是一本關(guān)于MATLAB編程和數(shù)值方法的簡明教程。書中通過引人入勝的例子提供實用的知識,從簡單的概念開始,幫你構(gòu)建用于建模、仿真和分析真實系統(tǒng)的技能集。此外,本書還簡要概述了成功的科學(xué)或工程工作所必需的數(shù)值方法。本書內(nèi)容豐富,示例簡潔生動,既適合沒有系統(tǒng)編程知識的初學(xué)者,也可以作為有一定科學(xué)研究和工程技術(shù)基礎(chǔ)人員的指導(dǎo)書,還可以作為高等院校本科生的學(xué)習(xí)教材。
本書特色
面向科學(xué)家和工程師教授編程知識,采用問題驅(qū)動的教學(xué)方法,使用具有解釋性和趣味性的示例。
強(qiáng)調(diào)實踐方法,使用應(yīng)知應(yīng)會的信息,較少涉及技術(shù)細(xì)節(jié)。
利用科學(xué)和工程示例,展示所學(xué)概念在實際問題上的應(yīng)用。
展示真實系統(tǒng)建模,由易到難逐步探索有挑戰(zhàn)性的問題。
突出數(shù)據(jù)處理和分析在日常生活中的實際應(yīng)用。
目標(biāo)讀者
本書適合任何想學(xué)習(xí)MATLAB編程的讀者。如果你正在尋求關(guān)于編程、MATLAB和數(shù)值方法的簡明易懂的教程,那本書正好適合你。我們希望讀者能在這里找到處理日常計算和程序設(shè)計問題的必要知識。即使是經(jīng)驗豐富的讀者也能從書中得到對常見方法的有用見解,找到可能遇到的困惑問題的解釋。
我們從簡單的概念開始,幫你逐步掌握建模、模擬和分析真實系統(tǒng)的技能。此外,還概述了成功的科學(xué)或工程工作所必需的數(shù)值方法。本書幫你熟悉計算的“學(xué)問”,這樣當(dāng)你決定學(xué)習(xí)高級技術(shù)時,會知道該學(xué)習(xí)什么。
本書是根據(jù)“科學(xué)家的實用計算”(Practical Computing for Scientists)課程材料編寫的,該課程為威廉與瑪麗學(xué)院開設(shè)的一學(xué)期課程,教學(xué)對象為尚未確定主修學(xué)科的學(xué)生,以及物理、神經(jīng)科學(xué)、生物學(xué)、計算機(jī)科學(xué)、應(yīng)用數(shù)學(xué)和統(tǒng)計學(xué)或化學(xué)等專業(yè)的學(xué)生。成功學(xué)習(xí)這門課的學(xué)生水平也不相同,有的是大一新生,有的是大四畢業(yè)生,有的介于兩者之間。
為什么選擇MATLAB
我們選擇MATLAB作為編程語言,是因為MATLAB對一些已實現(xiàn)的功能有很好的平衡,這些功能對科學(xué)家來說非常重要又易于學(xué)習(xí)。MATLAB為用戶隱藏了許多底層細(xì)節(jié),你不需要考慮變量類型、編譯過程等。MATLAB使用起來就是這么便利,它可以在不跟蹤每個元素的情況下對整個數(shù)組進(jìn)行計算,這正是MATLAB的核心。
從教師的角度來說,你不必為學(xué)生安裝MATLAB而擔(dān)心。軟件安裝過程很簡單,學(xué)生都能獨立完成。更重要的是,MATLAB在Windows、Mac和Linux等操作系統(tǒng)中的界面和工作方式都一樣,在不同計算機(jī)上產(chǎn)生的結(jié)果完全相同。
從學(xué)生的角度來說,MATLAB可能是從事工程或科學(xué)研究工作最常用的編程語言。因此,如果你現(xiàn)在學(xué)習(xí)MATLAB,或許就不需要再強(qiáng)迫自己學(xué)習(xí)其他行業(yè)標(biāo)準(zhǔn)編程語言了。
MATLAB的主要缺點是價格昂貴,如果學(xué);騿挝徊荒芴峁偷酶邇r購買了。但這不是一個大問題,你可以選擇免費的替代軟件GNU Octave。本書所有章節(jié)的練習(xí),除了數(shù)據(jù)擬合外都可以通過Octave完成。Octave中的數(shù)據(jù)擬合使用了一套不同的命令,其他部分和MATLAB的工作方式相同(對于一些高級選項可能需要稍作調(diào)整)。
本書不包含哪些內(nèi)容
本書沒有廣泛介紹MATLAB命令,因為MATLAB已經(jīng)有一個很好的手冊,我們沒有必要再編寫一本,也無須重做一個在線教程。
本書也不能代替講解數(shù)值方法的來龍去脈的書。我們盡可能討論可以用數(shù)值方法完成的有趣的事情,而不必關(guān)心最有效的實現(xiàn)方法。然而,這本書的開頭是個例外——通過數(shù)值算法的實現(xiàn)解釋了一些編程基礎(chǔ)知識,這些算法大多是MATLAB的內(nèi)置函數(shù)。
如何閱讀本書
如果你不是編程新手,可以跳過第一部分的大部分內(nèi)容,但是要確保熟悉其中的元素操作、數(shù)組操作與數(shù)組元素操作之間的區(qū)別以及數(shù)組切片等內(nèi)容。
如果你是科學(xué)家,那么繪圖和數(shù)據(jù)擬合是必須掌握的。請務(wù)必閱讀第6章。如果需要學(xué)習(xí)關(guān)于數(shù)據(jù)分析的重要內(nèi)容,也需要學(xué)習(xí)這一章。
第三部分在某種程度上可作為自選內(nèi)容,盡管我們十分推薦優(yōu)化問題一章(即第13章)。令人驚訝的是有很多問題本質(zhì)上都屬于優(yōu)化問題,可以用第13章提出的方法來解決?赡茉诒究聘吣昙壍恼n堂上才會用到這部分內(nèi)容。
隨著編程水平的提高,請重新閱讀44節(jié),并嘗試從中學(xué)習(xí)更多技術(shù)。
數(shù)據(jù)文件和代碼鏈接
本書所有MATLAB代碼及數(shù)據(jù)文件可在網(wǎng)站http://physics.wm.edu/programming_with_MATLAB_book下載。本書英文電子版中直接給出了相關(guān)文件的鏈接地址。
關(guān)于本書教輔資源,只有使用本書作為教材的教師才可以申請,需要的教師可到原出版社網(wǎng)站注冊下載,若有問題,請與泰勒·弗朗西斯集團(tuán)北京代表處聯(lián)系,電話010-58452806,電子郵件janet.zheng@tanfchinacom。——編輯注
尤金尼•E.米哈伊洛夫(Eugeniy E. Mikhailov) 得克薩斯農(nóng)工大學(xué)物理系博士,MIT博士后,現(xiàn)為威廉與瑪麗學(xué)院教師。他一直為物理、數(shù)學(xué)和計算機(jī)專業(yè)的本科生講授“科學(xué)家的實用計算”課程。
出版者的話
譯者序
前言
第一部分計算基礎(chǔ)
第1章計算機(jī)與編程語言簡介2
11早期計算史2
12現(xiàn)代計算機(jī)3
13什么是編程3
14編程語言概述4
15計算機(jī)中的數(shù)字表示及其潛在問題5
151離散化——計算機(jī)的主要弱點5
152二進(jìn)制表示6
153浮點數(shù)表示6
154結(jié)論7
16自學(xué)7
第2章MATLAB基礎(chǔ)9
21MATLAB的圖形用戶界面9
22功能強(qiáng)大的MATLAB計算器11
221MATLAB的變量類型11
222內(nèi)置函數(shù)和運算符12
223運算符的優(yōu)先級13
224注釋14
23高效編輯14
24使用幫助文檔15
25矩陣16
251創(chuàng)建和訪問矩陣元素16
252基本矩陣運算17
253字符串矩陣20
26冒號運算符20
27繪圖21
28自學(xué)23
第3章布爾代數(shù)、條件語句和循環(huán)24
31布爾代數(shù)24
311MATLAB中布爾運算符的優(yōu)先級25
312MATLAB布爾邏輯運算舉例25
32比較運算符26
321向量比較26
322矩陣比較27
33條件語句27
331if-else-end語句27
332if語句的簡短形式28
34等于語句的常見錯誤28
35循環(huán)28
351while循環(huán)28
352特殊命令——break和continue29
353for循環(huán)30
36自學(xué)31
第4章函數(shù)、腳本和良好的編程實踐32
41動機(jī)引例32
411銀行利率問題32
412飛行時間問題32
42腳本33
43函數(shù)35
44良好的編程實踐37
441簡化代碼37
442試著預(yù)見非預(yù)期行為37
443運行測試用例38
444檢查并清理輸入?yún)?shù)39
445判斷解是否符合實際40
446良好的編程實踐總結(jié)40
45遞歸函數(shù)和匿名函數(shù)40
451遞歸函數(shù)40
452匿名函數(shù)41
46自學(xué)42
第二部分使用MATLAB求解日常問題
第5章線性代數(shù)方程組求解46
51風(fēng)鈴問題46
52MATLAB內(nèi)置求解器48
521逆矩陣法48
522無逆矩陣計算的方法48
523選用哪種方法48
53用MATLAB求解風(fēng)鈴問題49
54示例:惠斯通電橋問題50
55自學(xué)52
第6章數(shù)據(jù)約簡與擬合53
61數(shù)據(jù)約簡與擬合的必要性53
62擬合的正式定義53
63數(shù)據(jù)擬合示例54
64參數(shù)不確定性估計56
65擬合結(jié)果評估56
66如何得到最優(yōu)擬合58
661數(shù)據(jù)繪圖60
662選擇擬合模型60
663擬合參數(shù)的初始猜測61
664基于初始猜測的數(shù)據(jù)和模型繪制61
665擬合數(shù)據(jù)62
666擬合參數(shù)的不確定性評估63
67自學(xué)65
第7章數(shù)值導(dǎo)數(shù)67
71通過前向差分估計導(dǎo)數(shù)67
72數(shù)值導(dǎo)數(shù)的算法誤差估計68
73通過中心差分估計導(dǎo)數(shù)69
74自學(xué)70
第8章求根算法71
81求根問題71
82試錯法71
83二分法72
831二分法示例和測試用例74
832二分法代碼的可能改進(jìn)76
84算法收斂76
85試位法77
86割線法78
87牛頓拉弗森法79
871使用牛頓拉弗森法進(jìn)行解析求導(dǎo)80
872使用牛頓拉弗森法進(jìn)行數(shù)值求導(dǎo)81
88Ridders法81
89求根算法的陷阱82
810求根算法總結(jié)83
811MATLAB內(nèi)置求根命令84
812自學(xué)84
第9章數(shù)值積分方法86
91積分問題描述86
92矩形法86
93梯形法89
94辛普森法90
95廣義積分公式90
96蒙特卡羅積分91
961示例:計算池塘面積91
962樸素蒙特卡羅積分91
963蒙特卡羅積分推導(dǎo)91
964蒙特卡羅方法的算法誤差92
97多維積分92
98蒙特卡羅多維積分94
99數(shù)值積分陷阱94
991使用大量的數(shù)據(jù)點94
992使用過少的數(shù)據(jù)點95
910MATLAB的積分函數(shù)95
911自學(xué)96
第10章數(shù)據(jù)插值98
101最近鄰插值98
102線性插值99
103多項式插值101
104好的插值程序的準(zhǔn)則102
105三次樣條插值102
106MATLAB內(nèi)置的插值方法104
107外推法104
108插值的非常規(guī)應(yīng)用104
109自學(xué)105
第三部分深入研究并擴(kuò)展科學(xué)家的工具箱
第11章隨機(jī)數(shù)生成器和隨機(jī)過程108
111統(tǒng)計和概率簡介108
1111離散事件的概率108
1112概率密度函數(shù)108
112均勻隨機(jī)分布109
113隨機(jī)數(shù)生成器和計算機(jī)110
1131線性同余生成器110
1132隨機(jī)數(shù)生成器周期111
114如何檢驗隨機(jī)數(shù)生成器111
115MATLAB的內(nèi)置隨機(jī)數(shù)生成器113
116自學(xué)114
第12章蒙特卡羅仿真115
121釘板實驗115
122拋硬幣游戲117
123傳染病傳播118
124自學(xué)123
第13章優(yōu)化問題125
131優(yōu)化問題簡介125
132一維優(yōu)化126
1321黃金分割最優(yōu)搜索算法126
1322一維最優(yōu)MATLAB內(nèi)置函數(shù)128
1323一維優(yōu)化示例128
133多維優(yōu)化130
134組合優(yōu)化135
1341背包問題135
1342旅行商問題138
135模擬退火算法143
136遺傳算法150
137自學(xué)151
第14章常微分方程153
141常微分方程簡介153
142邊界條件154
143求解常微分方程的數(shù)值方法155
1431歐拉方法155
1432二階RungeKutta方法(RK2)156
1433四階RungeKutta法(RK4)157
1434其他數(shù)值求解器157
144剛性常微分方程及數(shù)值解的穩(wěn)定性問題157
145MATLAB的內(nèi)置常微分方程求解器159
146常微分方程示例159
1461自由落體159
1462空氣阻