一元版:h=f∘uh=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:Rn→Rf:\mathbb R^n\to\mathbb R 有 nn 个输入,内层 u:R→Rnu:\mathbb R\to\mathbb R^n 给出这 nn 个输入随 tt 的变化。tt 变一点,ff 的变化来自 nn 条路径,每条贡献“ff 对该输入的偏导 ×\times 该输入对 tt 的导数“,全部加起来:
dtdf(u1(t),…,un(t))=i=1∑n∂xi∂f(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,把 nn 个 ui′u_i' 拼成向量 u′u',这个和就是内积 ∇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=f∘uh=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,两个线性映射复合 |
| 多元套一元(本页的 f∘uf\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),θ,d∈Rn\theta,d\in\mathbb R^n 固定。外层和内层分别是谁?
- 外层 u(t)=θ+tdu(t)=\theta+td,内层 ff
- 外层 ff,内层 u(t)=θ+tdu(t)=\theta+td
- 外层 ff,内层 tt
- 没有复合,φ\varphi 就是 ff
解析
先算的是内层:给定 tt,先得到向量 θ+td\theta+td;再把它喂给 ff。所以 φ=f∘u\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)),一元链式法则是哪一个?
- h′(t)=f′(u(t))⋅u′(t)h'(t)=f'(u(t))\cdot u'(t)
- h′(t)=f′(t)⋅u′(t)h'(t)=f'(t)\cdot u'(t)
- h′(t)=f′(u′(t))h'(t)=f'(u'(t))
- h′(t)=f′(u(t))h'(t)=f'(u(t))
解析
外层导数 f′f' 要在内层的取值 u(t)u(t) 处求,再乘内层导数。B 把 f′f' 在 tt 处取值,是最常见的错;C 把导数当成了函数复合;D 漏了内层导数。
4. 一元数值题
f(x)=x2f(x)=x^{2},u(t)=3tu(t)=3t,h=f∘uh=f\circ u。h′(t)h'(t) 等于?
- 6t6t
- 9t29t^{2}
- 18t18t
- 2t2t
解析
f′(x)=2xf'(x)=2x,在 u(t)=3tu(t)=3t 处是 2⋅3t=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 的人把 f′f' 在 tt 处取值(2t⋅32t\cdot3);选 B 的人求了 hh 没求导。
5. 为什么多元版本有 ∑\sum
ff 有 nn 个输入,u(t)u(t) 给出它们随 tt 的变化。dtdf(u(t))\frac{d}{dt}f(u(t)) 为什么是一个和?
- 因为要对 tt 从 0 积到 1
- 因为 tt 变一点会让 nn 个输入都变,每个输入各自引起 ff 的一份变化,总变化是它们的和
- 因为偏导数的定义就是求和
- 因为 uu 是向量,向量求导要求和
解析
一阶下各路径的贡献可以叠加:Δf≈∑i∂xi∂fΔui\Delta f\approx\sum_i\frac{\partial f}{\partial x_i}\Delta u_i,而 Δui≈ui′Δt\Delta u_i\approx u_i'\,\Delta t。除以 Δt\Delta t 就是链式法则。D 反了:向量求导是逐分量求,不求和;求和来自外层 ff 把 nn 个输入压成一个输出。
6. 多元版本的形状
ui(t)=θi+tdiu_i(t)=\theta_i+td_i,φ(t)=f(u(t))\varphi(t)=f(u(t))。φ′(t)\varphi'(t) 是哪一个?
- ∑i∂xi∂f(θ)di\sum_i\frac{\partial f}{\partial x_i}(\theta)\,d_i
- ∂xi∂f(θ+td)di\frac{\partial f}{\partial x_i}(\theta+td)\,d_i
- ∑i∂xi∂f(θ+td)di\sum_i\frac{\partial f}{\partial x_i}(\theta+td)\,d_i
- ∑i∂xi∂f(θ+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=0 时 u(0)=θu(0)=\theta,偏导全部在 θ\theta 处取值,∑i∂xi∂f(θ)di=∇f(θ)⊤d=g⊤d\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,2−t)u(t)=(1+t,\;2-t),h=f∘uh=f\circ u。用链式法则算 h′(0)h'(0)。
解析
∂x∂f=2x\frac{\partial f}{\partial x}=2x,在 u(0)=(1,2)u(0)=(1,2) 处是 2;∂y∂f=3\frac{\partial f}{\partial y}=3。u′(t)=(1,−1)u'(t)=(1,-1)。h′(0)=2⋅1+3⋅(−1)=−1h'(0)=2\cdot1+3\cdot(-1)=-1。验算:h(t)=(1+t)2+3(2−t)=t2−t+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)。
解析
∂x∂f=y\frac{\partial f}{\partial x}=y,∂y∂f=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)=1⋅1+1⋅2=3h'(1)=1\cdot1+1\cdot2=3。验算:h(t)=t⋅t2=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:Rn→Rmf:\mathbb R^n\to\mathbb R^m,内层 u:R→Rnu:\mathbb R\to\mathbb R^n。(f∘u)′(t)=Jf(u(t))u′(t)(f\circ u)'(t)=J_f(u(t))\,u'(t),其中 JfJ_f 是 Jacobian。三个东西的形状依次是?
- JfJ_f 是 m×nm\times n,u′(t)u'(t) 是 n×1n\times1,乘积 m×1m\times1
- JfJ_f 是 n×mn\times m,u′(t)u'(t) 是 1×n1\times n,乘积 1×m1\times m
- JfJ_f 是 n×nn\times n,u′(t)u'(t) 是 n×1n\times1,乘积 n×1n\times1
- JfJ_f 是 m×nm\times n,u′(t)u'(t) 是 1×n1\times n,乘不了
解析
Jacobian 每行是一个输出对 nn 个输入的偏导,mm 个输出就 mm 行,所以 m×nm\times n。u′(t)u'(t) 是 nn 维列向量。乘积 m×1m\times1,正好是 f∘u:R→Rmf\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 的导数该用哪个定理?
HasDerivAt.comp,结论是两个数相乘
HasFDerivAt.comp,结论是两个线性映射复合
HasFDerivAt.comp_hasDerivAt,结论是 HasDerivAt (f ∘ u) (f' u') t
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)?
- cost⋅2t\cos t\cdot2t
- cos(t2)⋅2t\cos(t^{2})\cdot2t
- cos(2t)\cos(2t)
- sin(2t)\sin(2t)
解析
外层导数 cos\cos 要在内层取值 t2t^{2} 处求,再乘内层导数 2t2t。A 是把 cos\cos 在 tt 处取值,和第 4 题选 6t6t 是同一个错。C 把内层导数塞进了外层导数的括号里。