#include"mex.h"
#include"math.h"
//int j=j;
void makeG(double *V,int j,double r,double a1,double ax,double *G,double *du)
{
/*struct G{
double G[j][j]};
double du[j][1];
double w[j][j];
*/
double *w;
double h,t;
int u,v;
for(u=1;u<=j;u++)
{
for(v=1;v<=j;v++)
{
h=-pow(*(V+3+u*3)-*(V+3+v*3),2);
t=-2*(pow(*(V+1+3*u)-*(V+1+3*v),2)+pow(*(V+2+3*u)-*(V+2+3*v),2));
*(w+v+u*j)=exp(h/a1)*exp(t/ax);
if ((pow(*(V+1+3*u)-*(V+1+3*v),2)+pow(*(V+2+3*u)-*(V+2+3*v),2))<=r )
*(G+v+u*j)=*(w+v+u*j);
else
*(G+v+u*j)=0;
*(du+u)=*(du+u)+*(w+v+u*j);
}
}
}
// MEX文件接口函数
void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[])
{
double *G,*du,*V;
double r,a1,ax;
int j;
j = mxGetScalar(prhs[1]);
plhs[0] = mxCreateDoubleMatrix(j, j, mxREAL);
plhs[1] = mxCreateDoubleMatrix(j, 1, mxREAL);
// plhs[2] = mxCreateDoubleMatrix(j, j, mxREAL);
prhs[0] = mxCreateDoubleMatrix(j,3, mxREAL);
G = mxGetPr(plhs[0]);
du = mxGetPr(plhs[1]);
// w = mxGetPr(plhs[2]);
V = mxGetPr(prhs[0]);
//j = *(mxGetPr(prhs[1]))
r = mxGetScalar(prhs[2]);
a1 = mxGetScalar(prhs[3]);
ax = mxGetScalar(prhs[4]);
makeG(V,j,r,a1,ax,G,du);
}
源码如上,就是想让C通过MEX实现一个循环 这个程序成功编译了,得到了makeG.mex32 但是用到.m的主程序里后matlab跑崩掉了 弹出提示要关闭matlab 说我的mex程序可能有问题 求大牛赐教啊!!