Преобразуйте действительный mxArray, чтобы объединить, сохранив действительные данные
#include "matrix.h" int mxMakeArrayComplex(mxArray* pa);
Используйте mxMakeArrayComplex, чтобы преобразовать действительный mxArray в комплексный mxArray. Действительная часть обновленного массива содержит действительные данные от исходного массива.
Если pa пуст, то функция возвращает комплексный пустой mxArray.
Если pa является комплексным, то функция ничего не делает.
Предположим, что ваше приложение обрабатывает комплексные данные, и вы создаете комплексный mxArrays, чтобы обработать данные. Если вы передаете комплексный массив, содержащий только действительные данные к функции MATLAB®, то возвращенное значение является действительным массивом. Например, вызовите функцию sqrt MATLAB со следующим входным параметром.
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 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
}