在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()
?