mxMakeArrayComplex (C)

Преобразуйте действительный mxArray объединять, сохраняя действительные данные

Синтаксис C

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

Описание

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

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

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

Входные параметры

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

Указатель на числовой mxArray массив.

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

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

Функциональное состояние, возвращенное как int. Если успешный, то функция возвращает 1.

Возвращает 0 если неудачный. Функция неудачна если pa isNull, нечисловой, или только для чтения.

Примеры

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

Смотрите также

Введенный в R2018a