Matlab與C混合程式設計之陣列傳遞問題

2021-08-20 19:00:49 字數 580 閱讀 8532

首先說明一點,陣列在matlab和c中的儲存方式是不同的,前者是按列儲存,後者是按行儲存。舉個例子,對於乙個陣列a = [1, 2, 3; 4, 5, 6], matlab儲存順序是1, 4, 2, 5, 3, 6,而c中是1, 2, 3, 4, 5, 6. 下面說下在混合程式設計時matlab中的陣列傳遞到c中想獲取第i行j列的數怎麼取。

matlab資料可以通過mxgetpr傳遞到c中,且mxgetm和mxgetn能分別獲取矩陣的行和列,對於陣列a,則m = 2, n = 3;那麼第i行第j列資料索引為(j*m+i),這裡很多人會有疑問,不是說c和matlab中陣列儲存方式不同嗎,那麼在c中索引應該為(i*n+j)呀。其實,在陣列從matlab傳遞到c的時候,首先會把它轉化成一維的陣列,那麼這種按列儲存的陣列就變成下面的形式

每個方格代表一列,且一共有n列,每個裡面含有m個資料,其實這種形式就是matlab的儲存方式,那麼matlab將這種形式的資料傳遞給c,可想而知在c中對該陣列進行索引操作其實跟matlab中是一樣的,不需要轉化成c中儲存的形式來考慮。

c 與matlab混合程式設計

實驗平台 matlab r2016b vs2013 思路 1.設定matlab的編譯器,使用外部的vc或者gcc等編譯器。2.編譯m檔案成dll 3.設定vs的include路徑和lib鏈結庫的路徑 4.編寫c 呼叫dll 步驟 1.設定matlab的編譯器 在命令列視窗下,輸入並執行如下命令 me...

C 與matlab混合程式設計

環境 vs2010 matlab2010 首先,編寫乙個函式集的.m檔案。函式名稱 class netbuilder func 1 function y class netbuilder func f 2 t linspace 0,1,400 3 y sin 2 pi f t 4plot t,y 5...

matlab混合程式設計之mex檔案

1 mex檔案結構 a 子程式 b 入口程式 void mexfunction int nlhs,mxarray plhs,int nrhs,const mxarray prhs 2 語法 include mex.h void timestwo alt double y,double x void ...