数值分析
计算机运算通常要用到舍入和近似。数值分析要回答的是:这些做法会让结果偏离真值多少,怎样把误差控制在可接受范围内?主要问题包括:
- 浮点数表示与舍入误差;
- 问题对输入扰动的敏感性(conditioning)与算法的稳定性;
- 求根与优化;
- 插值与近似;
- 数值微分与数值积分;
- 线性方程组与微分方程。
需要系统学习求解方法并练习时,可以使用 MIT OpenCourseWare 18.330 的讲义和习题集。
判断近似结果需要哪些概念
先分清两个问题:误差有多大,以及误差从哪里来。设精确值为 ,近似值为 ,绝对误差为 ;当 时,相对误差为 。真值接近零时,必须设置绝对容差。
条件性描述数学问题对输入扰动的敏感程度。例如 ,若两个输入的相对不确定度均不超过 ,输出的绝对不确定度至多为 。将它除以 就得到相对界;两数接近时,这个界会很大。换一个算法无法找回输入中本来就缺失的信息。
稳定性描述算法如何传播舍入等计算误差。后向稳定算法返回的是某个邻近输入问题的精确解,但输出是否精确仍取决于问题的条件性。有限精度还会使等价代数式表现不同:在 binary64 算术下,(1e16 + 1) - 1e16 得到 0.0,不是实数算术中的 1。
离散化误差来自用有限采样代替连续问题。加密网格可以减小它,但不能因此消除输入不确定度或舍入误差。数值积分笔记给出了完整的入门案例:公式、可执行代码、光滑性假设、误差界,以及无穷尾部截断的独立误差界。
实际计算时,先指定绝对和相对容差,检查定义域与条件性,再比较加密结果;若有解析误差界,应同时使用。相邻两次近似很接近,只是支持精度的证据,不是证明。