01 / 導讀
導讀
引用
Press, W. H., Teukolsky, S. A., Vetterling, W. T., & Flannery, B. P. (2007). Numerical Recipes: The Art of Scientific Computing (3rd ed.). Cambridge University Press.
章節概要
第三版共22章,索引始於第1195頁,全書使用C++程式碼。第1章確立各項約定;第2至13章覆蓋科學計算的經典核心;第14至16章轉向資料、建模與推斷;第17至20章處理微分方程與積分方程;第21、22章則加入計算幾何與非數值演算法。每章都以編號為0的一節介紹該主題,然後依次講解各個編號的方法。
第1章:預備知識
引言、誤差、精度與穩定性、C系語法、物件、類與繼承、向量與矩陣物件,以及另外一些約定。序言指引讀者閱讀第1.3至1.5節,瞭解本書所採用的物件導向風格。
第2章:線性代數方程組的求解
高斯–若爾當消元與高斯消元、LU分解、三對角與帶狀方程組、解的迭代改進、奇異值分解、稀疏方程組、範德蒙矩陣與托普利茨矩陣、喬列斯基分解與QR分解,最後一節問矩陣求逆是否為N³過程。
第3–5章:插值與外推;函式的積分;函式的求值
在有序表中搜索、多項式插值、樣條插值與有理插值、網格與散亂資料上的插值,以及拉普拉斯插值(第3章)。經典求積公式、龍貝格積分、反常積分、變數替換、高斯求積、自適應求積與多維積分(第4章)。多項式、連分式、級數及其收斂、遞推關係、數值導數、切比雪夫逼近、帕德逼近與有理切比雪夫逼近(第5章)。
第6章:特殊函式
Gamma函式、Beta函式與誤差函式,指數積分,貝塞爾函式與艾裡函式,球諧函式,菲涅耳積分,道森積分,費米–狄拉克積分,橢圓積分,超幾何函式與統計函式。
第7章:隨機數
均勻偏差、其他分布的偏差、多元正態偏差、線性反饋移位暫存器、雜湊表與雜湊儲存器、簡單蒙特卡羅積分、準隨機序列,以及自適應與遞迴蒙特卡羅方法。
第8–10章:排序與選擇;求根與非線性方程組;函式的極小化或極大化
排序、排名與選擇演算法(第8章)。區間包圍、二分法、割線法與布倫特法、牛頓–拉弗森法、多項式求根與非線性方程組(第9章)。一維與多維極小化(黃金分割、布倫特法、下山單純形法、鮑威爾法、共軛梯度法與擬牛頓法)、單純形法與內點法線性規劃、模擬退火與動態規劃(第10章)。
第11章:本徵系統
雅可比變換、用吉文斯與豪斯霍爾德方法化為三對角形式、對稱矩陣、厄米矩陣與實非對稱矩陣的本徵值、QR演算法與逆迭代。
第12–13章:快速傅立葉變換;傅立葉與譜方法的應用
取樣資料的傅立葉變換、FFT及其實資料變體、正弦與餘弦變換以及更高維情形(第12章)。卷積、相關、維納濾波、功率譜估計、數字濾波、線性預測、最大熵譜、不等間隔取樣資料、傅立葉積分、小波變換與取樣定理(第13章)。
第14–16章:資料的統計描述;資料建模;分類與推斷
矩、判斷分布是否不同的檢驗、列聯表、相關、資訊理論性質與Savitzky–Golay平滑(第14章)。作為最大似然估計的最小二乘、直線擬合與一般線性擬合、非線性模型、置信限、穩健估計、馬爾可夫鏈蒙特卡羅與高斯過程迴歸(第15章)。高斯混合模型與k均值、維特比譯碼、隱馬爾可夫模型、層次聚類與支援向量機(第16章)。
第17–20章:常微分方程的積分;兩點邊值問題;積分方程與反演理論;偏微分方程
龍格–庫塔法、自適應步長、Bulirsch–Stoer法、剛性方程組、多步法與化學反應網路的隨機模擬(第17章)。打靶法與鬆弛法,並以橢球諧函式為例(第18章)。弗雷德霍姆方程與沃爾泰拉方程、奇異核、正則化、Backus–Gilbert方法與最大熵影像復原(第19章)。通量守恆與擴散型初值問題,傅立葉、迴圈約化、鬆弛、多重網格與譜方法(第20章)。
第21–22章:計算幾何;非數值性較弱的演算法
點與盒、KD樹、三角形、多邊形、德勞內三角剖分與四叉樹(第21章)。簡單圖形的繪製、機器引數、格雷碼、校驗和、霍夫曼編碼與算術編碼,以及任意精度算術(第22章)。
核心概念
第1–5章:基礎
- 誤差、精度與穩定性:為何看似等價的演算法在計算機上表現不同。
- 矩陣分解:LU、喬列斯基、QR與奇異值分解是線性代數計算的基礎。
- 求積與插值:在經典公式、高斯求積與樣條之間作選擇。
第6–11章:核心數值方法
- 隨機偏差與蒙特卡羅積分:產生樣本並用於計算積分。
- 求根與極小化:區間包圍、牛頓型迭代與多維搜尋。
- 本徵系統:化為三對角形式與QR演算法。
第12–16章:訊號、資料與推斷
- FFT與譜估計:取樣、卷積、濾波與功率譜。
- 最小二乘與最大似然:帶置信限的模型擬合。
- 馬爾可夫鏈蒙特卡羅:對後驗分布取樣。
第17–22章:方程與演算法
- 自適應步長與剛性:積分常微分方程的核心問題。
- 鬆弛與多重網格方法:求解邊值問題。
- 德勞內三角剖分與KD樹:幾何資料結構。
評析
優點
- 講解與可執行程式碼並重。 序言說明,第二版越來越因文字講解、簡明推導、批判性判斷和建議而受重視,作者保留程式碼,是為了讓讀者能判斷這些建議是否誠實、可實現、實用。因此每個主題都把討論與一段程式結合在一起。
- 一冊涵蓋廣泛。 目錄從線性代數和特殊函式一直到譜分析、統計、微分方程和計算幾何,一本書就可成為處理多種任務的第一站。
- 大幅修訂的版本。 序言列出數百頁新內容,包括分類與推斷、計算幾何兩章,擴充的隨機數與分布部分,內點法線性規劃、動態規劃、馬爾可夫鏈蒙特卡羅和高斯過程迴歸。
- 有主見、重實用的口吻。 第二版序言把目標描述為一本非正式、有編輯立場、實用的書;第三版序言補充說,它寫給的是已經知道多數演算法的程式碼可以找到、想要弄懂其原理以及它好不好用的讀者。
侷限
- 是參考書,而非循序漸進的課程。 目錄按方法族而非單一程式組織,因此更適合查詢某個主題,而不適合逐步學習數值分析。
- 與其自身的C++風格繫結。 程式碼使用作者的物件導向約定,由第1章加以說明;使用Python或其他語言的讀者需要把它翻譯過來或另行處理。
- 許可事項。 本書開頭有一節「許可與法律資訊」,涉及程式碼的使用;在自己的專案中複用程式之前應先閱讀。
- 廣度限制深度。 許多方法只佔幾頁,因此對偏微分方程或最最佳化等專門主題,專著會講得更深。
在課程中的定位
在這份計算物理書單中,Numerical Recipes是綜合性的方法參考書。Newman的 Computational Physics 與Landau、Páez和Bordeianu的 Computational Physics: Problem Solving with Python 是用Python通過物理問題講授數值方法的教材,更適合作為第一門課程;Kinder與Nelson的 A Student's Guide to Python for Physical Modeling 提供語言方面的基礎。Taylor的 An Introduction to Error Analysis 講實驗測量中不確定度的處理,與數值誤差是不同的主題。Thijssen的 Computational Physics 則是對凝聚態物理研究方法的研究生層次論述。
可將Numerical Recipes與課程教材搭配使用:當教材中提到的某個方法需要更完整的解釋,或需要一個穩健的實現作比較時,本書相應的章節是不錯的去處。
如何使用本書
本書適合會程式設計(程式碼為C++)、具備微積分、線性代數和一些機率知識,並需要選擇、理解和實現數值方法的學生與研究人員。
實用的學習安排:
- 起點: 第1章講誤差與穩定性以及編碼約定,第2章講線性代數。
- 按需查閱: 第3至5章講插值、積分與函式求值,第9、10章講求根與最最佳化,第11章講本徵值,第17章講常微分方程。
- 資料工作: 第7、14、15、16章講隨機數、統計、建模與推斷;訊號處理則看第12、13章。
- 專門章節: 當專案涉及邊值問題、反問題、偏微分方程、幾何或編碼演算法時,讀第18至22章。
- 方法: 選擇方法之前先讀該章的第0節引言,然後在一個測試問題上把推薦的程式與自己的實現作比較。
