ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

数值分析答案第三版:教师解答手册的推导与误差解析

数值分析答案第三版:教师解答手册的推导与误差解析

简介:这份PDF是Timothy Sauer《Numerical Analysis》第三版配套教师解答手册,面向修读数值分析课程的高校学生、助教和自学者,用于核对课后习题答案、梳理算法推导并理解误差来源。手册按教材章节组织,涵盖多项式求值与浮点表示、有效数字损失,解方程中的二分法、不动点迭代、Newton法和无导数求根,线性方程组的消元与迭代解法,以及插值、最小二乘、数值微分积分、常微分方程初值和边值问题等内容。压缩包内只有1个PDF文件,大小约6.75MB,适合在电脑或平板上按章节查阅。页面已有3381人学习,可配合教材逐章练习,借助完整解答复盘计算步骤、对照数值结果并排查概念理解偏差。解答保留原书英文表述,步骤较完整,对二分法收敛区间、迭代收敛条件和舍入误差等易错点,可结合对应章节逐项验证,提升复习与备课效率。

1. 一句话说清“数值分析答案”:它是一份带推导过程的解题记录,并非一张标准答案纸

搜「数值分析 答案 第三版」的人,多半正在经历同一个瞬间:书上的公式能看懂,课后题一动手就卡住。于是大家会本能地找一个东西——答案。可真拿到这份材料,很多人第一反应是意外:里面没有 ABCD 选项,也没有一张只写着最终数字的对照表,取而代之的是每一道题从第一步到最后一步的完整推导、每一个中间量和每一个“此处用某某公式”的批注。

它的正式身份是“教师解答手册”,也就是教材配套的解题过程汇编,并非学生整理的“课后答案”。打个比方,它是老厨师站在灶台边一边做一边念叨“这里火大了要关小、这一步为什么先放盐”,而不是在盘子边贴一个“好吃”的标签。数值分析这门学问讲的是“怎么让机器把数学算出来”,手册里那些密密麻麻的步骤,本质上是把“人怎么想”和“机器怎么算”之间的落差,一题一题地演示给你看。明白了这一点,才知道手里这份东西该怎么用。

2. 为什么数学题需要“算个大概”:解析解走不通的地方,数值方法接手

2.1 解析解和数值解:两种答案的性格完全不同

中学数学给我们养成了一种习惯:答案应该是“漂亮”的。解方程 x² = 2,答案是 √2;求圆的面积,答案是 πr²。这类用符号、根式、常数写出来的结果,叫解析解,它的好处是精确、通用,你把任意 r 代进去都能立刻得到结果。

问题在于,能写出漂亮解析解的方程,其实是极少数。五次及以上的多项式方程,一般没有根式解,这是已经被证明的死路;∫e^(−x²)dx 这种看起来人畜无害的积分,原函数根本写不成初等函数的组合;更别提天气预报里的那套偏微分方程组,连“解长什么样”都描述不出来。

计算机只会做四则运算和比较,你让它算 √2,它没法“理解”根号,只能给你一个 1.4142135623730951。数值分析干的事,就是把这些“没法直接按出来”的运算,拆成一串有限的加减乘除,让结果无限接近真值。解析解像一句把话说完整的句子,数值解像念到小数点后十六位——它不完美,但它是唯一能算出来的东西。

这个区别决定了一件事:数值分析的答案天然带着“误差”这个属性。问“这个答案对不对”是外行问法,内行问的是“误差有多大、能不能接受”。

2.2 浮点数:计算机表示实数时画的格子

要理解误差从哪来,得先知道计算机怎么存小数。

十进制里 1/3 = 0.3333…写不完,二进制里也有自己的“写不完”。0.1 这个我们天天用的数,转成二进制是 0.0001100110011…无限循环,永远存不下精确值。计算机只能截断,按 IEEE 754 双精度标准存成“符号位 + 11 位指数 + 52 位尾数”的结构,实际有效位数 53 位。也就是说,你输入 0.1 的那一刻,它已经不是 0.1 了。

这份手册第 0 章开篇几节讲的就是这件事:十进制怎么转二进制、小数部分怎么“乘 2 取整”、什么叫“舍入到最近”、机器 epsilon 为什么是 2 的 −52 次方这个量级。教材把这些放在最前面不是凑数,因为后面所有算法——解方程、矩阵、积分、微分方程——都建立在这个“不精确的实数”之上。

# 用双精度浮点数演示"看起来一样、其实不一样" a = 0.1 + 0.2 b = 0.3 print(a) # 0.30000000000000004 print(a == b) # False print(abs(a - b)) # 5.551115123125783e-17

这段代码里没有任何算法,只有一次加法和一次比较。输出显示 a 比 0.3 多出了约 5.5×10⁻¹⁷,正好在双精度机器 epsilon(约 2.2×10⁻¹⁶)的量级附近。这不是语言算错了,是 0.1 和 0.2 在二进制里都存不准,两个近似值相加,误差被带了出来。踩过这个坑的人都知道,判断两个浮点数是否相等,永远要写成“差值小于某个阈值”,不能写等号。

再往深一层,手册第 0 章还讲了一个更隐蔽的现象:有效数字丢失。两个非常接近的数相减,结果的绝对误差没变,但相对误差会爆炸——因为相减之后,前面的有效位被“抵消”掉了,只剩下后面本来就不可靠的位数。这个现象在后面解二次方程、算导数、做插值时反复出现,是数值计算里最常见的翻车原因之一。

2.3 迭代:从猜一个数开始的逼近游戏

既然一次算不准,那就多算几次。数值方法里最核心的思想是迭代:先猜一个粗略的值,然后按某个规则不断修正,让结果一步步逼近真值。

最朴素的是二分法。已知函数在区间两端一正一负,那零点一定在中间;取中点看符号,把区间砍掉一半,重复下去。每砍一次,误差减半,这叫线性收敛。它慢,但极其稳健——只要端点异号,就一定能收敛,没有例外。这是数值计算里的“保底方案”。

更快的是牛顿法:在当前猜测点画一条切线,切线与横轴的交点作为下一个猜测点。公式是 x_{k+1} = x_k − f(x_k)/f′(x_k)。它的收敛速度叫二次收敛,意思是每迭代一次,误差大致变成上一次的平方——有效位数翻倍。听上去很美,代价是两个:一要能算出导数,二要初值选得足够靠近真解。初值离谱时会直接发散,切线把你带到越来越远的地方,教科书上那些“牛顿法失败”的图就是这么来的。

这份手册第 1 章把这几类方法排在一起讲:二分法、不动点迭代、精度极限、牛顿法、不用导数的求根法(割线法一类)。它真正想让你建立的认知是:不同算法在“速度、稳健性、对初值和导数的要求”这三件事上各有取舍,没有哪个方法全面占优。选算法,本质上是在选你愿意承受哪种失败方式。

3. 这份手册里装了什么:从多项式求值一路走到图像压缩

3.1 开头几章:数怎么存、方程怎么解、矩阵怎么算

手册第 0 章叫 Fundamentals,讲的全是地基。第一节是多项式求值,看着简单,其实藏着一个非常经典的技巧——嵌套乘法。手册里有一道题把多项式写成 P(x) = 1 + x(1 + x(5 + x(1 + x(6)))) 这种一层套一层的形式,展开就是 6x⁴ + x³ + 5x² + x + 1。为什么要这么写?因为它把“求幂”这个昂贵操作彻底消灭了。

def horner(coeffs, x): """coeffs 按从高次到低次排列,返回多项式的值""" result = coeffs[0] for c in coeffs[1:]: result = result * x + c return result # 求 6x^4 + x^3 + 5x^2 + x + 1 在 x = 1/3 处的值 print(horner([6, 1, 5, 1, 1], 1/3))

参数 coeffs 是高次项在前的系数列表,x 是代入点。循环体里只有一次乘法和一次加法,n 次多项式总共 n 次乘法;如果按定义老老实实展开,光算 x⁴ 就要三次乘法,整体是 n(n+1)/2 次。这个差距在 n 很大时是数量级的。手册里甚至还追问“用 x² = x·x、x⁴ = x²·x² 这种反复平方法要几次乘法”,这就是在训练你对“计算代价”的敏感度——数值分析从头到尾都在算这笔账。

第 1 章解方程,第 2 章线性方程组,是整本书最“主力”的两块。第 2 章从高斯消元讲到 LU 分解,再讲到误差来源、PA=LU(带部分主元选择的分解)、迭代法、对称正定矩阵的专门方法,最后是非线性方程组。这里有一条关键的逻辑链:高斯消元本身没问题,但当主元特别小的时候,除法会把误差放大,所以必须“换行”把大数换到主元位置——这就是 P 矩阵的由来。手册第 2.3 节专门叫“Sources of Error”,第 2.4 节紧接着给出补救方案,这个安排本身就说明了编书人的意图。

3.2 中间几章:曲线怎么连、积分怎么算、微分方程怎么推

第 3 章插值回答一个很实际的问题:手上有一堆离散的数据点,怎么构造一条曲线穿过它们?听起来只是画图,其实到处都是——图像放大、动画路径、传感器补点,全是插值。

插值里有两个反复出现的坑。第一,插值误差:穿过了所有已知点,不代表两个点之间也准,手册用一整节讨论误差上界。第二,节点选得不好会出大问题:用等距节点做高次插值,两端会出现剧烈振荡,这叫 Runge 现象;改用 Chebyshev 节点(在区间两端更密集),振荡就被压下去。所以手册里“Chebyshev 插值”和“三次样条”是挨着讲的——前者换了节点位置,后者换了函数形态,用的是分段低次多项式,用“多段简单”替代“一段复杂”。

再往后,第 5 章讲数值微分与积分。微分用差分近似,积分用 Newton-Cotes 公式(梯形法、Simpson 法)、Romberg 外推、自适应求积、高斯求积。这里的核心矛盾是“精度和计算量的兑换比”:Simpson 法比梯形法精度高一截,高斯求积能用更少的函数求值达到同样的精度,但公式更复杂、节点不再是等距的。

第 6 到 8 章进入微分方程。初值问题、误差分析、方程组、Runge-Kutta 方法、变步长、隐式方法与刚性方程、多步法,然后是边值问题的打靶法和有限差分、有限元,最后是偏微分方程里的抛物型、双曲型、椭圆型三大类。这一段是整本书最“工程”的部分:刚性方程为什么要用隐式方法?因为显式方法为了稳定,步长会被逼到极小,算到天荒地老;打靶法为什么叫打靶?因为它是把边值问题当成初值问题,猜一个初始斜率“射”过去,看落点差多少再修正。

3.3 收尾几章:随机、频率、压缩、特征值这些大词从哪来

最后几章是这本教材区别于传统数值分析的地方:它把课堂上的公式和日常技术直接接上了线。

第 9 章讲随机数与蒙特卡洛模拟、布朗运动、随机微分方程。第 10 章讲傅里叶变换、三角插值、FFT 与信号处理。第 11 章讲压缩:离散余弦变换、二维 DCT 与图像压缩、Huffman 编码、改进的 DCT 与音频压缩。第 12 章讲特征值与奇异值:幂迭代、QR 算法、SVD 及其应用。第 13 章讲无约束优化。

这些章节的意义不在于让你手算一张图片的 DCT 系数,而在于告诉你:手机上那张被压到几百 KB 的照片,背后是 DCT 加量化加编码;“信号处理”这四个字,底层是一堆复指数和蝶形运算;推荐系统里那个“降维”,本质是奇异值分解。手册的价值就在这里——它把每个大词对应的习题,一步一步拆开了。

手册章节讲的核心工具现实中的影子
第 0 至 2 章浮点数、求根、线性方程组计算器的开方按钮、结构仿真
第 3 至 4 章插值、最小二乘、QR图像缩放、数据拟合曲线
第 5 至 8 章数值积分、ODE、PDE电路仿真、热传导模拟
第 9 至 11 章蒙特卡洛、FFT、DCT渲染采样、音频编码、图片压缩
第 12 至 13 章SVD、迭代优化降维、机器学习训练

4. 四个常见易混概念:答案手册不是万能钥匙

4.1 易混一:教师解答手册不等于学生版习题答案

易混点:两者都叫“答案”,都贴着课后题的编号。

为什么混:市面上流传的“答案”大多来源不明,有的只列最终结果,有的干脆是别人做的作业拍照。学生看到“第三版”“答案”几个字,很容易默认它们是一回事。

怎么区分:看它给的是“过程”还是“结果”。教师解答手册由教材配套编写,每道题给出完整的推导链条、中间量、必要时的算法说明,甚至包含计算机问题的命令和输出。学生整理版往往只有一个数字,运气好附带两行草稿。这个差别在数值分析里格外要命——一道题从 0.4667 变成 0.4666,中间可能隔着一个“该不该重选主元”的判断,只有过程能告诉你哪一步出了偏差。

还有一层容易被忽略:版本必须对得上。第三版的手册配第三版的题,题号、题量、甚至某些题目的参数都可能改过,拿错版本对不上号,白白浪费一晚上。

4.2 易混二:数值分析不等于高等数学或数学分析

易混点:教材里全是函数、导数、积分、矩阵,看着像高数的续集。

为什么混:它们研究的是同一批数学对象,符号长得几乎一样。

怎么区分:问的问题不同。数学分析问“这个极限存在吗、为什么存在、证明给我看”;数值分析问“这个极限如果存在,我用什么公式、多少步、误差多大能把它算出来”。前者追求严谨与普适,后者追求可执行与可接受。举个例子,数学分析会证明定积分的存在性并给出性质;数值分析会告诉你梯形公式的误差是 −(b−a)³f″(ξ)/12,所以被积函数二阶导大的地方要把区间切细。一个负责“对不对”,一个负责“值多少、准不准”。

理解了这层区别,你就不会在手册里到处找“证明”而找不到——它默认定理成立,重点全在“怎么算”。

4.3 易混三:算法正确不等于结果正确

易混点:公式没抄错、代码跑通了、程序没报错,就认为答案可信。

为什么混:在纯数学里,推导正确就等于结论正确,这个习惯被原封不动带到了编程里。

怎么区分:要区分“问题的敏感度”和“算法的稳定性”。有些问题本身就对扰动极其敏感——输入变一点点,输出变一大截,这叫条件数大,跟用什么算法无关。有些算法会主动放大误差,那叫不稳定。

手册第 2 章“误差来源”那一节就是讲这个,紧接着的 PA=LU 分解则是标准补救:选主元本质上是别拿一个特别小的数去做除数。同样的道理在解二次方程时也会撞见:

import math a, b, c = 1.0, -1e8, 1.0 d = math.sqrt(b*b - 4*a*c) x1 = (-b + d) / (2*a) # 两个大数相减,有效位被抵消 x2 = (-b - d) / (2*a) print(x1) # 1e8 附近 print(x2) # 1e-8 附近,但精度已经很差 print(x1 * x2) # 理论上等于 c/a = 1,实际会偏

这段代码按教科书公式原样实现,逻辑上毫无错误,问题出在 −b + d 这一步:b² 和 b²−4ac 极其接近,开方后相减,前面的有效数字被吃光。补救办法是用韦达定理——先算出数值稳定的那个根,另一个根直接用 c/(a·x₁) 得到。同一个方程,同一个数学结论,换一种算法,精度天差地别。这正是手册里“不要只对答案”的最强理由。

4.4 易混四:插值不等于拟合

易混点:两者都是“已知若干个点,求中间的值”。

为什么混:中文里都叫“拟合曲线”,画出来的图也长得像。

怎么区分:插值要求曲线严格穿过每一个数据点,误差在这几个点上必须为零;最小二乘拟合允许穿不过,它追求的是所有点的偏差平方和最小。什么时候用哪个,取决于你怎么看待数据:数据点本身精确可靠(比如查表得到的函数值),那就插值;数据点带有测量噪声(比如实验测出来的温度),那硬穿过去等于把噪声也一起穿进模型里,拟合反而更接近真相。

还有一条容易忘:插值不等于“次数越高越准”。等距节点上的高次插值会振荡,手册用 Chebyshev 节点和三次样条来对付这个毛病,本质都是“别让一条曲线承担太多责任”。

5. 怎么用这份答案才不算白拿:三个能落地的读法

5.1 先做后对:把“看答案”变成“验答案”

最浪费时间的用法,是题还没动笔就翻解答,顺着别人的思路看一遍,觉得“懂了”,合上书还是不会。大脑对“看懂”和“会做”的判断极不靠谱。

比较有效的一套流程是:先独立做,卡住之后给自己设一个时限,比如十五分钟,这期间只允许翻教材查定义,不许看解答;实在过不去,只看解答的前两行,拿到一个提示就合上,自己接着往下推;做完之后再整体对照,重点不看结果,看“我从哪一步开始偏的”。

偏的原因通常就三类:概念没吃透(比如不知道不动点迭代收敛需要导数绝对值小于 1)、计算失误(符号、下标、单位)、技巧没想到(不知道该用嵌套乘法、该换主元、该做变量替换)。把每一道卡住的题归到这三类里,攒够十道,你会发现自己踩的是同一批坑。

5.2 用代码复现:让纸面上的数字动起来

手册里有一类题标注为计算机问题,本来就是为上机准备的。这类题的价值远超“对答案”——它让你亲眼看见误差是怎么一步步长出来的。

拿二分法举例,书上手算三步就到头了,代码可以跑五十步、五百步:

def bisect(f, a, b, tol=1e-12, max_iter=200): """二分法求 f 在 [a, b] 上的零点,要求 f(a) * f(b) < 0""" if f(a) * f(b) >= 0: raise ValueError("区间两端同号,二分法不适用") for i in range(max_iter): m = (a + b) / 2 if f(m) == 0 or (b - a) / 2 < tol: return m, i + 1 if f(a) * f(m) < 0: b = m else: a = m return (a + b) / 2, max_iter f = lambda x: x**3 - 2*x - 5 root, steps = bisect(f, 2, 3) print(root, steps)

参数 a、b 是初始区间,必须保证两端异号,否则二分法无从下手;tol 控制精度,这里设成 1e-12;max_iter 是兜底,防止浮点精度到极限后区间再也缩不动、陷入死循环。返回值是近似根和实际迭代次数。

跑完之后拿它跟手册里手算的步数对照,你会发现一个有趣的现象:手算时精度提升得很快,因为人只保留几位小数;机器跑到后面会“卡住”不动了,因为 (b−a)/2 已经小到浮点数分辨不出来。这个卡点,就是第 1 章“精度极限”那一节想说的事。

5.3 顺着解答反推考点:出题人的心思藏在选择里

看解答还有一个高阶用法:不问“这步怎么来的”,问“为什么要这么选”。

为什么这道题的初始区间偏偏取在 1 到 2 之间?因为再往外扩,函数就变号两次了,二分法会失效。为什么这里要做一次变量替换?因为原式直接迭代不收敛,换元之后导数绝对值小于 1。为什么误差公式里出现的是四阶导而不是二阶导?因为这道题用的是 Simpson 法而不是梯形法。

这类追问能把一份“解题记录”读成“设计说明”。等你发现每道题的参数都不是随便给的,你对这门课的理解就换了一个层次——从“背方法”变成了“判断在什么条件下该用哪个方法”。这也正是这门课真正想训练的能力。

6. 什么时候该用、什么时候别用:把这份手册放对位置

先说该用的时候。

第一种情况是作业卡壳。你已经动过笔,知道自己卡在哪,但不确定是思路错还是算错,这时候翻到对应题号,只看关键的那一两步,再合上自己推完,效率最高。第二种是期末复习。按章节扫一遍题型,看每类题的“标准起手式”是什么——求根先看端点符号,解线性方程组先看主元大小,做插值先看节点分布,这套反射弧建立起来,考场上看题就不慌。第三种是自学。教材正文讲原理,手册讲落地,两者对照着读,抽象的定义会具体很多。

再说别用的时候。

最典型的是拿它当作业交差。抄一遍过程,当时觉得顺畅,考场上换个数字就原形毕露,因为跳过的正是“为什么这么想”的那一步。第二种是拿它替代教材。手册只回答“这题怎么解”,不回答“这个方法为什么成立、什么时候会失效”,跳过教材直接刷手册,等于只背结论不懂条件,遇到稍微变形的题就会误用。第三种是拿它当算法参考手册。它是教学材料,不是工程手册,里面的例子为了讲清楚概念都做了简化,真要落到生产环境,参数选择、数值稳定性、性能优化都得另找资料。

场景建议
题目卡住,想知道自己错在哪一步用,重点看推导的转折点
期末按章节过题型用,总结每类题的标准起手式
自学时配合教材对照阅读用,原理和落地各取所需
直接抄写交作业别用,抄完考场还是不会
取代教材,只刷题不看原理别用,会误用方法的适用条件
当作工程算法速查手册别用,教学例子做了简化

这里还有一条容易被忽略的边界:这门学问的知识“保质期”特别长。半个世纪过去,LU 分解、牛顿法、FFT 的核心思路几乎没有变,变的只是硬件跑得更快、能算的规模更大。所以在这份材料上花的功夫,回报周期是按十年计的——它不像某个框架的 API,明年就过时。

从那以后我每次拿到这类解答手册,都强制自己先做一遍再翻开,哪怕只在纸上写两行思路,也要留下自己的痕迹,再去对照答案里的推导。这样对完一遍,错的题才真正变成自己的。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进