mxMakeArrayComplex (C)
Convert real mxArray to complex, preserving real
data
C Syntax
#include "matrix.h" int mxMakeArrayComplex(mxArray *pa);
Description
Use mxMakeArrayComplex to convert a real
mxArray to a complex mxArray. The real part of
the updated array contains the real data from the original array.
If pa is empty, then the function returns a complex empty
mxArray.
If pa is complex, then the function does nothing.
Input Arguments
Output Arguments
Examples
Suppose that your application processes complex data and you create complex
mxArrays to handle the data. If you pass a complex array
containing only real data to a MATLAB® function, then the returned value is a real array. For example, call the
MATLAB
sqrt function with the following input.
a = complex([2,4])
a = 2.0000 + 0.0000i 4.0000 + 0.0000i
Although the input argument is complex, the data is real-only, and the output of the function is no longer complex.
a1 = sqrt(a)
a1 =
1.4142 2.0000To maintain the complexity of the data, use the
mxMakeArrayComplex function to wrap the result. To build the
MEX file 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
}Version History
Introduced in R2018a