version 1.9, 2001/07/04 07:19:19 |
version 1.11, 2002/01/15 01:09:55 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/engine/F.c,v 1.8 2001/05/28 08:25:31 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/engine/F.c,v 1.10 2001/10/09 01:36:09 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include <math.h> |
#include <math.h> |
|
|
void homfctr(); |
|
void mfctr_wrt_v(); |
|
|
|
int use_new_hensel; |
int use_new_hensel; |
|
|
void fctrp(vl,f,dcp) |
void fctrp(VL vl,P f,DCP *dcp) |
VL vl; |
|
P f; |
|
DCP *dcp; |
|
{ |
{ |
VL nvl; |
VL nvl; |
DCP dc; |
DCP dc; |
|
|
} |
} |
} |
} |
|
|
void fctr_wrt_v_p(vl,f,v,dcp) |
void fctr_wrt_v_p(VL vl,P f,V v,DCP *dcp) |
VL vl; |
|
P f; |
|
V v; |
|
DCP *dcp; |
|
{ |
{ |
VL nvl; |
VL nvl; |
DCP dc; |
DCP dc; |
|
|
} |
} |
} |
} |
|
|
void homfctr(vl,g,dcp) |
void homfctr(VL vl,P g,DCP *dcp) |
VL vl; |
|
P g; |
|
DCP *dcp; |
|
{ |
{ |
P s,t,u,f,h,x; |
P s,t,u,f,h,x; |
Q e; |
Q e; |
|
|
*dcp = dc; |
*dcp = dc; |
} |
} |
|
|
void mfctr(vl,f,dcp) |
void mfctr(VL vl,P f,DCP *dcp) |
VL vl; |
|
P f; |
|
DCP *dcp; |
|
{ |
{ |
DCP dc,dc0,dct,dcs,dcr; |
DCP dc,dc0,dct,dcs,dcr; |
P p,pmin,ppmin,cmin,t; |
P p,pmin,ppmin,cmin,t; |
|
|
adjsgn(f,dc0); *dcp = dc0; |
adjsgn(f,dc0); *dcp = dc0; |
} |
} |
|
|
void mfctr_wrt_v(vl,f,v,dcp) |
void mfctr_wrt_v(VL vl,P f,V v,DCP *dcp) |
VL vl; |
|
P f; |
|
V v; |
|
DCP *dcp; |
|
{ |
{ |
DCP dc,dc0,dct,dcs,dcr; |
DCP dc,dc0,dct,dcs,dcr; |
P p,pmin,ppmin,cmin,t; |
P p,pmin,ppmin,cmin,t; |
|
|
NEWDC(dc0); dc = dc0; COEF(dc) = (P)c; DEG(dc) = ONE; NEXT(dc) = 0; |
NEWDC(dc0); dc = dc0; COEF(dc) = (P)c; DEG(dc) = ONE; NEXT(dc) = 0; |
msqfr(vl,p,&dct); |
msqfr(vl,p,&dct); |
for ( ; dct; dct = NEXT(dct) ) { |
for ( ; dct; dct = NEXT(dct) ) { |
clctv(vl,f,&nvl); |
clctv(vl,COEF(dct),&nvl); |
reordvar(nvl,v,&mvl); |
reordvar(nvl,v,&mvl); |
reorderp(mvl,vl,f,&pmin); |
reorderp(mvl,vl,COEF(dct),&pmin); |
pcp(mvl,pmin,&ppmin,&cmin); |
pcp(mvl,pmin,&ppmin,&cmin); |
if ( !NUM(cmin) ) { |
if ( !NUM(cmin) ) { |
mfctrmain(mvl,cmin,&dcs); |
mfctrmain(mvl,cmin,&dcs); |
|
|
} |
} |
|
|
#if 0 |
#if 0 |
void adjsgn(p,dc) |
void adjsgn(P p,DCP dc) |
P p; |
|
DCP dc; |
|
{ |
{ |
int sgn; |
int sgn; |
DCP dct; |
DCP dct; |
|
|
} |
} |
} |
} |
#else |
#else |
void adjsgn(p,dc) |
void adjsgn(P p,DCP dc) |
P p; |
|
DCP dc; |
|
{ |
{ |
int sgn; |
|
DCP dct; |
DCP dct; |
P c; |
P c; |
|
|
|
|
} |
} |
#endif |
#endif |
|
|
int headsgn(p) |
int headsgn(P p) |
P p; |
|
{ |
{ |
if ( !p ) |
if ( !p ) |
return 0; |
return 0; |
|
|
} |
} |
} |
} |
|
|
void fctrwithmvp(vl,f,v,dcp) |
void fctrwithmvp(VL vl,P f,V v,DCP *dcp) |
VL vl; |
|
P f; |
|
V v; |
|
DCP *dcp; |
|
{ |
{ |
VL nvl; |
VL nvl; |
DCP dc; |
DCP dc; |
|
|
mfctrwithmv(nvl,f,v,dcp); |
mfctrwithmv(nvl,f,v,dcp); |
} |
} |
|
|
void mfctrwithmv(vl,f,v,dcp) |
void mfctrwithmv(VL vl,P f,V v,DCP *dcp) |
VL vl; |
|
P f; |
|
V v; |
|
DCP *dcp; |
|
{ |
{ |
DCP dc,dc0,dct,dcs,dcr; |
DCP dc,dc0,dct,dcs,dcr; |
P p,pmin,ppmin,cmin,t; |
P p,pmin,ppmin,cmin,t; |
|
|
*dcp = dc0; |
*dcp = dc0; |
} |
} |
|
|
void ufctr(f,hint,dcp) |
void ufctr(P f,int hint,DCP *dcp) |
P f; |
|
int hint; |
|
DCP *dcp; |
|
{ |
{ |
P p,c; |
P p,c; |
DCP dc,dct,dcs,dcr; |
DCP dc,dct,dcs,dcr; |
|
|
} |
} |
} |
} |
|
|
void mfctrmain(vl,p,dcp) |
void mfctrmain(VL vl,P p,DCP *dcp) |
VL vl; |
|
P p; |
|
DCP *dcp; |
|
{ |
{ |
int i,j,k,*win,np,x; |
int i,j,k,*win,np,x; |
VL nvl,tvl; |
VL nvl,tvl; |
|
|
NEXT(dc) = 0; *dcp = dc0; |
NEXT(dc) = 0; *dcp = dc0; |
} |
} |
|
|
void ufctrmain(p,hint,dcp) |
void ufctrmain(P p,int hint,DCP *dcp) |
P p; |
|
int hint; |
|
DCP *dcp; |
|
{ |
{ |
ML list; |
ML list; |
DCP dc; |
DCP dc; |
|
|
} |
} |
} |
} |
|
|
struct oMF { |
void cycm(V v,int n,DCP *dcp) |
int m; |
|
P f; |
|
}; |
|
|
|
void calcphi(); |
|
|
|
void cycm(v,n,dcp) |
|
V v; |
|
register int n; |
|
DCP *dcp; |
|
{ |
{ |
register int i,j; |
register int i,j; |
struct oMF *mfp; |
struct oMF *mfp; |
|
|
NEXT(dc) = 0; *dcp = dc0; |
NEXT(dc) = 0; *dcp = dc0; |
} |
} |
|
|
void cycp(v,n,dcp) |
void cycp(V v,int n,DCP *dcp) |
V v; |
|
register int n; |
|
DCP *dcp; |
|
{ |
{ |
register int i,j; |
register int i,j; |
int n0; |
int n0; |
|
|
NEXT(dc) = 0; *dcp = dc0; |
NEXT(dc) = 0; *dcp = dc0; |
} |
} |
|
|
void calcphi(v,n,mfp) |
void calcphi(V v,int n,struct oMF *mfp) |
V v; |
|
int n; |
|
register struct oMF *mfp; |
|
{ |
{ |
register int i,m; |
register int i,m; |
P t,s,tmp; |
P t,s,tmp; |
Line 620 register struct oMF *mfp; |
|
Line 561 register struct oMF *mfp; |
|
error("calcphi: cannot happen"); |
error("calcphi: cannot happen"); |
} |
} |
|
|
void mkssum(v,e,s,sgn,r) |
void mkssum(V v,int e,int s,int sgn,P *r) |
V v; |
|
int e,s,sgn; |
|
P *r; |
|
{ |
{ |
register int i,sgnt; |
register int i,sgnt; |
DCP dc,dc0; |
DCP dc,dc0; |
|
|
NEXT(dc) = 0; MKP(v,dc0,*r); |
NEXT(dc) = 0; MKP(v,dc0,*r); |
} |
} |
|
|
int iscycp(f) |
int iscycp(P f) |
P f; |
|
{ |
{ |
DCP dc; |
DCP dc; |
dc = DC(f); |
dc = DC(f); |
|
|
return ( 1 ); |
return ( 1 ); |
} |
} |
|
|
int iscycm(f) |
int iscycm(P f) |
P f; |
|
{ |
{ |
DCP dc; |
DCP dc; |
|
|
|
|
return ( 1 ); |
return ( 1 ); |
} |
} |
|
|
void sortfs(dcp) |
void sortfs(DCP *dcp) |
DCP *dcp; |
|
{ |
{ |
int i,k,n,k0,d; |
int i,k,n,k0,d; |
DCP dc,dct,t; |
DCP dc,dct,t; |
|
|
NEXT(dct) = 0; |
NEXT(dct) = 0; |
} |
} |
|
|
void sortfsrev(dcp) |
void sortfsrev(DCP *dcp) |
DCP *dcp; |
|
{ |
{ |
int i,k,n,k0,d; |
int i,k,n,k0,d; |
DCP dc,dct,t; |
DCP dc,dct,t; |
|
|
NEXT(dct) = 0; |
NEXT(dct) = 0; |
} |
} |
|
|
void nthrootchk(f,dc,fp,dcp) |
void nthrootchk(P f,struct oDUM *dc,ML fp,DCP *dcp) |
P f; |
|
struct oDUM *dc; |
|
ML fp; |
|
DCP *dcp; |
|
{ |
{ |
register int i,k; |
register int i,k; |
int e,n,dr,tmp,t; |
int e,n,dr,tmp,t; |
|
|
} |
} |
} |
} |
|
|
void sqfrp(vl,f,dcp) |
void sqfrp(VL vl,P f,DCP *dcp) |
VL vl; |
|
P f; |
|
DCP *dcp; |
|
{ |
{ |
P c,p; |
P c,p; |
DCP dc,dc0; |
DCP dc,dc0; |
|
|
/* |
/* |
* f : must be a poly with int coef, ignore int content |
* f : must be a poly with int coef, ignore int content |
*/ |
*/ |
void msqfr(vl,f,dcp) |
void msqfr(VL vl,P f,DCP *dcp) |
VL vl; |
|
P f; |
|
DCP *dcp; |
|
{ |
{ |
DCP dc,dct,dcs; |
DCP dc,dct,dcs; |
P c,p,t,s,pc; |
P c,p,t,s,pc; |
|
|
} |
} |
} |
} |
|
|
void usqp(f,dcp) |
void usqp(P f,DCP *dcp) |
P f; |
|
DCP *dcp; |
|
{ |
{ |
int index,nindex; |
int index,nindex; |
P g,c,h; |
P g,c,h; |
|
|
*dcp = dc; |
*dcp = dc; |
} |
} |
|
|
void msqfrmain(vl,p,dcp) |
void msqfrmain(VL vl,P p,DCP *dcp) |
VL vl; |
|
P p; |
|
DCP *dcp; |
|
{ |
{ |
int i,j; |
int i,j; |
VL nvl,tvl; |
VL nvl,tvl; |
|
|
} |
} |
} |
} |
|
|
void msqfrmainmain(vl,p,vn,p0,dc0,dcp,pp) |
void msqfrmainmain(VL vl,P p,VN vn,P p0,DCP dc0,DCP *dcp,P *pp) |
VL vl; |
|
P p; |
|
VN vn; |
|
P p0; |
|
DCP dc0; |
|
DCP *dcp; |
|
P *pp; |
|
{ |
{ |
int i,j,k,np; |
int i,j,k,np; |
DCP *a; |
DCP *a; |
|
|
*dcp = dcr0; |
*dcp = dcr0; |
} |
} |
|
|
void mfctrhen2(vl,vn,f,f0,g0,h0,lcg,lch,gp) |
void mfctrhen2(VL vl,VN vn,P f,P f0,P g0,P h0,P lcg,P lch,P *gp) |
VL vl; |
|
VN vn; |
|
P f; |
|
P f0,g0,h0,lcg,lch; |
|
P *gp; |
|
{ |
{ |
V v; |
V v; |
P f1,lc,lc0,lcg0,lch0; |
P f1,lc,lc0,lcg0,lch0; |
|
|
*gp = 0; |
*gp = 0; |
} |
} |
|
|
int sqfrchk(p) |
int sqfrchk(P p) |
P p; |
|
{ |
{ |
Q c; |
Q c; |
P f; |
P f; |
|
|
return ( 1 ); |
return ( 1 ); |
} |
} |
|
|
int cycchk(p) |
int cycchk(P p) |
P p; |
|
{ |
{ |
Q c; |
Q c; |
P f; |
P f; |
|
|
return 1; |
return 1; |
} |
} |
|
|
int zerovpchk(vl,p,vn) |
int zerovpchk(VL vl,P p,VN vn) |
VL vl; |
|
P p; |
|
VN vn; |
|
{ |
{ |
P t; |
P t; |
|
|
|
|
return ( 1 ); |
return ( 1 ); |
} |
} |
|
|
int valideval(vl,dc,vn) |
int valideval(VL vl,DCP dc,VN vn) |
VL vl; |
|
DCP dc; |
|
VN vn; |
|
{ |
{ |
DCP dct; |
DCP dct; |
Q *a; |
Q *a; |
|
|
return ( 1 ); |
return ( 1 ); |
} |
} |
|
|
void estimatelc(vl,c,dc,vn,lcp) |
void estimatelc(VL vl,Q c,DCP dc,VN vn,P *lcp) |
VL vl; |
|
Q c; |
|
DCP dc; |
|
VN vn; |
|
P *lcp; |
|
{ |
{ |
int i; |
int i; |
DCP dct; |
DCP dct; |
|
|
*lcp = r; |
*lcp = r; |
} |
} |
|
|
void monomialfctr(vl,p,pr,dcp) |
void monomialfctr(VL vl,P p,P *pr,DCP *dcp) |
VL vl; |
|
P p; |
|
P *pr; |
|
DCP *dcp; |
|
{ |
{ |
VL nvl,avl; |
VL nvl,avl; |
Q d; |
Q d; |
|
|
*pr = f; *dcp = dc0; |
*pr = f; *dcp = dc0; |
} |
} |
|
|
void afctr(vl,p0,p,dcp) |
void afctr(VL vl,P p0,P p,DCP *dcp) |
VL vl; |
|
P p,p0; |
|
DCP *dcp; |
|
{ |
{ |
DCP dc,dc0,dcr,dct,dcs; |
DCP dc,dc0,dcr,dct,dcs; |
P t; |
P t; |
|
|
*dcp = dc0; |
*dcp = dc0; |
} |
} |
|
|
void afctrmain(vl,p0,p,init,dcp) |
void afctrmain(VL vl,P p0,P p,int init,DCP *dcp) |
VL vl; |
|
P p,p0; |
|
int init; |
|
DCP *dcp; |
|
{ |
{ |
P x,y,s,m,a,t,u,pt,pt1,res,g; |
P x,y,s,m,a,t,u,pt,pt1,res,g; |
Q q; |
Q q; |