AP-SCE/Mex/a11.cpp

35 lines
835 B
C++
Raw Normal View History

2018-01-03 17:49:09 +00:00
#include "mex.h"
#include "matrix.h"
void mexFunction(int nlhs, mxArray *plhs[], /* Output variables */
int nrhs, const mxArray *prhs[]) /* Input variables */
{
if (nrhs != 3 || ! mxIsNumeric (prhs[0]))
mexErrMsgTxt ("ARG1 must be a 3 dimensional matrix");
if( mxGetNumberOfElements(prhs[0]) != mxGetNumberOfElements(prhs[1]) ||
mxGetNumberOfElements(prhs[0]) != mxGetNumberOfElements(prhs[2]))
{
mexErrMsgTxt ("arrays need to be of same size!");
}
double *heights, *d, *densities;
heights = mxGetPr (prhs[0]);
d = mxGetPr (prhs[1]);
densities = mxGetPr (prhs[2]);
double mass = 0;
for (int i = mxGetNumberOfElements(prhs[0]); i--;)
{
mass = mass + ((heights[i] / 10) * (d[i] / 20)*(d[i] / 20) * 3.14159265359 * densities[i]);
}
//return value
plhs[0] = mxCreateDoubleScalar(mass);
return;
}