(鼠尾草)
#以下函数在其他各种序列中引用。
定义bell_transform(n,a):#partition_based
行=[]
fn=阶乘(n)
对于k in(0..n):
结果=0
对于分区(n,长度=k)中的p:
factorial_product=1
power_factorial_product=1
对于零件,在p.to_exp_dict().items()中计数:
factorial_product*=阶乘(计数)
power_factorial_product*=阶乘(部分)**计数
系数=fn//(阶乘乘积*power_factorial_product)
结果+=系数*prod(对于p中的i,[a[i-1])
row.append(结果)
返回行
定义bell_matrix(发电机,尺寸):
G=[范围(dim)中k的发电机(k)]
行=λn:bell_transform(n,G)
返回矩阵(ZZ,[行(n)+[0]*(dim-n-1)表示范围(dim)中的n)]
def inverse_bell_matrix(生成器,dim):
G=[范围(dim)中k的发电机(k)]
行=λn:bell_transform(n,G)
M=矩阵(ZZ,[行(n)+[0]*(dim-n-1)表示范围(dim)中的n)。逆()
返回矩阵(ZZ,dim,lambda n,k:(-1)^(n-k)*M[n,k])
bell_numbers=[范围(11)中n的总和(bell_transform(n,[1]*10))]
对于范围(11)中的n:打印(bell_transform(n,bell_numbers))
(PARI)
bell_matrix(f,len)={my(m=矩阵(len,len;
对于(n=1,len-1,m[n+1,2]=f(n-1));
对于(n=0,len-1,对于(k=1,n,
m[n+1,k+1]=总和(j=1,n-k+1,二项式(n-1,j-1)*m[n-j+1,k]*m[j+1,2]));
返回(m)
}
f(n)=polceoff(总和(k=0,n,prod(i=1,k,x/(1-i*x)),x^n*O(x))),n);
(Python)
从functools导入缓存
从二项式的数学导入梳
def BellMatrix(f,大小):
A=[f(n)表示范围内的n(尺寸-1)]
@高速缓存
定义T(n,k):
如果k==0:返回k**n
收益总额(
二项式(n-1,j)*T(n-j-1,k-1)*A[j]
对于范围(n-k+1)中的j
return[[T(n,k)代表范围(n+1)中的k]代表范围(大小)中的n]
@高速缓存
定义b(n,k=0):返回n<1或k*b(n-1,k)+b(n-l,k+1)
打印(BellMatrix(b,9))#彼得·卢什尼2022年6月14日