Main Content

mxMakeArrayComplex (C)

実数データを保持したまま、実数 mxArray を複素数に変換する

C 構文

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

説明

mxMakeArrayComplex を使用して実数 mxArray を複素数 mxArray に変換します。更新された配列の実数部には、元の配列の実数データが含まれます。

pa が空の場合、関数は空の複素数 mxArray を返します。

pa が複素数の場合、関数は何も行いません。

入力引数

すべて展開する

数値 mxArray 配列へのポインター

出力引数

すべて展開する

関数のステータス。int として返されます。成功した場合、関数は 1 を返します。

失敗した場合、0 を返します。paNULL、非数値、または読み取り専用の場合、関数は失敗します。

アプリケーションで複素数データを処理し、データを扱うための複素数 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 で導入