Коэффициент на a^k
можно рассматривать как производную порядка k
при нуле, деленной на k!
.В версии 8 есть функция BellY
, которая позволяет построить производную в точке для композиции функций из производных отдельных компонентов.В основном, для f[g[x]]
и расширения вокруг x==0
мы находим Derivative[p][Function[x,f[g[x]]][0]
как
BellY[ Table[ { Derivative[k][f][g[0]], Derivative[k][g][0]}, {k, 1, p} ] ]/p!
Это также называется обобщенным полиномом Белла, см. wiki .
В данном случае:
f[a_, n_Integer, m_Integer] := Sum[a^i k[i], {i, 0, n}]^m
With[{n = 3, m = 4, p = 7},
BellY[ Table[{FactorialPower[m, s] k[0]^(m - s),
If[s <= n, s! k[s], 0]}, {s, 1, p}]]/p!] // Distribute
(*
Out[80]= 4 k[1] k[2]^3 + 12 k[1]^2 k[2] k[3] + 12 k[0] k[2]^2 k[3] +
12 k[0] k[1] k[3]^2
*)
With[{n = 3, m = 4, p = 7}, Coefficient[f[a, n, m], a, p]]
(*
Out[81]= 4 k[1] k[2]^3 + 12 k[1]^2 k[2] k[3] + 12 k[0] k[2]^2 k[3] +
12 k[0] k[1] k[3]^2
*)
Выполнение этого способа более эффективно с точки зрения вычислений, чем построение всего выражения и извлечение коэффициентов.
РЕДАКТИРОВАНИЕ описанный здесь подход будет работать для символических порядков n
и m
, но требует явного значения для p
.При использовании именно этих обстоятельств лучше заменить If
на его Piecewise
аналог, например, Boole
:
With[{p = 2},
BellY[Table[{FactorialPower[m, s] k[0]^(m - s),
Boole[s <= n] s! k[s]}, {s, 1, p}]]/p!]
(* 1/2 (Boole[1 <= n]^2 FactorialPower[m, 2] k[0]^(-2 + m)
k[1]^2 + 2 m Boole[2 <= n] k[0]^(-1 + m) k[2]) *)