cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

A264428 Triangle read by rows, Bell transform of Bell numbers.

Original entry on oeis.org

1, 0, 1, 0, 1, 1, 0, 2, 3, 1, 0, 5, 11, 6, 1, 0, 15, 45, 35, 10, 1, 0, 52, 205, 210, 85, 15, 1, 0, 203, 1029, 1330, 700, 175, 21, 1, 0, 877, 5635, 8946, 5845, 1890, 322, 28, 1, 0, 4140, 33387, 63917, 50358, 20055, 4410, 546, 36, 1, 0, 21147, 212535, 484140, 450905, 214515, 57855, 9240, 870, 45, 1
Offset: 0

Views

Author

Peter Luschny, Nov 13 2015

Keywords

Comments

Consider the sequence S0 -> T0 -> S1 -> T1 -> S2 -> T2 -> ... Here Sn -> Tn indicates the Bell transform mapping a sequence Sn to a triangle Tn as defined in the link and Tn -> S{n+1} the operator associating a triangle with the sequence of its row sums. If
S0 = A000012 = <1,1,1,...> then
T0 = A048993 # Stirling subset numbers,
S1 = A000110 # Bell numbers,
T1 = A264428 # Bell transform of Bell numbers,
S2 = A187761 # second-order Bell numbers,
T2 = A264430 # Bell transform of second-order Bell numbers,
S3 = A264432 # third-order Bell numbers.
This construction is closely related to permutations trees and A179455. Sn is A179455_col(n+1) prepended by A179455_diag(k) = k! for k <= n. In other words, Sn 'converges' to n! for n -> oo.
Given a sequence (s(n))n>=0 with s(0) = 0 and with e.g.f. B(x) = Sum_{n >= 1} s(n)*x^n/n!, then the Bell matrix associated with s(n) equals the exponential Riordan array [1, B(x)] belonging to the Lagrange subgroup of the exponential Riordan group. Omitting the first row and column from the Bell matrix produces the exponential Riordan array [d/dx(B(x)), B(x)] belonging to the Derivative subgroup of the exponential Riordan group. - Peter Bala, Jun 07 2016

Examples

			Triangle starts:
[1]
[0,   1]
[0,   1,    1]
[0,   2,    3,    1]
[0,   5,   11,    6,    1]
[0,  15,   45,   35,   10,    1]
[0,  52,  205,  210,   85,   15,   1]
[0, 203, 1029, 1330,  700,  175,  21,  1]
[0, 877, 5635, 8946, 5845, 1890, 322, 28, 1]
		

Crossrefs

Programs

  • Maple
    # Computes sequence in matrix form.
    BellMatrix := proc(f, len) local T, A; A := [seq(f(n), n=0..len-2)];
    T := proc(n, k) option remember; if k=0 then k^n else
    add(binomial(n-1,j-1)*T(n-j,k-1)*A[j], j=1..n-k+1) fi end;
    Matrix(len, (n,k)->T(n-1,k-1), shape=triangular[lower]) end:
    BellMatrix(n -> combinat:-bell(n), 9); # Peter Luschny, Jan 21 2016
    # Alternative, using the recurrence of Peter Bala:
    R := proc(n) option remember; if n = 0 then 1 else
    t*add(binomial(n-1,k)*combinat:-bell(k)*R(n-k-1,t),k=0..n-1) fi end:
    T_row := n-> seq(coeff(R(n), t, k), k=0..n):
    seq(print(T_row(n)),n=0..8); # Peter Luschny, Jun 09 2016
  • Mathematica
    BellMatrix[f_Function|f_Symbol, len_] := With[{t = Array[f, len, 0]}, Table[BellY[n, k, t], {n, 0, len-1}, {k, 0, len-1}]];
    rows = 11;
    M = BellMatrix[BellB, rows];
    Table[M[[n, k]], {n, 1, rows}, {k, 1, n}] // Flatten (* Jean-François Alcover, Jan 21 2016, updated Jul 14 2018 *)
    With[{r = 8}, Flatten[Table[BellY[n, k, BellB[Range[0, r]]], {n, 0, r}, {k, 0, n}]]] (* Jan Mangaldan, May 22 2016 *)
  • PARI
    bell_matrix(f, len) = { my( m = matrix(len, len) );  m[1, 1] = 1;
      for( n = 1, len-1, m[n+1, 2] = f(n-1) );
      for( n = 0, len-1, for( k = 1, n,
         m[n+1, k+1] = sum(j = 1, n-k+1, binomial(n-1,j-1)*m[n-j+1,k]*m[j+1,2]) ));
      return( m )
    }
    f(n) = polcoeff( sum( k=0, n, prod( i=1, k, x / (1 - i*x)), x^n * O(x)), n);
    bell_matrix(f, 9) \\ Peter Luschny, Jan 24 2016
    
  • Python
    from functools import cache
    from math import comb as binomial
    def BellMatrix(f, size):
        A = [f(n) for n in range(size - 1)]
        @cache
        def T(n, k):
            if k == 0: return k ** n
            return sum(
                binomial(n - 1, j) * T(n - j - 1, k - 1) * A[j]
                for j in range(n - k + 1) )
        return [[T(n, k) for k in range(n + 1)] for n in range(size)]
    @cache
    def b(n, k=0): return n < 1 or k*b(n-1, k) + b(n-1, k+1)
    print(BellMatrix(b, 9))  # Peter Luschny, Jun 14 2022
  • Sage
    # The functions below are referenced in various other sequences.
    def bell_transform(n, a): # partition_based
        row = []
        fn = factorial(n)
        for k in (0..n):
            result = 0
            for p in Partitions(n, length=k):
                factorial_product = 1
                power_factorial_product = 1
                for part, count in p.to_exp_dict().items():
                    factorial_product *= factorial(count)
                    power_factorial_product *= factorial(part)**count
                coefficient = fn//(factorial_product*power_factorial_product)
                result += coefficient*prod([a[i-1] for i in p])
            row.append(result)
        return row
    def bell_matrix(generator, dim):
        G = [generator(k) for k in srange(dim)]
        row = lambda n: bell_transform(n, G)
        return matrix(ZZ, [row(n)+[0]*(dim-n-1) for n in srange(dim)])
    def inverse_bell_matrix(generator, dim):
        G = [generator(k) for k in srange(dim)]
        row = lambda n: bell_transform(n, G)
        M = matrix(ZZ, [row(n)+[0]*(dim-n-1) for n in srange(dim)]).inverse()
        return matrix(ZZ, dim, lambda n,k: (-1)^(n-k)*M[n,k])
    bell_numbers = [sum(bell_transform(n, [1]*10)) for n in range(11)]
    for n in range(11): print(bell_transform(n, bell_numbers))
    

Formula

From Peter Bala, Jun 07 2016: (Start)
E.g.f.: exp(t*B(x)), where B(x) = Integral_{u = 0..x} exp(exp(u) - 1) du = x + x^2/2! + 2*x^3/3! + 5*x^4/4! + 15*x^5/5! + 52*x^6/6! + ....
Row polynomial recurrence: R(n+1,t) = t*Sum_{k = 0 ..n} binomial(n,k)*Bell(k)* R(n-k,t) with R(0,t) = 1. (End)