#DOMINO:生成函数的计算和推测包#Doron写的Dimer问题和推广#Zeilberger,天普大学#上次更新:1997年10月10日#最新版本可从获取#http://www.math.temple.edu/~泽尔伯格#要使用它,请先获取它,称之为“DOMINO”,然后进入Maple#通过键入“maple”。然后,在Maple中键入`read DOMINO`#并通过执行ezra()和ezra(function_name)查看帮助文件;#芬德雷克(a,b,f)#通过经验发现普通线性递归的程序#多项式系数。输入是以列表形式给出的序列f#和a:=系数的最大程度#和b:=重复的顺序。输出是n中的运算符#和E,其中E是前进单位偏移:Ef(n):=f(n+1)。#newts(pol,x):给出根pol(x)的幂和列表#从p1到p(pol(x)度),使用newtson方程#newt(pol,x,R):给出根pol(x)的幂和列表#从p_1到p_R,使用newtson方程#pol_in_terms_of_p(resh,x):给定幂和列表[p_1,..,p_deg]#找到x中的一元多项式,其根是的幂和#decomp(pol,x):给定x中的多项式,pol决定它是否为#二次多项式pol1与另一pol的代数积#pol2。如果是,则返回pol1和pol2;如果不是,则返回0#decompx(pol,N,x):给定变量N和x中的多项式#研究当被视为N中的多项式时#它可以写成alg。产品”(即其根#其“因子”的根集合的直积)#以N表示的二次方#形式为N^2+2*a*x*N-1,其中a是(代数)纯数#N中的另一个多项式带有系数。它们是x中的多项式打印(`DOMINO:DIMER和更通用的处理包`):打印(“问题”):印刷品(1997年10月10日版):打印(`作者:Doron Zeilberger(zeilberg@math.temple.edu).`):print(`最新版本始终可从以下位置获得`):打印(`http://www.math.temple.edu/~zeilberg`):print(`有关过程列表,请键入ezra(),以获取帮助`):打印(`a specific procedure,type ezra(procedure_name)`):ezra:=进程()如果args=NULL,则打印(`包含以下过程:`):打印(`algprod,decompo,decompx,dimer,DimerBox,dimergf,`):打印(`DimerSequence,Finch,findrec`):打印(`Ge3D,Gm,Glam,Kast,MonoDimerrect,MonoDimerGe,MonoDimerSequence`):打印(`monodimegf,newt,newts,pol-in_terms_of_p`):打印(`ratios1,rechen,trimergf`):打印(``):print(`特定过程,键入ezra(procedure_name)`):图1:如果nops([args])=1且op(1,[args]])=`Finch`,则print(`Finch(N):查找描述路径数的序列`):打印(`n=0,1,2,…,n.`的2n x 2n x 2 n方块的平铺):print(`它还打印出中间值。警告:它是`):打印(“非常慢!它回答了Steve Finch的一个问题”):打印(`到Domino邮件组`):图1:如果nops([args])=1且op(1,[args]])=`DimerBox`,则print(`DimerBox(a,b,c):覆盖an的方式数`):打印(`a by b by c box with domino tile`):图1:如果nops([args])=1且op(1,[args]])=`Ge3D`,则print(`Ge3D(lam,x,y,z)给定一块3D板,其中`中的长度):打印(`y轴方向描述,逐层,`):打印(`根据列表lam`):print(`(具有lam_i[j]-min(lam)={0,1,2}的属性`):print(`查找多米诺骨牌的所有重量之和`):打印(`重量为x^(x方向平铺)*`):打印(`y^(y方向的平铺)*z^(z方向的平布)`):图1:如果nops([args])=1且op(1,[args]])=`MonoDimerSequence`,则print(`MonoDimerSequence(L):查找其(n)^项为`的序列:print(`是n乘以n平方的单体二聚体瓷砖的数量`):图1:如果nops([args])=1且op(1,[args]])=`DimerSequence`,则print(`DimerSequence(L):查找其(n)^项为`的序列:print(`是2n乘以2n平方的二聚体数`):图1:如果nops([args])=1且op(1,[args')=`MonoDimerrect(m,n)`,则print(`MonoDimerrect(L):查找数字`):打印(“m×n平方的单体二聚体瓷砖”):图1:如果nops([args])=1且op(1,[args]])=`MonoDimerGe`,则print(`MonoDimerGe(lam,x,y)给定整数的向量lam,带`):print(`lami-min(lam)={0,1,2}的属性,查找`):打印(“该板的单体-双分子瓷砖数量”):打印(`weighted vy x^(#垂直二聚体)*y^(#单体)`):图1:如果nops([args])=1且op(1,[args]])=`Kast`,则print(`Kast(n,x):给定一个整数n,经验得出`):print(`Kasteleyn的n乘n二聚体数量公式`):print(`代数字段Q(alpha)的因子,其中`):print(`alpha是统一的原始根`):图1:如果nops([args])=1且op(1,[args]])=`ratios1`,则打印(`比率1(pol,t,L):`):print(`给定一个以t为单位的多项式,它决定`的多重性):打印(“根的比率(如果它们都是真实的)”):打印(“如果所有重数都是1,那么二聚体奇迹会出现”):打印(`不会发生,但如果你得到2分或以上,那就有希望`):打印(“二聚体奇迹将发生”):打印(`精度为1/10^(L+3)`):图1:如果nops([args])=1且op(1,[args]])=`trimergf`,则打印(`trimergf(m,t,x):`):print(`计算生成函数,t和x中的有理函数,`):打印(`sum(三聚体(m,n)*t^n,n=0..无穷大),其中`):print(`trimer(m,n)是瓷砖的重量枚举器,按`):打印(“m x n矩形板的三倍,按重量计算”):打印(`x^(垂直三聚体的数量)`):图1:如果nops([args])=1并且op(1,[args])=`monodimerargf`,则打印(`单二聚体gf(m,t,x,y):`):print(`计算生成函数,t、x和y中的有理函数`):打印(`sum(单二聚体(m,n)*t^n,n=0..无穷大),其中`):print(`单二聚体(m,n)是单体瓷砖的重量枚举器`):打印(`和`的二聚体):打印(“m x n矩形板,按重量计算”):打印(`y^(单体数量)*x^(垂直二聚体数量)`):图1:如果nops([args])=1且op(1,[args')=`dimergf`,则打印(`dimergf(m,t,x):`):print(`计算生成函数,t和x中的有理函数`):打印(`总和(二聚体(m,n)*t^n,n=0..无穷大),其中`):print(`二聚体(m,n)是`的二聚体瓷砖的重量枚举器):打印(“m x n矩形板,按重量x ^(垂直二聚体的数量)”):图1:如果nops([args])=1,op(1,[args])=`recin`,则打印(`rechen(m,N,N,x):`):print(`计算序列a_m(n)满足的递归`):print(`:=二聚体(m,n),即`的二聚体tilings的g.f.):打印(“m x n矩形板”):图1:如果nops([args])=1且op(1,[args')=`二聚体',则打印(`二聚体(m,n,x):`):print(`根据权重计算权重枚举器`):打印(`x^(垂直多米诺骨牌的数量)所有瓷砖的集合):打印(“m x n矩形板”):图1:如果nops([args])=1且op(1,[args]])=`Glam`,则print(`Glam(lam,x):给定列表lam=[lam_1,…,lam_n]`):print(`根据权重计算权重枚举器`):打印(`x^(垂直多米诺骨牌的数量)所有瓷砖的集合):打印(`垂直高度为lam_1,…,lam_n`的直方图'):图1:如果nops([args])=1且op(1,[args]])=`Gm`,则print(`Gm(lam,x):给定递减列表(分区)lam=[lam_1,…,lam_n]`):print(`根据权重计算权重枚举器`):打印(`x^(垂直多米诺骨牌的数量)所有瓷砖的集合):打印(`水平长度为lam_1,…,lam_n`的直方图'):图1:如果nops([args])=1而op(1,[args]])=`解压缩',则print(`decompx(pol,N,x):给定变量N和x`中的多项式):print(`当被视为N中的多项式时,调查是否:print(`它可以写成alg.product(即它的根是`):印刷品(`其“因子”的根集合的直接乘积'):print(“N中的二次曲线”):print(`形式为N^2+2*a*x*N-1,其中a是(代数)纯数`):print(`和N中的另一个多项式,其系数为x中的多项式`):图1:如果nops([args])=1且op(1,[args]])=`decomp`,则print(`decomp(pol,x):给定x中的多项式,pol决定它是否为`):print(`二次多项式pol1和另一个pol`的代数积'):打印(`pol2。如果是,则返回pol1和pol2;如果不是,则返回0`):图1:如果nops([args])=1,op(1,[args]])=`pol_in_terms_of_p`,则print(`pol_in_terms_of_p(resh,x):给定幂和列表[p_1,..,p_deg]`):print(`查找x中的一元多项式,其根是`的幂和):图1:如果nops([args])=1且op(1,[args]])=`newts`,则print(`newts(pol,x):给出根pol(x)`的幂和列表:print(`从p_1到p_(pol(x)的度数),使用newtson方程`):图1:如果nops([args])=1且op(1,[args]])=`newt`,则print(`newt(pol,x,R):给出根pol(x)`的幂和列表:print(`从p_1到p_R,使用newtson方程`):图1:如果nops([args])=1且op(1,[args]])=`algprod`,则print(`algprod(P,Q,x):在x中输入多项式P和Q,并输出`):print(`a poly R,in x,of deg(P)deg(Q),其根都是`):打印(“P和Q根的可能乘积”):图1:如果nops([args])=1且op(1,[args]])=`findrec`,则打印(`findrec(DEG,ORDER,f,N,N)empir。找到一个ordi。带“)的线性递归:print(`多项式系数。输入是以列表形式给出的序列f `):print(`STARTING at f[1],即不考虑f[0]`):打印(`其中DEG:=系数的最大程度`):print(` and ORDER:=重复的顺序。输出是运算符`):print(`在n和n中,其中n是前进单位偏移:Nf(n):=f(n+1).`):print(`例如findrec(0,2,[1,1,2,3,5,8,13,21,34],N,N)应该产生`):打印(`N^2-N-1和findrec(1,1,[1,2,5,14,42132429],N,N)应产生`):打印(`(n+2)*n-(4*n+2。如果没有足够的数据,您将得到一个`):print(`一条错误消息。如果没有运算符,您将得到0`):图1:结束时间:pashet:=进程(p,N)局部i,gu1,gu,p1,ra:p1:=正常(p):gu1:=分母(p1):ra:=度(gu1,N):p1:=子(n=n+ra,数字(p1)):p1:=展开(p1):gu:=0:对于i从0到度(p1,N)dogu:=gu+因子(系数(p1,N,i))*N^i:日期:返回(gu):结束时间:#芬德雷克(a,b,f)#通过经验发现普通线性递归的程序#多项式系数。输入是以列表形式给出的序列f#和a:=系数的最大程度#和b:=复发的顺序。输出为线性#n中的递归算子#其中N是正向单位移位:Ef(N):=f(N+1)。findrec:=proc(度,阶,f,N,N)本地操作,var,eq,a,i,j,n0,kv,var1,eq1,mu:如果(1+度)*(1+阶)+2+阶>nops(f),则错误(`数据不足,无法重复出现顺序`,order,`degree`,degree):图1:操作:=0:变量:={}:对于i从0到ORDER do对于从0到DEGREE的j doope:=ope+a[i,j]*n^j*n^i:var:=var联合{a[i,j]}:日期:日期:等式:={}:对于n0,从1到(1+度)*(1+阶)+2 do等式1:=0:对于i从0到ORDER doeq1:=eq1+subs(n=n0,系数(ope,n,i))*op(n0+i,f):日期:eq:=eq联合{eq1}:日期:var1:=求解(eq,var):kv:={}:对于i从1到nops(var1)domu:=op(i,var1):如果op(1,mu)=op(2,mu),则kv:=kv联合{op(1,mu)}:图1:日期:ope:=子(var1,ope):如果nops(kv)>1,则print(`Overdetermined,DEGREE或ORDER太高`):print(`输出不是最小可能运算符`):图1:对于i从1到nops(kv)doope:=变电站(op(i,kv)=1,ope):日期:帕谢(ope,N):结束时间:#algprod(P,Q,x):x中的输入多项式P和Q,以及输出#度为deg(P)deg(Q)的多边形R(x),其根均为#P和Q根的可能乘积algprod:=过程(P,Q,x)本地degp、degq、deg、pol、var、eq、a、i、mu、lu、reshp、reshq、xp、xq、pol1、i1、i2:degp:=度数(P,x):degq:=度(Q,x):度:=度*度:刷新:=[]:对于i从0到degp-1 do重新映射:=[op(重新映射),x^i]:日期:μ:=P/系数(P,x,degp):mu:=x^degp-mu:reshp:=[op(reshp),mu]:lu:=亩:对于i从1到deg-degp dolu:=展开(x*lu):lu:=子(x^(degp)=μ,lu):lu:=展开(lu):reshp:=[op(reshp),lu]:日期:重新排序:=[]:对于i从0到degq-1 doreshq:=[op(reshq),x^i]:日期:μ:=Q/系数(Q,x,degq):μ:=x^degq-mu:reshq:=[op(reshq),mu]:lu:=亩:对于i从1到deg-degq dolu:=展开(x*lu):lu:=子(x^(degq)=μ,lu):lu:=展开(lu):reshq:=[op(reshq),lu]:日期:reshp:=子(x=xp,reshp):reshq:=子(x=xq,reshq):pol:=0:pol1:=0:等式:={}:变量:={}:对于i从0到deg dopol:=pol+a[i]*x^i:var:=var联合{a[i]}:pol1:=展开(pol1+a[i]*op(i+1,reshp)*op(i+1,reshq)):日期:对于从0到degp-1的i1 do对于i2从0到degq-1 doeq:=eq联合{系数(系数(pol1,xp,i1),xq,i2)}:日期:日期:var:=求解(eq,var):pol:=子(var,pol):法线(pol/coeff(pol,x,degree(pol、x)):结束时间:蝾螈:=proc(pol,x)本地mu,deg,resh,pol1,r,i:度:=度(pol,x):pol1:=pol/系数(pol,x,deg):pol1:=展开(pol1):重新:=[-系数(pol1,x,deg-1)]:对于r从2到deg doμ:=0:对于i从1到r-1做mu:=mu-coeff(pol1,x,deg-i)*op(r-i,resh):日期:mu:=mu-r*系数(pol1,x,deg-r):mu:=展开(mu):resh:=[op(resh),mu]:日期:刷新:结束时间:蝾螈:=程序(pol,x,R)本地mu,deg,resh,pol1,r,i:如果R<=度(pol,x),则返回([op(1..R,蝾螈(pol,x))]):图1:度:=度(pol,x):pol1:=pol/系数(pol,x,deg):pol1:=展开(pol1):刷新:=蝾螈(pol,x):对于从deg+1到r do的rμ:=0:对于i从1到deg domu:=mu-coeff(pol1,x,deg-i)*op(r-i,resh):日期:mu:=展开(mu):resh:=[op(resh),mu]:日期:刷新:结束时间:#pol_in_terms_of_p(resh):给定幂和列表[p_1,..,p_deg]#求其根为幂和的一元多项式pol_in_terms_of_p:=进程(刷新,x)局部pol,mu,deg,r,i:度:=无(刷新):pol:=x^deg:r从1到deg doμ:=-op(r,刷新):对于i从1到r-1做mu:=mu-coeff(pol,x,deg-i)*op(r-i,resh):日期:mu:=mu/r:mu:=展开(mu):pol:=pol+mu*x^(deg-r):日期:波尔:结束时间:解压缩:=进程(pol,x)局部i,deg,resh1,resh2,resh,a,pol1,pol2,eq,var,resh2a,eq1:度:=度(pol,x):度:=度/2:如果不是类型(deg,integer),则返回(0):图1:pol1:=x^2+2*a*x-1:变量:={a}:resh1:=纽特(pol1,x,2*度):刷新:=蝾螈(pol,x):刷新2:=[]:对于i从1到2度doresh2:=[op(resh2),op(i,resh)/op(i,remh1)]:日期:pol2:=pol_in_terms_of_p([op(1..deg,resh2)],x):resh2a:=蝾螈(pol2,x,2*deg):等式:={}:对于i从1到deg do公式1:=正常(op(i,resh2)-op(i,esh2a)):如果eq1<>0,则错误(`Something is wrong`):图1:日期:对于i从deg+1到2*deg do公式1:=正常(op(i,resh2)-op(i,esh2a)):eq:=eq联合{eq1}:日期:var:=求解(eq,var):如果var=NULL,则返回(0):图1:pol1:=子变量(var,pol1):pol2:=子变量(var,pol2):pol1,pol2:结束时间:反编译:=进程(pol,N,x)局部i1,i,mu,deg,resh1,resh2,resh,a,pol1,pol2,eq,var,resh2a,eq1:度:=度(pol,N):度:=度/2:如果不是类型(deg,integer),则返回(0):图1:pol1:=N^2+2*a*x*N-1:变量:={a}:resh1:=新(pol1,N,2*度):刷新:=蝾螈(pol,N):刷新2:=[]:对于i从1到2度doresh2:=[op(resh2),rem(op(i,resh),op(i、resh1),x)]:日期:等式:={}:因为我从1到3做mu:=op(i,resh2):mu:=展开(数字(正常(mu)):对于从0到度(mu,x)的i1,doeq:=eq联合{numer(正常(系数(mu,x,i1)))=0}:日期:日期:var:=求解(eq,var):如果var=NULL,则返回(0):图1:var(变量):结束时间:Glam:=过程(lam,x)局部i,i1,mu:选项记住:对于i从1到nops(lam)do如果op(i,lam)<0,则返回(0):图1:日期:如果nops(lam)=0,则返回(1):图1:如果op(1,lam)=0,则返回(Glam([op(2..nops(lam),lam)],x)):图1:对于i从1到nops(lam)-1而op(i,lam)那么是op(i,lam)返回(0):图1:日期:如果op(nops(lam),lam)<=0,则返回(0):图1:1:结束时间:first_big_jump:=进程(lam)本地i:对于i从1到nops(lam)-1 do如果op(i,lam)-op(i+1,lam返回(i):图1:日期:如果op(nops(lam),lam)>=2,则返回(nops(lam)):图1:nops(lam)+1:结束时间:first_big_steady_jump:=进程(lam)本地i:如果nops(lam)=1,则如果op(1,lam)>=2,则返回(1):其他的返回(2):图1:图1:如果op(1,lam)-op(2,lam返回(1):图1:对于i,从2到nops(lam)-1 do如果op(i,lam)-op(i+1,lam返回(i):图1:日期:如果op(nops(lam),lam)>=2并且op(nobs(lam返回(nops(lam)):图1:nops(lam)+1:结束时间:beg_staircase:=进程(lam,i)本地j:对于从i-1到-1 do的j如果op(j+1,lam)=op(j,lam),则返回(j+1):图1:日期:1:结束时间:chop:=进程(lam)本地i,lamd:lamd:=[]:对于i从1到nops(lam)do如果op(i,lam)>0,则lamd:=[op(lamd),op(i,lam)]:图1:日期:拉姆德:结束时间:Gm:=过程(lam,x)局部r、i、j、lam1、n、lam2:选项记住:n: =nops(lam):如果nops(lam)=0,则返回(1):图1:i: =first_big_steady_jump(拉姆):如果i<=n,则如果i=n,则lam1:=[操作(1..n-1,lam),操作(n,lam)-2]:图1:如果i>1,则lam1:=[op(1..i-1,lam),op(i,lamlam2:=[op(1..i-2,lam),op(i-1,lamlam1:=切块(lam1):lam2:=切块(lam2):返回(展开(Gm(lam1,x)+x*Gm(lam2,x)):其他的lam1:=[op(i,lam)-2,op(i+1…n,lamlam1:=切块(lam1):返回(展开(Gm(lam1,x)):图1:图1:i: =first_big_jump(lam):如果i<=n,则lam1:=[op(1..i-1,lam),op(i,lamj: =beg_staircase(lam,i):如果j=1,则lam1:=切块(lam1):返回(Gm(lam1,x)):图1:lam2:=[op(1..j-2,lam),op(j-1,lam,-1]:对于r从j到i-1 dolam2:=[op(lam2),op(r,lam)-2]:日期:lam2:=[op(lam2),op(i,lam)-1,op(i+1…n,lamlam1:=斩波(lam1):lam2:=切块(lam2):返回(展开(Gm(lam1,x)+x^(i-j+1)*Gm(lam2,x)):图1:j: =beg_staircase(lam,n):如果j=1,则返回(0):图1:lam2:=[op(1..j-2,lam),op(j-1,lam,-1]:对于r从j到n-1 dolam2:=[op(lam2),op(r,lam)-2]:日期:lam2:=[op(lam2),op(n,lam)-1]:lam2:=切块(lam2):返回(x^(n-j+1)*Gm(lam2,x)):结束时间:#Ge(lam)喜欢Glam,但现在lambda只允许有#lami-min(lam)={0,1,2}的性质Ge:=进程(拉姆,x)本地i、n、mini、bet、maxi、lam1、lam2:选项记住:n: =nops(lam):如果nops(lam)=0,那么返回(1):图1:当op(i,lam)=0 do时,i从1到n日期:如果i=n+1,则返回(1):图1:最小值:=最小值(op(lam)):如果mini<0,则返回(0):图1:下注:=[]:对于i从1到n do下注:=[op(bet),op(i,lam)-mini]:日期:最大值:=最大值(op(bet)):如果maxi>2,则错误(`Wrong input`):图1:如果maxi=2,则当op(i,bet)<2 do时,i从1到n日期:lam1:=[op(1..i-1,lam),op(i,lam如果i=n或op(i+1,bet)<2,则返回(Ge(lam1,x)):其他的lam2:=[op(1..i-1,lam),op(i,lam返回(展开(Ge(lam1,x)+x*Ge(lam2,x)):图1:图1:如果maxi=1,那么当op(i,bet)<1 do时,i从1到n日期:lam1:=[op(1..i-1,lam),op(i,lam如果i=n或op(i+1,bet)<1,则返回(Ge(lam1,x)):其他的lam2:=[op(1..i-1,lam),op(i,lam返回(展开(Ge(lam1,x)+x*Ge(lam2,x)):图1:图1:如果maxi=0,则lam1:=[op(1..n-1,lam),op(n,lam,-2]:如果nops(lam)=1,则返回(Ge(lam1,x)):图1:lam2:=[op(1..n-2,lam),op(n-1,lam返回(展开(Ge(lam1,x)+x*Ge(lam2,x)):图1:结束时间:redu:=进程(重新)本地i,katan,刷新1:卡坦:=最大值(op(resh)):如果katan>0或katan<-2,则错误(“出现问题”):图1:刷新1:=[]:对于i从1到nops(resh)doresh1:=[op(resh1),op(i,resh)-katan]:日期:resh1,-卡坦:结束时间:eq:=进程(resh,t,x,A)局部i,eq,var,resh1,resh2,n,gu:n: =nops(重新):对于i从1到nops(resh),而op(i,resh)<>0 do日期:resh1:=[op(1..i-1,resh),op(i,reshgu:=redu(resh1):resh1:=gu[1]:eq:=A[op(resh)]-A[op(rech1)]*t^gu[2]:var:={A[op(resh1)]}:如果我{}做mu:=op(1,var减去RESHeq):gu:=等式([op(mu)],t,x,A):eq:=eq联合{gu[1]}:var:=var联合gu[2]:RESHeq:=RESHeq联合{mu}:日期:var:=求解(eq,var):gu:=子变量(var,A[seq(0,i=1..m)]):正常(gu):结束时间:eqdm:=过程(重新,t,x,y,A)局部i,eq,var,resh0,resh1,resh2,n,gu:n: =nops(重新):对于i从1到nops(resh),而op(i,resh)<>0 do日期:resh0:=[op(1..i-1,resh),op(i,reshresh1:=[op(1..i-1,resh),op(i,reshgu:=redu(resh1):resh1:=gu[1]:eq:=A[op(resh)]-A[op(rech1)]*t^gu[2]:var:={A[op(resh1)]}:gu:=redu(resh0):resh0:=古[1]:eq:=eq-A[op(resh0)]*t^gu[2]*y:var:=var联合{A[op(resh0)]}:如果我{}做mu:=op(1,var减去RESHeq):gu:=等分([op(mu)],t,x,y,A):eq:=eq联合{gu[1]}:var:=var联合gu[2]:RESHeq:=RESHeq联合{mu}:日期:var:=求解(eq,var):gu:=子变量(var,A[seq(0,i=1..m)]):正常(gu):结束时间:redu3:=进程(重新)本地i,katan,resh1:卡坦:=最大值(op(resh)):如果katan>0或katan<-3,则错误(`Something is wrong`):图1:刷新1:=[]:对于i从1到nops(resh)doresh1:=[op(resh1),op(i,resh)-katan]:日期:resh1,-卡坦:结束时间:方程3:=过程(重新,t,x,A)局部i,eq,var,resh1,resh2,n,gu:n: =无(刷新):对于i从1到nops(resh),而op(i,resh)<>0 do日期:resh1:=[op(1..i-1,resh),op(i,reshgu:=redu3(resh1):resh1:=gu[1]:eq:=A[op(resh)]-A[op(rech1)]*t^gu[2]:var:={A[op(resh1)]}:如果我{}做mu:=op(1,var减去RESHeq):gu:=等式3([op(mu)],t,x,A):eq:=eq联合{gu[1]}:var:=var联合gu[2]:RESHeq:=RESHeq联合{mu}:日期:var:=求解(eq,var):gu:=子变量(var,A[seq(0,i=1..m)]):正常(gu):结束时间:kats:=进程(mis,L):trunc(mis*10^L)/10^L:结束时间:比率1:=过程(pol,t,L)本地ku、gu、mu、i、j、pol1、lu、ru:readlib(realroot):ku:=实根(pol,1/10^(L+3)):如果nops(ku)然后是jgu:=[op(gu),kats(op(i,mu)/op(j,mu,L-2)]:图1:日期:日期:pol1:=0:对于i从1到nops(gu)dopol1:=pol1+t^op(i,gu):日期:mu:=[]:对于i从1到nops(pol1)doru:=op(1,op(i,pol1)):如果ru=t,则ru:=1:图1:mu:=[op(mu),ru]:日期:排序(mu):结束时间:#Kast(n,x):给定一个整数n,经验发现#n乘n二聚体数的Kasteleyn公式#对代数域Q(alpha)进行因子分解,其中#阿尔法是统一的原始根Kast:=进程(n,x)局部p、Z、t:带有(数字理论):p: =分圆(n+1,t):Z: =根(p):因子(二聚体(n,n,x),Z);结束时间:#MonoDimerGe(lam,x,y)给定一个整数向量lam,其中#lami-min(lam)={0,1,2}的属性将查找#该板的单体二聚体瓷砖数量#加权vyx^(#垂直二聚体)*y^(*单体)单二聚体Ge:=过程(lam,x,y)本地i、n、mini、bet、maxi、lam1、lam2、lam0:选项记住:n: =nops(lam):如果nops(lam)=0,那么返回(1):图1:当op(i,lam)=0 do时,i从1到n日期:如果i=n+1,那么返回(1):图1:最小值:=最小值(op(lam)):如果mini<0,则返回(0):图1:下注:=[]:对于i从1到n do下注:=[op(bet),op(i,lam)-mini]:日期:最大值:=最大值(op(bet)):如果maxi>2,则错误(`Wrong input`):图1:如果maxi=2,则当op(i,bet)<2 do时,i从1到n日期:lam1:=[op(1..i-1,lam),op(i,lamlam0:=[op(1..i-1,lam),op(i,lam如果i=n或op(i+1,bet)<2,则返回(展开(MonoDimerGe(lam1,x,y)+y*MonoDimarGe(lam0,x,y)):其他的lam2:=[op(1..i-1,lam),op(i,lam返回(展开(单二聚体锗(lam1,x,y)+x*MonoDimerGe(lam2,x,y)+y*MonoDimerGe图1:图1:如果maxi=1,则当op(i,bet)<1 do时,i从1到n日期:lam0:=[操作(1.i-1,lam),操作(i,lam)-1,操作(i+1.n,lam)]:lam1:=[op(1..i-1,lam),op(i,lam如果i=n或op(i+1,bet)<1,则返回(展开(MonoDimerGe(lam1,x,y)+y*MonoDimarGe(lam0,x,y)):其他的lam2:=[op(1..i-1,lam),op(i,lam返回(展开(单二聚体锗(lam1,x,y)+x*MonoDimerGe(lam2,x,y)+y*MonoDimerGe图1:图1:如果maxi=0,则lam0:=[op(1..n-1,lam),op(n,lam,-1)]:lam1:=[op(1..n-1,lam),op(n,lam,-2]:如果nops(lam)=1,则返回(展开(MonoDimerGe(lam1,x,y)+y*MonoDimarGe(lam0,x,y)):图1:lam2:=[op(1..n-2,lam),op(n-1,lam返回(展开(单二聚体锗(lam1,x,y)+x*MonoDimerGe(lam2,x,y)+y*MonoDimerGe图1:结束时间:一元修正:=过程(m,n)本地i:单二聚体Ge([seq(m,i=1..n)],1,1):结束时间:单二聚体序列:=过程(L)当地gu,i:gu:=[]:对于i从1到L dogu:=[op(gu),单二修正(i,i)]:#打印(gu):日期:古:结束时间:二元序列:=过程(L)本地gu,i:gu:=[]:对于i从0到L dogu:=[op(gu),二聚体(2*i,2*i、1)]:#打印(gu):日期:古:结束时间:ez:=proc():打印(`Uptsiot(lam,x,y,z,j,i),DimerBox(a,b,c)`):结束:#Uptsiot(lam,x,y,z,j,i)给出列表lam#和一排(j,i)(第j层第i项)#发出第一个偏离位置的信号#最小值为2,列出结果#一组较小的lamdas,前缀为方向Uptsiot:=进程(lam,x,y,z,j,i)本地lamx、lamy、lamz、k、n、gu、lam2、lamj1、lamj、lamj1n:k: =无(拉姆):如果k=0,则返回({}):图1:n: =nops(op(1,lam)):gu:={}:lamj:=op(j,lam):如果op(i,lamj)>=2,则lamjn:=[op(1..i-1,lamj),op(i,lamj)-2,op(i+1..nops(lamj,lamj])]:lamy:=[op(1..j-1,lam),lamjn,op(j+1..nops(lam)、lam)]:gu:=gu联合{[y,lamy]}:图1:如果我=op(i,lamj)那么lamjn:=[op(1..i-1,lamj),op(i,lamj)-1,op(i+1,lamj-1)-1,op(i+2..nops(lamjlamx:=[op(1..j-1,lam),lamjn,op(j+1..k,lamgu:=gu并集{[x,lamx]}:图1:图1:如果j=op(i,lamj)那么lamjn:=[op(1.i-1,lamj),op(i,lamj)-1,op(i+1.nops(lamj),lamj)]:lamj1n:=[op(1..i-1,lamj1),op(i,lamj)-1,op(i+1..nops(lamjl),lamj1)]:lamz:=[op(1..j-1,lam),lamjn,lamj1n,op(j+2..k,lamgu:=gu联合{[z,lamz]}:图1:图1:古:结束时间:#Gek(lam,x,y)喜欢Glam,但现在lambda只允许有#lami-min(lam)={0,1,2}的性质#重量为x^(x方向的瓷砖)*#y^(沿y方向平铺)Gek:=进程(lam,x,y)本地i、n、mini、bet、maxi、lam1、lam2:选项记住:n: =nops(lam):如果nops(lam)=0,则返回(1):图1:当op(i,lam)=0 do时,i从1到n日期:如果i=n+1,则返回(1):图1:最小值:=最小值(op(lam)):如果mini<0,则返回(0):图1:下注:=[]:对于i从1到n do下注:=[op(bet),op(i,lam)-mini]:日期:最大值:=最大值(op(bet)):如果maxi>2,则错误(`Wrong input`):图1:如果maxi=2,则当op(i,bet)<2 do时,i从1到n日期:lam1:=[op(1..i-1,lam),op(i,lam如果i=n或op(i+1,bet)<2,则返回(y*Gek(lam1,x,y)):其他的lam2:=[op(1..i-1,lam),op(i,lam返回(展开(y*Gek(lam1,x,y)+x*Gek图1:图1:如果maxi=1,则当op(i,bet)<1 do时,i从1到n日期:lam1:=[操作(1.i-1,lam),操作(i,lam)-2,操作(i+1.n,lam)]:如果i=n或op(i+1,bet)<1,则返回(y*Gek(lam1,x,y)):其他的lam2:=[操作(1.i-1,lam),操作(i,lam)-1,操作(i+1,lam)-1,操作(i+2.n,lam)]:返回(展开(y*Gek(lam1,x,y)+x*Gek图1:图1:如果maxi=0,则lam1:=[op(1..n-1,lam),op(n,lam,-2]:如果nops(lam)=1,则返回(y*Gek(lam1,x,y)):图1:lam2:=[op(1..n-2,lam),op(n-1,lam返回(展开(y*Gek(lam1,x,y)+x*Gek图1:结束时间:Metsa:=进程(赌注,最大值)局部n,k,i,j:k: =nops(赌注):n: =nops(op(1,bet)):对于从1到k的j do对于i从1到n do如果op(i,op(j,bet))=maxi,则返回(j,i):图1:日期:日期:结束时间:#Ge3D(lam,x,y,z)给定一个3D板,其中#y轴方向逐层描述,#根据列表列表lam#(具有lami[j]-min(lam)={0,1,2}的属性)#求多米诺骨牌的所有重量之和#权重为x^(x方向上的瓦片)*#y^(y方向平铺)*z^(z方向平铺Ge3D:=进程(lam,x,y,z)局部i、n、mini、bet、maxi、kak、alph、r1、mu、j、k、gu、ku、i1、j1、lu、k1:选项记住:如果nops(lam)=0,则返回(1):图1:k: =nops(lam):n: =nops(op(1,lam)):因为我从2岁到k岁如果nops(op(i,lam))<>n,则错误(`第一个输入的所有成员必须是相同长度的列表`):图1:日期:ku:=0:对于从1到k的j do对于i从1到n doku:=ku+op(i,op(j,lam)):日期:日期:如果ku=0,则返回(1):图1:mini:=最小(op(op(1,lam)):对于k1从2到nops(lam)dokak:=最小值(op(op(k1,lam)):如果kak那么最大值最大值:=千卡:图1:日期:如果maxi>2,则错误(`Wrong input`):图1:如果maxi=2,则lu:=梅萨(赌注,最大值):j1:=lu[1]:i1:=lu[2]:gu:=Uptsiot(lam,x,y,z,j1,i1):μ:=0:r1从1到nops(gu)domu:=mu+op(r1,gu)[1]*Ge3D(op(r1,gu)[2],x,y,z):日期:回报(扩大(亩)):图1:如果maxi=1,则lu:=梅萨(赌注,最大值):j1:=lu[1]:i1:=lu[2]:gu:=上限(lam,x,y,z,j1,i1):μ:=0:r1从1到nops(gu)domu:=mu+op(r1,gu)[1]*Ge3D(op(r1,gu)[2],x,y,z):日期:回报(扩大(亩)):图1:如果maxi=0,则gu:=上限(lam,x,y,z,1,1):μ:=0:r1从1到nops(gu)domu:=mu+op(r1,gu)[1]*Ge3D(op(r1,gu)[2],x,y,z):日期:回报(扩大(亩)):图1:结束时间:#DimerBox(a,b,c):覆盖#带多米诺牌的a by b by c盒子DimerBox:=进程(a,b,c)局部lam,i,j:lam:=[序列([seq(a,i=1..b)],j=1..c)]:Ge3D(lam,1,1,1):结束时间:#芬奇(N):查找描述方法数量的序列#在n=0,1,2。。。,N个#它还打印出中间答案芬奇:=进程(N)局部i,lu:lu:=[]:对于i从1到N dolu:=[op(lu),DimerBox(2*i,2*i和2*i)]:打印(lu):日期:卢:结束时间: