<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Sleepyfish</title><description>Own the moment</description><link>https://www.sleepyfish2031.top/</link><language>zh_CN</language><item><title>Chapter3：解线性方程组的迭代法</title><link>https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter3/</link><guid isPermaLink="true">https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter3/</guid><description>对大规模、稀疏线性方程组，直接法往往代价太高，迭代法通过构造一个序列，让它逐步逼近真解</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;概述&lt;/h2&gt;
&lt;p&gt;这一章的核心是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;对大规模、稀疏线性方程组 $Ax=b$，直接法往往代价太高，迭代法通过构造一个序列 $x^{(0)},x^{(1)},\dots$，让它逐步逼近真解 $x^*$。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;迭代法要回答两个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;收不收敛&lt;/strong&gt;：当 $k\to\infty$ 时，是否有 $x^{(k)}\to x^*$？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;收敛多快&lt;/strong&gt;：为了达到给定精度，要迭代多少步？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本章主要方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Jacobi 迭代法&lt;/strong&gt;：每一步完全使用上一轮旧值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gauss-Seidel 迭代法&lt;/strong&gt;：一旦算出新分量，立刻使用新值&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SOR 松弛法&lt;/strong&gt;：在 Gauss-Seidel 的基础上引入松弛因子 $\omega$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;最速下降法&lt;/strong&gt;：把对称正定线性方程组转成二次函数极小值问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;共轭梯度法&lt;/strong&gt;：对对称正定稀疏系统特别重要的迭代法&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一章的主线可以概括成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ax=b
  ↓ 改写成不动点问题
x=Mx+g
  ↓ 迭代
x^{(k+1)}=Mx^{(k)}+g
  ↓ 分析误差
x^{(k)}-x^* = M^k(x^{(0)}-x^*)
  ↓ 判断收敛
ρ(M)&amp;lt;1
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A6%82%E8%BF%B0&quot;&gt;概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%AF%BE%E5%89%8D%E8%BF%87%E6%B8%A1%E6%9D%A1%E4%BB%B6%E6%95%B0%E4%B8%8E%E8%BF%AD%E4%BB%A3%E6%B3%95%E5%8A%A8%E6%9C%BA&quot;&gt;课前过渡：条件数与迭代法动机&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9D%A1%E4%BB%B6%E6%95%B0%E7%9A%84%E6%84%8F%E4%B9%89&quot;&gt;条件数的意义&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#hilbert-%E7%9F%A9%E9%98%B5%E7%97%85%E6%80%81%E7%9F%A9%E9%98%B5%E7%9A%84%E7%BB%8F%E5%85%B8%E4%BE%8B%E5%AD%90&quot;&gt;Hilbert 矩阵：病态矩阵的经典例子&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%9D%9E%E6%96%B9%E9%98%B5%E6%96%B9%E7%A8%8B%E7%BB%84%E4%B8%8E%E7%BA%BF%E6%80%A7%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98&quot;&gt;非方阵方程组与线性最小二乘&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%AD%A6%E8%BF%AD%E4%BB%A3%E6%B3%95&quot;&gt;为什么要学迭代法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BF%AD%E4%BB%A3%E6%B3%95%E7%9A%84%E4%B8%80%E8%88%AC%E5%BD%A2%E5%BC%8F&quot;&gt;迭代法的一般形式&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BB%8E%E6%96%B9%E7%A8%8B%E7%BB%84%E5%88%B0%E4%B8%8D%E5%8A%A8%E7%82%B9%E8%BF%AD%E4%BB%A3&quot;&gt;从方程组到不动点迭代&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%AF%AF%E5%B7%AE%E9%80%92%E6%8E%A8&quot;&gt;误差递推&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#jacobi-%E8%BF%AD%E4%BB%A3%E6%B3%95&quot;&gt;Jacobi 迭代法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%86%E9%87%8F%E5%BD%A2%E5%BC%8F&quot;&gt;分量形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9F%A9%E9%98%B5%E5%BD%A2%E5%BC%8F&quot;&gt;矩阵形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%97%E6%B3%95%E6%AD%A5%E9%AA%A4&quot;&gt;算法步骤&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B-1jacobi-%E8%BF%AD%E4%BB%A3%E6%B1%82%E4%B8%89%E5%85%83%E6%96%B9%E7%A8%8B%E7%BB%84&quot;&gt;例 1：Jacobi 迭代求三元方程组&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#gauss-seidel-%E8%BF%AD%E4%BB%A3%E6%B3%95&quot;&gt;Gauss-Seidel 迭代法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%86%E9%87%8F%E5%BD%A2%E5%BC%8F-1&quot;&gt;分量形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9F%A9%E9%98%B5%E5%BD%A2%E5%BC%8F-1&quot;&gt;矩阵形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B-2gauss-seidel-%E8%BF%AD%E4%BB%A3%E7%BB%A7%E7%BB%AD%E6%B1%82%E4%BE%8B-1&quot;&gt;例 2：Gauss-Seidel 迭代继续求例 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9D%BE%E5%BC%9B%E6%B3%95%E4%B8%8E-sor-%E8%BF%AD%E4%BB%A3&quot;&gt;松弛法与 SOR 迭代&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BB%8E-gauss-seidel-%E5%88%B0%E6%9D%BE%E5%BC%9B%E4%BF%AE%E6%AD%A3&quot;&gt;从 Gauss-Seidel 到松弛修正&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sor-%E7%9A%84%E5%88%86%E9%87%8F%E5%BD%A2%E5%BC%8F&quot;&gt;SOR 的分量形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#sor-%E7%9A%84%E7%9F%A9%E9%98%B5%E5%BD%A2%E5%BC%8F&quot;&gt;SOR 的矩阵形式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B-3sor-%E8%BF%AD%E4%BB%A3&quot;&gt;例 3：SOR 迭代&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9D%BE%E5%BC%9B%E5%9B%A0%E5%AD%90%E5%A6%82%E4%BD%95%E9%80%89&quot;&gt;松弛因子如何选&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BF%AD%E4%BB%A3%E6%B3%95%E7%9A%84%E6%94%B6%E6%95%9B%E6%9D%A1%E4%BB%B6&quot;&gt;迭代法的收敛条件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%B0%B1%E5%8D%8A%E5%BE%84&quot;&gt;谱半径&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%80%E8%88%AC%E8%BF%AD%E4%BB%A3%E6%B3%95%E7%9A%84%E5%85%85%E8%A6%81%E6%9D%A1%E4%BB%B6&quot;&gt;一般迭代法的充要条件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B8%B8%E7%94%A8%E5%88%A4%E5%88%AB%E6%9D%A1%E4%BB%B6&quot;&gt;常用判别条件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%81%9C%E6%9C%BA%E5%87%86%E5%88%99%E4%B8%8D%E8%A6%81%E5%8F%AA%E7%9C%8B%E5%89%8D%E5%90%8E%E4%B8%A4%E6%AD%A5%E5%B7%AE&quot;&gt;停机准则：不要只看前后两步差&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%80%E9%80%9F%E4%B8%8B%E9%99%8D%E6%B3%95&quot;&gt;最速下降法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AF%B9%E7%A7%B0%E6%AD%A3%E5%AE%9A%E6%96%B9%E7%A8%8B%E7%BB%84%E4%B8%8E%E4%BA%8C%E6%AC%A1%E5%87%BD%E6%95%B0&quot;&gt;对称正定方程组与二次函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%B4%9F%E6%A2%AF%E5%BA%A6%E6%96%B9%E5%90%91&quot;&gt;负梯度方向&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%80%E4%BC%98%E6%AD%A5%E9%95%BF&quot;&gt;最优步长&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%80%E9%80%9F%E4%B8%8B%E9%99%8D%E5%8F%AF%E8%83%BD%E5%BE%88%E6%85%A2&quot;&gt;为什么最速下降可能很慢&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95&quot;&gt;共轭梯度法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#a-%E5%85%B1%E8%BD%AD%E6%96%B9%E5%90%91&quot;&gt;$A$-共轭方向&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%8F&quot;&gt;算法公式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B-4%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95%E4%B8%A4%E6%AD%A5%E5%BE%97%E5%88%B0%E7%B2%BE%E7%A1%AE%E8%A7%A3&quot;&gt;例 4：共轭梯度法两步得到精确解&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%BA%94%E7%94%A8%E5%AE%9E%E4%BE%8Bpoisson-%E6%96%B9%E7%A8%8B%E4%B8%8E%E9%9D%99%E7%94%B5%E5%9C%BA&quot;&gt;应用实例：Poisson 方程与静电场&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%AC%E7%AB%A0%E7%9F%A5%E8%AF%86%E6%A1%86%E6%9E%B6&quot;&gt;本章知识框架&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;课前过渡：条件数与迭代法动机&lt;/h2&gt;
&lt;h3&gt;条件数的意义&lt;/h3&gt;
&lt;p&gt;上节课最后得到过扰动估计：若&lt;/p&gt;
&lt;p&gt;$$
A(x+\delta x)=b+\delta b,
$$&lt;/p&gt;
&lt;p&gt;则在合适范数下有&lt;/p&gt;
&lt;p&gt;$$
\frac{|\delta x|}{|x|}
\leq
|A|,|A^{-1}|\frac{|\delta b|}{|b|}.
$$&lt;/p&gt;
&lt;p&gt;定义&lt;/p&gt;
&lt;p&gt;$$
\mathrm{cond}(A)=|A|,|A^{-1}|.
$$&lt;/p&gt;
&lt;p&gt;它表示：右端项 $b$ 的相对扰动可能被放大多少倍后传递到解 $x$ 上。&lt;/p&gt;
&lt;p&gt;直观理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$b$ 往往来自测量，例如外力、载荷、边界条件&lt;/li&gt;
&lt;li&gt;$A$ 是模型离散后得到的系数矩阵&lt;/li&gt;
&lt;li&gt;$x$ 是真正想求的未知量&lt;/li&gt;
&lt;li&gt;如果 $\mathrm{cond}(A)$ 很大，测量误差会被严重放大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以条件数大的问题，本身就很难算准。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Slides 图占位：插入【lesson4】上课手写 PPT 演示第 2-3 页，内容为 $A(x+\delta x)=b+\delta b$ 与 $\mathrm{cond}(A)=|A||A^{-1}|$ 的手写推导。]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:::WARNING
条件数大时，不要指望单纯换一个求解程序就能彻底解决问题。&lt;/p&gt;
&lt;p&gt;可能原因有两类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;模型 / 离散 / 变量选择导致矩阵写得不好&lt;/li&gt;
&lt;li&gt;原问题本身就是病态问题，任何合理建模都会导致接近奇异的矩阵&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第一类可以尝试换模型、换变量、重新尺度化；第二类需要正则化、约束、先验信息或更换问题表述。
:::&lt;/p&gt;
&lt;h3&gt;Hilbert 矩阵：病态矩阵的经典例子&lt;/h3&gt;
&lt;p&gt;Hilbert 矩阵定义为&lt;/p&gt;
&lt;p&gt;$$
H_{ij}=\frac{1}{i+j-1},\qquad 1\le i,j\le n.
$$&lt;/p&gt;
&lt;p&gt;三阶 Hilbert 矩阵为&lt;/p&gt;
&lt;p&gt;$$
H_3=\begin{bmatrix}
1 &amp;amp; \frac12 &amp;amp; \frac13\
\frac12 &amp;amp; \frac13 &amp;amp; \frac14\
\frac13 &amp;amp; \frac14 &amp;amp; \frac15
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;四阶 Hilbert 矩阵为&lt;/p&gt;
&lt;p&gt;$$
H_4=\begin{bmatrix}
1 &amp;amp; \frac12 &amp;amp; \frac13 &amp;amp; \frac14\
\frac12 &amp;amp; \frac13 &amp;amp; \frac14 &amp;amp; \frac15\
\frac13 &amp;amp; \frac14 &amp;amp; \frac15 &amp;amp; \frac16\
\frac14 &amp;amp; \frac15 &amp;amp; \frac16 &amp;amp; \frac17
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;MATLAB 中可以直接用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hilb(3)
hilb(4)
cond(hilb(4))
cond(hilb(10))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;课堂演示中的数量级：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\mathrm{cond}(H_3)\approx 5.24\times 10^2$&lt;/li&gt;
&lt;li&gt;$\mathrm{cond}(H_4)\approx 1.55\times 10^4$&lt;/li&gt;
&lt;li&gt;$\mathrm{cond}(H_{10})\approx 1.60\times 10^{13}$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明条件数增长极快。双精度浮点数大约只有 $15\sim16$ 位有效数字，若误差被放大 $10^{13}$ 倍，最后可能只剩下很少几位可信数字。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Slides 图占位：插入【lesson4】上课手写 PPT 演示第 7、11、12 页，内容为 Hilbert 矩阵定义、$H_3$ 书写、MATLAB &lt;code&gt;cond(hilb(4))&lt;/code&gt; 与 &lt;code&gt;cond(hilb(10))&lt;/code&gt; 输出。]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;非方阵方程组与线性最小二乘&lt;/h3&gt;
&lt;p&gt;前面主要讨论 $A$ 是方阵时的 $Ax=b$。实际中也常见非方阵：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方程数多于未知数：超定方程组&lt;/li&gt;
&lt;li&gt;方程数少于未知数：欠定方程组&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;课堂举了线性回归的例子。&lt;/p&gt;
&lt;p&gt;假设有 12 个月销量数据，希望拟合直线&lt;/p&gt;
&lt;p&gt;$$
y_i=ax_i+b,
qquad i=1,2,\dots,12.
$$&lt;/p&gt;
&lt;p&gt;未知量只有两个：&lt;/p&gt;
&lt;p&gt;$$
\begin{bmatrix}a\ b\end{bmatrix},
$$&lt;/p&gt;
&lt;p&gt;但方程有 12 个：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
y_1=a\cdot 1+b,\
y_2=a\cdot 2+b,\
\cdots\
y_{12}=a\cdot 12+b.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;写成矩阵形式：&lt;/p&gt;
&lt;p&gt;$$
A=\begin{bmatrix}
1&amp;amp;1\
2&amp;amp;1\
\vdots&amp;amp;\vdots\
12&amp;amp;1
\end{bmatrix},\qquad
x=\begin{bmatrix}a\ b\end{bmatrix},\qquad
b=\begin{bmatrix}y_1\ y_2\ \vdots\ y_{12}\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;通常没有精确解，于是求最小二乘解：&lt;/p&gt;
&lt;p&gt;$$
\min_x|Ax-b|_2^2.
$$&lt;/p&gt;
&lt;p&gt;正规方程为&lt;/p&gt;
&lt;p&gt;$$
A^TAx=A^Tb.
$$&lt;/p&gt;
&lt;p&gt;若 $A^TA$ 可逆，则&lt;/p&gt;
&lt;p&gt;$$
x=(A^TA)^{-1}A^Tb.
$$&lt;/p&gt;
&lt;p&gt;这也可以看成广义逆的一种形式。&lt;/p&gt;
&lt;p&gt;:::WARNING
正规方程是最小二乘的直接做法，思路简单，但稳定性不够好。&lt;/p&gt;
&lt;p&gt;原因是 $A^TA$ 会放大条件数问题。实际计算中更常用 QR 分解或 SVD，这部分后续章节会继续讨论。
:::&lt;/p&gt;
&lt;h3&gt;为什么要学迭代法&lt;/h3&gt;
&lt;p&gt;第二章的直接法，例如 Gaussian 消去、LU 分解，理论上可以给出精确解。问题在于：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;计算量大&lt;/strong&gt;：一般规模下复杂度约为 $O(n^3)$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;会破坏稀疏性&lt;/strong&gt;：原来大量为零的元素，在消去过程中可能变成非零元素&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大规模稀疏系统无法承受填充&lt;/strong&gt;：例如流体计算、结构力学、偏微分方程离散后，矩阵规模可能极大&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;稀疏矩阵的核心价值在于“只存非零元”。如果直接法造成大量 fill-in，就会让存储量和计算量暴涨。&lt;/p&gt;
&lt;p&gt;迭代法的思想是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不对矩阵做大规模分解，尽量保留 $A$ 的稀疏结构，只通过矩阵-向量运算逐步逼近解。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;迭代法的一般形式&lt;/h2&gt;
&lt;h3&gt;从方程组到不动点迭代&lt;/h3&gt;
&lt;p&gt;设线性方程组&lt;/p&gt;
&lt;p&gt;$$
Ax=b.
$$&lt;/p&gt;
&lt;p&gt;若能将它等价改写为&lt;/p&gt;
&lt;p&gt;$$
x=Mx+g,
$$&lt;/p&gt;
&lt;p&gt;则可以从任意初值 $x^{(0)}$ 出发，构造迭代序列：&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=Mx^{(k)}+g,\qquad k=0,1,2,\dots
$$&lt;/p&gt;
&lt;p&gt;这里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$M$ 称为 &lt;strong&gt;迭代矩阵&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$g$ 是常向量&lt;/li&gt;
&lt;li&gt;$x^{(0)}$ 是初始猜测&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若 $x^{(k)}\to x^&lt;em&gt;$，并且 $x^&lt;/em&gt;=Mx^&lt;em&gt;+g$，那么 $x^&lt;/em&gt;$ 就是原方程组的解。&lt;/p&gt;
&lt;p&gt;:::TIP
初值 $x^{(0)}$ 理论上可以任取。&lt;/p&gt;
&lt;p&gt;实际计算中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若有物理经验，尽量取接近真实解的初值&lt;/li&gt;
&lt;li&gt;全零初值很常见，但有时过于特殊&lt;/li&gt;
&lt;li&gt;随机初值或全一初值也可以作为尝试
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;误差递推&lt;/h3&gt;
&lt;p&gt;设真解为 $x^*$，满足&lt;/p&gt;
&lt;p&gt;$$
x^&lt;em&gt;=Mx^&lt;/em&gt;+g.
$$&lt;/p&gt;
&lt;p&gt;迭代式减去不动点方程：&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}-x^&lt;em&gt;=M(x^{(k)}-x^&lt;/em&gt;).
$$&lt;/p&gt;
&lt;p&gt;递推得到&lt;/p&gt;
&lt;p&gt;$$
x^{(k)}-x^&lt;em&gt;=M^k(x^{(0)}-x^&lt;/em&gt;).
$$&lt;/p&gt;
&lt;p&gt;所以迭代能否收敛，关键看&lt;/p&gt;
&lt;p&gt;$$
M^k\to 0.
$$&lt;/p&gt;
&lt;p&gt;如果存在某个矩阵范数使&lt;/p&gt;
&lt;p&gt;$$
|M|&amp;lt;1,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
|x^{(k)}-x^&lt;em&gt;|\le |M|^k|x^{(0)}-x^&lt;/em&gt;|\to 0.
$$&lt;/p&gt;
&lt;p&gt;这给出一个很直观的充分条件。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Jacobi 迭代法&lt;/h2&gt;
&lt;h3&gt;分量形式&lt;/h3&gt;
&lt;p&gt;设&lt;/p&gt;
&lt;p&gt;$$
A=(a_{ij})_{n\times n},\qquad b=(b_1,b_2,\dots,b_n)^T.
$$&lt;/p&gt;
&lt;p&gt;第 $i$ 个方程为&lt;/p&gt;
&lt;p&gt;$$
a_{i1}x_1+\cdots+a_{ii}x_i+\cdots+a_{in}x_n=b_i.
$$&lt;/p&gt;
&lt;p&gt;若 $a_{ii}\ne 0$，把 $x_i$ 解出来：&lt;/p&gt;
&lt;p&gt;$$
x_i=\frac{1}{a_{ii}}\left(b_i-\sum_{j\ne i}a_{ij}x_j\right).
$$&lt;/p&gt;
&lt;p&gt;Jacobi 迭代的做法是：右端全部使用上一轮旧值。&lt;/p&gt;
&lt;p&gt;$$
x_i^{(k+1)}=\frac{1}{a_{ii}}\left(b_i-\sum_{j\ne i}a_{ij}x_j^{(k)}\right),
\qquad i=1,2,\dots,n.
$$&lt;/p&gt;
&lt;p&gt;也可以写成&lt;/p&gt;
&lt;p&gt;$$
x_i^{(k+1)}=-\frac{1}{a_{ii}}\sum_{j\ne i}a_{ij}x_j^{(k)}+\frac{b_i}{a_{ii}}.
$$&lt;/p&gt;
&lt;h3&gt;矩阵形式&lt;/h3&gt;
&lt;p&gt;记&lt;/p&gt;
&lt;p&gt;$$
D=\mathrm{diag}(a_{11},a_{22},\dots,a_{nn}).
$$&lt;/p&gt;
&lt;p&gt;则 Jacobi 迭代为&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=(I-D^{-1}A)x^{(k)}+D^{-1}b.
$$&lt;/p&gt;
&lt;p&gt;也就是&lt;/p&gt;
&lt;p&gt;$$
M_J=I-D^{-1}A,
\qquad
g_J=D^{-1}b.
$$&lt;/p&gt;
&lt;p&gt;若把矩阵分裂写成&lt;/p&gt;
&lt;p&gt;$$
A=D-L-U,
$$&lt;/p&gt;
&lt;p&gt;其中 $L$ 是严格下三角部分取负，$U$ 是严格上三角部分取负，则&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=D^{-1}(L+U)x^{(k)}+D^{-1}b.
$$&lt;/p&gt;
&lt;p&gt;:::NOTE
Jacobi 的特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个分量 $x_i^{(k+1)}$ 都只依赖上一轮 $x^{(k)}$&lt;/li&gt;
&lt;li&gt;各分量之间可以并行计算&lt;/li&gt;
&lt;li&gt;需要同时保存旧向量和新向量&lt;/li&gt;
&lt;li&gt;收敛速度通常较慢
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;算法步骤&lt;/h3&gt;
&lt;p&gt;输入：$A,b,x^{(0)}$，最大迭代次数 $N$，容忍精度 &lt;code&gt;tol&lt;/code&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对 $k=0,1,2,\dots,N-1$&lt;/li&gt;
&lt;li&gt;对 $i=1,2,\dots,n$，计算&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
x_i^{(k+1)}=\frac{1}{a_{ii}}\left(b_i-\sum_{j\ne i}a_{ij}x_j^{(k)}\right).
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;计算残差&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
r^{(k+1)}=b-Ax^{(k+1)}.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;若 $|r^{(k+1)}|&amp;lt;\text{tol}$，停止。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::WARNING
使用 Jacobi 前至少要保证 $a_{ii}\ne 0$。若对角元为零，可以尝试交换方程顺序。方程顺序改变后，迭代矩阵也会改变，收敛性可能随之改变。
:::&lt;/p&gt;
&lt;h3&gt;例 1：Jacobi 迭代求三元方程组&lt;/h3&gt;
&lt;p&gt;求解&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
10x_1-x_2-2x_3=72,\
-x_1+10x_2-2x_3=83,\
-x_1-x_2+5x_3=42.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;解出各分量：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
x_1^{(k+1)}=0.1x_2^{(k)}+0.2x_3^{(k)}+7.2,\
x_2^{(k+1)}=0.1x_1^{(k)}+0.2x_3^{(k)}+8.3,\
x_3^{(k+1)}=0.2x_1^{(k)}+0.2x_2^{(k)}+8.4.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;取&lt;/p&gt;
&lt;p&gt;$$
x^{(0)}=(0,0,0)^T.
$$&lt;/p&gt;
&lt;p&gt;第一步：&lt;/p&gt;
&lt;p&gt;$$
x^{(1)}=(7.2,8.3,8.4)^T.
$$&lt;/p&gt;
&lt;p&gt;第二步：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
x_1^{(2)}&amp;amp;=0.1\times 8.3+0.2\times 8.4+7.2=9.71,\
x_2^{(2)}&amp;amp;=0.1\times 7.2+0.2\times 8.4+8.3=10.70,\
x_3^{(2)}&amp;amp;=0.2\times 7.2+0.2\times 8.3+8.4=11.50.
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;继续迭代可得：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$k$&lt;/th&gt;
&lt;th&gt;$x_1^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_2^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_3^{(k)}$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;7.2000&lt;/td&gt;
&lt;td&gt;8.3000&lt;/td&gt;
&lt;td&gt;8.4000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;9.7100&lt;/td&gt;
&lt;td&gt;10.7000&lt;/td&gt;
&lt;td&gt;11.5000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;10.5700&lt;/td&gt;
&lt;td&gt;11.5700&lt;/td&gt;
&lt;td&gt;12.4820&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;10.8535&lt;/td&gt;
&lt;td&gt;11.8534&lt;/td&gt;
&lt;td&gt;12.8282&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;10.9510&lt;/td&gt;
&lt;td&gt;11.9510&lt;/td&gt;
&lt;td&gt;12.9414&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;10.9834&lt;/td&gt;
&lt;td&gt;11.9834&lt;/td&gt;
&lt;td&gt;12.9804&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;10.9944&lt;/td&gt;
&lt;td&gt;11.9981&lt;/td&gt;
&lt;td&gt;12.9934&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;10.9981&lt;/td&gt;
&lt;td&gt;11.9941&lt;/td&gt;
&lt;td&gt;12.9978&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;10.9994&lt;/td&gt;
&lt;td&gt;11.9994&lt;/td&gt;
&lt;td&gt;12.9992&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;精确解为&lt;/p&gt;
&lt;p&gt;$$
x^*=(11,12,13)^T.
$$&lt;/p&gt;
&lt;p&gt;可以看到，Jacobi 迭代逐渐靠近精确解。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Gauss-Seidel 迭代法&lt;/h2&gt;
&lt;p&gt;Jacobi 的问题在于：计算 $x_2^{(k+1)}$ 时，明明 $x_1^{(k+1)}$ 已经算出来了，却仍然使用旧值 $x_1^{(k)}$。&lt;/p&gt;
&lt;p&gt;Gauss-Seidel 的思想是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;只要新值已经算出，后面的分量立刻使用新值。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;分量形式&lt;/h3&gt;
&lt;p&gt;Gauss-Seidel 迭代为&lt;/p&gt;
&lt;p&gt;$$
x_i^{(k+1)}=\frac{1}{a_{ii}}\left(
b_i-
\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-
\sum_{j=i+1}^{n}a_{ij}x_j^{(k)}
\right).
$$&lt;/p&gt;
&lt;p&gt;这里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$j&amp;lt;i$ 的分量已经更新，用 $x_j^{(k+1)}$&lt;/li&gt;
&lt;li&gt;$j&amp;gt;i$ 的分量尚未更新，用 $x_j^{(k)}$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;矩阵形式&lt;/h3&gt;
&lt;p&gt;仍记&lt;/p&gt;
&lt;p&gt;$$
A=D-L-U.
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
(D-L)x^{(k+1)}=Ux^{(k)}+b.
$$&lt;/p&gt;
&lt;p&gt;因此&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=(D-L)^{-1}Ux^{(k)}+(D-L)^{-1}b.
$$&lt;/p&gt;
&lt;p&gt;即&lt;/p&gt;
&lt;p&gt;$$
M_{GS}=(D-L)^{-1}U,
\qquad
g_{GS}=(D-L)^{-1}b.
$$&lt;/p&gt;
&lt;p&gt;:::TIP
Gauss-Seidel 的两个优势：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通常比 Jacobi 快&lt;/li&gt;
&lt;li&gt;可以原地更新，只需要保存一个向量 $x$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但它不保证总是比 Jacobi 收敛，也存在 Jacobi 收敛而 Gauss-Seidel 发散的例子。
:::&lt;/p&gt;
&lt;h3&gt;例 2：Gauss-Seidel 迭代继续求例 1&lt;/h3&gt;
&lt;p&gt;仍解&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
10x_1-x_2-2x_3=72,\
-x_1+10x_2-2x_3=83,\
-x_1-x_2+5x_3=42.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;取 $x^{(0)}=(0,0,0)^T$。&lt;/p&gt;
&lt;p&gt;第一步：&lt;/p&gt;
&lt;p&gt;$$
x_1^{(1)}=\frac{1}{10}(72)=7.2000.
$$&lt;/p&gt;
&lt;p&gt;计算 $x_2^{(1)}$ 时已经使用新值 $x_1^{(1)}$：&lt;/p&gt;
&lt;p&gt;$$
x_2^{(1)}=\frac{1}{10}(x_1^{(1)}+2x_3^{(0)}+83)
=\frac{1}{10}(7.2000+83)=9.0200.
$$&lt;/p&gt;
&lt;p&gt;计算 $x_3^{(1)}$ 时继续使用新值 $x_1^{(1)},x_2^{(1)}$：&lt;/p&gt;
&lt;p&gt;$$
x_3^{(1)}=\frac{1}{5}(x_1^{(1)}+x_2^{(1)}+42)
=\frac{1}{5}(7.2000+9.0200+42)=11.6440.
$$&lt;/p&gt;
&lt;p&gt;迭代结果：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$k$&lt;/th&gt;
&lt;th&gt;$x_1^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_2^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_3^{(k)}$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;td&gt;0.0000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;7.2000&lt;/td&gt;
&lt;td&gt;9.0200&lt;/td&gt;
&lt;td&gt;11.6440&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;10.4308&lt;/td&gt;
&lt;td&gt;11.6719&lt;/td&gt;
&lt;td&gt;12.8050&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;10.9313&lt;/td&gt;
&lt;td&gt;11.9572&lt;/td&gt;
&lt;td&gt;12.9778&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;10.9913&lt;/td&gt;
&lt;td&gt;11.9947&lt;/td&gt;
&lt;td&gt;12.9972&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;10.9989&lt;/td&gt;
&lt;td&gt;11.9993&lt;/td&gt;
&lt;td&gt;12.9996&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;10.9999&lt;/td&gt;
&lt;td&gt;11.9999&lt;/td&gt;
&lt;td&gt;13.0000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;和 Jacobi 相比，Gauss-Seidel 在这个例子中明显更快。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;松弛法与 SOR 迭代&lt;/h2&gt;
&lt;h3&gt;从 Gauss-Seidel 到松弛修正&lt;/h3&gt;
&lt;p&gt;Gauss-Seidel 每一步会给出一个修正量&lt;/p&gt;
&lt;p&gt;$$
\Delta x=x_{GS}^{(k+1)}-x^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;松弛法把修正量乘上一个参数 $\omega$：&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=x^{(k)}+\omega\Delta x.
$$&lt;/p&gt;
&lt;p&gt;也就是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\omega=1$：普通 Gauss-Seidel&lt;/li&gt;
&lt;li&gt;$0&amp;lt;\omega&amp;lt;1$：低松弛，步子变小&lt;/li&gt;
&lt;li&gt;$1&amp;lt;\omega&amp;lt;2$：超松弛，即 SOR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SOR 全称为 &lt;strong&gt;Successive Over-Relaxation&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;SOR 的分量形式&lt;/h3&gt;
&lt;p&gt;$$
x_i^{(k+1)}=(1-\omega)x_i^{(k)}+
\frac{\omega}{a_{ii}}
\left(
b_i-
\sum_{j=1}^{i-1}a_{ij}x_j^{(k+1)}-
\sum_{j=i+1}^{n}a_{ij}x_j^{(k)}
\right).
$$&lt;/p&gt;
&lt;p&gt;这可以理解成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;新值 = 旧值 + ω × Gauss-Seidel 修正量
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;SOR 的矩阵形式&lt;/h3&gt;
&lt;p&gt;仍设&lt;/p&gt;
&lt;p&gt;$$
A=D-L-U.
$$&lt;/p&gt;
&lt;p&gt;SOR 迭代可以写成&lt;/p&gt;
&lt;p&gt;$$
(D-\omega L)x^{(k+1)}=[(1-\omega)D+\omega U]x^{(k)}+\omega b.
$$&lt;/p&gt;
&lt;p&gt;所以迭代矩阵为&lt;/p&gt;
&lt;p&gt;$$
M_\omega=(D-\omega L)^{-1}[(1-\omega)D+\omega U].
$$&lt;/p&gt;
&lt;p&gt;右端项为&lt;/p&gt;
&lt;p&gt;$$
g_\omega=\omega(D-\omega L)^{-1}b.
$$&lt;/p&gt;
&lt;h3&gt;例 3：SOR 迭代&lt;/h3&gt;
&lt;p&gt;取&lt;/p&gt;
&lt;p&gt;$$
\omega=1.4,
\qquad
x^{(0)}=(1,1,1)^T,
$$&lt;/p&gt;
&lt;p&gt;求解&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
2x_1-x_2=1,\
-x_1+2x_2-x_3=0,\
-x_2+2x_3=1.8.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;由 SOR 公式得&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
x_1^{(k+1)}=-0.4x_1^{(k)}+0.7(1+x_2^{(k)}),\
x_2^{(k+1)}=-0.4x_2^{(k)}+0.7(x_1^{(k+1)}+x_3^{(k)}),\
x_3^{(k+1)}=-0.4x_3^{(k)}+0.7(1.8+x_2^{(k+1)}).
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;第一步：&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
x_1^{(1)}&amp;amp;=-0.4+0.7(1+1)=1,\
x_2^{(1)}&amp;amp;=-0.4+0.7(1+1)=1,\
x_3^{(1)}&amp;amp;=-0.4+0.7(1.8+1)=1.56.
\end{aligned}
$$&lt;/p&gt;
&lt;p&gt;继续迭代：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$k$&lt;/th&gt;
&lt;th&gt;$x_1^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_2^{(k)}$&lt;/th&gt;
&lt;th&gt;$x_3^{(k)}$&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;td&gt;1.5600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1.0000&lt;/td&gt;
&lt;td&gt;1.3920&lt;/td&gt;
&lt;td&gt;1.6184&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1.2744&lt;/td&gt;
&lt;td&gt;1.4682&lt;/td&gt;
&lt;td&gt;1.6404&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1.2180&lt;/td&gt;
&lt;td&gt;1.4136&lt;/td&gt;
&lt;td&gt;1.5934&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1.2023&lt;/td&gt;
&lt;td&gt;1.3916&lt;/td&gt;
&lt;td&gt;1.6068&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;1.1932&lt;/td&gt;
&lt;td&gt;1.4034&lt;/td&gt;
&lt;td&gt;1.6007&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1.2051&lt;/td&gt;
&lt;td&gt;1.4027&lt;/td&gt;
&lt;td&gt;1.6016&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;1.1999&lt;/td&gt;
&lt;td&gt;1.4000&lt;/td&gt;
&lt;td&gt;1.5994&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;1.2000&lt;/td&gt;
&lt;td&gt;1.3996&lt;/td&gt;
&lt;td&gt;1.6001&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;精确解为&lt;/p&gt;
&lt;p&gt;$$
x^*=(1.2,1.4,1.6)^T.
$$&lt;/p&gt;
&lt;p&gt;第 9 步已经非常接近真解。&lt;/p&gt;
&lt;h3&gt;松弛因子如何选&lt;/h3&gt;
&lt;p&gt;SOR 的效果高度依赖 $\omega$。&lt;/p&gt;
&lt;p&gt;一般事实：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;收敛必要条件：$0&amp;lt;\omega&amp;lt;2$&lt;/li&gt;
&lt;li&gt;当 $A$ 为对称正定矩阵时，SOR 在 $0&amp;lt;\omega&amp;lt;2$ 下收敛&lt;/li&gt;
&lt;li&gt;$\omega=1$ 退化为 Gauss-Seidel&lt;/li&gt;
&lt;li&gt;$\omega$ 太接近 $2$ 可能导致振荡或发散&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当 $A$ 是某些标准三对角矩阵时，可以估计最佳松弛因子：&lt;/p&gt;
&lt;h1&gt;$$
\omega_{\mathrm{opt}}&lt;/h1&gt;
&lt;p&gt;\frac{2}{1+\sqrt{1-\rho(B)^2}},
$$&lt;/p&gt;
&lt;p&gt;其中 $B$ 是 Jacobi 迭代矩阵。&lt;/p&gt;
&lt;p&gt;:::NOTE
实际计算中，$\omega$ 往往靠问题结构和试算选择。&lt;/p&gt;
&lt;p&gt;老师课堂给出的经验是：大规模问题中 $\omega$ 常常会取得比较接近 $2$，例如 $1.9$ 以上，但必须小于 $2$，并且要结合具体矩阵结构试算。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;迭代法的收敛条件&lt;/h2&gt;
&lt;h3&gt;谱半径&lt;/h3&gt;
&lt;p&gt;设 $A$ 的特征值为&lt;/p&gt;
&lt;p&gt;$$
\lambda_1,\lambda_2,\dots,\lambda_n.
$$&lt;/p&gt;
&lt;p&gt;定义矩阵 $A$ 的 &lt;strong&gt;谱半径&lt;/strong&gt; 为&lt;/p&gt;
&lt;p&gt;$$
\rho(A)=\max_{1\le i\le n}|\lambda_i|.
$$&lt;/p&gt;
&lt;p&gt;谱半径和矩阵范数有重要关系：&lt;/p&gt;
&lt;p&gt;$$
\rho(A)\le |A|.
$$&lt;/p&gt;
&lt;p&gt;并且对任意 $\varepsilon&amp;gt;0$，存在某种矩阵范数，使&lt;/p&gt;
&lt;p&gt;$$
|A|\le \rho(A)+\varepsilon.
$$&lt;/p&gt;
&lt;p&gt;因此，谱半径是判断迭代矩阵长期作用效果的核心量。&lt;/p&gt;
&lt;h3&gt;一般迭代法的充要条件&lt;/h3&gt;
&lt;p&gt;对迭代&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=Mx^{(k)}+g,
$$&lt;/p&gt;
&lt;p&gt;若对任意初值 $x^{(0)}$ 都收敛到唯一不动点，则充要条件为&lt;/p&gt;
&lt;p&gt;$$
\rho(M)&amp;lt;1.
$$&lt;/p&gt;
&lt;p&gt;理由很直接：&lt;/p&gt;
&lt;p&gt;$$
x^{(k)}-x^&lt;em&gt;=M^k(x^{(0)}-x^&lt;/em&gt;).
$$&lt;/p&gt;
&lt;p&gt;所以必须有&lt;/p&gt;
&lt;p&gt;$$
M^k\to 0.
$$&lt;/p&gt;
&lt;p&gt;而矩阵幂 $M^k\to 0$ 的充要条件就是&lt;/p&gt;
&lt;p&gt;$$
\rho(M)&amp;lt;1.
$$&lt;/p&gt;
&lt;p&gt;:::TIP
实用判断层次：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若能算出 $\rho(M)$，看 $\rho(M)&amp;lt;1$&lt;/li&gt;
&lt;li&gt;若不方便算谱半径，可以找一个范数验证 $|M|&amp;lt;1$&lt;/li&gt;
&lt;li&gt;$|M|&amp;lt;1$ 是充分条件，$\rho(M)&amp;lt;1$ 是充要条件
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;常用判别条件&lt;/h3&gt;
&lt;p&gt;设 $Ax=b$。&lt;/p&gt;
&lt;h4&gt;严格对角占优&lt;/h4&gt;
&lt;p&gt;若对每一行都有&lt;/p&gt;
&lt;p&gt;$$
|a_{ii}|&amp;gt;\sum_{j\ne i}|a_{ij}|,
$$&lt;/p&gt;
&lt;p&gt;则称 $A$ 严格对角占优。&lt;/p&gt;
&lt;p&gt;若 $A$ 严格对角占优，则 Jacobi 与 Gauss-Seidel 迭代均收敛。&lt;/p&gt;
&lt;h4&gt;不可约弱对角占优&lt;/h4&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
|a_{ii}|\ge \sum_{j\ne i}|a_{ij}|
$$&lt;/p&gt;
&lt;p&gt;对所有行成立，并且至少有一行严格成立，同时矩阵不可约，则称为不可约弱对角占优。&lt;/p&gt;
&lt;p&gt;在这种情况下，Jacobi 与 Gauss-Seidel 也有收敛性保证。&lt;/p&gt;
&lt;h4&gt;对称正定&lt;/h4&gt;
&lt;p&gt;若 $A$ 是对称正定矩阵，则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gauss-Seidel 迭代收敛&lt;/li&gt;
&lt;li&gt;SOR 迭代在 $0&amp;lt;\omega&amp;lt;2$ 时收敛&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::WARNING
对称正定不能直接保证 Jacobi 一定收敛。&lt;/p&gt;
&lt;p&gt;判断 Jacobi 时仍要看对应迭代矩阵 $M_J$ 的谱半径，或者使用对角占优等充分条件。
:::&lt;/p&gt;
&lt;h4&gt;方程顺序会影响收敛&lt;/h4&gt;
&lt;p&gt;同一个方程组，如果交换方程顺序，解不变，但迭代矩阵会改变。&lt;/p&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接法通常不太关心方程顺序对收敛的影响&lt;/li&gt;
&lt;li&gt;迭代法的收敛性可能因方程顺序改变而改变&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际写程序前，常常会通过重排、预处理、尺度化来改善迭代性质。&lt;/p&gt;
&lt;h3&gt;停机准则：不要只看前后两步差&lt;/h3&gt;
&lt;p&gt;教材给出了误差估计：若 $|M|&amp;lt;1$，则&lt;/p&gt;
&lt;p&gt;$$
|x^{(k)}-x^*|\le
\frac{|M|}{1-|M|}|x^{(k)}-x^{(k-1)}|.
$$&lt;/p&gt;
&lt;p&gt;因此在 $|M|$ 不太接近 1 时，可以用&lt;/p&gt;
&lt;p&gt;$$
|x^{(k)}-x^{(k-1)}|&amp;lt;\varepsilon
$$&lt;/p&gt;
&lt;p&gt;作为停止依据。&lt;/p&gt;
&lt;p&gt;但老师课堂特别强调：实际编程时，不应只用前后两步差作为停机准则。&lt;/p&gt;
&lt;p&gt;更可靠的做法是看 &lt;strong&gt;残差&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;$$
r^{(k)}=b-Ax^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;常用停机准则：&lt;/p&gt;
&lt;p&gt;$$
|r^{(k)}|&amp;lt;\text{tol},
$$&lt;/p&gt;
&lt;p&gt;或相对残差：&lt;/p&gt;
&lt;p&gt;$$
\frac{|b-Ax^{(k)}|}{|b|}&amp;lt;\text{tol}.
$$&lt;/p&gt;
&lt;p&gt;:::WARNING
前后两步差很小，只说明迭代序列局部变化很慢。&lt;/p&gt;
&lt;p&gt;如果收敛非常慢，$x^{(k)}$ 和 $x^{(k-1)}$ 可能已经很接近，但它们离真解还很远。&lt;/p&gt;
&lt;p&gt;实际程序建议同时设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;残差阈值 &lt;code&gt;tol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;最大迭代次数 &lt;code&gt;max_iter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;必要时记录残差曲线
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;最速下降法&lt;/h2&gt;
&lt;h3&gt;对称正定方程组与二次函数&lt;/h3&gt;
&lt;p&gt;设 $A$ 对称正定。&lt;/p&gt;
&lt;p&gt;考虑二次函数&lt;/p&gt;
&lt;p&gt;$$
\varphi(x)=\frac12x^TAx-b^Tx.
$$&lt;/p&gt;
&lt;p&gt;它的梯度为&lt;/p&gt;
&lt;p&gt;$$
\nabla\varphi(x)=Ax-b.
$$&lt;/p&gt;
&lt;p&gt;令梯度为零：&lt;/p&gt;
&lt;p&gt;$$
\nabla\varphi(x)=0
\quad\Longleftrightarrow\quad
Ax=b.
$$&lt;/p&gt;
&lt;p&gt;由于 $A$ 对称正定，$\varphi(x)$ 是严格凸二次函数，存在唯一全局极小值点。&lt;/p&gt;
&lt;p&gt;所以求解 $Ax=b$ 等价于求&lt;/p&gt;
&lt;p&gt;$$
\min_x \varphi(x).
$$&lt;/p&gt;
&lt;h3&gt;负梯度方向&lt;/h3&gt;
&lt;p&gt;在点 $x^{(k)}$，下降最快方向是负梯度方向：&lt;/p&gt;
&lt;p&gt;$$
-\nabla\varphi(x^{(k)})=b-Ax^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;记残差&lt;/p&gt;
&lt;p&gt;$$
r^{(k)}=b-Ax^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;则最速下降法沿 $r^{(k)}$ 前进：&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=x^{(k)}+\alpha_k r^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;这里 $\alpha_k$ 是步长。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[Slides 图占位：插入课堂手写示意图：对称正定二次函数像一个碗，从 $x^{(0)}$ 沿负梯度方向下降。]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;最优步长&lt;/h3&gt;
&lt;p&gt;最速下降法每一步选择当前方向上的最佳步长：&lt;/p&gt;
&lt;p&gt;$$
\alpha_k=\arg\min_{\alpha}\varphi(x^{(k)}+\alpha r^{(k)}).
$$&lt;/p&gt;
&lt;p&gt;代入并对 $\alpha$ 求导，可得&lt;/p&gt;
&lt;p&gt;$$
\alpha_k=
\frac{(r^{(k)},r^{(k)})}{(Ar^{(k)},r^{(k)})}.
$$&lt;/p&gt;
&lt;p&gt;因此迭代公式为&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=
x^{(k)}+
\frac{(r^{(k)},r^{(k)})}{(Ar^{(k)},r^{(k)})}r^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;:::NOTE
这里的内积为&lt;/p&gt;
&lt;p&gt;$$
(x,y)=x^Ty=\sum_{i=1}^n x_iy_i.
$$
:::&lt;/p&gt;
&lt;h3&gt;为什么最速下降可能很慢&lt;/h3&gt;
&lt;p&gt;若 $A$ 的最大特征值和最小特征值分别为&lt;/p&gt;
&lt;p&gt;$$
\lambda_{\max},\lambda_{\min},
$$&lt;/p&gt;
&lt;p&gt;则最速下降的收敛速度受&lt;/p&gt;
&lt;p&gt;$$
\frac{\lambda_{\max}-\lambda_{\min}}{\lambda_{\max}+\lambda_{\min}}
$$&lt;/p&gt;
&lt;p&gt;控制。&lt;/p&gt;
&lt;p&gt;若 $\lambda_{\max}\gg\lambda_{\min}$，这个比例接近 1，收敛会很慢。&lt;/p&gt;
&lt;p&gt;几何图像：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果等高线接近圆形，负梯度方向几乎直指极小值&lt;/li&gt;
&lt;li&gt;如果等高线是很扁的椭圆，最速下降会在谷底两侧来回“之”字形摆动&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;[Slides 图占位：插入课堂手写示意图：椭圆等高线、负梯度方向与最速下降的锯齿形路径。]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这解释了为什么最速下降法虽然简单，但实际大规模计算中常常不够快。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;共轭梯度法&lt;/h2&gt;
&lt;h3&gt;$A$-共轭方向&lt;/h3&gt;
&lt;p&gt;最速下降法每一步都沿当前负梯度方向走，容易在狭长椭圆等高线中来回摆动。&lt;/p&gt;
&lt;p&gt;共轭梯度法的改进思想是：选择一组关于 $A$ 共轭的搜索方向。&lt;/p&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
d_i^TAd_j=0,
\qquad i\ne j,
$$&lt;/p&gt;
&lt;p&gt;则称 $d_i,d_j$ 关于 $A$ 共轭，也叫 $A$-正交。&lt;/p&gt;
&lt;p&gt;当 $A$ 对称正定时，&lt;/p&gt;
&lt;p&gt;$$
(x,y)_A=x^TAy
$$&lt;/p&gt;
&lt;p&gt;可以看成一种新的内积。&lt;/p&gt;
&lt;p&gt;所以 $A$-共轭本质上是在被 $A$ 改变尺度后的空间里正交。&lt;/p&gt;
&lt;p&gt;:::TIP
普通正交：&lt;/p&gt;
&lt;p&gt;$$
d_i^Td_j=0.
$$&lt;/p&gt;
&lt;p&gt;$A$-共轭：&lt;/p&gt;
&lt;p&gt;$$
d_i^TAd_j=0.
$$&lt;/p&gt;
&lt;p&gt;可以把 $A$ 理解成把空间“压扁 / 拉伸”的尺度矩阵。
:::&lt;/p&gt;
&lt;h3&gt;算法公式&lt;/h3&gt;
&lt;p&gt;共轭梯度法适用于 $A$ 对称正定。&lt;/p&gt;
&lt;p&gt;取初值 $x^{(0)}$，令&lt;/p&gt;
&lt;p&gt;$$
r^{(0)}=b-Ax^{(0)},
\qquad
d^{(0)}=r^{(0)}.
$$&lt;/p&gt;
&lt;p&gt;第 $k$ 步：&lt;/p&gt;
&lt;p&gt;$$
\alpha_k=\frac{(r^{(k)},r^{(k)})}{(d^{(k)},Ad^{(k)})},
$$&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=x^{(k)}+\alpha_k d^{(k)},
$$&lt;/p&gt;
&lt;p&gt;$$
r^{(k+1)}=r^{(k)}-\alpha_kAd^{(k)},
$$&lt;/p&gt;
&lt;p&gt;$$
\beta_k=\frac{(r^{(k+1)},r^{(k+1)})}{(r^{(k)},r^{(k)})},
$$&lt;/p&gt;
&lt;p&gt;$$
d^{(k+1)}=r^{(k+1)}+\beta_kd^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;这是常用实现形式。&lt;/p&gt;
&lt;p&gt;课本也写成等价形式：&lt;/p&gt;
&lt;p&gt;$$
\beta_{k-1}=-\frac{(r^{(k)},Ad^{(k-1)})}{(d^{(k-1)},Ad^{(k-1)})},
$$&lt;/p&gt;
&lt;p&gt;$$
d^{(k)}=r^{(k)}+\beta_{k-1}d^{(k-1)},
$$&lt;/p&gt;
&lt;p&gt;$$
\lambda_k=\frac{(r^{(k)},d^{(k)})}{(d^{(k)},Ad^{(k)})},
$$&lt;/p&gt;
&lt;p&gt;$$
x^{(k+1)}=x^{(k)}+\lambda_kd^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;:::NOTE
共轭梯度法的重要性质：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;精确算术下，$n$ 维对称正定系统最多 $n$ 步得到精确解&lt;/li&gt;
&lt;li&gt;实际浮点计算中受舍入误差影响，通常作为迭代法使用&lt;/li&gt;
&lt;li&gt;每步主要需要矩阵-向量乘 $Ad^{(k)}$，适合大规模稀疏矩阵
:::&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;例 4：共轭梯度法两步得到精确解&lt;/h3&gt;
&lt;p&gt;求解&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
3x_1-x_2=2,\
-x_1+x_2=0.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;即&lt;/p&gt;
&lt;p&gt;$$
A=\begin{bmatrix}3&amp;amp;-1\-1&amp;amp;1\end{bmatrix},
\qquad
b=\begin{bmatrix}2\0\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;取&lt;/p&gt;
&lt;p&gt;$$
x^{(0)}=(0,0)^T.
$$&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
r^{(0)}=b-Ax^{(0)}=(2,0)^T,
\qquad
d^{(0)}=(2,0)^T.
$$&lt;/p&gt;
&lt;p&gt;第一步：&lt;/p&gt;
&lt;p&gt;$$
\alpha_0=\frac{(r^{(0)},d^{(0)})}{(d^{(0)},Ad^{(0)})}=\frac{4}{12}=\frac13.
$$&lt;/p&gt;
&lt;p&gt;$$
x^{(1)}=x^{(0)}+\alpha_0d^{(0)}=
(0,0)^T+\frac13(2,0)^T=
\left(\frac23,0\right)^T.
$$&lt;/p&gt;
&lt;p&gt;残差：&lt;/p&gt;
&lt;p&gt;$$
r^{(1)}=b-Ax^{(1)}=\left(0,\frac23\right)^T.
$$&lt;/p&gt;
&lt;p&gt;计算共轭修正：&lt;/p&gt;
&lt;p&gt;$$
\beta_0=-\frac{(r^{(1)},Ad^{(0)})}{(d^{(0)},Ad^{(0)})}
=\frac19.
$$&lt;/p&gt;
&lt;p&gt;$$
d^{(1)}=r^{(1)}+\beta_0d^{(0)}
=\left(0,\frac23\right)^T+\frac19(2,0)^T
=\left(\frac29,\frac23\right)^T.
$$&lt;/p&gt;
&lt;p&gt;第二步：&lt;/p&gt;
&lt;p&gt;$$
\alpha_1=rac{(r^{(1)},d^{(1)})}{(d^{(1)},Ad^{(1)})}
=\frac32.
$$&lt;/p&gt;
&lt;p&gt;$$
x^{(2)}=x^{(1)}+\alpha_1d^{(1)}
=\left(\frac23,0\right)^T+rac32\left(\frac29,\frac23\right)^T
=(1,1)^T.
$$&lt;/p&gt;
&lt;p&gt;因此两步得到精确解：&lt;/p&gt;
&lt;p&gt;$$
x^*=(1,1)^T.
$$&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;应用实例：Poisson 方程与静电场&lt;/h2&gt;
&lt;p&gt;课本最后给出一个静电场问题。&lt;/p&gt;
&lt;p&gt;设平面上有一对正负电荷，它们周围形成电场。电势 $u(x,y)$ 满足 Poisson 方程：&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial^2u}{\partial x^2}+\frac{\partial^2u}{\partial y^2}
=-\frac{\rho}{\varepsilon_p}.
$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\rho(x,y)$ 是电荷密度&lt;/li&gt;
&lt;li&gt;$\varepsilon_p$ 是介质电容常数&lt;/li&gt;
&lt;li&gt;边界条件为 $u=0$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用二阶中心差分离散二阶导数：&lt;/p&gt;
&lt;p&gt;$$
\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}
+
\frac{u_{i,j+1}-2u_{i,j}+u_{i,j-1}}{h^2}
=-\frac{\rho_{ij}}{\varepsilon_p}.
$$&lt;/p&gt;
&lt;p&gt;整理得五点差分格式：&lt;/p&gt;
&lt;p&gt;$$
u_{i+1,j}+u_{i-1,j}+u_{i,j+1}+u_{i,j-1}-4u_{i,j}
=h^2\left(-\frac{\rho}{\varepsilon_p}\right)_{ij}.
$$&lt;/p&gt;
&lt;p&gt;把所有内部网格点未知量排成向量 $u$，就得到一个线性方程组：&lt;/p&gt;
&lt;p&gt;$$
Au=b.
$$&lt;/p&gt;
&lt;p&gt;这个矩阵 $A$ 具有典型结构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;规模为 $n^2\times n^2$&lt;/li&gt;
&lt;li&gt;大部分元素为 0&lt;/li&gt;
&lt;li&gt;块三对角结构&lt;/li&gt;
&lt;li&gt;每个块内部也是三对角结构&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此它非常适合使用迭代法，尤其是 SOR。&lt;/p&gt;
&lt;p&gt;课本例子中使用 SOR 计算，取 $n=30$ 时，最优松弛因子约为&lt;/p&gt;
&lt;p&gt;$$
\omega=1.811,
$$&lt;/p&gt;
&lt;p&gt;误差精度为&lt;/p&gt;
&lt;p&gt;$$
\varepsilon=10^{-5},
$$&lt;/p&gt;
&lt;p&gt;迭代约 70 步得到收敛结果。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[图占位：插入课本图 3-1，$n=30$ 时电位势数值解曲面。]&lt;/p&gt;
&lt;p&gt;[图占位：插入课本图 3-2，$n=100$ 时电位势数值解曲面。]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个例子说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;偏微分方程离散后通常得到大规模稀疏线性系统。直接法容易破坏稀疏性，迭代法能够利用稀疏结构。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;本章知识框架&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;线性方程组 Ax=b
│
├─ 直接法局限
│  ├─ O(n^3) 代价高
│  ├─ 稀疏矩阵会 fill-in
│  └─ 大规模 PDE 离散系统难以直接分解
│
├─ 一般迭代格式
│  ├─ x = Mx + g
│  ├─ x^{(k+1)} = Mx^{(k)} + g
│  ├─ e^{(k)} = M^k e^{(0)}
│  └─ 收敛充要条件：ρ(M)&amp;lt;1
│
├─ 基本迭代法
│  ├─ Jacobi：全用旧值，可并行，慢
│  ├─ Gauss-Seidel：用最新值，可原地更新
│  └─ SOR：引入松弛因子 ω，加速 GS
│
├─ 收敛判据
│  ├─ 谱半径 ρ(M)&amp;lt;1
│  ├─ 严格对角占优
│  ├─ 不可约弱对角占优
│  └─ 对称正定：GS 收敛，SOR 在 0&amp;lt;ω&amp;lt;2 收敛
│
├─ 停机准则
│  ├─ 理论上可估计 ||x^{(k)}-x^*||
│  ├─ 实际更推荐残差 ||b-Ax^{(k)}||
│  └─ 同时设置最大迭代次数
│
└─ 对称正定系统的优化观点
   ├─ Ax=b ⇔ min 1/2 x^T A x - b^T x
   ├─ 最速下降法：沿负梯度方向
   └─ 共轭梯度法：沿 A-共轭方向，适合大规模稀疏 SPD 系统
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这一章最重要的理解：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;迭代法不是“精确消元”，而是构造一个不断改进的近似解序列。它牺牲有限步精确性，换取对大规模稀疏问题的可计算性。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Chapter2：解线性方程组的直接方法</title><link>https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter2/</link><guid isPermaLink="true">https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter2/</guid><description>Gauss 消去法、主元素法、LU 分解、三对角方程组、Cholesky 分解、LDL^T 分解、范数与条件数</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;概述&lt;/h2&gt;
&lt;p&gt;这一章的核心是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如何用有限次加、减、乘、除，把线性方程组&lt;/p&gt;
&lt;p&gt;$$
Ax=b
$$&lt;/p&gt;
&lt;p&gt;解出来，并尽量让计算过程稳定、可编程、可复用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这一章和下一章都围绕线性方程组展开：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chapter 2：直接方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;有限步内把方程组化成容易解的形式&lt;/li&gt;
&lt;li&gt;代表方法：Gauss 消去法、主元素法、LU 分解、Cholesky 分解&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chapter 3：迭代方法&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;从初值开始逐步逼近真解&lt;/li&gt;
&lt;li&gt;适合更大规模、更稀疏的问题&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这章最重要的思想链条是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;线性方程组  →  消元  →  上三角方程组  →  回代
              ↓
          初等行变换
              ↓
          LU 分解 / PA = LU
              ↓
       多个右端项时可重复使用分解结果
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接方法的目标不只是“会手算”，更重要的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;程序怎么写&lt;/li&gt;
&lt;li&gt;运算量是多少&lt;/li&gt;
&lt;li&gt;舍入误差会不会被放大&lt;/li&gt;
&lt;li&gt;矩阵结构能不能利用&lt;/li&gt;
&lt;li&gt;同一个 $A$、不同右端项 $b$ 时能不能复用已有计算&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A6%82%E8%BF%B0&quot;&gt;概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E4%B8%8E%E7%9B%B4%E6%8E%A5%E6%96%B9%E6%B3%95&quot;&gt;线性方程组与直接方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E7%94%A8-cramer-%E6%B3%95%E5%88%99&quot;&gt;为什么不用 Cramer 法则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9B%B4%E6%8E%A5%E6%96%B9%E6%B3%95%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%83%B3%E6%B3%95&quot;&gt;直接方法的基本想法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B7%A5%E7%A8%8B%E9%97%AE%E9%A2%98%E4%B8%AD%E7%9A%84%E7%9F%A9%E9%98%B5%E8%A7%84%E6%A8%A1%E4%B8%8E%E7%A8%80%E7%96%8F%E6%80%A7&quot;&gt;工程问题中的矩阵规模与稀疏性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#gauss-%E6%B6%88%E5%8E%BB%E6%B3%95&quot;&gt;Gauss 消去法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9F%BA%E6%9C%AC%E6%B6%88%E5%85%83%E8%BF%87%E7%A8%8B&quot;&gt;基本消元过程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%9E%E4%BB%A3&quot;&gt;回代&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BF%90%E7%AE%97%E9%87%8F&quot;&gt;运算量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B%E4%B8%89%E5%85%83%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E7%9A%84%E6%B6%88%E5%85%83&quot;&gt;例：三元线性方程组的消元&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BB%E5%85%83%E7%B4%A0%E6%B3%95&quot;&gt;主元素法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B0%8F%E4%B8%BB%E5%85%83%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8D%B1%E9%99%A9&quot;&gt;小主元为什么危险&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%97%E4%B8%BB%E5%85%83%E7%B4%A0-gauss-%E6%B6%88%E5%8E%BB%E6%B3%95&quot;&gt;列主元素 Gauss 消去法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B%E4%BE%8B-21-%E7%9A%84%E6%95%B0%E5%80%BC%E4%B8%8D%E7%A8%B3%E5%AE%9A&quot;&gt;例：例 2.1 的数值不稳定&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%85%A8%E4%B8%BB%E5%85%83%E7%B4%A0%E6%B3%95&quot;&gt;全主元素法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%9D%E7%AD%89%E8%A1%8C%E5%8F%98%E6%8D%A2%E4%B8%8E-lu-%E5%88%86%E8%A7%A3&quot;&gt;初等行变换与 LU 分解&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%88%9D%E7%AD%89%E8%A1%8C%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5&quot;&gt;初等行变换矩阵&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#gauss-%E6%B6%88%E5%8E%BB%E4%B8%8E-lu-%E5%88%86%E8%A7%A3%E7%9A%84%E5%85%B3%E7%B3%BB&quot;&gt;Gauss 消去与 LU 分解的关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%8E%8B%E7%BC%A9%E5%AD%98%E5%82%A8%E6%A0%BC%E5%BC%8F&quot;&gt;压缩存储格式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%BA%E4%BB%80%E4%B9%88-lu-%E5%88%86%E8%A7%A3%E6%9C%89%E7%94%A8&quot;&gt;为什么 LU 分解有用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%B8%A6%E5%88%97%E4%B8%BB%E5%85%83%E7%B4%A0%E7%9A%84%E4%B8%89%E8%A7%92%E5%88%86%E8%A7%A3pa--lu&quot;&gt;带列主元素的三角分解：PA = LU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B%E5%B8%A6%E5%88%97%E4%B8%BB%E5%85%83%E7%B4%A0%E7%9A%84-lu-%E5%88%86%E8%A7%A3&quot;&gt;例：带列主元素的 LU 分解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E5%AF%B9%E8%A7%92%E6%96%B9%E7%A8%8B%E7%BB%84%E4%B8%8E%E8%BF%BD%E8%B5%B6%E6%B3%95&quot;&gt;三对角方程组与追赶法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E5%AF%B9%E8%A7%92%E7%9F%A9%E9%98%B5%E4%BB%8E%E5%93%AA%E9%87%8C%E6%9D%A5&quot;&gt;三对角矩阵从哪里来&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%89%E5%AF%B9%E8%A7%92%E7%9F%A9%E9%98%B5%E7%9A%84-lu-%E5%88%86%E8%A7%A3&quot;&gt;三对角矩阵的 LU 分解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%BF%BD%E8%B5%B6%E6%B3%95%E6%B1%82%E8%A7%A3%E6%AD%A5%E9%AA%A4&quot;&gt;追赶法求解步骤&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AF%B9%E7%A7%B0%E6%AD%A3%E5%AE%9A%E7%9F%A9%E9%98%B5%E4%B8%8E%E5%B9%B3%E6%96%B9%E6%A0%B9%E6%B3%95&quot;&gt;对称正定矩阵与平方根法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%AF%B9%E7%A7%B0%E6%AD%A3%E5%AE%9A%E7%9A%84%E7%9B%B4%E8%A7%82%E6%9D%A5%E6%BA%90&quot;&gt;对称正定的直观来源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cholesky-%E5%88%86%E8%A7%A3&quot;&gt;Cholesky 分解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%94%B9%E8%BF%9B%E5%B9%B3%E6%96%B9%E6%A0%B9%E6%B3%95ldlt-%E5%88%86%E8%A7%A3&quot;&gt;改进平方根法：LDL^T 分解&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%90%91%E9%87%8F%E8%8C%83%E6%95%B0%E7%9F%A9%E9%98%B5%E8%8C%83%E6%95%B0%E4%B8%8E%E6%9D%A1%E4%BB%B6%E6%95%B0&quot;&gt;向量范数、矩阵范数与条件数&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%90%91%E9%87%8F%E8%8C%83%E6%95%B0&quot;&gt;向量范数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9F%A9%E9%98%B5%E8%8C%83%E6%95%B0&quot;&gt;矩阵范数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%90%91%E9%87%8F%E8%AF%B1%E5%AF%BC%E7%9A%84%E7%9F%A9%E9%98%B5%E8%8C%83%E6%95%B0&quot;&gt;向量诱导的矩阵范数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9D%A1%E4%BB%B6%E6%95%B0&quot;&gt;条件数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%AC%E7%AB%A0%E6%80%BB%E7%BB%93&quot;&gt;本章总结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;线性方程组与直接方法&lt;/h2&gt;
&lt;p&gt;一般线性方程组写成：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1,\
a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2,\
\cdots\
a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n=b_n.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;矩阵形式为：&lt;/p&gt;
&lt;p&gt;$$
Ax=b,
$$&lt;/p&gt;
&lt;p&gt;其中&lt;/p&gt;
&lt;p&gt;$$
A=(a_{ij})_{n\times n},\qquad
x=(x_1,x_2,\dots,x_n)^T,\qquad
b=(b_1,b_2,\dots,b_n)^T.
$$&lt;/p&gt;
&lt;p&gt;如果 $\det(A)\ne 0$，方程组有唯一解。&lt;/p&gt;
&lt;h3&gt;为什么不用 Cramer 法则&lt;/h3&gt;
&lt;p&gt;Cramer 法则给出了解析表达：&lt;/p&gt;
&lt;p&gt;$$
x_i=\frac{\det(A_i)}{\det(A)},
$$&lt;/p&gt;
&lt;p&gt;其中 $A_i$ 是把 $A$ 的第 $i$ 列替换成 $b$ 后得到的矩阵。&lt;/p&gt;
&lt;p&gt;但它在数值计算中基本不可用，主要原因是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;行列式展开会产生阶乘级别的计算量&lt;/li&gt;
&lt;li&gt;$n!$ 增长极快，远大于多项式复杂度&lt;/li&gt;
&lt;li&gt;实际计算中还会伴随大量舍入误差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 Cramer 法则适合说明理论存在性，不适合真正写程序求解大规模线性方程组。&lt;/p&gt;
&lt;h3&gt;直接方法的基本想法&lt;/h3&gt;
&lt;p&gt;直接方法的核心思路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过等价变换，把原方程组变成容易解的方程组&lt;/li&gt;
&lt;li&gt;最典型的目标形式是上三角方程组&lt;/li&gt;
&lt;li&gt;再用回代得到所有未知量&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;也就是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Ax=b
  ↓ 消元
Ux=c
  ↓ 回代
x
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中 $U$ 是上三角矩阵。&lt;/p&gt;
&lt;p&gt;:::TIP
消元过程不能改变方程组的解。&lt;br /&gt;
从方程组角度看，它是“某一行减去另一行的倍数”；从矩阵角度看，它是左乘初等行变换矩阵。
:::&lt;/p&gt;
&lt;h3&gt;工程问题中的矩阵规模与稀疏性&lt;/h3&gt;
&lt;p&gt;老师上课举了一个很重要的工程直观：&lt;/p&gt;
&lt;p&gt;如果要计算一个飞行器、炮弹或流场周围每个网格点上的物理量，最终往往也会落到某种线性方程组：&lt;/p&gt;
&lt;p&gt;$$
Ax=b.
$$&lt;/p&gt;
&lt;p&gt;例如在 $1\text{m}\times1\text{m}\times1\text{m}$ 的区域内，如果空间步长取 $1\text{mm}$，单个标量未知量的网格点数量已经达到约&lt;/p&gt;
&lt;p&gt;$$
1000^3=10^9.
$$&lt;/p&gt;
&lt;p&gt;这意味着未知量可能达到十亿量级。若矩阵是满矩阵，存储和计算都很难承受。&lt;/p&gt;
&lt;p&gt;但真实物理模型往往有&lt;strong&gt;局部性&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个网格点通常只和附近网格点强相关&lt;/li&gt;
&lt;li&gt;很远处的点对它的直接影响可忽略&lt;/li&gt;
&lt;li&gt;于是矩阵中大量元素为 $0$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种矩阵叫 &lt;strong&gt;稀疏矩阵（sparse matrix）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在一维局部相邻作用模型中，矩阵常常呈现三对角结构；二维、三维中也会出现带状或稀疏结构。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson2 手写 PPT 中“网格点局部耦合导致稀疏矩阵 / 三对角矩阵”的示意图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;Gauss 消去法&lt;/h2&gt;
&lt;h3&gt;基本消元过程&lt;/h3&gt;
&lt;p&gt;以第 $k$ 步为例，假设当前主元为 $a_{kk}^{(k)}$，希望消去第 $k$ 列中 $k$ 行以下的元素。&lt;/p&gt;
&lt;p&gt;对 $i=k+1,k+2,\dots,n$，令&lt;/p&gt;
&lt;p&gt;$$
l_{ik}=\frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}.
$$&lt;/p&gt;
&lt;p&gt;然后做行变换：&lt;/p&gt;
&lt;p&gt;$$
\text{第 }i\text{ 行}\leftarrow \text{第 }i\text{ 行}-l_{ik}\cdot \text{第 }k\text{ 行}.
$$&lt;/p&gt;
&lt;p&gt;于是有&lt;/p&gt;
&lt;p&gt;$$
a_{ij}^{(k+1)}=a_{ij}^{(k)}-l_{ik}a_{kj}^{(k)},
\qquad j=k+1,k+2,\dots,n,
$$&lt;/p&gt;
&lt;p&gt;以及右端项&lt;/p&gt;
&lt;p&gt;$$
b_i^{(k+1)}=b_i^{(k)}-l_{ik}b_k^{(k)}.
$$&lt;/p&gt;
&lt;p&gt;经过 $n-1$ 轮消元后，原方程组化为上三角方程组：&lt;/p&gt;
&lt;p&gt;$$
Ux=c.
$$&lt;/p&gt;
&lt;h3&gt;回代&lt;/h3&gt;
&lt;p&gt;上三角方程组形如：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
u_{11}x_1+u_{12}x_2+\cdots+u_{1n}x_n=c_1,\
u_{22}x_2+\cdots+u_{2n}x_n=c_2,\
\cdots\
u_{nn}x_n=c_n.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;先由最后一行得到&lt;/p&gt;
&lt;p&gt;$$
x_n=\frac{c_n}{u_{nn}},
$$&lt;/p&gt;
&lt;p&gt;再依次向上求：&lt;/p&gt;
&lt;p&gt;$$
x_k=\frac{c_k-\sum_{j=k+1}^n u_{kj}x_j}{u_{kk}},
\qquad k=n-1,n-2,\dots,1.
$$&lt;/p&gt;
&lt;p&gt;这一步叫 &lt;strong&gt;回代（back substitution）&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;运算量&lt;/h3&gt;
&lt;p&gt;Gauss 消去的主要计算量来自消元。&lt;/p&gt;
&lt;p&gt;粗略看：&lt;/p&gt;
&lt;p&gt;$$
(n-1)^2+(n-2)^2+\cdots+1^2=O(n^3).
$$&lt;/p&gt;
&lt;p&gt;回代的计算量为&lt;/p&gt;
&lt;p&gt;$$
1+2+\cdots+(n-1)=O(n^2).
$$&lt;/p&gt;
&lt;p&gt;因此整体复杂度为&lt;/p&gt;
&lt;p&gt;$$
O(n^3).
$$&lt;/p&gt;
&lt;p&gt;:::TIP
Gauss 消去法比 Cramer 法则实用得多：&lt;br /&gt;
Cramer 法则接近阶乘级复杂度，Gauss 消去法是三次多项式复杂度。
:::&lt;/p&gt;
&lt;h3&gt;例：三元线性方程组的消元&lt;/h3&gt;
&lt;p&gt;课本例子：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
x_1+x_2+x_3=6,\
12x_1-3x_2+3x_3=15,\
-18x_1+3x_2-x_3=-15.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;写成增广矩阵：&lt;/p&gt;
&lt;p&gt;$$
\left[
\begin{array}{ccc|c}
1&amp;amp;1&amp;amp;1&amp;amp;6\
12&amp;amp;-3&amp;amp;3&amp;amp;15\
-18&amp;amp;3&amp;amp;-1&amp;amp;-15
\end{array}
\right].
$$&lt;/p&gt;
&lt;p&gt;第一步，用第 1 行消去第 1 列下面的元素：&lt;/p&gt;
&lt;p&gt;$$
R_2\leftarrow R_2-12R_1,
\qquad
R_3\leftarrow R_3+18R_1.
$$&lt;/p&gt;
&lt;p&gt;得到&lt;/p&gt;
&lt;p&gt;$$
\left[
\begin{array}{ccc|c}
1&amp;amp;1&amp;amp;1&amp;amp;6\
0&amp;amp;-15&amp;amp;-9&amp;amp;-57\
0&amp;amp;21&amp;amp;17&amp;amp;93
\end{array}
\right].
$$&lt;/p&gt;
&lt;p&gt;第二步，用第 2 行消去第 2 列下面的元素：&lt;/p&gt;
&lt;p&gt;$$
R_3\leftarrow R_3+\frac{7}{5}R_2.
$$&lt;/p&gt;
&lt;p&gt;得到上三角方程组：&lt;/p&gt;
&lt;p&gt;$$
\left[
\begin{array}{ccc|c}
1&amp;amp;1&amp;amp;1&amp;amp;6\
0&amp;amp;-15&amp;amp;-9&amp;amp;-57\
0&amp;amp;0&amp;amp;\frac{22}{5}&amp;amp;\frac{22}{5}
\end{array}
\right].
$$&lt;/p&gt;
&lt;p&gt;回代：&lt;/p&gt;
&lt;p&gt;$$
x_3=1,
$$&lt;/p&gt;
&lt;p&gt;$$
-15x_2-9= -57\quad\Rightarrow\quad x_2=3,
$$&lt;/p&gt;
&lt;p&gt;$$
x_1+x_2+x_3=6\quad\Rightarrow\quad x_1=2.
$$&lt;/p&gt;
&lt;p&gt;所以&lt;/p&gt;
&lt;p&gt;$$
x=(2,3,1)^T.
$$&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;主元素法&lt;/h2&gt;
&lt;h3&gt;小主元为什么危险&lt;/h3&gt;
&lt;p&gt;Gauss 消去法中，每一步都要除以主元 $a_{kk}^{(k)}$。&lt;/p&gt;
&lt;p&gt;如果主元很小，形如&lt;/p&gt;
&lt;p&gt;$$
l_{ik}=\frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}
$$&lt;/p&gt;
&lt;p&gt;中的分母很小，舍入误差会被放大。&lt;/p&gt;
&lt;p&gt;这会导致：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;理论上等价的行变换，在浮点数计算中产生严重误差&lt;/li&gt;
&lt;li&gt;后续步骤继续使用带误差的数据，误差不断传播&lt;/li&gt;
&lt;li&gt;最终结果可能偏离真解很多&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以数值计算里不能只看“代数上能不能消”，还要看“消元顺序是否稳定”。&lt;/p&gt;
&lt;h3&gt;列主元素 Gauss 消去法&lt;/h3&gt;
&lt;p&gt;列主元素法的规则：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;第 $k$ 步消元前，在第 $k$ 列的第 $k$ 行到第 $n$ 行中，选绝对值最大的元素作为主元，并把它所在行交换到第 $k$ 行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;数学写法：&lt;/p&gt;
&lt;p&gt;$$
p=\arg\max_{k\le i\le n}|a_{ik}^{(k)}|.
$$&lt;/p&gt;
&lt;p&gt;若 $p\ne k$，先交换第 $p$ 行和第 $k$ 行，再继续消元。&lt;/p&gt;
&lt;p&gt;这样做的目的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;避免用很小的数作分母&lt;/li&gt;
&lt;li&gt;降低舍入误差被放大的风险&lt;/li&gt;
&lt;li&gt;不改变未知量 $x_1,x_2,\dots,x_n$ 的顺序&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::TIP
只交换行，未知量编号不变。&lt;br /&gt;
如果交换列，$x$ 的分量顺序也会变化，程序实现更麻烦。
:::&lt;/p&gt;
&lt;h3&gt;例：例 2.1 的数值不稳定&lt;/h3&gt;
&lt;p&gt;课本例 2.1：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
0.50x_1+1.1x_2+3.1x_3=6.0,\
2.0x_1+4.5x_2+0.36x_3=0.02,\
5.0x_1+0.96x_2+6.5x_3=0.96.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;若按原顺序直接用普通 Gauss 消去法，在有限位数计算下会得到近似结果：&lt;/p&gt;
&lt;p&gt;$$
x_1\approx -5.80,
\qquad
x_2\approx 2.40,
\qquad
x_3\approx 2.00.
$$&lt;/p&gt;
&lt;p&gt;真解应为：&lt;/p&gt;
&lt;p&gt;$$
x_1=-2.60,
\qquad
x_2=1.00,
\qquad
x_3=2.00.
$$&lt;/p&gt;
&lt;p&gt;误差的关键原因在于：第一次消元后，第二步主元附近出现了类似 $0.1$ 的小数。下一轮消元要除以它，舍入误差被大幅放大。&lt;/p&gt;
&lt;p&gt;列主元素法的做法：第一列中绝对值最大的元素是 $5.0$，先把第 3 行换到第 1 行：&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
5.0x_1+0.96x_2+6.5x_3=0.96,\
2.0x_1+4.5x_2+0.36x_3=0.02,\
0.50x_1+1.1x_2+3.1x_3=6.0.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;接下来再消元，主元分母从 $0.50$ 换成 $5.0$，误差不会被小分母放大。最终可得到正确近似：&lt;/p&gt;
&lt;p&gt;$$
x_1\approx -2.60,
\qquad
x_2\approx 1.00,
\qquad
x_3\approx 2.00.
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson2 手写 PPT 中“例 2.1 小主元导致误差放大，以及交换行后主元变大”的推导截图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;全主元素法&lt;/h3&gt;
&lt;p&gt;全主元素法在每一步中，从剩余子矩阵中选绝对值最大的元素作为主元。&lt;/p&gt;
&lt;p&gt;它比列主元素法更稳定，但会带来列交换。&lt;/p&gt;
&lt;p&gt;列交换意味着未知量顺序变化，例如 $x_1$ 和 $x_2$ 的位置可能被交换，程序中需要额外记录变量顺序。&lt;/p&gt;
&lt;p&gt;实际工程计算中，常用列主元素法；全主元素法用得较少。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;初等行变换与 LU 分解&lt;/h2&gt;
&lt;h3&gt;初等行变换矩阵&lt;/h3&gt;
&lt;p&gt;交换矩阵左乘一个矩阵，就等价于交换它的行。&lt;/p&gt;
&lt;p&gt;例如&lt;/p&gt;
&lt;p&gt;$$
A=\begin{bmatrix}
1&amp;amp;2&amp;amp;3\
4&amp;amp;5&amp;amp;6\
7&amp;amp;8&amp;amp;9
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;若要交换第 1 行和第 3 行，可以构造&lt;/p&gt;
&lt;p&gt;$$
P_{13}=\begin{bmatrix}
0&amp;amp;0&amp;amp;1\
0&amp;amp;1&amp;amp;0\
1&amp;amp;0&amp;amp;0
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
P_{13}A=
\begin{bmatrix}
7&amp;amp;8&amp;amp;9\
4&amp;amp;5&amp;amp;6\
1&amp;amp;2&amp;amp;3
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;这一点说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;对矩阵做初等行变换，可以理解为左乘某个初等矩阵。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;消元也是初等行变换。比如&lt;/p&gt;
&lt;p&gt;$$
R_i\leftarrow R_i-l_{i1}R_1
$$&lt;/p&gt;
&lt;p&gt;对应的初等矩阵是在单位矩阵的 $(i,1)$ 位置放入 $-l_{i1}$。&lt;/p&gt;
&lt;h3&gt;Gauss 消去与 LU 分解的关系&lt;/h3&gt;
&lt;p&gt;不选主元时，Gauss 消去可以写成一串初等矩阵左乘：&lt;/p&gt;
&lt;p&gt;$$
L_{n-1}\cdots L_2L_1A=U,
$$&lt;/p&gt;
&lt;p&gt;其中 $U$ 是上三角矩阵。&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
A=(L_{n-1}\cdots L_2L_1)^{-1}U.
$$&lt;/p&gt;
&lt;p&gt;把左边这一串逆矩阵记为 $L$，得到&lt;/p&gt;
&lt;p&gt;$$
A=LU.
$$&lt;/p&gt;
&lt;p&gt;这里通常取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$L$：单位下三角矩阵&lt;/li&gt;
&lt;li&gt;$U$：上三角矩阵&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种形式也叫 &lt;strong&gt;Doolittle 分解&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;:::TIP
Gauss 消去过程中的乘子 $l_{ik}$，最后会出现在 $L$ 的下三角部分。&lt;br /&gt;
$U$ 则是消元后的上三角矩阵。
:::&lt;/p&gt;
&lt;h3&gt;压缩存储格式&lt;/h3&gt;
&lt;p&gt;在普通消元中，被消掉的位置本来会变成 $0$。&lt;/p&gt;
&lt;p&gt;例如第一列中 $a_{21},a_{31},\dots,a_{n1}$ 被消成 $0$，但这些位置可以拿来存放对应的消元乘子：&lt;/p&gt;
&lt;p&gt;$$
l_{21},l_{31},\dots,l_{n1}.
$$&lt;/p&gt;
&lt;p&gt;因此可以把 $L$ 和 $U$ 存在同一个二维数组中：&lt;/p&gt;
&lt;p&gt;$$
\begin{bmatrix}
u_{11}&amp;amp;u_{12}&amp;amp;u_{13}&amp;amp;\cdots&amp;amp;u_{1n}\
l_{21}&amp;amp;u_{22}&amp;amp;u_{23}&amp;amp;\cdots&amp;amp;u_{2n}\
l_{31}&amp;amp;l_{32}&amp;amp;u_{33}&amp;amp;\cdots&amp;amp;u_{3n}\
\vdots&amp;amp;\vdots&amp;amp;\vdots&amp;amp;\ddots&amp;amp;\vdots\
l_{n1}&amp;amp;l_{n2}&amp;amp;l_{n3}&amp;amp;\cdots&amp;amp;u_{nn}
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;这就是老师反复强调的 &lt;strong&gt;压缩存储格式&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;它的好处：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不额外开一个矩阵存 $L$&lt;/li&gt;
&lt;li&gt;原来应为 $0$ 的位置被有效利用&lt;/li&gt;
&lt;li&gt;更接近真实程序中的 LU 分解实现&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;为什么 LU 分解有用&lt;/h3&gt;
&lt;p&gt;如果只解一个方程组，Gauss 消去和 LU 分解的计算量接近，都是 $O(n^3)$。&lt;/p&gt;
&lt;p&gt;但如果同一个 $A$ 对应多个右端项：&lt;/p&gt;
&lt;p&gt;$$
Ax=b^{(1)},\quad Ax=b^{(2)},\quad Ax=b^{(3)},\dots
$$&lt;/p&gt;
&lt;p&gt;LU 分解就非常有用。&lt;/p&gt;
&lt;p&gt;先做一次&lt;/p&gt;
&lt;p&gt;$$
A=LU.
$$&lt;/p&gt;
&lt;p&gt;每次解&lt;/p&gt;
&lt;p&gt;$$
Ax=b
$$&lt;/p&gt;
&lt;p&gt;时，只需解两个三角方程组：&lt;/p&gt;
&lt;p&gt;$$
Ly=b,
$$&lt;/p&gt;
&lt;p&gt;$$
Ux=y.
$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$Ly=b$：前代，$O(n^2)$&lt;/li&gt;
&lt;li&gt;$Ux=y$：回代，$O(n^2)$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一次 LU 分解：O(n^3)
每换一个 b：O(n^2)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这就是 LU 分解在工程计算中的核心意义。&lt;/p&gt;
&lt;p&gt;:::WARNING
工程计算中通常不会真的求 $A^{-1}$。&lt;br /&gt;
如果需要 $A^{-1}$ 对某个向量的作用，例如 $q=A^{-1}p$，实际做法是解&lt;/p&gt;
&lt;p&gt;$$
Aq=p.
$$&lt;/p&gt;
&lt;p&gt;若已经有 $A=LU$，就通过前代和回代得到 $q$。
:::&lt;/p&gt;
&lt;h3&gt;带列主元素的三角分解：PA = LU&lt;/h3&gt;
&lt;p&gt;如果消元过程中发生了行交换，分解形式要写成&lt;/p&gt;
&lt;p&gt;$$
PA=LU,
$$&lt;/p&gt;
&lt;p&gt;而不能只写 $A=LU$。&lt;/p&gt;
&lt;p&gt;其中 $P$ 是置换矩阵，记录行交换。&lt;/p&gt;
&lt;p&gt;理解方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$P$ 把 $A$ 的行重新排列&lt;/li&gt;
&lt;li&gt;对重新排列后的矩阵做普通 LU 分解&lt;/li&gt;
&lt;li&gt;列主元素法对应的分解结果就是 $PA=LU$&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;例：带列主元素的 LU 分解&lt;/h2&gt;
&lt;p&gt;老师课上重新演示了课本例 2.5。设&lt;/p&gt;
&lt;p&gt;$$
A=\begin{bmatrix}
0&amp;amp;2&amp;amp;0&amp;amp;1\
2&amp;amp;2&amp;amp;3&amp;amp;2\
4&amp;amp;-3&amp;amp;0&amp;amp;1\
6&amp;amp;1&amp;amp;-6&amp;amp;-5
\end{bmatrix},
\qquad
b=\begin{bmatrix}0\-2\-7\6\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;第一列主元选绝对值最大的 $6$，所以第 4 行换到最上面。&lt;/p&gt;
&lt;p&gt;第一轮消元后，压缩存储形式为：&lt;/p&gt;
&lt;p&gt;$$
\left[
\begin{array}{rrrr|r}
6&amp;amp;1&amp;amp;-6&amp;amp;-5&amp;amp;6\
\frac13&amp;amp;\frac53&amp;amp;5&amp;amp;\frac{11}{3}&amp;amp;-4\
\frac23&amp;amp;-\frac{11}{3}&amp;amp;4&amp;amp;\frac{13}{3}&amp;amp;-11\
0&amp;amp;2&amp;amp;0&amp;amp;1&amp;amp;0
\end{array}
\right].
$$&lt;/p&gt;
&lt;p&gt;第二列主元在剩余行中选 $-\dfrac{11}{3}$，所以当前第 2 行和第 3 行交换。继续消元后得到：&lt;/p&gt;
&lt;p&gt;$$
\left[
\begin{array}{rrrr|r}
6&amp;amp;1&amp;amp;-6&amp;amp;-5&amp;amp;6\
\frac23&amp;amp;-\frac{11}{3}&amp;amp;4&amp;amp;\frac{13}{3}&amp;amp;-11\
\frac13&amp;amp;-\frac5{11}&amp;amp;\frac{75}{11}&amp;amp;\frac{62}{11}&amp;amp;-9\
0&amp;amp;-\frac6{11}&amp;amp;\frac{24}{11}&amp;amp;\frac{37}{11}&amp;amp;-6
\end{array}
\right].
$$&lt;/p&gt;
&lt;p&gt;第三列不用换主元，消元乘子为&lt;/p&gt;
&lt;p&gt;$$
\frac{\frac{24}{11}}{\frac{75}{11}}=\frac{8}{25}.
$$&lt;/p&gt;
&lt;p&gt;最终得到&lt;/p&gt;
&lt;p&gt;$$
P=\begin{bmatrix}
0&amp;amp;0&amp;amp;0&amp;amp;1\
0&amp;amp;0&amp;amp;1&amp;amp;0\
0&amp;amp;1&amp;amp;0&amp;amp;0\
1&amp;amp;0&amp;amp;0&amp;amp;0
\end{bmatrix},
$$&lt;/p&gt;
&lt;p&gt;$$
L=\begin{bmatrix}
1&amp;amp;0&amp;amp;0&amp;amp;0\
\frac23&amp;amp;1&amp;amp;0&amp;amp;0\
\frac13&amp;amp;-\frac5{11}&amp;amp;1&amp;amp;0\
0&amp;amp;-\frac6{11}&amp;amp;\frac8{25}&amp;amp;1
\end{bmatrix},
$$&lt;/p&gt;
&lt;p&gt;$$
U=\begin{bmatrix}
6&amp;amp;1&amp;amp;-6&amp;amp;-5\
0&amp;amp;-\frac{11}{3}&amp;amp;4&amp;amp;\frac{13}{3}\
0&amp;amp;0&amp;amp;\frac{75}{11}&amp;amp;\frac{62}{11}\
0&amp;amp;0&amp;amp;0&amp;amp;\frac{39}{25}
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;它们满足&lt;/p&gt;
&lt;p&gt;$$
PA=LU.
$$&lt;/p&gt;
&lt;p&gt;如果继续求解方程组，最终得到&lt;/p&gt;
&lt;p&gt;$$
x=\left(-\frac12,;1,;\frac13,;-2\right)^T.
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson3 手写 PPT 中“例 2.5 带列主元素 LU 分解的压缩存储表格”截图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;:::TIP
这个例子的重点是理解结构：&lt;br /&gt;
行交换通过 $P$ 记录，消元乘子进入 $L$，剩下的上三角部分构成 $U$。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三对角方程组与追赶法&lt;/h2&gt;
&lt;h3&gt;三对角矩阵从哪里来&lt;/h3&gt;
&lt;p&gt;三对角方程组形如：&lt;/p&gt;
&lt;h1&gt;$$
\begin{bmatrix}
b_1&amp;amp;c_1&amp;amp;&amp;amp;&amp;amp;0\
a_2&amp;amp;b_2&amp;amp;c_2&amp;amp;&amp;amp;\
&amp;amp; a_3&amp;amp;b_3&amp;amp;c_3&amp;amp;\
&amp;amp;&amp;amp;\ddots&amp;amp;\ddots&amp;amp;\ddots\
0&amp;amp;&amp;amp;&amp;amp;a_n&amp;amp;b_n
\end{bmatrix}
\begin{bmatrix}
x_1\x_2\x_3\\vdots\x_n
\end{bmatrix}&lt;/h1&gt;
&lt;p&gt;\begin{bmatrix}
d_1\d_2\d_3\\vdots\d_n
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;也就是只有三条对角线上可能非零：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主对角线 $b_i$&lt;/li&gt;
&lt;li&gt;上副对角线 $c_i$&lt;/li&gt;
&lt;li&gt;下副对角线 $a_i$&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种结构常来自一维网格上的局部耦合。&lt;/p&gt;
&lt;p&gt;例如：某点 $x_i$ 的方程只考虑相邻点 $x_{i-1}$、$x_i$、$x_{i+1}$ 的影响，远处点影响忽略，于是每一行只有三个非零元素。&lt;/p&gt;
&lt;p&gt;如果网格等距、材料均匀，还常常得到对称三对角矩阵。&lt;/p&gt;
&lt;h3&gt;三对角矩阵的 LU 分解&lt;/h3&gt;
&lt;p&gt;设&lt;/p&gt;
&lt;p&gt;$$
A=LU,
$$&lt;/p&gt;
&lt;p&gt;其中&lt;/p&gt;
&lt;p&gt;$$
L=\begin{bmatrix}
1&amp;amp;&amp;amp;&amp;amp;&amp;amp;0\
l_2&amp;amp;1&amp;amp;&amp;amp;&amp;amp;\
&amp;amp;l_3&amp;amp;1&amp;amp;&amp;amp;\
&amp;amp;&amp;amp;\ddots&amp;amp;\ddots&amp;amp;\
0&amp;amp;&amp;amp;&amp;amp;l_n&amp;amp;1
\end{bmatrix},
$$&lt;/p&gt;
&lt;p&gt;$$
U=\begin{bmatrix}
u_1&amp;amp;c_1&amp;amp;&amp;amp;&amp;amp;0\
&amp;amp;u_2&amp;amp;c_2&amp;amp;&amp;amp;\
&amp;amp;&amp;amp;u_3&amp;amp;c_3&amp;amp;\
&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\ddots\
0&amp;amp;&amp;amp;&amp;amp;&amp;amp;u_n
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;把 $L$ 和 $U$ 相乘并对比 $A$，可得：&lt;/p&gt;
&lt;p&gt;$$
u_1=b_1,
$$&lt;/p&gt;
&lt;p&gt;对 $i=2,3,\dots,n$，有&lt;/p&gt;
&lt;p&gt;$$
l_i=\frac{a_i}{u_{i-1}},
$$&lt;/p&gt;
&lt;p&gt;$$
u_i=b_i-l_ic_{i-1}.
$$&lt;/p&gt;
&lt;p&gt;注意：上副对角线 $c_i$ 不变。&lt;/p&gt;
&lt;h3&gt;追赶法求解步骤&lt;/h3&gt;
&lt;p&gt;追赶法分三步。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步：分解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
u_1=b_1,
$$&lt;/p&gt;
&lt;p&gt;$$
l_i=\frac{a_i}{u_{i-1}},\qquad
u_i=b_i-l_ic_{i-1},\qquad i=2,3,\dots,n.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：前代解 $Ly=d$&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
y_1=d_1,
$$&lt;/p&gt;
&lt;p&gt;$$
y_i=d_i-l_iy_{i-1},\qquad i=2,3,\dots,n.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：回代解 $Ux=y$&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
x_n=\frac{y_n}{u_n},
$$&lt;/p&gt;
&lt;p&gt;$$
x_i=\frac{y_i-c_ix_{i+1}}{u_i},\qquad i=n-1,n-2,\dots,1.
$$&lt;/p&gt;
&lt;p&gt;所以追赶法只需要三个循环，计算量为&lt;/p&gt;
&lt;p&gt;$$
O(n).
$$&lt;/p&gt;
&lt;p&gt;这比普通 LU 分解的 $O(n^3)$ 低很多。&lt;/p&gt;
&lt;p&gt;:::WARNING
三对角结构非常宝贵。&lt;br /&gt;
如果直接把它当作一般满矩阵处理，会浪费大量计算和存储。
:::&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson3 手写 PPT 中“三对角矩阵结构与追赶法三个循环”的截图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;对称正定矩阵与平方根法&lt;/h2&gt;
&lt;h3&gt;对称正定的直观来源&lt;/h3&gt;
&lt;p&gt;对称正定矩阵在工程建模中非常常见。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对称性&lt;/strong&gt;常来自物理作用的互易性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点 $i$ 对点 $j$ 的影响&lt;/li&gt;
&lt;li&gt;点 $j$ 对点 $i$ 的影响&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在均匀材料、对称几何或对称相互作用下，这两者常常对应同一系数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正定性&lt;/strong&gt;可理解为能量意义上的“稳定”：&lt;/p&gt;
&lt;p&gt;$$
x^TAx&amp;gt;0,\qquad x\ne0.
$$&lt;/p&gt;
&lt;p&gt;在很多弹性、热传导、扩散等问题中，系统能量为正，离散后得到的矩阵也常为对称正定矩阵。&lt;/p&gt;
&lt;p&gt;:::TIP
当你在工程建模中断言 $A$ 是对称正定矩阵时，背后通常包含物理假设：局部作用、能量稳定、材料或几何的对称性。
:::&lt;/p&gt;
&lt;h3&gt;Cholesky 分解&lt;/h3&gt;
&lt;p&gt;定理：若 $A$ 是对称正定矩阵，则存在唯一的下三角矩阵 $L$，且 $L$ 的对角元全为正，使得&lt;/p&gt;
&lt;p&gt;$$
A=LL^T.
$$&lt;/p&gt;
&lt;p&gt;这叫 &lt;strong&gt;Cholesky 分解&lt;/strong&gt;，也叫平方根法。&lt;/p&gt;
&lt;p&gt;对于&lt;/p&gt;
&lt;p&gt;$$
A=(a_{ij})_{n\times n},
$$&lt;/p&gt;
&lt;p&gt;算法为：&lt;/p&gt;
&lt;p&gt;$$
l_{kk}=\sqrt{a_{kk}-\sum_{j=1}^{k-1}l_{kj}^2},
\qquad k=1,2,\dots,n.
$$&lt;/p&gt;
&lt;p&gt;对 $i=k+1,k+2,\dots,n$，&lt;/p&gt;
&lt;p&gt;$$
l_{ik}=\frac{a_{ik}-\sum_{j=1}^{k-1}l_{ij}l_{kj}}{l_{kk}}.
$$&lt;/p&gt;
&lt;p&gt;正定性保证根号内为正，因此算法能继续做下去。&lt;/p&gt;
&lt;p&gt;若要求解&lt;/p&gt;
&lt;p&gt;$$
Ax=b,
$$&lt;/p&gt;
&lt;p&gt;由于&lt;/p&gt;
&lt;p&gt;$$
A=LL^T,
$$&lt;/p&gt;
&lt;p&gt;可分两步：&lt;/p&gt;
&lt;p&gt;$$
Ly=b,
$$&lt;/p&gt;
&lt;p&gt;$$
L^Tx=y.
$$&lt;/p&gt;
&lt;p&gt;第一步前代，第二步回代。&lt;/p&gt;
&lt;h3&gt;改进平方根法：LDL^T 分解&lt;/h3&gt;
&lt;p&gt;Cholesky 分解需要开平方。开平方在计算上比加减乘除更贵。&lt;/p&gt;
&lt;p&gt;为了避免开平方，可以把分解写成&lt;/p&gt;
&lt;p&gt;$$
A=LDL^T,
$$&lt;/p&gt;
&lt;p&gt;其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$L$ 是单位下三角矩阵&lt;/li&gt;
&lt;li&gt;$D$ 是对角矩阵&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;设&lt;/p&gt;
&lt;p&gt;$$
D=\operatorname{diag}(d_1,d_2,\dots,d_n).
$$&lt;/p&gt;
&lt;p&gt;算法为：&lt;/p&gt;
&lt;p&gt;$$
d_k=a_{kk}-\sum_{j=1}^{k-1}l_{kj}^2d_j,
\qquad k=1,2,\dots,n.
$$&lt;/p&gt;
&lt;p&gt;对 $i=k+1,k+2,\dots,n$，&lt;/p&gt;
&lt;p&gt;$$
l_{ik}=\frac{a_{ik}-\sum_{j=1}^{k-1}l_{ij}l_{kj}d_j}{d_k}.
$$&lt;/p&gt;
&lt;p&gt;求解时分三步：&lt;/p&gt;
&lt;p&gt;$$
Ly=b,
$$&lt;/p&gt;
&lt;p&gt;$$
Dz=y,
$$&lt;/p&gt;
&lt;p&gt;$$
L^Tx=z.
$$&lt;/p&gt;
&lt;p&gt;:::TIP
$LDL^T$ 分解保留了对称正定结构，又避开了开平方运算，在程序实现中很实用。
:::&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson3 手写 PPT 中“Cholesky 与 LDL^T 待定系数推导”的截图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;向量范数、矩阵范数与条件数&lt;/h2&gt;
&lt;p&gt;前面的算法都在处理误差与稳定性。要严格讨论“误差多大”，需要先定义向量和矩阵的大小，这就是范数。&lt;/p&gt;
&lt;h3&gt;向量范数&lt;/h3&gt;
&lt;p&gt;向量范数是从 $\mathbb{R}^n$ 到 $\mathbb{R}$ 的映射：&lt;/p&gt;
&lt;p&gt;$$
x\mapsto |x|.
$$&lt;/p&gt;
&lt;p&gt;它要满足：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;非负性与正定性&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|x|\ge0,
\qquad
|x|=0\Longleftrightarrow x=0.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;齐次性&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|\alpha x|=|\alpha||x|.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;三角不等式&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|x+y|\le |x|+|y|.
$$&lt;/p&gt;
&lt;p&gt;常用向量范数有：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|x|&lt;em&gt;1=\sum&lt;/em&gt;{i=1}^n|x_i|.
$$&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|x|&lt;em&gt;2=\left(\sum&lt;/em&gt;{i=1}^n x_i^2\right)^{1/2}.
$$&lt;/p&gt;
&lt;p&gt;它就是欧氏长度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;无穷范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|x|&lt;em&gt;\infty=\max&lt;/em&gt;{1\le i\le n}|x_i|.
$$&lt;/p&gt;
&lt;p&gt;在 $\mathbb{R}^2$ 中，不同范数下的“单位圆”形状不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2 范数：圆&lt;/li&gt;
&lt;li&gt;1 范数：菱形&lt;/li&gt;
&lt;li&gt;无穷范数：正方形&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这说明范数改变后，几何意义也会改变。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;配图占位&lt;/strong&gt;：插入 lesson3 手写 PPT 中“2 范数圆与无穷范数正方形单位圆”的示意图。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;矩阵范数&lt;/h3&gt;
&lt;p&gt;矩阵范数给矩阵定义大小。对 $A,B\in\mathbb{R}^{n\times n}$，矩阵范数满足：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;非负性与正定性&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|A|\ge0,
\qquad
|A|=0\Longleftrightarrow A=0.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;齐次性&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|\alpha A|=|\alpha||A|.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;三角不等式&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|A+B|\le |A|+|B|.
$$&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;相容性 / 次乘性&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;$$
|AB|\le |A||B|.
$$&lt;/p&gt;
&lt;p&gt;相容性非常重要，因为矩阵代表线性算子。它允许我们估计多次线性作用带来的放大效果。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;$$
|A^m|\le |A|^m.
$$&lt;/p&gt;
&lt;p&gt;若 $|A|&amp;lt;1$，则 $|A^m|\to0$。&lt;/p&gt;
&lt;h3&gt;向量诱导的矩阵范数&lt;/h3&gt;
&lt;p&gt;给定一个向量范数，可以定义对应的矩阵范数：&lt;/p&gt;
&lt;p&gt;$$
|A|=\max_{x\ne0}\frac{|Ax|}{|x|}.
$$&lt;/p&gt;
&lt;p&gt;由于&lt;/p&gt;
&lt;p&gt;$$
\frac{|Ax|}{|x|}=\left|A\frac{x}{|x|}\right|,
$$&lt;/p&gt;
&lt;p&gt;所以也可以理解为：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在所有单位向量上，找出 $A$ 对向量长度的最大放大倍数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;常用诱导矩阵范数：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;矩阵 1 范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|A|&lt;em&gt;1=\max&lt;/em&gt;{1\le j\le n}\sum_{i=1}^n |a_{ij}|.
$$&lt;/p&gt;
&lt;p&gt;即最大列和。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;矩阵无穷范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|A|&lt;em&gt;\infty=\max&lt;/em&gt;{1\le i\le n}\sum_{j=1}^n |a_{ij}|.
$$&lt;/p&gt;
&lt;p&gt;即最大行和。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;矩阵 2 范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;$$
|A|&lt;em&gt;2=\sqrt{\lambda&lt;/em&gt;{\max}(A^TA)}.
$$&lt;/p&gt;
&lt;p&gt;其中 $\lambda_{\max}(A^TA)$ 是 $A^TA$ 的最大特征值。&lt;/p&gt;
&lt;p&gt;还有一个常用但非诱导的矩阵范数：Frobenius 范数&lt;/p&gt;
&lt;p&gt;$$
|A|&lt;em&gt;F=\left(\sum&lt;/em&gt;{i=1}^n\sum_{j=1}^n a_{ij}^2\right)^{1/2}.
$$&lt;/p&gt;
&lt;p&gt;它计算方便，性质也很好，很多场合可作为 2 范数的替代估计。&lt;/p&gt;
&lt;h3&gt;条件数&lt;/h3&gt;
&lt;p&gt;考虑&lt;/p&gt;
&lt;p&gt;$$
Ax=b.
$$&lt;/p&gt;
&lt;p&gt;若右端项有扰动：&lt;/p&gt;
&lt;p&gt;$$
A(x+\delta x)=b+\delta b.
$$&lt;/p&gt;
&lt;p&gt;因为 $Ax=b$，相减得&lt;/p&gt;
&lt;p&gt;$$
A\delta x=\delta b.
$$&lt;/p&gt;
&lt;p&gt;若 $A$ 非奇异，则&lt;/p&gt;
&lt;p&gt;$$
\delta x=A^{-1}\delta b.
$$&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
|\delta x|\le |A^{-1}|,|\delta b|.
$$&lt;/p&gt;
&lt;p&gt;另一方面&lt;/p&gt;
&lt;p&gt;$$
|b|=|Ax|\le |A|,|x|,
$$&lt;/p&gt;
&lt;p&gt;所以&lt;/p&gt;
&lt;p&gt;$$
\frac{|\delta x|}{|x|}
\le
|A|,|A^{-1}|
\frac{|\delta b|}{|b|}.
$$&lt;/p&gt;
&lt;p&gt;定义矩阵 $A$ 的条件数：&lt;/p&gt;
&lt;p&gt;$$
\kappa(A)=|A|,|A^{-1}|.
$$&lt;/p&gt;
&lt;p&gt;因此&lt;/p&gt;
&lt;p&gt;$$
\frac{|\delta x|}{|x|}
\le
\kappa(A)\frac{|\delta b|}{|b|}.
$$&lt;/p&gt;
&lt;p&gt;条件数的意义：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;它衡量输入相对误差可能被放大多少倍后传到解中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;$\kappa(A)$ 小：问题条件好&lt;/li&gt;
&lt;li&gt;$\kappa(A)$ 大：问题病态，右端项中的小误差可能造成解的大误差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;工程直观：&lt;/p&gt;
&lt;p&gt;如果测量得到的 $b$ 本身有 $10%$ 误差，那么解 $x$ 的误差可能被 $\kappa(A)$ 放大。模型建得好不好，不只看方程形式，也要看条件数是否可接受。&lt;/p&gt;
&lt;p&gt;:::WARNING
条件数描述的是问题本身对扰动的敏感性。&lt;br /&gt;
算法稳定性描述的是计算方法在有限精度下是否额外放大误差。二者都重要。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;本章总结&lt;/h2&gt;
&lt;p&gt;这一章的主线可以压缩成几句话：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;线性方程组 $Ax=b$ 是工程计算的核心问题之一。&lt;/li&gt;
&lt;li&gt;Cramer 法则有理论意义，但运算量过大。&lt;/li&gt;
&lt;li&gt;Gauss 消去法通过消元把方程组化为上三角方程组，再回代求解。&lt;/li&gt;
&lt;li&gt;普通 Gauss 消去可能遇到小主元，导致舍入误差被放大。&lt;/li&gt;
&lt;li&gt;列主元素法通过行交换选较大主元，提高数值稳定性。&lt;/li&gt;
&lt;li&gt;从初等行变换角度看，Gauss 消去本质上产生了 LU 分解。&lt;/li&gt;
&lt;li&gt;不换行时 $A=LU$，带列主元素时 $PA=LU$。&lt;/li&gt;
&lt;li&gt;LU 分解适合同一个 $A$、多个 $b$ 的问题：一次分解，多次前代回代。&lt;/li&gt;
&lt;li&gt;三对角矩阵可用追赶法，计算量从 $O(n^3)$ 降到 $O(n)$。&lt;/li&gt;
&lt;li&gt;对称正定矩阵可用 Cholesky 分解 $A=LL^T$，也可用无需开根号的 $A=LDL^T$。&lt;/li&gt;
&lt;li&gt;范数提供“误差大小”的度量，条件数刻画误差放大能力。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;本章真正要掌握的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;方程组怎么解、为什么这样解、计算量是多少、误差在哪里被放大、矩阵结构如何帮助我们更快更稳地解。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>Chapter1：误差</title><link>https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter1/</link><guid isPermaLink="true">https://www.sleepyfish2031.top/posts/%E8%AF%BE%E7%A8%8B%E7%AC%94%E8%AE%B0/%E8%AE%A1%E7%AE%97%E6%96%B9%E6%B3%95/chapter1/</guid><description>误差来源、绝对误差、相对误差、有效数字、误差传播、算法数值稳定性、病态问题与数值计算注意事项</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;概述&lt;/h2&gt;
&lt;p&gt;这一章的核心是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;数值计算得到的通常是&lt;strong&gt;近似解&lt;/strong&gt;。学习误差，就是要知道误差从哪里来、如何度量、如何传播，以及怎样设计更可靠的计算过程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;计算链条可以概括为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;实际问题  →  抽象、简化  →  数学模型  →  数值计算  →  问题近似解
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在这条链条中，误差不可避免。常见来源包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模型误差&lt;/strong&gt;：实际问题被抽象、简化为数学模型时产生。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;观测误差&lt;/strong&gt;：原始数据来自测量，测量值本身不可能绝对精确。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;截断误差 / 方法误差&lt;/strong&gt;：用有限步骤近似无限过程，或用较易求解的问题近似原问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;舍入误差&lt;/strong&gt;：计算机只能保留有限位数字，必须对数值进行舍入。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本章重点讨论：&lt;strong&gt;截断误差与舍入误差如何影响计算结果&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 插入课堂手写图：实际问题 → 数学模型 → 数值计算 → 近似解，并在箭头处标注误差来源。 --&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;img src=&quot;https://lazysheep-tuchuang-1345706147.cos.ap-shanghai.myqcloud.com/blog/20260531182823.png&quot; style=&quot;width: 420px; max-width: 100%; height: auto; display: block; margin: 0 auto;&quot; /&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A6%82%E8%BF%B0&quot;&gt;概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9B%AE%E5%BD%95&quot;&gt;目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%AF%AF%E5%B7%AE%E7%9A%84%E6%9D%A5%E6%BA%90&quot;&gt;误差的来源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%A8%A1%E5%9E%8B%E8%AF%AF%E5%B7%AE&quot;&gt;模型误差&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%A7%82%E6%B5%8B%E8%AF%AF%E5%B7%AE&quot;&gt;观测误差&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%88%AA%E6%96%AD%E8%AF%AF%E5%B7%AE&quot;&gt;截断误差&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E8%88%8D%E5%85%A5%E8%AF%AF%E5%B7%AE&quot;&gt;舍入误差&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%9D%E5%AF%B9%E8%AF%AF%E5%B7%AE%E7%9B%B8%E5%AF%B9%E8%AF%AF%E5%B7%AE%E4%B8%8E%E6%9C%89%E6%95%88%E6%95%B0%E5%AD%97&quot;&gt;绝对误差、相对误差与有效数字&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BB%9D%E5%AF%B9%E8%AF%AF%E5%B7%AE&quot;&gt;绝对误差&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%9B%B8%E5%AF%B9%E8%AF%AF%E5%B7%AE&quot;&gt;相对误差&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%89%E6%95%88%E6%95%B0%E5%AD%97&quot;&gt;有效数字&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%89%E6%95%88%E6%95%B0%E5%AD%97%E4%B8%8E%E7%9B%B8%E5%AF%B9%E8%AF%AF%E5%B7%AE%E7%9A%84%E5%85%B3%E7%B3%BB&quot;&gt;有效数字与相对误差的关系&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%95%B0%E5%80%BC%E8%AE%A1%E7%AE%97%E4%B8%AD%E8%AF%AF%E5%B7%AE%E7%9A%84%E4%BC%A0%E6%92%AD&quot;&gt;数值计算中误差的传播&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%B8%80%E8%88%AC%E5%87%BD%E6%95%B0%E7%9A%84%E8%AF%AF%E5%B7%AE%E4%BC%A0%E6%92%AD&quot;&gt;一般函数的误差传播&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%9B%9B%E5%88%99%E8%BF%90%E7%AE%97%E7%9A%84%E8%AF%AF%E5%B7%AE%E4%BC%A0%E6%92%AD&quot;&gt;四则运算的误差传播&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E4%B8%AD%E7%9A%84%E8%AF%AF%E5%B7%AE%E6%94%BE%E5%A4%A7%E6%9D%A1%E4%BB%B6%E6%95%B0&quot;&gt;线性方程组中的误差放大：条件数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%97%E6%B3%95%E7%9A%84%E6%95%B0%E5%80%BC%E7%A8%B3%E5%AE%9A%E6%80%A7&quot;&gt;算法的数值稳定性&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BB%80%E4%B9%88%E6%98%AF%E6%95%B0%E5%80%BC%E7%A8%B3%E5%AE%9A%E6%80%A7&quot;&gt;什么是数值稳定性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E4%BE%8B%E9%80%92%E6%8E%A8%E8%AE%A1%E7%AE%97%E7%A7%AF%E5%88%86&quot;&gt;例：递推计算积分&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%95%B0%E5%80%BC%E8%AE%A1%E7%AE%97%E4%B8%AD%E5%BA%94%E6%B3%A8%E6%84%8F%E7%9A%84%E9%97%AE%E9%A2%98&quot;&gt;数值计算中应注意的问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%81%BF%E5%85%8D%E4%B8%A4%E4%B8%AA%E7%9B%B8%E8%BF%91%E6%95%B0%E7%9B%B8%E5%87%8F&quot;&gt;避免两个相近数相减&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%81%BF%E5%85%8D%E5%A4%A7%E6%95%B0%E5%90%83%E5%B0%8F%E6%95%B0&quot;&gt;避免大数吃小数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%81%BF%E5%85%8D%E9%99%A4%E6%95%B0%E7%BB%9D%E5%AF%B9%E5%80%BC%E8%BF%9C%E5%B0%8F%E4%BA%8E%E8%A2%AB%E9%99%A4%E6%95%B0&quot;&gt;避免除数绝对值远小于被除数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E7%AE%80%E5%8C%96%E8%AE%A1%E7%AE%97%E5%87%8F%E5%B0%91%E8%BF%90%E7%AE%97%E6%AC%A1%E6%95%B0&quot;&gt;简化计算，减少运算次数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E9%80%89%E7%94%A8%E6%95%B0%E5%80%BC%E7%A8%B3%E5%AE%9A%E6%80%A7%E5%A5%BD%E7%9A%84%E7%AE%97%E6%B3%95&quot;&gt;选用数值稳定性好的算法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E6%9C%AC%E7%AB%A0%E5%B0%8F%E7%BB%93&quot;&gt;本章小结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;误差的来源&lt;/h2&gt;
&lt;p&gt;数值计算方法研究的是：怎样用计算过程求数学问题的近似解。&lt;/p&gt;
&lt;p&gt;现实问题通常不能直接交给计算机求解，需要经历：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把现实问题抽象成数学模型；&lt;/li&gt;
&lt;li&gt;用数值算法求数学模型的近似解；&lt;/li&gt;
&lt;li&gt;在计算机中用有限精度完成计算。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;每一步都会引入误差。&lt;/p&gt;
&lt;h3&gt;模型误差&lt;/h3&gt;
&lt;p&gt;实际问题的解与数学模型的解之间的差，称为&lt;strong&gt;模型误差&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;例如实际海域、建筑、流场、圆形边界等对象是连续的、复杂的。为了计算，往往要把区域离散成网格，把复杂条件简化为可处理的边界条件。这样得到的数学模型已经是现实问题的近似。&lt;/p&gt;
&lt;p&gt;课堂中用“圆在网格上表示”的例子说明这一点：连续圆形边界落到离散网格上时，圆边界会被网格单元近似，几何形状本身已经发生误差。&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 插入课堂手写图：网格上近似圆形区域，说明连续对象离散化带来的模型误差。 --&amp;gt;&lt;/p&gt;
&lt;h3&gt;观测误差&lt;/h3&gt;
&lt;p&gt;数学问题中的参数常由实验或观测得到。观测值无法绝对准确，因此由观测数据带来的误差称为&lt;strong&gt;观测误差&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;例如长度、速度、温度、流量等物理量来自仪器测量。仪器精度有限，读数本身就带有误差。&lt;/p&gt;
&lt;h3&gt;截断误差&lt;/h3&gt;
&lt;p&gt;许多数学对象本身含有无限过程。计算时只能截取有限项或有限步，因此会产生&lt;strong&gt;截断误差&lt;/strong&gt;，也称&lt;strong&gt;方法误差&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;典型例子是用泰勒级数近似函数：&lt;/p&gt;
&lt;p&gt;$$
\cos x=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\cdots+\frac{(-1)^n x^{2n}}{(2n)!}+\cdots
$$&lt;/p&gt;
&lt;p&gt;当 $|x|$ 很小时，可以用&lt;/p&gt;
&lt;p&gt;$$
\cos x\approx 1-\frac{x^2}{2}
$$&lt;/p&gt;
&lt;p&gt;作为近似。由交错级数的莱布尼茨判别法可知，截断误差的绝对值不超过下一项：&lt;/p&gt;
&lt;p&gt;$$
|R|\le \frac{x^4}{24}.
$$&lt;/p&gt;
&lt;p&gt;所以截断误差来自“无限过程被有限化”。&lt;/p&gt;
&lt;h3&gt;舍入误差&lt;/h3&gt;
&lt;p&gt;计算机不能保存所有实数。无穷小数、位数很多的数都要舍入成有限位数字，由此产生&lt;strong&gt;舍入误差&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;课堂一开始提到的数制转换也说明了这一点：十进制整数可以转成二进制整数，例如&lt;/p&gt;
&lt;p&gt;$$
13_{10}=1101_2,
$$&lt;/p&gt;
&lt;p&gt;但许多十进制小数在二进制中会成为无限循环小数。计算机只能截断或舍入到有限位，于是出现舍入误差。&lt;/p&gt;
&lt;p&gt;:::TIP
数值计算中最常见的危险不是“有误差”，而是&lt;strong&gt;误差在后续运算中被放大&lt;/strong&gt;。所以后面要讨论误差传播、条件数和算法稳定性。
:::&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;绝对误差、相对误差与有效数字&lt;/h2&gt;
&lt;h3&gt;绝对误差&lt;/h3&gt;
&lt;p&gt;设 $x$ 为准确值，$x^&lt;em&gt;$ 为 $x$ 的一个近似值，则近似值 $x^&lt;/em&gt;$ 的&lt;strong&gt;绝对误差&lt;/strong&gt;为&lt;/p&gt;
&lt;p&gt;$$
e(x^&lt;em&gt;)=x-x^&lt;/em&gt;.
$$&lt;/p&gt;
&lt;p&gt;准确值 $x$ 往往未知，所以绝对误差的准确值通常也未知。实际中常估计一个正数 $\varepsilon$，使&lt;/p&gt;
&lt;p&gt;$$
|e(x^&lt;em&gt;)|=|x-x^&lt;/em&gt;|\le \varepsilon.
$$&lt;/p&gt;
&lt;p&gt;这个 $\varepsilon$ 称为 $x^*$ 的&lt;strong&gt;绝对误差限&lt;/strong&gt;，简称&lt;strong&gt;误差限&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;于是准确值 $x$ 必在区间&lt;/p&gt;
&lt;p&gt;$$
x^&lt;em&gt;-\varepsilon\le x\le x^&lt;/em&gt;+\varepsilon
$$&lt;/p&gt;
&lt;p&gt;中，也可以写作&lt;/p&gt;
&lt;p&gt;$$
x=x^*\pm \varepsilon.
$$&lt;/p&gt;
&lt;h4&gt;例：圆周率近似&lt;/h4&gt;
&lt;p&gt;若取&lt;/p&gt;
&lt;p&gt;$$
\pi\approx 3.14,
$$&lt;/p&gt;
&lt;p&gt;由于 $3.14$ 是四舍五入到小数点后两位的结果，所以误差不超过最后保留位的半个单位：&lt;/p&gt;
&lt;p&gt;$$
|\pi-3.14|\le 0.0016&amp;lt;\frac12\times 10^{-2}.
$$&lt;/p&gt;
&lt;p&gt;若取&lt;/p&gt;
&lt;p&gt;$$
\pi\approx 3.142,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
|\pi-3.142|\le 0.00041&amp;lt;\frac12\times 10^{-3}.
$$&lt;/p&gt;
&lt;p&gt;这里可以看出：误差限与保留位数有关，但它不能完全反映近似值本身的精确程度。&lt;/p&gt;
&lt;h3&gt;相对误差&lt;/h3&gt;
&lt;p&gt;绝对误差要结合数量级才有意义。比如同样误差 $0.1$，对测量 $1000$ 米来说很小，对测量 $0.2$ 米来说很大。&lt;/p&gt;
&lt;p&gt;设 $x\ne 0$，近似值 $x^*$ 的&lt;strong&gt;相对误差&lt;/strong&gt;定义为&lt;/p&gt;
&lt;p&gt;$$
e_r(x^&lt;em&gt;)=\frac{e(x^&lt;/em&gt;)}{x}=\frac{x-x^*}{x}.
$$&lt;/p&gt;
&lt;p&gt;由于准确值 $x$ 通常未知，实际常用&lt;/p&gt;
&lt;p&gt;$$
e_r(x^&lt;em&gt;)\approx \frac{e(x^&lt;/em&gt;)}{x^*}
$$&lt;/p&gt;
&lt;p&gt;估计相对误差。&lt;/p&gt;
&lt;p&gt;若存在正数 $\varepsilon_r$，使&lt;/p&gt;
&lt;p&gt;$$
|e_r(x^&lt;em&gt;)|=\left|\frac{e(x^&lt;/em&gt;)}{x^*}\right|\le \varepsilon_r,
$$&lt;/p&gt;
&lt;p&gt;则称 $\varepsilon_r$ 为 $x^*$ 的&lt;strong&gt;相对误差限&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;例：光速测量&lt;/h4&gt;
&lt;p&gt;若实验测得光速&lt;/p&gt;
&lt;p&gt;$$
c^*=2.997925\times 10^5\ \text{km/s},
$$&lt;/p&gt;
&lt;p&gt;其绝对误差限为 $0.1\ \text{km/s}$，则相对误差限为&lt;/p&gt;
&lt;p&gt;$$
\frac{0.1}{2.997925\times 10^5}&amp;lt;4\times 10^{-7}.
$$&lt;/p&gt;
&lt;p&gt;所以 $4\times 10^{-7}$ 可作为该近似值的相对误差限。&lt;/p&gt;
&lt;p&gt;:::TIP
绝对误差回答“差了多少”；相对误差回答“相对于原数差了多大比例”。数值计算中判断精度时，相对误差通常更有可比性。
:::&lt;/p&gt;
&lt;h3&gt;有效数字&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;有效数字&lt;/strong&gt;既能表示近似值的大小，也能表示近似值的精确程度。&lt;/p&gt;
&lt;p&gt;在计算中，常按四舍五入原则取近似值。若近似值 $x^*$ 的误差限为&lt;/p&gt;
&lt;p&gt;$$
\frac12\times 10^{-n},
$$&lt;/p&gt;
&lt;p&gt;则称 $x^*$ &lt;strong&gt;准确到小数点后第 $n$ 位&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;从第一个非零数字到该精确位之间的所有数字，都称为有效数字。&lt;/p&gt;
&lt;h4&gt;例：$\sqrt2$ 的近似值&lt;/h4&gt;
&lt;p&gt;$$
\sqrt2=1.414213562\cdots
$$&lt;/p&gt;
&lt;p&gt;若取四位小数：&lt;/p&gt;
&lt;p&gt;$$
x^*=1.414,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
|\sqrt2-1.414|\le \frac12\times 10^{-3},
$$&lt;/p&gt;
&lt;p&gt;所以 $1.414$ 有 $4$ 位有效数字。&lt;/p&gt;
&lt;p&gt;若取八位小数：&lt;/p&gt;
&lt;p&gt;$$
x^*=1.4142136,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
|\sqrt2-1.4142136|\le \frac12\times 10^{-7},
$$&lt;/p&gt;
&lt;p&gt;所以它有 $8$ 位有效数字。&lt;/p&gt;
&lt;h4&gt;例：小数前有零时的有效数字&lt;/h4&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
x=0.003400\pm \frac12\times 10^{-5},
$$&lt;/p&gt;
&lt;p&gt;则该近似值准确到小数点后第 $5$ 位。从第一个非零数字 $3$ 到这一位共有&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3, 4, 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;所以 $0.003400$ 有 $3$ 位有效数字。前面的零只起定位作用，不计入有效数字。&lt;/p&gt;
&lt;h4&gt;例：整数部分较大时&lt;/h4&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
x^*=1452.046
$$&lt;/p&gt;
&lt;p&gt;有 $7$ 位有效数字，则误差限为&lt;/p&gt;
&lt;p&gt;$$
\frac12\times 10^{-3}.
$$&lt;/p&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
x^*=1452.0
$$&lt;/p&gt;
&lt;p&gt;有 $5$ 位有效数字，则误差限为&lt;/p&gt;
&lt;p&gt;$$
\frac12\times 10^{-1}.
$$&lt;/p&gt;
&lt;p&gt;注意：末尾的 $0$ 若位于有效位范围内，也应计为有效数字。&lt;/p&gt;
&lt;h3&gt;有效数字与相对误差的关系&lt;/h3&gt;
&lt;p&gt;若近似值的规格化形式为&lt;/p&gt;
&lt;p&gt;$$
x^*=\pm 0.a_1a_2\cdots a_n\times 10^m,\qquad a_1\ne 0,
$$&lt;/p&gt;
&lt;p&gt;并且 $x^*$ 有 $n$ 位有效数字，则其相对误差限可取&lt;/p&gt;
&lt;p&gt;$$
\varepsilon_r=\frac{1}{2a_1}\times 10^{-n+1}.
$$&lt;/p&gt;
&lt;p&gt;反过来，如果相对误差限满足&lt;/p&gt;
&lt;p&gt;$$
\varepsilon_r\le \frac{1}{2(a_1+1)}\times 10^{-n+1},
$$&lt;/p&gt;
&lt;p&gt;则 $x^*$ 至少有 $n$ 位有效数字。&lt;/p&gt;
&lt;h4&gt;例：$e$ 的近似值&lt;/h4&gt;
&lt;p&gt;若&lt;/p&gt;
&lt;p&gt;$$
e\approx 2.72,
$$&lt;/p&gt;
&lt;p&gt;这里 $a_1=2$，且有 $3$ 位有效数字，所以相对误差限为&lt;/p&gt;
&lt;p&gt;$$
\varepsilon_r=\frac{1}{2\times 2}\times 10^{-3+1}=0.25\times 10^{-2}.
$$&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;数值计算中误差的传播&lt;/h2&gt;
&lt;p&gt;误差进入计算过程后，会通过函数运算继续传播。&lt;/p&gt;
&lt;h3&gt;一般函数的误差传播&lt;/h3&gt;
&lt;p&gt;设数值计算问题为&lt;/p&gt;
&lt;p&gt;$$
y=f(x_1,x_2,\cdots,x_n),
$$&lt;/p&gt;
&lt;p&gt;参数 $x_1,x_2,\cdots,x_n$ 的近似值分别为&lt;/p&gt;
&lt;p&gt;$$
x_1^&lt;em&gt;,x_2^&lt;/em&gt;,\cdots,x_n^*.
$$&lt;/p&gt;
&lt;p&gt;对应的近似结果为&lt;/p&gt;
&lt;p&gt;$$
y^&lt;em&gt;=f(x_1^&lt;/em&gt;,x_2^&lt;em&gt;,\cdots,x_n^&lt;/em&gt;).
$$&lt;/p&gt;
&lt;p&gt;当数据误差较小时，由多元函数的一阶泰勒展开，有&lt;/p&gt;
&lt;p&gt;$$
e(y^&lt;em&gt;)=y-y^&lt;/em&gt;
\approx \sum_{i=1}^{n}\frac{\partial f(x_1^&lt;em&gt;,\cdots,x_n^&lt;/em&gt;)}{\partial x_i},e(x_i^*).
$$&lt;/p&gt;
&lt;p&gt;这说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;输出误差大约等于各输入误差经过偏导数加权后的和。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其相对误差为&lt;/p&gt;
&lt;p&gt;$$
e_r(y^&lt;em&gt;)=\frac{e(y^&lt;/em&gt;)}{y^&lt;em&gt;}
\approx
\sum_{i=1}^{n}
\frac{\partial f(x_1^&lt;/em&gt;,\cdots,x_n^&lt;em&gt;)}{\partial x_i}
\frac{x_i^&lt;/em&gt;}{f(x_1^&lt;em&gt;,\cdots,x_n^&lt;/em&gt;)}
e_r(x_i^*).
$$&lt;/p&gt;
&lt;p&gt;其中&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial f}{\partial x_i}\frac{x_i^*}{f}
$$&lt;/p&gt;
&lt;p&gt;反映了第 $i$ 个输入相对误差对输出相对误差的放大程度。&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 插入课堂手写图：$y=f(x_1,\cdots,x_n)$ 的误差传播推导，重点标出一阶泰勒展开和偏导数加权。 --&amp;gt;&lt;/p&gt;
&lt;h3&gt;四则运算的误差传播&lt;/h3&gt;
&lt;p&gt;由一般公式可推出四则运算中的误差传播规律。&lt;/p&gt;
&lt;h4&gt;和、差&lt;/h4&gt;
&lt;p&gt;$$
e(x_1\pm x_2)=e(x_1)\pm e(x_2),
$$&lt;/p&gt;
&lt;p&gt;$$
e_r(x_1\pm x_2)=\frac{x_1}{x_1\pm x_2}e_r(x_1)\pm \frac{x_2}{x_1\pm x_2}e_r(x_2).
$$&lt;/p&gt;
&lt;p&gt;由此可得误差限估计：&lt;/p&gt;
&lt;p&gt;$$
|e(x_1\pm x_2)|\le |e(x_1)|+|e(x_2)|.
$$&lt;/p&gt;
&lt;p&gt;结论：&lt;strong&gt;和差的绝对误差限不超过各数绝对误差限之和&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;积&lt;/h4&gt;
&lt;p&gt;$$
e(x_1x_2)\approx x_2e(x_1)+x_1e(x_2),
$$&lt;/p&gt;
&lt;p&gt;$$
e_r(x_1x_2)\approx e_r(x_1)+e_r(x_2).
$$&lt;/p&gt;
&lt;p&gt;结论：&lt;strong&gt;乘积的相对误差近似等于各因子相对误差之和&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;商&lt;/h4&gt;
&lt;p&gt;$$
e\left(\frac{x_1}{x_2}\right)\approx \frac{1}{x_2}e(x_1)-\frac{x_1}{x_2^2}e(x_2),
$$&lt;/p&gt;
&lt;p&gt;$$
e_r\left(\frac{x_1}{x_2}\right)\approx e_r(x_1)-e_r(x_2).
$$&lt;/p&gt;
&lt;p&gt;误差限估计为&lt;/p&gt;
&lt;p&gt;$$
\left|e_r\left(\frac{x_1}{x_2}\right)\right|
\le |e_r(x_1)|+|e_r(x_2)|.
$$&lt;/p&gt;
&lt;h4&gt;例：$y=x^n$&lt;/h4&gt;
&lt;p&gt;令&lt;/p&gt;
&lt;p&gt;$$
y=x^n.
$$&lt;/p&gt;
&lt;p&gt;由相对误差公式：&lt;/p&gt;
&lt;p&gt;$$
e_r(y)=d(\ln x^n)=n,d(\ln x)=n e_r(x).
$$&lt;/p&gt;
&lt;p&gt;所以&lt;/p&gt;
&lt;p&gt;$$
e_r(x^n)\approx n e_r(x).
$$&lt;/p&gt;
&lt;p&gt;特别地，若&lt;/p&gt;
&lt;p&gt;$$
y=\sqrt{x}=x^{1/2},
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
e_r(y)\approx \frac12 e_r(x).
$$&lt;/p&gt;
&lt;p&gt;也就是说，开平方会把输入相对误差约缩小一半；取 $n$ 次幂会把相对误差约放大 $n$ 倍。&lt;/p&gt;
&lt;h4&gt;例：计算 $x^*=1.21\times 3.65-9.81$&lt;/h4&gt;
&lt;p&gt;假定参与运算的数据都准确到两位小数，则每个输入的绝对误差限均为&lt;/p&gt;
&lt;p&gt;$$
\frac12\times 10^{-2}.
$$&lt;/p&gt;
&lt;p&gt;设&lt;/p&gt;
&lt;p&gt;$$
f(a,b,c)=ab-c,
$$&lt;/p&gt;
&lt;p&gt;其中 $a=1.21,b=3.65,c=9.81$。由误差传播公式，&lt;/p&gt;
&lt;p&gt;$$
e(f)\approx b e(a)+a e(b)-e(c).
$$&lt;/p&gt;
&lt;p&gt;于是绝对误差限满足&lt;/p&gt;
&lt;p&gt;$$
|e(f)|\le (3.65+1.21+1)\times \frac12\times 10^{-2}=0.0293.
$$&lt;/p&gt;
&lt;p&gt;近似结果为&lt;/p&gt;
&lt;p&gt;$$
f^*=1.21\times 3.65-9.81=-5.3935.
$$&lt;/p&gt;
&lt;p&gt;相对误差限可估计为&lt;/p&gt;
&lt;p&gt;$$
\frac{|e(f)|}{|f^*|}\le \frac{0.0293}{5.3935}\approx 0.0054.
$$&lt;/p&gt;
&lt;p&gt;因此该计算结果大约有两位有效数字。&lt;/p&gt;
&lt;h3&gt;线性方程组中的误差放大：条件数&lt;/h3&gt;
&lt;p&gt;课堂还补充了线性方程组中误差放大的问题。&lt;/p&gt;
&lt;p&gt;考虑&lt;/p&gt;
&lt;p&gt;$$
Ax=b.
$$&lt;/p&gt;
&lt;p&gt;如果右端项 $b$ 有扰动 $\delta b$，对应解的扰动为 $\delta x$，则&lt;/p&gt;
&lt;p&gt;$$
A(x+\delta x)=b+\delta b.
$$&lt;/p&gt;
&lt;p&gt;由 $Ax=b$ 得&lt;/p&gt;
&lt;p&gt;$$
A\delta x=\delta b,
$$&lt;/p&gt;
&lt;p&gt;从而&lt;/p&gt;
&lt;p&gt;$$
\delta x=A^{-1}\delta b.
$$&lt;/p&gt;
&lt;p&gt;取范数，有&lt;/p&gt;
&lt;p&gt;$$
|\delta x|\le |A^{-1}|,|\delta b|.
$$&lt;/p&gt;
&lt;p&gt;另一方面，&lt;/p&gt;
&lt;p&gt;$$
|b|=|Ax|\le |A|,|x|.
$$&lt;/p&gt;
&lt;p&gt;于是得到相对误差估计：&lt;/p&gt;
&lt;p&gt;$$
\frac{|\delta x|}{|x|}
\le
|A|,|A^{-1}|\frac{|\delta b|}{|b|}.
$$&lt;/p&gt;
&lt;p&gt;定义矩阵 $A$ 的&lt;strong&gt;条件数&lt;/strong&gt;为&lt;/p&gt;
&lt;p&gt;$$
\operatorname{cond}(A)=|A|,|A^{-1}|.
$$&lt;/p&gt;
&lt;p&gt;因此&lt;/p&gt;
&lt;p&gt;$$
\frac{|\delta x|}{|x|}
\le
\operatorname{cond}(A)\frac{|\delta b|}{|b|}.
$$&lt;/p&gt;
&lt;p&gt;:::TIP
条件数衡量的是问题本身对扰动的敏感程度。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\operatorname{cond}(A)$ 小：右端项小扰动通常只导致解的小扰动。&lt;/li&gt;
&lt;li&gt;$\operatorname{cond}(A)$ 大：右端项很小的误差也可能被严重放大。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种问题称为&lt;strong&gt;病态问题&lt;/strong&gt;或&lt;strong&gt;病态线性方程组&lt;/strong&gt;。
:::&lt;/p&gt;
&lt;h4&gt;例：Hilbert 矩阵&lt;/h4&gt;
&lt;p&gt;课堂用 Hilbert 矩阵演示病态性。Hilbert 矩阵定义为&lt;/p&gt;
&lt;p&gt;$$
H_{ij}=\frac{1}{i+j-1},\qquad 1\le i,j\le n.
$$&lt;/p&gt;
&lt;p&gt;例如&lt;/p&gt;
&lt;p&gt;$$
H_3=
\begin{bmatrix}
1 &amp;amp; \frac12 &amp;amp; \frac13\
\frac12 &amp;amp; \frac13 &amp;amp; \frac14\
\frac13 &amp;amp; \frac14 &amp;amp; \frac15
\end{bmatrix}.
$$&lt;/p&gt;
&lt;p&gt;课堂中用软件计算得到：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cond(hilb(4))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结果约为&lt;/p&gt;
&lt;p&gt;$$
1.55\times 10^4.
$$&lt;/p&gt;
&lt;p&gt;继续增大阶数：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cond(hilb(10))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;结果约为&lt;/p&gt;
&lt;p&gt;$$
1.60\times 10^{13}.
$$&lt;/p&gt;
&lt;p&gt;这说明 Hilbert 矩阵随阶数增大迅速变得极度病态。即使输入数据只产生很小扰动，解也可能出现明显误差。&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 插入课堂手写 / 软件演示截图：Hilbert 矩阵 $H_{ij}=1/(i+j-1)$，以及 &lt;code&gt;cond(hilb(4))≈1.55e4&lt;/code&gt;、&lt;code&gt;cond(hilb(10))≈1.60e13&lt;/code&gt; 的结果。 --&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;算法的数值稳定性&lt;/h2&gt;
&lt;h3&gt;什么是数值稳定性&lt;/h3&gt;
&lt;p&gt;同一个数学问题可以有多种算法。数学上等价的算法，在有限精度计算中效果可能差别很大。&lt;/p&gt;
&lt;p&gt;如果计算过程中产生的舍入误差不会持续放大，这类算法称为&lt;strong&gt;数值稳定&lt;/strong&gt;；如果误差在递推或迭代中不断被放大，则称为&lt;strong&gt;数值不稳定&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;:::WARNING
要区分两个概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;问题病态性&lt;/strong&gt;：问题本身对输入扰动敏感，常用条件数衡量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;算法稳定性&lt;/strong&gt;：算法在计算过程中是否放大舍入误差。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;病态问题即使用稳定算法也很难算准；良态问题若选了不稳定算法，也可能算坏。
:::&lt;/p&gt;
&lt;h3&gt;例：递推计算积分&lt;/h3&gt;
&lt;p&gt;考虑积分&lt;/p&gt;
&lt;p&gt;$$
I_n=\int_0^1\frac{x^n}{x+5},dx,\qquad n=0,1,2,\cdots
$$&lt;/p&gt;
&lt;p&gt;由&lt;/p&gt;
&lt;p&gt;$$
\frac{x^n}{x+5}+5\frac{x^{n-1}}{x+5}=x^{n-1}
$$&lt;/p&gt;
&lt;p&gt;可得递推关系&lt;/p&gt;
&lt;p&gt;$$
I_n+5I_{n-1}=\int_0^1 x^{n-1},dx=\frac1n.
$$&lt;/p&gt;
&lt;p&gt;另外，由于 $0\le x\le 1$ 时&lt;/p&gt;
&lt;p&gt;$$
5\le x+5\le 6,
$$&lt;/p&gt;
&lt;p&gt;所以有估计&lt;/p&gt;
&lt;p&gt;$$
\frac{1}{6(n+1)}&amp;lt;I_n&amp;lt;\frac{1}{5(n+1)}.
$$&lt;/p&gt;
&lt;p&gt;这给出了 $I_n$ 的正性和大致范围。&lt;/p&gt;
&lt;h4&gt;算法 I：正向递推&lt;/h4&gt;
&lt;p&gt;先算&lt;/p&gt;
&lt;p&gt;$$
I_0=\int_0^1\frac{1}{x+5},dx=\ln\frac65=\ln 1.2.
$$&lt;/p&gt;
&lt;p&gt;再由&lt;/p&gt;
&lt;p&gt;$$
I_n=\frac1n-5I_{n-1},\qquad n=1,2,\cdots
$$&lt;/p&gt;
&lt;p&gt;依次计算 $I_1,I_2,\cdots$。&lt;/p&gt;
&lt;p&gt;课堂演示代码可以写成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;I = zeros(30, 1);
I(1) = log(1.2);
for n = 1:29
    I(n + 1) = 1/n - 5 * I(n);
end
I(1:15)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;问题在于：若 $I_0$ 有误差 $e_0$，且递推中不再产生新的舍入误差，则&lt;/p&gt;
&lt;p&gt;$$
e_n=I_n-I_n^*=-5e_{n-1}.
$$&lt;/p&gt;
&lt;p&gt;因此&lt;/p&gt;
&lt;p&gt;$$
e_n=(-5)^n e_0.
$$&lt;/p&gt;
&lt;p&gt;也就是说，每向前递推一步，误差约放大 $5$ 倍。正向递推是数值不稳定的。&lt;/p&gt;
&lt;h4&gt;算法 II：反向递推&lt;/h4&gt;
&lt;p&gt;先取一个较大的 $n$，用上下界给出 $I_n$ 的粗略近似。例如取&lt;/p&gt;
&lt;p&gt;$$
I_{14}^*=\frac12\left(\frac{1}{6\times 15}+\frac{1}{5\times 15}\right)\approx 0.01222222.
$$&lt;/p&gt;
&lt;p&gt;再由递推式改写为&lt;/p&gt;
&lt;p&gt;$$
I_{k-1}=\frac15\left(\frac1k-I_k\right),\qquad k=n,n-1,\cdots,1.
$$&lt;/p&gt;
&lt;p&gt;从 $I_{14}$ 反推 $I_{13},I_{12},\cdots,I_0$。&lt;/p&gt;
&lt;p&gt;课堂演示代码可以写成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;I = zeros(15, 1);
I(15) = 0.5 * (1/(6*15) + 1/(5*15));
for k = 14:-1:1
    I(k) = (1/k - I(k + 1)) / 5;
end
I
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;误差满足&lt;/p&gt;
&lt;p&gt;$$
e_{k-1}=-\frac15 e_k.
$$&lt;/p&gt;
&lt;p&gt;所以反向递推时，误差每一步约缩小为原来的 $1/5$。反向递推是数值稳定的。&lt;/p&gt;
&lt;h4&gt;两种算法结果对比&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;$n$&lt;/th&gt;
&lt;th&gt;算法 I 正向递推&lt;/th&gt;
&lt;th&gt;算法 II 反向递推&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0.18232155&lt;/td&gt;
&lt;td&gt;0.18232155&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0.08839225&lt;/td&gt;
&lt;td&gt;0.08839222&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0.05803875&lt;/td&gt;
&lt;td&gt;0.05803892&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0.04313958&lt;/td&gt;
&lt;td&gt;0.04313873&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;0.03430208&lt;/td&gt;
&lt;td&gt;0.03430633&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;0.02848958&lt;/td&gt;
&lt;td&gt;0.02846835&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0.02418750&lt;/td&gt;
&lt;td&gt;0.02432491&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;0.02176390&lt;/td&gt;
&lt;td&gt;0.02123260&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0.01618305&lt;/td&gt;
&lt;td&gt;0.01883699&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;0.03019588&lt;/td&gt;
&lt;td&gt;0.01692617&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;-0.05097941&lt;/td&gt;
&lt;td&gt;0.01536914&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;0.34580612&lt;/td&gt;
&lt;td&gt;0.01406339&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;-0.64569760&lt;/td&gt;
&lt;td&gt;0.01301636&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;8.30540938&lt;/td&gt;
&lt;td&gt;0.01184127&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;-41.45618310&lt;/td&gt;
&lt;td&gt;0.01222222&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;由积分定义可知 $I_n&amp;gt;0$。正向递推到后面甚至得到负数，明显错误；反向递推得到的结果保持合理。&lt;/p&gt;
&lt;p&gt;:::TIP
这个例子说明：算法不能只看数学等价性，还要看误差在计算过程中的传播方式。
:::&lt;/p&gt;
&lt;p&gt;&amp;lt;!-- TODO: 插入课堂软件演示截图：正向递推代码与输出结果，显示后期结果出现负数和巨大偏差。 --&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;数值计算中应注意的问题&lt;/h2&gt;
&lt;p&gt;由于误差会传播和放大，数值计算中要尽量避免下列现象。&lt;/p&gt;
&lt;h3&gt;避免两个相近数相减&lt;/h3&gt;
&lt;p&gt;两个相近数相减时，结果很小，而相对误差可能很大。&lt;/p&gt;
&lt;p&gt;由差的相对误差公式，若&lt;/p&gt;
&lt;p&gt;$$
u=x-y,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
e_r(u)=\frac{e(x)-e(y)}{x-y}.
$$&lt;/p&gt;
&lt;p&gt;当 $x\approx y$ 时，分母 $x-y$ 很小，误差会被放大，有效数字会严重损失。这种现象称为&lt;strong&gt;相消误差&lt;/strong&gt;。&lt;/p&gt;
&lt;h4&gt;例：计算 $\sqrt{1+10^{-7}}-1$&lt;/h4&gt;
&lt;p&gt;如果直接计算&lt;/p&gt;
&lt;p&gt;$$
x=\sqrt{1+10^{-7}}-1,
$$&lt;/p&gt;
&lt;p&gt;由于 $\sqrt{1+10^{-7}}\approx 1$，两个相近数相减会丢失有效数字。&lt;/p&gt;
&lt;p&gt;可做代数变形：&lt;/p&gt;
&lt;h1&gt;$$
\sqrt{1+10^{-7}}-1&lt;/h1&gt;
&lt;p&gt;\frac{10^{-7}}{\sqrt{1+10^{-7}}+1}.
$$&lt;/p&gt;
&lt;p&gt;这样避免了相近数直接相减。&lt;/p&gt;
&lt;h4&gt;例：计算 $1-\cos 2^\circ$&lt;/h4&gt;
&lt;p&gt;利用四位数学表，&lt;/p&gt;
&lt;p&gt;$$
\cos 2^\circ\approx 0.9994.
$$&lt;/p&gt;
&lt;p&gt;若直接计算&lt;/p&gt;
&lt;p&gt;$$
1-\cos2^\circ\approx 1-0.9994=0.0006,
$$&lt;/p&gt;
&lt;p&gt;该近似值只有一位有效数字。&lt;/p&gt;
&lt;p&gt;若改用恒等式&lt;/p&gt;
&lt;p&gt;$$
1-\cos2^\circ=2\sin^21^\circ,
$$&lt;/p&gt;
&lt;p&gt;查表得&lt;/p&gt;
&lt;p&gt;$$
\sin1^\circ\approx 0.0175,
$$&lt;/p&gt;
&lt;p&gt;于是&lt;/p&gt;
&lt;p&gt;$$
1-\cos2^\circ\approx 2(0.0175)^2=0.6125\times 10^{-3}.
$$&lt;/p&gt;
&lt;p&gt;这时至少有两位有效数字。&lt;/p&gt;
&lt;p&gt;常用的避免相消变形包括：&lt;/p&gt;
&lt;p&gt;$$
1-\cos x=2\sin^2\frac{x}{2},
$$&lt;/p&gt;
&lt;p&gt;$$
\frac{1-\cos x}{\sin x}=\frac{\sin x}{1+cos x},
$$&lt;/p&gt;
&lt;p&gt;$$
\sqrt{x+1}-\sqrt{x}=\frac{1}{\sqrt{x+1}+\sqrt{x}},
$$&lt;/p&gt;
&lt;p&gt;$$
\frac1x-\frac1{x+1}=\frac{1}{x(x+1)}.
$$&lt;/p&gt;
&lt;h3&gt;避免大数吃小数&lt;/h3&gt;
&lt;p&gt;计算机有限位运算中，若一个很大的数与一个很小的数相加，小数部分可能被舍去。&lt;/p&gt;
&lt;p&gt;例如&lt;/p&gt;
&lt;p&gt;$$
a=10^9+1.
$$&lt;/p&gt;
&lt;p&gt;为了使两项数量级相同，可写成&lt;/p&gt;
&lt;p&gt;$$
a=0.1\times 10^{10}+0.0000000001\times 10^{10}.
$$&lt;/p&gt;
&lt;p&gt;如果计算机只能保留 $8$ 位小数，则第二项会被舍去，得到&lt;/p&gt;
&lt;p&gt;$$
a\approx 0.1\times 10^{10}=10^9.
$$&lt;/p&gt;
&lt;p&gt;这就是“大数吃小数”。&lt;/p&gt;
&lt;h4&gt;例：二次方程求根&lt;/h4&gt;
&lt;p&gt;求方程&lt;/p&gt;
&lt;p&gt;$$
x^2-(10^9+1)x+10^9=0
$$&lt;/p&gt;
&lt;p&gt;的根。&lt;/p&gt;
&lt;p&gt;容易看出两个根为&lt;/p&gt;
&lt;p&gt;$$
x_1=10^9,
\qquad
x_2=1.
$$&lt;/p&gt;
&lt;p&gt;若直接使用求根公式，&lt;/p&gt;
&lt;p&gt;$$
x=\frac{10^9+1\pm \sqrt{(10^9+1)^2-4\times 10^9}}{2},
$$&lt;/p&gt;
&lt;p&gt;在计算较小根时会出现两个相近大数相减，可能得到错误结果。&lt;/p&gt;
&lt;p&gt;对于较小根，应该用等价公式&lt;/p&gt;
&lt;p&gt;$$
x_2=\frac{2\times 10^9}{10^9+1+\sqrt{(10^9+1)^2-4\times 10^9}}.
$$&lt;/p&gt;
&lt;p&gt;这样避免了大数相减，能得到&lt;/p&gt;
&lt;p&gt;$$
x_2\approx 1.
$$&lt;/p&gt;
&lt;h3&gt;避免除数绝对值远小于被除数&lt;/h3&gt;
&lt;p&gt;由商的绝对误差传播公式：&lt;/p&gt;
&lt;p&gt;$$
e\left(\frac{x}{y}\right)=\frac{y e(x)-x e(y)}{y^2}.
$$&lt;/p&gt;
&lt;p&gt;当 $|y|\ll |x|$ 时，分母 $y^2$ 很小，误差会被显著放大。&lt;/p&gt;
&lt;p&gt;所以在数值计算中，应尽量避免把很小的数放到分母里，特别是在小分母本身还有误差时。&lt;/p&gt;
&lt;h3&gt;简化计算，减少运算次数&lt;/h3&gt;
&lt;p&gt;运算次数越多，舍入误差累计的机会越多。选择合适公式可以同时减少计算量和误差积累。&lt;/p&gt;
&lt;h4&gt;例：计算 $\ln 2$&lt;/h4&gt;
&lt;p&gt;若用交错级数&lt;/p&gt;
&lt;p&gt;$$
\ln2=1-\frac12+\frac13-\frac14+\cdots+\frac{(-1)^{n-1}}{n}+\cdots
$$&lt;/p&gt;
&lt;p&gt;取前 $n$ 项时，截断误差约不超过&lt;/p&gt;
&lt;p&gt;$$
\frac{1}{n+1}.
$$&lt;/p&gt;
&lt;p&gt;若要求误差小于 $10^{-5}$，需要&lt;/p&gt;
&lt;p&gt;$$
n\ge 10^5.
$$&lt;/p&gt;
&lt;p&gt;这意味着要计算十万项，效率很低，而且舍入误差也会累积。&lt;/p&gt;
&lt;p&gt;利用级数&lt;/p&gt;
&lt;p&gt;$$
\ln\frac{1+x}{1-x}=2\left(x+\frac{x^3}{3}+\frac{x^5}{5}+\cdots+\frac{x^{2n+1}}{2n+1}+\cdots\right),
$$&lt;/p&gt;
&lt;p&gt;取&lt;/p&gt;
&lt;p&gt;$$
x=\frac13,
$$&lt;/p&gt;
&lt;p&gt;则&lt;/p&gt;
&lt;p&gt;$$
\ln2=\frac23\left[1+\frac{1}{3\times 9}+\frac{1}{5\times 9^2}+\cdots+\frac{1}{(2n+1)9^n}+\cdots\right].
$$&lt;/p&gt;
&lt;p&gt;若只取前 $5$ 项，截断误差满足&lt;/p&gt;
&lt;h1&gt;$$
e&amp;lt;\frac{2}{3}\cdot\frac{1}{11\times 9^5}\left(1+\frac19+\frac{1}{9^2}+\cdots\right)&lt;/h1&gt;
&lt;p&gt;\frac{1}{12\times 11\times 9^4}&amp;lt;10^{-5}.
$$&lt;/p&gt;
&lt;p&gt;显然，第二种算法效率更高。&lt;/p&gt;
&lt;h4&gt;例：多项式求值与秦九韶算法&lt;/h4&gt;
&lt;p&gt;设&lt;/p&gt;
&lt;p&gt;$$
P_n(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0.
$$&lt;/p&gt;
&lt;p&gt;若直接按定义计算，需要约&lt;/p&gt;
&lt;p&gt;$$
\frac{n(n+1)}2
$$&lt;/p&gt;
&lt;p&gt;次乘法和 $n$ 次加法。&lt;/p&gt;
&lt;p&gt;利用秦九韶算法，将多项式写成&lt;/p&gt;
&lt;p&gt;$$
P_n(x)=a_0+x{a_1+x[a_2+\cdots+x(a_{n-1}+a_nx)]}.
$$&lt;/p&gt;
&lt;p&gt;递推形式为&lt;/p&gt;
&lt;p&gt;$$
\begin{cases}
u_n=a_n,\
u_k=xu_{k+1}+a_k,\qquad k=n-1,n-2,\cdots,0,\
P_n(x)=u_0.
\end{cases}
$$&lt;/p&gt;
&lt;p&gt;这样只需 $n$ 次乘法和 $n$ 次加法。&lt;/p&gt;
&lt;h3&gt;选用数值稳定性好的算法&lt;/h3&gt;
&lt;p&gt;算法的数学形式可能等价，但数值效果可能相差很大。&lt;/p&gt;
&lt;p&gt;选择算法时应优先考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否会导致相近数相减；&lt;/li&gt;
&lt;li&gt;是否会让小误差在递推中持续放大；&lt;/li&gt;
&lt;li&gt;是否会出现大数吃小数；&lt;/li&gt;
&lt;li&gt;是否可通过变形减少运算次数；&lt;/li&gt;
&lt;li&gt;问题本身是否病态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前面的积分递推例子表明：同一递推关系正向计算不稳定，反向计算稳定。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;本章小结&lt;/h2&gt;
&lt;p&gt;这一章可以抓住四条主线。&lt;/p&gt;
&lt;p&gt;第一，误差来源：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;模型误差、观测误差、截断误差、舍入误差
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本章重点关注截断误差和舍入误差。&lt;/p&gt;
&lt;p&gt;第二，误差度量：&lt;/p&gt;
&lt;p&gt;$$
e(x^&lt;em&gt;)=x-x^&lt;/em&gt;,
\qquad
|e(x^*)|\le \varepsilon,
$$&lt;/p&gt;
&lt;p&gt;$$
e_r(x^&lt;em&gt;)\approx \frac{e(x^&lt;/em&gt;)}{x^&lt;em&gt;},
\qquad
|e_r(x^&lt;/em&gt;)|\le \varepsilon_r.
$$&lt;/p&gt;
&lt;p&gt;有效数字用来同时描述近似值的大小和精度。若&lt;/p&gt;
&lt;p&gt;$$
x^*=\pm 0.a_1a_2\cdots a_n\times 10^m,
$$&lt;/p&gt;
&lt;p&gt;且有 $n$ 位有效数字，则&lt;/p&gt;
&lt;p&gt;$$
\varepsilon_r=\frac{1}{2a_1}\times 10^{-n+1}
$$&lt;/p&gt;
&lt;p&gt;可作为相对误差限。&lt;/p&gt;
&lt;p&gt;第三，误差传播：&lt;/p&gt;
&lt;p&gt;$$
e(y^&lt;em&gt;)\approx \sum_{i=1}^{n}\frac{\partial f}{\partial x_i}e(x_i^&lt;/em&gt;),
$$&lt;/p&gt;
&lt;p&gt;相对误差传播由&lt;/p&gt;
&lt;p&gt;$$
\frac{\partial f}{\partial x_i}\frac{x_i^*}{f}
$$&lt;/p&gt;
&lt;p&gt;决定放大倍数。&lt;/p&gt;
&lt;p&gt;四则运算中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;和差主要看绝对误差；&lt;/li&gt;
&lt;li&gt;积商主要看相对误差；&lt;/li&gt;
&lt;li&gt;相近数相减最容易丢失有效数字。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第四，算法选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;避免相消；&lt;/li&gt;
&lt;li&gt;避免大数吃小数；&lt;/li&gt;
&lt;li&gt;避免小分母放大误差；&lt;/li&gt;
&lt;li&gt;简化计算、减少运算次数；&lt;/li&gt;
&lt;li&gt;选数值稳定的算法；&lt;/li&gt;
&lt;li&gt;对线性方程组，还要关注条件数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本章最重要的思想是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;数值计算不仅要算出一个答案，还要知道这个答案是否可靠，以及为什么可靠。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item></channel></rss>