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

用导数证明不等式

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

1 · 作差构造函数

三步走

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

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

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

2 · 最小值为负即反例

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

exax+1e^x \ge ax + 1 对一切实数成立吗?令 h(x)=exax1h(x) = e^x - ax - 1a0a \le 0 时另作讨论;a>0a > 0h(x)=exah'(x) = e^x - a 的零点是 x=lnax = \ln a,最小值

h(lna)=aalna1h(\ln a) = a - a\ln a - 1

只在 a=1a = 1 处等于零,其余取值一律为负。a=2a = 2 时最小值为 12ln20.3861 - 2\ln 2 \approx -0.386,反例即 x=ln20.693x = \ln 2 \approx 0.693:左端 22,右端 2ln2+12.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 对一切实数 xxexx+1e^x \ge x + 1;对一切 x>0x > 0lnxx1\ln x \le x - 1。两式的等号分别只在 x=0x = 0x=1x = 1 处取到。

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

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

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

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

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

改用 Math.expm1(x) - x 计算同一个量,两点分别得 5.0×10175.0 \times 10^{-17}5.0×10195.0 \times 10^{-19},与理论值 x22\frac{x^2}{2} 一致。expm1 直接算 ex1e^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. 与 exx+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