version 1.14, 2002/12/18 06:15:40 |
version 1.19, 2003/03/12 02:06:11 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.13 2002/11/26 08:21:49 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.18 2003/01/17 00:17:10 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
|
|
Line 25 void gfsn_poly_to_poly_main(P f,V v,P *r); |
|
Line 25 void gfsn_poly_to_poly_main(P f,V v,P *r); |
|
void gfsn_univariate_to_sfbm(P f,int dy,BM *r); |
void gfsn_univariate_to_sfbm(P f,int dy,BM *r); |
void sfbm_to_gfsn_univariate(BM f,V x,V y,P *r); |
void sfbm_to_gfsn_univariate(BM f,V x,V y,P *r); |
|
|
|
void monomialfctr_sf(VL vl,P p,P *pr,DCP *dcp) |
|
{ |
|
VL nvl,avl; |
|
Q d; |
|
P f,t,s; |
|
DCP dc0,dc; |
|
Obj obj; |
|
|
|
clctv(vl,p,&nvl); |
|
for ( dc0 = 0, avl = nvl, f = p; avl; avl = NEXT(avl) ) { |
|
getmindeg(avl->v,f,&d); |
|
if ( d ) { |
|
MKV(avl->v,t); |
|
simp_ff((Obj)t,&obj); t = (P)obj; |
|
NEXTDC(dc0,dc); DEG(dc) = d; COEF(dc) = t; |
|
pwrp(vl,t,d,&s); divsp(vl,f,s,&t); f = t; |
|
} |
|
} |
|
if ( dc0 ) |
|
NEXT(dc) = 0; |
|
*pr = f; *dcp = dc0; |
|
} |
|
|
void lex_lc(P f,P *c) |
void lex_lc(P f,P *c) |
{ |
{ |
if ( !f || NUM(f) ) |
if ( !f || NUM(f) ) |
Line 55 void sqfrsf(VL vl, P f, DCP *dcp) |
|
Line 78 void sqfrsf(VL vl, P f, DCP *dcp) |
|
|
|
simp_ff((Obj)f,&obj); f = (P)obj; |
simp_ff((Obj)f,&obj); f = (P)obj; |
lex_lc(f,&c); divsp(vl,f,c,&t); f = t; |
lex_lc(f,&c); divsp(vl,f,c,&t); f = t; |
monomialfctr(vl,f,&t,&dc); f = t; |
monomialfctr_sf(vl,f,&t,&dc); f = t; |
clctv(vl,f,&tvl); vl = tvl; |
clctv(vl,f,&tvl); vl = tvl; |
NEWVL(onevl); NEXT(onevl)=0; |
NEWVL(onevl); NEXT(onevl)=0; |
if ( !vl ) |
if ( !vl ) |
Line 474 void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp) |
|
Line 497 void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp) |
|
MP t; |
MP t; |
int i,m; |
int i,m; |
P *ps; |
P *ps; |
|
struct order_spec spec, currentspec; |
|
extern struct order_spec dp_current_spec; |
|
|
|
currentspec = dp_current_spec; |
|
create_order_spec(0,&spec); |
|
initd(&spec); |
ptod(vl,rvl,p,&dp); |
ptod(vl,rvl,p,&dp); |
for ( t = BDY(dp), m = 0; t; t = NEXT(t), m++ ); |
for ( t = BDY(dp), m = 0; t; t = NEXT(t), m++ ); |
ps = (P *)ALLOCA(m*sizeof(P)); |
ps = (P *)ALLOCA(m*sizeof(P)); |
Line 482 void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp) |
|
Line 510 void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp) |
|
ps[i] = C(t); |
ps[i] = C(t); |
gcdsf(vl,ps,m,c); |
gcdsf(vl,ps,m,c); |
divsp(vl,p,*c,pp); |
divsp(vl,p,*c,pp); |
|
initd(¤tspec); |
} |
} |
|
|
void mfctrsf(VL vl, P f, DCP *dcp) |
void mfctrsf(VL vl, P f, DCP *dcp) |
Line 532 void mfctrsfmain(VL vl, P f, DCP *dcp) |
|
Line 561 void mfctrsfmain(VL vl, P f, DCP *dcp) |
|
return; |
return; |
} |
} |
for ( n = 0, tvl = vl; tvl; tvl = NEXT(tvl), n++ ); |
for ( n = 0, tvl = vl; tvl; tvl = NEXT(tvl), n++ ); |
va = (V *)ALLOCA(n*sizeof(int)); |
va = (V *)ALLOCA(n*sizeof(V)); |
da = (int *)ALLOCA(n*sizeof(int)); |
da = (int *)ALLOCA(n*sizeof(int)); |
/* find v s.t. diff(f,v) is nonzero and deg(f,v) is minimal */ |
/* find v s.t. diff(f,v) is nonzero and deg(f,v) is minimal */ |
imin = -1; |
imin = -1; |
Line 950 void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P |
|
Line 979 void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P |
|
addp(vl,v,wv,&t); v = t; |
addp(vl,v,wv,&t); v = t; |
addp(vl,vh[j],wv,&t); vh[j] = t; |
addp(vl,vh[j],wv,&t); vh[j] = t; |
} |
} |
|
gfsn_poly_to_poly(vl,u,vy,&t); |
|
shift_sf(vl,rvl,t,mev,-1,&s); |
|
if ( divtp(vl,fin,s,&q) ) |
|
cont_pp_mv_sf(vl,onevl,s,&cont,up); |
|
else |
|
*up = 0; |
} |
} |
|
|
void adjust_coef_sf(VL vl,VL rvl,P lcu,P u0,int *mev,P *r) |
void adjust_coef_sf(VL vl,VL rvl,P lcu,P u0,int *mev,P *r) |