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)
会这样做,但仅限于给定m
和n
.
注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)
系数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这里列出将用于符号订单的工作方法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]) *)
Run Code Online (Sandbox Code Playgroud)