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®, то возвращенное значение является действительным массивом. Например, вызовите функцию 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 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

Была ли эта тема полезной?