普林斯顿微积分读本 · 第五章

连续性与可导性

连续是一笔画完,可导是光滑无尖角

5.1

连续性

连续性是微积分中最基本的概念之一。直观地说,一个函数在某点连续,意味着它的图像在该点没有"断裂"——你可以不抬笔地一笔画过该点。

在一点连续的三条件

函数 f(x) 在 x = a 处连续,需要同时满足以下三个条件:

连续的三条件
  1. f(a) 有定义 —— 函数在 a 点有确定的值
  2. lim(x → a) f(x) 存在 —— 左右极限都存在且相等
  3. lim(x → a) f(x) = f(a) —— 极限值等于函数值

三个条件缺一不可。任何一个不满足,函数在该点就不连续。

f(x) 在 x = a 处连续   ⇔   lim(x → a) f(x) = f(a)

在区间上连续

如果函数 f 在开区间 (a, b) 内的每一点都连续,则称 f 在 (a, b) 上连续。对于闭区间 [a, b],还需要在端点处满足单侧连续

在左端点 a:lim(x → a⁺) f(x) = f(a)      在右端点 b:lim(x → b⁻) f(x) = f(b)

连续函数的例子

以下函数在其定义域内都是连续的:

函数类型连续性说明
多项式函数在 (-∞, +∞) 上连续如 x² + 3x - 1
sin(x), cos(x)在 (-∞, +∞) 上连续三角函数的"平滑"本质
ex在 (-∞, +∞) 上连续指数函数永远光滑
√x在 [0, +∞) 上连续根号函数在其定义域内连续
有理函数 P(x)/Q(x)在分母不为零处连续间断点仅在 Q(x) = 0 处

间断点的分类

当函数在某点不连续时,我们称之为间断点(discontinuity)。间断点分为以下四类:

1. 可去间断点(Removable Discontinuity)

极限存在,但函数值不等于极限(或函数在该点无定义)。之所以叫"可去",是因为我们可以重新定义补充定义该点的函数值,使函数变得连续。

例如:f(x) = (x² - 1)/(x - 1)   ⇒   lim(x→1) f(x) = 2,但 f(1) 无定义

2. 跳跃间断点(Jump Discontinuity)

左右极限都存在,但不相等。函数图像在该点有一个"台阶"或"跳跃"。

例如:f(x) = { x+1 (x<0), x+3 (x≥0) }   ⇒   左极限 = 1,右极限 = 3

3. 无穷间断点(Infinite Discontinuity)

至少一侧的极限趋向无穷大。函数图像在该点有垂直渐近线

例如:f(x) = 1/(x - 1)   ⇒   lim(x→1) f(x) = ±∞

4. 振荡间断点(Oscillating Discontinuity)

函数在某点附近无限振荡,极限不存在。经典例子是 sin(1/x) 在 x → 0。

lim(x → 0) sin(1/x)   不存在 —— 函数在 -1 和 1 之间越来越快地振荡
图 5-1:三种间断点对比 — 可去间断、跳跃间断、无穷间断
间断类型左极限右极限能否"修复"典型例子
可去间断存在且 = 右极限存在且 = 左极限能(补充定义)(x²-1)/(x-1) 在 x=1
跳跃间断存在(有限)存在(有限),但不等于左极限不能分段函数在分界点
无穷间断±∞±∞不能1/x 在 x=0
振荡间断不存在不存在不能sin(1/x) 在 x=0

介值定理(IVT)

介值定理(Intermediate Value Theorem)

如果 f(x) 在闭区间 [a, b] 上连续,且 f(a) ≠ f(b),那么对于 f(a) 和 f(b) 之间的任意值 L,至少存在一个 c ∈ (a, b) 使得 f(c) = L。

介值定理的直觉非常简单:如果一个连续函数从某个值"变"到另一个值,它必须经过中间的所有值。就像温度从 10 度升到 20 度,它必然在某个时刻恰好是 15 度。

介值定理的直觉

想象你开车从海拔 100 米的山谷开到海拔 500 米的山顶。不管你走什么路线,只要你一直在路上(连续),你就一定会经过海拔 200 米、300 米、400 米的每一个高度。这就是介值定理的核心思想。

图 5-2:介值定理演示 — 连续函数 f(x) = x³ - 2x - 1 穿过水平线 y = 0

闭区间上连续函数的最大值最小值定理

极值定理(Extreme Value Theorem)

如果 f(x) 在闭区间 [a, b] 上连续,那么 f 在 [a, b] 上一定能取到最大值最小值。即存在 c, d ∈ [a, b],使得对所有 x ∈ [a, b]:

f(d) ≤ f(x) ≤ f(c)

注意两个关键条件:闭区间连续。缺一不可。例如 1/x 在 (0, 1] 上连续,但没有最大值(趋向无穷)。f(x) = x 在 (0, 1) 上连续,但既没有最大值也没有最小值。

极值定理的意义

极值定理保证了闭区间上的连续函数不会"无限增长"或"无限振荡"。它为后续的优化问题(求最大值和最小值)奠定了理论基础。在工程和经济学中,许多问题本质上就是在闭区间上求连续函数的极值。

实际应用:连续性在工程中的应用

机械系统中的连续运动:机器人关节的轨迹规划要求位置、速度和加速度都连续,以避免机械冲击和振动。CNC 机床的刀具路径必须是光滑连续曲线,确保加工表面质量。

材料断裂点(不连续):材料在断裂点处应力-应变曲线出现不连续(跳跃)。工程师通过分析这种不连续性,确定材料的极限强度和断裂韧性,为结构设计提供安全裕度。

机器人路径规划中的光滑曲线:自动驾驶汽车和无人机的路径规划要求曲率连续(C² 连续),即位置和方向的变化都平滑。贝塞尔曲线和样条插值保证了路径的可导性,避免急转弯。

桥梁挠度分析:连续梁的挠度曲线在支座处必须连续且可导。如果挠度不连续,意味着梁发生断裂;如果导数不连续,意味着转角突变,会产生应力集中。

5.2

可导性

可导性描述的是函数在某点是否有一个确定的"变化率"。几何上,可导意味着曲线在该点有一条确定的切线

导数的定义

导数的严格定义

函数 f(x) 在 x = a 处的导数定义为:

f'(a) = lim(h → 0) [f(a + h) - f(a)] / h

如果这个极限存在且有限,则称 f 在 a 处可导

这个定义的本质是:取函数上两点 (a, f(a)) 和 (a+h, f(a+h)),计算连线的割线斜率,然后让 h 趋近 0。如果割线斜率趋近于一个确定的值,这个值就是切线的斜率,也就是导数。

几何意义:切线的斜率

导数 f'(a) 等于函数图像在点 (a, f(a)) 处切线的斜率。切线是割线在 h → 0 时的极限位置。

切线方程:y - f(a) = f'(a)(x - a)

物理意义:瞬时速度

如果 s(t) 表示物体在时刻 t 的位置,那么 s'(t) 就是物体在时刻 t 的瞬时速度。导数将"平均速度"(位移/时间)推广到了"瞬时速度"。

瞬时速度 = s'(t) = lim(h → 0) [s(t + h) - s(t)] / h

二阶导数和更高阶导数

对导数再求导,就得到二阶导数 f''(x)。二阶导数的物理意义是加速度(速度的变化率)。

阶数记号物理意义(运动学)几何意义
一阶导数f'(x), dy/dx速度切线斜率
二阶导数f''(x), d²y/dx²加速度曲线的凹凸性
三阶导数f'''(x)加速度的变化率凹凸性的变化率

导数不存在的情形

并非所有连续函数都可导。以下三种情况导数不存在:

情形一:尖角(Cusp / Corner)

函数图像在某点形成"尖角",左右导数不相等。经典例子是 |x| 在 x = 0。

图 5-3:|x| 的尖角 — 左导数 = -1,右导数 = 1,导数不存在

情形二:垂直切线

当切线的斜率趋向无穷大时,导数不存在。例如 f(x) = x1/3 在 x = 0 处,切线是垂直的。

f(x) = x1/3   ⇒   f'(x) = (1/3)x-2/3   ⇒   f'(0) = ∞(导数不存在)

情形三:间断点

如果函数在某点不连续,那么它在该点一定不可导。因为导数的定义要求极限存在,而间断点处极限要么不存在,要么不等于函数值。

可导必连续,连续不必可导

可导性与连续性的关系

可导 ⇒ 连续:如果 f 在 a 处可导,则 f 在 a 处一定连续。

连续 ⇒ 可导:这个命题是错误的。连续函数不一定可导。

|x| 是最好的反例

f(x) = |x| 在 x = 0 处连续(图像没有断裂),但在 x = 0 处不可导(图像有尖角)。左导数为 -1,右导数为 1,两者不相等,所以导数不存在。这说明"连续"只是"可导"的必要条件,而非充分条件。

连续      可导     (错误)
可导      连续     (正确)
EX

例题精讲

例1:判断 f(x) = (x² - 1)/(x - 1) 在 x = 1 处是否连续

问题:判断 f(x) = (x² - 1)/(x - 1) 在 x = 1 处是否连续,并说明间断类型。

第一步:检查 f(1) 是否有定义

f(1) = (1 - 1)/(1 - 1) = 0/0 ⇒ 无定义

条件一不满足,函数在 x = 1 处不连续。

第二步:检查极限是否存在

因式分解:(x² - 1)/(x - 1) = (x + 1)(x - 1)/(x - 1) = x + 1   (x ≠ 1)

lim(x → 1) f(x) = lim(x → 1) (x + 1) = 2

极限存在且等于 2。

第三步:判断间断类型

极限存在(= 2),但函数在 x = 1 处无定义。这是可去间断点

如果补充定义 f(1) = 2,则函数在 x = 1 处变为连续。

f(x) 在 x = 1 处不连续,属于可去间断点。极限 lim(x→1) f(x) = 2 存在。
例2:判断 f(x) = |x| 在 x = 0 处是否可导

问题:判断 f(x) = |x| 在 x = 0 处是否可导。

第一步:计算左导数

f'₋(0) = lim(h → 0⁻) [|0 + h| - |0|] / h = lim(h → 0⁻) |h|/h = lim(h → 0⁻) (-h)/h = -1

第二步:计算右导数

f'₌(0) = lim(h → 0⁺) [|0 + h| - |0|] / h = lim(h → 0⁺) |h|/h = lim(h → 0⁺) h/h = 1

第三步:比较左右导数

左导数 = -1 ≠ 1 = 右导数

左右导数不相等 ⇒ f'(0) 不存在

补充:验证连续性

f(0) = 0,lim(x→0) |x| = 0 = f(0),所以 f(x) 在 x = 0 处连续

这证明了:连续 ⇒ 可导 是错误的

f(x) = |x| 在 x = 0 处连续但不可导(左右导数不相等,形成尖角)
例3:用定义求 f(x) = x² 在 x = 3 处的导数

问题:利用导数的定义,求 f(x) = x² 在 x = 3 处的导数。

第一步:写出定义式

f'(3) = lim(h → 0) [f(3 + h) - f(3)] / h

第二步:代入 f(x) = x²

f'(3) = lim(h → 0) [(3 + h)² - 3²] / h
= lim(h → 0) [9 + 6h + h² - 9] / h
= lim(h → 0) [6h + h²] / h
= lim(h → 0) [6 + h]

第三步:取极限

= 6 + 0 = 6

验证

用求导公式验证:f'(x) = 2x,所以 f'(3) = 2 × 3 = 6。与定义法结果一致。

f'(3) = 6     (几何意义:抛物线 y = x² 在点 (3, 9) 处的切线斜率为 6)
例4:利用介值定理证明方程 x³ - 2x - 5 = 0 在 (2, 3) 内有根

问题:利用介值定理证明方程 x³ - 2x - 5 = 0 在区间 (2, 3) 内至少有一个根。

第一步:构造辅助函数

令 f(x) = x³ - 2x - 5。这是一个多项式函数,在 (-∞, +∞) 上连续,当然在 [2, 3] 上也连续。

第二步:计算端点函数值

f(2) = 2³ - 2 × 2 - 5 = 8 - 4 - 5 = -1 < 0
f(3) = 3³ - 2 × 3 - 5 = 27 - 6 - 5 = 16 > 0

第三步:应用介值定理

因为 f(x) 在 [2, 3] 上连续,且 f(2) = -1 < 0,f(3) = 16 > 0。

由介值定理,对于 f(2) = -1 和 f(3) = 16 之间的任意值(包括 0),至少存在一个 c ∈ (2, 3) 使得 f(c) = 0。

第四步:得出结论

存在 c ∈ (2, 3) 使得 c³ - 2c - 5 = 0,即方程在 (2, 3) 内有根。

(实际上,c ≈ 2.0946,这是著名的"华林问题"中的方程。)

由介值定理,方程 x³ - 2x - 5 = 0 在区间 (2, 3) 内至少有一个根
ML

MATLAB 可视化代码

以下 MATLAB 代码帮助你可视化连续性和可导性的核心概念。

removable_discontinuity.m — 可去间断点可视化
% 可视化可去间断点: f(x) = (x^2 - 1)/(x - 1) % 极限存在 (=2),但 x=1 处函数无定义 x = linspace(-2, 4, 1000); x(x == 1) = []; % 排除 x=1 y = (x.^2 - 1) ./ (x - 1); figure('Position', [100 100 800 500]); plot(x, y, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; % 标记可去间断点(空心圆) plot(1, 2, 'o', 'MarkerSize', 14, ... 'MarkerFaceColor', 'w', 'MarkerEdgeColor', [0.77 0.36 0.24], ... 'LineWidth', 2.5); % 标注极限值 text(1.3, 2.3, 'lim = 2 (函数无定义)', 'FontSize', 12, ... 'Color', [0.77 0.36 0.24]); % 垂直参考线 plot([1 1], [-1 5], 'k:', 'LineWidth', 1); xlabel('x'); ylabel('f(x)'); title('可去间断点: (x^2-1)/(x-1) 在 x=1'); grid on; saveas(gcf, 'ch5_removable_discontinuity.png');
absolute_value_cusp.m — |x| 的尖角可视化
% 可视化 |x| 在 x=0 处的尖角 % 左导数 = -1, 右导数 = 1, 导数不存在 figure('Position', [100 100 800 500]); x = linspace(-3, 3, 1000); y = abs(x); plot(x, y, 'LineWidth', 3, 'Color', [0.77 0.36 0.24]); hold on; % 左切线: y = -x x_left = linspace(-2, 0, 200); plot(x_left, -x_left, '--', 'LineWidth', 2, 'Color', [0.18 0.49 0.43]); % 右切线: y = x x_right = linspace(0, 2, 200); plot(x_right, x_right, '--', 'LineWidth', 2, 'Color', [0.9 0.64 0.24]); % 标记尖角点 plot(0, 0, 'o', 'MarkerSize', 14, ... 'MarkerFaceColor', [0.77 0.36 0.24], ... 'MarkerEdgeColor', 'w', 'LineWidth', 2); % 标注左右导数 text(-1.8, 2.2, '左切线: 斜率 = -1', 'FontSize', 12, ... 'Color', [0.18 0.49 0.43]); text(1.2, 2.2, '右切线: 斜率 = 1', 'FontSize', 12, ... 'Color', [0.9 0.64 0.24]); text(0.3, -0.5, '导数不存在!', 'FontSize', 13, ... 'FontWeight', 'bold', 'Color', 'red'); xlabel('x'); ylabel('f(x)'); title('|x| 在 x=0 处的尖角 — 导数不存在'); legend('|x|', '左切线', '右切线', 'Location', 'best'); grid on; saveas(gcf, 'ch5_absolute_value_cusp.png');
ivt_demo.m — 介值定理演示
% 介值定理演示: f(x) = x^3 - 2x - 5 % 证明方程在 (2,3) 内有根 x = linspace(-2, 3, 1000); f = x.^3 - 2*x - 5; figure('Position', [100 100 800 500]); plot(x, f, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; % y = 0 参考线 plot([-2 3], [0 0], 'k--', 'LineWidth', 1.5); % 标记端点 scatter([2 3], [-1 16], 100, 'filled', ... 'MarkerFaceColor', [0.77 0.36 0.24]); text(2.1, -2.5, 'f(2) = -1', 'FontSize', 12); text(2.3, 17, 'f(3) = 16', 'FontSize', 12); % 标记根的近似位置 root = fzero(@(x) x.^3 - 2*x - 5, 2.1); scatter(root, 0, 120, [0.18 0.49 0.43], 'filled'); text(root + 0.1, 1, ... sprintf('根 x \\approx %.4f', root), ... 'FontSize', 12, 'Color', [0.18 0.49 0.43]); % 填充区域 x_fill = linspace(2, 3, 500); f_fill = x_fill.^3 - 2*x_fill - 5; fill([x_fill, fliplr(x_fill)], [f_fill, zeros(1, 500)], ... [0.77 0.36 0.24], ... 'FaceAlpha', 0.1, 'EdgeColor', 'none'); xlabel('x'); ylabel('f(x)'); title('介值定理: x^3 - 2x - 5 = 0 在 (2,3) 内有根'); grid on; saveas(gcf, 'ch5_ivt_demo.png');
derivative_definition.m — 用定义求导的数值逼近
% 用定义求导的数值逼近 % f(x) = x^2, 求 f'(3) = 6 a = 3; % 求导点 f = @(x) x.^2; % 不同的 h 值 h_values = [1, 0.1, 0.01, 0.001, 0.0001, 1e-6, 1e-8, 1e-10]; fprintf('h 值\t\t[f(a+h)-f(a)]/h\t误差\n'); fprintf('%.0e\t\t%.10f\t\t%.2e\n', 0, 0, 0); % 表头 for i = 1:length(h_values) h = h_values(i); deriv_approx = (f(a + h) - f(a)) / h; error = abs(deriv_approx - 6); fprintf('%.0e\t\t%.10f\t\t%.2e\n', h, deriv_approx, error); end % 可视化割线趋近切线的过程 figure('Position', [100 100 800 500]); x = linspace(1, 5, 500); plot(x, f(x), 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; % 切线: y = 6(x-3) + 9 = 6x - 9 plot(x, 6*x - 9, 'k--', 'LineWidth', 1.5); % 不同 h 的割线 colors = [0.18 0.49 0.43; 0.9 0.64 0.24; 0.48 0.43 0.41]; h_plot = [2, 1, 0.3]; for j = 1:3 h = h_plot(j); slope = (f(a + h) - f(a)) / h; secant_y = f(a) + slope * (x - a); plot(x, secant_y, '-', 'LineWidth', 1.5, 'Color', colors(j,:)); text(a + h, f(a + h) + 0.5, ... sprintf('h=%.1f, 斜率=%.1f', h, slope), ... 'FontSize', 10, 'Color', colors(j,:)); end scatter(a, f(a), 100, 'k', 'filled'); xlabel('x'); ylabel('f(x)'); title('割线趋近切线: f(x) = x^2 在 x=3'); legend('y = x^2', '切线 (斜率=6)', ... '割线 h=2', '割线 h=1', '割线 h=0.3', ... 'Location', 'best'); grid on; saveas(gcf, 'ch5_derivative_definition.png');