跳转至

复合函数的局部误差怎样层层传递?

先备知识

你需要会把可导性写成局部线性化

\[ g(a+h)=g(a)+g'(a)h+o(h), \]

并知道可导函数在该点连续。本单元还会反复使用一个事实:若 \(k(h)=O(h)\)\(\eta(k)\to0\),那么

\[ \eta(k(h))k(h)=o(h). \]

这里 \(k(h)=O(h)\) 表示 \(k(h)/h\)\(h\to0\) 时有界。

学习目标

完成本单元后,你应当能够:

  1. 从两层局部线性化严格证明链式法则;
  2. 解释为什么内层增量可能等于零;
  3. 用延拓后的余项系数消除证明中的除零漏洞;
  4. 正确计算多层复合函数的导数;
  5. 把链式法则解释为绝对敏感性与相对敏感性的传递。

牵引问题

传感器把温度 \(x\) 转换成电压 \(g(x)\),显示程序再把电压转换成读数 \(f(g(x))\)。 温度的小变化先经过第一层放大或缩小,再经过第二层。直觉上,总变化率应是两层变化率 相乘:

\[ \text{总变化率} =\text{外层对内层的变化率}\times\text{内层对输入的变化率}. \]

但若内层函数在某些任意靠近基点的位置又回到原值,就会出现 \(g(a+h)-g(a)=0\)。一个依赖

\[ \frac{f(g(a+h))-f(g(a))}{g(a+h)-g(a)} \]

的证明会在这些步长上失去定义。怎样证明直觉公式而不做这次除法?

探索与猜想

\(b=g(a)\),令内层增量

\[ k=g(a+h)-g(a). \]

内层局部模型给出

\[ k=g'(a)h+o(h). \]

外层在 \(b\) 附近的局部模型是

\[ f(b+k)=f(b)+f'(b)k+o(k). \]

形式代入可得

\[ f(g(a+h)) =f(g(a))+f'(g(a))g'(a)h+o(h). \]

候选导数是 \(f'(g(a))g'(a)\)。真正的困难是把外层的 \(o(k)\) 严格转换为相对于 \(h\)\(o(h)\),同时允许 \(k=0\)

概念与理论

余项系数的零点延拓

\(f\)\(b\) 可导,可写

\[ f(b+k)=f(b)+f'(b)k+r_f(k),\qquad r_f(k)=o(k). \]

定义

\[ \eta(k)= \begin{cases} \dfrac{r_f(k)}k,&k\ne0,\\[6pt] 0,&k=0. \end{cases} \]

因为 \(r_f(k)/k\to0\),所以延拓后的函数满足

\[ \eta(k)\to0\qquad(k\to0), \]

而且对所有充分小的 \(k\),包括 \(k=0\),恒有

\[ r_f(k)=\eta(k)k. \]

这一步把“比 \(k\) 高阶”改写成一个趋零系数乘以 \(k\),以后不再需要除以实际出现的 内层增量。

定理:链式法则

\(g\)\(a\) 处可导,\(f\)\(b=g(a)\) 处可导,并且复合函数在 \(a\) 附近有定义,则 \(f\circ g\)\(a\) 处可导,且

\[ (f\circ g)'(a)=f'(g(a))g'(a). \]

证明障碍。 常见的“两个差商相乘”写法会除以 \(g(a+h)-g(a)\)。可导并不保证这个内层增量对每个充分小的非零 \(h\) 都非零。

证明。 内层可导给出

\[ g(a+h)=b+g'(a)h+r_g(h),\qquad r_g(h)=o(h). \]

\[ k(h)=g(a+h)-g(a)=g'(a)h+r_g(h). \]

于是 \(k(h)\to0\),并且

\[ \frac{k(h)}h=g'(a)+\frac{r_g(h)}h \]

\(h\to0\) 时趋于 \(g'(a)\),因而在某个去心邻域内有界,即 \(k(h)=O(h)\)

对外层使用上一段的延拓:

\[ f(b+k)=f(b)+f'(b)k+\eta(k)k,\qquad \eta(k)\to0. \]

代入 \(k=k(h)\)

\[ \begin{aligned} f(g(a+h))-f(g(a)) ={}&f'(b)\bigl[g'(a)h+r_g(h)\bigr]\\ &+\eta(k(h))k(h). \end{aligned} \]

最后一项相对于 \(h\) 的比值为

\[ \frac{\eta(k(h))k(h)}h =\eta(k(h))\frac{k(h)}h\to0, \]

因为第一因子趋于零,第二因子有界。因此它是 \(o(h)\),而 \(f'(b)r_g(h)=o(h)\)。综上,

\[ f(g(a+h)) =f(g(a))+f'(b)g'(a)h+o(h). \]

即使 \(g(a+h)=g(a)\),扩展后的 \(\eta\) 仍有定义,此时对应的余项正好为零;整个 证明没有除以内层增量。由局部线性化判据,

\[ (f\circ g)'(a)=f'(b)g'(a)=f'(g(a))g'(a). \]

\(\square\)

多层复合

\(F=f\circ g\circ k\),并且各层在对应点可导,则连续使用链式法则得到

\[ F'(x) =f'(g(k(x)))\,g'(k(x))\,k'(x). \]

阅读公式时应从外到内列出函数层,再把各层导数相乘。求值点不能丢失:\(f'\)\(g(k(x))\) 取值,\(g'\)\(k(x)\) 取值,只有 \(k'\)\(x\) 取值。

相对敏感性的乘法

若相关函数值和自变量均非零,定义相对敏感性

\[ S_f(x)=\frac{x f'(x)}{f(x)}. \]

\(F=f\circ g\),链式法则给出

\[ \begin{aligned} S_F(x) &=\frac{x f'(g(x))g'(x)}{f(g(x))}\\ &=\frac{g(x)f'(g(x))}{f(g(x))} \frac{xg'(x)}{g(x)}\\ &=S_f(g(x))S_g(x). \end{aligned} \]

因此复合过程的相对敏感性相乘。不过这个公式额外要求 \(x\ne0\)\(g(x)\ne0\)\(f(g(x))\ne0\);链式法则本身不需要这些非零条件。

例题与迁移

例题1:嵌套多项式

\[ F(x)=(3x^2-1)^4. \]

\(g(x)=3x^2-1\)\(f(u)=u^4\)。由整数幂法则,

\[ g'(x)=6x,\qquad f'(u)=4u^3. \]

链式法则给出

\[ F'(x)=4(3x^2-1)^3\cdot6x =24x(3x^2-1)^3. \]

外层导数仍在内层值 \(3x^2-1\) 处求值,不能把它误写成 \(4x^3\)

例题2:内层增量可以反复为零

定义

\[ g(h)= \begin{cases} h^2\sin(1/h),&h\ne0,\\ 0,&h=0, \end{cases} \qquad f(t)=t^2. \]

这里只使用 \(|\sin u|\le1\),不使用三角函数求导。由定义,

\[ \left|\frac{g(h)-g(0)}h\right| =|h\sin(1/h)|\le|h|\to0, \]

所以 \(g'(0)=0\)。又有 \(f'(0)=0\),链式法则给出

\[ (f\circ g)'(0)=0. \]

直接核验也成立:

\[ \left|\frac{f(g(h))-f(g(0))}h\right| =|h^3\sin^2(1/h)|\le|h|^3\to0. \]

另一方面,当 \(h=1/(n\pi)\) 时,\(h\to0\)\(g(h)=g(0)=0\)。因此“先除以 \(g(h)-g(0)\)”的证明在无穷多个任意靠近零的步长上 没有定义,而余项延拓证明始终合法。

即时检验与回望

检验1:复合导数的求值点

\(F(x)=f(g(x))\),已知 \(g(2)=5\)\(g'(2)=-3\)\(f'(5)=4\),求 \(F'(2)\)

答案

链式法则要求外层导数在内层值 \(g(2)=5\) 处求值:

\[ F'(2)=f'(g(2))g'(2)=f'(5)(-3)=4(-3)=-12. \]

已知的是 \(f'(5)\),并不需要 \(f'(2)\)

检验2:为什么 \(k(h)=O(h)\)

在链式法则证明中,说明 \(k(h)=g(a+h)-g(a)=g'(a)h+o(h)\) 蕴含 \(k(h)=O(h)\)

答案

\(h\ne0\)

\[ \frac{k(h)}h=g'(a)+\frac{o(h)}h\to g'(a). \]

收敛函数在充分小的去心邻域内有界,所以存在 \(M,\delta>0\),使 \(0<|h|<\delta\)\(|k(h)|\le M|h|\)。这正是 \(k(h)=O(h)\)

习题与答案

习题1:三层复合

\[ F(x)=\bigl(1+(2x-3)^2\bigr)^5 \]

的导数,并标出三层函数。

答案

可取

\[ k(x)=2x-3,\qquad g(v)=1+v^2,\qquad f(u)=u^5. \]

因而

\[ F'(x) =5\bigl(1+(2x-3)^2\bigr)^4 \cdot2(2x-3)\cdot2, \]

\[ F'(x)=20(2x-3)\bigl(1+(2x-3)^2\bigr)^4. \]

习题2:定义域先于公式

\[ F(x)=\frac1{(x^2-1)^3}. \]

求导并写出原函数和导函数共同的定义域。

答案

原函数要求 \(x^2-1\ne0\),即 \(x\ne\pm1\)。写成 \(F(x)=(x^2-1)^{-3}\),链式法则给出

\[ F'(x)=-3(x^2-1)^{-4}\cdot2x =-\frac{6x}{(x^2-1)^4}. \]

共同定义域仍是 \(\mathbb R\setminus\{-1,1\}\);分母的四次方不会补上两个空点。

习题3:修复错误消去

有人写

\[ \frac{f(g(a+h))-f(g(a))}{h} = \frac{f(g(a+h))-f(g(a))}{g(a+h)-g(a)} \frac{g(a+h)-g(a)}h \]

并声称这对所有充分小的 \(h\ne0\) 成立。指出缺失条件,并说明本单元证明如何修复。

答案

这次乘除要求 \(g(a+h)-g(a)\ne0\),而可导性并不保证该条件。修复方法是把外层 余项写成

\[ r_f(k)=\eta(k)k,\qquad \eta(0)=0,\quad\eta(k)\to0, \]

再代入 \(k=g(a+h)-g(a)\)。这样当 \(k=0\) 时等式仍成立,证明不需要作非法消去。

习题4:绝对敏感性传递

某测量链的内层在工作点满足 \(g'(a)=0.02\ {\rm V/^\circ C}\),外层满足 \(f'(g(a))=50\ {\rm unit/V}\)。求总变化率并说明单位。

答案

由链式法则,

\[ (f\circ g)'(a)=50\cdot0.02=1. \]

单位相乘时伏特约去:

\[ ({\rm unit/V})({\rm V/^\circ C}) ={\rm unit/^\circ C}. \]

所以输入每变化 \(1^\circ{\rm C}\),输出的一阶变化约为 \(1\) 个单位。

习题5:相对敏感性乘法的条件

\(f(u)=u^3\)\(g(x)=x^2\)。在 \(x\ne0\) 时分别计算 \(S_f(g(x))\)\(S_g(x)\)\(S_{f\circ g}(x)\),核验乘法公式。

答案

\(u\ne0\)

\[ S_f(u)=\frac{u(3u^2)}{u^3}=3, \]

所以 \(S_f(g(x))=3\)。对 \(x\ne0\)

\[ S_g(x)=\frac{x(2x)}{x^2}=2. \]

\(f(g(x))=x^6\),故

\[ S_{f\circ g}(x)=\frac{x(6x^5)}{x^6}=6=3\cdot2. \]

\(x=0\) 时这些相对比值含零分母,不在该公式的适用范围内。

常见误区与后续

  1. 把链式法则写成两个差商,却不检查内层增量。 公式结论正确不代表含除零漏洞的 证明正确;余项延拓才覆盖所有充分小步长。
  2. 丢失外层导数的求值点。 \(f'\) 必须在 \(g(a)\) 处求值。
  3. 只乘“最外层”和“最内层”。 多层复合的每一层导数都必须出现。
  4. 把相对敏感性公式当作无条件结论。 它比链式法则多出若干非零要求。

下一单元把链式法则用于反函数。复合恒等式 \(f^{-1}(f(x))=x\) 暗示两个导数互为倒数,但严格证明还必须说明反函数自变量趋近时, 原函数自变量确实趋向对应点。