形式陈述
数值微分的输入是函数求值过程、求导点 、差分公式和候选步长;输出是导数近似,以及所用步长和误差诊断。函数值不是精确黑箱:设每次求值得到 ,其中 同时包含浮点舍入、内部算法误差和观测噪声。
对前向差分,若 在邻域内有界,截断项为 。两个函数值的误差经除法放大,给出形如
的简化模型; 还携带 的尺度与函数实现常数。令两项平衡,可得
这不是普适数值,因为 会随变量尺度、函数值和求值算法改变。
中心差分的截断项为 ,而函数值误差仍约按 放大:
平衡点满足
一般 阶截断公式对应 ,其平衡尺度为 乘上问题相关因子。更高形式阶会改变左侧斜率,却不会消除右侧的舍入增长。
一个可执行流程应先按 和函数变化尺度选取若干几何递减的 ,计算相邻结果与参考值或高阶估计的差,再寻找误差下降后的平台或反弹。若 、函数值非有限、差分结果剧烈跳动或继续减小 不再改善,应停止并报告分辨率或求值噪声限制,而不是返回最小步长的结果。
对 个候选步长,中心差分需要至多 次函数求值;前向差分复用 后需要 次。除保存诊断历史外,计算可用 工作存储;函数求值昂贵时,这项成本应与最终误差一起报告。
若函数值本身只有绝对精度 ,舍入项应改成 ;测量噪声往往远大于机器 。因此固定推荐 会把数据尺度和求值质量藏掉,不能作为通用停止准则。
直觉
步长较大时,两端函数值相隔太远,割线尚不能代表切线,截断误差占主导。步长逐渐缩小时,局部模型变好;但两次函数值也越来越接近,相减后只剩一个小分子,原有舍入和噪声被 放大。两种趋势相遇后形成 U 形曲线,最低点附近才是当前公式和精度下可利用的区域。
这也解释了为什么微分比函数求值更敏感:求导在连续函数空间上本来就会放大高频扰动。差分公式没有创造这项困难,只是把它以步长和相减的形式暴露出来。
例子与边界
用 binary64 中心差分估计 ,一次典型运行得到下表;具体末位会随数学库和平台略有变化。
|
绝对误差 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
误差先按中心公式的二阶趋势下降,在 附近达到本次 sweep 的最低值,随后因消去公理库消去误差与稳定重写Cancellation and stable reformulation · Catastrophic cancellation解释相近量相减为何会放大已有误差,并用等价公式、缩放和专用函数改造有限精度计算路径。和函数求值舍入迅速反弹。表格说明最低点必须通过尺度分析或步长实验寻找,不能从“binary64 有约 16 位小数”直接推出。
复步长公式
不做两个接近实数的相减,在解析函数上可保留很小 的精度,并具有 截断误差。它要求 能全纯延拓且实现完整保留复数运算;绝对值、最大值、条件分支或只接受实数的外部程序会破坏推导,因此它不是任意黑箱函数的替代品。
自动微分沿程序的链式法则传播导数,符号微分操作表达式,二者通常没有差分的步长权衡;它们仍可能遇到不可微分支、数值溢出或程序语义问题。区分这些工具是为了选对误差模型,不是把“数值微分”泛化为所有求导实现。
推论与应用
差分梯度常用于检查解析梯度或自动微分结果。检查失败时,应先做步长 sweep 并观察 U 形区域,再判断是目标函数不光滑、函数值有噪声,还是被检查的梯度确有错误;单一 的一次差值无法定位原因。
有限差分公式公理库有限差分公式Finite-difference formulas · Finite-difference stencil用邻近节点的函数值近似导数,并以矩条件推导差分权重、截断阶和边界公式。给出截断阶,浮点误差模型公理库浮点算术标准误差模型Standard floating-point arithmetic model以每次基本运算的小相对扰动和 gamma 记号组织多步浮点误差分析。解释舍入项,二者合在一起才构成总误差分析。报告结果时应给函数值精度、变量缩放、步长序列、误差度量和停止原因。
参考资料
- Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms, 2nd ed., SIAM, 2002, Chs. 1–3.
- David Goldberg, “What Every Computer Scientist Should Know About Floating-Point Arithmetic,” ACM Computing Surveys 23(1), 1991.
- NIST Digital Library of Mathematical Functions, §3.4: Differentiation.