ITE / code / H_I_D / utilities / compute_CDSS.cpp

#include "mex.h"
#include "math.h"

/* .cpp version of 'compute_CDSS.m' */

/* Copyright (C) 2012 Zoltan Szabo ("http://nipg.inf.elte.hu/szzoli", "szzoli (at) cs (dot) elte (dot) hu")
%
%This file is part of the ITE (Information Theoretical Estimators) Matlab/Octave toolbox.
%
%ITE is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
%the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
%
%This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
%MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
%
%You should have received a copy of the GNU General Public License along with ITE. If not, see <http://www.gnu.org/licenses/>. */

void mexFunction(
    int nlhs, mxArray *plhs[],
    int nrhs, const mxArray *prhs[])
{

    double *Y;    /* pointer to the input matrix (row vector) */    
    mwSize T;    
    
    Y = mxGetPr(prhs[0]); /* create a pointer to the input matrix */
    T = mxGetN(prhs[0]);  /* number of columns */
        
    double *H;    
    /* Allocating array for H */
    plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
    H = mxGetPr(plhs[0]);    
    
    mwSize i,j,m;
    
    m = floor(sqrt(T));
    *H = 0;
    for (i=1; i<T-m+1; i++) {   /* i: in Matlab sense*/
    for (j=i+1; j<i+m-1+1; j++) {   /* j: in Matlab sense*/
        *H = *H + pow(Y[j-1]-Y[i+m-1],2) * pow(Y[j-1]-Y[i-1],2) / pow(Y[i+m-1]-Y[i-1],5);
    }
    }
    *H = -log(30 * *H / (T*(T-m)));

}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.