0
Iは、MEX機能を有しており、私は、次のコマンド(インタフェース)と、MATLABでそれを使用している:なぜ私のmexコードでは、配列は0と識別されますか?
Matsize = 30555
Fv_calc(:,2) = mx_solve_quadratic(QuadraticCoefficients,MatSize);
は、ゲートウェイ機能は以下の通りである:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int *arraysizePtr = NULL;
arraysizePtr = (int *)mxGetPr(prhs[1]);
int arraysize = *arraysizePtr;
float *inMatrix = NULL;
inMatrix = (float *)mxGetPr(prhs[0]);
const float a = 1; /* coefficient for x^2 is always 1*/
plhs[0] = mxCreateNumericMatrix(arraysize, 1, mxSINGLE_CLASS, mxREAL);
float *out = (float *)mxGetPr(plhs[0]);
float x0; /* the smaller root */
float x1; /* the bigger root */
int fOutput = 0;
int i = 0;
for (i = 0; i < arraysize; i++)
{
fOutput = gsl_poly_solve_quadratic(a, inMatrix[i], inMatrix[i + arraysize], &x0, &x1);
out[i] = (x1 > 0 ? x1 : 0);
}
}
私は以前にコードを実行したので、すべてが真であり、ちょうどわずかな変更が加えられました。 mexコードを実行しているときにarraysizeが0
と表示されているのはなぜわかりませんか?
OK、コードは次のように記述する必要があります: 'double * arraysizePtr = NULL; \t arraysizePtr = mxGetPr(prhs [1]); \t const int arraysize =(int)* arraysizePtr; ' – sepideh