00001 
00002 
00003 
00004 
00005 #include "arith.h"
00006 
00007 cone_pre(x,n,p,u,s,v,r,f)
00008 MATRIX x;
00009 int n,p;
00010 MATRIX u,s,v;
00011 int r[MAX];
00012 MATRIX f;
00013 {
00014     MATRIX e,work;
00015     int job,info, rr[MAX];
00016     int i,j;
00017     int ssvdc();
00018 
00019     MATRIX ss,uu,vv;
00020     unsigned int planetab;
00021 
00022     
00023 
00024     job=11;
00025 
00026     info=ssvdc(x,n,n,p,s,e,u,n,v,p,work,job);
00027 
00028     
00029     
00030     r[n]=rank(n,p,s);
00031 
00032     
00033 
00034     mat_mult(n,r[n],r[n],u,s,f);
00035 
00036     
00037 
00038     rr[0]=0;
00039     planetab=0;
00040     for(i=1; i<=n; i++){
00041         info=ssvdc(f,i,i,r[n],ss,e,uu,i,vv,r[n],work,job);
00042         rr[i]=rank(i,r[n],ss);
00043         if(rr[i] == rr[i-1]+1)
00044             planetab= planetab | (1<<(i-1));
00045         if(rr[i] == r[n])
00046             break;
00047     }
00048     return(planetab);
00049 }