[BACK]Return to Fgfs.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / engine

Diff for /OpenXM_contrib2/asir2000/engine/Fgfs.c between version 1.12 and 1.20

version 1.12, 2002/11/26 07:09:45 version 1.20, 2004/02/03 23:31:57
Line 1 
Line 1 
 /* $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.19 2003/03/12 02:06:11 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 50  void sqfrsf(VL vl, P f, DCP *dcp)
Line 73  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_sf(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 89  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 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,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 481  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(currentspec);
 }  }
   
 void mfctrsf(VL vl, P f, DCP *dcp)  void mfctrsf(VL vl, P f, DCP *dcp)
Line 531  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 822  void mfctrsf_hensel(VL vl,VL rvl,P f,P pp0,P u0,P v0,P
Line 852  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;
Line 945  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)

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.20

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>