本网站由以下捐款支持:OEIS基金会.

用户:Peter Luschny/P-Transform

来自OeisWiki
跳转到:航行,搜索

P变换

P-多项式

我们引入了一个序列到三角形的转换,我们称之为这个分区转换(或短P变换)类似于贝尔变换在前一篇博客文章中讨论过,但这篇文章是为不同的形式级数的类型。原则上,我们可以将对贝尔变换的阐述,在某些方面我们将这样做。

就像任何数学文本一样,我们从定义开始。与数学课文不同,我们使用圣人语言传统数学符号。

def PartialPtrans(n,f,norm=无):如果n==0:返回[1]R=[0]*(n+1)对于分区(n)中的q:p=q+[0]R[q[0]]+=(-1)^q[0]*mul(二项式(p[j],p[j+1])*f(j+1)^p[j)对于范围内的j(len(q))如果norm==无:返回Rreturn[(0..n)中k的范数(n,k)*R[k]]Ptrans=λn,f,范数=无:总和(部分Ptrans(n,f、范数))

这里我们介绍两个概念部分P变换“部分Ptrans”P变换“Ptrans”。这个名字很明显派生自遍历n的所有分区的主循环。接下来,我们通过举例说明其含义。

最常见的情况由“Ptrans(n,f)”给出,n≥0为整数f是只提供符号变量x的函数n个.它代表了我们所说的n次分块多项式(与贝尔多项式的情况完全类似)取决于变量x的数量无界1,x个2,x个, ....

f=λn:var('x'+str(n))对于范围(5)中的n:打印Ptrans(n,f)1, -x1,x1^2-x1*x2,-x1^3+2*x1^2*x2-x1*x2*x3,x1^4-3*x1^3*x2+x1^2*x2^2+2*x1^2*x2*x3-x1*x2*x3*x4。

这个三角形的行也可以称为“完整的P-多项式”将它们与部分P-多项式,列出了在0≤k≤n的三角形中:

P转换.png

对于范围(5)中的n:打印PartialPtrans(n,f)[1][0,-x1][0,-x1*x2,x1^2][0,-x1*x2*x3,2*x1^2*x2,-x1^3][0,-x1*x2*x3*x4,x1^2*x2^2+2*x1^2*x2*x3,-3*x1^3*x2,x1^4]

显然,完整的P-多项式只是第n行中对应的部分P-多项式。

下一步是使用具体序列f(定义为函数)。它替换变量x1,x个2,x个, ... 通过值f(1)、f(2)、f(3)。。。(换句话说,它评估值为f(i))的(多元)P-多项式。产生的结果(一元)多项式可以依次以任何值“val”进行求值。我们将其实现为:

def PEvaluateAt(n,f,val=无,normal=无):P=部分Ptrans(n,f,范数)p=总和([x^k*g代表k,g代表枚举(p)])如果val==无:返回p返回p.substitute(x=val)

为了语言上的方便,我们为角大小写添加了一个宏不进行替换(val=无)。

AsPolynomials=lambda n,f,norm=None:PEvaluateAt(n,f、norm=norm)

现在回想一下,“lambda n:1”在Sage语言中表示常量序列a(n)=1,对于所有n和“lambda n:n”,序列a(n)=n写为匿名函数。(Maple用户会将此写为“n”n’.)在这些情况下,我们发现:

对于范围(6)中的n:打印为多项式(n,λn:1)1, -x、,x^2-x,-x^3+2*x^2-x,x^4-3*x^3+3*x^2-x,-x^5+4*x^4-6*x^3+4*x^2-x。对于范围(6)中的n:打印为多项式(n,λn:n)1-x个x^2-2*x-x^3+4*x^2-6*xx^4-6*x^3+16*x^2-24*x-x^5+8*x^4-30*x^3+72*x^2-120*x

让OEIS感到高兴的事情现在已经司空见惯了:

  • 提取多项式的系数,
  • 在x=1时计算多项式,
  • 在x=-1时计算多项式,
  • 计算x=1/2处的多项式,并将结果乘以2^n,
  • 计算x=-1/2处的多项式,并将结果乘以2^n。

这在圣人中翻译为:

打印“作为多项式:”对于范围内的n(Len-2):打印为多项式(n,f,范数)打印“系数:”对于范围内的n(Len-2):打印PartialPtransRec(n,f,范数)打印“x=1:”,[PEvaluateAt(n,f,1,normal)for n in range(Len)]打印“x=-1:”,[PEvaluateAt(n,f,-1,normal)for n in range(Len)]打印“x=1/2:”,[PEvaluateAt(n,f,1/2,normal)*2^n代表范围内的n(Len)]打印“x=-1/2:”,[PEvaluateAt(n,f,-1/2,normal)*2^n代表范围内的n(Len)]

让我们看看我们的基本示例:

f=λn:1norm=无作为多项式:1-x个x^2-x-x^3+2*x^2-xx^4-3*x^3+3*x^2-x-x^5+4*x^4-6*x^3+4*x^2-x系数:[[1], [0, -1], [0, -1, 1], [0, -1, 2, -1], [0, -1, 3, -3, 1], [0, -1, 4, -6, 4, -1]]  #A097805号,A071919号, x=1:[1,-1,0,0,0,0,0,1,0]#A154955号x=-1:[1、1、2、4、8、16、32、64、128、256]#A011782号x=1/2:[1,-1,-1,-1-,-1#A153881号x=-1/2:[1、1、3、9、27、81、243、729、2187、6561]#A133494号
f=λn:n作为多项式:1-x个x^2-2*x-x^3+4*x^2-6*xx^4-6*x^3+16*x^2-24*x-x^5+8*x^4-30*x^3+72*x^2-120*x系数:[[1], [0, -1], [0, -2, 1], [0, -6, 4, -1], [0,-24,16,-6,1],[0, -120, 72, -30, 8, -1]]  #A090238号,A059369号x=1:[1,-1,-1,-3,-13,-71,-461,-3447,-29093,-273343]#A167894号,A003319号x=-1:[1,1,3,11,47,231,1303,8431,62391,524495]#A051296号x=1/2:[1,-1,-3,-17,-139,-1449,-18131,-263233]x=-1/2:[1、1、5、33、269、2633、30421、408945、6307549]

我们现在已经讨论了几乎所有关于P变换的基本定义。但读者肯定注意到了列表中的第三个参数函数PartialPtrans和Ptrans的参数,可选参数normal,我们直到现在才使用。“normal”代表归一化可以认为是一个额外的应用于部分P-变换的因子,其目的是是为了确保结果是整数。接下来的两个示例演示了这一点。

欧拉数和伯努利数的表示

试图说服读者P-变换很有趣我们展示了如何将欧拉数和伯努利数表示为P变换。这些例子还表明,当我们谈论序列到三角形时转换我们特别允许有理序列作为输入转变。

欧拉数

我们将欧拉数的生成序列定义为有理数列a(n)=1/((2n-1)(2n))并对结果进行规范化乘以(2n)!。然后我们进行评估。

f=λn:1/((2*n-1)*(2*n))范数=λn,k:阶乘(2*n)长度=8打印“作为多项式:”对于范围内的n(Len-2):打印为多项式(n,f,范数)打印“系数:”对于范围内的n(Len-2):打印PartialPtransRec(n,f,normal)打印“x=1:”,[PEvaluateAt(n,f,1,normal)for n in range(Len)]print“x=-1:”,[PE范围(Len)内n的赋值At(n,f,-1,范数)]打印“x=1/2:”,[PEvaluateAt(n,f,1/2,normal)*2^n代表范围内的n(Len)]打印“x=-1/2:”,[PEvaluateAt(n,f,-1/2,normal)*2^n代表范围内的n(Len)]

我们得到的结果是:

#作为多项式:1-x6*x^2-x-90*x^3+30*x^2-x2520*x^4-1260*x^3+126*x^2-x-113400*x^5+75600*x^4-13230*x^3+510*x^2-x#系数:A241171型Joffe的中心差为零,符号为。[1][0, -1][0, -1, 6][0, -1, 30, -90][0, -1, 126, -1260, 2520][0, -1, 510, -13230, 75600, -113400]#x=1:A000364号欧拉数字签名,A028296号古德曼语[1, -1, 5, -61, 1385, -50521, 2702765, -199360981]#x=-1:A094088号例如1/(2-cosh(x))(偶数系数)。[1, 1, 7, 121, 3907, 202741, 15430207, 1619195761]#x=1/2:A002105号减少切线数,有符号。[1, -1, 4, -34, 496, -11056, 349504, -14873104]#x=-1/2:数据库中缺少[1, 1, 8, 154, 5552, 321616, 27325088, 3200979664]

使用P变换的一大优点是它使一整套关系和序列立即可见同时以最少的技术努力。更重要的是,当我们包括我们将要讨论的逆关系时在下一节中。

对于那些还没有习惯圣人语言的人这里是我们计算出的欧拉数的表示数学符号:

伯努利数

现在让我们考虑伯努利数。这个案例有点复杂,因为输入序列不仅是一个有理序列,而且是相关的P-多项式具有有理系数。

我们将贝努利数的生成序列定义为有理数列a(n)=1/((2n)(2n+1))并对结果进行规范化乘以(2n)/(2-2^(2n))。然后我们评估:

f=λn:1/((2*n)*(2*n+1))范数=λn,k:阶乘(2*n)/(2-2^(2*n))
print“\n#作为多项式:”对于范围内的n(Len-2):打印为多项式(n,f,范数)打印“\n#系数”对于范围内的n(Len-2):打印PartialPtransRec(n,f,normal)print“\n#x=1:”,[PEvaluateAt(n,f,1,normal)for n in range(Len)]打印“\n#x=-1:”,[PEvaluateAt(n,f,-1,norm)for n in range(Len)]

导致:

#作为多项式:11/6*x-1/21*x^2+1/70*x93年5月3日至31年1月31日-140/1143*x^4+14/127*x^3-41/1905*x^2+1/2286*x100/219*x^5-40/73*x^4+93/511*x^3-23/1533*x^2+1/11242*x#系数[1][0, 1/6][0, 1/70, -1/21][0, 1/434, -1/31, 5/93][0, 1/2286, -41/1905, 14/127, -140/1143][0, 1/11242, -23/1533, 93/511, -40/73, 100/219]#x=1:A000367号/A002445号[1, 1/6, -1/30, 1/42, -1/30, 5/66, -691/2730, 7/6]# [1, 1, -1, 1, -1, 5, -691, 7]#[1、6、30、42、30、66、2730、6]#x=-1:[1, -1/6, -13/210, -115/1302, -2911/11430, -13509/11242]# [1, -1, -13, -115, -2911, -13509, -46675903]# [1, 6, 210, 1302, 11430, 11242, 5588310]

将多项式(或其系数)视为x=1时这些多项式值的精化或推广。在这个我们在这里发现了伯努利数的一个推广,但还没有在OEIS中。事实上,我们发现了更多:一个具有消失的多项式族常数项(对于n>0)在x=1时求和到伯努利数。这与经典的伯努利多项式大不相同偶数n具有非零常数项。

我们在这里使用的伯努利数的精细结构用数学符号表示的计算:

P变换的逆

这个P变换的逆定义为下限的倒数部分P-多项式的三角矩阵。

def Inverse PartialPtrans(dim,f,norm=无):A=[范围(dim)内n的部分Ptrans(n,f)]M=[[0代表k in(0..n)]代表n in range(dim)]M[0][0]=1对于n in(1..dim-1):M[n][n]=1/A[n][n]对于范围(n-1,0,-1)中的k:M[n][k]=展开(-和(A[i][k]*M[n][i]对于范围(n,k,-1)/A[k][k]中的i如果norm==无:返回M对于n in(1..dim-1):对于k in(1..n):M[n][k]*=范数(n,k)返回M

在其全部通用性中,逆部分P-多项式的矩阵开始:

f=λn:var('x'+str(n))对于InversePartialPtrans(5,f)中的p:打印p[1],[0,-1/x1],[0,-x2/x1^2,1/x1^2],[0,-2*x2^2/x1^3+x2*x3/x1^3,2*x2/x1^3、-1/x1^3],[0,-5*x2^3/x1^4+5*x2^2*x3/x1^4-x2*x3*x4/x1^4,5*x2^2/x1^4-2*x2*x3/x1^4,-3*x2/x1^4,1/x1^4]

我们看到了x1!=0是存在的必要条件逆P变换。该矩阵的第1列称为P-逆序列x的1,x个2,x个,... . 如果我们假设,逆P矩阵可以被清理一点x个1=1(在实践中通常是这样的)。

对于Inverse PartialPtrans(5,f)中的P:打印[P.substitute(x1=1)for P in P][1][0, -1][0,-x2,1][0,-2*x2^2+x2*x3,2*x2,-1][0,-5*x2^3+5*x2^2*x3-x2*x3*x4,5*x2^2-2*x2*x3,-3*x2,1]

例如,对于N上的标识,我们得到:

M=反向部分Ptrans(8,λn:n)对于范围(8)中的n:打印[m代表m中的m[n]][1],[0,  -1],[0,  -2,  1],[0,  -2,  4,  -1],[0,  -4,  8,  -6,  1],[0,   4, 16, -18,  8,  -1],[0, -48, 12, -44, 32, -10,  1],[0, 336, 96, -72, 96, -50, 12, -1].

三角形是倒排的A059370号用不同的符号。和-1、-2、-2、-4、4、-48、336。。。是的P逆序列序列a(n)=n,其中A059372号具有不同的符号模式称为“阶乘的反向变换”。

def InverseP序列(n,f,范数=无):M=反部分Ptrans(n,f,范数)对于(1..n-1)中的j,返回[M[j][1]打印反转序列(8,λn:n)[-1, -2, -2, -4, 4, -48, 336]

情况x=1的复发

计算x=1时的P多项式与计算总和相同系数的总和,或者如果系数由较小的三角矩阵。这是函数“Pcoeffsum(Len,f)”完成的。整数“Len”请求长度Len的列表,“f”是要变换,作为函数给出。换句话说,Pcoeffsum(Len,f)是等效于[PEvaluteAt(k,lambda n:n,1)for k in range(Len)],但它使用更有效的算法。

定义Pcoeffsum(len,f,norm=无):R、 C=[1],[1]+[0]*(透镜-1)对于n in(1..len-1):对于范围(n,0,-1)中的k:C[k]=C[k-1]*f(k)C[0]=-总和((1..n)中k的C[k])如果范数==无:R.append(C[0])else:R.append(C[0]*范数(n))返回R

示例调用:

打印Pcoeffsum(9,λn:n)[1, -1, -1, -3, -13, -71, -461, -3447, -29093]打印[PEvaluteAt(n,lambda n:n,1)for n in range(9)][1, -1, -1, -3, -13, -71, -461, -3447, -29093]

组织环境信息系统中有许多序列可以用此进行有效计算算法。下面给出了这些序列的一个小选择。当然是在实践中给定的f将直接构建到转换中,并且必须添加一些归一化。例如,Sage代码余割数看起来像这样:

定义A001896_list(len):R、 C=[1],[1]+[0]*(透镜-1)对于n in(1..len-1):对于范围(n,0,-1)中的k:C[k]=C[k-1]/(8*k*(2*k+1))C[0]=-总和((1..n)中k的C[k])R.append((C[0]*阶乘(2*n)).numerator())返回R打印A001896_list(8)

请注意麦克劳林数出现的系数是什么在MacLaurin的第二个求和公式中,可以类似地计算:一个公式只有改变f的符号,f(k)=-1/(8*k*(2*k+1))(比较A036280美元).

另一个例子:选择f(k)=(k+1),我们得到阶乘序列的卷积逆A077607号. 但是选择f(k)=1/(k+1)并用n进行归一化!我们得到。。。伯努利数再次出现:

定义bernoulli列表(len):f、 R,C=1,[1],[1]+[0]*(透镜-1)对于n in(1..len-1):f*=n对于范围(n,0,-1)中的k:C[k]=C[k-1]/(k+1)C[0]=-总和((1..n)中k的C[k])R.追加(C[0]*f)返回R打印伯努利列表(17)

相关多项式显示在下图中。

P=绘图([1/2*x^2-1/3*x,-3/4*x^3+x^2-1/4*x,3/2*x^4-3*x^3+5/3*x^2-1/5*x,-15/4*x^5+10*x^4-35/4*x^3+8/3*x^2-1/6*x,45/4*x*^6-75/2*x^5+45*x^4-137/6*x^3+17/4*x^2-1/7*x],(x,0,1)显示(P,帧=真,标题='p_n(0)=0且p_n“1”=B(n)=BernoulliNumber(n)的多项式')

多项式和伯努利数.png

其他序列包括:A007840号与关联有序斯特林循环数字 A225479型并由“f(n)=(n-1)/n if n>1 else-1”和福比尼数 A000670号与关联有序Stirling集数 A131689年(A019538年)并由“f(n)=1/n if n>1 else-1”生成。读者也可以考虑相关的一对A006153号(序列)和1996年1月73日(三角形)如果n>1 else-1,则由“f(n)=1/(n-1)”生成。

上述示例中的子句“ifn>1 else-1”实际表示我们正在评估x=-1而不是x=1的多项式。这是一个简单但值得注意的技巧这可以概括为:改变标志f(1)将行和转换为交替行和。

一般情况下的周期

由于分区数量快速增加,因此重复出现对于分区变换是有效的当n变大时进行计算。幸运的是分区遵循漂亮的递归基本上,我们只需将这些复发转换为我们的设置。

def PartialPtransRec(n,f,norm=无):i=1;F=[1]而i<=n:F.append(F[i-1]*F(i));i+=1@缓存函数定义PRec(n,k):如果k==0且n==0:返回1如果k==0:返回0如果k==n:返回-PRec(n-1,n-1)*F[1](1..n-k+1)中i的返回和(F[i]*PRec(n-i,k-1))R=[PRec(n,k)for k in(0..n)]如果norm==无:返回Rreturn[(0..n)中k的范数(n,k)*R[k]]

例如,我们将在下面讨论的订单2的Lah编号可以计算为:

lah2=λn:1,如果n==1其他((n-1)^2+1)/(n*(4*n-2))范数=λn,k:(-1)^k*阶乘(2*n)/阶乘(2*k)对于(0..6)中的n:打印部分PtransRec(n,lah2,normal)[1][0, 1][0, 2, 1][0, 10, 10, 1][0, 100, 140, 28, 1][0, 1700, 2900, 840, 60, 1][0,44200,85800,31460,3300,110,1]

我们现在也可以有效地计算逆P变换将反演应用于P变换的递归变量。但我们可以做得更好:我们还可以计算通过递归直接进行P变换。

def InversePartialPtransRec(n,f,范数=无):i=1;F=[1]而i<=n:F.append(F[i-1]*F(i));i+=1@cached_函数定义PRec(n,k):如果k==0且n==0:返回1如果k==0:返回0如果k==n:返回-PRec(n-1,n-1)/F[1]返回-(PRec(n-1,k-1)+总和(F[i]*(2..n-k+1)中i的PRec[n,k+i-1))/F[1]R=[PRec(n,k)for k in(0..n)]如果norm==无:返回Rreturn[(0..n)中k的范数(n,k)*R[k]]

例如,我们发明了一个有趣的三角形,而不是OEIS中的三角形与欧拉数有关,本质上是约夫数的倒数零的中心差:

eul=λn:1/((2*n-1)*(2*n))nrm=λn,k:阶乘(2*n)/4^k对于(0..6)中的n:打印InversePartialPtransRec(n,eul,nrm)[1][0, -1][0, -2, 6][0, -16, 60, -90][0, -288, 1176, -2520, 2520][0, -9216, 39360, -98280, 151200, -113400]

然而,这个三角形的意义尚未被探索。

基准

让我们看看我们的努力是否取得了回报。

导入时间def timeit(语句):持续时间=[]对于范围(3)中的i:start=time.time()eval(语句)end=time.time()t=结束-开始持续时间追加(t)返回最小值(持续时间)def基准(stmt):t=时间(stmt)r=圆形(t*1000,3)打印“%s最佳时间:%s毫秒”%(stmt,r)
对于范围(10,50,10)内的n:基准(“PartialPtrans(%d,lambda n:n)”%n)
PartialPtrans(10,λn:n)最佳时间:28.879 msPartialPtrans(20,λn:n)最佳时间:591.164 msPartialPtrans(30,λn:n)最佳时间:7204.341 msPartialPtrans(40,λn:n)最佳时间:57720.778 ms
对于范围(10,50,10)内的n:基准测试(“PartialPtransRec(%d,lambda n:n)”%n)
PartialPtransRec(10,λn:n)最佳时间:10.783 msPartialPtransRec(20,λn:n)最佳时间:33.621 msPartialPtransRec(30,λn:n)最佳时间:80.299 msPartialPtransRec(40,λn:n)最佳时间:161.223 ms

虽然算法现在看起来很有效,但数据结构使用不令人满意。在典型用例中,人们希望要一次计算下三角矩阵的前n行,而不是一行一行。因此,我们给出了另一个函数这样做并额外集成了逆P变换和简化的P变换(我们将在下一节中讨论)在单个函数中。

定义PtransMatrix(dim,f,norm=无,inverse=假,reduced=假):i=1;F=[1]如果减少:而i<=dim:F.append(F(i));i+=1其他:而i<=dim:F.append(F[i-1]*F(i));i+=1C=[[0代表范围(m+1)中的k]代表范围(dim)中的m]C[0][0]=1如果相反:对于m in(1..dim-1):C[m][m]=-C[m-1][m-1]/F[1]对于范围(m-1,0,-1)内的k:C[m][k]=-(C[m-1][k-1]+总和(F[i]*C[m][k+i-1]对于i in(2..m-k+1))/F[1]其他:对于m in(1..dim-1):C[m][m]=-C[m-1][m-1]*F[1]对于范围(m-1,0,-1)内的k:C[m][k]=-和(F[i]*C[m-i][k-1]用于(1..m-k+1)中的i)如果norm==无:返回C对于m in(1..dim-1):对于k in(1..m):C[m][k]*=范数(m,k)返回C

甚至性能也有所改善:

对于范围(10,50,10)内的n:基准测试(“PtransMatrix(%d,lambda n:n)”%n)PtransMatrix(10,λn:n)最佳时间:6.345 msPtransMatrix(20,λn:n)最佳时间:31.637 msPtransMatrix(30,λn:n)最佳时间:74.013 msPtransMatrix(40,λn:n)最佳时间:140.953 ms

简化的P变换

实现的递归不仅是计算P-变换,它们还对P-变换的结构提供了新的见解。为此,考虑实施上述情况再次发生:

i=1;F=[1];而i<=n:F.append(F[i-1]*F(i));i+=1

这有效地首先将给定序列“f”转换为其部分积“f”在递归开始之前。因此,P变换可以写成

我们打电话给这个简化P变换.它的开头是这样的:

简化Ptransformation.png

显然,与P变换的原始形式。

在这篇文章中,我们不会探讨简化的形式虽然有一些惊喜。例如身份n个n个由逆约化变换映射加泰罗尼亚三角A039598号根据阿卜杜拉希·奥马尔的评论n链的保序变换的个数k个固定点。

无论如何,人们应该记住,P-变换箭头在箭矢图中有效计算序列:实际的P变换,其逆,以及相应的两个约化变换。

多元P-多项式的系数

让我们简单回顾一下多元偏P-多项式。这次我们要提取这些多项式的系数。

def P多系数(dim,normal=None,inverse=False):def系数(p):#无可否认,有些模糊c=SR(p).分数(ZZ).数字().系数()如果不是c,则返回[0]f=λn:var('x'+str(n))P=PtransMatrix(dim,f,范数,逆)return[[L中p的系数(p)]p中L的系数]

在通常情况下,我们得到:

P系数(8)[[1]],[[0], [-1]],[[0],[-1],[1]],[[0], [-1], [2], [-1]],[[0], [-1], [1, 2], [-3], [1]],[[0], [-1], [2, 2], [-3, -3], [4], [-1]],[[0], [-1], [1, 2, 2], [-1, -6, -3], [6, 4], [-5], [1]],[0],[-1],[2,2,2],[-3,-3,-6,-3],[4,12,4],[-10,-5],[6],[-1]]

对于逆多元偏P-多项式:

P多系数(7,逆=真)[[1]],[[0], [-1]],[[0],[-1],[1]],[[0], [-2, 1], [2], [-1]],[[0], [-5, 5, -1], [5, -2], [-3], [1]],[[0], [-14, 21, -3, -6, 1], [14, -12, 2], [-9, 3], [4], [-1]]],[[0], [-42,84,-28,-28,7,7,-1],[42,-56,7,14,-2],[-28,21,-3],[14,-4],[-5],[1]]

这两个三角形都不在OEIS中,但逆P矩阵的第1列是Wolfdieter Lang的A111785号命名为“用于幂级数反演的数组”(顺序不同)。情况是类似于逆Bell-transform的情况,其中之前也只有列1可以在数据库中找到,但不能在逆系数的整个矩阵中找到。(三角形现在是A269941型A269942型.)

但是,如果我们用子列表的和替换它们,会发生什么呢?我们得到了下面的三角形,实际上我们在这两种情况下都得到了它!

[[1],[0, -1],[0, -1, 1],[0, -1, 2, -1],[0, -1, 3, -3, 1],[0, -1, 4, -6, 4, -1],[0, -1, 5, -10, 10, -5, 1],[0, -1, 6, -15, 20, -15, 6, -1],[0, -1, 7, -21, 35, -35, 21, -7, 1]]


原型示例

作为P变换的典型示例,我们选择无符号Lah数,斯特林集、(无符号)斯特林循环数和克罗内克增量。我们以部分P-多项式的形式展示了这些示例。这一次我们使用了一种更具数学意义的符号。那么让我们定义一下P(P)k个n个(f) 作为f的P变换限制于分区n中k部分最大;这正是部分P-多项式生成的结果由f表示。然后:

无符号Lah数字

斯特林循环数

斯特林集合数

克罗内克三角洲

有一种自然的方法可以推广无符号Lah数,即斯特林循环数和Stirling集数到组合数的完整层次统一的方式(我在别处描述过)。该层次结构中m=2的情况给出了对于Stirling集数,Riordan的中心阶乘数T(2n,2k)符号(A036969号)对于斯特林循环数,中心阶乘数t(2n,2k)(A204579型). Lah数字的情况以前没有被视为据我所知(这些号码现在登记为A268434型). 所有这些情况可以像基本情况一样使用偏P-多项式进行计算。

生成器和规范化:

stirset2=λn:1,如果n==1,其他1/(n*(4*n-2))stircycle2=λn:1如果n==1其他(n-1)^2/(n*(4*n-2))lah2=λn:1,如果n==1其他((n-1)^2+1)/(n*(4*n-2))范数=λn,k:(-1)^k*阶乘(2*n)/阶乘(2*k)

斯特林设定顺序2

M=PtransMatrix(7,stirset2,范数)对于m中的m:打印m[1][0, 1][0, 1, 1][0, 1, 5, 1][0, 1, 21, 14, 1][0,1,85147,30,1][0, 1, 341, 1408, 627, 55, 1]M=PtransMatrix(7,stirset2,范数,逆=真)对于m中的m:打印m[1][0, 1][0,1,1][0, 4, 5, 1][0, 36, 49, 14, 1][0, 576, 820, 273, 30, 1][0, 14400, 21076, 7645, 1023, 55, 1]

斯特林循环顺序2

M=PtransMatrix(7,stircycle2,范数)#A204579型对于m中的m:打印m[1],[0, 1],[0, 1, 1],[0, 4, 5, 1],[0, 36, 49, 14, 1],[0, 576, 820, 273, 30, 1],[0, 14400, 21076, 7645, 1023, 55, 1]  M=PtransMatrix(7,stircycle2,范数,逆=真)对于m中的m:打印m[1][0, 1][0, 1, 1][0, 1, 5, 1][0, 1, 21, 14, 1][0, 1, 85, 147, 30, 1][0, 1, 341, 1408, 627, 55, 1]

Lah订单2

M=PtransMatrix(7,lah2,范数)对于m中的m:打印m[1][0,     1][0,     2,     1][0,10,10,1][0,   100,   140,    28,    1][0,  1700,  2900,   840,   60,   1][0, 44200, 85800, 31460, 3300, 110, 1]

读者可能会注意到三角形stirset2和stircycle2与彼此之间,lah2三角形是自逆的(应该是这样!)。

2阶无符号Lah数

2阶斯特林循环数(又称中心阶乘数t(2n,2k))

2阶Stirling集数(也称中心阶乘数T(2n,2k))

但为什么要打电话这个订单号2?好吧,有几个令人信服的论点,证明这是拉赫数的“正确”概括。我们表示最简单的一个:1阶Lah数与1阶Stirling数的乘积

和2阶Lah数具有表示形式

高阶斯特林数和拉赫数

我们倾向于说斯特林数的推广只是令人满意的如果它同时导致Lah数的满意推广。为了了解全貌,让我们简要考虑一下层次结构中的第三步,但这一步时间关注这些数字背后的递归关系的结构。

定义T(n,k,w):如果n==k:返回1如果k<0或k>n:返回0返回T(n-1,k-1,w)+w(n,k)*T(n-1,k,w)

选择权重函数stirset3、stircycle3和lah3为我们提供了所需的概括。

stirset3=λn,k:k^3stircycle3=λn,k:(n-1)^3lah3=λn,k:stircycle3(n,k)+stirset3(n、k)对于范围(8)中的n:打印[T(n,k,lah3)对于范围(0..n)中的k][1][0, 1][0,2,1][0, 18, 18, 1][0, 504, 648, 72, 1][0, 32760, 47160, 7200, 200, 1][0, 4127760, 6305040, 1141560, 45000, 450, 1][0,895723920,1416456720,283704120,13741560,198450,882,1]

将权重函数中的'3'替换为非负m现在可以得到完整的泛化。特别地,我们看到m=0的情况将两种Stirling数都简化为Pascal三角形并且0阶的Lah数由下式给出A038207号, 这是帕斯卡三角形的正方形。

斯特林/拉赫数的层次结构。
订单 斯特林套装 斯特林循环 Lah数字
0 A007318号 A007318号 A038207号
1 A048993号 A132393号 A271703型
2 A269945型 A269944型 A268434型
A269948型 A269947型 A269946型

一些额外的斯特林数恒等式

我们现在使用P-变换引入两个数字三角形这就产生了与斯特林数相关的六个明显的新恒等式。

斯特林套装*数字(假名)

斯特林循环*数字(假名)

这些数字的数值可以在A268437型268438英镑. 身份显示出良好的形式对称性:

箍筋编号标识.png

这些值位于A268435型268436英镑.为了获得这些数字的另一种表示形式我们再看两个数字三角形:

有了这个我们就得到了

数字Wn、 k个称为病房号。查尔斯·乔丹(Charles Jordan)在他的《有限差分演算》(Calculus of Finite Differences)(1950年,切尔西)中给出,第152页和第172页分别列出了这些数字的简短表格。比较A269939型A269940型.

Maple代码

首先,我们要检查最后一节中的一些公式较小的值。

C:=(n,k)->二项式(n,k):R:=(n,k)->冲击波(n,k):F:=(n,k)->(-1)^k*R(-n,k):N:=(N,k)->(2*N)/F(n+k,n)):S:=(n,k)->箍筋2(n,k):s:=(n,k)->abs(斯特林1(n,k)):B:=(n,k)->n(n,k)*加((-1)^(m+k)*C(n+k,n+m)*S(n+m,m),m=0..k):b:=(n,k)->n(n,k)*加((-1)^(m+k)*C(n+k,n+m)*s(n+m,m),m=0..k):A1:=(n,k)->R(n-k+1,n-k)*S(n,k):A2:=(n,k)->C(n,k)*加(C(k,i)*B(n-k,i,i=0..k):A3:=(n,k)->C(-k,-n)*加(C(-n,i)*b(n-k,i),i=0..n-k):B1:=(n,k)->R(n-k+1,n-k)*s(n,k):B2:=(n,k)->C(n,k)*加(C(k,i)*b(n-k,i,i=0..k):B3:=(n,k)->C(-k,-n)*加(C(-n,i)*B(n-k,i),i=0..n-k):

这里的数字“B”和“B”是盯着斯特林的数字使用给定的表示法Wn、 k个和Vn、 k个以及A1、A2、A3——第一行恒等式中的表达式,以及B1,B2,B3第二行恒等式中的表达式。

测试:=f->seq(打印(seq(f(n,k),k=0..n)),n=0..6):试验(A1);试验(A2);测试(A3);试验(B1);试验(B2);试验(B3);

我们的测试表明A1、A2和A3等于A268435型B1、B2和B3等于A268436型在测试范围内。

SageMath只实现了一个残疾人,这是一个令人不安的事实无法正确执行此测试的二项式系数的形式。所以我们不得不说SageMath不是一个合适的计算工具OEIS中的许多序列--一个令人悲伤的发现。

现在让我们回到部分P-变换和P-变换:

partial_ptrans:=proc(n,f:=NULL)局部q,p,r,g,r;如果n=0,则返回[1]fi;如果f=NULL,则g:=n->x[n]否则g:=f fi;R:=[序列(0,j=0..n)];对于组合中的q:-分区(n)dop:=[op(ListTools:反向(q)),0];r:=p[1]+1;mul(二项式(p[j],p[j+1])*g(j)^p[j],j=1..nops(q));R[R]:=R[R]-(-1)^R*%;od;R端:p_trans:=proc(n,f:=NULL)add(k,k=partial_ptrans(n,f))end:

示例调用:

部分反式(5);部分反式(6,m->m);seq(p_trans(n,m->1/(m+1))*n!,n=0..10);[0,-x[1]x[2]x[3]x[4]x[5],2x[1]^2 x[2]x[3]x[4]+2x[1]^2 x[2]^2 x[3],-3x[1]^3 x[2]x[3]-3x[1]^3 x[2]^2,4x[1]^4 x[2],-x[1]^5][0,-720,372,-152,48,-10,1]1, -1/2, 1/6, 0, -1/30, 0, 1/42, 0, -1/30, 0, 5/66

带参数维数的P矩阵和可选参数生成器和归一化因子。

p_矩阵:=进程(dim,生成器:=空,正常:=空)局部n,k,w,M,T;M:=矩阵(尺寸,形状=三角形[下]);M[1,1]:=1;如果normal=NULL,则w:=(n,k)->1,否则w:=normal fi;对于n从1到dim doT:=部分反式(n-1,发生器);对于从1到n的k,做M[n,k]:=w(n-1,k-1)*T[k]od;od;M端:

示例调用:

p_矩阵(6);p_矩阵(6,m->m);f:=n->`如果`(n=1,1,1/(n*(4*n-2)):w:=(n,k)->(-1)^k*(2*n)/(2*k)!:p矩阵(6,f,w);

生成多项式的系数之和:

p_coeffsum:=进程(len,f)局部R,C,n,k;R:=阵列(0..len-1);C:=阵列(0..len-1);R[0]:=1;C[0]:=1;对于从1到len-1的n do对于k从n乘以-1到1做C[k]:=C[k-1]*f(k)od;C[0]:=-加(C[k],k=1..n);R[n]:=%;od;转换(R,列表)结束:p_coeffsum(9,m->m);[1, -1, -1, -3, -13, -71, -461, -3447, -29093]


摘要

我们引入了P变换,一种序列到三角形的变换,基于具有最大部分k的n的分区。此转换是密切相关的Bell-transformation——定义在序列上的核心变换之一。这一转变在在我们看来,与OEIS一起分发的转换库是由于重要序列是通过有理数列.欧拉数和伯努利数为这一观点的杰出例子证明了这种转换的有用性。

在x=1或x=-1时评估的一些P-多项式

A000007号 A000670号 A001896号 A003319号 A006153号 A006232号
A006252号 A006568号 A006569号 A007840号 A027641号 A027642号
A036280号 A036281号 A036968号 A051296号 A075178号 A077607号
A089148号 A101686号 A113871号 A118196型 A135920号 A154288号
A154289号 A167894号 A198631号 A226158型 A248964型 A249024型

随之而来的是一本SageMath Jupyter笔记本,可以下载github.

感谢我的编辑汉斯·哈弗曼!