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

用户:Peter Luschny/扩展二项式

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

PascalTriangleArithmetique.png

布莱斯·帕斯卡,三角形算术特征(剑桥大学图书馆,根据(CC BY-NC 3.0)授权)


二项式的推广

基本条件

二项式是一个函数(是所有整数的集合)基于阶乘的商

定义b(n,k):返回阶乘(n)/(阶乘(k)*阶乘(n-k))

并由描述该函数非零值的三个条件决定:

  • 帕斯卡条件,
  • Riordan条件(也称为反射),
  • 泰勒条件(也称为上否定)。
定义二项式(n,k):如果0<=k<=n:返回b(n,k)#Pascal如果k<=n<0:返回b(-k-1,n-k)*(-1)^(n-k)#Riordan如果n<0<=k:返回b(-n+k-1,k)*(-1)^k#泰勒返回0
1 0 0 0
-3个 1 0 0
-2 1 0
-1 1 -1 1
-4
-3个
-2
-1
1 -4 10 -20
1 -3个 6 -10个
1 -2 -4
1 -1 1 -1
-4 -3个 -2 -1
 
0 1 2
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0
1
2
1 0 0 0
1 1 0 0
1 2 1 0
1 1

或者可以定义二项式函数作为Gamma值商的极限:

定义极限值(n,k):返回极限(γ(n+x)/(γ(k+x)*γ(n-k+x对于(-5..5)中的n:打印[limit_binimal(n,k)对于(-5.5.5)中的k]

这两种定义产生了相同的结果。这证明了这三个条件构成了一个相干单元而是公式的任意集合。

还有二项式函数的基本表示用Pascal和Riordan条件定义,但没有Taylor条件矩阵指数的条件:它是矩阵指数具有…的矩阵-3, -2, -1, 0, 1, 2, 3, ... 在其他地方都是次对角零。

矩阵(SR,11[0,0,0,0,0,0,0,0,0,0,0,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0, 4,0,0,0,0,0,0,0,0,0,0,0, 5,0]).exp()
[ 1  0  0  0  0  0  0  0  0  0  0][-4  1  0  0  0  0  0  0  0  0  0][ 6 -3  1  0  0  0  0  0  0  0  0][-4  3 -2  1  0  0  0  0  0  0  0][ 1 -1  1 -1  1  0  0  0  0  0  0][ 0  0  0  0  0  1  0  0  0  0  0][ 0  0  0  0  0  1  1  0  0  0  0][ 0  0  0  0  0  1  2  1  0  0  0][ 0  0  0  0  0  1  3  3  1  0  0][ 0  0  0  0  0  1  4  6  4  1  0][ 0  0  0  0  0  1  5 10 10  5  1]

从某种意义上来说,这表明Riordan条件比泰勒条件更基本,因为它揭示了一个基本二项式函数相似的反射原理(或对偶)对斯特林数{n,k}=[-k,-n]的反射Lah数|n,k|=|-k,-n|而Taylor条件主要是泰勒定理从微积分中提出的一个方便关系。

Maple和Mathematica的二项式函数的行为与此处定义的二项法类似。这是一个可悲的事实SageMath只实现了二项式函数的残缺形式没有Riordan条件。(其他一些开源数学也是如此库。)因为二项式函数的普遍性和重要性因此,我们不推荐使用SageMath在OEIS上实现序列。

二项式.png

[-5..5]中x,y的对数(abs(二项式(x,y))与SageMath/GKP的无动力裁剪版本。

绘图3d((x,y)->log(abs(二项式(x,y))),-5..5,-5.5,网格=[60,60]);#枫树!plot3d((x,y)->`if`(x<0和y<0,0,log(abs(二项式(x,y))),-5..5,-5.5,网格=[60,60]);

想切换到扩展表单的明智用户如上所述,可以使用以下基于关于Sage的二项式。

定义二项式(n,k):如果ZZ中有n,ZZ中为k:如果n>=0:返回二项式(n,k)#Pascal如果k>=0:return(-1)^k*二项式(-n+k-1,k)#Taylor如果k<=n:return(-1)^(n-k)*二项式(-k-1,n-k)#Riordan返回0返回二项式(n,k)

然而,如果n或k不在ZZ中,此函数仍有问题。例如

对于(-5..5)中的n:打印[对于(-5.5)中的k,二项式(n+1/2,k+1/2)]

将按应进行计算,但在二项式(n+1/2,k+1/3)的情况下拒绝服务。为了清楚地说明我希望CAS在这种情况下做出什么反应:二项式(n+1/2,k+1/3)=C*r(n,k),其中r(n、k)是有理数C是常数sqrt(3)*Gamma(2/3)*Gamma(5/6)/Pi^(3/2)。

工具书类

  • 【BP】布莱斯·帕斯卡;三角形算术特征;G.Desprez,1665年。传真
  • [ADAL]S.Anelli、Ernesto Damiani、Ottavio D'Antona、Daniel E.Loeb;用消极思维获得结果;arXiv:9502214(1995),第11页。
  • [LMMS]阿娜·卢佐、多纳泰拉·梅里尼、曼努埃尔·A·莫龙、伦佐·斯普鲁格诺利;Riordan阵列诱导的恒等式;《线性代数及其应用》,436(2012)631-647。
  • [工作包]帕斯卡三角形
  • [MJK]M.J.Kronenburg;负变元的二项式系数;arXiv:1105.3689v2
  • [RS]伦佐·斯普鲁格诺利(Renzo Sprugnoli);二项式系数的负值;离散数学308(2008)5070–5077。

反射公式的一个应用

情况相当令人困惑:取决于实施的条件数学工具不仅会给出与我们的定义相关的错误结果但也掩盖了有效身份。为了弄清楚我们谈论的是哪种变体,控制起来很方便通过参数确定条件。

定义生物学(n,k,pascal=真,riordan=真,taylor=真):定义b(n,k):返回阶乘(n)/(阶乘(k)*阶乘(n-k))如果pascal和n>=0,k>=0和k<=n:返回b(n,k)如果riordan和n<0,k<0,k<=n:返回(-1)^(n-k)*b(-k-1,n-k)如果taylor和n<0且k>=0:返回(-1)^k*b(k-n-1,k)返回0

例如,让我们考虑在哪种情况下反射标识为真:

pascal=true,riordan=false,taylor=true[SageMath]对于Z中的n,k:假对于n\{0}中的n,k:Falsepascal=真,riordan=真,taylor=真[Maple,Mathematica]对于Z中的n,k:假对于n\{0}中的n,k:Truepascal=真,riordan=真,taylor=假[纯反射]对于Z中的n,k:真对于n\{0}中的n,k:True

在我最后一次博客帖子我引入了两个数字三角形与斯特林数相关的新恒等式。

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

让我们检查一下这些公式中的一些小值。

C=λn,k:二项式(n,k)R=λn,k:风险因子(n,k)F=λn,k:下降因子(n,k)N=λN,k:阶乘(2*N)/F(N+k,N)S=λn,k:斯特林_编号2(n,k)s=λn,k:斯特林n数1(n,k)B=λn,k:n(n,k)*总和((-1)^(m+k)*C(n+k,n+m)*S(n+m,m)对于m in(0..k))b=λn,k:n(n,k)*总和((-1)^(m+k)*C(n+k,n+m)*s(n+m,m)对于m in(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,iA3=λn,k:C(-k,-n)*总和(C(-n,i)*b(n-k,i)对于(0..n-k)中的i)B1=λn,k:R(n-k+1,n-k)*s(n,k)B2=λn,k:C(n,k)*和(C(k,i)*b(n-k,iB3=λn,k:C(-k,-n)*总和(C(-n,i)*B(n-k,i)对于(0..n-k)中的i)def测试(f):对于(0..6)中的n:打印[f(n,k)对于(0..n)中的k]试验(A1);试验(A2);测试(A3)试验(B1);试验(B2);测试(B3)

从我们的讨论中可以清楚地看到,这些身份在检查时会失败使用SageMath,但保留我们的定义或使用Maple或Mathematica进行检查。一、 就我而言,与其放弃这些美丽的身份,不如放弃SageMath。

如何计算二项式?

可以找到Pascal三角形的一个很好的实现基于rosettacode(GNU FD-License 1.2)并基于总结前一行内容。

定义帕斯卡尔(n):“”“打印出n行Pascal三角形。它返回False表示失败,返回True表示成功。"""行=[1]k=[0]对于范围内的x(最大值(n,0)):打印行row=[l+r代表l,r代表zip(row+k,k+row)]返回n>=1

显然,该算法不适合计算大n和k的二项式系数。我们将下面显示了使用SageMath实现的高效算法。

令人惊讶的是二项式的高效算法系数不久前在世界上是不可用的最快的算术库,GNU Multiple Precision库GMP。事实上,2010年2月,我在主页:


这是一个小基准。它比较了我们的实现具有GMP-5.0.1的库函数(MPIR 1.3.0非常相似。)这种加速是显著的。对于一些输入值,二项式函数为5.0.1等效物。测试二项式:(64000002133333)并行二项式:0.422秒一元二项式:0.610秒GMP5二项式:1733.750秒

当GMP Torbjorn Granlund的首席开发人员读到这一点时他决定用算法如下。有趣的不仅仅是表演增加了,但代码也变得简单多了。马尔科Bodrto最终实现了(高度优化的)“C”实现。

该算法不是基于阶乘n的商/(k!(n-k)!)但根据恩斯特·库默的一个老观点,即最大整数k是这样的p^k(p素数)除以二项式系数C(n,m)等于进位数当m被加到基p中的n-m时(Ernst-Kummer,在互惠互利的基础上, 1852年,《法国数学杂志》(Journal für die reine und angewandte Mathematik)44:93–146。)

还可以找到实现(无反射)在Sympy的“Sympy/functions/combinatial/factrials.py”中没有任何关于它们起源的注释。

定义kummer(n,k):如果k==0或k==n:返回1如果k>n//2:k=n-knk=n-kpfact=[]根n=isqrt(n)对于素数(2,n)中的素数:如果prime>nk:pfact.append(质数)持续如果质数>n//2:持续如果prime>rootN:如果n%prime<k%prime:pfact.append(质数)持续r、 N,K,p=0,N,K,1当N>0时:如果N%prime<K%prime+r else 0,则r=1如果r==1:p*=素数N=//质数K=K//质数如果p>1:pfact.append(p)返回触头(pfact)定义二项式(n,k):如果0<=k<=n:返回kummer(n,k)如果k<=n<0:返回kummer(-k-1,n-k)*(-1)^(n-k)如果n<0<=k:返回kummer(-n+k-1,k)*(-1)^k返回0

基本上,我们在SageMath中使用的是函数素数(2,n)。因此添加埃拉托斯坦筛将使我们的实现独立。

阶乘产品的扩展

还有另外两个具有扩展的基本函数:这个下落产物

fp(n,k)=prod([(n-j)对于范围(k)内的j)]

新兴产品

rp(n,k)=prod([(n+j)对于范围(k)内的j)]

定义为整数n≥0和k≥0并分别推广到下降阶乘阶乘是函数.

F a l l i n g F a c t o r i a l
0 -1/6 1/6 -1/3
0 0 1/2 -1/2
0 0 0 -1/1
0 0 0 0
-4
-3个
-2
-1
1 -4 20 -120
1 -3个 12 -60
1 -2 6 -24
1 -1 2 -6
-4 -3个 -2 -1
 
0 1 2
1/24 1/6 1/2 1/1
1/120 1/24 1/6 1/2
1/360 1/60 1/12 1/3
1/840 1/120 1/20 1/4
0
1
2
1 0 0 0
1 1 0 0
1 2 2 0
1 6 6
定义fp(n,k):返回触头([范围(k)中j的(n-j)])定义下降因子(n,k):如果k>=0:返回fp(n,k)如果n<k或n>=0:return Rational((-1)^k,fp(n-1,-k))return 0#(或ComplexInfinity)
R i s i n g F a c t o R i a l
1/840 -1/120 1/20 -1/4
1/360 -1/60 1/12 -1/3
1/120 -1/24 1/6 -1/2
1/24 -1/6 1/2 -1/1
-3个
-2
-1
0
1 -3个 6 -6
1 -2 2 0
1 -1 0 0
1 0 0 0
-4 -3个 -2 -1
 
0 1 2
0 0 0 0
0 0 0 1/1
0 0 1/2 1/2
0 1/6 1/6 1/3
1
2
4
1 1 2 6
1 2 6 24
1 12 60
1 4 20 120
定义rp(n,k):返回触头([(n+j)范围内的j(k)])定义风险_阶乘(n,k):如果k>=0:返回rp(n,k)如果k>-n或n<=0:return有理数((-1)^k,rp(-n+1,-k))return 0#(或ComplexInfinity)

在我们的上下文中,有趣的是这两个函数观察可以称为反射定律的条件。这个从研究表或查看上述实现可以明显看出。

这些定义可以扩展到整个复杂平面。表中的唯一区别是左侧的表格(k<0时)必须替换为“复数无穷大”。所以我们的整数点什么也得不到但现在作为函数的余域,事情当然更复杂了不再是.

在我们的实现中,我们希望进一步优化。首先,我们想明确一个产品这是通过简单的方法实现的,将一个因子乘以另一个因子是一个非常差的,不应该使用。

def产品(a,b):效率低,不使用。p=1对于范围(a,b+1)中的k:p*=k返回p

相反,我们需要一个采用分而治之的实现利用递归的渐近速度的策略。

定义rec_product(a,b):"""输入:a——整数,区间下限(含)b——整数,区间上限(含)输出:如果a<=b,则返回a*(a+1)*…*(b-1)*b否则返回1。"""n=b-a如果n<25:p=1对于范围(a,b+1)中的k:p*=k返回pm=a+n//2返回记录产品(a,m)*记录产品(m+1,b)

现在我们可以实现跌落和上升的最终版本阶乘:

定义下降因子(n,k):如果k>=0:返回rec_product(n-k+1,n)如果n<k或n>=0:p=记录乘积(-n+k,-n-1)return有理数(如果k为%2,则返回-1,否则返回1,p)返回0定义风险_阶乘(n,k):如果k>=0:返回rec_product(n,n+k-1)如果k>-n或n<=0:p=记录乘积(-n+1,-n-k)return有理数(如果k为%2,则返回-1,否则返回1,p)返回0

使用反射的各种三角形

S1斯特林循环次数A132393号和S2 Stirling集合数A048993号.L表示无符号Lah数A271703型,E1欧拉数A173018型E2是二阶欧拉数A201637号.


权力总和

求和{j=0..n}n^j*C(-j,-n)=A055897号(n) ●●●●。求和{j=0..n}n^j*C(-j,-n)*(-1)^(n-j)=A053506号(n+1)(第1页)求和{j=0..n}n^j*C(-j-1,-n-1)*(-1)^(n-j)=A000169号(n)求和{j=0..n}j^n*C(-j,-n)=A001710号(n+1)(n\ge 1)。求和{j=0..n}j^n*C(-j,-n)*(-1)^(n-j)=A195242号(n) ●●●●。求和{j=0..n}j^n*C(-j-1,-n-1)*(-1)^(n-j)=A072034号(n)

斯特林循环数S1A132393号

和{j=0..n}S1(j,k)*C(-j,-n)=A269954型(n,k)和{j=0..n}S1(j,k)*C(-j,-n)*(-1)^(n-j)=A269951型(n,k)和{j=0..n}S1(j,k)*C(-j-1,-n-1)=A269953型(n,k)和{j=0..n}S1(j,k)*C(-j-1,-n-1)*(-1)^(n-j)=A094816号(n,k)和{j=0..n}S1(k,j)*C(-j-1,-n-1)*(-1)^(n-j)=217700加元(n,k)

斯特灵集数S2A048993号

Sum_{j=0..n}S2(j,k)*C(-j,-n)=S2(n-1,k-1),其中S2(-1,-1)=1求和{j=0..n}S2(j,k)*C(-j,-n)*(-1)^(n-j)=A269952型(n,k)=S2(n+1,k+1)-S2(n,k+1)求和{j=0..n}S2(j,k)*C(-j-1,-n-1)=A105794号(n,k)求和{j=0..n}S2(j,k)*C(-j-1,-n-1)*(-1)^(n-j)=S2(n+1,k+1)求和{j=0..n}S2(k,j)*C(-j-1,-n-1)*(-1)^(n-j)=A271702型(n,k)

无符号Lah数字LA271703型

和{j=0..n}L(j,k)*C(-j,-n)=A216154型(n,k)求和{j=0..n}L(j,k)*C(-j,-n)*(-1)^(n-j)=A271704型(n,k)和{j=0..n}L(j,k)*C(-j-1,-n-1)=A271706型(n,k)求和{j=0..n}L(j,k)*C(-j-1,-n-1)*(-1)^(n-j)=A271705型(n,k)

欧拉数E1A173018型

和{j=0..n}E1(j,k)*C(-j,-n)=A271698型(n,k)和{j=0..n}E1(j,k)*C(-j-1,-n-1)=A271697型(n,k)和{j=0..n}E1(j,k)*C(-j-1,-n-1)*(-1)^(n-j)=A272098型(n,k)