OFFSET
0,3
COMMENTS
The multivariate partial Bell polynomials as defined for example by L. Comtet, Advanced Combinatorics, depend on the variables x_1, x_2, ... Here we add a variable x_0 to cover the case of the first column (k=0) in the lower triangular matrix of the coefficients of the polynomials in a systematic way. The Bell polynomial is defined in the usual way as the row sum of the partial Bell polynomials and the univariate Bell polynomial as the Bell polynomial with all x_n set to the same variable x. We call these polynomials the x0-based univariate Bell polynomials. The classical univariate Bell polynomials are obtained by substituting x_0 = 0 prior to collapsing the x_n to one variable. In this case the coefficients of the polynomials are the Stirling subset numbers. The triangle given here are the coefficients of the polynomials in the general case.
REFERENCES
L. Comtet, Advanced Combinatorics, Reidel, 1974, p. 135.
LINKS
Peter Luschny, The Bell Transform
FORMULA
Row sums are Bell(n)*(2-0^n) = A186021(n).
EXAMPLE
The triangle starts:
[1]
[0, 2]
[0, 1, 3]
[0, 1, 5, 4]
[0, 1, 10, 14, 5]
[0, 1, 19, 48, 30, 6]
[0, 1, 36, 149, 158, 55, 7]
MAPLE
T_row := proc(n) local T; T := proc(n, k) option remember; if k = 0 then x^n else add(binomial(n-1, j-1)*T(n-j, k-1)*x, j=0..n-k+1) fi end; PolynomialTools:-CoefficientList(add(T(n, k), k=0..n), x) end: seq(print(T_row(n)), n=0..6);
MATHEMATICA
T[n_, k_] := T[n, k] = If[k==0, x^n, Sum[Binomial[n-1, j-1]*T[n-j, k-1]*x, {j, 0, n-k+1}]]; row[n_] := CoefficientList[Sum[T[n, k], {k, 0, n}], x]; Table[row[n], {n, 0, 10}] // Flatten (* Jean-François Alcover, Jan 20 2016, adapted from Maple *)
PROG
(Sage)
def partial_bell_polynomial(n, k):
X = var(['x_'+str(i) for i in (0..n+1)])
@cached_function
def T(n, k):
if k==0: return X[0]^n
return sum(binomial(n-1, j-1)*X[j]*T(n-j, k-1) for j in (0..n-k+1))
return T(n, k).expand()
def univariate_bell_polynomial(n): # for comparison only
p = sum(partial_bell_polynomial(n, k) for k in (0..n)).subs(x_0=0)
q = p({p.variables()[i]:x for i in range(len(p.variables()))})
R = PolynomialRing(QQ, 'x')
return R(q)
def x0_based_univariate_bell_polynomial(n):
p = sum(partial_bell_polynomial(n, k) for k in (0..n))
q = p({p.variables()[i]:x for i in range(len(p.variables()))})
R = PolynomialRing(QQ, 'x')
return R(q)
for n in (0..6): x0_based_univariate_bell_polynomial(n).list()
CROSSREFS
KEYWORD
AUTHOR
Peter Luschny, May 10 2015
STATUS
approved