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® function, тогда возвращенное значение является вещественным массивом. Для примера вызовите 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