exponenta event banner

mxMakeArrayComplex (C)

Преобразовать вещественное mxArray к сложным, сохраняющим реальные данные

Синтаксис C

#include "matrix.h"
int mxMakeArrayComplex(mxArray *pa);

Описание

Использовать mxMakeArrayComplex для преобразования вещественного mxArray к комплексу mxArray. Реальная часть обновленного массива содержит реальные данные из исходного массива.

Если pa пуст, затем функция возвращает сложный пуст mxArray.

Если pa является сложным, то функция ничего не делает.

Входные аргументы

развернуть все

Указатель на цифру mxArray массив.

Выходные аргументы

развернуть все

Состояние функции, возвращенное как int. В случае успешного выполнения функция возвращает 1.

Прибыль 0 в случае неудачи. Функция неуспешна, если pa является NULL, нечисловой или только для чтения.

Примеры

Предположим, что приложение обрабатывает сложные данные и создает сложные 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
}

См. также

Представлен в R2018a