跳到主要内容

数值计算基础

数值计算基础研究如何在有限精度计算机上稳定、高效地求解线性方程组、非线性方程、积分与特征值等问题。它是几乎所有建模方法的“底层水电”:优化迭代、微分方程离散、回归求解、主成分分析,最终都落到这些基本运算上。

如果只会调用 A\b、fzero、integral、eig,在顺利时没有问题;一旦遇到不收敛、结果离谱或条件数爆炸,就需要本门类的概念来诊断:问题病态、算法不稳,还是实现写错?

这一门类解决什么问题​

建模过程中你会反复遇到:

  • 解 Ax=bAx=b(法方程、有限差分、网络流线性化、牛顿步等);
  • 求根 f(x)=0f(x)=0(平衡点、隐含方程、临界阈值);
  • 计算积分 ∫abf(x) dx\int_a^b f(x)\,\mathrm{d}x(期望、面积、概率、弱形式组装的一维原型);
  • 求特征值/特征向量(振动模态、PageRank、PCA、稳定性、马尔可夫谱隙)。

本门类不追求把你训练成数值分析专家,但要求你能:

  1. 选出合适量级的算法;
  2. 设置合理容差与停止准则;
  3. 用残差、条件数、收敛曲线解释结果;
  4. 在病态时知道该缩放、换模型还是加正则。

如何选择方法​

问题信号优先考虑
中小规模稠密 Ax=bAx=b,直接法高斯消去 / LU 分解
大型稀疏、对角占优Jacobi / Gauss-Seidel(及后续 Krylov 阅读)
连续函数变号求根二分法(稳)
光滑且导数可得、初值较好牛顿法(快)
导数难求割线法
光滑积分、节点可自由选Gauss 求积
简单实现、函数表积分梯形 / Simpson
主特征值幂法
全部或大量特征值QR 算法(或 eig)

口诀:直接法问稳定,迭代法问收敛,求根问初值/括号,积分问光滑,特征值问要几个。

推荐学习顺序​

  1. 浮点与误差直觉、条件数;
  2. 线性方程组直接法(高斯、LU)与主元;
  3. 迭代法与收敛条件;
  4. 非线性求根(二分、牛顿、割线);
  5. 数值积分(梯形、Simpson、Gauss);
  6. 特征值(幂法、QR)。

每学一个算法,至少做两件事:与 MATLAB 内置函数对照;人为制造一个失败例子(病态、坏初值、奇异积分)。

与其他门类的关系​

  • 优化:牛顿法、最小二乘法方程、KKT 线性系统;
  • 微分方程数值解:每步都在解线性/非线性方程;
  • 统计与 PCA:特征值与线性最小二乘;
  • 仿真:积分与随机量估计的数值误差要分开报告。

使用提醒​

  • 先估条件数再谈算法:病态问题任何算法都难救;
  • 直接法重稳定性(主元),迭代法重收敛判据;
  • 求根与优化都依赖初值与括号区间;
  • 积分要区分方法误差与函数奇性/振荡;
  • 论文中写清容差、迭代次数、残差,而不是只给最终数字;
  • 避免 inv(A)*b,优先 A\b。

最小诊断清单​

当结果“看起来不对”时,依次检查:

  1. 量纲与缩放是否让矩阵元素相差 10810^{8} 以上?
  2. cond / 主元是否异常?
  3. 残差 ∥Ax−b∥\|Ax-b\| 与解误差是否被混淆?
  4. 迭代是否其实在发散?
  5. 积分区间是否含奇点?
  6. 特征值问题要的是全部谱还是极端特征值?

进入具体方法页后,建议对同一问题用两种算法对照,观察精度、迭代与稳定性差异。