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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

matlab调用c函数语言,MATLAB调用C/C++函数的方法

發布時間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab调用c函数语言,MATLAB调用C/C++函数的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8種機械鍵盤軸體對比

本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?

通過MATLAB將C/C++函數編譯成MEX函數,在MATLAB中就可以調用了。

1,首先裝編譯器

Matlab里鍵入mex -setup,選擇你要編譯C++的編譯器

2,寫C++函數

函數的形式必須是

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

nlhs:輸出參數個數

plhs:輸出參數列表

nrhs:輸入參數個數

prhs:輸入參數列表

,不過函數名可以隨便取的。注意:保存的文件名就是將來在MATLAB中調用的函數名,而不是這里的函數名。

下面給出一個例子,目的是想截取數組的部分元素組成新的數組

輸入參數3個,目標數組,截取的行(向量),截取的列(向量)

輸出參數2個,截取后數組,數組維數信息

在函數中展示了如何傳入傳出參數,以及如果從參數列表中取出每一個參數,MATLAB數據和C++數據的互相轉換,還有一些輸出函數等。

新建一個ResizeArray.cpp文件(ResizeArray將作為MATLAB調用的函數名),寫入下面代碼#include "mex.h"

//author: 汪幫主 2010.05.05

//MATLAB調用形式: [resizedArr, resizedDims] = ResizeArray(arr, selRows, sekCols)

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

{

if (nrhs != 3)

{

mexErrMsgTxt("參數個數不正確!");

}

int rowNum = mxGetM(prhs[0]);

int colNum = mxGetN(prhs[0]);

double* pArr = (double*)mxGetPr(prhs[0]);

//得到選擇的行列信息

//無論是行向量還是列向量均支持

double* pSelRows = (double*)mxGetPr(prhs[1]);

double* pSelCols = (double*)mxGetPr(prhs[2]);

int selRowsRowNum = mxGetM(prhs[1]);

int selRowsColNum = mxGetN(prhs[1]);

if (selRowsRowNum!=1 && selRowsColNum!=1)

{

mexErrMsgTxt("行參數不正確!");

}

int selRowsNum = selRowsRowNum*selRowsColNum;

int selColsRowNum = mxGetM(prhs[2]);

int selColsColNum = mxGetN(prhs[2]);

if (selColsRowNum!=1 && selColsColNum!=1)

{

mexErrMsgTxt("列參數不正確!");

}

int selColsNum = selColsRowNum*selColsColNum;

plhs[1] = mxCreateDoubleMatrix(2, 1, mxREAL);

double* resizedDims = (double*)mxGetPr(plhs[1]);

resizedDims[0] = selRowsNum;

resizedDims[1] = selColsNum;

plhs[0] = mxCreateDoubleMatrix(selRowsNum, selColsNum, mxREAL);

double* pResizedArr =(double*)mxGetPr(plhs[0]);

//這里因為MATLAB中數據得按列優先

#define ARR(row,col) pArr[(col)*rowNum+row]

#define RARR(row,col) pResizedArr[(col)*selRowsNum+row]

for(int ri=0; ri

{

for(int ci=0; ci

{

RARR(ri,ci)=ARR((int)pSelRows[ri]-1,(int)pSelCols[ci]-1);

}

}

mexPrintf("OK!n");

}

3,編譯C++函數為MEX函數

將ResizeArray.cpp放在MATLAB當前目錄中,在MATLAB中輸入mex ResizeArray.cpp,編譯成功后將會生成ResizeArray.mexW32

4,調用函數arr=[11:19;21:29;31:39;41:49;51:59;61:69];

selRows=[1 3];

selCols=[2:4 5 9];

[rarr,rdims]=ResizeArray(arr,rows,cols);

arr中數據:

11 12 13 14 15 16 17 18 19

21 22 23 24 25 26 27 28 29

31 32 33 34 35 36 37 38 39

41 42 43 44 45 46 47 48 49

51 52 53 54 55 56 57 58 59

61 62 63 64 65 66 67 68 69

rarr中數據:

12 13 14 15 19

32 33 34 35 39

rdims為:

2

5

OK,done!

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的matlab调用c函数语言,MATLAB调用C/C++函数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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