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

📄 fspike.cpp

📁 一个简洁好用的SVM代码
💻 CPP
字号:
//--------------------------------------------------------------// file: fspike.cpp - Matlab Mex function application//--------------------------------------------------------------#include <iostream.h>#include <math.h> extern "C" {#include "mex.h"} // TODO: Add you supporting functions here //--------------------------------------------------------------// function: fspike - Entry point from Matlab environment (via//   mexFucntion(), below)// INPUTS://   nlhs - number of left hand side arguments (outputs)//   plhs[] - pointer to table where created matrix pointers are//            to be placed//   nrhs - number of right hand side arguments (inputs)//   prhs[] - pointer to table of input matrices//--------------------------------------------------------------void fspike( int nlhs, mxArray *plhs[], int nrhs, const mxArray  *prhs[] ){  double N,p,lam; int lens,lent;  N=mxGetScalar(prhs[0]); p=mxGetScalar(prhs[1]); lens=(int)mxGetScalar(prhs[2]); lent=(int)mxGetScalar(prhs[3]); lam=mxGetScalar(prhs[4]); // mexPrintf("%f %f %f %f %f\n",N,p,lens,lent,lam);  double *dmu,*Kn,*Kn1; dmu= mxGetPr(prhs[5]); Kn= mxGetPr(prhs[6]); Kn1= mxGetPr(prhs[7]); /* MATLAB-CODEres = 0; lam2=lam^2; for n=1:N    for s=n:lens        Kt = 1;        for t=n:lent                                  Kt1 = lam2*Kn(s,t)*dmu(s,t) + lam*Kt;             Kn1(s+1,t+1) = lam*Kn1(s,t+1) + Kt1;                    Kt = Kt1;        end              end    res = res + Kn1(lens+1,lent+1)*p^n;    Kn = Kn1;end */  double res = 0; double Kt,Kt1; double lam2=lam *lam; double pp = p;  for (int n=0;n<N;n++) {  for (int s=n;s<lens;s++)  {   Kt = 1;   for (int t=n;t<lent;t++)   {        Kt1 = lam2*Kn[t*(lent+1)+s]  *dmu[t*lent+s] + lam*Kt;        Kn1[(t+1)*(lent+1)+s+1] = lam*Kn1[(t+1)*(lent+1)+s] + Kt1; //   mexPrintf("%f %f\n",Kt1,Kn1[(t+1)*(lent+1)+s+1]);    Kt = Kt1;   }  } // mexPrintf("%f \n",Kn1[(lent)*(lent+1)+lens] );    res = res + Kn1[(lent)*(lent+1) + lens]  *pp;  pp = pp*p; // mexPrintf("%f \n",res);      memcpy(Kn,Kn1,(lent+1)*(lens+1)*sizeof(double) );  }   plhs[0]= mxCreateDoubleMatrix(1, 1, mxREAL); double * result=mxGetPr(plhs[0]); *result=res;  /*   float mat[4][4];   if( nrhs ==2)  {   // m X n   int m=mxGetM(prhs[1]);   int n=mxGetN(prhs[1]);    if(m !=4 || n != 4)   {    mexErrMsgTxt("Usage : 'setMatrix' matrix[4][4]\n");    return;   }    double *_matrix= mxGetPr(prhs[1]);*/  // (seqS,seqT,N,lam,mu,p)} // end fspike() extern "C" {  //--------------------------------------------------------------  // mexFunction - Entry point from Matlab. From this C function,  //   simply call the C++ application function, above.  //--------------------------------------------------------------  void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray  *prhs[] )  {    fspike(nlhs, plhs, nrhs, prhs);  }}

⌨️ 快捷键说明

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