Преобразуйте действительный mxArray объединять, сохраняя действительные данные
#include "matrix.h" int mxMakeArrayComplex(mxArray *pa);
Использование mxMakeArrayComplex преобразовывать действительный mxArray к комплексному mxArray. Действительная часть обновленного массива содержит действительные данные из исходного массива.
Если pa пусто, затем функция возвращает комплексный пустой mxArray.
Если pa является комплексным, затем функция ничего не делает.
Предположим, что ваше приложение обрабатывает комплексные данные, и вы создаете комплексный mxArrays обрабатывать данные. Если вы передаете комплексный массив, содержащий только действительные данные к функции MATLAB®, то возвращенное значение является действительным массивом. Например, вызовите MATLAB sqrt функция со следующим входом.
a = complex([2,4])
a = 2.0000 + 0.0000i 4.0000 + 0.0000i
Несмотря на то, что входной параметр является комплексным, данные являются действительно-единственными, и выход функции более не не является комплексным.
a1 = sqrt(a)
a1 =
1.4142 2.0000Чтобы обеспечить сложность данных, используйте mxMakeArrayComplex функционируйте, чтобы перенести результат. Создавать файл MEX complexFnc.c:
mex -R2018a complexFnc.c
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{
mxArray *rhs[1], *lhs[1];
/* check for the proper number of arguments */
if(nrhs != 1) {
mexErrMsgIdAndTxt("MATLAB:complexFnc:checkrhs","1 input required.");
}
if(nlhs > 1) {
mexErrMsgIdAndTxt("MATLAB:complexFnc:checklhs","Too many output arguments.");
}
#if MX_HAS_INTERLEAVED_COMPLEX
/* get the square root */
rhs[0] = mxDuplicateArray(prhs[0]);
mexCallMATLAB(1, lhs, 1, rhs, "sqrt");
if(!mxIsComplex(lhs[0])) {
/* preserve complexity of data */
mxMakeArrayComplex(lhs[0]);
}
plhs[0] = mxDuplicateArray(lhs[0]);
#endif
}