version 1.12, 2002/11/26 07:09:45 |
version 1.15, 2003/01/04 09:06:17 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.11 2002/11/22 08:44:57 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/Fgfs.c,v 1.14 2002/12/18 06:15:40 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
|
|
Line 50 void sqfrsf(VL vl, P f, DCP *dcp) |
|
Line 50 void sqfrsf(VL vl, P f, DCP *dcp) |
|
{ |
{ |
DCP dc,dct; |
DCP dc,dct; |
Obj obj; |
Obj obj; |
P t,s,c; |
P t,s,c,cont; |
VL tvl,nvl; |
VL tvl,onevl; |
|
|
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(vl,f,&t,&dc); f = t; |
clctv(vl,f,&tvl); vl = tvl; |
clctv(vl,f,&tvl); vl = tvl; |
|
NEWVL(onevl); NEXT(onevl)=0; |
if ( !vl ) |
if ( !vl ) |
; |
; |
else if ( !NEXT(vl) ) { |
else if ( !NEXT(vl) ) { |
Line 65 void sqfrsf(VL vl, P f, DCP *dcp) |
|
Line 66 void sqfrsf(VL vl, P f, DCP *dcp) |
|
} else { |
} else { |
t = f; |
t = f; |
for ( tvl = vl; tvl; tvl = NEXT(tvl) ) { |
for ( tvl = vl; tvl; tvl = NEXT(tvl) ) { |
reordvar(vl,tvl->v,&nvl); |
onevl->v = tvl->v; |
cont_pp_mv_sf(vl,NEXT(nvl),t,&c,&s); t = s; |
cont_pp_mv_sf(vl,onevl,t,&cont,&s); t = s; |
sqfrsf(vl,c,&dct); |
sqfrsf(vl,cont,&dct); |
dc = append_dc(dc,NEXT(dct)); |
dc = append_dc(dc,NEXT(dct)); |
} |
} |
sqfrsfmain(vl,t,&dct); |
sqfrsfmain(vl,t,&dct); |
Line 473 void cont_pp_mv_sf(VL vl,VL rvl,P p,P *c,P *pp) |
|
Line 474 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; |
|
|
|
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 822 void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P |
|
Line 826 void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P |
|
P *cu,*cv; |
P *cu,*cv; |
GFSN inv; |
GFSN inv; |
|
|
/* adjust coeffs */ |
/* check the validity of lc's and adjust coeffs */ |
|
/* f -> lcu*lcv*x^(m+l)+... */ |
|
mulp(vl,lcu,lcv,&t); |
|
if ( !divtp(vl,t,LC(f),&m) ) { |
|
*up = 0; return; |
|
} |
|
mulp(vl,m,f,&t); f = t; |
/* u0 = am x^m+ ... -> lcu*x^m + a(m-1)*(lcu(mev)/am)*x^(m-1)+... */ |
/* u0 = am x^m+ ... -> lcu*x^m + a(m-1)*(lcu(mev)/am)*x^(m-1)+... */ |
/* v0 = bm x^l+ ... -> lcv*x^l + b(l-1)*(lcv(mev)/bl)*x^(l-1)+... */ |
/* v0 = bm x^l+ ... -> lcv*x^l + b(l-1)*(lcv(mev)/bl)*x^(l-1)+... */ |
/* f -> lcu*lcv*x^(m+l)+... */ |
|
adjust_coef_sf(vl,rvl,lcu,u0,mev,&u); |
adjust_coef_sf(vl,rvl,lcu,u0,mev,&u); |
adjust_coef_sf(vl,rvl,lcv,v0,mev,&v); |
adjust_coef_sf(vl,rvl,lcv,v0,mev,&v); |
mulp(vl,lcu,lcv,&t); divsp(vl,t,LC(f),&m); mulp(vl,m,f,&t); f = t; |
|
|
|
/* f <- f(X+mev), u <- u(X+mev), v <- v(X+mev) */ |
/* f <- f(X+mev), u <- u(X+mev), v <- v(X+mev) */ |
fin = f; |
fin = f; |