为什么这段代码没有调用Matlab函数

时间:2014-01-06 23:29:23

标签: c matlab octave mex

我在MATLAB中编写了一个代码来添加两个数字。代码如下:

function [z] = addition(x,y)
    z=x+y;
end

我在C中编写了另一个代码来调用这个添加函数。代码如下:

#include "mex.h"

void  mexFunction (int nlhs, mxArray* plhs[],
      int nrhs, const mxArray* prhs[])
{
    mxArray *a,*b,*c;
    a=mxCreateDoubleMatrix(1, 1, mxREAL);
    b=mxCreateDoubleMatrix(1, 1, mxREAL);
    a=1;
    b=1;
    mexCallMATLAB(1,&c, 2, &b, &a, "addition");
    mexCallMATLAB(0,NULL,1, &c, "disp");
    mxDestroyArray(a);
    mxDestroyArray(b);

    return;
}

请告诉我为什么它不工作??? 感谢

1 个答案:

答案 0 :(得分:2)

代码有几个问题:

  • 您为mxArray ab分配值的方式不正确。
  • 将输入传递给mexCallMATLAB的方式也不正确

这是我的实施:

callAdd.c

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    mxArray *in[2], *out[1];

    in[0] = mxCreateDoubleScalar(5);
    in[1] = mxCreateDoubleScalar(4);

    mexCallMATLAB(1, out, 2, in, "addition");
    mexCallMATLAB(0, NULL, 1, out, "disp");

    mxDestroyArray(in[0]);
    mxDestroyArray(in[1]);
    mxDestroyArray(out[0]);
}

这基本上等同于在MATLAB中调用disp(addition(5,4))