第 4 章 连续
学习目标
- 理解连续的严格定义:极限等于函数值
- 会分类间断点(可去、跳跃、无穷、振荡)
- 掌握连续函数的运算法则
- 掌握介值定理与零点定理
- 会用二分法在 Python 中求方程近似根
4.1 连续:极限「刚刚好」等于函数值
第 3 章说过,极限 和函数值 是两回事。如果这两个数恰好相等,就得到一个特别重要的性质——连续。
连续(continuity):函数 在点 处连续,当且仅当
把它拆成三个条件,缺一不可:
- 存在( 在定义域内);
- 存在;
- 极限值等于函数值。
直观理解:函数图像在 处「不断裂」。把曲线想象成一条绳子:连续的曲线可以一笔画过 点,不抬笔;不连续的点,曲线在那里「断了」。
看一个反例。函数
在 处没有定义(分母为 0),所以 不存在, 在 处不连续。但第 3 章算过,。极限存在、函数值不存在——这正是「极限与函数值无关」的典型例子。
def g(x):
return (x**2 - 4) / (x - 2)
for x in [1.9, 1.99, 2.01, 2.1]:
print(f"x = {x:<5} g(x) = {g(x):.4f}")x = 1.9 g(x) = 3.9000
x = 1.99 g(x) = 3.9900
x = 2.01 g(x) = 4.0100
x = 2.1 g(x) = 4.1000如果人为规定 ,函数就连续了——这种「补上一点就能接上」的间断叫可去间断。
4.2 间断点:曲线在哪里「断」?
不连续的点叫间断点。按断裂的方式,常见四类:
| 类型 | 特征 | 例子 |
|---|---|---|
| 可去间断 | 左右极限相等,但函数值缺失或不对 | 在 |
| 跳跃间断 | 左右极限存在但不相等 | 符号函数在 |
| 无穷间断 | 至少一侧趋向无穷大 | 在 |
| 振荡间断 | 函数在一点附近剧烈振荡,极限不存在 | 在 |
符号函数(也叫 sign 函数)是跳跃间断的教科书例子:
从左边逼近 0,函数值恒为 ;从右边逼近 0,函数值恒为 。左右极限一个是 一个是 ,不相等,所以 不存在, 是跳跃间断点。

import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False
import numpy as np
fig, axes = plt.subplots(1, 3, figsize=(12, 3.6))
# 1) 连续曲线 f(x) = x²
x = np.linspace(-1.6, 1.6, 300)
axes[0].plot(x, x**2, color="tab:blue")
axes[0].set_title("连续:x² 在 x=1 处")
axes[0].scatter([1], [1], color="tab:red", s=30, zorder=3)
axes[0].set_ylim(-0.3, 2.6)
# 2) 可去间断:(x²-1)/(x-1),x=1 处空心
xx = np.concatenate([np.linspace(-1.6, 0.99, 200), np.linspace(1.01, 1.6, 200)])
axes[1].plot(xx, (xx**2 - 1) / (xx - 1), color="tab:blue")
axes[1].scatter([1], [2], color="white", edgecolors="tab:red", s=40, zorder=3)
axes[1].set_title("可去间断:x=1 处没定义")
axes[1].set_ylim(-0.3, 2.6)
# 3) 跳跃间断:sgn(x)
axes[2].plot([-1.6, 0], [-1, -1], color="tab:blue")
axes[2].plot([0, 1.6], [1, 1], color="tab:blue")
axes[2].scatter([0], [0], color="tab:red", s=30, zorder=3)
axes[2].set_title("跳跃间断:x=0 处左右不同")
axes[2].set_ylim(-1.5, 1.5)
for ax in axes:
ax.axhline(0, color="black", linewidth=0.8)
ax.axvline(0, color="black", linewidth=0.8)
ax.grid(True, linestyle=":", alpha=0.5)
ax.set_aspect("equal")
fig.suptitle("连续 vs 间断")
fig.savefig("book/public/figs/fig04-discontinuity.png", dpi=120, bbox_inches="tight")
plt.close(fig)4.3 连续函数的运算
连续函数的「四则运算」保持连续,这是极限四则法则的直接推论:
若 、 在 处连续,则:
- 在 处连续;
- 在 处连续;
- 在 处连续(要求 );
- 复合函数 在 处连续( 在 连续、 在 连续)。
由这些法则可得一个实用的结论:多项式、三角函数、指数函数、对数函数,在其定义域内处处连续。这意味着对这类函数,求极限时可以直接代入:
比如 ,因为 是多项式,处处连续,代入即可。
4.4 介值定理:连续函数「走过的路」不能跳
连续的本质是「不断裂」。不断裂的函数有一个非常强大的推论:
介值定理(Intermediate Value Theorem):若 在闭区间 上连续,且 ,则对介于 与 之间的任意数 ,都存在 ,使得 。
直觉:从 爬到 ,只要中间不断裂,途中每一个高度都得经过。好比一个人从山脚走到山顶,他必然经过每一个介于山脚和山顶之间的海拔高度——除非他坐直升机(那就不连续了)。
最重要的情况是 ,叫零点定理:若 与 异号(一正一负),则 在 内至少有一个零点。
为什么? 设 。介值定理说,介于 和 之间的每一个数都能取到,0 恰好在中间,所以存在 使 。反过来说,如果图像从 轴下方连到上方,中间必须穿过 轴。

import matplotlib.pyplot as plt
from matplotlib import font_manager
for f in font_manager.findSystemFonts():
if any(k in f for k in ("NotoSansCJK", "NotoSansSC", "wqy", "SimHei", "msyh", "PingFang")):
font_manager.fontManager.addfont(f)
plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "WenQuanYi Zen Hei", "SimHei", "Microsoft YaHei", "PingFang SC"]
plt.rcParams["axes.unicode_minus"] = False
import numpy as np
x = np.linspace(0.6, 2.4, 400)
y = x ** 3 - x - 1
fig, ax = plt.subplots(figsize=(6.5, 5))
ax.plot(x, y, color="tab:blue", label="f(x) = x³ - x - 1")
ax.axhline(0, color="black", linewidth=0.8)
ax.axvline(0, color="black", linewidth=0.8)
zero = 1.324717957
ax.scatter([1, 2], [-1, 5], color="tab:red", zorder=4)
ax.scatter([zero], [0], color="tab:green", s=42, zorder=4)
ax.annotate("零点 c ≈ 1.3247", (zero, 0), textcoords="offset points", xytext=(8, -14), color="tab:green")
ax.annotate("f(1) = -1", (1, -1), textcoords="offset points", xytext=(-16, 6), color="tab:red")
ax.annotate("f(2) = 5", (2, 5), textcoords="offset points", xytext=(6, 2), color="tab:red")
ax.set_xlim(0.6, 2.4)
ax.set_ylim(-2.2, 6)
ax.grid(True, linestyle=":", alpha=0.5)
ax.legend()
ax.set_title("零点定理:f(1)<0, f(2)>0,中间必有零点")
fig.savefig("book/public/figs/fig04-ivt.png", dpi=120, bbox_inches="tight")
plt.close(fig)应用:证明方程 在 内有根。
是多项式,处处连续;两端异号,由零点定理,存在 使 。定理只保证存在,不告诉我们 具体在哪。要找具体位置,用二分法:每次把区间对半切,保留两端异号的一半,反复缩小区间。
def f(x):
return x**3 - x - 1
a, b = 1.0, 2.0
print(f"f(1) = {f(1):.4f}, f(2) = {f(2):.4f}")
mid = 0.0
for _ in range(30):
mid = (a + b) / 2
if f(a) * f(mid) < 0:
b = mid
else:
a = mid
print(f"30 次二分后,零点 ≈ {mid:.10f}")
print(f"验证 f(零点) = {f(mid):.2e}")f(1) = -1.0000, f(2) = 5.0000
30 次二分后,零点 ≈ 1.3247179566
验证 f(零点) = -2.77e-094.5 动手实践:连续函数求极限直接代入
利用「初等函数在定义域内连续」,求:
令 。当 时 ,由第一个重要极限,,所以原式 。这里用的是「换元 + 重要极限」,而不是直接代入——因为 在 处是 ,不能代入。
import numpy as np
for x in [0.1, 0.01, 0.001, -0.001, -0.01]:
print(f"x = {x:8.3f} sin(2x)/x = {np.sin(2*x)/x:9.6f}")x = 0.100 sin(2x)/x = 1.986693
x = 0.010 sin(2x)/x = 1.999867
x = 0.001 sin(2x)/x = 1.999999
x = -0.001 sin(2x)/x = 1.999999
x = -0.010 sin(2x)/x = 1.999867常见错误
| 错误写法/理解 | 原因 |
|---|---|
| 认为「函数在某点有值就连续」 | 连续还要求极限存在且等于函数值,三者缺一不可 |
| 把可去间断说成「没有极限」 | 可去间断的极限存在,只是函数值缺失或不对 |
| 对不连续函数用介值定理 | 介值定理的前提是闭区间上连续,断裂的函数可以「跳过」中间值 |
| 二分法只迭代几次就当作精确值 | 二分法只能逼近,每次迭代区间减半,精度取决于迭代次数 |
| 看到 直接代入 | 先化简或变形,再考虑极限 |
章末练习
基础
- 判断 在 处是否连续,写出三条件验证。
- 判断 在 处是否连续,并说出间断类型。
- 求 ,说明为什么可以直接代入。
提高
- 函数 ()在 处是什么类型的间断?写出左右极限。
- 证明方程 在 内有根。
挑战
- 证明:若 在 上连续,且 ,则对任意 存在 使 (完整写出介值定理的论证)。
- 用二分法求 的根,精确到 6 位小数(提示:考虑 ,在 上)。
章末自测
每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。
- 在 处连续的定义是?
- A. 存在
- B. 存在
- C.
- D. 在 处有定义
- 在 处的间断属于?
- A. 可去间断
- B. 跳跃间断
- C. 无穷间断
- D. 连续
- 在 处左右极限分别是?
- A. 都是
- B. 和
- C. 和
- D. 不存在
- 多项式函数在其定义域内?
- A. 不一定连续
- B. 处处连续
- C. 只在零点连续
- D. 只在正数处连续
- 若 在 上连续且 、 异号,则?
- A. 在 内至少有一个零点
- B. 在 内必有一个最大值
- C. 方程 无解
- D. 在 处不连续
- 介值定理要求函数在 上?
- A. 可导
- B. 连续
- C. 单调
- D. 有界
- 、、 连续,则 在 内?
- A. 必有一个解
- B. 可能有解
- C. 必无解
- D. 恰好一个解
- 二分法每次迭代后,区间长度?
- A. 不变
- B. 减半
- C. 加倍
- D. 变成三倍
- 等于?
- A.
- B.
- C.
- D. 不存在
- 连续函数图像在 处的直观特征是?
- A. 有尖角
- B. 不断裂,可以一笔画过
- C. 必须水平
- D. 必须单调
