=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/lib/weight,v retrieving revision 1.9 retrieving revision 1.33 diff -u -p -r1.9 -r1.33 --- OpenXM_contrib2/asir2000/lib/weight 2003/11/21 08:07:16 1.9 +++ OpenXM_contrib2/asir2000/lib/weight 2004/02/29 13:20:47 1.33 @@ -1,54 +1,243 @@ load("solve")$ load("gr")$ -def nonzerovec(A){ +#define EPS 1E-6 +#define TINY 1E-20 +#define MAX_ITER 100 - for(I=0;I<size(A)[0];I++) - if(A[I]!=0) - return 1$ +def rotate(A,I,J,K,L,C,S){ - return 0$ + X=A[I][J]; + Y=A[K][L]; + A[I][J]=X*C-Y*S; + A[K][L]=X*S+Y*C; + + return 1; } +def jacobi(N,A,W){ + + S=OFFDIAG=0.0; + + for(J=0;J<N;J++){ + + for(K=0;K<N;K++) + W[J][K]=0.0; + + W[J][J]=1.0; + S+=A[J][J]*A[J][J]; + + for(K=J+1;K<N;K++) + OFFDIAG+=A[J][K]*A[J][K]; + } + + TOLERANCE=EPS*EPS*(S/2+OFFDIAG); + + for(ITER=1;ITER<=MAX_ITER;ITER++){ + + OFFDIAG=0.0; + for(J=0;J<N-1;J++) + for(K=J+1;K<N;K++) + OFFDIAG+=A[J][K]*A[J][K]; + + if(OFFDIAG < TOLERANCE) + break; + + for(J=0;J<N-1;J++){ + for(K=J+1;K<N;K++){ + + if(dabs(A[J][K])<TINY) + continue; + + T=(A[K][K]-A[J][J])/(2.0*A[J][K]); + + if(T>=0.0) + T=1.0/(T+dsqrt(T*T+1)); + else + T=1.0/(T-dsqrt(T*T+1)); + + C=1.0/dsqrt(T*T+1); + + S=T*C; + + T*=A[J][K]; + + A[J][J]-=T; + A[K][K]+=T; + A[J][K]=0.0; + + for(I=0;I<J;I++) + rotate(A,I,J,I,K,C,S); + + for(I=J+1;I<K;I++) + rotate(A,J,I,I,K,C,S); + + for(I=K+1;I<N;I++) + rotate(A,J,I,K,I,C,S); + + for(I=0;I<N;I++) + rotate(W,J,I,K,I,C,S); + + } + } + } + + if (ITER > MAX_ITER) + return 0; + + for(I=0;I<N-1;I++){ + + K=I; + + T=A[K][K]; + + for(J=I+1;J<N;J++) + if(A[J][J]>T){ + K=J; + T=A[K][K]; + } + + A[K][K]=A[I][I]; + + A[I][I]=T; + + V=W[K]; + + W[K]=W[I]; + + W[I]=V; + } + + return 1; +} + +def interval2value(A,Vars){ + + B=atl(A)$ + + if(length(B)>2){ + print("bug")$ + return []$ + } + else if(length(B)==0){ + if(fop(A)==0) + return [Vars,1]$ + else + return []$ + } + else if(length(B)==1){ + + C=fargs(B[0])$ + D=vars(C)$ + E=solve(C,D)$ + + if(fop(B[0])==15) + return [Vars,E[0][1]+1]$ + else if(fop(B[0])==11) + return [Vars,E[0][1]-1]$ + else if(fop(B[0])==8) + return [Vars,E[0][1]]$ + else + return []$ + } + else{ + + C=fargs(B[0])$ + D=vars(C)$ + E=solve(C,D)$ + + C=fargs(B[1])$ + D=vars(C)$ + F=solve(C,D)$ + + return [Vars,(E[0][1]+F[0][1])/2]$ + } + +} + +def fixpointmain(F,Vars){ + + RET=[]$ + for(I=length(Vars)-1;I>=1;I--){ + + for(H=[],J=0;J<I;J++) + H=cons(Vars[J],H)$ + + G=interval2value(qe(ex(H,F)),Vars[I])$ + + if(G==[]) + return RET$ + else + RET=cons(G,RET)$ + + F=subf(F,G[0],G[1])$ + } + + G=interval2value(simpl(F),Vars[0])$ + + if(G==[]) + return RET$ + else + RET=cons(G,RET)$ + + return RET$ +} + + +def fixedpoint(A,FLAG){ + + Vars=vars(A)$ + + N=length(A)$ + + if (FLAG==0) + for(F=@true,I=0;I < N; I++ ) { F = F @&& A[I] @> 0$ } + else if (FLAG==1) + for(F=@true,I=0;I < N; I++ ) { F = F @&& A[I] @< 0$ } + + return fixpointmain(F,Vars)$ +} + def junban(A,B){ return (A<B ? 1:(A>B ? -1:0))$ } -def worder(A,B){ - return (A[0]<B[0] ? 1:(A[0]>B[0] ? -1:0))$ +def bsort(A){ + + K=size(A)[0]-1$ + while(K>=0){ + J=-1$ + for(I=1;I<=K;I++) + if(A[I-1][0]<A[I][0]){ + J=I-1$ + X=A[J]$ + A[J]=A[I]$ + A[I]=X$ + } + K=J$ + } + return A$ } -def wsort(A,B,C){ +def wsort(A,B,C,ID){ D=newvect(length(B))$ for(I=0;I<length(B);I++) D[I]=[A[I],B[I],C[I]]$ - D=qsort(D,worder)$ - E=[]$ - for(I=0;I<length(B);I++) + D=bsort(D)$ + + for(E=[],I=0;I<length(B);I++) E=cons(D[I][1],E)$ E=reverse(E)$ - F=[]$ - for(I=0;I<length(B);I++) + + for(F=[],I=0;I<length(B);I++) F=cons(D[I][2],F)$ F=reverse(F)$ - return [E,F]$ + return [[ID,E,F]]$ } -def derase(A){ - - B=newvect(length(A),A)$ - B=qsort(B,junban)$ - C=[]$ - for(I=0;I<size(B)[0];I++) - if(car(C)!=B[I]) - C=cons(B[I],C)$ - - return reverse(C)$ -} - def nonposdegchk(Res){ for(I=0;I<length(Res);I++) @@ -60,88 +249,86 @@ def nonposdegchk(Res){ def getgcd(A,B){ - VarsNumA=length(A)$ - VarsNumB=length(B)$ + Anum=length(A)$ - C=newvect(VarsNumB,B)$ + TMP=[]$ + for(I=0;I<length(B);I++){ - for(I=0;I<VarsNumA;I++){ + for(J=0;J<Anum;J++) + if(B[I]==A[J][0]) + break; - for(J=0;J<VarsNumB;J++) - if(C[J]==A[I][0]) - break$ - - if(J<VarsNumB) - C[J]=A[I][1]$ + if(J==Anum) + TMP=cons([B[I],B[I]],TMP)$ } + A=append(A,TMP)$ - D=0$ - for(I=0;I<VarsNumB;I++) - D=gcd(D,C[I])$ + Anum=length(A)$ + A=map(ltov,A)$ + for(D=0,I=0;I<Anum;I++) + D=gcd(D,A[I][1])$ + if(D!=0){ - C=C/D$ - C=map(red,C)$ + for(I=0;I<Anum;I++) + A[I][1]=red(A[I][1]/D)$ } - for(L=1,D=0,I=0;I<VarsNumB;I++){ - if(type(TMP=dn(C[I]))==1) + for(L=1,D=0,I=0;I<Anum;I++){ + if(type(TMP=dn(A[I][1]))==1) L=ilcm(L,TMP)$ - if(type(TMP=nm(C[I]))==1) + if(type(TMP=nm(A[I][1]))==1) D=igcd(D,TMP)$ } - C=C*L$ - if(D!=0) - C=C/D$ + for(I=0;I<Anum;I++) + A[I][1]=A[I][1]*L$ - RET=[]$ - for(I=0;I<VarsNumB;I++) - RET=cons([B[I],C[I]],RET)$ + if(D!=0){ - return RET$ -} - -def resvars(Res,Vars){ - - ResVars=newvect(length(Vars),Vars)$ - for(I=0;I<length(Res);I++){ - - for(J=0;J<size(ResVars)[0];J++) - if(Res[I][0]==ResVars[J]) - break$ - - if(J<size(ResVars)[0]) - ResVars[J]=Res[I][1]$ + for(I=0;I<Anum;I++) + A[I][1]=A[I][1]/D$ } - return(ResVars)$ + + return map(vtol,A)$ } -def makeret(Res,Vars){ +def makeret(Res,Vars,FLAG){ ResNum=length(Res)$ VarsNum=length(Vars)$ ResVec=newvect(ResNum)$ - for(M=0,I=0;I<ResNum;I++){ - if(member(Res[I][0],Vars)){ - ResVec[I]=Res[I][1]$ - if(type(ResVec[I])==1){ - if(M==0) - M=ResVec[I]$ + if(FLAG) + M=0$ + else + M=-1$ + + for(I=0;I<ResNum;I++){ + if(member(Res[I][0],Vars)){ + ResVec[I]=Res[I][1]$ + + if(FLAG){ + if(type(ResVec[I])==1){ + if(M==0) + M=ResVec[I]$ + else + if(ResVec[I]<M) + M=ResVec[I]$ + } else - if(ResVec[I]<M) - M=ResVec[I]$ + M=-1$ } } - } - - if(M!=0) + } + + + if(M!=-1) ResVec=ResVec/M; - RET=newvect(VarsNum,Vars)$ + RET=newvect(VarsNum,Vars)$ for(I=0;I<ResNum;I++){ for(J=0;J<VarsNum;J++) @@ -163,24 +350,28 @@ def roundret(V){ VN=size(V)[0]$ + K=1$ RET0=V$ - for(I=1;I<1000;I++){ - RET1=I*RET0$ - for(J=0;J<VN;J++){ - X=drint(RET1[J])$ - if(dabs(X-RET1[J])<0.2) - RET1[J]=X$ - else - break$ - } - if(J==VN) - break$ + RET1=map(drint,RET0)$ + S=0$ + for(J=0;J<VN;J++) + S+=(RET0[J]-RET1[J])^2$ + + for(I=2;I<10;I++){ + RET0=I*V$ + RET1=map(drint,RET0)$ + + T=0$ + for(J=0;J<VN;J++) + T+=(RET0[J]-RET1[J])^2$ + + if(T<S){ + K=I$ + S=T$ + } } - if(I==1000) - return []$ - else - return RET1$ + return map(drint,K*V)$ } def chkou(L,ExpMat,CHAGORD){ @@ -264,8 +455,31 @@ def checktd(PolyList,Vars,ResVars){ return 1$ } -def qcheck(PolyList,Vars){ +def value2(Vars,Ans,Ba){ + N=length(Vars)$ + Res=newvect(N)$ + for(I=0;I<N;I++){ + Res[I]=newvect(2)$ + Res[I][0]=Vars[I]$ + Res[I][1]=Ba*Ans[I]$ + } + Res=map(vtol,Res)$ + Res=vtol(Res)$ + + Res=getgcd(Res,Vars)$ + + if(nonposdegchk(Res)){ + TMP1=makeret(Res,Vars,1)$ + return vtol(TMP1[1])$ + } + else + return []$ +} + +def qcheck(PolyList,Vars,FLAG){ + + RET=[]$ Res=qcheckmain(PolyList,Vars)$ VarsNum=length(Vars)$ @@ -286,7 +500,7 @@ def qcheck(PolyList,Vars){ VarsList=[]$ for(I=0;I<VarsNum;I++) - if(member(Vars[CHAGORD[I]],Rea)) + if(member(TMP0=Vars[CHAGORD[I]],Rea)) VarsList=cons(Vars[CHAGORD[I]],VarsList)$ Res=solve(reverse(SolveList),reverse(VarsList))$ @@ -294,93 +508,112 @@ def qcheck(PolyList,Vars){ if(nonposdegchk(Res)){ - ResVars=resvars(Res,Vars)$ + TMP1=makeret(Res,Vars,0)$ - if(checktd(PolyList,Vars,ResVars)==1){ + if(checktd(PolyList,Vars,TMP1[1])==1){ - for(J=0;J<length(Vars);J++) - ResVars=map(subst,ResVars,Vars[J], - strtov(rtostr(Vars[J])+"_deg"))$ - - return [wsort(ResVars,Vars,ResVars)]$ + if(FLAG==0){ + + if(TMP1[0]==0) + RET=append(RET,wsort(TMP1[1],Vars,TMP1[1],0))$ + 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)$ + if(RET0!=[]) + RET0=wsort(RET0,Vars,RET0,-1)$ + } + + 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)$ + + if(RET0!=[]) + RET0=wsort(RET0,Vars,RET0,-1)$ + } + RET=append(RET,RET0)$ + } + } + else if(FLAG==1) + RET=append(RET,[[0,Vars,vtol(TMP1[1])]])$ } - else - return []$ } - else - return []$ + return RET$ } -def leastsq(NormMat,ExpMat,Vars){ +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){ - NormMat=newmat(ExpMatColNum,ExpMatColNum)$ + 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++) - NormMat[I][J]+= - ExpMat[K][I]*ExpMat[K][J]$ + NormMat0[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]$ + for(K=0;K<ExpMatRowNum;K++) + NormMat0[I][ExpMatColNum]-=ExpMat[K][I]$ - SolveList=[]$ - for(I=0;I<ExpMatColNum;I++){ - TMP=0$ - for(J=0;J<I;J++) - TMP+=NormMat[J][I]*Vars[J]$ + NormMat0[ExpMatColNum][ExpMatColNum]=ExpMatRowNum$ - for(J=I;J<ExpMatColNum;J++) - TMP+=NormMat[I][J]*Vars[J]$ + WorkMat=newvect(ExtMatColNum)$ + for(I=0;I<ExtMatColNum;I++) + WorkMat[I]=newvect(ExtMatColNum)$ - TMP-=BVec[I]$ - SolveList=cons(TMP,SolveList)$ - } + if(jacobi(ExtMatColNum,NormMat0,WorkMat)){ - Rea=vars(SolveList)$ + 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]$ + } - VarsList=[]$ - for(I=0;I<length(Vars);I++) - if(member(Vars[I],Rea)) - VarsList=cons(Vars[I],VarsList)$ + if(nonposdegchk(Res)){ - Res=solve(SolveList,VarsList)$ - Res=getgcd(Res,Rea)$ + TMP1=makeret(Res,Vars,1)$ - if(nonposdegchk(Res)){ - TMP1=makeret(Res,Vars)$ - if(TMP1[0]==0){ - TMP=roundret(TMP1[1]*1.0)$ - if(TMP!=[]) - RET=cons(wsort(TMP1[1],Vars,TMP),RET)$ + if(FLAG==0){ + TMP=roundret(TMP1[1])$ - RET=cons(wsort(TMP1[1],Vars, - map(drint,TMP1[1]*1.0)),RET)$ + RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$ - return RET$ + if(TMP!=[]) + RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$ + } + else if(FLAG==1) + RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$ } - else{ - RET=cons(wsort(TMP1[1],Vars,TMP1[1]*1.0),RET)$ - return RET$ - } - } - else - return RET$ - + } + + return RET$ } -def weightr(ExpMat,Vars,PolyListNum,OneMat){ +def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){ RET=[]$ @@ -394,104 +627,64 @@ def weightr(ExpMat,Vars,PolyListNum,OneMat){ ExtVars=reverse(ExtVars)$ - NormMat=newmat(ExpMatColNum,ExtMatColNum)$ + NormMat0=newvect(ExpMatColNum+1)$ + for(I=0;I<ExpMatColNum;I++) + NormMat0[I]=newvect(ExpMatColNum+1)$ for(I=0;I<ExpMatColNum;I++) for(J=I;J<ExpMatColNum;J++) for(K=0;K<ExpMatRowNum;K++) - NormMat[I][J]+= + NormMat0[I][J]+= ExpMat[K][I]* ExpMat[K][J]$ + NormMat1=newvect(ExtMatColNum)$ + for(I=0;I<ExtMatColNum;I++) + NormMat1[I]=newvect(ExtMatColNum)$ + + WorkMat=newvect(ExtMatColNum)$ + for(I=0;I<ExtMatColNum;I++) + WorkMat[I]=newvect(ExtMatColNum)$ + for(I=0;I<ExpMatColNum;I++) + for(J=I;J<ExpMatColNum;J++) + NormMat1[I][J]=NormMat0[I][J]$ + + for(I=0;I<ExpMatColNum;I++) for(J=0;J<PolyListNum;J++) for(K=OneMat[J];K<OneMat[J+1];K++) - NormMat[I][J+ExpMatColNum]-= - ExpMat[K][I]$ + NormMat1[I][J+ExpMatColNum]-=ExpMat[K][I]$ - WVect=newvect(PolyListNum)$ for(I=0;I<PolyListNum;I++) - WVect[I]=OneMat[I+1]-OneMat[I]$ + NormMat1[I+ExpMatColNum][I+ExpMatColNum]=OneMat[I+1]-OneMat[I]$ - for(F=0;F<ExtMatColNum;F++){ - SolveList=[]$ - for(I=0;I<ExpMatColNum;I++){ - if (F==I) - continue$ + if(jacobi(ExtMatColNum,NormMat1,WorkMat)){ - TMP=0$ - - for(J=0;J<I;J++) - if(J!=F) - TMP+=NormMat[J][I]*ExtVars[J]$ + 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]$ + } - for(J=I;J<ExtMatColNum;J++) - if(J!=F) - TMP+=NormMat[I][J]*ExtVars[J]$ - - if(F<I) - TMP+=NormMat[F][I]$ - else - TMP+=NormMat[I][F]$ - - SolveList=cons(TMP,SolveList)$ - } - - for(I=0;I<PolyListNum;I++){ - if(F==(I+ExpMatColNum)) - continue$ - - TMP=0$ - for(J=0;J<ExpMatColNum;J++) - if(J!=F) - TMP+=NormMat[J][I+ExpMatColNum] - *ExtVars[J]$ + if(nonposdegchk(Res)){ - TMP+=WVect[I]*ExtVars[I+ExpMatColNum]$ + TMP1=makeret(Res,Vars,1)$ - if(F<ExpMatColNum) - TMP+=NormMat[F][I+ExpMatColNum]$ + if(FLAG==0){ + TMP=roundret(TMP1[1])$ - SolveList=cons(TMP,SolveList)$ - } + RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),1))$ - Rea=vars(SolveList)$ - - SolVars=[]$ - for(I=0;I<ExtMatColNum;I++) - if(I!=F && member(ExtVars[I],Rea)) - SolVars=cons(ExtVars[I],SolVars)$ - - Res=solve(SolveList,SolVars)$ - Res=cons([ExtVars[F],1],Res)$ - - TMP=[]$ - for(I=0;I<length(Rea);I++) - if(member(Rea[I],Vars)) - TMP=cons(Rea[I],TMP)$ - - TMP=cons(ExtVars[F],TMP)$ - Res=getgcd(Res,TMP)$ - - if(nonposdegchk(Res)){ - - TMP1=makeret(Res,Vars)$ - if(TMP1[0]==0){ - TMP=roundret(TMP1[1]*1.0)$ if(TMP!=[]) - RET=cons(wsort(TMP1[1],Vars,TMP),RET)$ - - RET=cons(wsort(TMP1[1],Vars, - map(drint,TMP1[1]*1.0)),RET)$ + RET=append(RET,wsort(TMP1[1],Vars,TMP,2))$ } - else{ - RET=cons(wsort(TMP1[1],Vars,TMP1[1]*1.0),RET)$ - } + else if(FLAG==1) + RET=append(RET,[[1,Vars,vtol(TMP1[1])]])$ } - - } - - return [NormMat,RET]$ + } + + return [NormMat0,RET]$ } def weight(PolyList,Vars,FLAG){ @@ -506,52 +699,38 @@ def weight(PolyList,Vars,FLAG){ RET=[]$ - TMP=qcheck(PolyList,Vars)$ + TMP=qcheck(PolyList,Vars,FLAG)$ if(TMP!=[]){ RET=append(RET,TMP)$ - return cons(1,RET)$ + return RET$ } dp_ord(2)$ PolyListNum=length(PolyList)$ - if(FLAG){ - - OneMat=newvect(PolyListNum+1,[0])$ - ExpMat=[]$ - for(I=0;I<PolyListNum;I++){ - for(Poly=dp_ptod(PolyList[I],Vars); - Poly!=0;Poly=dp_rest(Poly)){ - ExpMat=cons(dp_etov(dp_ht(Poly)),ExpMat)$ - } - OneMat[I+1]=length(ExpMat)$ + OneMat=newvect(PolyListNum+1,[0])$ + ExpMat=[]$ + for(I=0;I<PolyListNum;I++){ + for(Poly=dp_ptod(PolyList[I],Vars); + Poly!=0;Poly=dp_rest(Poly)){ + ExpMat=cons(dp_etov(dp_ht(Poly)),ExpMat)$ } + OneMat[I+1]=length(ExpMat)$ + } - ExpMat=reverse(ExpMat)$ - ExpMat=newvect(length(ExpMat),ExpMat)$ + ExpMat=reverse(ExpMat)$ + ExpMat=newvect(length(ExpMat),ExpMat)$ - TMP=weightr(ExpMat,Vars,PolyListNum,OneMat)$ - RET=append(RET,TMP[1])$ - RET=append(RET,leastsq(TMP[0],ExpMat,Vars))$ - } - else{ - ExpMat=[]$ - for(I=0;I<PolyListNum;I++){ - for(Poly=dp_ptod(PolyList[I],Vars); - Poly!=0;Poly=dp_rest(Poly)){ - if(nonzerovec(TMP=dp_etov(dp_ht(Poly)))) - ExpMat=cons(TMP,ExpMat)$ - } - } + TMP=unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG)$ - ExpMat=reverse(ExpMat)$ - ExpMat=newvect(length(ExpMat),ExpMat)$ + RET=append(RET,TMP[1])$ - RET=append(RET,leastsq(0,ExpMat,Vars))$ - } + TMP=unitweight2(TMP[0],ExpMat,Vars,FLAG,3)$ + RET=append(RET,TMP)$ + ExpMat=qsort(ExpMat,junban)$ ExpMat2=[]$ @@ -561,11 +740,23 @@ def weight(PolyList,Vars,FLAG){ if(size(ExpMat)[0]!=length(ExpMat2)){ ExpMat=newvect(length(ExpMat2),ExpMat2)$ - RET=append(RET,leastsq(0,ExpMat,Vars))$ + RET=append(RET,unitweight2(0,ExpMat,Vars,FLAG,5))$ } + else{ + TMP0=map(ltov,TMP0)$ - RET=derase(RET)$ - return cons(0,RET)$ + for(I=0;I<length(TMP0);I++) + if(TMP0[I][0]==3) + TMP0[I][0]=5$ + else if(TMP0[I][0]==4) + TMP0[I][0]=6$ + + TMP0=map(vtol,TMP0)$ + + RET=append(RET,TMP0)$ + } + + return RET$ } end$