数学 / 导数 · 从变化率到极值与不等式 / 用导数证明不等式 待审核 7 / 8
作差构造 · 切线不等式

用导数证明不等式

不等式 f(x)≥g(x)f(x) \ge g(x) 在整个区间上成立与否,等价于差函数 h=f−gh = f - g 的最小值是否不小于零。导数把「求最小值」变成可执行的步骤,证不等式因而有了通用路线:作差、求导定单调、比较最小值与零。

1 · 作差构造函数

三步走

证 ex≥x+1e^x \ge x + 1 对一切实数成立。令 h(x)=ex−x−1h(x) = e^x - x - 1,则 h′(x)=ex−1h'(x) = e^x - 1,它在 x<0x < 0 时为负、x>0x > 0 时为正。故 hh 在 (−∞,0)(-\infty, 0) 上递减、在 (0,+∞)(0, +\infty) 上递增,最小值为 h(0)=0h(0) = 0。h(x)≥0h(x) \ge 0 对一切 xx 成立,原不等式得证,且等号只在 x=0x = 0 处取到。

三步的次序不可颠倒:不先作差,就不知道该对谁求导;不定单调性,就不知道最小值在哪个点上取到。最小值恰为零这一情形最常见,它对应两条曲线相切。

图 1-1 · 上图是待比较的两条曲线,下图是差函数 h=f−gh = f - g 与它的最小值。可切换不等式并拖动含参一栏的 aa,观察最小值何时被抬到零以上。

2 · 最小值为负即反例

差函数的最小值一旦为负,不等式在整段区间上就不成立,而取到负值的那个自变量就是现成的反例。这个方向比证明容易:找到一个点即可。

ex≥ax+1e^x \ge ax + 1 对一切实数成立吗?令 h(x)=ex−ax−1h(x) = e^x - ax - 1。a≤0a \le 0 时另作讨论;a>0a > 0 时 h′(x)=ex−ah'(x) = e^x - a 的零点是 x=ln⁡ax = \ln a,最小值

h(ln⁡a)=a−aln⁡a−1h(\ln a) = a - a\ln a - 1

只在 a=1a = 1 处等于零,其余取值一律为负。a=2a = 2 时最小值为 1−2ln⁡2≈−0.3861 - 2\ln 2 \approx -0.386,反例即 x=ln⁡2≈0.693x = \ln 2 \approx 0.693:左端 22,右端 2ln⁡2+1≈2.3862\ln 2 + 1 \approx 2.386。这解释了为何 y=x+1y = x + 1 在所有形如 y=ax+1y = ax + 1 的直线里是唯一的那条——它正是 y=exy = e^x 在 (0,1)(0, 1) 处的切线。

3 · 两族切线不等式

定理 3.1 对一切实数 xx 有 ex≥x+1e^x \ge x + 1;对一切 x>0x > 0 有 ln⁡x≤x−1\ln x \le x - 1。两式的等号分别只在 x=0x = 0 与 x=1x = 1 处取到。

两式互为镜像:y=exy = e^x 与 y=ln⁡xy = \ln x 关于直线 y=xy = x 对称,y=x+1y = x + 1 与 y=x−1y = x - 1 也是。凡是指数与对数混在一起的不等式,多半可以用它们把超越函数换成一次式:

  • xx 换成 x−1x - 1,ex≥x+1e^x \ge x + 1 给出 ex−1≥xe^{x-1} \ge x,即 ln⁡x≤x−1\ln x \le x - 1 的等价形式。
  • xx 换成 xa\frac{x}{a}(a>0a > 0),得 ex/a≥xa+1e^{x/a} \ge \frac{x}{a} + 1,可用来处理带参数的指数式。
  • ln⁡x≤x−1\ln x \le x - 1 里把 xx 换成 1x\frac{1}{x},得 ln⁡x≥1−1x\ln x \ge 1 - \frac{1}{x},对数由此被上下夹住:1−1x≤ln⁡x≤x−11 - \frac{1}{x} \le \ln x \le x - 1。

放缩会损失信息,用之前须确认损失得起。ln⁡x≤x−1\ln x \le x - 1 在 xx 靠近 11 时很紧(差为 O((x−1)2)O((x-1)^2)),在 x=10x = 10 时两端相差 6.76.7,此时再拿它去估计原式往往就过头了。

4 · 差函数在浮点下的符号

差函数的表达式照抄式子写成 Math.exp(x) - x - 1 会在原点附近失真。实测 x=10−8x = 10^{-8} 时它给出 −1.11×10−16-1.11 \times 10^{-16}——符号与定理 3.1 相反;x=10−9x = 10^{-9} 时给出恰好的 00,于是「等号只在 x=0x = 0 处取到」也验不出来。原因仍是相消:exe^x 与 1+x1 + x 的前十六位有效数字相同,相减后剩下的位里已没有真实信息。

改用 Math.expm1(x) - x 计算同一个量,两点分别得 5.0×10−175.0 \times 10^{-17} 与 5.0×10−195.0 \times 10^{-19},与理论值 x22\frac{x^2}{2} 一致。expm1 直接算 ex−1e^x - 1 而不经过「先算 exe^x 再减 11」这一步,小 xx 处的有效数字因此保得住。对数一侧同理用 Math.log1p(x - 1)。

注 · 这条不影响纸面上的证明,只影响拿数值去核对结论的那一步。本系列的单测两个版本都留着:expTangentGapNaive 专门用来钉住「照式子直接算会得到负数」这个事实,expTangentGap 才是给 lab 用的那一个。若哪天 V8 改了 Math.exp 的实现使得那个负号消失,单测会立刻报出来,届时该改的是注释而不是结论。

5 · 参考文献

  1. Inequality (mathematics). Wikipedia. 不等式的基本性质与证明手段。https://en.wikipedia.org/wiki/Inequality_(mathematics)
  2. Bernoulli's inequality. Wikipedia. 与 ex≥x+1e^x \ge x + 1 同源的一族放缩不等式。https://en.wikipedia.org/wiki/Bernoulli%27s_inequality
  3. Loss of significance. Wikipedia. 相近数相减导致有效数字丢失,以及 expm1 / log1p 这类补偿函数。https://en.wikipedia.org/wiki/Loss_of_significance