在MATLAB MEX中使用Eigen

时间:2017-12-16 23:47:49

标签: matlab eigen mex

在MATLAB MEX文件中使用Eigen时遇到了一个问题。

考虑这段代码,我在其中调用mex函数来创建类vars的对象。该类具有整数N,整数S和两个Eigen数组。

//constructMat.cpp

class vars {

public:
    int N
    int S
    Eigen::ArrayXd upperLims
    Eigen::ArrayXd lowerLims

stateVars (double *, double *, double *)

};

stateVars::stateVars (double *upperInput, double *lowerInput, double *gridInput)

    Eigen::ArrayXd upper; upper = Eigen::Map<Eigen::VectorXd>(upperInput, sizeof(*upperInput),1);
    Eigen::ArrayXd lower; lower = Eigen::Map<Eigen::VectorXd>(lowerInput, sizeof(*lowerInput),1);
    Eigen::ArrayXd gridSizes; gridSizes = Eigen::Map<Eigen::VectorXd>(gridInput, sizeof(*gridInput),1);
    upperLims = upper;
    lowerLims = lower;
    N = upperLims.size();
    S = gridSizes.prod();
}

//MEX CODE
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{

    //....checks to make sure the inputs are okay...

    double* upper = mxGetPr(prhs[0]);
    double* lower = mxGetPr(prhs[1]);
    double* grids = mxGetPr(prhs[2]);

    stateVars stateSpace(upper, lower, grids);

    mexPrintf("N =%f  \n\n", stateSpace.N  );
    mexPrintf("S =%f  \n\n", stateSpace.S  );
}

然而,当我执行该函数时,我调用constructMat([7.0, 8.0, 9.0], [4.0, 2.0, 3.0], [10, 10, 10]),我希望mexPrintf("N =%f \n\n", stateSpace.N )产生3,因为数组upperLims只有三个元素。但是,它会产生7。同样,我希望mexPrintf("S =%f \n\n", stateSpace.S )产生10 ^ 3 = 1000,但它也会产生7。我不确定我做错了什么。 mex文件已成功编译。

另外,如果我拨打mexPrintf("upperlims =%f \n\n",stateSpace.upperLims(0) ),即打印出Eigen数组upperLims的第一个元素,它会给我正确的数字。它是否与方法.size().prod()

有关

0 个答案:

没有答案