连续性与连续函数的基本性质
上一章研究函数极限时,我们刻意把 x=a 那一点拿开了:x 靠近 a 时 f(x) 去哪里,和 f(a) 有没有定义、取了什么值,是两件事。连续性正是把这两件事重新对齐的条件。它要求函数在点上的实际取值,恰好等于附近输入所逼近的输出。
微积分里常把连续函数说成“图像能一笔画完”。这个画面有帮助,却不是定义。它默认了定义域像一段没有缺口的线,也默认了图像足够规整;一旦函数在有理数和无理数之间交替取值,或定义域本身很零散,“笔该怎么走”已经无从判断。本章要把这种直觉换成能做证明的语言,并学会判断它在什么地方失效。

连续性首先是局部性质。判断 f 在 c 是否连续,只检查定义域中靠近 c 的输入;函数在很远处怎样取值,不会改变这个判断。不过“靠近”始终要相对于定义域说,不能忘记哪些输入本来就允许代入。
为什么“一笔画”不是定义
对常见的多项式、三角函数和指数函数,一笔画的比喻往往没有惹麻烦:笔尖稍微挪动,图像的高度也只是稍微变化。但它没说清“稍微”到底是多少,也没有告诉我们遇到密集交错的输入时该怎样判定。
看函数
D(x)={1,0,x∈Q,x
无论你把笔尖放在实轴的哪个位置 c,任意小的邻域里同时有有理数和无理数。把输入往 c 挪得再近,输出也会在 1 与 0 之间切换。这里不是曲线“拐得很急”,而是任何局部范围里都没有稳定的输出趋势。用“一笔画”描述它没有可操作的标准;用严格定义则能明确判定:它在每一点都不连续。
这类反例还有一个容易说错的地方。有理数稠密、无理数也稠密,意思是每个非空开区间里都能找到这两类数;它并不意味着某一类数能够“填补”另一类数的缺口。稠密性在这里提供的是两种任意靠近同一点的输入路径,正好足以检验连续性。
所以我们需要的不是图像印象,而是一句带量词的话:不管输出允许的误差有多小,都能规定一个输入范围,让该范围内定义域中的每个输入都满足输出误差要求。
点连续:把极限值和函数值对上
设 E⊂R,f:E→R,并且 c∈E。称 f 在 连续,如果对每个 ,都存在 ,使得对每个 ,只要
∣x−c∣<δ,
就有
∣f(x)−f(c)∣<ε.
这里没有 0<∣x−c∣。因为连续性检查的对象包括 x=c,而此时不等式自动成立;更重要的是,写下 f(c) 已经要求 c 在定义域中。函数没有在 定义,就谈不上“在 连续”。
你可以把定义看成一次严格的应答。对方先指定输出误差 ε,而且可以挑得任意苛刻;我们随后给出输入半径 δ。这个 δ 可以依赖于 ε、点 c 和函数本身,但不能等到看见某个具体 x 后再临时更换。给出的一个 δ 必须同时管住定义域中所有满足 的 。
与函数极限的关系
如果 c 是 E 的聚点,那么
f 在 c 连续⟺x→c,x∈Elimf(x)=f
右边的极限定义要排除 x=c,左边的连续定义不排除。二者之所以等价,是因为在连续性不等式中,x=c 这一种情形本来没有增加限制。这个等价式把检查连续性拆成三步:f(c) 必须有定义;附近极限必须存在;那个极限必须正好等于 f(c)。
聚点条件不是装饰。设
E={0}∪[1,2],f(0)=17,
而 f 在 [1,2] 上怎样定义暂且不管。取 δ=1/2,定义域中满足 ∣x−0∣<δ 的点只有 本身,于是 自动在 连续。这是相对于 的连续性; 周围并没有来自 的点可以逼近它。把“极限等于函数值”的说法直接套到这种孤立点,会掩盖这个事实。
连续性不是“只要极限存在”。极限存在但与 f(c) 不相等,仍然不连续;反过来,给 f(c) 随意改一个值也不会改变删除该点后的极限。连续性要求的是两者精确相等。
单侧连续和区间端点
当点 c 位于定义域区间的内部,左右两边都能靠近它。此时 f 在 c 连续,当且仅当它左连续、右连续,并且三者取同一个值:
x→c−limf(x)=f(c)=
右连续的 ε–δ 版本是:对每个 ε>0,存在 δ>0,使得当 x∈E 且
c≤x<c+δ
时,∣f(x)−f(c)∣<ε。左连续只需把条件换成 c−δ<x≤c。这些写法仍然强调 ;如果定义域缺了许多点,不在定义域的数不需要接受检验。
于是,对区间连续的说法应当带上端点规则:
- f 在 (a,b) 连续,表示它在每个 c∈(a,b) 连续;
- f 在 [a, 连续,表示它在 连续且在 右连续;
端点不需要凭空检查区间外的一侧。比如 s(x)=x 定义在 [0,∞) 上,0 处的连续性只问 的输入。给定 ,取 ;若 ,则
∣s(x)−s(0)∣=x<
所以 s 在 0 右连续,也就是相对于其定义域在 0 连续。不能因为它没有左侧定义就把它判为不连续。
再看
p(x)={x+2,x2,
在 0 的左侧,函数值趋于 2;在右侧,函数值趋于 0,并且 p(0)=0。右连续并不能替代双侧连续:两侧极限不同,所以 p 在内点 0 不连续。
用 ε–δ 亲手证明
定义看上去抽象,实际证明通常有同一条路线:先把 ∣f(x)−f(c)∣ 化成含有 ∣x−c∣ 的量;如果还出现不受控制的因子,先把 x 限制在 c 附近,再选择 。
例题:多出一个因子时怎样选半径
证明 q(x)=x2+2x 在任意 c∈R 连续。
给定 ε>0,先做代数变形:∣q(x)−q。真正会趋于零的是 ,但另一个因子现在还不能直接用 控制。
例题:分母为什么要先远离零
设 r(x)=1/(x+3),证明它在任意 c=−3 处连续。直接相减得到
∣r(x)−r(c)∣=∣x+3∣∣c+3∣∣x−
分母里的 ∣x+3∣ 不能假装有固定下界;必须由 x 靠近 c 推出来。先要求
∣x−c∣<2∣c+3∣.
反三角不等式给出
∣x+3∣≥∣c+3∣−∣x−c∣>2
于是
∣r(x)−r(c)∣<∣c+3∣22∣x
现在取
δ=min{2∣c+3∣, 2
当 ∣x−c∣<δ 时,分母既不为零,上面的估计也小于 ε。这个例子说明:证明里那一个看似多余的“先取 δ≤1”或“先让分母离零点有距离”,往往正是使后续估计合法的关键。
选 δ 时可以同时列出几个需要满足的条件,最后取它们的最小值。有限个正数的最小值仍是正数,因此所有条件会一起成立。
序列判别法:用所有靠近方式检查连续
对 f:E→R 与 c∈E,有一个特别适合反证的等价说法:
f 在 c 连续⟺对每个 xn∈E 且 x
它说的不是“找一列看起来不错的输入”。连续性要求每一种在定义域内逼近 c 的数列,经过 f 后都逼近同一个 f(c)。反过来,要推翻连续性,一条失败的数列就够了;若要说明函数极限根本不存在,两条给出不同输出极限的数列最有力。
这个判别法为什么可靠
先假定 f 在 c 连续。给定 ε>0,连续性给出一个 δ>0。又因为 xn,存在 ,使 时 。此后所有项满足 ,所以 。
反向逻辑更值得记住。若 f 在 c 不连续,就存在某个固定的 ε0>0,使得每给一个正的 δ,总能选到 x∈E 满足
∣x−c∣<δ且∣f(x)−f(c)∣≥ε0
依次把 δ 取为 1,1/2,1/3,…,选出对应的 xn。于是 ∣x,故 ;但函数值始终离 至少 ,不可能收敛到 。这正是失败连续性可以制造失败数列的原因。
两条数列怎样击破直觉
回到开头的 D。在任意 c∈R,可利用有理数和无理数的稠密性选出
rn∈Q∩(c−1/n,c+
于是 rn→c、sn→c,可是
D(rn)=1,D(sn)=0.
同一个输入目标,得到两种互不相同的输出极限,故 D 在 c 不连续。c 任意,所以它处处不连续。
再设
u(x)=⎩⎨⎧
取 xn=1/n,则 xn→0,但 。一列已经足以判定 在 不连续。若再取 ,就有 ;左右两列也解释了为什么无论怎样改 ,这里都修不好。
连续函数如何组合
连续函数并不是各自孤立的。设 f,g:E→R 都在 c∈E 连续,则
f+g,f−g,fg
也在 c 连续;如果 g(c)=0,那么 f/g 也在 c 连续。
加法与减法直接对应极限的加减法。乘法的证明比外观多一步:f(x)g(x)−f(c)g(c) 可以拆成
f(x)(g(x)−g(c))+g(c)(f(x)−f(c
连续性会使 f(x) 在 c 附近有界,再分别压住两个差,乘积就能控制。商的条件 g(c)=0 同样不能省略。由 g 在 c 连续,取输出误差 ,便存在一个邻域使
∣g(x)−g(c)∣<2∣g(c)∣.
因此 ∣g(x)∣>∣g(c)∣/2>0,分母不仅在点 c 不为零,在附近也不会突然变成零,商才真的有定义并可做估计。
常数函数与恒等函数 x↦x 连续,反复使用这些规则可得:每个多项式在 R 上连续;有理函数
R(x)=Q(x)P(x)
在每个满足 Q(c)=0 的点连续。比如
R(x)=x2+2x3−4x+1
在所有实数上连续,因为分母始终满足 x2+2>0。这里结论来自分母在每一点都不为零,不是因为“分式看起来平滑”。
极限正确,函数值却放错:可去间断
考虑
v(x)=⎩⎨⎧
当 x=3 时,v(x)=x+3,所以
x→3limv(x)=6=v(3).
它在 3 处不连续,但问题只在一个函数值。把 v(3) 从 5 改成 6 后,所得函数在 3 连续,这种间断称为可去间断。如果原函数在该点没有定义、但删除该点后的有限极限存在,补上该极限也能得到同样的修复。
复合时,先检查函数能否接上
写 f(g(x)) 之前,先问 g(x) 是否落在 f 的定义域中。设 g:E→F,,。如果 在 连续,且 在 连续(都相对于各自定义域),那么
f∘g:x⟼f(g(x))
在 c 连续。
证明的量词顺序和两层函数的方向相反。给定最终的 ε>0,先由外层 f 在 g(c) 连续,找到一个 η>0,使得对 t∈F,
∣t−g(c)∣<η⟹∣f(t)−f(g(c))∣<ε
再由内层 g 在 c 连续,找到 δ>0,使得 x∈E 且 ∣x−c∣ 时,
∣g(x)−g(c)∣<η.
把 t 换成 g(x),就得到 ∣f(g(x))−f(g(c))∣<ε。先找 、再找 ,不是形式上的讲究:外层究竟需要多精细的输入控制,必须先由外层决定。
例如
H(x)=x2+1x+2
的定义域是 [−2,∞)。内层 g(x)=(x+2)/(x2+1) 在实轴连续,且在这个定义域上 ;外层平方根在 连续。因此 在 连续, 处按右连续理解。若忽略内层的非负限制而声称它在整个实轴连续,表达式本身就没有定义好。
间断不止一种坏法
判断某个 c 的间断,先分清是函数值出了问题,还是附近的极限出了问题。下面的分类围绕有限实数极限展开。
可去间断
删除点邻域内的双侧极限存在且有限,但 f(c) 没定义,或 f(c) 不等于该极限。上面的 v 就是例子。改变一个点的值可以修复它,原因不是这个点“不重要”,而是附近的极限已经唯一确定了该填什么。
跳跃间断
左右极限都存在且有限,却不相等:
x→c−limf(x)=
这时无论 f(c) 取什么值,双侧极限都不存在。前面的 p 在 0 处就是跳跃间断。若函数在 [a,b] 上除有限多个点外连续,并在每个内部断点具有有限的左右极限,常称它为分段连续;实际使用这个词时,要把端点只需相应单侧极限的规则说清楚。
无界间断
例如
b(x)=(x−2)21
在 x→2 时可以变得任意大。它不可能有有限的函数极限:若它趋于某个实数 L,那么足够靠近 2 的函数值都应落入 (L−1,L+1),这会给出一个固定上界;但取足够靠近 2 的非零 就能使 。修改 的值也无法消除这种无界行为。
振荡间断
令
w(x)={sin(1/x),0,x
设
an=π/2+2πn1,
两列都趋于 0,但 w(an)=1 而 w(bn)=。函数值没有收敛到同一个数,故 在 振荡间断。它与无界间断不同:这里函数值始终被 管住,却仍然没有极限;有界绝不自动推出收敛。
两个稠密反例:处处失败与恰好一处成功
函数 D 说明,只要有理与无理两条输入路径给出不同输出,连续性在每一点都会失败。稍微改造它,又能看到“在一个点连续”完全可能发生。令
F(x)=xD(x).
由于 D(x) 只可能是 0 或 1,有
∣F(x)−F(0)∣=∣xD(x)∣≤∣x∣.
当 x→0 时右侧趋于 0,所以 F(x)→0=F(0),即 F 在 连续。也可以直接完成 – 证明:取 ,只要 就有 。
若 c=0,仍可选有理数列 rn→c 和无理数列 sn。于是
F(rn)=rn→c,F(s
两个输出极限不同,故 F 在每个非零 c 不连续。前面的因子 x 没有让有理/无理的交错消失;它只在 x=0 把两种输出之间的差距压到了零。
“函数值在某个范围内”与“函数值靠近某个目标”是两回事。sin(1/x) 被限制在 [−1,1] 内却不收敛;xD(x) 的关键也不是它有界,而是 被一个趋于零的量 压住了。
判断连续性的工作顺序
拿到一个具体函数时,可以先问四个问题。c 是否在定义域内?如果是内点,删除点邻域内的极限是否存在且等于 f(c)?如果函数由熟悉的连续函数经过代数运算或复合得到,分母和外层定义域是否仍然合法?如果想证明不连续,能否找出一列、或两列输入来暴露失败?
到这里我们得到的仍是点附近的结论:每个点可以有自己的 δ。下一章会处理一个新的问题:在闭有界集合上,怎样把无限多个局部控制压缩成有限个统一的控制,并由此推出有界、取到极值、介值和一致连续等全局结论。那些结论需要额外的集合条件,不能仅从“每一点连续”直接跳过去。
练习 1:按定义控制二次式
证明 f(x)=x2−2x 在 c=3 连续。
先计算
∣f(x)−f(3)∣=∣x2−2x−3∣=
练习 2:端点到底检查哪一边
设 g(x)=x,定义域为 [0,∞)。用定义证明 在 连续,并说明它是否左连续。
给定 ε>0,取 δ=ε2。对定义域中的 x,若 ∣x−0∣<,则 ,故
练习 3:一个缺口能不能补上
令
h(x)=⎩⎨⎧
判断 h 在 2 是否连续;若不连续,应把 h(2) 改为多少?
当 x=2 时,x2+x−6=(x+,故 。于是
练习 4:振荡能否被压住
定义
A(x)={
判断 A 与 B 在 0 的连续性。
对 x=0,∣sin(1/x)∣≤1,所以
练习 5:复合前先找定义域
找出
K(x)=ln(x+14−x2)
的定义域,并说明它在哪些点连续。
对数的输入必须严格为正,同时分母不能为零。因此需要
x+14−x2>0,x=