日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

在Matlab中使用mex函数进行C/C++混合编程

發布時間:2025/4/16 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Matlab中使用mex函数进行C/C++混合编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近寫了個Matlab程序,好慢吶……所以開始學習Matlab與C/C++混合編程。下面寫了個測試代碼,顯示一個Double類型矩陣中的元素。

??????源代碼

[cpp]?view plaincopyprint?
  • #include?"mex.h"??
  • ??
  • void?displaySubscript(?const?mxArray?*pArray,?mwSize?index?);??
  • ??
  • //?入口函數??
  • void?mexFunction(?int?nlhs,?mxArray?*plhs[],?int?nrhs,?const?mxArray?*prhs[]?)?{??
  • ??????
  • ????//?源文件名后綴為.c時,所有變量聲明必須一次性完成,且放在最前面,?否則mex編譯錯誤??
  • ????//?源文件名后綴為.cpp時,沒有上面的問題,...-?-||??
  • ????double?*pData;??
  • ????mwSize?i;??
  • ??????
  • ????//?輸入參數必須為一個,且為double類型??
  • ????if?(?nrhs?!=?1?||?mxDOUBLE_CLASS?!=?mxGetClassID(prhs[0])?)?{??
  • ????????mexErrMsgTxt(?"輸入參數不合法……"?);??
  • ????}??
  • ??????
  • ????//?獲取數據指針??
  • ????pData?=?mxGetPr(prhs[0]);??
  • ??????
  • ????//?遍歷所有元素并打印到屏幕??
  • ????for?(?i?=?0;?i?!=?mxGetNumberOfElements(prhs[0]);?i++?)?{??
  • ????????displaySubscript(?prhs[0],?i?);??
  • ????????mexPrintf(?"?=?%g/n",?pData[i]?);??
  • ????}??
  • }??
  • ??
  • void?displaySubscript(?const?mxArray?*pArray,?mwSize?index?)?{??
  • ??????
  • ????//?源文件名后綴為.c時,所有變量聲明必須一次性完成,且放在最前面,?否則mex編譯錯誤??
  • ????//?源文件名后綴為.cpp時,沒有上面的問題,...-?-||,代碼好齪...??
  • ????mwSize?i,?j;??
  • ????mwSize?numOfDim;??
  • ????mwSize?*subScript;??
  • ????mwSize?subIndex;??
  • ????mwSize?total;??
  • ??????
  • ????const?mwSize?*Dims;??
  • ????const?char?*className;??
  • ??????
  • ????//?獲取維度個數??
  • ????numOfDim?=?mxGetNumberOfDimensions(pArray);??
  • ????//?獲取維度數組??
  • ????Dims?=?mxGetDimensions(pArray);??
  • ????//?獲取類型名稱??
  • ????className?=?mxGetClassName(pArray);??
  • ????//?分配下標數組內存??
  • ????subScript?=?(mwSize?*)mxCalloc(?numOfDim,?sizeof(?mwSize?)?);??
  • ??????
  • ????//?根據當前的索引號生成下標??
  • ????subIndex?=?index;??
  • ????for?(?i?=?numOfDim?-?1;?;?i--?)?{??
  • ????????total?=?1;??
  • ??????????
  • ????????for?(?j?=?0;?j?<?i;?j++?)?{??
  • ????????????total?*=?Dims[j];??
  • ????????}??
  • ??????????
  • ????????subScript[i]?=?subIndex?/?total;??
  • ????????subIndex?=?subIndex?%?total;??
  • ??????????
  • ????????if?(?0?==?i?)?{??
  • ????????????break;??
  • ????????}??
  • ????}??
  • ??????
  • ????//?打印出所有下標??
  • ????mexPrintf(?"("?);??
  • ????for?(?i?=?0;?i?<?numOfDim?-?1;?i++?)?{??
  • ????????mexPrintf(?"%d,",?subScript[i]?+?1?);??
  • ????}??
  • ????mexPrintf(?"%d)",?subScript[numOfDim-1]?+?1?);??
  • ??????
  • ????//?釋放下標數組內存??
  • ????mxFree(?subScript?);??
  • }??
  • ????? 在Matlab使用mex命令編譯源文件時,要注意這樣一個現象:源文件名后綴為.c時,所有變量聲明必須一次性完成,且放在最前面, 否則mex編譯錯誤;而源文件名后綴為.cpp時,就沒有上面的問題,...- -||。

    ??????實驗結果

    ??????混合編程API一覽

    MX Matrix Library

    mwIndex (C and Fortran)

    Type for index values

    mwPointer (Fortran)

    Pointer type for platform

    mwSignedIndex (C and Fortran)

    Signed integer type for size values

    mwSize (C and Fortran)

    Type for size values

    mxAddField (C and Fortran)

    Field to structure array

    mxArray (C and Fortran)

    Type for MATLAB array

    mxArrayToString (C)

    Convert array to string

    mxAssert (C)

    Check assertion value for debugging purposes

    mxAssertS (C)

    Check assertion value without printing assertion text

    mxCalcSingleSubscript (C and Fortran)

    Offset from first element to desired element

    mxCalloc (C and Fortran)

    Allocate dynamic memory for array using MATLAB memory manager

    mxChar (C)

    Type for string array

    mxClassID (C)

    Enumerated value identifying class of array

    mxClassIDFromClassName (Fortran)

    Identifier corresponding to class

    mxComplexity (C)

    Flag specifying whether array has imaginary components

    mxCopyCharacterToPtr (Fortran)

    CHARACTER values from Fortran array to pointer array

    mxCopyComplex16ToPtr (Fortran)

    COMPLEX*16 values from Fortran array to pointer array

    mxCopyComplex8ToPtr (Fortran)

    COMPLEX*8 values from Fortran array to pointer array

    mxCopyInteger1ToPtr (Fortran)

    INTEGER*1 values from Fortran array to pointer array

    mxCopyInteger2ToPtr (Fortran)

    INTEGER*2 values from Fortran array to pointer array

    mxCopyInteger4ToPtr (Fortran)

    INTEGER*4 values from Fortran array to pointer array

    mxCopyPtrToCharacter (Fortran)

    CHARACTER values from pointer array to Fortran array

    mxCopyPtrToComplex16 (Fortran)

    COMPLEX*16 values from pointer array to Fortran array

    mxCopyPtrToComplex8 (Fortran)

    COMPLEX*8 values from pointer array to Fortran array

    mxCopyPtrToInteger1 (Fortran)

    INTEGER*1 values from pointer array to Fortran array

    mxCopyPtrToInteger2 (Fortran)

    INTEGER*2 values from pointer array to Fortran array

    mxCopyPtrToInteger4 (Fortran)

    INTEGER*4 values from pointer array to Fortran array

    mxCopyPtrToPtrArray (Fortran)

    Pointer values from pointer array to Fortran array

    mxCopyPtrToReal4 (Fortran)

    REAL*4 values from pointer array to Fortran array

    mxCopyPtrToReal8 (Fortran)

    REAL*8 values from pointer array to Fortran array

    mxCopyReal4ToPtr (Fortran)

    REAL*4 values from Fortran array to pointer array

    mxCopyReal8ToPtr (Fortran)

    REAL*8 values from Fortran array to pointer array

    mxCreateCellArray (C and Fortran)

    Unpopulated N-D cell array

    mxCreateCellMatrix (C and Fortran)

    Unpopulated 2-D cell array

    mxCreateCharArray (C and Fortran)

    Unpopulated N-D string array

    mxCreateCharMatrixFromStrings (C and Fortran)

    Create populated 2-D string array

    mxCreateDoubleMatrix (C and Fortran)

    2-D, double-precision, floating-point array initialized to 0

    mxCreateDoubleScalar (C and Fortran)

    Scalar, double-precision array initialized to specified value

    mxCreateLogicalArray (C)

    N-D logical array initialized to false

    mxCreateLogicalMatrix (C)

    2-D, logical array initialized to false

    mxCreateLogicalScalar (C)

    Scalar, logical array

    mxCreateNumericArray (C and Fortran)

    Unpopulated N-D numeric array

    mxCreateNumericMatrix (C and Fortran)

    Numeric matrix initialized to 0

    mxCreateSparse (C and Fortran)

    2-D unpopulated sparse array

    mxCreateSparseLogicalMatrix (C)

    Unpopulated 2-D, sparse, logical array

    mxCreateString (C and Fortran)

    Create 1-by-N array initialized to specified string

    mxCreateStructArray (C and Fortran)

    Unpopulated N-D structure array

    mxCreateStructMatrix (C and Fortran)

    Unpopulated 2-D structure array

    mxDestroyArray (C and Fortran)

    Free dynamic memory allocated by MXCREATE* functions

    mxDuplicateArray (C and Fortran)

    Make deep copy of array

    mxFree (C and Fortran)

    Free dynamic memory allocated by MXCALLOC, MXMALLOC, or MXREALLOC functions

    mxGetCell (C and Fortran)

    Contents of array cell

    mxGetChars (C)

    Pointer to character array data

    mxGetClassID (C and Fortran)

    Class of array

    mxGetClassName (C and Fortran)

    Class of array as string

    mxGetData (C and Fortran)

    Pointer to real data

    mxGetDimensions (C and Fortran)

    Pointer to dimensions array

    mxGetElementSize (C and Fortran)

    Number of bytes required to store each data element

    mxGetEps (C and Fortran)

    Value of EPS

    mxGetField (C and Fortran)

    Field value, given field name and index, into structure array

    mxGetFieldByNumber (C and Fortran)

    Field value, given field number and index, into structure array

    mxGetFieldNameByNumber (C and Fortran)

    Field name, given field number, in structure array

    mxGetFieldNumber (C and Fortran)

    Field number, given field name, in structure array

    mxGetImagData (C and Fortran)

    Pointer to imaginary data of array

    mxGetInf (C and Fortran)

    Value of infinity

    mxGetIr (C and Fortran)

    Sparse matrix IR array

    mxGetJc (C and Fortran)

    Sparse matrix JC array

    mxGetLogicals (C)

    Pointer to logical array data

    mxGetM (C and Fortran)

    Number of rows in array

    mxGetN (C and Fortran)

    Number of columns in array

    mxGetNaN (C and Fortran)

    Value of NaN (Not-a-Number)

    mxGetNumberOfDimensions (C and Fortran)

    Number of dimensions in array

    mxGetNumberOfElements (C and Fortran)

    Number of elements in array

    mxGetNumberOfFields (C and Fortran)

    Number of fields in structure array

    mxGetNzmax (C and Fortran)

    Number of elements in IR, PR, and PI arrays

    mxGetPi (C and Fortran)

    Imaginary data elements in array of type DOUBLE

    mxGetPr (C and Fortran)

    Real data elements in array of type DOUBLE

    mxGetProperty (C and Fortran)

    Value of public property of MATLAB object

    mxGetScalar (C and Fortran)

    Real component of first data element in array

    mxGetString (C and Fortran)

    String array to C-style string

    mxIsCell (C and Fortran)

    Determine whether input is cell array

    mxIsChar (C and Fortran)

    Determine whether input is string array

    mxIsClass (C and Fortran)

    Determine whether array is member of specified class

    mxIsComplex (C and Fortran)

    Determine whether data is complex

    mxIsDouble (C and Fortran)

    Determine whether mxArray represents data as double-precision, floating-point numbers

    mxIsEmpty (C and Fortran)

    Determine whether array is empty

    mxIsFinite (C and Fortran)

    Determine whether input is finite

    mxIsFromGlobalWS (C and Fortran)

    Determine whether array was copied from MATLAB global workspace

    mxIsInf (C and Fortran)

    Determine whether input is infinite

    mxIsInt16 (C and Fortran)

    Determine whether array represents data as signed 16-bit integers

    mxIsInt32 (C and Fortran)

    Determine whether array represents data as signed 32-bit integers

    mxIsInt64 (C and Fortran)

    Determine whether array represents data as signed 64-bit integers

    mxIsInt8 (C and Fortran)

    Determine whether array represents data as signed 8-bit integers

    mxIsLogical (C and Fortran)

    Determine whether array is of type mxLogical

    mxIsLogicalScalar (C)

    Determine whether scalar array is of type mxLogical

    mxIsLogicalScalarTrue (C)

    Determine whether scalar array of type mxLogical is true

    mxIsNaN (C and Fortran)

    Determine whether input is NaN (Not-a-Number)

    mxIsNumeric (C and Fortran)

    Determine whether array is numeric

    mxIsSingle (C and Fortran)

    Determine whether array represents data as single-precision, floating-point numbers

    mxIsSparse (C and Fortran)

    Determine whether input is sparse array

    mxIsStruct (C and Fortran)

    Determine whether input is structure array

    mxIsUint16 (C and Fortran)

    Determine whether array represents data as unsigned 16-bit integers

    mxIsUint32 (C and Fortran)

    Determine whether array represents data as unsigned 32-bit integers

    mxIsUint64 (C and Fortran)

    Determine whether array represents data as unsigned 64-bit integers

    mxIsUint8 (C and Fortran)

    Determine whether array represents data as unsigned 8-bit integers

    mxLogical (C)

    Type for logical array

    mxMalloc (C and Fortran)

    Allocate dynamic memory using MATLAB memory manager

    mxRealloc (C and Fortran)

    Reallocate dynamic memory using MATLAB memory manager

    mxRemoveField (C and Fortran)

    Remove field from structure array

    mxSetCell (C and Fortran)

    Value of one cell of array

    mxSetClassName (C)

    Convert structure array to MATLAB object array

    mxSetData (C and Fortran)

    Set pointer to data

    mxSetDimensions (C and Fortran)

    Modify number of dimensions and size of each dimension

    mxSetField (C and Fortran)

    Set structure array field, given structure field name and array index

    mxSetFieldByNumber (C and Fortran)

    Set structure array field, given field number and index

    mxSetImagData (C and Fortran)

    Imaginary data pointer for array

    mxSetIr (C and Fortran)

    IR array of sparse array

    mxSetJc (C and Fortran)

    JC array of sparse array

    mxSetM (C and Fortran)

    Number of rows in array

    mxSetN (C and Fortran)

    Set number of columns in array

    mxSetNzmax (C and Fortran)

    Set storage space for nonzero elements

    mxSetPi (C and Fortran)

    Set new imaginary data for array

    mxSetPr (C and Fortran)

    Set new real data for array

    mxSetProperty (C and Fortran)

    Set value of public property of MATLAB object

    MEX Library

    mexAtExit (C and Fortran)

    Register function to call when MEX-function cleared or MATLAB software terminates

    mexCallMATLAB (C and Fortran)

    Call MATLAB function, user-defined function, or MEX-file

    mexCallMATLABWithTrap (C and Fortran)

    Call MATLAB function, user-defined function, or MEX-file and capture error information

    mexErrMsgIdAndTxt (C and Fortran)

    Display error message with identifier and return to MATLAB prompt

    mexErrMsgTxt (C and Fortran)

    Display error message and return to MATLAB prompt

    mexEvalString (C and Fortran)

    Execute MATLAB command in caller workspace

    mexEvalStringWithTrap (C and Fortran)

    Execute MATLAB command in caller workspace and capture error information

    mexFunction (C and Fortran)

    Entry point to C/C++ or Fortran MEX-file

    mexFunctionName (C and Fortran)

    Name of current MEX-function

    mexGet (C)

    Value of specified Handle Graphics property

    mexGetVariable (C and Fortran)

    Copy of variable from specified workspace

    mexGetVariablePtr (C and Fortran)

    Read-only pointer to variable from another workspace

    mexIsGlobal (C and Fortran)

    Determine whether variable has global scope

    mexIsLocked (C and Fortran)

    Determine whether MEX-file is locked

    mexLock (C and Fortran)

    Prevent clearing MEX-file from memory

    mexMakeArrayPersistent (C and Fortran)

    Make array persist after MEX-file completes

    mexMakeMemoryPersistent (C and Fortran)

    Make memory allocated by MATLAB software persist after MEX-function completes

    mexPrintf (C and Fortran)

    ANSI C PRINTF-style output routine

    mexPutVariable (C and Fortran)

    Array from MEX-function into specified workspace

    mexSet (C)

    Set value of specified Handle Graphics property

    mexSetTrapFlag (C and Fortran)

    Control response of MEXCALLMATLAB to errors

    mexUnlock (C and Fortran)

    Allow clearing MEX-file from memory

    mexWarnMsgIdAndTxt (C and Fortran)

    Warning message with identifier

    mexWarnMsgTxt (C and Fortran)

    Warning message

    ?

    總結

    以上是生活随笔為你收集整理的在Matlab中使用mex函数进行C/C++混合编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。