☰
数值分析第三版考点拆解:误差、迭代与插值答题模板
2026/11/3 5:40:42 网站建设 项目流程

简介:《数值分析(第三版)》配套教师解答手册,对应Timothy Sauer教材,面向学习数值计算方法的高校学生、任课教师及备考读者,用于核对课后习题、理解算法推导与误差分析。内容按章节组织,覆盖解方程中的二分法、固定点迭代、牛顿法,线性方程组的高斯消元与LU分解,插值与样条、最小二乘与QR分解,以及数值微分积分、常微分方程和边值问题等主题,便于对照教材梳理知识点并排查计算步骤。压缩包仅含1个PDF文件,大小约6.75MB,打开即可检索章节与题号。已有3384人学习下载,适合作为课程作业校对、复习提纲和教学参考,帮助读者从方法原理、精度限制到数值实验思路形成较完整的解题框架。

1. 分数从哪来:先认清这场考试的三类题

翻“数值分析 答案 第三版”翻得最勤的人,往往卡在第 0 章那几道不起眼的嵌套乘法和二进制转换上。原因很直接:后面的大题步骤长,写错一步还有过程分;前面这几道题只考结论,算错一位整题就归零。这门课的考试形态基本是三类:手算题(用一个式子反复代值,看你能不能一步步算准)、误差题(给你精度要求,让你推出步长或迭代次数)、判断题(说清某个方法收敛还是不收敛、几阶收敛)。它不考你会不会调用现成的库,考的是你能不能把过程写在纸上,让阅卷的人一眼看出你清楚自己在做什么。下面按模块把考点、真题和答题模板拆开,照着练即可。

2. 误差与浮点:Horner 计数、进制转换、机器精度

这一章的内容看着零散,实际上是一个连贯的链条:多项式怎么少算几步、数在机器里怎么存、存不下的时候误差从哪里来。考试把它拆成三道小题,每题 5 到 10 分,丢分率却高得离谱,因为大家觉得“这有什么好考的”,结果一算就错。

2.1 Horner 嵌套乘法:不但要算对,还得数对次数

把一个多项式改写成嵌套形式,是后面所有章节反复调用的基本操作。以 $6x^4+x^3+5x^2+x+1$ 为例,逐层提取 $x$:

$$P(x)=1+x\bigl(1+x(5+x(1+x\cdot 6))\bigr)$$

代入 $x=1/3$,从最内层往外算:$1+\tfrac13\cdot 6=3$,$5+\tfrac13\cdot 3=6$,$1+\tfrac13\cdot 6=3$,$1+\tfrac13\cdot 3=2$。答案是 2。手算时每一层只做一次乘加,中间结果都是整数,几乎不可能算错。

def horner(coeffs, x): """coeffs 按降幂排列,[6, 1, 5, 1, 1] 表示 6x^4+x^3+5x^2+x+1""" acc = coeffs[0] for c in coeffs[1:]: acc = acc * x + c # 每层一次乘法、一次加法 return acc print(horner([6, 1, 5, 1, 1], 1/3)) # 2.0

acc始终保存当前层的值,循环体固定执行“乘x再加下一项系数”两步,所以 $n$ 次多项式恰好 $n$ 次乘法、$n$ 次加法。这个计数结论要能当场背出来,因为题目经常直接问“比直接求值省了多少次乘法”。

真正拉开差距的是稀疏情形。比如 $P(x)=a_0+x^5(a_5+x^5(a_{10}+x^5a_{15}))$,考试会问你总共要做多少次乘法和加法。答案是先算 $x^2=x\cdot x$、$x^4=x^2\cdot x^2$、$x^5=x^4\cdot x$,这三次乘法由我们自己加,嵌套里三层贡献 3 次乘法和 3 次加法,合计 6 次乘法、3 次加法。同理,$x^7(a_7+x^5(a_{12}+x^5(a_{17}+x^5(a_{22}+x^5a_{27}))))$ 需要 $x^2,x^4,x^5,x^7$ 四次预计算,再加 5 乘 4 加,共 9 次乘法、4 次加法。

带基点的一般形式也要记:

$$P(x)=c_1+(x-r_1)\bigl(c_2+(x-r_2)(c_3+\cdots)\bigr)$$

公开答案给出的计数是 $n$ 次乘法、$2n$ 次加法——加法翻倍是因为每一层要算一次 $(x-r_i)$。这条结论在考卷上属于“背了就有、没背就猜”,务必记牢。

提示:数次数时先画括号层级,从最内层往外标,一层一层数,不要心算。

2.2 进制转换:整数除 2 取余,小数乘 2 取整

十进制转二进制有两套流程,绝不能混着用。整数部分反复除 2、记余数,最后把余数倒序读出来:$79\to 39\text{R}1\to 19\text{R}1\to 9\text{R}1\to 4\text{R}1\to 2\text{R}0\to 1\text{R}0\to 0\text{R}1$,所以 $79=(1001111)_2$。验证方法很省时间:从最高位加回去,看是不是 $64+8+4+2+1=79$。

小数部分反过来,反复乘 2、记整数位,顺序读出:$31/64$ 依次得到 $0,1,1,1,1,1$,所以 $(31/64)_{10}=(0.011111)_2$。这个数恰好是有限位,因为分母是 2 的幂。

def dec_to_bin(num, frac_bits=20): """把正十进制数转成二进制字符串,小数部分最多保留 frac_bits 位""" int_part = int(num) frac = num - int_part bits = [] if int_part == 0: bits.append('0') while int_part > 0: bits.append(str(int_part % 2)) # 余数低位先出 int_part //= 2 int_str = ''.join(reversed(bits)) # 逆序才是高位在前 frac_str = [] for _ in range(frac_bits): frac *= 2 b = int(frac) # 取整数位 frac_str.append(str(b)) frac -= b return int_str + '.' + ''.join(frac_str) print(dec_to_bin(79)) # 1001111.000... print(dec_to_bin(0.1)) # 0.00011001100110011001...

frac_bits控制小数保留位数,超过 20 位基本只是在看循环节。$0.1$ 转出来是 $0.0001100110011\ldots$,永远不会终止,这就是后面浮点误差的根源。

反方向(二进制转十进制)的大题才是拉分项,因为出题人喜欢给无限循环小数。常用解法是设未知数消循环节。比如 $(10111.01)_2$,整数部分 $10111=23$,小数部分设 $x=(0.01)_2$,则 $4x-x=(01)_2=1$,得 $x=1/3$,所以结果是 $70/3$。

同类题照着套:$(110.10)_2$ 设 $x=(0.10)_2$,$4x-x=(10)_2=2$,$x=2/3$,结果 $20/3$;$(111.001)_2$ 设 $x=(0.001)_2$,$8x-x=1$,$x=1/7$,结果 $7+1/7$。规律很固定:小数有 $k$ 位循环节,就乘 $2^k$ 再相减,一次方程就解得出来。

2.3 浮点数与精度丢失:ε_mach 到底是多少

双精度的尾数存 52 位,加上默认隐含的最高位 1,实际有效位是 53 位。机器精度 $\epsilon_{\text{mach}}=2^{-52}\approx 2.22\times10^{-16}$,这个数必须背下来,考试不会现场推。

舍入规则叫“舍入到最近”,判据看第 53 位:该位是 0 就舍,是 1 且后面还有非零位就进,正好是 1 后面全零(恰好一半)时,取偶数尾数。例如 $\text{fl}(1/3)$ 的二进制展开是 $0.010101\ldots$,第 53 位为 0,直接舍;而 $0.9$ 的第 53 位非零,必须进位,末位从 $\ldots1100$ 变成 $\ldots1101$。

真正考的是“精度丢失”这类计算题,公开答案里有几道很典型:

$$\text{fl}\bigl((1+(2^{-51}+2^{-53}))-1\bigr)=2^{-51}$$

因为 $1+2^{-51}+2^{-53}$ 存成双精度后,最后一位被舍掉,只留下 $2^{-51}$,减 1 之后误差完全暴露。而

$$\text{fl}\bigl((1+(2^{-51}+2^{-52}+2^{-53}))-1\bigr)=2^{-50}$$

三项相加正好凑成半个机器精度的整数倍,进位把尾数推到下一个二进制位,得到 $2^{-50}$。再把某个尾位换成 $2^{-54}$(第 53 位是 0),就不会进位,结果是 $2^{-51}+2^{-52}=3\epsilon_{\text{mach}}$。这三道的差别只在一个指数上,必须要能自己推一遍,不能靠背。

eps = 2.0 ** -52 # 2.22e-16 print((1 + (2**-51 + 2**-53)) - 1 == 2.0**-51) # True print((1 + (2**-51 + 2**-52 + 2**-53)) - 1) # 8.88e-16 == 2**-50

损失有效数字的经典场景是两个相近的数相减。多项式求和顺序不同,结果就不同:把 51 个 1 用 Horner 方式在 $x=1.00001$ 处求值,得到 $51.01275208274999$;而用闭式 $(x^{51}-1)/(x-1)$ 计算,两者相差约 $4.76\times10^{-12}$。改进方向是代数变形:$(1-\cos x)/x^2$ 在 $x$ 很小时直接算会损失有效数字,改写成 $2\sin^2(x/2)/x^2$ 就稳了。这类“改写公式”的题几乎每张卷子都有,答题时写清“分子分母同时乘以共轭”或“用半角公式”,过程分就到手了。

3. 解方程:二分法、不动点迭代、牛顿法

这一章是整本书考试占比最高的部分,通常能占到 25% 到 30%。套路极其固定:先用二分法把区间缩到足够小以缩小范围,再让牛顿法快速逼近精确值,中间还会让你证明某个不动点迭代收敛。这三件事必须能不看书写出来。

3.1 二分法:迭代次数是白送的分

误差界只有一条:迭代 $n$ 次后,$|x_n-r|\le (b-a)/2^{n+1}$。要让它小于容差 $\text{tol}$,解出 $2^{n+1}\ge (b-a)/\text{tol}$,再取整数。

以 $f(x)=x^3-x-1$ 在 $[1,2]$ 上求根、要求 $10^{-6}$ 为例:$(b-a)=1$,需要 $2^{n+1}\ge10^6$,即 $n+1\ge19.93$,取 $n=19$。这里最常出错的地方是“取整方向”:$19.93$ 必须向上取成 20 而不是 19,所以答案写“至少 20 次折半”。

手算过程也要会写。第一步 $f(1)=-1<0$,$f(2)=5>0$,取中点 $1.5$,$f(1.5)=3.375-1.5-1=0.875>0$,新区间 $[1,1.5]$;第二步中点 $1.25$,$f(1.25)=1.953125-1.25-1=-0.296875<0$,区间 $[1.25,1.5]$;第三步中点 $1.375$,$f=2.599609-1.375-1=0.224609>0$,区间 $[1.25,1.375]$;第四步中点 $1.3125$,$f=2.260986-2.3125=-0.051514<0$。真值约 $1.3247179572$,四步之后误差已经降到 $0.03$ 以内。

注意:二分法只能保证区间缩小,不能保证每一步都更接近根。判卷时会检查你有没有写“保留含根的那个半区间”,写错方向整题作废。

二分法还有一道很爱考的题:为什么二分法算到最后精度上不去?答案在教材 1.3 节——根附近 $|f|$ 的变化量会被浮点舍入吃掉,当区间宽度接近 $\epsilon_{\text{mach}}$ 量级时,再折半也分辨不出符号。这类题的关键词是“绝对误差下界”和“机器精度”。

3.2 不动点迭代:先看导数绝对值,再判收敛阶

把方程改写成 $x=g(x)$,迭代格式 $x_{k+1}=g(x_k)$。收敛判据只有一条:在不动点 $r$ 处若 $|g'(r)|<1$ 就局部收敛,$>1$ 就发散,等于 1 时要看更高阶导数。

收敛阶的判定同样是看导数:若 $g'(r)=g''(r)=\cdots=g^{(p-1)}(r)=0$ 且 $g^{(p)}(r)\ne0$,则 $p$ 阶收敛。这条结论在证明题里几乎必用。

几个必须记住的典型例子:

  • $g(x)=\frac12(x+\frac{2}{x})$ 求 $\sqrt2$。$g'(x)=\frac12(1-\frac{2}{x^2})$,在 $x=\sqrt2$ 处 $g'=0$,所以至少二阶收敛,这就是牛顿法的原型。
  • $g(x)=\frac{2}{x}$。$|g'(x)|=2/x^2$,在 $\sqrt2$ 处恰好等于 1,迭代在 $\sqrt2$ 附近反复跳动,不收敛。
  • $g(x)=1+\frac1x$。不动点是黄金比例 $\varphi\approx1.618$,$|g'|=1/x^2\approx0.382<1$,线性收敛,收敛因子就是这个数。
  • $g(x)=\cos x$ 在 $[0,1]$ 上,$|g'(x)|=|\sin x|\le\sin1\approx0.841<1$,收敛,且是线性的。

答题模板可以固定成三行:先写“令 $g(x)=\cdots$,则不动点满足 $x=g(x)$”;再算 $g'(x)$ 并给出 $|g'(r)|$ 的估计;最后下结论“因 $|g'|<1$,迭代局部收敛,收敛阶为 $p$”。

3.3 牛顿法:二次收敛有前提,三个场景会失效

迭代式 $x_{k+1}=x_k-\dfrac{f(x_k)}{f'(x_k)}$,本质是把 $g(x)=x-f(x)/f'(x)$ 代入不动点框架。因为 $g'(r)=0$,所以是二次收敛。

用 $f(x)=x^2-2$、初值 $x_0=1$ 走一遍:$x_1=1.5$,$x_2=1.416666\ldots$,$x_3=1.414215686\ldots$,$x_4=1.41421356237\ldots$。可以看到有效数字每步翻倍,前三步就从 1 位涨到 11 位。

def newton(f, df, x0, tol=1e-12, max_iter=50): x = x0 for k in range(max_iter): fx = f(x) if abs(fx) < tol: # 以残差作为停止准则 return x, k x = x - fx / df(x) # 牛顿更新 return x, max_iter root, steps = newton(lambda x: x*x - 2, lambda x: 2*x, 1.0) print(root, steps) # 1.4142135623730951, 4

tol用残差而不是步长,因为残差小不一定步长小;max_iter是防止在导数接近零时死循环的限制。若把停止准则换成 $|x_{k+1}-x_k|<\text{tol}$,收敛会早一到两步,误差大约多一个数量级——这是面试里常追问的细节。

失效场景要背三条。第一,$f'(x_k)=0$,比如 $f(x)=x^3$ 在根 $0$ 处导数为零,迭代变成 $x_{k+1}=\frac23x_k$,退化为线性收敛,收敛因子 $2/3$。第二,重根,$f(x)=(x-1)^2$ 时牛顿法同样降为线性,修正是把迭代改成 $x_{k+1}=x_k-m\dfrac{f(x_k)}{f'(x_k)}$,其中 $m$ 是重数。第三,初值太远,$f(x)=x^3-2x+2$ 从 $x_0=0$ 出发会掉进 $0\leftrightarrow1$ 的循环,永远出不来。这三条几乎年年考,问法一般是“举一个牛顿法失败的例子并说明原因”。

3.4 割线与混合方法:不算导数时怎么保证收敛

割线法用差商代替导数:

$$x_{k+1}=x_k-f(x_k)\frac{x_k-x_{k-1}}{f(x_k)-f(x_{k-1})}$$

需要两个初值,不需要解析导数。收敛阶是 $\frac{1+\sqrt5}{2}\approx1.618$,介于线性与二次之间,误差递推关系是 $e_{k+1}\approx C e_k e_{k-1}$。

拿 $f(x)=x^3-x-1$、$x_0=1,x_1=2$ 手算一步:$f(1)=-1$,$f(2)=5$,

$$x_2=2-5\cdot\frac{2-1}{5-(-1)}=2-\frac56=\frac76\approx1.1667$$

再算一步:$f(7/6)=1.5880-1.1667-1=-0.5787$,$x_3=1.1667-(-0.5787)\cdot\frac{-0.8333}{-5.5787}\approx1.2531$。两步从 2 逼近到 1.25,速度确实不如牛顿法,但胜在不需要求导。

再往前一步是 Brent 方法,它把二分法、割线法和反二次插值组合在一起,既保证区间一定缩小(二分法的稳健性),又在条件好的时候用插值加速。考卷上一般只要求说出“它兼有二分法的可靠性和割线法的速度”,不会让你手推。

4. 线性方程组、插值与数值积分

这一章是计算量最大的部分,也是“过程分”最集中的部分。三道大题通常是这样:一道 LU 分解或 PA=LU,一道插值误差估计,一道复合求积。共同点是需要你按固定流程写表格、写公式、代数值,一旦跳步骤,分就没了。

4.1 高斯消元与 LU/PA=LU:主元顺序决定会不会出错

消元要做大约 $n^3/3$ 次乘法,LU 分解把过程存下来:$A=LU$,$L$ 是单位下三角(对角线全 1),对角线以下保存消元时的乘子,$U$ 是上三角。

部分主元版本写成 $PA=LU$,$P$ 是置换矩阵,记录每一步的行交换。为什么必须换行?看这个例子:

$$A=\begin{pmatrix}10^{-20}&1\1&1\end{pmatrix}$$

不做主元选择时乘子是 $10^{20}$,第二步要算 $1-10^{20}$,这个数在双精度里直接等于 $-10^{20}$,原本的 1 被彻底吃掉,解出来完全失真。交换两行之后,主元变成 1,乘子是 $10^{-20}$,误差可控。这就是教材 2.3 节“误差来源”的核心:误差放大因子与主元大小直接相关,条件数 $\kappa(A)=|A||A^{-1}|$ 越大,右端项的微小扰动被放大得越厉害。

答题时把 $L$、$U$、$P$ 三个矩阵都写出来,并且验算 $PA=LU$ 或 $LUx=Pb$。阅卷时看到验算步骤通常会补分,因为很多人算完就停,结果错在最后一步置换没乘。

4.2 迭代法与对称正定矩阵:谱半径是唯一判据

雅可比迭代用上一轮的全体分量:

$$x_i^{(k+1)}=\frac{1}{a_{ii}}\Bigl(b_i-\sum_{j\ne i}a_{ij}x_j^{(k)}\Bigr)$$

高斯-赛德尔则立刻用刚算出的新分量,收敛通常更快。两者收敛的充要条件都是迭代矩阵的谱半径 $\rho(B)<1$;一个常用的充分条件是矩阵严格对角占优,即 $|a_{ii}|>\sum_{j\ne i}|a_{ij}|$。

典型考题:$A=\begin{pmatrix}4&-1&0\-1&4&-1\0&-1&4\end{pmatrix}$,判断雅可比迭代是否收敛。因为每行 $|4|>1+0$ 或 $|4|>1+1$,严格对角占优,收敛。更进一步,这个三对角矩阵的雅可比迭代矩阵谱半径是 $\cos(\pi/4)\approx0.707$,高斯-赛德尔是它的平方,约 $0.5$。能报出这个数,说明你真算过。

对称正定时用 Cholesky 分解 $A=R^{\mathsf T}R$,乘法量约 $n^3/6$,是 LU 的一半。判断正定可以用顺序主子式全大于零,也可以看所有特征值是否为正。这一步在最小二乘的正规方程里会再次出现,因为 $A^{\mathsf T}A$ 天然对称正定。

4.3 插值与样条:误差公式和节点选择

插值误差的标准形式:

$$f(x)-p_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{i=0}^{n}(x-x_i)$$

题干里如果给的是“用 $n+1$ 个节点做 $n$ 次插值,求误差上界”,答题就是把 $|f^{(n+1)}|$ 在区间上的最大值 $M_{n+1}$ 求出来,再把连乘项的最大值算出来,两者相除。

一道基础题:$f(x)=e^x$ 在 $[0,1]$ 上用两个节点做线性插值,误差上界是多少?$M_2=e$,连乘项 $\max|(x-0)(x-1)|=1/4$,所以上界是 $\frac{e}{2!}\cdot\frac14=\frac{e}{8}\approx0.34$。这个界很松,但考试要的就是这个推导过程。

节点等距时会出现龙格现象:$f(x)=\frac{1}{1+25x^2}$ 在 $[-1,1]$ 上取 11 个等距节点,插值多项式在两端剧烈振荡,最大误差反而随节点增多而变大。解决办法是换切比雪夫节点

$$x_i=\cos\frac{(2i+1)\pi}{2n+2},\quad i=0,1,\ldots,n$$

此时连乘项的最大值降到 $2^{1-n}$ 量级,误差上界变成 $\frac{1}{2^n(n+1)!}\max|f^{(n+1)}|$。这两个公式要背到能默写,因为考试常直接问“为什么不用等距节点”。

三次样条是另一块必考内容。$n$ 段三次多项式共 $4n$ 个系数,方程来自:每个节点插值 $2n$ 个条件,内部节点一阶、二阶导数连续各 $n-1$

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询