=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/lib/weight,v retrieving revision 1.35 retrieving revision 1.40 diff -u -p -r1.35 -r1.40 --- OpenXM_contrib2/asir2000/lib/weight 2004/05/06 02:28:07 1.35 +++ OpenXM_contrib2/asir2000/lib/weight 2004/05/23 02:48:47 1.40 @@ -306,27 +306,26 @@ def makeret(Res,Vars,FLAG){ else M=-1$ - for(I=0;I<ResNum;I++){ - if(member(Res[I][0],Vars)){ - ResVec[I]=Res[I][1]$ + for(I=0;I<ResNum;I++){ + if(member(Res[I][0],Vars)){ + ResVec[I]=Res[I][1]$ - if(FLAG){ + if(FLAG){ if(type(ResVec[I])==1){ - if(M==0) - M=ResVec[I]$ - else - if(ResVec[I]<M) - M=ResVec[I]$ + if(M==0) + M=ResVec[I]$ + else + if(ResVec[I]<M) + M=ResVec[I]$ } else M=-1$ } } - } + } - if(M!=-1) - ResVec=ResVec/M; + ResVec=map(red,ResVec/M)$ RET=newvect(VarsNum,Vars)$ @@ -341,14 +340,14 @@ def makeret(Res,Vars,FLAG){ for(I=0;I<VarsNum;I++) if(type(RET[I])!=1) - return [1,RET]$ + return [1,vtol(RET)]$ - return [0,RET]$ + return [0,vtol(RET)]$ } def roundret(V){ - VN=size(V)[0]$ + VN=length(V)$ K=1$ RET0=V$ @@ -358,7 +357,7 @@ def roundret(V){ S+=(RET0[J]-RET1[J])^2$ for(I=2;I<10;I++){ - RET0=I*V$ + RET0=I*ltov(V)$ RET1=map(drint,RET0)$ T=0$ @@ -371,7 +370,7 @@ def roundret(V){ } } - return map(drint,K*V)$ + return map(drint,vtol(K*ltov(V)))$ } def chkou(L,ExpMat,CHAGORD){ @@ -417,7 +416,7 @@ def qcheckmain(PolyList,Vars){ Poly=dp_ptod(PolyList[I],Vars)$ BASE0=dp_etov(dp_ht(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$ L=chkou(L,ExpMat,CHAGORD)$ if(L==VarsNum-1) @@ -455,7 +454,7 @@ def checktd(PolyList,Vars,ResVars){ return 1$ } -def value2(Vars,Ans,Ba){ +def value2(Vars,Ans,Ba,FLAG){ N=length(Vars)$ Res=newvect(N)$ @@ -469,10 +468,8 @@ def value2(Vars,Ans,Ba){ Res=getgcd(Res,Vars)$ - if(nonposdegchk(Res)){ - TMP1=makeret(Res,Vars,1)$ - return vtol(TMP1[1])$ - } + if(nonposdegchk(Res)) + return makeret(Res,Vars,FLAG)$ else return []$ } @@ -514,105 +511,50 @@ def qcheck(PolyList,Vars,FLAG){ if(FLAG==0){ - if(TMP1[0]==0) + if(TMP1[0]==0){ RET=append(RET,wsort(TMP1[1],Vars,TMP1[1],0))$ + } else{ - TMP=vtol(TMP1[1])$ - RET0=[]$ + TMP=TMP1[1]$ + RET1=[]$ 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)$ + + RET0=value2(Vars,TMP,1,0)$ + if(RET0!=[]) - RET0=wsort(RET0,Vars,RET0,-1)$ + RET1=wsort(RET0[1],Vars,RET0[1],-1)$ } - - TMP=vtol(TMP1[1])$ - if(RET0==[] && (TMP0=fixedpoint(TMP,1))!=[]){ - + + TMP=TMP1[1]$ + if(RET1==[] && (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)$ + + RET0=value2(Vars,TMP,-1,0)$ if(RET0!=[]) - RET0=wsort(RET0,Vars,RET0,-1)$ + RET1=wsort(RET0[1],Vars,RET0[1],-1)$ } - RET=append(RET,RET0)$ + + if(RET1!=[]) + RET=append(RET,RET1)$ + } + } else if(FLAG==1) - RET=append(RET,[[0,Vars,vtol(TMP1[1])]])$ + RET=append(RET,[[0,Vars,TMP1[1]]])$ } } return RET$ } -def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){ - - RET=[]$ - - ExpMatRowNum=size(ExpMat)[0]$ - ExpMatColNum=size(ExpMat[0])[0]$ - ExtMatColNum=ExpMatColNum+1$ - - ExtVars=append(Vars,[uc()])$ - - if(NormMat==0){ - - NormMat0=newvect(ExtMatColNum)$ - for(I=0;I<ExtMatColNum;I++) - NormMat0[I]=newvect(ExtMatColNum)$ - - for(I=0;I<ExpMatColNum;I++) - for(J=I;J<ExpMatColNum;J++) - for(K=0;K<ExpMatRowNum;K++) - NormMat0[I][J]+= - ExpMat[K][I]* - ExpMat[K][J]$ - } - - for(I=0;I<ExpMatColNum;I++) - for(K=0;K<ExpMatRowNum;K++) - NormMat0[I][ExpMatColNum]-=ExpMat[K][I]$ - - NormMat0[ExpMatColNum][ExpMatColNum]=ExpMatRowNum$ - - WorkMat=newvect(ExtMatColNum)$ - for(I=0;I<ExtMatColNum;I++) - WorkMat[I]=newvect(ExtMatColNum)$ - - if(jacobi(ExtMatColNum,NormMat0,WorkMat)){ - - Res=newvect(ExtMatColNum)$ - for(I=0;I<ExtMatColNum;I++){ - Res[I]=newvect(2)$ - Res[I][0]=ExtVars[I]$ - Res[I][1]=WorkMat[ExtMatColNum-1][I]$ - } - - if(nonposdegchk(Res)){ - - TMP1=makeret(Res,Vars,1)$ - - if(FLAG==0){ - TMP=roundret(TMP1[1])$ - - RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$ - - if(TMP!=[]) - RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$ - } - else if(FLAG==1) - RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$ - } - } - - return [NormMat0,RET]$ -} - def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){ RET=[]$ @@ -672,15 +614,15 @@ def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){ TMP1=makeret(Res,Vars,1)$ if(FLAG==0){ - TMP=roundret(TMP1[1])$ + RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),1))$ - RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),1))$ - + TMP=roundret(TMP1[1])$ if(TMP!=[]) RET=append(RET,wsort(TMP1[1],Vars,TMP,2))$ + } else if(FLAG==1) - RET=append(RET,[[1,Vars,vtol(TMP1[1])]])$ + RET=append(RET,[[1,Vars,TMP1[1]]])$ } } @@ -740,47 +682,54 @@ def leastsq(NormMat,ExpMat,Vars,FLAG,ID){ if(FLAG==0){ if(TMP1[0]==0){ + RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),ID))$ TMP=roundret(TMP1[1])$ - RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$ - if(TMP!=[]) RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$ } else{ - TMP=vtol(TMP1[1])$ - RET0=[]$ + TMP=TMP1[1]$ + RET1=[]$ 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)$ + RET0=value2(Vars,TMP,1,1)$ + if(RET0!=[]) - RET0=wsort(RET0,Vars,RET0,-ID)$ + RET1=wsort(RET0[1],Vars,map(drint,RET0[1]),-ID)$ + } - TMP=vtol(TMP1[1])$ - if(RET0==[] && (TMP0=fixedpoint(TMP,1))!=[]){ + TMP=TMP1[1]$ + if(RET1==[] && (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)$ + RET0=value2(Vars,TMP,-1,1)$ if(RET0!=[]) - RET0=wsort(RET0,Vars,RET0,-ID)$ + RET1=wsort(RET0[1],Vars,map(drint,RET0[1]),-ID)$ } - RET=append(RET,RET0)$ + if(RET1!=[]){ + RET=append(RET,RET1)$ + TMP=roundret(RET0[1])$ + if(TMP!=[]) + RET=append(RET,wsort(RET0[1],Vars,TMP,-(ID+1)))$ + } + } } else if(FLAG==1) - RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$ + RET=append(RET,[[ID,Vars,TMP1[1]]])$ } - return RET$ + return [NormMat0,RET]$ } def weight(PolyList,Vars,FLAG){ @@ -823,13 +772,9 @@ def weight(PolyList,Vars,FLAG){ if(TMP[1]!=[]) RET=append(RET,TMP[1])$ - TMP=unitweight2(TMP[0],ExpMat,Vars,FLAG,3)$ + TMP=leastsq(0,ExpMat,Vars,FLAG,3)$ if(TMP[1]!=[]) RET=append(RET,TMP[1])$ - else{ - TMP=leastsq(0,ExpMat,Vars,FLAG,7)$ - RET=append(RET,TMP)$ - } ExpMat=qsort(ExpMat,junban)$ @@ -840,13 +785,9 @@ def weight(PolyList,Vars,FLAG){ if(size(ExpMat)[0]!=length(ExpMat2)){ ExpMat=newvect(length(ExpMat2),ExpMat2)$ - TMP=unitweight2(0,ExpMat,Vars,FLAG,5)$ + TMP=leastsq(0,ExpMat,Vars,FLAG,5)$ if(TMP[1]!=[]) RET=append(RET,TMP[1])$ - else{ - TMP=leastsq(0,ExpMat,Vars,FLAG,9)$ - RET=append(RET,TMP)$ - } } else{ TMP=map(ltov,TMP[1])$ @@ -856,10 +797,11 @@ def weight(PolyList,Vars,FLAG){ TMP[I][0]=5$ else if(TMP[I][0]==4) TMP[I][0]=6$ - else if(TMP[I][0]==7) - TMP[I][0]=9$ - else if(TMP[I][0]==8) - TMP[I][0]=10$ + else if(TMP[I][0]==-3) + TMP[I][0]=-5$ + else if(TMP[I][0]==-4) + TMP[I][0]=-6$ + } TMP=map(vtol,TMP)$