38 分钟
单变量微积分精读

极限的严格语言:为什么「越来越靠近」不够用(ε-δ 定义)

把「无限接近」翻译成可以逐行验证的 ε-δ 语言,亲手在线性与非线性函数上求出 δ,并识别极限不存在的三种情形

  • 说清为什么「越来越靠近」不是严格定义,理解去心邻域与误差带的几何意义
  • 能默写并解释 lim x→a f(x)=L 的 ε-δ 定义,理解 ∀ε、∃δ 的量词顺序
  • 线性函数能直接求 δ,x² 这类非线性函数用有界化技巧,δ=min(1,ε/5)
  • 判断极限是否存在,就看左、右极限是不是相等,还有函数在该点附近有没有界。

「无限接近」是一句危险的话——我们需要一台可以判定的机器

你大概早就会说:当 x 趋近 2 时,2x+1 趋近 5。可「趋近」到底是什么意思?是 x 等于 2 吗?不是,极限恰恰在 x≠a 的地方谈。是函数值和 5 的差「越来越小」吗?可「越来越小」无法判定——小到多少算够?振荡着靠近算不算?两个人争一个极限存不存在,谁来裁决?微积分在 17 世纪被发明后,正是因为这套语言不严格,争吵了将近两百年,直到 19 世纪柯西、魏尔斯特拉斯用 ε(epsilon)和 δ(delta)把它彻底说清楚,分析学才真正站稳。

别背定义,要做台「判定机器」:给任意函数、任意点 a、任意候选极限 L,按固定流程能答它收不收敛、要多靠近才够近。这台机器日后会反复用——数值算法的停机条件、梯度下降的收敛判据、浮点误差估计,本质全是 ε-δ。

1.1 先把「靠近」量化:去心邻域与误差带

「x 靠近 a」翻译成不等式就是 |x−a|<δ(δ 是一个很小的正数,读作 delta,代表你允许的输入半径)。极限不关心 x=a 那一点本身,所以严格写是 0<|x−a|<δ:中间挖掉 a,称为 a 的去心邻域。为什么挖掉?因为函数在 a 点甚至可以没有定义,但极限照样存在——极限描述的是「路过 a 附近」的行为,不是「站在 a 上」。

「f(x)靠近L」翻译成|f(x)−L|<ε。ε读作epsilon,是你事先定好的能容忍的输出误差。几何上:纵轴以L为中心画一条宽2ε的水平误差带,横轴以a为中心找一个宽2δ的竖直窗口;极限成立的要求是,只要x落进这个竖直窗口(除中心点),曲线就必须全部落在那条水平误差带里,一个点都不许漏出去。

ℹ️ε 是「考卷标准」,δ 是「你交出的答卷」

整个定义是一场问答:考官先任意宣布一个再小都行的 ε,你必须能据此交出一个 δ。换一个更苛刻的 ε,你就得交出一个更小的 δ。关键是:对每一个 ε 都要答得上来,不是只答对一次。

看个最小算例,体会为啥要挖掉中心点。令 g(x)=(x²−1)/(x−1),它在 x=1 处无定义,因为分母为0,但只要x≠1就能约成g(x)=x+1,所以x→1时g(x)→2,极限照样是2,跟g(1)存不存在没关系。再比如h(x)定义成x≠1时取x+1、x=1时故意取100,x→1的极限还是2。单点改了不影响极限——极限刻画的是a的去心邻域里的整体趋势,不是a点本身的取值。

1.2 ε-δ 定义逐字拆解,以及量词的生死顺序

现在给出严格定义。称 lim x→a f(x)=L,当且仅当:对任意 ε>0,都存在 δ>0,使得只要 0<|x−a|<δ,就有 |f(x)−L|<ε。用逻辑符号写:∀ε>0, ∃δ>0, 0<|x−a|<δ ⟹ |f(x)−L|<ε。

严格性

量词顺序绝不能换:∀ε 必须在 ∃δ 前面

∀ε∃δ 的顺序是定义的灵魂:先有任意给定的误差要求 ε,再去找为了满足它所需的输入精度 δ,所以 δ 通常是 ε 的函数 δ(ε),ε 越小、δ 往往越小。若倒过来说成「存在一个 δ 对任意 ε 都成立」,就变成要求一个固定输入精度同时满足所有(包括趋于 0 的)误差,这几乎永远不可能。记住:标准是考官先定的,你不能反过来要求考官用你的精度。

δ 只允许依赖 ε 和点 a,绝不允许依赖 x。因为在你选定 δ、圈定邻域之前,x 还是邻域里「任意一个」尚未确定的点,让 δ 依赖 x 等于循环论证。这是后面找 Bug 题的核心考点。

有人问:定义要求对任意 ε,为什么证明时只盯很小的 ε?因为对某个小 ε₀ 找到 δ₀ 后,任何更大的 ε≥ε₀,同一个 δ₀ 肯定也能用——能进窄误差带,自然能进更宽的。真正难的是 ε 任意小的情况。所以直接把 δ 写成 ε 的表达式 δ(ε),让它对多小的 ε 都有效,一次覆盖所有 ε,不用也没法逐个枚举数字。这就是必须写 δ(ε),不能只代一个具体数值的根本原因。

1.3 手算例一(线性):lim x→2 (2x+1)=5,δ 怎么求

第一步,写出要控制的目标:|(2x+1)−5|=|2x−4|=2|x−2|。第二步,把它和输入距离 |x−2| 挂钩:我们希望 2|x−2|<ε,即 |x−2|<ε/2。第三步,读出 δ:取 δ=ε/2 即可。于是只要 0<|x−2|<δ=ε/2,就必有 |(2x+1)−5|=2|x−2|<2·(ε/2)=ε,链条严丝合缝,证毕。线性函数的特点是 δ 与 ε 成固定比例,这里比例系数是 1/2,斜率越大、同样 ε 需要的 δ 越小,符合直觉:陡的函数要控制得更紧。

代个具体数检验:若考官要 ε=0.1,就取 δ=0.05;当 x 落在 (1.95, 2.05)(去掉 2 本身),2x+1 就落在 (4.9, 5.1),与 5 的差不超过 0.1。他再要 ε=0.001,取 δ=0.0005,照样成立。因为对任意 ε 都能这样答,极限才成立。

示例代码(可运行)

把这个例子一般化:对线性函数 f(x)=kx+b,|f(x)−(ka+b)|=|k|·|x−a|,所以统一取 δ=ε/|k|(k≠0)即可;斜率 |k| 越大,同样 ε 需要的 δ 越小,和「陡的函数更难控制」完全一致。若 k=0(常数函数 f(x)≡b),输出恒等于 L,任取 δ>0 都满足,这正是「常数的极限是它自身」的严格证明。ε-δ 不只是证明工具,它还顺手给出了「输入误差被放大多少倍」的定量关系——这个放大倍数,就是日后数值分析里的条件数。

选择题

关于 ε-δ 定义,下列说法正确的是?

1.4 手算例二(非线性):lim x→2 x²=4,必须「有界化」

照抄线性做法会撞墙。目标 |x²−4|=|x−2|·|x+2|,这里多了个随 x 变的 |x+2|,没法直接解只含 ε 的 δ。诀窍是:先主动把 x 限制在 a 附近一个固定小邻域里,把捣乱因子 |x+2| 用常数上界摁住,这一步叫有界化。

先要求 |x−2|<1,等价于1<x<3,于是3<x+2<5,得到|x+2|<5,常数上界到手。 |x²−4|=|x−2|·|x+2|<5|x−2|;要让它<ε,只需|x−2|<ε/5。 别忘了额外用了|x−2|<1这个前提,两个条件要同时满足,取两者较小者:δ=min(1, ε/5)。 验证:当0<|x−2|<δ,必有|x−2|<1(保证上界5有效)且|x−2|<ε/5,于是|x²−4|<5·(ε/5)=ε。 证毕。

填空题填写空白处的代码
# 证明 lim x→2 x^2 = 4 的关键两步 # 1) 先限定邻域半径 1,得到 |x+2| < (常数上界) # 2) 于是 |x^2-4| = |x-2|*|x+2| < 5|x-2|,要 < eps 需 |x-2| < eps/5 # 3) 两个半径同时满足,最终 delta = (1, eps/5) # 填函数名

为什么非要 min?看反例就懂:若 ε=100,ε/5=20,一旦 |x−2| 取到 20,x 跑到 −18 附近,此时 |x+2|=16 远不止 5,「|x+2|<5」的上界直接失效,整条不等式链断裂。min(1,ε/5) 里的 1 是保险:无论 ε 多大,先把 x 锁在 |x−2|<1 内,上界 5 永远成立;ε 很小、ε/5<1 时,min 自动取 ε/5,精度也够。一个 min 同时管住「上界恒有效」和「误差必达标」两件事。

⚠️两个高频致命错

让 δ 依赖 x:比如写 δ=ε/|x+2|,看似解出了不等式,但 x 还没被邻域确定,属于循环论证,必须先用固定邻域把 |x+2| 摁成常数;忘记 min:只用 δ=ε/5 却没保证 |x−2|<1,「|x+2|<5」这个上界在 x 离 2 较远时失效,证明有漏洞。

1.5 极限不存在的三种典型情形

ε-δ 这台机器不仅能证明存在,也能判定不存在。三种最常见的「不存在」:左右极限不相等(在跳跃点两侧函数奔向不同值);无限振荡(x→0 时 sin(1/x) 在 −1 与 1 之间越震越快,任何误差带都框不住);无界发散(x→0 时 1/x 的绝对值无限增大,不奔向任何有限 L)。

分段阶跃函数:x≥0 取 1、x<0 取 −1。x→0⁺ 的右极限是 1,x→0⁻ 的左极限是 −1,两者不相等,因此 x→0 的极限不存在。函数在 0 点有没有定义、定义成几,都不影响这个结论。

预测输出
f = lambda x: 1 if x >= 0 else -1,问 x→0f(x) 的极限是什么?(结合左右极限)
配对题把符号与它的精确含义配对
找 Bugδ=eps/x 让 δ 依赖了邻域里还没确定的 x,属于循环论证。线性题本来可以直接算出和 x 无关的 δ=eps/2。
# 试图证明 lim x→3 (2x) = 6 # 作者写道: # |2x-6| = 2|x-3| < eps,于是取 delta = eps / x # 因为当 |x-3| < eps/x 时就有 2|x-3| < eps,证毕

1.6 单侧极限:极限存在的充要条件

把 x→a 拆成两个方向:x 从大于 a 一侧靠近,记 x→a⁺,得右极限 L⁺;从小于 a 一侧靠近,记 x→a⁻,得左极限 L⁻。极限存在的充要条件:lim x→a f(x)=L 当且仅当左、右极限都存在且都等于 L。这个规则最实用的地方是快速判断极限不存在:只要两侧极限不等,或者有一侧极限不存在,整体极限就不存在,不用硬套 ε-δ 去算。遇到分段函数的分界点、含 |x| 的函数(|x| 在 0 点左右斜率不同但极限相同,注意区分)、取整函数,都要先分左右看极限。

动手算两个典型。绝对值 f(x)=|x| 在 x→0:右极限 x→0⁺ 时 |x|=x→0,左极限 x→0⁻ 时 |x|=−x→0,两侧都为 0,故 lim x→0 |x|=0。虽然 |x| 在 0 点左右表达式不同、图像有尖点,但两侧极限相等;尖点影响的是可导性而非极限存在性,后面讲导数时你会再次见到它。取整函数 ⌊x⌋ 在整数点 n:x→n⁻ 时 ⌊x⌋=n−1,x→n⁺ 时 ⌊x⌋=n,左右相差 1,故整数点处极限不存在;在非整数点附近取整值不变,极限存在。口诀:先分别写两侧表达式,再看它们是否殊途同归。

函数极限和数列极限靠海涅定理(归结原则)等价:lim x→a f(x)=L,当且仅当对任何一列趋于a(但不等于a)的点xₙ,都有f(xₙ)→L。它主要用来反过来证明极限不存在:只要找到两列趋于a的点,让f在这两列上趋于不同值,就能直接判定极限不存在。sin(1/x)这个例子,就是取两列特殊点让函数分别趋近1和-1,从而确定它没有极限——这把1.5的振荡反例和极限的严格定义连起来了。

🐍ε-δ 在工程与 AI 里的真身:一切「收敛判据」

以后几乎不会手写 ε-δ 证明,但它的思想无处不在。数值迭代的停机条件:梯度下降、牛顿法常用 ‖xₙ₊₁−xₙ‖<ε(相邻两步小于容差)或 |损失ₙ₊₁−损失ₙ|<ε 作为「收敛」判据,这正是「输入变化被 δ 级邻域控制、输出变化小于 ε」的离散版;算法稳定性/条件数:函数越陡(相当于线性例里斜率越大),输入扰动被放大越多,需要更小的 δ——条件数度量的就是这件事;浮点与误差预算:ε 对应你能接受的数值误差,δ 对应输入/舍入要控制到的量级。把 ε-δ 学成「给多少输入精度、能保多少输出精度」的定量直觉,比背定义有用得多。

💡拿到一个极限,按这张清单走

先分左右看是否一致,分段点、绝对值、取整这些步骤必须做;写出 |f(x)−L|,因式分解出 |x−a|;线性的话直接算 δ=ε/C;非线性的话先有界化,限定 |x−a|<1 摁住其余因子,再算 δ=min(1, ε/M);代个具体的 ε,比如 0.1,回代检验端点;证「不存在」的话,就找任意小邻域里两个跑出同一误差带的点。

本节小结

严格极限 = 一台问答机器:∀ε>0(考官任意定误差带)∃δ>0(你交出输入半径),使 0<|x−a|<δ ⟹ |f(x)−L|<ε;δ 依赖 ε 但绝不依赖 x,量词顺序不可换。线性函数一步解 δ=ε/C;非线性函数先有界化(限定邻域把变因子压成常数 M)再取 δ=min(1,ε/M)。极限存在当且仅当左右极限存在且相等;左右不等、无限振荡、无界发散是三种「不存在」。这套「以输入精度保输出精度」的思想,正是数值算法收敛判据与误差控制的内核。

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

它把「无限接近」这种模糊说法严格化:对任意你给定的接近程度 ε(函数值与目标的差距),我都能找到一个 δ(自变量的范围),只要自变量落在这个范围内就能保证输出达到你要的精度。这套「以有限控无限」的语言是整个微积分的地基,也是绝大多数证明题的标准书写套路。