⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simfile.c

📁 SVM 软件包
💻 C
字号:
#include "lssvmFILE.h"int m,n, xdim, ydim, kl, ssv;double *kernel_pars, gam; double eps, fi_bound;int n_kernel_pars,max_itr;char* kernel_key;int n_dyn_pars, *dyn_pars;double *svX, *svY, *startv;double *alpha, *b;char type;int nb_effective, xdim_effective, ydim_effective;int nxt, nyt;double* Xtest,*Ytest,*Y_out;int t;/* * read input * * * * */int read_input(char* filename){   int i,j;   FILE *fp;   double d;      if((fp = fopen(filename, "rb")) == NULL)   {      printf("cannot open file '%s'",filename);      exit(1);   }      /* read the parameter */   // type   fread(&type, sizeof(char), 1, fp);   //printf("type:%c\n",type);   // n, x_dim, y_dim   fread(&n, sizeof(int), 1, fp);   //printf("nb_data:%d\n",n);   fread(&xdim, sizeof(int), 1, fp);   //printf("xdim:%d\n",xdim);   fread(&ydim, sizeof(int), 1, fp);   //printf("ydim:%d\n",ydim);   // kernel pars   fread(&n_kernel_pars, sizeof(int), 1, fp);   //printf("n_kernel_pars:%d\n",n_kernel_pars);   kernel_pars = (double*) malloc(n_kernel_pars*sizeof(double));   for (i=0;i<n_kernel_pars;i++)     fread(&kernel_pars[i], sizeof(double), 1, fp);    //printf("sig2:%f\n",kernel_pars[0]);   fread(&kl, sizeof(int), 1, fp);   //printf("kernel_key:%d,  ",kl);   kernel_key = (char*) malloc(kl*sizeof(char));   for (i=0;i<kl;i++) fread(&kernel_key[i], sizeof(char), 1, fp);   //printf("kernel_key:%s; \n",kernel_key);   // dyn_pars   fread(&n_dyn_pars, sizeof(int), 1, fp);   //printf("n_dyn_pars:%d\n",n_dyn_pars);   dyn_pars = (int*) malloc(n_dyn_pars*sizeof(int));   for (i=0;i<n_dyn_pars;i++){     fread(&dyn_pars[i], sizeof(int), 1, fp);     //printf("dyn_pars[%d]:%d; \n",i,dyn_pars[i]);   }   // svX,   svX = malloc( n*xdim*sizeof(double) );   for(i=0; i<n; i++) for(j=0; j<xdim; j++){      fread(&d, sizeof(double), 1, fp);     GETXIJ(svX,xdim,i,j) = d;     //printf(" X[%d,%d]=%f; ",j,i,GETXIJ(svX,xdim,i,j));   }   // svY   svY = malloc( n*ydim*sizeof(double) );   for(i=0; i<ydim; i++)  for(j=0; j<n; j++){     fread(&d, sizeof(double), 1, fp);     GETYIJ(svY,n,j,i) = d;     // printf(" Y[%d,%d]=%f; ",j,i,GETYIJ(svY,n,j,i));   }   // alpha   alpha = malloc( n*ydim*sizeof(double) );   for(i=0; i<ydim; i++)  for(j=0; j<n; j++)  {     fread(&d, sizeof(double), 1, fp);     GETYIJ(alpha,n,j,i) = d;     // printf(" alpha[%d,%d]=%f; ",j,i,GETYIJ(alpha,n,j,i));   }   // b   b = malloc( ydim*sizeof(double) );   for(i=0; i<ydim; i++)       {           fread(&d, sizeof(double), 1, fp);           b[i] = d;	   //printf(" b[%d]=%f; ",i,b[i]);       }   // Xtest,   fread(&nxt, sizeof(int), 1, fp);   //printf("nxt:%d\n",nxt);   if (nxt>0){     Xtest = malloc(nxt*xdim*sizeof(double) );     for(i=0; i<nxt; i++) for(j=0; j<xdim; j++)     {       fread(&d, sizeof(double), 1, fp);       GETXIJ(Xtest,xdim,i,j) = d;       // printf(" Xtest[%d,%d]=%f; ",j,i,GETXIJ(Xtest,xdim,i,j));     }   }   else Xtest=0;   // Ytest   fread(&nyt, sizeof(int), 1, fp);   //printf("nyt:%d\n",nyt);   if (nyt>0){     Ytest = malloc( nyt*ydim*sizeof(double) );     for(i=0; i<ydim; i++)  for(j=0; j<nyt; j++)     {       fread(&d, sizeof(double), 1, fp);       GETYIJ(Ytest,nyt,j,i) = d;       // printf(" Ytest[%d,%d]=%f; ",j,i,GETYIJ(Ytest,nyt,j,i));     }   }   else Ytest=0;      fclose(fp);   return 0;   }/* compute solution * * * * */int solve()  {  int i,j;  lssvm_c* lc;  lssvm_f* lf;      /* Do the actual computations in a subroutine */  //// CLASSIFICATION ////  if (type==*"class")  {    nb_effective = n;    ydim_effective = ydim;    // compute alfa and b     lc = createLSSVMClassificator(svX, xdim, svY, ydim, n, gam, eps,  max_itr,fi_bound, 0, kernel_key, kernel_pars);    printf(".");        if (alpha != NULL) { lc->_alpha = alpha; lc->_b = b; } else {ERRORMSG("alpha's need to be trained"); exit(1);}    Y_out = simulateClass(lc, Xtest, Ytest,nxt, 0);     destructLSSVMClassificator(lc);  }  //// REGRESSION ////  else if (type==*"function")  {    nb_effective = n;    ydim_effective = ydim;    Y_out = malloc(nxt*ydim_effective*sizeof(double));    // compute alfa and b     lf =  createLSSVMFctEstimator(svX, xdim, svY, ydim, n, gam, eps, max_itr, fi_bound, 0, kernel_key, kernel_pars);    printf(".");    if (alpha != NULL) { lf->_alpha = alpha; lf->_b = b;} else {ERRORMSG("alpha's need to be trained"); exit(1);}    Y_out = simulateFctEst(lf, Xtest, Ytest, nxt, nxt, 0);    destructLSSVMFctEstimator(lf);   }  return 0;}/* * write solution * * * */int save_sol(char* filename){   int i;   FILE *fp;    if ((fp = fopen(filename,"wb")) == NULL)   {      ERRORMSG("cannot open file");      exit(1);     }   if(fwrite( &nxt, sizeof(int), 1, fp) !=1)   {       ERRORMSG("write error for nb of simulated points");       exit(1);   }   if(fwrite(Y_out, ydim*nxt*sizeof(double), 1, fp) !=1)   {       ERRORMSG("write error for Yt");       exit(1);   }   fclose(fp);      free(alpha);   free(b);   free(kernel_pars);   free(Y_out); return 0;}/* main procedure * */int main(int argc, char* argv[]){  read_input(argv[1]);    solve();   save_sol(argv[1]);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -