用导数证明不等式
不等式 在整个区间上成立与否,等价于差函数 的最小值是否不小于零。导数把「求最小值」变成可执行的步骤,证不等式因而有了通用路线:作差、求导定单调、比较最小值与零。
1 · 作差构造函数
证 对一切实数成立。令 ,则 ,它在 时为负、 时为正。故 在 上递减、在 上递增,最小值为 。 对一切 成立,原不等式得证,且等号只在 处取到。
三步的次序不可颠倒:不先作差,就不知道该对谁求导;不定单调性,就不知道最小值在哪个点上取到。最小值恰为零这一情形最常见,它对应两条曲线相切。
2 · 最小值为负即反例
差函数的最小值一旦为负,不等式在整段区间上就不成立,而取到负值的那个自变量就是现成的反例。这个方向比证明容易:找到一个点即可。
对一切实数成立吗?令 。 时另作讨论; 时 的零点是 ,最小值
只在 处等于零,其余取值一律为负。 时最小值为 ,反例即 :左端 ,右端 。这解释了为何 在所有形如 的直线里是唯一的那条——它正是 在 处的切线。
3 · 两族切线不等式
定理 3.1 对一切实数 有 ;对一切 有 。两式的等号分别只在 与 处取到。
两式互为镜像: 与 关于直线 对称, 与 也是。凡是指数与对数混在一起的不等式,多半可以用它们把超越函数换成一次式:
- 换成 , 给出 ,即 的等价形式。
- 换成 (),得 ,可用来处理带参数的指数式。
- 里把 换成 ,得 ,对数由此被上下夹住:。
放缩会损失信息,用之前须确认损失得起。 在 靠近 时很紧(差为 ),在 时两端相差 ,此时再拿它去估计原式往往就过头了。
4 · 差函数在浮点下的符号
差函数的表达式照抄式子写成 Math.exp(x) - x - 1 会在原点附近失真。实测
时它给出
——符号与定理 3.1 相反;
时给出恰好的
,于是「等号只在
处取到」也验不出来。原因仍是相消:
与
的前十六位有效数字相同,相减后剩下的位里已没有真实信息。
改用 Math.expm1(x) - x 计算同一个量,两点分别得
与
,与理论值
一致。expm1 直接算
而不经过「先算
再减
」这一步,小
处的有效数字因此保得住。对数一侧同理用 Math.log1p(x - 1)。
注 · 这条不影响纸面上的证明,只影响拿数值去核对结论的那一步。本系列的单测两个版本都留着:expTangentGapNaive 专门用来钉住「照式子直接算会得到负数」这个事实,expTangentGap 才是给 lab 用的那一个。若哪天 V8 改了
Math.exp 的实现使得那个负号消失,单测会立刻报出来,届时该改的是注释而不是结论。
5 · 参考文献
- Inequality (mathematics). Wikipedia. 不等式的基本性质与证明手段。https://en.wikipedia.org/wiki/Inequality_(mathematics)
- Bernoulli's inequality. Wikipedia. 与 同源的一族放缩不等式。https://en.wikipedia.org/wiki/Bernoulli%27s_inequality
- Loss of significance. Wikipedia. 相近数相减导致有效数字丢失,以及
expm1/log1p这类补偿函数。https://en.wikipedia.org/wiki/Loss_of_significance