home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / BarlaA / sw / OLD / Simo / SVM_mono / mod_simplex.c < prev    next >
C/C++ Source or Header  |  2002-06-25  |  1KB  |  76 lines

  1. #include <stdio.h>
  2. #define EPS 1.0e-6
  3.  
  4. void mod_simplex(a, m, icase, right, left)
  5.    int             m, *icase, right[], left[];
  6.    double          **a;
  7. {
  8.    register int    i,j;
  9.    int             ip, is, k, kp, succ, ip0;
  10.    int             *ivector(), cnt = 0;
  11.    double          q1, test, bmin;
  12.    void            pivot(), swap(), nrerror(), free_ivector();
  13.  
  14.    
  15.  
  16.    for (k = 1; k <= m + 1; k++)
  17.       right[k] = m + k;
  18.    for (i = 1; i <= m; i++)
  19.       left[i] = i; 
  20.  
  21.    /* Inizializzazione */
  22.  
  23.    kp = m + 1;
  24.    bmin = -EPS;
  25.    ip = 0;
  26.    for (i = 1; i <= m; i++) {
  27.       test = a[i][1] - bmin;
  28.       if (test < 0.0) {
  29.      bmin = a[i][1];
  30.      ip = i;
  31.       }
  32.    }
  33.    /*printf("   bmin = %lf\n",bmin);*/
  34.    if (ip == 0) {
  35.       *icase = 0;
  36.       return;
  37.    }
  38.    swap(a, m, m + 1, ip, kp);
  39.    right[m + 1] = ip;
  40.    left[ip] = m * 2 + 1;
  41.    kp = ip;
  42.    ip0 = ip;
  43.    for (;;) {
  44.  
  45.   
  46.     
  47.       cnt++;
  48.       pivot(a, m + 1, m, &ip, kp, &q1);
  49.       if (ip == 0) {
  50.      *icase = -1;
  51.      printf("\n Ray termination \n");
  52.      return;
  53.       }
  54.       swap(a, m, m + 1, ip, kp);
  55.       succ = left[ip];
  56.       if (succ < m + 1)
  57.      succ += m;
  58.       else
  59.      succ -= m;
  60.       is = right[kp];
  61.       right[kp] = left[ip];
  62.       left[ip] = is;
  63.       if (ip == ip0) {
  64.      *icase = 0;
  65.      return;
  66.       }
  67.       for (i = 1; i <= m + 1; i++) {
  68.      if (right[i] == succ) {
  69.         kp = i;
  70.         break;
  71.      }
  72.       }
  73.    }
  74. }
  75. #undef EPS
  76.