📄 simsum.c
字号:
#include"mex.h"
#define x_in 0
#define y_out 0
extern double dp_sum(const int N,double *x)
{ int i;
double sum;
sum=0.0;
for(i=0;i<N;i++)
{sum+=x[i];}
return sum;//行向量求和
}
extern double dp_sumall(const int ndms_x,const int *dims_x,const double *x,double *y)
{ //dims_x[0]:行数,dims_x[1]:列数
int incx;
double *temp;
int i,j;
incx=1;
temp=(double *)mxCalloc(dims_x[0],sizeof(double));//按行数分配
for(j=0;j<dims_x[1];j++)
{for(i=0;i<dims_x[0];i++)
{temp[i]=x[i+j*dims_x[0]];//
}
y[j]=dp_sum(dims_x[0],temp);
}}
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
double *x,*y;//输入输出指针
int ndims_x,ndims_y;//指针维数
const int *dims_x;//指针
int *dims_y;
int mx,nx,my,ny;
ndims_x=mxGetNumberOfDimensions(prhs[x_in]);//输入维数
dims_x=mxGetDimensions(prhs[x_in]);
ndims_y=ndims_x;// output
dims_y=(int *)mxCalloc( ndims_y,sizeof(int));
if(ndims_y==2)
{
mx=mxGetM(prhs[x_in]);
nx=mxGetN(prhs[x_in]);
if(mx==1||nx==1)
{my=1;ny=1;}
else{
my=1;ny=nx;}
dims_y[0]=my;
dims_y[1]=ny;
}
plhs[y_out]=mxCreateNumericArray(ndims_y,dims_y,mxDOUBLE_CLASS,mxREAL);
x=mxGetPr(prhs[x_in]);
y=mxGetPr(plhs[y_out]);
dp_sumall(ndims_x,dims_x,x,y);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -