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

最优化与洛必达法则

导数的两大经典应用

12.1

最优化问题

最优化问题是微积分中最具实用价值的课题之一。无论是工程师希望用最少的材料建造最坚固的桥梁,还是商人希望利润最大化,本质上都是在求解某个量的最大值或最小值。导数正是解决这类问题的核心工具。

最优化五步法

解决最优化问题有一个系统化的流程,遵循以下五个步骤可以避免大多数常见错误:

步骤操作说明
1理解问题,画图仔细阅读题目,画出示意图,明确已知量和未知量
2设变量,建立目标函数用变量表示待优化的量,建立函数关系
3求导找临界点对目标函数求导,令导数等于零,解出临界点
4验证极大值还是极小值用一阶或二阶导数检验法判断临界点的性质
5回答原问题将数学结果翻译回实际问题,注意单位
常见陷阱

最优化问题中最容易犯的错误包括:忘记考虑定义域的边界值(端点也可能是最大/最小值)、混淆"使面积最大"和"使周长最大"、以及忽略实际问题中的物理约束(如长度不能为负数)。

常见最优化类型

类型典型场景目标函数
面积最大化给定周长求最大面积、围栏问题A = f(长, 宽)
距离最小化点到曲线的最短距离、最短路径d = f(x, y)
利润最大化定价与销量的平衡、成本最小化P = R - C
容积最大化给定材料制作最大容积的容器V = f(尺寸)
最优化与导数的直觉

为什么导数能找到最大值和最小值?想象你站在一座山上,脚下的坡度(导数)告诉你地面的倾斜方向。当坡度为零时,你站在了一个平坦的位置——这可能是山顶(极大值)、谷底(极小值)或鞍点。最优化问题的本质就是找到所有"平坦"的位置,然后判断哪个是山顶、哪个是谷底。

12.2

线性化(线性逼近)

线性化(也叫线性逼近或切线近似)是一种用简单的线性函数来近似复杂非线性函数的方法。它的核心思想是:在一点附近,曲线几乎和它的切线重合。

f(x) ≈ f(a) + f'(a)(x - a)      当 x 接近 a

这个公式称为线性化公式切线近似。右边的线性函数 L(x) = f(a) + f'(a)(x - a) 就是 f(x) 在 x = a 处的切线方程。

几何意义

线性化的几何意义非常直观:在切点附近,切线是曲线的最佳线性近似。想象你用放大镜观察曲线和切线在切点附近的区域,两者几乎无法区分。距离切点越远,近似误差越大。

线性逼近的精度

线性逼近的误差与 (x - a)² 成正比。这意味着如果 x 与 a 的距离缩小为原来的 1/10,误差大约缩小为原来的 1/100。因此,x 越接近 a,线性逼近越精确。

应用:近似计算

线性逼近最常见的应用是快速估算难以精确计算的值。以 √4.1 为例:

快速估算 √4.1

令 f(x) = √x,a = 4,则 f(4) = 2,f'(x) = 1/(2√x),f'(4) = 1/4。

√4.1 ≈ f(4) + f'(4)(4.1 - 4) = 2 + (1/4)(0.1) = 2 + 0.025 = 2.025

精确值 √4.1 ≈ 2.02485...,近似值 2.025 的误差仅为约 0.006%。

为什么线性逼近如此有用?

在没有计算器的时代,线性逼近是快速估算复杂函数值的利器。即使在今天,线性逼近仍然是数值分析、物理学和工程学中不可或缺的工具——它是泰勒展开的一阶近似,也是理解更高级近似方法的基础。

图 12-1:线性逼近——切线与曲线的局部近似(f(x) = √x 在 x = 4 处)
12.3

牛顿法

牛顿法(Newton's Method)是一种强大的数值方法,用于求解方程 f(x) = 0 的根。它的基本思想是利用切线来逐步逼近方程的根。

迭代公式

xn+1 = xn - f(xn) / f'(xn)

从一个初始猜测值 x0 开始,每次迭代都利用当前点的切线与 x 轴的交点作为下一个近似值。通常经过少数几次迭代就能得到非常精确的结果。

几何直觉

牛顿法的几何意义非常清晰:

  1. 在当前点 (xn, f(xn)) 处作曲线的切线
  2. 找到切线与 x 轴的交点,即为 xn+1
  3. 重复以上步骤,直到满足精度要求
牛顿法的收敛速度

牛顿法具有二次收敛速度——每次迭代,正确的小数位数大约翻倍。例如,如果第一次迭代得到 1 位正确小数,第二次大约得到 2 位,第三次大约得到 4 位。这种指数级的精度增长使得牛顿法在实践中极为高效。

牛顿法的注意事项

牛顿法并非万能的:

  • 初始值的选择很重要——如果选得不好,可能不收敛
  • 如果 f'(xn) = 0,迭代公式无法计算(切线水平)
  • 对于某些函数,迭代可能陷入循环或发散
  • 需要函数可导且导数容易计算
图 12-2:牛顿法迭代过程(求解 x² - 2 = 0)
12.4

洛必达法则

洛必达法则(L'Hôpital's Rule)是求解不定式极限的最重要工具。当分子和分母同时趋于零或同时趋于无穷时,常规的极限运算法则无法直接应用,而洛必达法则提供了一种系统化的解决方案。

适用条件

洛必达法则仅适用于以下两种不定式

0/0 型      或      ∞/∞ 型

这意味着当 x 趋近于某个值时,分子 f(x) 和分母 g(x) 同时趋于 0,或同时趋于 ∞(或 -∞)。

洛必达法则

若 lim f(x)/g(x) 为 0/0 或 ∞/∞ 型,则 lim f(x)/g(x) = lim f'(x)/g'(x)

也就是说,可以对分子和分母分别求导,然后重新计算极限。如果新的极限仍然是 0/0 或 ∞/∞ 型,可以继续应用洛必达法则。

使用洛必达法则的注意事项
  • 必须验证不定式:在应用之前,务必确认极限是 0/0 或 ∞/∞ 型。如果不是,直接应用会得到错误结果
  • 可以多次应用:如果一次求导后仍然是 0/0 或 ∞/∞ 型,可以继续对分子分母分别求导
  • 只对商形式适用:洛必达法则只适用于 f(x)/g(x) 的形式,不适用于其他类型的不定式
  • 先化简再求导:有时先进行代数化简(如因式分解、三角恒等变换)比直接用洛必达法则更高效

其他不定式的处理

除了 0/0 和 ∞/∞ 型,还有其他类型的不定式。它们需要先变形为 0/0 或 ∞/∞ 型,然后才能应用洛必达法则:

不定式类型变形方法示例
0 · ∞将其中一个因子放到分母:0 · ∞ = 0/(1/∞) = 0/0x · ln(x)(x→0+
∞ - ∞通分或取对数1/sin(x) - 1/x(x→0)
1取 e 的指数:1 = e∞·ln(1) = e0·∞(1 + 1/x)x(x→∞)
00取 e 的指数:00 = e0·ln(0) = e0·(-∞)}xx(x→0+
0取 e 的指数:∞0 = e0·ln(∞)} = e0·∞}x1/x(x→∞)
洛必达法则的直觉

为什么洛必达法则有效?直觉上,当分子和分母都趋于零时,它们"消失"的速度决定了极限的值。导数恰好衡量了函数值变化的快慢,所以分子和分母的导数之比反映了它们趋于零(或无穷)的相对速度。这就是为什么用导数之比代替原函数之比能得到正确的极限。

实际应用:最优化与极限在工程与计算机科学中的应用

包装盒最省材料:设计固定容积的长方体包装盒,通过建立表面积函数并求导找极值,发现立方体(长=宽=高)用料最省。这是包装工业中减少材料成本的理论依据。

管道铺设最短路径:从油田到炼油厂铺设管道,需考虑陆地和水下不同施工成本。建立总成本函数 C(x),令 dC/dx = 0 找到最优登陆点,使总铺设成本最小。

光束最亮照射:路灯高度 h 与路面照度 E 满足 E = k cosθ/r²(θ 为入射角,r 为距离)。通过求导找到使路面某点照度最大的灯杆高度,优化城市照明设计。

算法收敛速度:在数值计算中,牛顿法等迭代算法的收敛速度由极限 lim(n→∞) |e_(n+1)|/|e_n|² 刻画。洛必达法则帮助分析误差衰减的阶数,评估算法效率。

EX

例题精讲

例1:用洛必达法则求 lim(x→0) (ex - 1) / x

lim(x→0) (ex - 1) / x

第一步:验证不定式类型

当 x→0 时,ex - 1 → 0,x → 0,所以是 0/0 型,可以使用洛必达法则。

第二步:分子分母分别求导

分子求导:d/dx(ex - 1) = ex
分母求导:d/dx(x) = 1

第三步:计算新的极限

lim(x→0) ex / 1 = e0 = 1
lim(x→0) (ex - 1) / x = 1
例2:用洛必达法则求 lim(x→0) (1 - cos(x)) / x²(需要两次)

lim(x→0) (1 - cos(x)) / x²

第一步:验证不定式类型

当 x→0 时,1 - cos(x) → 0,x² → 0,所以是 0/0 型

第二步:第一次应用洛必达法则

分子求导:d/dx(1 - cos(x)) = sin(x)
分母求导:d/dx(x²) = 2x
lim(x→0) sin(x) / (2x)

仍然是 0/0 型,需要继续应用。

第三步:第二次应用洛必达法则

分子求导:d/dx(sin(x)) = cos(x)
分母求导:d/dx(2x) = 2
lim(x→0) cos(x) / 2 = cos(0) / 2 = 1/2
lim(x→0) (1 - cos(x)) / x² = 1/2
例3:最优化——用 120m 围栏围一个矩形场地,一面靠墙,求最大面积

问题:用 120 米长的围栏围一个矩形场地,其中一面靠墙(不需要围栏),求矩形的最大面积。

第一步:理解问题,画图

设矩形靠墙的一边为长度 L,垂直于墙的两边为宽度 W。围栏只围三个边:一个长度 L 和两个宽度 W。

第二步:建立目标函数

围栏约束:L + 2W = 120,即 L = 120 - 2W

面积 A = L · W = (120 - 2W) · W = 120W - 2W²

定义域:W > 0 且 L = 120 - 2W > 0,所以 0 < W < 60。

第三步:求导找临界点

A'(W) = 120 - 4W = 0 ⇒ W = 30

第四步:验证极大值

A''(W) = -4 < 0   ⇒   W = 30 处取得极大值

第五步:回答原问题

W = 30m,L = 120 - 2(30) = 60m

最大面积 A = 60 × 30 = 1800 m²
最大面积为 1800 m²,此时矩形尺寸为 60m × 30m(长是宽的两倍)
例4:线性化——用线性逼近估计 √(4.02) 的值

√(4.02) 的近似值

第一步:选择函数和展开点

令 f(x) = √x,选择 a = 4(因为 √4 = 2 是我们已知的精确值)。

第二步:计算 f(a) 和 f'(a)

f(4) = √4 = 2
f'(x) = 1/(2√x)
f'(4) = 1/(2 × 2) = 1/4 = 0.25

第三步:应用线性化公式

f(x) ≈ f(a) + f'(a)(x - a)
√(4.02) ≈ 2 + 0.25 × (4.02 - 4)
√(4.02) ≈ 2 + 0.25 × 0.02
√(4.02) ≈ 2 + 0.005 = 2.005

第四步:验证精度

精确值 √(4.02) ≈ 2.00499...,近似值 2.005 的误差仅为约 0.0003%。

√(4.02) ≈ 2.005(精确值 ≈ 2.00499)
例5:牛顿法——用牛顿法求 x² - 2 = 0 的近似根(从 x0 = 1 开始,迭代 3 次)

方程 x² - 2 = 0 的近似根,即求 √2 的近似值。

第一步:确定函数和导数

f(x) = x² - 2
f'(x) = 2x
迭代公式:xn+1 = xn - (xn² - 2) / (2xn)

第二步:第一次迭代(x0 = 1)

x1 = 1 - (1 - 2) / (2 × 1) = 1 - (-1/2) = 1 + 0.5 = 1.5

第三步:第二次迭代(x1 = 1.5)

x2 = 1.5 - (1.5² - 2) / (2 × 1.5) = 1.5 - (2.25 - 2) / 3 = 1.5 - 0.25/3
x2 = 1.5 - 0.08333... = 1.41667

第四步:第三次迭代(x2 ≈ 1.41667)

x3 = 1.41667 - (1.41667² - 2) / (2 × 1.41667)
= 1.41667 - (2.00694 - 2) / 2.83333
= 1.41667 - 0.00694 / 2.83333
= 1.41667 - 0.00245
x3 ≈ 1.41422

第五步:对比精确值

√2 ≈ 1.41421356...,仅 3 次迭代就得到了 5 位正确小数!

x3 ≈ 1.41422(精确值 √2 ≈ 1.41421356...,误差 < 0.00001)
ML

MATLAB 可视化代码

以下 MATLAB 代码帮助你可视化最优化问题、牛顿法迭代过程和洛必达法则的数值验证。

optimization_fence.m — 围栏最优化问题可视化
% 围栏最优化问题:120m围栏,一面靠墙,求最大面积 % A(W) = (120 - 2W) * W = 120W - 2W^2 W = linspace(0, 60, 500); A = (120 - 2*W) .* W; figure('Position', [100 100 900 550]); plot(W, A, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; % 标注最大值点 W_opt = 30; A_opt = 1800; plot(W_opt, A_opt, 'o', 'MarkerSize', 10, ... 'MarkerFaceColor', [0.18 0.49 0.43], 'MarkerEdgeColor', 'k'); % 画虚线标注 plot([W_opt W_opt], [0 A_opt], 'k--', 'LineWidth', 0.8); plot([0 W_opt], [A_opt A_opt], 'k--', 'LineWidth', 0.8); % 标注文字 text(W_opt+2, A_opt+50, '最大面积 = 1800 m^2', 'FontSize', 12); text(W_opt+2, A_opt-100, 'W = 30m, L = 60m', 'FontSize', 11); xlabel('宽度 W (m)'); ylabel('面积 A (m^2)'); title('围栏最优化:面积 vs 宽度'); grid on; saveas(gcf, 'ch12_optimization_fence.png');
newton_method.m — 牛顿法迭代可视化
% 牛顿法求解 x^2 - 2 = 0(即求 sqrt(2)) f = @(x) x.^2 - 2; fp = @(x) 2*x; x = linspace(-1, 3, 500); y = f(x); figure('Position', [100 100 900 550]); % 画曲线和x轴 plot(x, y, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; plot([-1 3], [0 0], 'k-', 'LineWidth', 1); % 牛顿法迭代 x_curr = 1; colors = {[0.9 0.64 0.24], [0.4 0.76 0.23], [0.25 0.6 1]}; for i = 1:3 y_curr = f(x_curr); slope = fp(x_curr); x_next = x_curr - y_curr / slope; % 画切线 x_line = [x_curr, x_next]; y_line = [y_curr, 0]; plot(x_line, y_line, '--', 'LineWidth', 2, 'Color', colors{i}); % 标注迭代点 plot(x_curr, y_curr, 'o', 'MarkerSize', 8, ... 'MarkerFaceColor', colors{i}, 'MarkerEdgeColor', 'k'); plot(x_next, 0, 's', 'MarkerSize', 8, ... 'MarkerFaceColor', colors{i}, 'MarkerEdgeColor', 'k'); fprintf('x%d = %.6f\n', i, x_next); x_curr = x_next; end xlabel('x'); ylabel('f(x) = x^2 - 2'); title('牛顿法迭代过程(求 \sqrt{2})'); legend('y = x^2 - 2', 'x轴', 'Location', 'best'); grid on; saveas(gcf, 'ch12_newton_method.png');
lhopital_verification.m — 洛必达法则数值验证
% 洛必达法则数值验证 % 例1: lim(x->0) (e^x - 1) / x = 1 % 例2: lim(x->0) (1 - cos(x)) / x^2 = 1/2 x_vals = logspace(-8, -1, 100); % 例1: (e^x - 1) / x y1 = (exp(x_vals) - 1) ./ x_vals; % 例2: (1 - cos(x)) / x^2 y2 = (1 - cos(x_vals)) ./ x_vals.^2; figure('Position', [100 100 1200 500]); % 子图1 subplot(1,2,1); semilogx(x_vals, y1, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; yline(1, 'k--', 'LineWidth', 1); xlabel('x'); ylabel('(e^x - 1) / x'); title('例1: 极限趋近于 1'); grid on; % 子图2 subplot(1,2,2); semilogx(x_vals, y2, 'LineWidth', 2.5, 'Color', [0.18 0.49 0.43]); hold on; yline(0.5, 'k--', 'LineWidth', 1); xlabel('x'); ylabel('(1 - cos(x)) / x^2'); title('例2: 极限趋近于 1/2'); grid on; saveas(gcf, 'ch12_lhopital_verification.png');
CH

交互式图表

图 12-1:线性逼近——切线与曲线的局部近似
图 12-2:牛顿法迭代过程(求解 x² - 2 = 0)