平均变化率与导数的定义
一辆车 2 秒内行驶 30 米,这句话给出的是 15 米每秒的平均变化率,而不是任何一个时刻的速度。要问「第 1 秒末有多快」,只能把观察的时间段不断缩短,看平均速度稳定到哪个值上。导数就是这个「稳定到哪个值」的精确说法:区间长度趋于零时平均变化率的极限。
1 · 平均变化率与割线斜率
函数 在区间 上的平均变化率定义为
这个商在几何上是一条割线的斜率:割线过曲线上的两点 与 。平均变化率依赖 ,它刻画的是整段区间上的平均升降,段内的起伏一概被抹平。 在 处的右侧割线斜率恰为 : 取 时是 ,取 时是 ,这个式子里 的系数就是「 缩小十倍、割线斜率与 的差也缩小十倍」的原因。
2 · 瞬时变化率
从正负两侧趋于零时,若割线斜率趋于同一个有限的数,就称 在 处可导,这个数是 在 处的瞬时变化率,记作 :
「同一个数」这个要求不是多余的。 在 处,右侧割线斜率恒为 、左侧恒为 ,两侧各自都有极限却互不相等,于是 在原点不可导——图象在那里有一个尖角,无法指定唯一的切线方向。
莱布尼茨的记号 与拉格朗日的记号 指同一个数。前者形似分数而实际上是一个整体,它的好处在复合函数求导时才显出来;本系列以 为主。
3 · 差商在双精度下的失真
定义式说「 越小越接近」,浮点计算里却不是。以 、 为例,前向差商 的误差在 从 缩到 的过程中确实同步缩小, 时误差为 ,是全程最小的一档。再往下就开始反弹: 时误差 ,比 时还差; 时算出 ; 时 舍回 ,分子恰好是 ,差商随之为 。
注 · 反弹的原因是分子上两个相近的数相减。 与 的前十几位有效数字相同,相减后这些位全部抵消,剩下的低位里本来就没有多少有效信息,除以一个极小的 又把误差放大回来。截断误差随 减小,舍入误差随 减小而增大,两者的和在中间某处取到最小。
中心差商
把误差量级从
压到
:同样的
与
,
时它的误差是
,而前向差商要到
才有可比的精度。core/calculus.ts 的 centralSlope 因此把默认步长定在
,而不是取尽可能小的值——本系列的单测都拿它当 oracle 反过来核对闭式导数,步长选错,验出来的偏差就分不清是法则错了还是差商本身不准。
4 · 从一点的导数到导函数
是一个数,它依赖 。让 在可导的范围内变动,「」本身就是一个函数,称为 的导函数,仍记作 。
例 4.1 由定义求 的导函数。平均变化率为 ,令 得 。代入 即 §1 的 。
把定义式套用到几个具体函数上,可得几个常用结论:常数函数的导函数恒为零,( 为正整数)的导函数是 , 的导函数是 。逐个用定义算显然不划算,基本求导公式与四则法则 把这类计算收敛成几条可以反复套用的规则。
5 · 参考文献
- Derivative. Wikipedia. 导数的定义、记号体系与几何意义。https://en.wikipedia.org/wiki/Derivative
- Difference quotient. Wikipedia. 差商的形式与它同导数的关系。https://en.wikipedia.org/wiki/Difference_quotient
- Numerical differentiation. Wikipedia. 前向差商与中心差商的误差量级,以及步长的最优取值。https://en.wikipedia.org/wiki/Numerical_differentiation