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节引言,然后在一个测试问题上把推荐的程序与自己的实现作比较。
