[BACK]Return to gr CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / lib

Diff for /OpenXM_contrib2/asir2000/lib/gr between version 1.7 and 1.10

version 1.7, 2000/09/07 23:59:55 version 1.10, 2001/09/06 00:24:07
Line 45 
Line 45 
  * 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/lib/gr,v 1.6 2000/08/22 05:04:22 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/lib/gr,v 1.9 2001/09/05 08:09:10 noro Exp $
 */  */
 extern INIT_COUNT,ITOR_FAIL$  extern INIT_COUNT,ITOR_FAIL$
 extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$  extern REMOTE_MATRIX,REMOTE_NF,REMOTE_VARS$
Line 935  def dp_terms(D,V)
Line 935  def dp_terms(D,V)
   
 def gb_comp(A,B)  def gb_comp(A,B)
 {  {
         for ( T = A; T != []; T = cdr(T) ) {          LA = length(A);
                 for ( S = B, M = car(T), N = -M; S != []; S = cdr(S) )          LB = length(B);
                         if ( car(S) == M || car(S) == N )          if ( LA != LB )
                                 break;                  return 0;
                 if ( S == [] )          A1 = qsort(newvect(LA,A));
           B1 = qsort(newvect(LB,B));
           for ( I = 0; I < LA; I++ )
                   if ( A1[I] != B1[I] && A1[I] != -B1[I] )
                         break;                          break;
         }          return I == LA ? 1 : 0;
         return T == [] ? 1 : 0;  
 }  }
   
 def zero_dim(G,V,O) {  def zero_dim(G,V,O) {
Line 1432  def register_input(List)
Line 1434  def register_input(List)
 {  {
         Len = length(List);          Len = length(List);
         NFArray = newvect(Len+100,List);          NFArray = newvect(Len+100,List);
   }
   
   /*
           tracetogen(): preliminary version
   
           dp_gr_main() returns  [GB,GBIndex,Trace].
           GB : groebner basis
           GBIndex : IndexList (corresponding to Trace)
           Trace : [InputList,Trace0,Trace1,...]
           TraceI : [Index,TraceList]
           TraceList : [[Coef,Index,Monomial,Denominator],...]
           Poly <- 0
           Poly <- (Coef*Poly+Monomial*PolyList[Index])/Denominator
   */
   
   def tracetogen(G)
   {
           GB = G[0]; GBIndex = G[1]; Trace = G[2];
   
           InputList = Trace[0];
           Trace = cdr(Trace);
   
           /* number of initial basis */
           Nini = length(InputList);
   
           /* number of generated basis */
           Ngen = length(Trace);
   
           N = Nini + Ngen;
   
           /* stores traces */
           Tr = vector(N);
   
           /* stores coeffs */
           Coef = vector(N);
   
           /* XXX create dp_ptod(1,V) */
           HT = dp_ht(InputList[0]);
           One = dp_subd(HT,HT);
   
           for ( I = 0; I < Nini; I++ ) {
                   Tr[I] = [1,I,One,1];
                   C = vector(Nini);
                   C[I] = One;
                   Coef[I] = C;
           }
           for ( ; I < N; I++ )
                   Tr[I] = Trace[I-Nini][1];
   
           for ( T = GBIndex; T != []; T = cdr(T) )
                   compute_coef_by_trace(car(T),Tr,Coef);
           return Coef;
   }
   
   def compute_coef_by_trace(I,Tr,Coef)
   {
           if ( Coef[I] )
                   return;
   
           /* XXX */
           Nini = size(Coef[0])[0];
   
           /* initialize coef vector */
           CI = vector(Nini);
   
           for ( T = Tr[I]; T != []; T = cdr(T) ) {
                   /*      Trace = [Coef,Index,Monomial,Denominator] */
                   Trace = car(T);
                   C = Trace[0];
                   Ind = Trace[1];
                   Mon = Trace[2];
                   Den = Trace[3];
                   if ( !Coef[Ind] )
                           compute_coef_by_trace(Ind,Tr,Coef);
   
                   /* XXX */
                   CT = newvect(Nini);
                   for ( J = 0; J < Nini; J++ )
                           CT[J] = (C*CI[J]+Mon*Coef[Ind][J])/Den;
                   CI = CT;
           }
           Coef[I] = CI;
 }  }
 end$  end$

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.10

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