Преобразуйте действительный 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
:
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 }