Each of following functions is much faster (?) than other versions:
chsf1[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
ToExpression[StringJoin @@ Array["Table[{i" <> ToString[##
] <> ", "&, Length @ vars - 1] <> "{{" <> ToString[k] <> " - (" <> ToString[
(Sum["i" <> ToString[j], {j, Length @ vars - 1}])] <> "), 1}}" <> StringJoin
@@ Table["}, {" <> "i" <> ToString[j] <> ", " <> ToString[k - Sum["i"
<> ToString[l], {l, j - 1}]] <> ", 0, -1}]", {j, Length @ vars - 1,
1, -1}], InputForm, Curry[Algebra`Polynomial`FromNestedTermsList][vars
]]
]
chsf2[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
Plus @@ Times @@@ Thread[vars ^ FrobeniusSolve[1 ~ ConstantArray
~ Length @ vars, k]\[Transpose]]
]
chsf3[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
Inner[Power, vars, FrobeniusSolve[1 ~ ConstantArray ~ Length
@ vars, k]\[Transpose], Times] // Total
]
chsf4[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
GroebnerBasis`FromDistributedTermsList[{Append[1] /@ ({FrobeniusSolve[
1 ~ ConstantArray ~ Length @ vars, k]}\[Transpose]), vars}]
]
chsf5[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
FromCoefficientRules[Thread[FrobeniusSolve[1 ~ ConstantArray
~ Length @ vars, k] -> 1], vars]
]
Unfortunately, rather inefficient implementations exist as well:
chsf6[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
Internal`FromCoefficientList[SparseArray[FrobeniusSolve[1
~ ConstantArray ~ Length @ vars, k] + 1 -> 1] // Normal, vars]
]
chsf7[k_ ? (# \[Element] NonNegativeIntegers&), vars_?VectorQ] :=
Which[
vars === {},
Nothing
,
k == 0,
1
,
True,
Fold[Dot, SparseArray[n : {_ ~ RepeatedNull ~ {k}} /; LessEqual
@@ n :> 1, Length @ vars ~ ConstantArray ~ k], vars ~ ConstantArray ~
k]
]
Times[Sequence @@ vars]withTimes @@ vars. – Mr.Wizard Jun 09 '12 at 15:21Plus @@ stuffis more compactly written asTotal[stuff]. – J. M.'s missing motivation Jun 09 '12 at 15:33completeSymmetricPolynomial[0, {a, b, c, d}]– Osiris Xu Jun 12 '12 at 21:44completeSymmetricPolynomial[0, vars_List] = 1;before the general definition. – J. M.'s missing motivation Jun 16 '12 at 15:37