matlab mex c 例子,matlab mex c

#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程序可能有问题 求大牛赐教啊!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值