version 1.16, 2003/01/06 09:23:27 |
version 1.19, 2003/03/12 02:06:11 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.15 2003/01/04 09:06:17 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 538 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 956 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) |