文章目录
- Bell数和Bell多项式
- 第二类Bell多项式
Bell数和Bell多项式
Bell,即所有包含 n n n个对象的有限集合的子集数之和,可通过递推式进行定义
B n = ∑ k = 0 n − 1 ( n − 1 k ) B k , B 0 = 1 B_n=\sum^{n-1}_{k=0}\begin{pmatrix} n-1\\k \end{pmatrix}B_k,\quad B_0=1 Bn=k=0∑n−1(n−1k)Bk,B0=1
其级数表达式为
B n = 1 e ∑ k = 0 ∞ k n k ! B_n=\frac{1}{e}\sum_{k=0}^\infty\frac{k^n}{k!} Bn=e1k=0∑∞k!kn
根据贝尔数可以定义贝尔多项式,
B n ( x ) = x B n = ∑ k = 0 n − 1 ( n − 1 k − 1 ) B k − 1 , B 0 ( x ) = 1 B_n(x)=xB_n=\sum^{n-1}_{k=0}\begin{pmatrix} n-1\\k-1 \end{pmatrix}B_{k-1},\quad B_0(x)=1 Bn(x)=xBn=k=0∑n−1(n−1k−1)Bk−1,B0(x)=1
在sympy中,bell(n)将返回 n n n阶Bell数 B n B_n Bn,bell(n,x)将返回 n n n阶Bell多项式 B n ( x ) B_n(x) Bn(x),示例如下
from sympy import print_latex
from sympy import bell, Symbol
[bell(n) for n in range(11)]
# [1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975]
bell(30)
# 846749014511809332450147
print_latex(bell(4, Symbol('t')))
t 4 + 6 t 3 + 7 t 2 + t t^{4} + 6 t^{3} + 7 t^{2} + t t4+6t3+7t2+t
第二类Bell多项式
第二类Bell多项式 B n , k B_{n,k} Bn,k与第一类Bell多项式有关,但更多关注的是从 n n n个不同集合中选择 k k k个集合的不同方式,其表达式为
B n , k ( x 1 , x 2 , ⋯ , x n − k + 1 ) = ∑ ∑ j i = k , ∑ i j i = n n ! ∏ i = 1 n − k + 1 j i ! ( x 1 1 ! ) j 1 ( x 2 2 ! ) j 2 ⋯ ( x n − k + 1 ( n − k + 1 ) ! ) j n B_{n,k}(x_1,x_2,\cdots,x_{n-k+1})=\sum_{\sum_{j_i}=k,\sum_{ij_i}=n}\frac{n!}{\prod^{n-k+1}_{i=1}j_i!}(\frac{x_1}{1!})^{j_1}(\frac{x_2}{2!})^{j_2}\cdots(\frac{x_{n-k+1}}{(n-k+1)!})^{j_n} Bn,k(x1,x2,⋯,xn−k+1)=∑ji=k,∑iji=n∑∏i=1n−k+1ji!n!(1!x1)j1(2!x2)j2⋯((n−k+1)!xn−k+1)jn
在sympy中,示例如下
from sympy import symbols
b = bell(6, 2, symbols('x:6')[1:])
print_latex(b)
6 x 1 x 5 + 15 x 2 x 4 + 10 x 3 2 6 x_{1} x_{5} + 15 x_{2} x_{4} + 10 x_{3}^{2} 6x1x5+15x2x4+10x32