matlab練習程式(c c 呼叫matlab)

2021-09-07 21:22:32 字數 2305 閱讀 4387

就我目前了解的c++呼叫matlab有兩種方法。

第一種是通過matlab引擎呼叫,也就是這裡用到的方法。

第二種是用matlab將m檔案編譯為相應的h/lib/dll檔案再加以呼叫。

使用engine所用到的h和lib檔案基本在d:\program files\matlab\r2010b\extern裡面,當然不同的機器安裝的地方都不一樣。

標頭檔案只需engine.h即可。lib檔案需要這三個:libmx.lib/libmat.lib/libeng.lib。至於如何配置我就不介紹了,方法很多。

引擎相應的部分函式如下:

engopen:啟動matlab引擎

engclose:關閉matlab引擎

enggetarray:從matlab引擎中獲得乙個matlab矩陣,用於資料交換

engputarray:從應用程式向matlab引擎傳送乙個matlab矩陣,用於資料交換

engevalstring:執行乙個matlab命令

engoutputbuffer:建立乙個用於儲存matlab文字輸出的字元緩衝區

相應例程:

#include #include 

#include

"engine.h

"using

namespace

std;

void

main()

//下面是將c++格式資料轉換為matlab格式可用資料

double data[4]=;

mxarray *y=mxcreatedoublematrix(1,4

,mxreal);

memcpy(mxgetpr(y),data,

sizeof

(data));

engputvariable(ep,"y

",y);

engevalstring(ep,

"plot(y,'o')

"); //

顯示資料

mxdestroyarray(y);

engevalstring(ep,

"figure

"); //

開乙個新的顯示視窗//

//下面是從matlab格式資料轉換為c++格式可用資料

在engine中讀取一張

engevalstring(ep,"

imshow(x)

"); //

顯示 mxarray *x=enggetvariable(ep,"

x"); //

從engine獲得真正的陣列x

int ndims=mxgetnumberofdimensions(x); //

獲得這個陣列的維數

coutint *dims=new

int[ndims];

memcpy(dims,mxgetdimensions(x),ndims*sizeof(int)); //

獲得陣列每一維的大小

for (int i=0;i)

cout

for (int i=0;i*/

delete dims;

mxdestroyarray(x);

cout

<<"

good job.

"

get();

engclose(ep);

//關閉matlab引擎。

}

由於整個環境離不開matlab,所以程式還需相應的dll檔案才能執行。

matlab的結構實在複雜,所以我也不太清楚究竟需要哪些dll,我就圖簡單了,直接把生成的檔案移到了matlab可執行目錄下了。

通常是這個目錄:d:\program files\matlab\r2010b\bin\win32

matlab練習程式(DBSCAN)

和kmeans相比,不需要事先知道資料的類數。以程式設計的角度來考慮,具體演算法流程如下 1.首先選擇乙個待處理資料。2.尋找和待處理資料距離在設定半徑內的資料。3.將找到的半徑內的資料放到乙個佇列中。4.拿佇列頭資料作為當前待處理資料並不斷執行第2步。5.直到遍歷完佇列中所有資料,將這些資料記為一...

matlab呼叫python程式

執行命令 pyversion filepath 若已關聯,則不需要執行此命令,其中 filepath 為 python 程式所用的直譯器的絕對路徑,如 d anaconda3 python.exe。詳見pyversion官方文件 例如呼叫某python函式 data2mat.getdata cd p...

MATLAB呼叫C C 函式的方法

已有 8167 次閱讀 2010 5 5 13 42 個人分類 遙感程式開發 系統分類 科研筆記 通過matlab將c c 函式編譯成mex函式,在matlab中就可以呼叫了。1,首先裝編譯器 matlab裡鍵入mex setup,選擇你要編譯c 的編譯器 2,寫c 函式 函式的形式必須是 void...