求和至变量整数:如何获得系数?

Dr.*_*ius 2 wolfram-mathematica

这是一个例子.我想知道是否有一般方法来处理这类问题.

假设我有一个函数(εℜ):

f[a_, n_Integer, m_Integer] := Sum[a^i k[i],{i,0,n}]^m  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我需要一个闭合形式的系数a ^ p.什么是更好的方法?

注1:在这种特殊情况下,人们可以手动尝试表示总和Multinomial[ ],但似乎很难写出可变数量的参数的Multinomial术语,此外,我希望Mma能够做到这一点.

注2:当然

 Collect[f[a, 3, 4], a]  
Run Code Online (Sandbox Code Playgroud)

会这样做,但仅限于给定mn.

注3:这个问题与另一个问题有关.我的申请是不同的,但可能适用相同的方法.因此,您可以随意回答这两个问题.

注4:

您可以使用以下函数对多项式定理建模:

f[n_, m_] := 
  Sum[KroneckerDelta[m - Sum[r[i], {i, n}]] 
   (Multinomial @@ Sequence@Array[r, n]) 
     Product[x[i]^r[i], {i, n}], 
  Evaluate@(Sequence @@ Table[{r[i], 0, m}, {i, 1, n}])];
Run Code Online (Sandbox Code Playgroud)

所以,例如

f[2,3]    
Run Code Online (Sandbox Code Playgroud)

是二项式的立方体

x[1]^3+ 3 x[1]^2 x[2]+ 3 x[1] x[2]^2+ x[2]^3
Run Code Online (Sandbox Code Playgroud)

Sas*_*sha 5

系数by 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!
Run Code Online (Sandbox Code Playgroud)

这也称为广义Bell多项式,请参阅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
*)  
Run Code Online (Sandbox Code Playgroud)

这样做比计算整个表达式和提取系数在计算上更有效.


EDIT这里列出将用于符号订单的工作方法nm,但需要明确的价值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]) *)
Run Code Online (Sandbox Code Playgroud)