数学 / 导数 · 从变化率到极值与不等式 / 凹凸性、拐点与函数作图 待审核 6 / 8
二阶导数 · 拐点 · 渐近线

凹凸性、拐点与函数作图

导数的符号只回答升降。两段同样在上升的曲线,可以一段越升越陡、另一段越升越缓,差别不在 ff' 的正负,而在 ff' 自身的增减。把这一层信息也算出来,再补上定义域两端与间断点附近的走向,函数的图象就不必靠描点去猜。

1 · 二阶导数与弯曲的方向

对导函数再求一次导,得到二阶导数 f(x)f''(x)。它是 ff' 的变化率,也就是切线斜率变化的快慢。

定义 1.1(下凸与上凸)ff 在区间 II 上连续。若对 II 内任意两点 x1<x2x_1 < x_2 恒有 f(x1+x22)f(x1)+f(x2)2f\left(\frac{x_1 + x_2}{2}\right) \le \frac{f(x_1) + f(x_2)}{2} 即弧不高于弦,则称 ff 的图象在 II 上下凸(convex);不等号反向时称上凸(concave)。

定义只用到函数值,不要求可导。二阶导数把它换成一个可算的判据。

定理 1.2ff 在区间 II 上二阶可导。若 f(x)>0f''(x) > 0II 内每个 xx 成立,则图象在 II 上下凸;若 f(x)<0f''(x) < 0 恒成立,则上凸。

论证走的是切线:f>0f'' > 0 说明 ff' 递增,切线斜率沿曲线一路变大,曲线始终在每一条切线的上方;把弦的两个端点各作一条切线,弦就压在弧之上。y=x2y = x^2f=2f'' = 2 恒正,图象是开口向上的抛物线;y=lnxy = \ln xf=1x2f'' = -\frac{1}{x^2} 恒负,对数曲线一路向右上方走却越走越平。

注 · 中文里「凹」与「凸」有两套互相颠倒的用法。《高等数学》一系把 f>0f'' > 0 的一段叫作凹弧,f<0f'' < 0 的叫凸弧,说的是曲线相对于观察者「凹进去」;数学分析与凸分析一系则把 f>0f'' > 0 的函数叫凸函数,与 convex function 直接对应,于是同一段曲线在两套术语下分别是「凹」和「凸」。英文没有这个歧义:f>0f'' > 0 是 convex(或 concave up),f<0f'' < 0 是 concave(concave down)。本页一律写「下凸 / 上凸」,读到别处的教材时按 ff'' 的符号还原即可。

2 · 拐点

定义 2.1(拐点)ffx0x_0 处连续。若在 x0x_0 的某个邻域内,曲线在 x0x_0 一侧下凸、另一侧上凸,则称点 (x0,f(x0))(x_0, f(x_0)) 是曲线的拐点(inflection point)。

拐点是凹凸性的分界,判据在于 ff'' 变号,ff'' 取零本身还不够。二阶可导时 f(x0)=0f''(x_0) = 0 是必要条件:ff'' 在拐点两侧异号且连续,中间必经过零。反过来不成立。

警示 · y=x4y = x^4 的二阶导数 12x212x^2x=0x = 0 处为零,两侧却同为正。整条曲线一路下凸,原点不是拐点,只是曲线在那里暂时「平」了一下。把「f=0f'' = 0」当成拐点的判据,x4x^4 这一族就会全部判错。

这与极值的判别是同一种结构:ff' 变号处出极值,ff'' 变号处出拐点,各自的「导数为零」都只是候选条件。两者的位置一般互不相干——y=x33xy = x^3 - 3x 的极值在 x=±1x = \pm 1,拐点在 x=0x = 0y=xexy = x \mathrm{e}^{-x} 的极大值在 x=1x = 1,拐点在 x=2x = 2

拐点还有一个不依赖二阶导数的说法:切线在该点穿过曲线。别处的切线只是碰一下就退回同侧,拐点处的切线从曲线的一侧跨到另一侧。y=x33xy = x^3 - 3x 在原点的切线是 y=3xy = -3x,代入 x=0.5x = -0.5x=0.5x = 0.5 分别得曲线在切线下方与上方,穿越发生在原点。

图 2-1 · ffff'ff'' 三格同屏,共用横轴。橙色竖线落在 ff' 的零点上,红色竖线落在 ff'' 的变号处;顶格的底色按 ff'' 的符号区分下凸与上凸。可切换函数族并拖动参数 aa,观察 x4+ax2x^4 + ax^2 的两个拐点如何在 aa 变号时从原点分裂出来。

3 · 渐近线

有界的视窗画不出无穷远处的走向,渐近线(asymptote)补上这一段:曲线与某条直线的距离趋于零时,这条直线就是它的渐近线。三类的求法各不相同。

  • 竖直渐近线只出现在定义域的挖去点上。xx0x \to x_0f(x)+|f(x)| \to +\infty,则 x=x0x = x_0 是竖直渐近线。y=1xy = \frac{1}{x}x=0x = 0 处、y=tanxy = \tan xx=π2+kπx = \frac{\pi}{2} + k\pi 处都是如此。
  • 水平渐近线由 x±x \to \pm\infty 时的极限给出。limx+f(x)=c\lim_{x \to +\infty} f(x) = cy=cy = c 是右侧的水平渐近线,左右两侧可以不同:logistic 函数 11+ex\frac{1}{1 + \mathrm{e}^{-x}} 向右趋于 11、向左趋于 00,两条水平线一上一下把曲线夹住。
  • 斜渐近线要两次求极限。先由 k=limx+f(x)xk = \lim_{x \to +\infty} \frac{f(x)}{x} 定斜率,再由 b=limx+(f(x)kx)b = \lim_{x \to +\infty} (f(x) - kx) 定截距,两个极限都存在且 k0k \ne 0y=kx+by = kx + b 是斜渐近线。y=x+1xy = x + \frac{1}{x}k=1k = 1b=0b = 0,斜渐近线是 y=xy = x,同时它在 x=0x = 0 处还有一条竖直渐近线。

次序不能反:先算 kk 再算 bb。跳过第一步直接算 f(x)xf(x) - x 只在斜率恰为 11 时凑对,斜率是别的值时两个极限都发散。

「渐近线是碰不到的」这句流传很广的话并不成立。y=sinxxy = \frac{\sin x}{x} 的水平渐近线是 y=0y = 0,而曲线在每个 x=kπx = k\pi 处都与它相交,交点有无穷多个。渐近线约束的只是距离的极限行为,对曲线在有限范围内是否与它相交不作任何断言,这一点与切线的极限定义同源(见 导数的几何意义与切线方程)。

4 · 作图的次序

把前面几项汇成一条流水线,次序是有讲究的:定义域定下讨论的范围,奇偶性与周期性把工作量对折,零点与极值给出骨架,凹凸与拐点决定骨架之间怎么连,渐近线管住无穷远与间断点附近。描点排在最后,作用是确认而非猜测。

  1. 定义域。分母不为零、偶次根号内非负、对数的真数为正,先把不能取的点挖掉。
  2. 奇偶性与周期性。f(x)=f(x)f(-x) = f(x) 只画右半再对称过去;f(x+T)=f(x)f(x + T) = f(x) 只画一个周期。
  3. 零点与函数值的符号。解 f(x)=0f(x) = 0,定出曲线穿过横轴的位置。
  4. ff',解 f(x)=0f'(x) = 0,定单调区间与极值。
  5. ff'',解 f(x)=0f''(x) = 0 并检查两侧符号,定凹凸区间与拐点。
  6. 求各类渐近线,再补几个关键点连成曲线。

例 4.1f(x)=xexf(x) = x\mathrm{e}^{-x} 的图象。定义域为 R\mathbb{R}f(x)=xexf(-x) = -x\mathrm{e}^{x}f(x)f(x) 无对称关系,非奇非偶。零点只有 x=0x = 0,且 x>0x > 0f>0f > 0x<0x < 0f<0f < 0。求导得 f(x)=(1x)exf'(x) = (1 - x)\mathrm{e}^{-x},驻点 x=1x = 1ff' 在其左为正右为负,f(1)=e10.368f(1) = \mathrm{e}^{-1} \approx 0.368 是极大值。再求 f(x)=(x2)exf''(x) = (x - 2)\mathrm{e}^{-x},零点 x=2x = 2ff'' 由负变正,拐点为 (2,2e2)(2,0.271)(2, 2\mathrm{e}^{-2}) \approx (2, 0.271):曲线在 (,2)(-\infty, 2) 上上凸、在 (2,+)(2, +\infty) 上下凸。x+x \to +\inftyf0f \to 0y=0y = 0 是右侧的水平渐近线;xx \to -\inftyff \to -\infty,左侧无渐近线。至此形状已定:从左下方陡峭地升上来,在 x=1x = 1 处到达最高点 0.3680.368,随后下降,x=2x = 2 之后转为下凸并贴着横轴趋近于零。

极大值点 x=1x = 1 与拐点 x=2x = 2 分居两处,这是本例值得留意的地方——曲线在 x=1x = 1 之后开始下降,但下降本身还在加速;直到 x=2x = 2 才转为减速,此后越走越平。只看 ff' 得不到这段区别。

5 · 数值上的二阶导数

core/shape.tssecondDiff 用二阶中心差商算 ff''

f(x)f(x+h)2f(x)+f(xh)h2f''(x) \approx \frac{f(x + h) - 2f(x) + f(x - h)}{h^2}

步长的取法与一阶差商不同。一阶中心差商在 h=106h = 10^{-6} 附近最准(见 平均变化率与导数的定义 的收敛表),二阶必须放大到 10410^{-4}:分子里三个量级相同的数相加减,剩下的舍入残渣约为一个机器 ε\varepsilon,除以 h2h^2 后被放大成 ε/h2\varepsilon / h^2;截断误差仍是 O(h2)O(h^2),两者在 ε1/41.2×104\varepsilon^{1/4} \approx 1.2 \times 10^{-4} 处交汇。实测 f=sinf = \sinx=1x = 1h=104h = 10^{-4} 时误差 3.0×1093.0 \times 10^{-9}h=102h = 10^{-2}7.0×1067.0 \times 10^{-6}h=106h = 10^{-6}7.8×105-7.8 \times 10^{-5},两侧都变差。

再小就只剩噪声。h=108h = 10^{-8} 时算出 1.1102230246251565-1.110\,223\,024\,625\,156\,5,这个数恰是 253/h2-2^{-53} / h^2;换成 f=x3f = x^32253/h22 \cdot 2^{-53} / h^2,换成 f=exf = \mathrm{e}^x 分子干脆是精确的 00,二阶差商报出 00 而真值是 e=2.718\mathrm{e} = 2.718。三个函数给出三个「答案」,它们只反映浮点数最后一位的舍入量,与被求导的函数无关。

拐点的判别也踩过一次。d2Zeros 先取 ff'' 的零点,再在每个零点左右各取一个探测点看符号。取 f(x)=x4+ax2f(x) = x^4 + ax^2 并把 aa 压到 108-10^{-8},两个真拐点相距只有 8.2×1058.2 \times 10^{-5},零点检测除了这两个还会在它们中间多报一个 x=0x = 0——那是重根检测顺带捞上来的。变号判别把它挡住了:x=0x = 0 两侧的 ff'' 同为 1.78×108-1.78 \times 10^{-8},同号即不是拐点。若判据写成「零点即拐点」,这一族在 aa 极小时会多出一个假拐点。

竖直渐近线附近还有一处更隐蔽的坑。rootsOf 的收敛阈值取网格上 g|g| 最大值的 10910^{-9} 倍,是个相对量;一旦区间里含着极点,这个基准就被撑到毫无意义的大小。把 y=x+1xy = x + \frac{1}{x}f=2x3f'' = \frac{2}{x^3} 直接交给 [4,4][-4, 4] 上的 rootsOf,阈值被撑到 0.031250000000010.031\,250\,000\,000\,01,而 f(±4)=0.03125|f''(\pm 4)| = 0.031\,25 恰好差一点没越过它,两个视窗端点被报成零点;同一个函数换到 [3,3][-3, 3] 则一个零点也不报。现在的做法是先按挖去点把区间断开,逐段调用,极点不再进入任何一段的采样。

6 · 参考文献

  1. Convex function. Wikipedia. 凸性的多种等价定义,含二阶导数判据与中点形式。https://en.wikipedia.org/wiki/Convex_function
  2. Inflection point. Wikipedia. 拐点的定义、必要条件与 x4x^4 一类反例。https://en.wikipedia.org/wiki/Inflection_point
  3. Asymptote. Wikipedia. 三类渐近线的定义与斜渐近线的两次极限求法。https://en.wikipedia.org/wiki/Asymptote
  4. Finite difference coefficient. Wikipedia. 二阶中心差商的系数与误差量级。https://en.wikipedia.org/wiki/Finite_difference_coefficient
  5. Numerical differentiation. Wikipedia. 步长在截断误差与舍入误差之间的取舍。https://en.wikipedia.org/wiki/Numerical_differentiation