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

隐函数求导与相关变化率

当关系隐藏在方程中时

8.1

隐函数求导

显函数 vs 隐函数

到目前为止,我们处理的函数大多是显函数——y 被单独表示为 x 的函数:

y = f(x)

例如 y = x² + 1,y = sin(x),y = ex。在这些情况下,y 已经被"解出来"了,我们可以直接对等号右边求导。

然而,很多重要的曲线关系无法(或很难)将 y 解出。例如:

x² + y² = 25     (圆)
x³ + y³ = 6xy     (叶形线)

这些方程将 x 和 y 的关系隐含在方程 F(x, y) = 0 中,称为隐函数。隐函数求导法让我们无需解出 y 就能求出 dy/dx。

核心思想

对方程两边同时关于 x 求导。记住 y 是 x 的函数,所以每当遇到含 y 的项时,必须使用链式法则乘以 dy/dx。最后解出 dy/dx。

隐函数求导的步骤

四步法

第一步:对方程两边关于 x 求导
第二步:将含 dy/dx 的项移到等号一边,不含 dy/dx 的项移到另一边
第三步:提取 dy/dx(公因式)
第四步:解出 dy/dx

为什么要用隐函数求导?

有些方程虽然可以解出 y,但表达式非常复杂。例如 x² + y² = 25 可以解出 y = √(25 - x²),但 x³ + y³ = 6xy 根本无法用初等函数解出 y。隐函数求导法让我们绕过"解出 y"这一步,直接得到 dy/dx。

求二阶导数的方法

有时我们需要求 d²y/dx²。方法是:

二阶导数的求法

第一步:先通过隐函数求导得到 dy/dx 的表达式
第二步:对 dy/dx 的表达式关于 x 再次求导
注意:dy/dx 的表达式中可能含有 y,求导时对含 y 的项仍需使用链式法则(乘以 dy/dx)
第三步:如果需要特定点的值,将 x 和 y 的坐标代入

二阶导数的直觉

二阶导数告诉我们曲线的凹凸性和斜率的变化趋势。d²y/dx² > 0 表示曲线在该点凹向上(开口朝上),d²y/dx² < 0 表示凹向下(开口朝下)。在隐函数求导中,求二阶导数的关键是记住 dy/dx 本身也是 x 的函数。

8.2

相关变化率

在现实世界中,很多量都随时间变化,而且这些量之间通过某个方程相互关联。当我们知道其中一个量的变化率,想求另一个量的变化率时,就需要用到相关变化率的方法。

核心思想

两个量 x 和 y 都随时间 t 变化,它们之间通过方程 F(x, y) = 0 关联。对方程两边关于时间 t 求导(使用链式法则),就能将两个变化率 dx/dt 和 dy/dt 联系起来。

d/dt [F(x, y)] = 0   ⇒   ∂F/∂x · dx/dt + ∂F/∂y · dy/dt = 0

相关变化率的解题步骤

四步法

第一步:画图,标注所有已知量和未知量
第二步:建立方程,将各量之间的关系用数学方程表达
第三步:对方程两边关于时间 t 求导(链式法则)
第四步:代入已知的数值,求解未知的变化率

关键注意事项

先求导,后代入!这是相关变化率问题中最常见的错误。如果在求导之前就把数值代入方程,常量就会被当作变量处理,导致结果错误。正确的做法是先对含有变量的方程求导,得到变化率之间的关系,然后再代入具体数值。

常见应用场景

相关变化率在物理和工程中有广泛应用:气球充气(体积与半径的关系)、梯子滑落(底部位移与顶部位移的关系)、水面升降(水量与高度的关系)、阴影移动(物体移动与影子长度的关系)等。核心都是找到关联方程,然后对时间求导。

实际应用:相关变化率在工程中的应用

雷达追踪运动目标:雷达站测量飞机的距离 r 和仰角 θ。已知 dr/dt 和 dθ/dt,利用 x = r cosθ、y = r sinθ 对时间求导,可计算飞机的水平速度 dx/dt 和垂直速度 dy/dt,实现空中交通管制。

油罐液面高度与体积变化:圆柱形油罐中,油的体积 V 与液面高度 h 的关系为 V = πr²h。已知加油速率 dV/dt,通过求导 dh/dt = (1/πr²) dV/dt 可实时监测液面上升速度,防止溢油。

热气球上升速率:热气球高度 h 与观察者与气球的视线仰角 θ 满足 tanθ = h/d(d 为水平距离)。对时间求导得 sec²θ · dθ/dt = (1/d) · dh/dt,利用测得的角速度可推算气球上升速度。

圆锥漏斗排水:圆锥形漏斗中水的体积 V = (π/3)r²h,且 r/h 为常数。对时间求导可将体积变化率 dV/dt 与液面下降速率 dh/dt 关联,用于设计排水系统和灌溉设施。

EX

例题精讲

例1:对 x² + y² = 25 隐函数求导

dy/dx,并求在点 (3, 4) 处的导数值。

第一步:对方程两边关于 x 求导

d/dx (x² + y²) = d/dx (25)
2x + 2y · dy/dx = 0

注意:y² 对 x 求导需要链式法则:d/dx(y²) = 2y · dy/dx

第二步:将含 dy/dx 的项移到一边

2y · dy/dx = -2x

第三步:解出 dy/dx

dy/dx = -2x / (2y) = -x / y

第四步:代入 (3, 4)

dy/dx |(3,4) = -3/4
dy/dx = -x/y   ⇒   在 (3, 4) 处 dy/dx = -3/4

几何意义:圆 x² + y² = 25 在点 (3, 4) 处的切线斜率为 -3/4。切线方程为 y - 4 = (-3/4)(x - 3)。

例2:对 x³ + y³ = 6xy 隐函数求导(叶形线)

叶形线 x³ + y³ = 6xy 的 dy/dx,并求在点 (3, 3) 处的导数值。

第一步:对方程两边关于 x 求导

d/dx (x³ + y³) = d/dx (6xy)
3x² + 3y² · dy/dx = 6(y + x · dy/dx)

注意:右边 6xy 是两个关于 x 的函数的乘积,需要用乘积法则:d/dx(6xy) = 6 · (1 · y + x · dy/dx)

第二步:展开并移项

3x² + 3y² · dy/dx = 6y + 6x · dy/dx
3y² · dy/dx - 6x · dy/dx = 6y - 3x²

第三步:提取 dy/dx 并解出

(3y² - 6x) · dy/dx = 6y - 3x²
dy/dx = (6y - 3x²) / (3y² - 6x) = (2y - x²) / (y² - 2x)

第四步:代入 (3, 3)

dy/dx |(3,3) = (2·3 - 3²) / (3² - 2·3) = (6 - 9) / (9 - 6) = -3/3 = -1
dy/dx = (2y - x²) / (y² - 2x)   ⇒   在 (3, 3) 处 dy/dx = -1
例3:相关变化率——气球充气问题

问题:一个球形气球正在充气,其体积以 100 cm³/s 的速率增加。当半径为 5 cm 时,半径的增长速率是多少?

第一步:画图并标注

球形气球,半径 r,体积 V。
已知:dV/dt = 100 cm³/s
未知:当 r = 5 cm 时,dr/dt = ?

第二步:建立方程

V = (4/3)πr³

第三步:对 t 求导(链式法则)

dV/dt = (4/3)π · 3r² · dr/dt = 4πr² · dr/dt

第四步:代入已知值求解

100 = 4π(5)² · dr/dt = 100π · dr/dt
dr/dt = 100 / (100π) = 1/π ≈ 0.318 cm/s
当 r = 5 cm 时,dr/dt = 1/π ≈ 0.318 cm/s
直觉验证

结果合理吗?球体积 V = (4/3)πr³,所以 dV/dt = 4πr² dr/dt。当 r = 5 时,4π(25) = 100π。如果 dr/dt = 1/π,则 dV/dt = 100π · 1/π = 100,与已知一致。另外,1/π ≈ 0.318 cm/s 是一个较小的速率,符合直觉——气球越大,半径增长越慢。

例4:相关变化率——梯子滑落问题

问题:一个 10 m 长的梯子靠在竖直的墙上。梯子底部在地面上以 1 m/s 的速度滑离墙壁。当底部距墙 6 m 时,梯子顶部下滑的速度是多少?

第一步:画图并标注

设梯子底部到墙的距离为 x,顶部到地面的高度为 y。
已知:梯子长度 L = 10 m,dx/dt = 1 m/s
未知:当 x = 6 m 时,dy/dt = ?

第二步:建立方程

由勾股定理:

x² + y² = 10² = 100

第三步:对 t 求导(链式法则)

2x · dx/dt + 2y · dy/dt = 0

第四步:代入已知值求解

当 x = 6 时,y = √(100 - 36) = √64 = 8 m

2(6)(1) + 2(8) · dy/dt = 0
12 + 16 · dy/dt = 0
dy/dt = -12/16 = -3/4 = -0.75 m/s
当底部距墙 6 m 时,顶部下滑速度为 dy/dt = -3/4 m/s

负号表示 y 在减小,即梯子顶部在下滑,速度为 0.75 m/s。

直觉验证

梯子底部向外移动,顶部必然下滑。底部速度为 1 m/s,顶部速度为 0.75 m/s,比底部慢——这是因为此时顶部离地更高(8 m > 6 m),同样的水平位移需要更小的垂直位移来保持梯子长度不变。如果底部距墙很近(x 很小),顶部下滑速度会非常快。

ML

MATLAB 可视化代码

以下 MATLAB 代码帮助你可视化隐函数和相关变化率的核心概念。

implicit_plot.m — 隐函数绘图(圆与叶形线)
% 隐函数绘图:x^2+y^2=25(圆)和 x^3+y^3=6xy(叶形线) figure('Position', [100 100 1200 500]); % === 子图1:圆 x^2+y^2=25 === subplot(1,2,1); % 使用参数方程绘制:x = 5cos(t), y = 5sin(t) t = linspace(0, 2*pi, 500); x_circle = 5 * cos(t); y_circle = 5 * sin(t); plot(x_circle, y_circle, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; axis equal; grid on; % 在 (3,4) 处画切线:dy/dx = -x/y = -3/4 % 切线方程:y - 4 = (-3/4)(x - 3) x_tan = linspace(-1, 7, 100); y_tan = -3/4 * (x_tan - 3) + 4; plot(x_tan, y_tan, '--', 'LineWidth', 1.8, 'Color', [0.18 0.49 0.43]); % 标注切点 scatter(3, 4, 80, [0.77 0.36 0.24], 'filled', ... 'MarkerEdgeColor', 'k', 'LineWidth', 1.5); text(3.5, 4.5, '(3,4)', 'FontSize', 12, 'FontWeight', 'bold'); text(-4, 5, "dy/dx = -x/y = -3/4", 'FontSize', 11, ... 'Color', [0.18 0.49 0.43], 'FontWeight', 'bold'); title('x^2 + y^2 = 25'); xlabel('x'); ylabel('y'); xlim([-6.5 6.5]); ylim([-6.5 6.5]); % === 子图2:叶形线 x^3+y^3=6xy === subplot(1,2,2); % 使用参数方程:x = 6t/(1+t^3), y = 6t^2/(1+t^3) t = linspace(-0.5, 10, 2000); x_folium = 6 * t ./ (1 + t.^3); y_folium = 6 * t.^2 ./ (1 + t.^3); % 去掉奇点附近的数据 valid = abs(1 + t.^3) > 0.05; plot(x_folium(valid), y_folium(valid), 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; axis equal; grid on; % 在 (3,3) 处画切线:dy/dx = -1 % 切线方程:y - 3 = -1*(x - 3) => y = -x + 6 x_tan = linspace(1, 6, 100); y_tan = -x_tan + 6; plot(x_tan, y_tan, '--', 'LineWidth', 1.8, 'Color', [0.18 0.49 0.43]); % 画渐近线 x+y+6=0 x_asym = linspace(-4, 8, 100); y_asym = -x_asym - 6; plot(x_asym, y_asym, ':', 'LineWidth', 1, 'Color', [0.5 0.5 0.5]); % 标注切点 scatter(3, 3, 80, [0.77 0.36 0.24], 'filled', ... 'MarkerEdgeColor', 'k', 'LineWidth', 1.5); text(3.3, 3.8, '(3,3)', 'FontSize', 12, 'FontWeight', 'bold'); text(4, 5, "dy/dx = -1", 'FontSize', 11, ... 'Color', [0.18 0.49 0.43], 'FontWeight', 'bold'); title('x^3 + y^3 = 6xy'); xlabel('x'); ylabel('y'); xlim([-4 8]); ylim([-4 8]); saveas(gcf, 'ch8_implicit_functions.png');
ladder_related_rates.m — 相关变化率可视化(梯子问题)
% 梯子滑落问题可视化 % 10m长的梯子靠在墙上,底部以1m/s滑离 % x^2 + y^2 = 100, dx/dt = 1 figure('Position', [100 100 1200 500]); % === 子图1:梯子在不同时刻的位置 === subplot(1,2,1); hold on; grid on; % 画墙和地面 plot([0 0], [0 11], 'k-', 'LineWidth', 3); % 墙 plot([-0.5 11], [0 0], 'k-', 'LineWidth', 3); % 地面 % 梯子在不同时刻的位置 x_positions = [1; 3; 6; 8]; colors = [0.2 0.6 0.8; 0.4 0.7 0.3; 0.77 0.36 0.24; 0.6 0.3 0.6]; for i = 1:length(x_positions) x = x_positions(i); y = sqrt(100 - x^2); plot([0 x], [0 y], 'LineWidth', 2.5, 'Color', colors(i,:)); scatter(x, 0, 60, colors(i,:), 'filled', 'MarkerEdgeColor', 'k'); scatter(0, y, 60, colors(i,:), 'filled', 'MarkerEdgeColor', 'k'); end % 标注 text(6.2, -0.8, 'x=6, y=8', 'FontSize', 11, 'Color', [0.77 0.36 0.24], 'FontWeight', 'bold'); text(0.3, 10.5, '墙', 'FontSize', 12); text(9.5, -0.8, '地面', 'FontSize', 12); title('梯子滑落——不同时刻的位置'); xlabel('x (m)'); ylabel('y (m)'); xlim([-1 11]); ylim([-1.5 11]); axis equal; % === 子图2:变化率随时间的变化 === subplot(1,2,2); x_range = linspace(0.1, 9.9, 500); y_range = sqrt(100 - x_range.^2); % dy/dt = -x/(sqrt(100-x^2)) * dx/dt = -x/y dydt = -x_range ./ y_range; plot(x_range, dydt, 'LineWidth', 2.5, 'Color', [0.77 0.36 0.24]); hold on; grid on; % 标注 x=6 处的值 scatter(6, -6/8, 100, [0.77 0.36 0.24], 'filled', ... 'MarkerEdgeColor', 'k', 'LineWidth', 1.5); text(3, -1.5, "x=6: dy/dt = -3/4", 'FontSize', 11, ... 'Color', [0.77 0.36 0.24], 'FontWeight', 'bold'); % 画零线 plot([0 10], [0 0], 'k:', 'LineWidth', 0.8); title('顶部下滑速度 dy/dt 随 x 的变化'); xlabel('x (底部到墙的距离)'); ylabel('dy/dt (m/s)'); xlim([0 10]); saveas(gcf, 'ch8_ladder_related_rates.png');
CH

交互式图表

图 8-1:隐函数 x² + y² = 25 的图像(参数方程绘制圆)及 (3,4) 处的切线
图 8-2:叶形线 x³ + y³ = 6xy 的图像及 (3,3) 处的切线