# sums over partitions and sums with variable indices

Is there neat way to implement following sums in mathematica? $$s(l,k)=\sum\limits_{p_1+p_2+...+p_l=k} f_l(p_1,p_2,...,p_l)$$ and $$t(l)=\sum\limits_{i_1,i_2,...,i_l=1}^n f_l(i_1,i_2,...,i_l)$$ Where $p_1,...,p_l\geq1$ ($p_1,...p_l\in\mathbb N$) and $l\in\mathbb N$ isn't fixed?

It seems I could use IntegerPartitions{k,{l}}, but this doesn't really seem neat! I'm also having trouble with implementing the 2nd sum, as $l$ is variable.

• I think I can get it running with IntegerPartitions. Still I want to ask how to implement $t(l)$ in a nice way? – user40804 Jun 6 '16 at 12:49
• FrobeniusSolve[] may be more expedient than IntegerPartitions[] in your first sum, if only a little slower. For your second: Sum[f @@ Array[K, l], ##] & @@ Transpose[PadRight[{Array[K, l]}, {2, Automatic}, n]] is an obvious solution, but there might be more efficient ones, more so if your $f_l$ has symmetry of some sort. – J. M. is in limbo Jun 6 '16 at 13:52
• Ok, I'll stick with IntegerPartitions for now, but I guess I can use FrobeniusSolve for more general sums! Thanks for the comment anyways! – user40804 Jun 6 '16 at 14:02

Three ways of computing t[l]:

Using Sum:

Sum[ f @@ Table[i[j], {j, l}], ##] & @@ Table[{i[j], n}, {j, l}]


Generating all index lists:

Total[f @@@ Tuples[Range[n], l]]


Recursive:

rec[depth_] := If[depth == 0, f @@ Table[i[j], {j, l}], Sum[rec[depth - 1], {i[depth], n} ] ];
rec[l]

• Thanks alot! I didn't know "Tuples"! I really like this one! Looks very clean to me! I think I'll use the second one, so I can setup my f[] very easy, so the argument can be a tuple! – user40804 Jun 6 '16 at 13:59
• Hey, I've got another question: I have multiple lists (t1,t2,t3,t4) and i want to make a new list such that it contains all elements of the form {a,b,c,d} where a,b,c,d are from t1,t2,t3,t4. I figured out I could use Flatten[Table[{t1[[i]], t2[[j]]}, {i, Length[t1]}, {j, Length[t2]}], 1] (here for 2 lists) but this doesn't seem very satisfiying! Is there a better way? – user40804 Jun 6 '16 at 15:19
• Use Tuples again! See the docs. – Marius Ladegård Meyer Jun 6 '16 at 16:06
• Haha thanks again! I guess all I needed was Tuples!!! – user40804 Jun 6 '16 at 16:21