考虑求 $(f\circ g)^{(n)}$。
我们看几个例子: $$ \begin{align*} (f\circ g)^\prime&=f^\prime\circ g\cdot g^\prime\\ (f\circ g)^{\prime\prime}&=f^{\prime\prime}\circ g\cdot {g^\prime}^2+f’\circ g\cdot g^{\prime\prime}\\ (f\circ g)^{\prime\prime\prime}&=f^{\prime\prime\prime}\circ g\cdot {g^\prime}^3+3f^{\prime\prime}\circ g\cdot g^\prime\cdot g^{\prime\prime}+f^\prime\circ g\cdot g^{\prime\prime\prime} \end{align*} $$ 注意到结果可以写成若干 $f^{(i)}\circ g\cdot h$ 的形式,其中 $h$ 是一些 $g^{(j)}$ 的积。
考虑到 $(f^{(i)}\circ g\cdot h)^\prime=f^{(i+1)}\circ g\cdot g^\prime\cdot h+f^{(i)}\circ g\cdot h^\prime$,也就是说,有两种选择:
- 将 $f$ 升一阶导并乘一个 $g^\prime$;
- 导一下 $h$。
由于初始形式是 $f\circ g\cdot\mathbf{1}$,故根据决策会得到形如这样的 $h$:一个长为 $n$ 的操作序列,每次要么乘上一个 $g’$,要么导一下。而根据乘法法则,每次求导就相当于选一个先前的 $g$ 升一阶导。
于是 $h$ 的模型就变成这样:一个可重数集,每次要么往里面加一个 $1$,要么选一个 $+1$。然后最终的集合大小就是 $f$ 导的阶数。
发现直接对操作序列计数不好算。现考虑对于一个最终的集合(也就是结果中的一项),求出其系数。对于一个集合,它的数首先可以任意排列,代表加入它的顺序,然后一个数 $x$ 的后面要有 $x-1$ 个选中它的求导。
如果把加入顺序的排列和求导选择的排列分开来计数,不容易搞。如果放在一起,就可以理解成,对于一个数 $x$,有 $x$ 个同种颜色无法区分的球(最终放在最开头的就算加入,其余算求导)。然后所有相同的 $x$ 对应的颜色无标号。那么这时如果数 $x$ 有 $m_x$ 个(集合中数的和一定是 $n$),总的系数就是: $$ \frac{n!}{\displaystyle\prod_{x=1}^nm_x!x!^{m_x}} $$ 于是我们就可以写出最终的表达式: $$ (f\circ g)^{(n)}=\sum_{\sum i\cdot m_i=n}\frac{n!}{\prod m_i!i!^{m_i}}f^{(\sum m_i)}\circ g\cdot\prod {g^{(i)}}^{m_i} $$ 其中 $\sum$ 和 $\prod$ 略去了 ${}_{i=1}^n$。
这就是 Faà di Bruno’s formula。它可以直接解决倒数、除法的高阶导(反函数和参数方程可能需要递推)。
这个公式可以导出几个比较平凡的结论,在解题时可以用: $$ (f(x+k))^{(n)}=f^{(n)}(x+k)\\ (f(kx))^{(n)}=k^nf^{(n)}(kx)\\ \left.\left(f(x^k)\right)^{(n)}\right|_{x=0}=\begin{cases}0,&k\nmid n\\ \dfrac{n!}{(n/k)!}f^{(n/k)}(0),&k\mid n\end{cases} $$ 最后一个可以直接展开级数证(很诡异),用于展开 $\arcsin x$ 之类的。