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

Annotation of OpenXM_contrib2/asir2000/lib/weight, Revision 1.16

1.4       kimura      1: load("solve")$
                      2: load("gr")$
                      3:
1.9       kimura      4: def nonzerovec(A){
                      5:
                      6:        for(I=0;I<size(A)[0];I++)
                      7:                if(A[I]!=0)
                      8:                        return 1$
                      9:
                     10:        return 0$
                     11: }
                     12:
1.8       kimura     13: def junban(A,B){
                     14:        return (A<B ? 1:(A>B ? -1:0))$
                     15: }
                     16:
                     17: def worder(A,B){
                     18:        return (A[0]<B[0] ? 1:(A[0]>B[0] ? -1:0))$
                     19: }
                     20:
1.10      kimura     21: def bsort(A){
1.8       kimura     22:
1.10      kimura     23:        K=size(A)[0]-1$
                     24:        while(K>=0){
                     25:                J=-1$
                     26:                for(I=1;I<=K;I++)
                     27:                        if(A[I-1][0]<A[I][0]){
                     28:                                J=I-1$
                     29:                                X=A[J]$
                     30:                                A[J]=A[I]$
                     31:                                A[I]=X$
                     32:                        }
                     33:                K=J$
                     34:        }
                     35:        return A$
                     36: }
                     37:
                     38: def perm(I,P,TMP){
                     39:
                     40:        if(I>0){
                     41:                TMP=perm(I-1,P,TMP)$
                     42:                for(J=I-1;J>=0;J--){
                     43:                        T=P[I]$
                     44:                        P[I]=P[J]$
                     45:                        P[J]=T$
                     46:                        TMP=perm(I-1,P,TMP)$
                     47:                        T=P[I]$
                     48:                        P[I]=P[J]$
                     49:                        P[J]=T$
                     50:                }
                     51:
                     52:                return TMP$
                     53:        }
                     54:        else{
                     55:                for(TMP0=[],K=0;K<size(P)[0];K++)
                     56:                        TMP0=cons(P[K],TMP0)$
                     57:
                     58:                TMP=cons(TMP0,TMP)$
                     59:                return TMP$
                     60:        }
                     61: }
                     62:
                     63: def marge(A,B){
                     64:
                     65:        RET=[]$
                     66:        for(I=0;I<length(A);I++)
                     67:                for(J=0;J<length(B);J++)
                     68:                        RET=cons(append(A[I],B[J]),RET)$
                     69:
                     70:        return RET$
                     71: }
                     72:
                     73: def wsort(A,B,C,FLAG){
                     74:
                     75:        if(FLAG==0){
                     76:                D=newvect(length(B))$
                     77:                for(I=0;I<length(B);I++)
                     78:                        D[I]=[A[I],B[I],C[I]]$
                     79:
                     80:                D=bsort(D)$
                     81:                E=[]$
                     82:                for(I=0;I<length(B);I++)
                     83:                        E=cons(D[I][1],E)$
                     84:                E=reverse(E)$
                     85:                F=[]$
                     86:                for(I=0;I<length(B);I++)
                     87:                        F=cons(D[I][2],F)$
                     88:                F=reverse(F)$
1.8       kimura     89:
1.10      kimura     90:                return [[E,F]]$
                     91:        }
                     92:        else{
                     93:                D=newvect(length(B))$
                     94:                for(I=0;I<length(B);I++)
                     95:                        D[I]=[A[I],B[I],C[I]]$
                     96:
                     97:                D=qsort(D,worder)$
                     98:                D0=[]$
                     99:
                    100:                for(I=0,J=0,TMP=[],X=0;I<size(D)[0];I++){
                    101:                        if(X==D[I][0])
                    102:                                TMP=cons(cdr(D[I]),TMP)$
                    103:                        else{
                    104:                                D0=cons(TMP,D0)$
                    105:                                TMP=[]$
                    106:                                TMP=cons(cdr(D[I]),TMP)$
                    107:                                X=car(D[I])$
                    108:                        }
                    109:                }
                    110:                D0=cdr(reverse(cons(TMP,D0)))$
                    111:                D0=map(ltov,D0)$
                    112:                for(I=0,TMP=[[]];I<length(D0);I++){
                    113:                        TMP0=perm(length(D0[I])-1,D0[I],[])$
                    114:                        TMP=marge(TMP,TMP0)$
                    115:                }
                    116:
                    117:                RET=[]$
                    118:                for(I=0;I<length(TMP);I++){
                    119:                        TMP0=[]$
                    120:                        TMP1=[]$
                    121:                        for(J=0;J<length(TMP[I]);J++){
                    122:                                TMP0=cons(TMP[I][J][0],TMP0)$
                    123:                                TMP1=cons(TMP[I][J][1],TMP1)$
                    124:                        }
                    125:                        TMP0=reverse(TMP0)$
                    126:                        TMP1=reverse(TMP1)$
                    127:
                    128:                        RET=cons([TMP0,TMP1],RET)$
                    129:                }
                    130:
                    131:                return RET$
                    132:        }
1.8       kimura    133: }
                    134:
                    135: def derase(A){
                    136:
                    137:        B=newvect(length(A),A)$
                    138:        B=qsort(B,junban)$
                    139:        C=[]$
                    140:        for(I=0;I<size(B)[0];I++)
                    141:                if(car(C)!=B[I])
                    142:                        C=cons(B[I],C)$
                    143:
                    144:        return reverse(C)$
                    145: }
                    146:
1.4       kimura    147: def nonposdegchk(Res){
                    148:
                    149:        for(I=0;I<length(Res);I++)
                    150:                if(Res[I][1]<=0)
                    151:                        return 0$
                    152:
                    153:        return 1$
                    154: }
                    155:
1.8       kimura    156: def getgcd(A,B){
                    157:
                    158:        VarsNumA=length(A)$
                    159:        VarsNumB=length(B)$
                    160:
                    161:        C=newvect(VarsNumB,B)$
                    162:
                    163:        for(I=0;I<VarsNumA;I++){
                    164:
                    165:                for(J=0;J<VarsNumB;J++)
1.16    ! kimura    166:                        if(B[J]==A[I][0])
1.8       kimura    167:                                break$
                    168:
                    169:                if(J<VarsNumB)
                    170:                        C[J]=A[I][1]$
                    171:        }
                    172:
                    173:        D=0$
                    174:        for(I=0;I<VarsNumB;I++)
                    175:                D=gcd(D,C[I])$
                    176:
                    177:        if(D!=0){
                    178:                C=C/D$
                    179:                C=map(red,C)$
                    180:        }
1.6       kimura    181:
1.8       kimura    182:        for(L=1,D=0,I=0;I<VarsNumB;I++){
                    183:                if(type(TMP=dn(C[I]))==1)
                    184:                        L=ilcm(L,TMP)$
                    185:
                    186:                if(type(TMP=nm(C[I]))==1)
                    187:                        D=igcd(D,TMP)$
                    188:        }
                    189:
                    190:        C=C*L$
                    191:        if(D!=0)
                    192:                C=C/D$
1.6       kimura    193:
1.8       kimura    194:        RET=[]$
                    195:        for(I=0;I<VarsNumB;I++)
                    196:                RET=cons([B[I],C[I]],RET)$
1.6       kimura    197:
1.8       kimura    198:        return RET$
1.6       kimura    199: }
                    200:
1.10      kimura    201: def makeret(Res,Vars,FLAG){
1.4       kimura    202:
1.8       kimura    203:        ResNum=length(Res)$
1.4       kimura    204:        VarsNum=length(Vars)$
                    205:
1.16    ! kimura    206:        ResVec=newvect(VarsNum,Vars)$
1.4       kimura    207:
1.16    ! kimura    208:        M=0$
        !           209:        for(I=0;I<ResNum;I++){
        !           210:
        !           211:                for(J=0;J<VarsNum;J++)
        !           212:                        if(Vars[J]==Res[I][0])
        !           213:                                break;
        !           214:
        !           215:                if(J<VarsNum){
        !           216:                        ResVec[J]=TMP=Res[I][1]$
        !           217:
        !           218:                        if(FLAG && type(TMP)==1){
1.4       kimura    219:                                if(M==0)
1.16    ! kimura    220:                                        M=TMP$
1.4       kimura    221:                                else
1.16    ! kimura    222:                                        if(TMP<M)
        !           223:                                                M=TMP$
1.4       kimura    224:                        }
                    225:                }
1.8       kimura    226:        }
                    227:
                    228:        if(M!=0)
                    229:                ResVec=ResVec/M;
1.4       kimura    230:
1.8       kimura    231:        RET=newvect(VarsNum,Vars)$
1.4       kimura    232:
1.8       kimura    233:        for(I=0;I<ResNum;I++){
                    234:                for(J=0;J<VarsNum;J++)
                    235:                        if(Vars[J]==Res[I][0])
                    236:                                break$
1.4       kimura    237:
1.8       kimura    238:                if(J<VarsNum)
                    239:                        RET[J]=ResVec[I]$
                    240:        }
                    241:
1.10      kimura    242:
                    243:        for(J=0;J<length(Vars);J++)
                    244:                RET=map(subst,RET,Vars[J],
                    245:                        strtov(rtostr(Vars[J])+"_deg"))$
                    246:
1.4       kimura    247:        for(I=0;I<VarsNum;I++)
1.8       kimura    248:                if(type(RET[I])!=1)
                    249:                        return [1,RET]$
1.4       kimura    250:
1.8       kimura    251:        return [0,RET]$
1.4       kimura    252: }
                    253:
                    254: def roundret(V){
                    255:
1.8       kimura    256:        VN=size(V)[0]$
1.4       kimura    257:
1.8       kimura    258:        RET0=V$
1.13      kimura    259:        for(I=1;I<1000;I++){
1.4       kimura    260:                RET1=I*RET0$
                    261:                for(J=0;J<VN;J++){
                    262:                        X=drint(RET1[J])$
                    263:                        if(dabs(X-RET1[J])<0.2)
                    264:                                RET1[J]=X$
                    265:                        else
                    266:                                break$
                    267:                }
                    268:                if(J==VN)
                    269:                        break$
                    270:        }
                    271:
                    272:        if(I==1000)
                    273:                return []$
                    274:        else
                    275:                return RET1$
                    276: }
                    277:
                    278: def chkou(L,ExpMat,CHAGORD){
                    279:
1.8       kimura    280:        for(P=1,I=0;I<L;I++){
1.4       kimura    281:                Q=ExpMat[L][CHAGORD[I]]$
                    282:                for(J=0;J<size(ExpMat[0])[0];J++){
                    283:                        ExpMat[L][CHAGORD[J]]=red((ExpMat[I][CHAGORD[I]]
                    284:                                *ExpMat[L][CHAGORD[J]]-
                    285:                                        Q*ExpMat[I][CHAGORD[J]])/P)$
                    286:                }
                    287:
                    288:                P=ExpMat[I][CHAGORD[I]]$
                    289:        }
                    290:
                    291:        for(J=0;J<size(ExpMat[0])[0];J++)
                    292:                if(ExpMat[L][CHAGORD[J]]!=0)
                    293:                        break$
                    294:
                    295:        if(J==size(ExpMat[0])[0])
                    296:                return L$
                    297:        else{
                    298:                TMP=CHAGORD[L]$
                    299:                CHAGORD[L]=CHAGORD[J]$
                    300:                CHAGORD[J]=TMP$
                    301:                return (L+1)$
                    302:        }
                    303: }
                    304:
1.8       kimura    305: def qcheckmain(PolyList,Vars){
1.4       kimura    306:
                    307:        RET=[]$
                    308:        PolyListNum=length(PolyList)$
                    309:        VarsNum=length(Vars)$
                    310:
                    311:        ExpMat=newvect(VarsNum)$
                    312:        CHAGORD=newvect(VarsNum)$
                    313:        for(I=0;I<VarsNum;I++)
                    314:                CHAGORD[I]=I$
                    315:
                    316:        L=0$
                    317:        for(I=0;I<PolyListNum;I++){
                    318:                Poly=dp_ptod(PolyList[I],Vars)$
                    319:                BASE0=dp_etov(dp_ht(Poly))$
                    320:                Poly=dp_rest(Poly)$
                    321:                for(;Poly!=0;Poly=dp_rest(Poly)){
                    322:                        ExpMat[L]=dp_etov(dp_ht(Poly))-BASE0$
                    323:                        L=chkou(L,ExpMat,CHAGORD)$
1.8       kimura    324:                        if(L==VarsNum-1)
                    325:                                return [L,CHAGORD,ExpMat]$
1.4       kimura    326:                }
                    327:        }
                    328:
1.8       kimura    329:        return [L,CHAGORD,ExpMat]$
1.4       kimura    330: }
                    331:
                    332: def inner(A,B){
                    333:
                    334:        SUM=0$
                    335:        for(I=0;I<size(A)[0];I++)
                    336:                SUM+=A[I]*B[I]$
                    337:
                    338:        return SUM$
                    339: }
                    340:
                    341: def checktd(PolyList,Vars,ResVars){
                    342:
                    343:        PolyListNum=length(PolyList)$
                    344:        VarsNum=length(Vars)$
                    345:
                    346:        L=0$
                    347:        for(I=0;I<PolyListNum;I++){
                    348:                Poly=dp_ptod(PolyList[I],Vars)$
                    349:                J0=inner(dp_etov(dp_ht(Poly)),ResVars)$
                    350:                Poly=dp_rest(Poly)$
                    351:                for(;Poly!=0;Poly=dp_rest(Poly))
                    352:                        if(J0!=inner(dp_etov(dp_ht(Poly)),ResVars))
                    353:                                return 0$
                    354:        }
                    355:
                    356:        return 1$
                    357: }
                    358:
1.10      kimura    359: def qcheck(PolyList,Vars,FLAG){
1.4       kimura    360:
1.10      kimura    361:        RET=[]$
1.8       kimura    362:        Res=qcheckmain(PolyList,Vars)$
1.4       kimura    363:        VarsNum=length(Vars)$
                    364:
                    365:        IndNum=Res[0]$
                    366:        CHAGORD=Res[1]$
                    367:        ExpMat=Res[2]$
                    368:
                    369:        SolveList=[]$
                    370:        for(I=0;I<IndNum;I++){
                    371:                TMP=0$
                    372:                for(J=0;J<VarsNum;J++)
                    373:                        TMP+=ExpMat[I][CHAGORD[J]]*Vars[CHAGORD[J]]$
                    374:
                    375:                SolveList=cons(TMP,SolveList)$
                    376:        }
                    377:
1.8       kimura    378:        Rea=vars(SolveList)$
                    379:
1.4       kimura    380:        VarsList=[]$
                    381:        for(I=0;I<VarsNum;I++)
1.8       kimura    382:                if(member(Vars[CHAGORD[I]],Rea))
                    383:                        VarsList=cons(Vars[CHAGORD[I]],VarsList)$
1.4       kimura    384:
                    385:        Res=solve(reverse(SolveList),reverse(VarsList))$
1.8       kimura    386:        Res=getgcd(Res,Rea)$
1.4       kimura    387:
                    388:        if(nonposdegchk(Res)){
                    389:
1.10      kimura    390:                ResVars=makeret(Res,Vars,0)$
1.4       kimura    391:
1.10      kimura    392:                if(checktd(PolyList,Vars,ResVars[1])==1){
                    393:                        if(ResVars[0]==0){
                    394:                                RET=append(RET,wsort(ResVars[1],Vars,
                    395:                                        ResVars[1],FLAG))$
                    396:                                return RET$
                    397:                        }
                    398:                        else{
1.11      kimura    399:                                RET=append(RET,[[Vars,vtol(ResVars[1])]])$
1.10      kimura    400:                                return RET$
                    401:                        }
1.4       kimura    402:                }
                    403:                else
1.8       kimura    404:                        return []$
1.4       kimura    405:        }
                    406:        else
1.8       kimura    407:                return []$
1.4       kimura    408:
                    409: }
                    410:
1.10      kimura    411: def leastsq(NormMat,ExpMat,Vars,FLAG){
1.8       kimura    412:
                    413:        RET=[]$
1.4       kimura    414:
                    415:        ExpMatRowNum=size(ExpMat)[0]$
                    416:        ExpMatColNum=size(ExpMat[0])[0]$
                    417:
1.8       kimura    418:        if(NormMat==0){
                    419:                NormMat=newmat(ExpMatColNum,ExpMatColNum)$
                    420:
                    421:                for(I=0;I<ExpMatColNum;I++)
                    422:                        for(J=I;J<ExpMatColNum;J++)
                    423:                                for(K=0;K<ExpMatRowNum;K++)
                    424:                                        NormMat[I][J]+=
                    425:                                                ExpMat[K][I]*ExpMat[K][J]$
                    426:        }
1.4       kimura    427:
1.8       kimura    428:        BVec=newvect(ExpMatColNum)$
1.4       kimura    429:
                    430:        for(I=0;I<ExpMatColNum;I++)
                    431:                for(J=0;J<ExpMatRowNum;J++)
1.8       kimura    432:                        BVec[I]+=ExpMat[J][I]$
1.4       kimura    433:
                    434:        SolveList=[]$
                    435:        for(I=0;I<ExpMatColNum;I++){
                    436:                TMP=0$
1.8       kimura    437:                for(J=0;J<I;J++)
                    438:                        TMP+=NormMat[J][I]*Vars[J]$
                    439:
                    440:                for(J=I;J<ExpMatColNum;J++)
1.4       kimura    441:                        TMP+=NormMat[I][J]*Vars[J]$
                    442:
1.8       kimura    443:                TMP-=BVec[I]$
1.4       kimura    444:                SolveList=cons(TMP,SolveList)$
                    445:        }
                    446:
                    447:        Rea=vars(SolveList)$
1.8       kimura    448:
                    449:        VarsList=[]$
                    450:        for(I=0;I<length(Vars);I++)
                    451:                if(member(Vars[I],Rea))
                    452:                        VarsList=cons(Vars[I],VarsList)$
                    453:
                    454:        Res=solve(SolveList,VarsList)$
                    455:        Res=getgcd(Res,Rea)$
1.4       kimura    456:
                    457:        if(nonposdegchk(Res)){
1.16    ! kimura    458:
1.10      kimura    459:                TMP1=makeret(Res,Vars,1)$
1.16    ! kimura    460:
1.8       kimura    461:                if(TMP1[0]==0){
1.14      kimura    462:                        TMP=roundret(TMP1[1])$
1.8       kimura    463:                        if(TMP!=[])
1.10      kimura    464:                                RET=append(RET,wsort(TMP1[1],Vars,TMP,FLAG))$
1.8       kimura    465:
1.10      kimura    466:                        RET=append(RET,wsort(TMP1[1],Vars,
                    467:                                map(drint,TMP1[1]*1.0),FLAG))$
1.8       kimura    468:
                    469:                        return RET$
                    470:                }
                    471:                else{
1.11      kimura    472:                        RET=append(RET,[[Vars,vtol(TMP1[1]*1.0)]])$
1.8       kimura    473:                        return RET$
                    474:                }
                    475:        }
                    476:        else
                    477:                return RET$
                    478:
                    479: }
                    480:
1.10      kimura    481: def weightr(ExpMat,Vars,PolyListNum,OneMat,FLAG){
1.8       kimura    482:
                    483:        RET=[]$
                    484:
                    485:        ExpMatRowNum=size(ExpMat)[0]$
                    486:        ExpMatColNum=size(ExpMat[0])[0]$
                    487:        ExtMatColNum=ExpMatColNum+PolyListNum$
                    488:
                    489:        ExtVars=reverse(Vars)$
                    490:        for(I=0;I<PolyListNum;I++)
                    491:                ExtVars=cons(uc(),ExtVars)$
                    492:
                    493:        ExtVars=reverse(ExtVars)$
                    494:
                    495:        NormMat=newmat(ExpMatColNum,ExtMatColNum)$
                    496:
                    497:        for(I=0;I<ExpMatColNum;I++)
                    498:                for(J=I;J<ExpMatColNum;J++)
                    499:                        for(K=0;K<ExpMatRowNum;K++)
                    500:                                NormMat[I][J]+=
                    501:                                        ExpMat[K][I]*
                    502:                                        ExpMat[K][J]$
                    503:
                    504:        for(I=0;I<ExpMatColNum;I++)
                    505:                for(J=0;J<PolyListNum;J++)
                    506:                        for(K=OneMat[J];K<OneMat[J+1];K++)
                    507:                                NormMat[I][J+ExpMatColNum]-=
                    508:                                        ExpMat[K][I]$
                    509:
                    510:        WVect=newvect(PolyListNum)$
                    511:        for(I=0;I<PolyListNum;I++)
                    512:                WVect[I]=OneMat[I+1]-OneMat[I]$
                    513:
                    514:        for(F=0;F<ExtMatColNum;F++){
                    515:                SolveList=[]$
                    516:                for(I=0;I<ExpMatColNum;I++){
                    517:                        if (F==I)
                    518:                                continue$
                    519:
                    520:                        TMP=0$
                    521:
                    522:                        for(J=0;J<I;J++)
                    523:                                if(J!=F)
                    524:                                        TMP+=NormMat[J][I]*ExtVars[J]$
                    525:
                    526:                        for(J=I;J<ExtMatColNum;J++)
                    527:                                if(J!=F)
                    528:                                        TMP+=NormMat[I][J]*ExtVars[J]$
                    529:
                    530:                        if(F<I)
                    531:                                TMP+=NormMat[F][I]$
                    532:                        else
                    533:                                TMP+=NormMat[I][F]$
                    534:
                    535:                        SolveList=cons(TMP,SolveList)$
                    536:                }
                    537:
                    538:                for(I=0;I<PolyListNum;I++){
                    539:                        if(F==(I+ExpMatColNum))
                    540:                                continue$
                    541:
                    542:                        TMP=0$
                    543:                        for(J=0;J<ExpMatColNum;J++)
                    544:                                if(J!=F)
                    545:                                        TMP+=NormMat[J][I+ExpMatColNum]
                    546:                                                *ExtVars[J]$
                    547:
                    548:                        TMP+=WVect[I]*ExtVars[I+ExpMatColNum]$
                    549:
                    550:                        if(F<ExpMatColNum)
                    551:                                TMP+=NormMat[F][I+ExpMatColNum]$
                    552:
                    553:                        SolveList=cons(TMP,SolveList)$
                    554:                }
                    555:
                    556:                Rea=vars(SolveList)$
                    557:
                    558:                SolVars=[]$
                    559:                for(I=0;I<ExtMatColNum;I++)
                    560:                        if(I!=F && member(ExtVars[I],Rea))
                    561:                                SolVars=cons(ExtVars[I],SolVars)$
                    562:
                    563:                Res=solve(SolveList,SolVars)$
                    564:                Res=cons([ExtVars[F],1],Res)$
                    565:
1.9       kimura    566:                TMP=[]$
                    567:                for(I=0;I<length(Rea);I++)
                    568:                        if(member(Rea[I],Vars))
                    569:                                TMP=cons(Rea[I],TMP)$
                    570:
1.15      kimura    571:                if(member(ExtVars[F],Vars))
                    572:                        TMP=cons(ExtVars[F],TMP)$
                    573:
1.9       kimura    574:                Res=getgcd(Res,TMP)$
1.8       kimura    575:
                    576:                if(nonposdegchk(Res)){
                    577:
1.10      kimura    578:                        TMP1=makeret(Res,Vars,1)$
1.16    ! kimura    579:
1.8       kimura    580:                        if(TMP1[0]==0){
1.14      kimura    581:                                TMP=roundret(TMP1[1])$
1.8       kimura    582:                                if(TMP!=[])
1.10      kimura    583:                                        RET=append(RET,wsort(TMP1[1],Vars,
                    584:                                                TMP,FLAG))$
1.8       kimura    585:
1.10      kimura    586:                                RET=append(RET,wsort(TMP1[1],Vars,
                    587:                                        map(drint,TMP1[1]*1.0),FLAG))$
1.8       kimura    588:                        }
                    589:                        else{
1.11      kimura    590:                                RET=append(RET,[[Vars,vtol(TMP1[1]*1.0)]])$
1.8       kimura    591:                        }
1.4       kimura    592:                }
1.8       kimura    593:
1.4       kimura    594:        }
                    595:
1.8       kimura    596:        return [NormMat,RET]$
1.6       kimura    597: }
                    598:
1.10      kimura    599: def weight(PolyList,Vars,FLAG1,FLAG2){
1.6       kimura    600:
                    601:        Vars0=vars(PolyList)$
                    602:        Vars1=[]$
                    603:        for(I=0;I<length(Vars);I++)
                    604:                if(member(Vars[I],Vars0))
                    605:                        Vars1=cons(Vars[I],Vars1)$
                    606:
                    607:        Vars=reverse(Vars1)$
                    608:
                    609:        RET=[]$
                    610:
1.10      kimura    611:        TMP=qcheck(PolyList,Vars,FLAG2)$
1.6       kimura    612:
1.8       kimura    613:        if(TMP!=[]){
                    614:                RET=append(RET,TMP)$
                    615:                return cons(1,RET)$
1.6       kimura    616:        }
1.4       kimura    617:
1.6       kimura    618:        dp_ord(2)$
1.4       kimura    619:
1.6       kimura    620:        PolyListNum=length(PolyList)$
1.4       kimura    621:
1.10      kimura    622:        if(FLAG1){
1.9       kimura    623:
                    624:                OneMat=newvect(PolyListNum+1,[0])$
                    625:                ExpMat=[]$
                    626:                for(I=0;I<PolyListNum;I++){
                    627:                        for(Poly=dp_ptod(PolyList[I],Vars);
                    628:                                Poly!=0;Poly=dp_rest(Poly)){
                    629:                                ExpMat=cons(dp_etov(dp_ht(Poly)),ExpMat)$
                    630:                        }
                    631:                        OneMat[I+1]=length(ExpMat)$
1.8       kimura    632:                }
1.4       kimura    633:
1.9       kimura    634:                ExpMat=reverse(ExpMat)$
                    635:                ExpMat=newvect(length(ExpMat),ExpMat)$
1.4       kimura    636:
1.10      kimura    637:                TMP=weightr(ExpMat,Vars,PolyListNum,OneMat,FLAG2)$
1.8       kimura    638:                RET=append(RET,TMP[1])$
1.10      kimura    639:                RET=append(RET,leastsq(TMP[0],ExpMat,Vars,FLAG2))$
1.8       kimura    640:        }
1.9       kimura    641:        else{
                    642:                ExpMat=[]$
                    643:                for(I=0;I<PolyListNum;I++){
                    644:                        for(Poly=dp_ptod(PolyList[I],Vars);
                    645:                                Poly!=0;Poly=dp_rest(Poly)){
                    646:                                if(nonzerovec(TMP=dp_etov(dp_ht(Poly))))
                    647:                                        ExpMat=cons(TMP,ExpMat)$
                    648:                        }
                    649:                }
1.8       kimura    650:
1.9       kimura    651:                ExpMat=reverse(ExpMat)$
                    652:                ExpMat=newvect(length(ExpMat),ExpMat)$
1.4       kimura    653:
1.10      kimura    654:                RET=append(RET,leastsq(0,ExpMat,Vars,FLAG2))$
1.9       kimura    655:        }
1.4       kimura    656:
1.6       kimura    657:        ExpMat=qsort(ExpMat,junban)$
1.8       kimura    658:
1.6       kimura    659:        ExpMat2=[]$
                    660:        for(I=0;I<size(ExpMat)[0];I++)
                    661:                if(car(ExpMat2)!=ExpMat[I])
                    662:                        ExpMat2=cons(ExpMat[I],ExpMat2)$
1.4       kimura    663:
1.6       kimura    664:        if(size(ExpMat)[0]!=length(ExpMat2)){
                    665:                ExpMat=newvect(length(ExpMat2),ExpMat2)$
1.10      kimura    666:                RET=append(RET,leastsq(0,ExpMat,Vars,FLAG2))$
1.4       kimura    667:        }
                    668:
1.8       kimura    669:        RET=derase(RET)$
                    670:        return cons(0,RET)$
1.4       kimura    671: }
                    672:
                    673: end$

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