mxMakeArrayComplex (C)
実数データを保持したまま、実数 mxArray
を複素数に変換する
C 構文
#include "matrix.h" int mxMakeArrayComplex(mxArray *pa);
説明
mxMakeArrayComplex
を使用して実数 mxArray
を複素数 mxArray
に変換します。更新された配列の実数部には、元の配列の実数データが含まれます。
pa
が空の場合、関数は空の複素数 mxArray
を返します。
pa
が複素数の場合、関数は何も行いません。
入力引数
出力引数
例
アプリケーションで複素数データを処理し、データを扱うための複素数 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 で導入