
数值分析这门课可以说是理工科研究生和本科高年级学生里“挂科率”数得上号的一门硬课。当年我自己学的时候也干过到处搜“数值分析习题解答”这种事儿——倒不是想偷懒而是课后习题实在太多一道非线性方程的题可能要算一整页纸算完还不知道自己对不对。后来做了几年数值计算相关的开发又陆续帮不少学弟学妹辅导过这门课才慢慢摸清楚这类“习题解答资源”背后的门道。这篇东西不打算给你列什么网盘链接也不想搞什么“关注转发领取”那一套。我想跟你聊聊的是数值分析第5版这本教材的习题到底在考什么、配套习题解答应该怎么用、有哪些合法又省事的获取渠道以及最关键的——怎么才能真正把这些题做明白。如果你正在被这门课折磨或者准备考研复试被问到数值算法手推这篇文章应该能帮你省下不少瞎折腾的时间。1. 先别急着找答案习题解答到底解决的是什么问题1.1 数值分析的课后题为什么让人这么痛苦数值分析和其他数学课最大的区别在于它不追求“精确解”而是追求“足够好用的近似解”。这就导致课后习题的答案往往不是一个干净的整数或简单表达式而是一串小数、一个迭代表格、一张插值多项式甚至是一段程序输出。你算到第三步发现跟参考答案对不上根本分不清是自己公式记错了、舍入误差没控制好还是教材印错了。尤其是李庆扬、王能超、易大义这版《数值分析》第5版课后习题数量多、覆盖面广从第一章误差分析到最后一章特征值问题每章都有十几二十道题。很多题目还特意设计了“陷阱”比如某个迭代法不收敛、某个求积公式代数精度差一截目的是让你在计算过程中自己发现方法的局限性。这种题目光看答案没有用必须动手算、动手编程序才能理解出题人想让你踩的坑。1.2 习题解答的正确定位它是批改工具不是学习捷径我见过不少同学拿到习题解答之后直接开始“背题”把每个计算步骤背下来考试的时候照着默写。这方法应付开卷考试或许管用但闭卷考试或者复试面试环节一追问“为什么要选这个算法”立刻露馅。我自己使用习题解答的习惯是这样的先不看答案完整做一遍做不下去的时候只看答案里的“关键一步”把自己卡住的那个环节比如看到“这里用了Newton迭代初值选的是x01.5”然后合上答案继续算全部做完之后用解答来批改重点看自己错在哪个环节、是算法选错还是计算精度问题。这个方法我后面会展开讲但核心就一句话解答是拿来“对答案”的不是拿来“抄答案”的。1.3 为什么“免费下载第5版习题解答”这个需求长期存在说白了出版社官方确实很少单独出版配套习题解答。很多教师资源库里的答案是不对外的学生能接触到的“习题解答”大多是三种来源一是网友自己整理的PDF排版参差不齐错误不少二是培训机构或考研辅导机构出的讲义只覆盖重点章节三是某些网盘资料合集里混杂的老版本答案和现行第5版根本对不上号。这三种来源我都试过说实话坑远多于便利。后面我会专门写一节“避坑指南”帮你判断一份习题解答到底能不能用。2. 全章节核心考点与常见易错点拆解2.1 误差分析与数值稳定性看似送分实则在挖坑第一章习题看起来最简单无非是求绝对误差限、相对误差限、有效数字位数但错误率常年居高不下。最典型的一个坑就是“避免灾难性抵消”——两个接近相等的数相减相对误差会被急剧放大。比如计算√10001 - √10000如果直接造表用近似值相减有效数字几乎全丢但通过有理化变形换算成1/(√10001 √10000)精度就完全不一样了。做这类练习题时我建议你多问自己一句这个算法在极端参数下还能稳吗比如A10^8BA1在浮点数体系里B-A的结果是什么答案是0因为单精度浮点数根本存不下B和A的差值。习题解答里像这类涉及浮点数表示的题往往需要结合IEEE754标准去理解只看纸面推导容易忽略计算机实际存储带来的误差。2.2 非线性方程求根迭代法的收敛性判断是核心这一章几乎必考Newton迭代法、弦截法、二分法和不动点迭代。不少同学背得住公式却不知道怎么判断迭代是否收敛——更麻烦的是题目如果问“这个迭代格式为什么发散”很多人就懵了。我当年做习题时最深的体会是不动点迭代的收敛性关键看迭代函数φ(x)在不动点附近的导数绝对值是否小于1。但教材习题里经常出现一个“坑”就是给一个看似合理但导数恰好等于1的函数比如φ(x)x - f(x)这个格式是发散的。这种题光靠死记“|φ(x)| 1”还不够你得能算出来、能解释清楚。另一个高频考点是Newton迭代法的收敛阶。二阶收敛看起来比一阶收敛快很多但前提是单根如果是重根Newton法会退化为线性收敛习题里经常让学生通过修改迭代格式恢复二阶收敛性。我在实际工程计算中遇到过类似情况——求解一个化学反应平衡方程时遇到了重根直接上Newton法怎么都不收敛后来用带重数修正的格式才稳定下来。2.3 线性方程组直接法与迭代法条件数和收敛半径决定成败这部分内容是数值分析的重点章节也是习题量最大的章节之一。直接法部分Gauss消去、列主元消去、LU分解、追赶法都是常考形式。最容易出错的地方是LU分解中U矩阵的对角元计算——漏乘、错位很常见。还有追赶法很多题会专门出一道三对角方程组考察的是系数矩阵对角占优时追赶法的稳定性。迭代法部分Jacobi迭代和Gauss-Seidel迭代的收敛性判断是必考内容。很多同学只记结论“严格对角占优则Jacobi收敛”但习题里经常出现“Jordan块”型的矩阵这时谱半径计算就变得复杂了。SOR方法的最佳松弛因子ω的确定也是一道经典题需要算出迭代矩阵的谱半径并对ω求导。条件数的概念贯穿这一章习题里常让学生计算某个矩阵的∞范数或2范数条件数目的是理解矩阵病态对解的影响。我自己做数值实验时就踩过这样的坑一个条件数高达10^6的病态矩阵用普通消去法算出来的解几乎完全失真改用正则化或预处理之后才恢复正常。这个问题的本质就是算法再好也扛不住矩阵本身“不健康”。2.4 插值法Lagrange、Newton、Hermite与样条插值插值这一章的习题通常分两大类一类是求插值多项式另一类是估计插值余项。Lagrange插值基础但计算量大Newton插值则优势在于递推习题中常要求用差商表来构造多项式。Hermite插值是不少同学的痛点——它要求函数值和导数值同时被满足所以插值多项式的次数会翻倍。题目的典型考法是“已知四点函数值和其中两点导数值求三次Hermite插值多项式并估计余项”。这一章里最容易被忽略的是分段插值和三次样条——分段线性插值虽然简单但光滑性不足三次样条则要求在节点处二阶导数连续。习题解答里经常会出现需要解三对角方程组来求样条系数的题目这和前面讲的追赶法正好联动。2.5 曲线拟合与最小二乘法最小二乘拟合的核心难点不在于公式而在于选择正确的基函数。课堂上讲的线性最小二乘通常是指“关于参数线性”而不是“关于自变量线性”——也就是说你完全可以用多项式基函数x^0, x^1, x^2去做拟合哪怕你拟合的是指数趋势的数据。习题最常见的陷阱是给一组明显非线性分布的数据让学生用二次多项式拟合结果残差很大。解答里往往会讨论换成对数变换或者选其他基函数是否有更好效果。另一个高频题是“正交多项式拟合”——利用Legendre多项式或Chebyshev多项式做拟合这种方式的好处是法方程系数矩阵是稀疏的数值稳定性好。这部分在Matlab实验里尤其好体现后面我会给一个简单的代码示例。2.6 数值积分与数值微分梯形公式、Simpson公式、Romberg算法、Gauss求积公式是数值积分这一章的绝对主干。习题里常见的组合题型是给定一个积分分别用不同求积公式计算并比较精度。最有价值的一道经典题是“证明Simpson公式具有三次代数精度”这个证明过程会引导你理解代数精度、余项、节点选取之间的内在关系。Gauss求积公式的题目则通常需要求节点和权系数笨办法是解非线性方程组聪明办法是利用正交多项式来构造。数值微分容易被忽视但这几年考题经常出“用中心差商计算一阶导数并估计误差”。实际使用中步长h的选择是个大坑——h太大则截断误差大h太小则舍入误差大。习题解答中如果只给一个固定h一般不严谨优秀的解答会讨论如何选择最优步长。2.7 常微分方程数值解Euler法、RK族方法和稳定性ODE数值解是数值分析课程的重头戏之一。Euler法是最基础的起步方法但它的精度只有一阶。经典四阶Runge-Kutta法是要求重点掌握的习题里会让你算几步迭代过程。真正拉开差距的往往是“稳定性分析”——用显式方法解刚性方程时步长必须足够小否则数值解会完全震荡甚至发散。A-稳定性这个概念很多初学者理解不了。我后来用一个比较直观的方式理解了它如果方程本身是稳定的那么数值方法也应该保持稳定如果精确解趋于0而数值解在放大这个方法就是不适用的。习题解答中会通过画稳定域来分析Matlab实验课上也经常要求画出Euler法和RK4的稳定域。2.8 矩阵特征值问题这一章对很多同学来说是最“抽象”的。乘幂法求最大特征值反幂法求最小特征值和对应的特征向量QR算法求全部特征值。习题中常见的是用乘幂法迭代几步观察序列收敛情况。这类题目计算量大但本质套路固定归一化、迭代、再归一化。只要每一步都仔细做基本能拿到步骤分。但反幂法的“位移”技巧很多人会忽略——通过减去一个近似特征值的位移可以让目标特征值变成模最小然后加速迭代收敛。3. 用Matlab把习题做出来典型实验的完整思路3.1 为什么数值分析一定要配合Matlab实验“数值分析及其Matlab实验”这个关键词最近在检索里热度不低。很多学校都设置了配套实验课要求学生用Matlab实现教材里的核心算法。这其实是一种特别好的学习方式——手算只能算两三步算法全貌根本看不清楚写程序跑一遍马上就知道在哪个环节出问题。比如Newton迭代法手算三步可能还看不出收敛趋势但写个循环跑到10步打印出每一轮的x和f(x)立刻就能感受到二阶收敛“唰唰唰”变密的魅力。再比如用Gauss-Seidel迭代求解方程组如果矩阵不是严格对角占优你可能算了30步才发现根本不收敛——这类经验只有通过实验才能获得。3.2 实验一非线性方程求根的Newton法实现先给一个最简单的Matlab脚本解决教材第一章到第二章最经典的问题求解f(x)x^3 - 2x - 5 0的正根。f (x) x^3 - 2*x - 5; df (x) 3*x^2 - 2; x0 2.0; % 初值 tol 1e-10; max_iter 50; x x0; fprintf(迭代步 x_n |f(x_n)|\\n); for k 1:max_iter fx f(x); if abs(fx) tol fprintf(收敛于 x %.12f\\n, x); break; end x x - fx / df(x); fprintf(%3d %.12f %.2e\\n, k, x, abs(f(x))); end运行这段代码你会看到前几步的误差快速缩小从10^-1一路到10^-10附近——这就是二阶收敛的特征。如果换一个初值比如x0 0你可能会看到迭代发散这时候你再回头对照习题解答里“初值选取”那一节就会有完全不同的理解。我自己当年做这个实验时最大的收获就是明白了一个道理Newton法不是银弹初值选择是决定成败的关键。3.3 实验二Gauss-Seidel迭代与SOR的收敛对比线性方程组迭代法的实验适合拿一个经典的教科书矩阵来做比如三对角矩阵。可以先生成一个50×50的严格对角占优矩阵分别用Jacobi、Gauss-Seidel和SOR迭代求解对比迭代步数。n 50; A diag(4*ones(n,1)) diag(-1*ones(n-1,1),1) diag(-1*ones(n-1,1),-1); b ones(n,1); % 简单实现Gauss-Seidel迭代 x zeros(n,1); D diag(diag(A)); L tril(A,-1); U triu(A,1); tol 1e-8; max_iter 10000; for k 1:max_iter x_new (D L) \\ (-U*x b); if norm(x_new - x, inf) tol fprintf(Gauss-Seidel收敛于第%d步\\n, k); break; end x x_new; end你可以在循环外面加一个SOR的松弛因子omega变量试一下omega等于0.8、1.0、1.2、1.5时的表现。大多数情况下会看到omega 1即Gauss-Seidel虽然比Jacobi快但最优松弛因子能在更少的迭代步数里收敛。这类实验做完再看习题解答中关于SOR最优ω的计算就完全能对上了。3.4 实验三数值积分收敛阶的验证数值积分实验的核心目的是验证梯形公式是O(h^2)精度、Simpson公式是O(h^4)精度。你可以对同一个积分用不同等分数n去算观察误差变化f (x) exp(x); % 在[0,1]上积分精确值exp(1)-1 a 0; b 1; exact exp(1) - 1; fprintf( n 梯形误差 Simpson误差\\n); for n [4 8 16 32 64] x linspace(a,b,n1); h (b-a)/n; trap h * (sum(f(x)) - 0.5*(f(a)f(b))); s 0; for i 1:n s s h/6 * (f(x(i)) 4*f((x(i)x(i1))/2) f(x(i1))); end fprintf(%3d %.2e %.2e\\n, n, abs(trap-exact), abs(s-exact)); end跑完之后把两列误差打印出来你会看到梯形误差每加密一倍网格下降4倍左右Simpson误差下降16倍左右。这就是为什么习题里会反复出现“等分数n取多少才能达到精度要求”这类题目——因为不同方法的收敛速度差异巨大。做完这个实验你再看解答里的Romberg外推思想会觉得豁然开朗。4. 常见问题与排查技巧实录4.1 版本的匹配问题第5版和第4版差在哪很多人下载习题解答时压根没注意版本结果对不上号。这里给你一个判断方法翻开教材对比第一章的课后题数量和第几道题的内容。我记得第5版相比第4版在部分章节做了增删尤其线性方程组迭代法和插值这两章题目顺序有调整。如果你拿到的解答里题目编号对不上对应的题目内容也不完全一致那基本可以断定这份解答不是配套第5版的别硬用。4.2 解答里的错误率比你想象的高网上流传的习题解答尤其是网友手打的PDF错误率通常在每十题一两个这种量级。这在数值计算类习题里特别危险——因为结果差一个数量级或符号错了你可能完全看不出来。我的建议是对每一道关键习题至少用Matlab或Python验证一遍数值结果。很多习题的最终答案都是一个数值你写个几行的代码就能复算。如果你复算的结果和解答不一致先怀疑解答再怀疑自己的代码——两者都检查完了才敢确定到底谁对。4.3 那些“伪免费”的下载陷阱网上搜“免费下载”关键词跳出来的链接里混着大量“网盘分享”“付费社群”“关注公众号回复密码”之类的操作。这里我给你两个实用判断标准第一正规的配套教师资源一般是出版社官网或教师在课程平台上发布的不需要你转发拉人头第二真正想分享资料的人通常会把文档以PDF直接挂出来而不是让你私下添加微信。如果你花了不少时间在“注册-留言-等回复”上大概率是在浪费生命。4.4 高数基础对数值分析学习的影响数值分析和高等数学、线性代数关系特别密切。泰勒展开的余项、中值定理、函数连续性这些是理解截断误差的基础线性代数里的向量范数、矩阵范数、特征值分解则是迭代法收敛性分析的工具。如果你发现自己对某些习题的推导看不懂先回去翻高数和线代的教材不要硬啃。我自己给学弟学妹答疑时最常说的话就是“这个问题不是数值分析的问题是泰勒展开没学明白。”4.5 习题做不完怎么办优先级排序建议如果复习时间紧张我建议按以下优先级刷题线性方程组迭代法的收敛性判断和计算、Newton法和弦截法、插值多项式和余项估计、Simpson公式和Romberg算法、Euler法和RK4。这些是考研复试和期末考试的高频考点。至于QR算法、广义特征值这类偏冷门的内容至少要会默写算法步骤能算简单例题就够了。5. 关于“免费”资源渠道的诚实建议5.1 出版社官方渠道与教师公开资源最靠谱的获取方式其实是找你授课老师或助教要。很多学校在课程网站上会公开历年习题的部分答案或者老师会在课件里给出典型例题的完整解答步骤。这些内容虽然不全但针对性极强因为是老师亲手整理/校对的错误率远低于网上流传的版本。5.2 图书馆的电子教参和外文经典参考书如果你需要的是更严谨的习题解析我的建议是去图书馆数据库里找外文原版教材的solution manual。比如《Numerical Analysis》相关经典教材的教师手册在一些高校图书馆的数字资源平台里是可以合法访问的。这类资源虽然不能等同于李庆扬第5版的配套解答但思路和方法完全通用很多题目的本质是一样的。5.3 关于网盘资料集的“可用性”判断如果你确实要通过非官方渠道找资料我建议你设立一个筛选标准优先选择带“目录页码”、带“章节目录”、文件体积在10MB以内的PDF。体积太大往往是打包了无关内容体积太小可能是扫描版或者缺页。打开之后先翻到目录看章节是否齐全、题目数量是否与教材匹配、有无明显的整页空白或乱码。6. 实际操作中我自己的习惯与扩展建议6.1 把习题做成“错题本”而不是做题我跟很多人推荐过一个笨办法每道错题不仅记正确答案还要记下“我错在哪”。比如某个题我用了Jacobi迭代但矩阵不是严格对角占优导致发散我就记“以后看到非对角占优矩阵先试Gauss-Seidel或者SOR别直接上Jacobi”。这样一本错题本价值远超习题解答本身因为它记录的是你自己的思考轨迹。6.2 “做完题再看解答”这个流程值得严格执行最后再分享一个具体的操作经验准备一份习题解答的同时准备一个“封印”工具——比如把解答PDF放在另一个文件夹里做题的这一个小时坚决不打开。等做完一整章或者至少做完5道题之后再统一打开批改。这样做的原因是数值分析这类题的思维连贯性特别重要——如果你每做一道题就看一眼答案你的思路会被切割成碎片学到的只是孤立的知识点而不是完整的算法逻辑。我亲测下来“整章做完再开答案”的学习效果远好于“边做边对答案”。如果你能坚持这样刷完5章考前那种“什么都学过但什么都不确定”的焦虑感基本可以消除一半。