Как вернуть значение с плавающей запятой из функции mex и как получить его из m-файла? - PullRequest
7 голосов
/ 10 мая 2011

Я понимаю, что все возвращаемые значения функции mex хранятся в массиве plhs типа mxArray *.Я хочу вернуть значение типа float.Как я могу это сделать?

Некоторые примеры кода по возвращению его из функции mex и извлечению его из m-файла очень ценятся.

1 Ответ

9 голосов
/ 10 мая 2011

Имя класса MATLAB для данных типа float "single".

В MEX-файле вы могли бы написать:

void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
    // Create a 2-by-3 real float
    plhs[0] = mxCreateNumericMatrix(2, 3, mxSINGLE_CLASS, mxREAL);

    // fill in plhs[0] to contain the same as single([1 2 3; 4 5 6]); 
    float * data = (float *) mxGetData(plhs[0]);
    data[0] = 1; data[1] = 4; data[2] = 2; 
    data[3] = 5; data[4] = 3; data[5] = 6;
}

Извлечение его из M-файла в значительной степеникак вызов любой другой функции.Если бы вы назвали MEX-функцию foo, вы бы назвали ее так:

>> x = foo;

Теперь x будет содержать значение одинарной точности, эквивалентное single([1 2 3; 4 5 6]), которое было сохранено в plhs[0].

...