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

Diff for /OpenXM_contrib2/asir2000/lib/weight between version 1.32 and 1.39

version 1.32, 2004/02/14 18:28:39 version 1.39, 2004/05/18 14:11:09
Line 306  def makeret(Res,Vars,FLAG){
Line 306  def makeret(Res,Vars,FLAG){
         else          else
                 M=-1$                  M=-1$
   
         for(I=0;I<ResNum;I++){          for(I=0;I<ResNum;I++){
                 if(member(Res[I][0],Vars)){          if(member(Res[I][0],Vars)){
                         ResVec[I]=Res[I][1]$                  ResVec[I]=Res[I][1]$
   
                         if(FLAG){                          if(FLAG){
                                 if(type(ResVec[I])==1){                                  if(type(ResVec[I])==1){
                                         if(M==0)                          if(M==0)
                                                 M=ResVec[I]$                                  M=ResVec[I]$
                                         else                          else
                                                 if(ResVec[I]<M)                                  if(ResVec[I]<M)
                                                         M=ResVec[I]$                                  M=ResVec[I]$
                                 }                                  }
                                 else                                  else
                                         M=-1$                                          M=-1$
                         }                          }
                 }                  }
         }       }
   
   
         if(M!=-1)          if(M!=-1)
                 ResVec=ResVec/M;                  ResVec=ResVec/M;
   
Line 417  def qcheckmain(PolyList,Vars){
Line 416  def qcheckmain(PolyList,Vars){
                 Poly=dp_ptod(PolyList[I],Vars)$                  Poly=dp_ptod(PolyList[I],Vars)$
                 BASE0=dp_etov(dp_ht(Poly))$                  BASE0=dp_etov(dp_ht(Poly))$
                 Poly=dp_rest(Poly)$                  Poly=dp_rest(Poly)$
                 for(;Poly!=0;Poly=dp_rest(Poly)){                  for(;L!=VarsNum && Poly!=0;Poly=dp_rest(Poly)){
                         ExpMat[L]=dp_etov(dp_ht(Poly))-BASE0$                          ExpMat[L]=dp_etov(dp_ht(Poly))-BASE0$
                         L=chkou(L,ExpMat,CHAGORD)$                          L=chkou(L,ExpMat,CHAGORD)$
                         if(L==VarsNum-1)                          if(L==VarsNum-1)
Line 455  def checktd(PolyList,Vars,ResVars){
Line 454  def checktd(PolyList,Vars,ResVars){
         return 1$          return 1$
 }  }
   
 def value2(Vars,Ans){  def value2(Vars,Ans,Ba,FLAG){
   
         N=length(Vars)$          N=length(Vars)$
         Res=newvect(N)$          Res=newvect(N)$
         for(I=0;I<N;I++){          for(I=0;I<N;I++){
                 Res[I]=newvect(2)$                  Res[I]=newvect(2)$
                 Res[I][0]=Vars[I]$                  Res[I][0]=Vars[I]$
                 Res[I][1]=Ans[I]$                  Res[I][1]=Ba*Ans[I]$
         }          }
         Res=map(vtol,Res)$          Res=map(vtol,Res)$
         Res=vtol(Res)$          Res=vtol(Res)$
Line 470  def value2(Vars,Ans){
Line 469  def value2(Vars,Ans){
         Res=getgcd(Res,Vars)$          Res=getgcd(Res,Vars)$
   
         if(nonposdegchk(Res)){          if(nonposdegchk(Res)){
                 TMP1=makeret(Res,Vars,1)$                  TMP1=makeret(Res,Vars,FLAG)$
                 return vtol(TMP1[1])$                  return vtol(TMP1[1])$
         }          }
         else          else
Line 524  def qcheck(PolyList,Vars,FLAG){
Line 523  def qcheck(PolyList,Vars,FLAG){
   
                                                 for(I=0;I<length(TMP0);I++)                                                  for(I=0;I<length(TMP0);I++)
                                                         TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$                                                          TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
                                                 RET0=value2(Vars,TMP)$                                                  RET0=value2(Vars,TMP,1,0)$
   
                                                 if(RET0!=[])                                                  if(RET0!=[])
                                                         RET0=wsort(RET0,Vars,RET0,-1)$                                                          RET0=wsort(RET0,Vars,RET0,-1)$
                                         }                                          }
Line 534  def qcheck(PolyList,Vars,FLAG){
Line 534  def qcheck(PolyList,Vars,FLAG){
   
                                                 for(I=0;I<length(TMP0);I++)                                                  for(I=0;I<length(TMP0);I++)
                                                         TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$                                                          TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
                                                 RET0=value2(Vars,TMP)$                                                  RET0=value2(Vars,TMP,-1,0)$
   
                                                 if(RET0!=[])                                                  if(RET0!=[])
                                                         RET0=wsort(RET0,Vars,RET0,-1)$                                                          RET0=wsort(RET0,Vars,RET0,-1)$
Line 600  def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){
Line 600  def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){
                         if(FLAG==0){                          if(FLAG==0){
                                 TMP=roundret(TMP1[1])$                                  TMP=roundret(TMP1[1])$
   
                                 RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$                                  RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),ID))$
   
                                 if(TMP!=[])                                  if(TMP!=[])
                                         RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$                                          RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$
Line 610  def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){
Line 610  def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){
                 }                  }
         }          }
   
         return RET$          return [NormMat0,RET]$
 }  }
   
 def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){  def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
Line 674  def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
Line 674  def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
                         if(FLAG==0){                          if(FLAG==0){
                                 TMP=roundret(TMP1[1])$                                  TMP=roundret(TMP1[1])$
   
                                 RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),1))$                                  RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),1))$
   
                                 if(TMP!=[])                                  if(TMP!=[])
                                         RET=append(RET,wsort(TMP1[1],Vars,TMP,2))$                                          RET=append(RET,wsort(TMP1[1],Vars,TMP,2))$
Line 687  def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
Line 687  def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
         return [NormMat0,RET]$          return [NormMat0,RET]$
 }  }
   
   def leastsq(NormMat,ExpMat,Vars,FLAG,ID){
   
           RET=[]$
   
           ExpMatRowNum=size(ExpMat)[0]$
           ExpMatColNum=size(ExpMat[0])[0]$
   
           if(NormMat==0){
                   NormMat=newmat(ExpMatColNum,ExpMatColNum)$
   
                   for(I=0;I<ExpMatColNum;I++)
                           for(J=I;J<ExpMatColNum;J++)
                                   for(K=0;K<ExpMatRowNum;K++)
                                           NormMat[I][J]+=
                                                   ExpMat[K][I]*ExpMat[K][J]$
           }
   
           BVec=newvect(ExpMatColNum)$
   
           for(I=0;I<ExpMatColNum;I++)
                   for(J=0;J<ExpMatRowNum;J++)
                           BVec[I]+=ExpMat[J][I]$
   
           SolveList=[]$
           for(I=0;I<ExpMatColNum;I++){
                   TMP=0$
                   for(J=0;J<I;J++)
                           TMP+=NormMat[J][I]*Vars[J]$
   
                   for(J=I;J<ExpMatColNum;J++)
                           TMP+=NormMat[I][J]*Vars[J]$
   
                   TMP-=BVec[I]$
                   SolveList=cons(TMP,SolveList)$
           }
   
           Rea=vars(SolveList)$
   
           VarsList=[]$
           for(I=0;I<length(Vars);I++)
                   if(member(Vars[I],Rea))
                           VarsList=cons(Vars[I],VarsList)$
   
           Res=solve(SolveList,VarsList)$
           Res=getgcd(Res,Rea)$
   
           if(nonposdegchk(Res)){
   
                   TMP1=makeret(Res,Vars,1)$
   
                   if(FLAG==0){
   
                           if(TMP1[0]==0){
   
                                   TMP=roundret(TMP1[1])$
   
                                   RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),ID))$
   
                                   if(TMP!=[])
                                           RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$
                           }
                           else{
   
                                   TMP=vtol(TMP1[1])$
                                   RET0=[]$
                                   if((TMP0=fixedpoint(TMP,0))!=[]){
   
                                           for(I=0;I<length(TMP0);I++)
                                                   TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
                                           RET0=value2(Vars,TMP,1,1)$
   
                                           if(RET0!=[])
                                                   RET0=wsort(RET0,Vars,map(drint,RET0),-ID)$
                                   }
   
                                   TMP=vtol(TMP1[1])$
                                   if(RET0==[] && (TMP0=fixedpoint(TMP,1))!=[]){
   
                                           for(I=0;I<length(TMP0);I++)
                                                   TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
                                           RET0=value2(Vars,TMP,-1,1)$
   
                                           if(RET0!=[])
                                                   RET0=wsort(RET0,Vars,map(drint,RET0),-ID)$
                                   }
   
                                   RET=append(RET,RET0)$
                           }
   
                   }
                   else if(FLAG==1)
                           RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$
           }
   
           return [NormMat0,RET]$
   }
   
 def weight(PolyList,Vars,FLAG){  def weight(PolyList,Vars,FLAG){
   
         Vars0=vars(PolyList)$          Vars0=vars(PolyList)$
Line 724  def weight(PolyList,Vars,FLAG){
Line 821  def weight(PolyList,Vars,FLAG){
         ExpMat=newvect(length(ExpMat),ExpMat)$          ExpMat=newvect(length(ExpMat),ExpMat)$
   
         TMP=unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG)$          TMP=unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG)$
           if(TMP[1]!=[])
                   RET=append(RET,TMP[1])$
   
         RET=append(RET,TMP[1])$          TMP=leastsq(0,ExpMat,Vars,FLAG,3)$
           if(TMP[1]!=[])
                   RET=append(RET,TMP[1])$
   
         TMP=unitweight2(TMP[0],ExpMat,Vars,FLAG,3)$  
   
         RET=append(RET,TMP)$  
   
         ExpMat=qsort(ExpMat,junban)$          ExpMat=qsort(ExpMat,junban)$
   
         ExpMat2=[]$          ExpMat2=[]$
Line 740  def weight(PolyList,Vars,FLAG){
Line 837  def weight(PolyList,Vars,FLAG){
   
         if(size(ExpMat)[0]!=length(ExpMat2)){          if(size(ExpMat)[0]!=length(ExpMat2)){
                 ExpMat=newvect(length(ExpMat2),ExpMat2)$                  ExpMat=newvect(length(ExpMat2),ExpMat2)$
                 RET=append(RET,unitweight2(0,ExpMat,Vars,FLAG,5))$                  TMP=leastsq(0,ExpMat,Vars,FLAG,5)$
                   if(TMP[1]!=[])
                           RET=append(RET,TMP[1])$
         }          }
         else{          else{
                 TMP0=map(ltov,TMP0)$                  TMP=map(ltov,TMP[1])$
   
                 for(I=0;I<length(TMP0);I++)                  for(I=0;I<length(TMP);I++){
                         if(TMP0[I][0]==3)                          if(TMP[I][0]==3)
                                 TMP0[I][0]=5$                                  TMP[I][0]=5$
                         else if(TMP0[I][0]==4)                          else if(TMP[I][0]==4)
                                 TMP0[I][0]=6$                                  TMP[I][0]=6$
                   }
   
                 TMP0=map(vtol,TMP0)$                  TMP=map(vtol,TMP)$
   
                 RET=append(RET,TMP0)$                  RET=append(RET,TMP)$
         }          }
   
         return RET$          return RET$
 }  }
   
 end$  end$
   
   

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.39

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