load("solve")$ load("gr")$ #define EPS 1E-6 #define TINY 1E-20 #define MAX_ITER 100 #define ROUND_THRESHOLD 0.4 def rotate(A,I,J,K,L,C,S){ 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=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 MAX_ITER) return 0; for(I=0;IT){ 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 []$ } if(length(B)==0){ if(A) 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 0$ } else if (FLAG==1) for(F=@true,I=0;I < N; I++ ) { F = F @&& A[I] @< 0$ } return fixpointmain(F,Vars)$ } def nonzerovec(A){ for(I=0;IB ? -1:0))$ } def worder(A,B){ return (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]0){ TMP=perm(I-1,P,TMP)$ for(J=I-1;J>=0;J--){ T=P[I]$ P[I]=P[J]$ P[J]=T$ TMP=perm(I-1,P,TMP)$ T=P[I]$ P[I]=P[J]$ P[J]=T$ } return TMP$ } else{ for(TMP0=[],K=0;K