数学 / 导数 · 从变化率到极值与不等式 / 平均变化率与导数的定义 待审核 1 / 8
割线斜率 → 瞬时变化率

平均变化率与导数的定义

一辆车 2 秒内行驶 30 米,这句话给出的是 15 米每秒的平均变化率,而不是任何一个时刻的速度。要问「第 1 秒末有多快」,只能把观察的时间段不断缩短,看平均速度稳定到哪个值上。导数就是这个「稳定到哪个值」的精确说法:区间长度趋于零时平均变化率的极限。

1 · 平均变化率与割线斜率

函数 y=f(x)y = f(x) 在区间 [x0,x0+h][x_0, x_0 + h] 上的平均变化率定义为

ΔyΔx=f(x0+h)f(x0)h\frac{\Delta y}{\Delta x} = \frac{f(x_0 + h) - f(x_0)}{h}

这个商在几何上是一条割线的斜率:割线过曲线上的两点 (x0,f(x0))(x_0, f(x_0))(x0+h,f(x0+h))(x_0 + h, f(x_0 + h))。平均变化率依赖 hh,它刻画的是整段区间上的平均升降,段内的起伏一概被抹平。f(x)=x2f(x) = x^2x0=1x_0 = 1 处的右侧割线斜率恰为 2+h2 + hhh11 时是 33,取 0.010.01 时是 2.012.01,这个式子里 hh 的系数就是「hh 缩小十倍、割线斜率与 22 的差也缩小十倍」的原因。

图 1-1 · 割线随区间长度 hh 缩短而转向切线,右下角的表列出各档 hh 对应的割线斜率与它同导数的差。可切换函数、移动 x0x_0、逐档缩小 hh 观察两侧割线如何从两边夹住同一个数。

2 · 瞬时变化率

h → 0 的极限

hh 从正负两侧趋于零时,若割线斜率趋于同一个有限的数,就称 ffx0x_0可导,这个数是 ffx0x_0 处的瞬时变化率,记作 f(x0)f'(x_0)

f(x0)=limh0f(x0+h)f(x0)hf'(x_0) = \lim_{h \to 0} \frac{f(x_0 + h) - f(x_0)}{h}

「同一个数」这个要求不是多余的。f(x)=xf(x) = |x|x0=0x_0 = 0 处,右侧割线斜率恒为 11、左侧恒为 1-1,两侧各自都有极限却互不相等,于是 x|x| 在原点不可导——图象在那里有一个尖角,无法指定唯一的切线方向。

莱布尼茨的记号 dydx\frac{dy}{dx} 与拉格朗日的记号 f(x0)f'(x_0) 指同一个数。前者形似分数而实际上是一个整体,它的好处在复合函数求导时才显出来;本系列以 ff' 为主。

3 · 差商在双精度下的失真

定义式说「hh 越小越接近」,浮点计算里却不是。以 f(x)=x2f(x) = x^2x0=1x_0 = 1 为例,前向差商 f(1+h)f(1)h\frac{f(1+h) - f(1)}{h} 的误差在 hh11 缩到 10810^{-8} 的过程中确实同步缩小,h=108h = 10^{-8} 时误差为 1.2×108-1.2 \times 10^{-8},是全程最小的一档。再往下就开始反弹:h=1012h = 10^{-12} 时误差 1.8×1041.8 \times 10^{-4},比 h=104h = 10^{-4} 时还差;h=1015h = 10^{-15} 时算出 2.22042.2204h=1016h = 10^{-16}1+h1 + h 舍回 11,分子恰好是 00,差商随之为 00

注 · 反弹的原因是分子上两个相近的数相减。f(1+h)f(1+h)f(1)f(1) 的前十几位有效数字相同,相减后这些位全部抵消,剩下的低位里本来就没有多少有效信息,除以一个极小的 hh 又把误差放大回来。截断误差随 hh 减小,舍入误差随 hh 减小而增大,两者的和在中间某处取到最小。

中心差商 f(x0+h)f(x0h)2h\frac{f(x_0+h) - f(x_0-h)}{2h} 把误差量级从 O(h)O(h) 压到 O(h2)O(h^2):同样的 ffx0x_0h=106h = 10^{-6} 时它的误差是 2×10122 \times 10^{-12},而前向差商要到 10810^{-8} 才有可比的精度。core/calculus.tscentralSlope 因此把默认步长定在 10610^{-6},而不是取尽可能小的值——本系列的单测都拿它当 oracle 反过来核对闭式导数,步长选错,验出来的偏差就分不清是法则错了还是差商本身不准。

4 · 从一点的导数到导函数

f(x0)f'(x_0) 是一个数,它依赖 x0x_0。让 x0x_0 在可导的范围内变动,「xf(x)x \mapsto f'(x)」本身就是一个函数,称为 ff导函数,仍记作 ff'

例 4.1 由定义求 f(x)=x2f(x) = x^2 的导函数。平均变化率为 (x+h)2x2h=2xh+h2h=2x+h\frac{(x+h)^2 - x^2}{h} = \frac{2xh + h^2}{h} = 2x + h,令 h0h \to 0f(x)=2xf'(x) = 2x。代入 x=1x = 1 即 §1 的 f(1)=2f'(1) = 2

把定义式套用到几个具体函数上,可得几个常用结论:常数函数的导函数恒为零,f(x)=xnf(x) = x^nnn 为正整数)的导函数是 nxn1nx^{n-1}f(x)=sinxf(x) = \sin x 的导函数是 cosx\cos x。逐个用定义算显然不划算,基本求导公式与四则法则 把这类计算收敛成几条可以反复套用的规则。

5 · 参考文献

  1. Derivative. Wikipedia. 导数的定义、记号体系与几何意义。https://en.wikipedia.org/wiki/Derivative
  2. Difference quotient. Wikipedia. 差商的形式与它同导数的关系。https://en.wikipedia.org/wiki/Difference_quotient
  3. Numerical differentiation. Wikipedia. 前向差商与中心差商的误差量级,以及步长的最优取值。https://en.wikipedia.org/wiki/Numerical_differentiation