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

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

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

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