QiuQiu

练习 · 微积分

链式法则

复合函数怎么求导:先认出外层和内层,再把两个导数按规则合起来。一元、多元、以及 φ(t)=f(θ+td) 这个最常用的形状。

12 题

一元版:h=fuh=f\circ u,即 h(t)=f(u(t))h(t)=f(u(t)),则

h(t)=f(u(t))u(t)h'(t)=f'\big(u(t)\big)\cdot u'(t)

“外层导数在内层取值处”乘“内层导数”。最常见的错是把外层导数在 tt 处取值,而不是在 u(t)u(t) 处。

多元版:外层 f:RnRf:\mathbb R^n\to\mathbb Rnn 个输入,内层 u:RRnu:\mathbb R\to\mathbb R^n 给出这 nn 个输入随 tt 的变化。tt 变一点,ff 的变化来自 nn 条路径,每条贡献“ff 对该输入的偏导 ×\times 该输入对 tt 的导数“,全部加起来:

ddtf(u1(t),,un(t))=i=1nfxi(u(t))ui(t)\frac{d}{dt}f\big(u_1(t),\dots,u_n(t)\big)=\sum_{i=1}^{n}\frac{\partial f}{\partial x_i}\big(u(t)\big)\cdot u_i'(t)

\partial 出现是因为 ff 多元,只能求偏导;\sum 出现是因为 nn 条路径各贡献一份。把 nn 个偏导拼成梯度向量 f\nabla f,把 nnuiu_i' 拼成向量 uu',这个和就是内积 f(u(t))u(t)\nabla f(u(t))^{\top}u'(t)

类型

记号 类型 说明
uu ℝ → EuclideanSpace ℝ (Fin n) 内层,一条参数曲线
u(t)u'(t) EuclideanSpace ℝ (Fin n) 曲线的速度向量,deriv u t
ff EuclideanSpace ℝ (Fin n) → ℝ 外层
Df(u(t))Df(u(t)) EuclideanSpace ℝ (Fin n) →L[ℝ] ℝ 外层在内层取值处的导数,fderiv ℝ f (u t)
h=fuh=f\circ u ℝ → ℝ 复合结果,一元函数
h(t)h'(t) deriv (f ∘ u) t,等于 Df(u(t))[u(t)]Df(u(t))[u'(t)]

Mathlib 里的三个版本

情形 定理 结论
一元套一元 HasDerivAt.comp HasDerivAt (h₂ ∘ h) (h₂' * h') x,两个数相乘
多元套多元 HasFDerivAt.comp HasFDerivAt (g ∘ f) (g'.comp f') x,两个线性映射复合
多元套一元(本页的 fuf\circ u) HasFDerivAt.comp_hasDerivAt HasDerivAt (f ∘ u) (f' u') t,线性映射作用在速度向量上

三个版本只有一个抽象操作:外层导数作用在内层导数上。\partial\sum 是这个操作在标准基下展开成坐标的样子,Mathlib 很少展开到那一层。

相关阅读:Calculus - Descent Direction

题目

1. 认出外层和内层

φ(t)=f(θ+td)\varphi(t)=f(\theta+td),θ,dRn\theta,d\in\mathbb R^n 固定。外层和内层分别是谁?

  1. 外层 u(t)=θ+tdu(t)=\theta+td,内层 ff
  2. 外层 ff,内层 u(t)=θ+tdu(t)=\theta+td
  3. 外层 ff,内层 tt
  4. 没有复合,φ\varphi 就是 ff
解析

先算的是内层:给定 tt,先得到向量 θ+td\theta+td;再把它喂给 ff。所以 φ=fu\varphi=f\circ u,u(t)=θ+tdu(t)=\theta+td。C 的错在 tt 是自变量不是函数;D 的错在 φ\varphi 的输入是数,ff 的输入是向量,类型都不同。

2. 内层的导数

u(t)=θ+tdu(t)=\theta+td,写出 u(t)u'(t)

解析

ii 个分量 ui(t)=θi+tdiu_i(t)=\theta_i+td_i,对 tt 求导是 did_i,拼起来 u(t)=du'(t)=d。它不随 tt 变:沿直线走,速度恒定。

3. 一元版本的形状

h(t)=f(u(t))h(t)=f(u(t)),一元链式法则是哪一个?

  1. h(t)=f(u(t))u(t)h'(t)=f'(u(t))\cdot u'(t)
  2. h(t)=f(t)u(t)h'(t)=f'(t)\cdot u'(t)
  3. h(t)=f(u(t))h'(t)=f'(u'(t))
  4. h(t)=f(u(t))h'(t)=f'(u(t))
解析

外层导数 ff' 要在内层的取值 u(t)u(t) 处求,再乘内层导数。B 把 ff'tt 处取值,是最常见的错;C 把导数当成了函数复合;D 漏了内层导数。

4. 一元数值题

f(x)=x2f(x)=x^{2},u(t)=3tu(t)=3t,h=fuh=f\circ uh(t)h'(t) 等于?

  1. 6t6t
  2. 9t29t^{2}
  3. 18t18t
  4. 2t2t
解析

f(x)=2xf'(x)=2x,在 u(t)=3tu(t)=3t 处是 23t=6t2\cdot3t=6t;乘内层导数 u(t)=3u'(t)=3,得 18t18t。验算:h(t)=(3t)2=9t2h(t)=(3t)^{2}=9t^{2},h(t)=18th'(t)=18t。选 A 的人把 ff'tt 处取值(2t32t\cdot3);选 B 的人求了 hh 没求导。

5. 为什么多元版本有 \sum

ffnn 个输入,u(t)u(t) 给出它们随 tt 的变化。ddtf(u(t))\frac{d}{dt}f(u(t)) 为什么是一个和?

  1. 因为要对 tt 从 0 积到 1
  2. 因为 tt 变一点会让 nn 个输入都变,每个输入各自引起 ff 的一份变化,总变化是它们的和
  3. 因为偏导数的定义就是求和
  4. 因为 uu 是向量,向量求导要求和
解析

一阶下各路径的贡献可以叠加:ΔfifxiΔui\Delta f\approx\sum_i\frac{\partial f}{\partial x_i}\Delta u_i,而 ΔuiuiΔt\Delta u_i\approx u_i'\,\Delta t。除以 Δt\Delta t 就是链式法则。D 反了:向量求导是逐分量求,不求和;求和来自外层 ffnn 个输入压成一个输出。

6. 多元版本的形状

ui(t)=θi+tdiu_i(t)=\theta_i+td_i,φ(t)=f(u(t))\varphi(t)=f(u(t))φ(t)\varphi'(t) 是哪一个?

  1. ifxi(θ)di\sum_i\frac{\partial f}{\partial x_i}(\theta)\,d_i
  2. fxi(θ+td)di\frac{\partial f}{\partial x_i}(\theta+td)\,d_i
  3. ifxi(θ+td)di\sum_i\frac{\partial f}{\partial x_i}(\theta+td)\,d_i
  4. ifxi(θ+td)di2\sum_i\frac{\partial f}{\partial x_i}(\theta+td)\,d_i^{2}
解析

外层偏导要在内层取值 u(t)=θ+tdu(t)=\theta+td 处求(A 错在固定在 θ\theta,那只对 t=0t=0 成立);要对 ii 求和(B 漏了);每条路径乘的是 ui=diu_i'=d_i,一次(D 多乘了一次)。

7. 代 t=0t=0

第 6 题的 φ(t)\varphi'(t)t=0t=0 处等于?用 g=f(θ)g=\nabla f(\theta)dd 写。

解析

t=0t=0u(0)=θu(0)=\theta,偏导全部在 θ\theta 处取值,ifxi(θ)di=f(θ)d=gd\sum_i\frac{\partial f}{\partial x_i}(\theta)\,d_i=\nabla f(\theta)^{\top}d=g^{\top}d。这就是一阶 Taylor 那组里 φ(0)\varphi'(0) 的来历。

8. 多元数值题 (一)

f(x,y)=x2+3yf(x,y)=x^{2}+3y,u(t)=(1+t,  2t)u(t)=(1+t,\;2-t),h=fuh=f\circ u。用链式法则算 h(0)h'(0)

解析

fx=2x\frac{\partial f}{\partial x}=2x,在 u(0)=(1,2)u(0)=(1,2) 处是 2;fy=3\frac{\partial f}{\partial y}=3u(t)=(1,1)u'(t)=(1,-1)h(0)=21+3(1)=1h'(0)=2\cdot1+3\cdot(-1)=-1。验算:h(t)=(1+t)2+3(2t)=t2t+7h(t)=(1+t)^{2}+3(2-t)=t^{2}-t+7,h(0)=1h'(0)=-1

9. 多元数值题 (二)

f(x,y)=xyf(x,y)=xy,u(t)=(t,  t2)u(t)=(t,\;t^{2})。用链式法则算 h(1)h'(1)

解析

fx=y\frac{\partial f}{\partial x}=y,fy=x\frac{\partial f}{\partial y}=x,在 u(1)=(1,1)u(1)=(1,1) 处都是 1。u(t)=(1,2t)u'(t)=(1,2t),在 t=1t=1(1,2)(1,2)h(1)=11+12=3h'(1)=1\cdot1+1\cdot2=3。验算:h(t)=tt2=t3h(t)=t\cdot t^{2}=t^{3},h(1)=3h'(1)=3。注意偏导要在 u(1)=(1,1)u(1)=(1,1) 处取值,不是在 t=1t=1 处直接代 x=y=1x=y=1 碰巧一样;换 t=2t=2 就是 (2,4)(2,4) 了。

10. 形状检查

外层 f:RnRmf:\mathbb R^n\to\mathbb R^m,内层 u:RRnu:\mathbb R\to\mathbb R^n(fu)(t)=Jf(u(t))u(t)(f\circ u)'(t)=J_f(u(t))\,u'(t),其中 JfJ_f 是 Jacobian。三个东西的形状依次是?

  1. JfJ_fm×nm\times n,u(t)u'(t)n×1n\times1,乘积 m×1m\times1
  2. JfJ_fn×mn\times m,u(t)u'(t)1×n1\times n,乘积 1×m1\times m
  3. JfJ_fn×nn\times n,u(t)u'(t)n×1n\times1,乘积 n×1n\times1
  4. JfJ_fm×nm\times n,u(t)u'(t)1×n1\times n,乘不了
解析

Jacobian 每行是一个输出对 nn 个输入的偏导,mm 个输出就 mm 行,所以 m×nm\times nu(t)u'(t)nn 维列向量。乘积 m×1m\times1,正好是 fu:RRmf\circ u:\mathbb R\to\mathbb R^m 的导数该有的形状。本页的情形是 m=1m=1,Jacobian 退化成一行,就是 f\nabla f^{\top}。这和矩阵乘法“中间维度相消”是同一件事。

11. Mathlib 里用哪一条

φ(t)=f(θ+td)\varphi(t)=f(\theta+td),外层 ff 多元、内层 uu 一元。证 φ\varphi 的导数该用哪个定理?

  1. HasDerivAt.comp,结论是两个数相乘
  2. HasFDerivAt.comp,结论是两个线性映射复合
  3. HasFDerivAt.comp_hasDerivAt,结论是 HasDerivAt (f ∘ u) (f' u') t
  4. Finset.sum_comm
解析

内层 HasDerivAt u u' t 是一元导数(u' 是向量 dd),外层 HasFDerivAt f f' (u t) 是 Fréchet 导数(f' 是线性映射)。混合情形专门有一条 HasFDerivAt.comp_hasDerivAt,结论里 f' u' 就是线性映射作用在速度向量上,即 Df(u(t))[d]Df(u(t))[d]。A 要求外层也是一元;B 要求内层也是多元;D 是求和换序,和这里无关。

12. 最常见的错

f(x)=sinxf(x)=\sin x,u(t)=t2u(t)=t^{2}。下面哪个是 h(t)h'(t)?

  1. cost2t\cos t\cdot2t
  2. cos(t2)2t\cos(t^{2})\cdot2t
  3. cos(2t)\cos(2t)
  4. sin(2t)\sin(2t)
解析

外层导数 cos\cos 要在内层取值 t2t^{2} 处求,再乘内层导数 2t2t。A 是把 cos\costt 处取值,和第 4 题选 6t6t 是同一个错。C 把内层导数塞进了外层导数的括号里。