跳转至

无限逼近何时会失败?

先备知识

前两单元的二分过程并非因为“不断重复”而可靠:它每一步都保留已知含有目标的半区间,并把区间长度减半。第 3 单元还把这件事改写成了给定误差后的明确步数。

本单元反过来问:若一个过程只是在产生很多数,或者只报告一个很小的计算量,能否据此断言它靠近目标?答案是否定的。我们只用已有的不等式、平方比较与区间包含关系来说明失败,不使用连续性、介值定理或数列极限的正式定义。

学习目标

完成本单元后,你应能:

  1. 用具体数列说明“项在变化”不等于“项靠近某个目标”;
  2. 区分函数的残差与近似值到目标根的位置误差;
  3. 用“目标仍在区间内”这一不变量识别错误的伪二分法;
  4. 说明为何振荡、发散或无误差证书的过程不能代替严格保证。

牵引问题

有人把计算器连续按很多次,得到一串看似稳定的小数;有人又说某个表达式的值已经很小,所以“根一定找对了”。这两句话各缺了什么?

上一单元的可靠性可以追溯到可检查的陈述:每一步目标仍在保留区间内,区间长度已知,输出到目标的距离有上界。若其中任何一项被删掉,次数再多也未必提供精度。

探索与猜想

先看两列最简单的数:

\[ x_n=(-1)^n=(-1,1,-1,1,\ldots), \qquad y_n=n=(1,2,3,\ldots). \]

\(x_n\) 永远在两个值之间振荡,\(y_n\) 则不断增大。它们都产生无限多个项,却没有给出“从某一步起,所有项都落在同一个很小目标区间内”的证书。

再看二分:从 \([1,2]\) 取中点 \(3/2\)。因为 \((3/2)^2>2\),正确规则应保留 \([1,3/2]\)。若反而保留 \([3/2,2]\),会发生什么?目标 \(\sqrt2\) 已经被排除;后来再怎样二分,也不能补回这一事实。

概念与理论

无证书近似

把第 \(n\) 步输出记为 \(x_n\),目标记为 \(r\)。若只知道“算了很多步”“小数位变化变慢”或“某个表达式看起来很小”,却没有一个可验证的上界

\[ |x_n-r|\le E_n \]

以及由 \(E_n\) 推出给定精度所需步骤的论证,我们称它为无证书近似。这不是说输出一定错误;而是说仅凭现有信息,不能证明它满足指定的位置精度。

第 4 章中可靠的二分法有这样的证书:目标始终位于 \([a_n,b_n]\),中点误差不超过 \((b_n-a_n)/2\)。因此它不依赖肉眼判断小数“像不像稳定”。

三个互补的检查角度

检查一个逼近过程时,可以从下面三个互补的检查角度入手:具体项的行为、它是否远离一个固定目标,以及现有信息是否足以证明误差。这三者不构成互斥分类:同一过程可以既振荡又没有误差证书;一个没有证书的过程也未必已经被证明远离目标。本单元只给出可直接核验的反例和信息检查。

  • 振荡: 例如 \(x_n=(-1)^n\)\(-1\)\(1\) 间周期性来回,任意一小段只含一个候选目标的区间都不能从某一步起一直容纳全部后续项。
  • 远离固定目标的反例: \(y_n=n\) 对任意实数 \(r\),只要 \(n>|r|+1\),就有 \(|y_n-r|=|n-r|\ge n-|r|>1\);它不会长期停在 \(r\) 周围。这是“发散”一词将来要覆盖的典型现象之一,但这里不把它当作正式定义。
  • 无证书近似: 输出可能偶尔很接近目标,也可能不接近;问题在于没有由过程本身推出的误差界,因而不能回答“要保证误差小于 \(10^{-6}\),至少做几步”。

振荡与远离固定目标给出的是两种可观察的反例;无证书近似指出的是信息或证明不足。第二部将以数列收敛的正式定义统一判定这些情形;本单元不预先替代那套理论。

残差不是位置误差

若方程写成 \(f(x)=0\),把 \(|f(x)|\) 称为该候选值的残差;若已知目标根为 \(r\),把 \(|x-r|\) 称为位置误差。二者量纲和大小一般不同。

没有额外条件时,小残差不能推出小位置误差。原因很直接:把同一个方程左边乘上很小的正数,根的位置完全不变,残差却整体缩小。这个反例只用线性函数和四则运算,不需要微积分。

伪二分法为什么不可靠

二分法的核心不变量不是“区间长度每步减半”,而是

\[ r\in[a_n,b_n]. \]

长度减半只能说明一个区间变小;若它已经不含目标,变得再小也只是在精确地锁定错误位置。对 \(\sqrt2\) 的专门二分法还利用 \(a_n^2<2<b_n^2\) 判断该保留哪一半。把这个平方比较方向颠倒,算法形式仍像二分,却不再拥有正确性证明。

例题与迁移

例:小残差并不锁定位置

考虑方程

\[ f(x)=10^{-12}(x-1)=0. \]

它的根是 \(r=1\)。取 \(x=1001\),则

\[ |f(1001)|=10^{-12}|1001-1|=10^{-9}, \]

这是一个很小的残差;但是位置误差为

\[ |1001-r|=1000. \]

所以“残差小”本身不等于“位置误差小”。若要从残差推出位置误差,必须另有把两者联系起来的已证明不等式;本书将在具备相应理论之后再讨论这种条件。

例:伪二分法怎样丢失目标

\([1,2]\) 夹住 \(\sqrt2\),中点为 \(m=3/2\)。有

\[ m^2=\frac94>2, \qquad 1<\sqrt2<\frac32. \]

正确规则应保留 \([1,3/2]\)。设一个伪规则错误地说:“当 \(m^2>2\) 时保留右半区间。”它会保留 \([3/2,2]\)。但

\[ \sqrt2<\frac32, \]

所以 \(\sqrt2\notin[3/2,2]\)。此后即使每次仍把区间长度减半,所有输出都来自一个不含目标的区间,不能从区间长度推出对 \(\sqrt2\) 的误差上界。这正是“不变量先于次数”的含义。

即时检验与回望

  1. \((-1)^n\) 为什么不能作为“越来越靠近 \(0\)”的证据?
答案

它在 \(-1\)\(1\) 之间周期性振荡;例如无论从哪一步开始,后面仍会出现距离 \(0\)\(1\) 的项。因此只观察到“项在不断生成”并不能得到位置误差越来越小的证书。

  1. 一个算法每次都把区间长度减半,是否自动保证它逼近原目标?
答案

不自动保证。还必须证明原目标始终位于所保留的区间中。若某一步丢失目标,后续缩短的只是错误区间。

  1. 例题中 \(10^{-9}\) 很小,为何仍不能说 \(1001\) 是根 \(1\) 的好近似?
答案

\(10^{-9}\) 是函数值的残差,不是位置误差;该例的位置误差是 \(1000\)。把函数整体乘以很小的常数会缩小残差,却不改变根的位置。

回看牵引问题:可靠近似需要的是可传递到位置误差的证明,而不是重复次数、视觉上的小数稳定,或孤立的“小量”。这也解释了下一部为何要正式建立数列收敛的语言。

习题与答案

ex-u-01-04-04-01

\(z_n=2+(-1)^n\)。写出它的前四项,并说明它为何不能被“从某一步起总在 \((2-1/2,2+1/2)\) 内”描述。

答案

前四项为 \(1,3,1,3\)。每一项到 \(2\) 的距离都是 \(1\),因此没有任何后续项落在 \((3/2,5/2)\) 内;它是以 \(2\) 为中心的周期性振荡,而非有误差缩小证书的近似。

ex-u-01-04-04-02

\(g(x)=10^{-8}(x-4)\),候选值为 \(x=104\)。分别计算根、残差和位置误差,并说明哪一个量回答“候选值离根多远”。

答案

根为 \(4\)。残差为 \(|g(104)|=10^{-8}\cdot100=10^{-6}\),位置误差为 \(|104-4|=100\)。回答“离根多远”的是位置误差;残差小并没有单独给出它的上界。

ex-u-01-04-04-03

\(\sqrt2\) 的二分过程,若某步中点 \(m\) 满足 \(m^2>2\),写出正确应保留的半区间,并说明所保持的不变量。

答案

应保留 \([a,m]\)。因为端点原先满足 \(a<\sqrt2<b\),又因 \(m>0\)\(m^2>2=(\sqrt2)^2\),得到 \(m>\sqrt2\),故 \(a<\sqrt2<m\)。保持的不变量是 \(\sqrt2\in[a_n,b_n]\),更强地说是 \(a_n^2<2<b_n^2\)

ex-u-01-04-04-04

完整解答。\([1,2]\) 出发,某伪二分规则规定:若中点 \(m\) 满足 \(m^2>2\),就保留 \([m,b]\);若 \(m^2<2\),就保留 \([a,m]\)。证明这个规则在第一步已经不能给出 \(\sqrt2\) 的误差证书,并说明“区间长度减半”为什么不足以挽救它。

答案

第一步中点为 \(m=3/2\),且 \(m^2=9/4>2\)。伪规则保留 \([3/2,2]\)。但正平方根满足 \(\sqrt2<3/2\),因为 \((3/2)^2>2=(\sqrt2)^2\) 且平方在正数上严格保序。因此 \(\sqrt2\notin[3/2,2]\)

后续无论怎样把这个区间再减半,所得所有子区间都包含在 \([3/2,2]\) 内,仍不含 \(\sqrt2\)。所以不能用“目标与输出都在同一保留区间内”推出 \(|x-\sqrt2|\) 的上界。长度确实减半,但它描述的是错误区间的长度;缺失的不变量不能由更多次数补回来。