I am building a mex function, but am having difficulty creating a vector of integers. My code throws about 10 errors, all of which around the declaration of 'gn' and plhs[0]. I'm just trying to make a xynum long vector of class int16. Why is it so difficult?
void findnegs(double *phi, int gnum, int xynum, int *gn, double *adj, double *newphi, double *dphidtSum){ long i,g; double u,s; for (i = 0; i<xynum; i++) { s = 0; for (g = 0; g<gnum; g++) { u = dphidtSum[g+i*gnum]/phi[g+i*gnum]; if (newphi[g+i*gnum]<0 & u<s) { s = u; gn[i] = g; adj[i] = -1/u; } } }}/* The gateway function that replaces the "main".*plhs[] - the array of output values*prhs[] - the array of input values*/void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){ /* DECLARATIONS*/ double *phi, *newphi, *dphidtSum, *adj; int gnum, xynum, *gn; /* INPUTS */ gnum = mxGetScalar(prhs[0]); xynum = mxGetScalar(prhs[1]); phi = mxGetPr(prhs[2]); newphi = mxGetPr(prhs[3]); dphidtSum = mxGetPr(prhs[4]); /* OUTPUTS */ plhs[0] = mxCreateNumericArray(xynum,1,mxINT16_CLASS); /*Creates a matrix*/ plhs[1] = mxCreateDoubleMatrix(xynum,1,mxREAL); /*Creates a matrix*/ gn = mxGetInt16s(plhs[0]); /*Set to be the first of the output values*/ adj = mxGetPr(plhs[1]); /*Set to be the first of the output values*/ /* CALL ROUTINE */ findnegs(phi,gnum,xynum,gn,adj,newphi,dphidtSum);}
Best Answer