Суммирование с точностью до целого числа: как получить коэффициенты? - PullRequest
2 голосов
/ 16 мая 2011

Это пример.Я хочу знать, есть ли общий способ решения подобных проблем.

Предположим, у меня есть функция (a ε ℜ):

f[a_, n_Integer, m_Integer] := Sum[a^i k[i],{i,0,n}]^m  

enter image description here

И мне нужна замкнутая форма для коэффициента a ^ p.Как лучше поступить?

Примечание 1 : в данном конкретном случае можно вручную попытаться представить сумму через Multinomial[ ], но, кажется, сложно записать многочленные терминыдля переменного числа аргументов, и кроме того, я хочу, чтобы Mma сделала это.

Примечание 2 : Конечно

 Collect[f[a, 3, 4], a]  

Подойдет, но только для данного 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}])];

Так, например,

f[2,3]    

- это куб бинома

x[1]^3+ 3 x[1]^2 x[2]+ 3 x[1] x[2]^2+ x[2]^3

1 Ответ

5 голосов
/ 16 мая 2011

Коэффициент на 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]) *)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...