版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、多项式系统编程说明书所有“数学机械化与自动推理平台”软件组2003年5月目 录1、针对一般系数多项式的操作1.1、多项式的构造1.2、获取多项式信息的基本操作1.3、其它基本操作1.4、基本算术运算1.5、其它运算1.6、释放内存的操作2、针对整系数多项式的操作3、常用的类型定义,常数定义和宏函数 4、编程时的一些注意事项4.1、关于破坏性的函数4.2、关于变元序4.3、关于多项式的遍历方法*有关文件:有关多项式的程序代码主要位于以下文件中: pol.h,pol_,pol_,pol_,pol_。有关类名:TRIPoly(多项式类),TDITerm(项类)。数据结构:多项式类的数据结构如下:TV
2、ariable * var; 变元指针,表示多项式默认的主变元。TNumber c; TNumber型变量,对于非常数多项式,c=0;对于常数多项式,c表示常数项。TDITerm * ups; 项的指针,多项式的各项按默认主变元var的次数从高到低排列,ups指向第一项,即次数最高的一项,各项的系数再按此规则递归表示。TPolyRC * RefCount; 引用计数指针,指向引用计数存储区中的某个存储块,该存储块中存放着该多项式的引用数。注:TPolyRC是一个用于多项式引用计数器管理的类。项类的数据结构如下:unsigned short deg; 整型变量,用来表示该项的次数。TRIPoly
3、 * p; 多项式指针,用来表示该项的系数,它又是一个多项式。TDITerm * nx; 项的指针,用来指向项的链接表中的下一个项。1、针对一般系数多项式的操作1.1、多项式的构造:TRIPoly();TRIPoly * pzero();构造零多项式TRIPoly(int n);用一个普通整数(int类型)n构造常数多项式TRIPoly(TNumber n);TRIPoly(TNumber * n);用一个数(TNumber类型)n构造常数多项式#define get_n(n) (new TRIPoly(TNumber(n)#define get_nb(n) (TRIPoly(TNumber(
4、n)用一个数(可以是任意类型)n构造常数多项式TRIPoly(TVariable * v, unsigned short * d);TRIPoly(TVariable * v, unsigned short d);TRIPoly * get_mv (VAR * v, POLYDEG d); /外部函数 用变元v的d次幂(vd)构造一个多项式TRIPoly(TVariable * v);TRIPoly * get_m (VAR * v); /外部函数 用变元v构造一个多项式TRIPoly(TVariable *v, TDITerm *dp1);TRIPoly * get_xt (VAR *v,
5、TDITerm *dp1); /外部函数 用一个变元和一个TDITerm的链接表构造一个多项式friend TRIPoly * get_v (VAR *v, POLYDEG d, TRIPoly *p);用一个变元v,一个次数d和一个系数多项式p构造一个多项式:p*vdTRIPoly(const TRIPoly & tr);复制构造函数不构造新的内存,只把引用计数增加1。1.2、获取多项式信息的基本操作:次数和次数表:unsigned short deg();friend int ldeg(TRIPoly *p);返回多项式关于默认主变元的最高次数n=p->deg(); 等价于
6、n=ldeg(p);unsigned short mindeg();unsigned short IPord();返回多项式关于默认主变元的最低次数unsigned short Degree(TVariable *v);friend int pdeg (TRIPoly *p, VAR *v);返回多项式关于指定的变元v的最高次数n=pdeg(p,v); 等价于 n=p->Degree(v);unsigned short MinDegree(TVariable *v);friend int mdeg (TRIPoly *p, VAR *v);返回多项式关于指定的变元v的最低次数n=mdeg
7、(p,v); 等价于 n=p->MinDegree(v);示例:p:=x3*y2+x*y3+y4;p->MinDegree (x)=0p->MinDegree (y)=2p->MinDegree (a)=0unsigned short maxdeg();返回多项式关于所有变元的最高次数,即多项式的所有变元中次数最高的变元的次数。示例:p:= x2*y5*z9+x3+x2*y3+w10;p->max_deg()=10项数:unsigned long PolyLen();返回多项式关于默认主变元的项数示例:(假定默认主变元为x)p:=(x2+2*x+1)*y3+2*x
8、*y2+4*y+6;p->PolyLen()=3unsigned long PolyLen(TVariable *v);返回多项式关于指定变元v的项数示例:p:=(x2+2*x+1)*y3+2*x*y2+4*y+6;p->PolyLen(x)=3p->PolyLen(y)=4unsigned long polylen();friend int plength (TRIPoly *p);返回多项式完全展开以后的项数示例:p:=(x2+2*x+1)*y3+2*x*y2+4*y+6;p->polylen()=6friend int dlength (TDITerm * dp1
9、);返回指定的TDITerm的链接表中的完全展开以后的项数主变元,变元,变元表:TVariable * MainVar(); 返回该多项式的默认的主变元TVariable * mainvar(TList * ord); 返回该多项式关于指定变元序ord的主变元。变元表ord中先出现的变元次序低,即若ord =x1, x2, x3, 则x1 < x2 < x3。若该多项式中不包含变元表中的变元,则函数返回NULL。TVariable * mainvar_w(TList * ord);返回该多项式关于指定变元序ord的主变元。变元表ord中先出现的变元次序高,即若ord = x1, x
10、2, x3, 则x1 > x2 > x3。若该多项式中不包含变元表中的变元,则函数返回NULL。TVariable * minv();返回该多项式关于默认变元序的最小变元TVariable * MinDegVar();返回多项式中最高次数最小的变元,如果这样的变元不止一个,则返回在该多项式的变元表中最先出现的变元。示例:p:= x2+y2+z3+w4;p->MinDegVar()=xTList * getVL();TList * allvar(); 返回多项式的变元表示例:p:= x2*y5*z9+x3+x2*y3+w10;p->getVL()=x,y,z,w系数和系数
11、表:TRIPoly * Coefficient(TVariable * v, unsigned short d);返回多项式中vd的系数示例:s := 3*v2*y2+2*v*y3;s->Coefficient(v,2)=3*y2TList * CoeffsM(TList * ord); 返回多项式关于指定变元表ord中所有变元的系数表注:所返回的系数表不包含重复的系数示例:s := 3*v2*y2+2*v*y3;s->CoeffsM(v,y)=3,2s->CoeffsM(y,v)=2,3s->CoeffsM(v)=3*y2,2*y3s->CoeffsM(y)=2
12、*v,3*v2TList * Coeffs(TVariable *v); 返回多项式关于指定变元v的系数表,表中各系数多项式按v的次数从高到低排列。示例:s := 3*v2*y2+2*v*y3;s->Coeffs(v)=3*y2,2*y3 /相当于s->CoeffsM(v)s->Coeffs(y)=2*v,3*v2 /相当于s->CoeffsM(y) TList * bcoeffs();返回多项式的所有基本系数(base coefficient)的系数表,注意这是一个TNumber的链表。注:所返回的系数表不包含重复的系数示例:s := 3*v2*y2+2*v*y3;s
13、->bcoeffs()=3,2 /相当于s->CoeffsM(v,y)p:=3*x2+5*y*x+2/3*z*x+2*y2+2/3*z*y;p->bcoeffs()=3,5,2,2/3 /相当于s->CoeffsM(x,y,z)TNumber mincoef(); 求多项式的绝对值最小的基本系数(base coefficient),并返回这个系数的绝对值。它是一个数(an element of the base domain)示例:p:=-486*x3-252*y*x2+1350*x2+192*y*x-5000*x+3;p->mincoef()=3TNumber
14、maxcoef(); 求多项式的绝对值最大的基本系数(base coefficient),并返回这个系数的绝对值。它是一个数(an element of the base domain)示例:p:=-486*x3-252*y*x2+1350*x2+192*y*x-5000*x+3;p->maxcoef()=5000首项系数,首项,余项:TRIPoly IPldcf(); friend TRIPoly * init (TRIPoly *p); friend TRIPoly * cp_init (TRIPoly *p); (首项系数复制之后再返回)返回该多项式关于默认的主变元的首项系数(又称
15、“初式”,即关于主变元的最高次幂的系数)。示例:(假定默认主变元为x)p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10; p->IPldcf()= 5*y3+y2+1TRIPoly IPLdCf(TList * ord); 返回该多项式关于指定变元序ord的首项系数(初式)。变元表ord中先出现的变元次序低。TRIPoly * IPLdCf_w(TList * ord);返回该多项式关于指定变元序ord的首项系数(初式)。变元表ord中先出现的变元次序高。示例:p:= 128*x7+448*y*x6+672*y2*x5+560*y3*x4+28
16、0*y4*x3+84*y5*x2+14*y6*x+y7;p->IPLdCf_w (x, y)=128p->IPLdCf_w (y, x)=1TNumber IPlbcf(); 返回多项式关于默认变元序的基本首项系数(leading base coefficient),即取首项系数的首项系数,直到首项系数是常数多项式为止,返回该常数。因此该函数的返回值一定是一个数(an element of the base domain)。示例:(假定默认变元序为x,y)>p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->IPlbcf(
17、)=5 TRIPoly IPLbCf(TList * ord); 返回多项式关于指定变元序ord的基本首项系数(leading base coefficient)示例:>p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->IPLbCf(x,y)=5p->IPLbCf(x)=5*y3+y2+1p->IPLbCf(y)=5*x5TNumber IPLbCf_w(TList * ord); 返回多项式关于指定变元序ord的基本首项系数(leading base coefficient),该函数的返回值一定是一个数 示例:>
18、p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->IPLbCf_w(x,y)=5p->IPLbCf_w(x)=0p->IPLbCf_w(y)=0TRIPoly IPlbt(); 返回多项式关于默认变元序的展开后的首项,其结果一定是个单项式。示例:(假定默认变元序为x,y)p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;( p按y展开的形式为:(5*x5)*y3+(x5+x4)*y2+(2*x3)*y+(x5+x4+x3+5*x2+10) )p->IPlbt()=5*x5*y3
19、TRIPoly IPltv(TVariable * v); 返回多项式关于指定变元v的首项多项式示例:p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10; ( p按y展开的形式为:(5*x5)*y3+(x5+x4)*y2+(2*x3)*y+(x5+x4+x3+5*x2+10) )p->IPltv(x)=5*x5*y3+x5*y2+x5p->IPltv(y)= 5*x5*y3TRIPoly IPldt(TList * ord); 返回多项式关于指定变元序ord的展开后的首项,其结果一定是个单项式。示例:p:=(5*y3+y2+1)*x5+(y
20、2+1)*x4+(2*y+1)*x3+5*x2+10;( p按y展开的形式为:(5*x5)*y3+(x5+x4)*y2+(2*x3)*y+(x5+x4+x3+5*x2+10) )p->IPldt(x, y)=5*x5*y3TRIPoly * IPldt_w(TList * ord); 返回多项式关于指定变元序ord的首项多项式示例:p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;( p按y展开的形式为:(5*x5)*y3+(x5+x4)*y2+(2*x3)*y+(x5+x4+x3+5*x2+10) )p->IPldt_w(x, y)=5
21、*x5*y3+x5*y2+x5p->IPldt_w(y, x)= 5*x5*y3TRIPoly IPred(); 返回多项式关于默认变元序的余项 (即该多项式减去其关于默认变元序的展开后的首项)即p->IPred() = pp->IPlbt()。示例:(假定默认变元序为x,y)p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->IPred()=x5*y2+x4*y2+2*x3*y+x5+x4+x3+5*x2+10TRIPoly IPred(TList * ord); 返回多项式关于指定变元序ord的余项 (即该多项式减去其
22、关于指定变元序ord的展开后的首项)即p->IPred(ord) = pp->IPldt(ord)。示例:p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->IPred(x,y)=x5*y2+x4*y2+2*x3*y+x5+x4+x3+5*x2+10特殊多项式判断:int IsNumber(); int IsBigInt();int IPconst();int numberp (TRIPoly *p); /外部函数int nTRIPoly (TRIPoly *p); /外部函数#define npoly(p) (p->va
23、r=0)判断该多项式是否常数多项式int IsZero();int pis0(); int pzerop (TRIPoly *p); /外部函数判断该多项式是否零多项式int pis1(); int unitp (TRIPoly *p); /外部函数判断该多项式是否多项式1int nunitp (TRIPoly *p); /外部函数判断该多项式是否多项式-1int IPunt();判断该多项式是否单变元多项式,是返回1,否返回0。int mono_pol(TRIPoly * p); /外部函数判断多项式p是否单项式,是返回1,否返回0。bool isIntPoly (); 判断该多项式是否整系
24、数多项式(所有的系数都是整数),是返回true,否返回false。1.3、其它基本操作:复制:TRIPoly * Clone();多项式的复制构造新的内存调用方法:TRIPoly *p,*p1;p1=p->Clone();.delete p1;friend TRIPoly * cp_TRIPoly (TRIPoly *p1);#define cp_poly(p) cp_TRIPoly(p)多项式的复制构造新的内存调用方法:TRIPoly *p, *p1;p1=cp_TRIPoly(p); /等价于p1=p->Clone();.delete p1;TAtom * Copy();多项式
25、的复制不构造新的内存,只把引用计数增加1调用方法:TRIPoly *p,*p1;p1=(TRIPoly *)p->Copy(); /等价于p1=new TRIPoly(*p);.delete p1; 赋值运算符:TRIPoly operator= (const TRIPoly & p);多项式的赋值操作不构造新的内存,只修改引用计数调用方法:TRIPoly p,p1;p=p1;负运算符:TRIPoly operator ();friend TRIPoly * neg_TRIPoly (TRIPoly *p); /desctructive for p多项式的相反多项式 ,即该多项式
26、与1乘积之后所得多项式。示例:p:=x2+2*x+1;p= x22*x1符号和绝对值函数:short Ipsign();多项式的符号,即该多项式关于默认变元序的基本首项系数( IPlbcf() )的符号。多项式为正时,返回1;多项式为负时,返回1;多项式为零时,返回0。示例:p:=(5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->Ipsign() = 1p:=(-5*y3+y2+1)*x5+(y2+1)*x4+(2*y+1)*x3+5*x2+10;p->Ipsign() = -1TRIPoly Ipabs();多项式的绝对值,即多项式为负
27、时,返回其相反多项式,否则返回其本身。多项式的替换:TRIPoly * IPvri(TVariable * v, TNumber n); 将多项式中的变元v替换(赋值)为数n示例:p1:= x2+2*x+1;p1->IPvri(x, 1)=4p2:= x2*y3+x*y+5;p2->IPvri (x, 2)= 4*y3+2*y+5TRIPoly * IPvtp(TVariable * v, TRIPoly p);将多项式中的变元v替换为多项式p示例:p1:= x2*y3+x*y+5;p1->IPvtp (x, z)= z2*y3+z*y+5p2:= x2*y3+x*y+5;p
28、2->IPvtp (x, z+1)= z2*y3+2*z*y3+y3+z*y+y+5多项式的显示(可在调试程序时使用):virtual void display(outtype& out =wout)const;将多项式以展开形式显示p:=5*x5*y3+x5*y2+x4*y2+2*x3*y+x5+x4+x3+5*x2+10;p->display()=5*x5*y3+x5*y2+x4*y2+2*x3*y+x5+x4+x3+5*x2+10void pdisplay(TVariable * v);将多项式以指定变元v的递归形式显示,并且按各变元的降幂排列。示例:p:=5*x5*
29、y3+x5*y2+x4*y2+2*x3*y+x5+x4+x3+5*x2+10;p->pdisplay(x)=(5*y3+y2+1)x5+(y2+1)x4+(2*y+1)x3+(5)x2+(10)p->pdisplay(y)=(5*x5)y3+(x5+x4)y2+(2*x3)y+(x5+x4+x3+5*x2+10)多项式的比较: bool operator = = (TRIPoly & bn);friend int eq_TRIPoly (TRIPoly *p1, TRIPoly *p2);#define eq_poly(p,q) eq_TRIPoly(p),(q)比较两个多
30、项式是否相等。friend int pls (TRIPoly *p1, TRIPoly *p2);比较两个多项式的大小,p1<p2时返回1,p1>=p2时返回0。1.4、基本算术运算:加法:friend TRIPoly * pplus (TRIPoly * p1, TRIPoly * p2); /destructive for p1 and p2TRIPoly operator+ (TRIPoly p); /call pplusfriend TRIPoly * poly_plus(TRIPoly * p1,TRIPoly * p2) return pplus(cp_TRIPoly(
31、p1), cp_TRIPoly(p2); ;#define c_pplus(x,y) pplus(cp_TRIPoly(x), cp_TRIPoly(y)调用方法:TRIPoly *p1, *p2, *p3;/以下三个函数调用等价: p3=pplus(cp_TRIPoly(p1), cp_TRIPoly(p2);p3=poly_plus(p1,p2);p3=c_pplus(p1,p2);/注意:以上三个函数调用在使用完p3之后要delete p3;减法:friend TRIPoly *pminus (TRIPoly *p1, TRIPoly *p2); /destructive for p1
32、and p2TRIPoly operator- (TRIPoly p); /call pminus#define c_pminus(x,y) pminus(cp_TRIPoly(x), cp_TRIPoly(y)乘法:friend TRIPoly *ptimes (TRIPoly *p1, TRIPoly *p2); /destructive for p1 and p2TRIPoly operator* (TRIPoly p); /call ptimesfriend TRIPoly *poly_mul(TRIPoly *p1,TRIPoly *p2) return ptimes(cp_TRIP
33、oly(p1),cp_TRIPoly(p2);#define c_ptimes(x,y) ptimes(cp_TRIPoly(x), cp_TRIPoly(y)除法:friend TRIPoly *pdiv (TRIPoly *p1, TRIPoly *p2); /destructive for p1 #define c_pdiv(x,y) pdiv(cp_TRIPoly(x), y)TRIPoly operator / (TRIPoly & p);返回该多项式对多项式p的除法的商(关于除式p的默认主变元作除法)示例:(假定p的默认的主变元为x)/两个多项式的首项系数都是1时可以得到正
34、确的结果:p1:=x3*y+x+1;p2:=x2+x*y+1;p1 / p2 = y*x-y2p1:=x3+(1/3)*x2+(1/5)*x+(2/3);p2:=x2+(1/5)*x+7;p1 / p2 = x+2/15/两个多项式的首项系数都是非1整数时可能无法得到系数是分数的运算结果:p1:=3*x3+(1/2)*x+1;p2:=5*x2+(1/3)*x+2;p1 / p2 = 0p1:=5*x3+(1/2)*x+1;p2:=3*x2+(1/3)*x+2;p1 / p2 = xp1:=3*x3+5*x+1;p2:=5*x2+2*x+3;p1 / p2 = 0p1:=5*x3+5*x+1;p
35、2:=3*x2+2*x+3;p1 / p2 = xp1:=6*x3+(1/2)*x+1;p2:=2*x2+(1/5)*x+2;p1 / p2 = 3*x-3/10 p1:=6*x3+2*x+1; p2:=2*x2+5*x+2;p1 / p2 = 3*x-7TRIPoly operator % (TRIPoly & p);返回该多项式对多项式p的除法的余式(关于除式p的默认主变元作除法)示例:(假定p的默认的主变元为x)p1:=x3*y+x+1;p2:=x2+x*y+1;p1 % p2 = y3*x-y*x+x+y2+1TRIPoly polydiv(TRIPoly & p);返
36、回该多项式对多项式p的除法的商(关于除式p的默认主变元作除法)处理用原来的除法(operator/)所得运算结果不正确的某些情况示例: (假定p的默认的主变元为x)p1:=x3*y+x+1;p2:=x2+x*y+1;p1->polydiv(p2) = y*x-y2p1:=x3+(1/3)*x2+(1/5)*x+(2/3);p2:=x2+(1/5)*x+7;p1->polydiv(p2) = x+2/15p1:=3*x3+(1/2)*x+1;p2:=5*x2+(1/3)*x+2;p1->polydiv(p2) = 3/5*x-1/25p1:=5*x3+(1/2)*x+1;p2:
37、=3*x2+(1/3)*x+2;p1->polydiv(p2) = 5/3*x-5/27p1:=3*x3+5*x+1;p2:=5*x2+2*x+3;p1->polydiv(p2) = 3/5*x-6/25p1:=5*x3+5*x+1;p2:=3*x2+2*x+3;p1->polydiv(p2) = 5/3*x-10/9p1:=6*x3+(1/2)*x+1;p2:=2*x2+(1/5)*x+2;p1->polydiv(p2) = 3*x-3/10 p1:=6*x3+2*x+1; p2:=2*x2+5*x+2;p1->polydiv(p2) = 3*x-15/2TRI
38、Poly divvar(TRIPoly & p,TList* vl);返回该多项式对多项式p的关于指定变元表vl的除法的商(目前的实现是假定两个多项式中不会包含变元表以外的变元)示例:p1:=x3*y+x+1;p2:=x2+x*y+1;p1->divvar(p2,x,y)=y*x-y2 /相当于Maple中的quo(x3*y+x+1, x2+x*y+1, x);p1->divvar(p2,y,x)=x2 /相当于Maple中的quo(x3*y+x+1, x2+x*y+1, y);TRIPoly operator / (TNumber & n); 返回该多项式对一个数
39、n的除法的商示例:p:=3*x3+5*x+1;p / 3 = x3+x TRIPoly polydivn(TNumber & n); 返回该多项式对一个数n的除法的商处理用原来的除法(operator/)所得运算结果不正确的某些情况示例:p:=3*x3+5*x+1;p->polydivn(3) = x3+5/3*x+1/3friend int divide(TRIPoly & p1,TRIPoly & p2);判断多项式p1是否能被多项式p2整除,是则返回1,否则返回0。示例:p1:=x*y2;p2:=y2;divide(p1,p2)=1friend TRIPol
40、y *pinit (TRIPoly *p, VAR *v, POLYDEG d); /destructive for p相当于返回p整除vd所得的商 示例:p:=5*x4*y+x3*y+y5+x*y*z+z+y+x+8;pinit(p,x,5) =0pinit(p,x,4) =5*ypinit(p,x,3) =5*y*x+ypinit(p,x,2) =5*y*x2+y*xpinit(p,x,1) =5*y*x3+y*x2+z*y+1pinit(p,x,0) =5*y*x4+y*x3+z*y*x+x+y5+y+z+8伪除法:TRIPoly * prem(TRIPoly & p, TVar
41、iable * v);返回该多项式对多项式p的关于变元v的伪除法的余式示例:p1:=x3*y+x+1;p2:=x2+x*y+1;p1->prem(p2,x)=y3*x-y*x+x+y2+1p1->prem(p2,y)=-x5-x3+x2+xTRIPoly * pquo(TRIPoly & p,TVariable *v);返回该多项式对多项式p的关于变元v的伪除法的商示例:p1:=x3*y+x+1;p2:=x2+x*y+1;p1->pquo(p2,x)=y*x-y2p1->pquo(p2,y)=x3friend TRIPoly * prem (TRIPoly *
42、p1, TRIPoly * p2); /destrucetive for p1返回多项式p1对多项式p2的关于p2的默认主变元的伪除法的余式 乘幂:friend TRIPoly *ppower (TRIPoly * p, long int n); /desctructive for pTRIPoly operator(unsigned short deg); /call ppower1.5、其它运算:求导:TRIPoly derivative(TVariable * v);返回该多项式关于变元v的导数多项式示例:p:=x2*y+2*x*y+3*y3;p->derivative(x)=2*
43、y*x+2*yp->derivative(y)=x2+2*x+9*y2 结式:TRIPoly Resultant(TRIPoly G, TVariable * v);返回该多项式与多项式G关于变元v的结式示例:p:=(x+y)4;q:=y+z;p->Resultant(q, y)=x4-4*z*x3+6*z2*x2-4*z3*x+z4一元多项式的数值解: TList * Poly_Solver(TRIPoly * p); /外部函数返回一元高次多项式p的全部复数根的链表。当输入的多项式是常数多项式或多变元多项式时,不进行求解,直接返回空表。示例:p:=3*x5-92*x4+1016
44、*x3-5074*x2+1413*x-9282;Poly_Solver(p)=-1.10096,15.9317+0.141453I,15.9317-0.141453I,-0.-1.36161I,-0.+1.36161I有理系数多项式的最大公因式:TRIPoly pgcd(TRIPoly & p);返回该多项式和多项式p的最大公因式,考虑多项式的系数可能是分数的情况即实现有理系数多项式的GCD,返回整系数多项式。示例:p1:=(3*x+2*y+(2/3)*z)*(x+y);p2:=2*(x+y)*(x2+2*x+y2);p1->pgcd(p2) =x+yp1:=(x+(1/2)*y
45、)*(x+y);p2:=(x+(1/2)*y)*x;p1->pgcd(p2) =2*x+yp1:=(3*x+2*y+(2/3)*z)*(2*x+y);p2:=(2*(2*x+y)*(x2+(2/5)*x+(1/7)*y2);p1->pgcd(p2) =2*x+yp1:=(12*n*(3*n-1)*(3*n+1)*(6*n-4)*(4*n+2*k-1);p2:=(1/2)*(6*n+2)*(4*n+2*k+3)*(n-k+1)*(n+3);p1->pgcd(p2) =3*n+1 1.6、释放内存的操作:函数原型:friend void put_x (TRIPoly * p);f
46、riend void put_ps (TDITerm * dp);void put_d (TDITerm * dp); /外部函数void put_p (TRIPoly * p); /外部函数调用方法:1关于项的操作:TDITerm * dp;delete dp;put_d (dp); 等价于 delete dp;删除dp所指向的项的结点本身。put_ps (dp);删除dp所指向的整个TDITerm的链接表。2关于多项式的操作:TRIPoly * p;delete p;put_p (p); 等价于 delete p;删除p所指向的多项式,包括多项式的结点本身以及整个TDITerm的链接表。p
47、ut_x (p);删除p所指向的多项式。当多项式p的引用计数大于1时,put_x (p); 等价于 delete p;当多项式p的引用计数等于1时,只删除多项式的结点本身,不删除TDITerm的链接表。2、针对整系数多项式的操作整系数多项式各项系数的最大公因子(content)和素部(primitive part):TRIPoly ipcont(TVariable * v);返回该多项式中关于变元v的各项系数的最大公因子示例:p:=2*y*x2+4*y2*x+2*y;p->ipcont(x)=2*yTRIPoly ippp(TVariable * v);返回该多项式的关于变元v的素部(即
48、该多项式除以ipcont(v)所得的多项式)示例:p:=2*y*x2+4*y2*x+2*y;p->ippp(x)=x2+2*y*x+1TBigInt icont();返回该多项式中各项系数的整数最大公因子示例:p:=2*y*x2+4*y2*x+2*y;p->icont()=2p:=-2*x2-4*x-2;p->icont()=2TRIPoly ipipp();#define poly_prim(p) (new TRIPoly(*p)/(p->icont()返回该多项式的素部(即该多项式除以icont()所得的多项式)示例:p:=2*y*x2+4*y2*x+2*y;p-&
49、gt;ipipp()=y*x2+2*y2*x+yp:=-2*x2-4*x-2;p->ipipp()=-x2-2*x-1中国剩余定理:TRIPoly PCRAt(TList * m, TList * x);m是一个整数链表(一组模), 即m = m1, m2, , mk, 表中的整数两两互素。x是一个多项式链表,即x = p1 , p2, , pk。根据中国剩余定理计算,返回一个多项式p, 满足方程组 ppi ( mod mi ), i=1,2,k, 且0 deg(p) m1*m2*mk 。示例:m:=3,7,11;x:=2*x2, 5*x3, 7*x6;PCRAt(m,x)= 84*x6
50、+33*x3+77*x2整系数多项式的最大公因式:TRIPoly mipgcdold(TRIPoly & p);返回该多项式和多项式p的最大公因式(模方法)示例:p1:=(x+y)7;p2:=(x+y)*(34*x-34*z)8;p1->mipgcdold(p2)=x+yTRIPoly ipgcd(TRIPoly & p);返回该多项式和多项式p的最大公因式(Euclidean方法)示例:p1:=(x+y)7;p2:=(x+y)*(34*x-34*z)8;p1->ipgcd(p2)=x+yTRIPoly pipgcd(TRIPoly & p, TBigInt
51、 & m);返回该多项式和多项式p在模m的有限域上的最大公因式(Euclidean方法)示例:p1:=(3*x+y)3;p2:=(3*x+y)*(3*y-z)2;p1->pipgcd(p2,13)=x+9*y整系数多项式的因式分解:TList * SqureFree();返回该多项式的无平方因式分解示例:p:=(345*x3-67*y)3*(x+y*z-x*z)7*(23*y-54*z);p->SqureFree()=1,1,345*x3-67*y,3,-z*x+x+z*y,7,23*y-54*z,1TList * Factor();返回该多项式的因式分解示例:p:=(34
52、5*x3-67*y)3*(x+y*z-x*z)7*(23*y-54*z);p->Factor()=-1,1,345*x3-67*y,3,z*x-x-z*y,7,23*y-54*z,1多项式在有限域上的算术运算:取模:TRIPoly * mod(const TBigInt & m);返回将该多项式模m所得的结果 示例:p:=4*x2*y4+29*x*y2+10*y;p->mod(3)=y4*x2+2*y2*x+y加:friend TRIPoly * IPmsum(TRIPoly *p1,TRIPoly *p2, TBigInt m); /call mpplusfriend TRIPoly * mpplus(TRIPoly *p1, TRIPoly *p2, TBigInt m); /destructive for p1 and p2返回模m下的多项式p1,p2的和 示例:p1:=(x+2*y)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 证券行业2025年三季报综述:业绩同环比高增景气持续回升
- 2025年根河市人民政府面向社会公开招聘(补招)乡镇及政府专职消防队员26人备考题库及1套完整答案详解
- 2025年德州市武城县人民医院合同制医师长期招聘12人备考题库及1套完整答案详解
- 四川省公安厅所属事业单位招聘考试真题2024
- 2025新疆北屯额河明珠国有资本投资有限公司招聘2人参考考试试题及答案解析
- matlab课程设计与应用答案
- 2026年江西铜业技术研究院有限公司北京分院院长招聘1人考试重点试题及答案解析
- 宜宾市南溪区事业单位2025年公开考核招聘高层次和急需紧缺专业人才考试重点题库及答案解析
- 2025年直播电商供应链全球化趋势报告
- 中化地质矿山总局地质研究院2026年高校应届毕业生招聘备考题库及1套完整答案详解
- 工业软件基础知识培训课件
- 山地光伏150MW技术标(EPC)方案投标文件(技术方案)
- 儿童自身炎症性疾病诊断与治疗专家共识解读
- T/CCPITCSC 096-2022名表真假鉴定规范
- 皮肤恶性肿瘤课件
- 2025人教版七年级下册英语寒假预习重点语法知识点清单
- CWAN 0020-2022 机器人焊接技能竞赛团体标准
- 浙江省温州市2023-2024学年六年级上学期期末科学试卷(含答案)1
- 中国文化:复兴古典 同济天下学习通超星期末考试答案章节答案2024年
- 《底层逻辑》刘润
- T-NMAAA.0002-2021 营运机动车停运损失鉴定评估规范
评论
0/150
提交评论