OFFSET
0,9
COMMENTS
This is the second triangle in a sequence of Narayana triangles. The first is A090181, whose n-th row is a refinement of Catalan(n), whereas here the n-th row of T is a refinement of 2*Catalan(n-1). We can show that T(n, k) <= A090181(n, k) for all n, k. The third triangle in this sequence is A353279, where also a recurrence for the general case is given.
Here we give a recurrence for the row polynomials, which correspond to the recurrence of the classical Narayana polynomials combinatorially proved by Sulanke (see link).
The polynomials have only real zeros and form a Sturm sequence. This follows from the recurrence along the lines given in the Chen et al. paper.
Some interesting sequences turn out to be the evaluation of the polynomial sequence at a fixed point (see the cross-references), for example the reversion of the Jacobsthal numbers A001045 essentially is -(-2)^n*P(n, -1/2).
The polynomials can also be represented as the difference between generalized Narayana polynomials, see the formula section.
LINKS
Xi Chen, Arthur Li Bo Yang, James Jing Yu Zhao, Recurrences for Callan's Generalization of Narayana Polynomials, J. Syst. Sci. Complex (2021).
Peter Luschny, Illustration of the polynomials.
Robert A. Sulanke, The Narayana distribution, J. Statist. Plann. Inference, 2002, 101: 311-326, formula 2.
FORMULA
Explicit formula (additive form):
T(n, n) = 1, T(n > 0, 0) = 0 and otherwise T(n, k) = binomial(n, k)*binomial(n - 1, k - 1)/(n - k + 1) - 2*binomial(n - 1, k)*binomial(n - 1, k - 2)/(n - 1).
Multiplicative formula with the same boundary conditions:
T(n, k) = binomial(n, k)^2*(k*(2*k^2 + (n + 1)*(n - 2*k)))/(n^2*(n-1)*(n- k + 1)).
Bivariate generating function:
T(n, k) = [x^n] [y^k](1 - x + (1+y)*(1-x*(y-1) - sqrt((x*y+x-1)^2 - 4*x^2*y))/2).
Recursion based on polynomials:
T(n, k) = [x^k] (((2*n - 3)*(x + 1)*P(n - 1, x) - (n - 3)*(x - 1)^2*P(n - 2, x)) / n) with P(0, x) = 1, P(1, x) = x, and P(2, x) = x + x^2.
Recursion based on rows (see the second Python program):
T(n, k) = (((B(k) + B(k-1)) * (2*n - 3) - (A(k) - 2*A(k-1) + A(k-2))*(n-3))/n), where A(k) = T(n-2, k) and B(k) = T(n-1, k), for n >= 3.
Hypergeometric representation:
T(n, k) = [x^k] x*(x + 1)*hypergeom([1 - n, 2 - n], [2], x) for n >= 2.
Row sums:
Sum_{k=0..n} T(n, k) = (2/n)*binomial(2*(n - 1), n - 1) = A068875(n-1) for n >= 2.
A generalization of the Narayana polynomials is given by
N{n, k}(x) = Sum_{j=0..n-2*k}(((k + 1)/(n - k)) * binomial(n - k, j - 1) * binomial(n - k, j + k) * x^(j + k)).
EXAMPLE
Triangle starts:
[0] 1;
[1] 0, 1;
[2] 0, 1, 1;
[3] 0, 1, 2, 1;
[4] 0, 1, 4, 4, 1;
[5] 0, 1, 7, 12, 7, 1;
[6] 0, 1, 11, 30, 30, 11, 1;
[7] 0, 1, 16, 65, 100, 65, 16, 1;
[8] 0, 1, 22, 126, 280, 280, 126, 22, 1;
[9] 0, 1, 29, 224, 686, 980, 686, 224, 29, 1;
MAPLE
T := (n, k) -> if n = k then 1 elif k = 0 then 0 else
binomial(n, k)^2*(k*(2*k^2 + (n + 1)*(n - 2*k))) / (n^2*(n - 1)*(n - k + 1)) fi:
seq(seq(T(n, k), k = 0..n), n = 0..10);
# Alternative:
gf := 1 - x + (1 + y)*(1 - x*(y - 1) - sqrt((x*y + x - 1)^2 - 4*x^2*y))/2:
serx := expand(series(gf, x, 16)): coeffy := n -> coeff(serx, x, n):
seq(seq(coeff(coeffy(n), y, k), k = 0..n), n = 0..10);
# Using polynomial recurrence:
P := proc(n, x) option remember; if n < 3 then [1, x, x + x^2] [n + 1] else
((2*n - 3)*(x + 1)*P(n - 1, x) - (n - 3)*(x - 1)^2*P(n - 2, x)) / n fi end:
Trow := n -> seq(coeff(P(n, x), x, k), k = 0..n): seq(Trow(n), n = 0..10);
# Represented by generalized Narayana polynomials:
N := (n, k, x) -> add(((k+1)/(n-k))*binomial(n-k, j-1)*binomial(n-k, j+k)*x^(j+k), j=0..n-2*k): seq(print(ifelse(n=0, 1, expand(N(n, 0, x) - N(n, 1, x)))), n=0..7);
MATHEMATICA
H[0, _] := 1; H[1, x_] := x;
H[n_, x_] := x*(x + 1)*Hypergeometric2F1[1 - n, 2 - n, 2, x];
Hrow[n_] := CoefficientList[H[n, x], x]; Table[Hrow[n], {n, 0, 9}] // TableForm
PROG
(Python)
from math import comb as binomial
def T(n, k):
if k == n: return 1
if k == 0: return 0
return ((binomial(n, k)**2 * (k * (2 * k**2 + (n + 1) * (n - 2 * k))))
// (n**2 * (n - 1) * (n - k + 1)))
def Trow(n): return [T(n, k) for k in range(n + 1)]
for n in range(10): print(Trow(n))
(Python) # The recursion with cache is (much) faster:
from functools import cache
@cache
def T_row(n):
if n < 3: return ([1], [0, 1], [0, 1, 1])[n]
A = T_row(n - 2) + [0, 0]
B = T_row(n - 1) + [1]
for k in range(n - 1, 1, -1):
B[k] = (((B[k] + B[k - 1]) * (2 * n - 3)
- (A[k] - 2 * A[k - 1] + A[k - 2]) * (n - 3)) // n)
return B
for n in range(10): print(T_row(n))
CROSSREFS
Cf. A090181 and A001263 (Narayana), A353279 (case 3), A000108 (Catalan), A145596, A172392 (central terms), A000124 (subdiagonal, column 2), A115143.
KEYWORD
nonn,tabl
AUTHOR
Peter Luschny, Apr 26 2022
STATUS
approved