63 lines
1.1 KiB
C
63 lines
1.1 KiB
C
#include "mex.h"
|
|
#include "math.h"
|
|
typedef unsigned int size_t;
|
|
|
|
void mexFunction(int nlhs, mxArray* plhs[],int nrhs, const mxArray* prhs[])
|
|
{
|
|
size_t Alen=0;
|
|
size_t Blen=0;
|
|
size_t i=0;
|
|
double *dataA=NULL;
|
|
double *dataB=NULL;
|
|
double sum=0;
|
|
mxArray *pSum=NULL;
|
|
if(nrhs<2)
|
|
{
|
|
mexPrintf("parameters are fewer than 2\n");
|
|
plhs=NULL;
|
|
nlhs=0;
|
|
return;
|
|
}
|
|
Alen=length(prhs[0]);
|
|
Blen=length(prhs[1]);
|
|
if(Alen!=Blen)
|
|
{
|
|
mexPrintf("dim of para inconsists.\n");
|
|
return;
|
|
}
|
|
// mexPrintf("A %d B %d\n",Alen,Blen);
|
|
dataA=mxGetPr(prhs[0]);
|
|
dataB=mxGetPr(prhs[1]);
|
|
// mexPrintf("%f\n",dataA[0]);
|
|
for(i=0;i<Alen;i++)
|
|
{
|
|
sum+=pow(dataA[i]-dataB[i],2);
|
|
}
|
|
sum=sqrt(sum);
|
|
pSum=mxCreateScalarDouble(sum);
|
|
if(nlhs>0)
|
|
{
|
|
plhs[0]=pSum;
|
|
}
|
|
else
|
|
{
|
|
mexPrintf("must have at least one out para.\n");
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
size_t length(const mxArray* p)
|
|
{
|
|
size_t m=0;
|
|
size_t n=0;
|
|
m=mxGetM(p);
|
|
n=mxGetN(p);
|
|
if(m>n)
|
|
{
|
|
return m;
|
|
}
|
|
return n;
|
|
}
|
|
|