C 和MATLAB的混合程式設計(1)

2021-08-01 18:09:06 字數 1935 閱讀 1872

首先,安裝乙個matlab是必須的,在這裡說明一下(據說使用matlab6.5及以下的版本,不會出現在沒有matlab的電腦上無法使用自己軟體的問題,本人由於時間問題沒有嘗試的使用,使用後如果可以解決在其他電腦使用問題,本人會在後面更新的時候說明)

這裡介紹兩種使用matlab的方法,先介紹一下本人使用的方法:

一、直接動態呼叫matlab庫函式

1、安裝matlab

2、在vs中建立工程,然後設定工程屬性

這是對依賴庫的設定等

2、可以在專案中進行matlab的函式使用了

在使用matlab的地方,新增標頭檔案#include 「engine.h」,

在使用的部分,對matlab進行開啟引擎操作:

engine *eg;

if(!(eg = engopen(null)))

messageboxa(null, "can't start matlab engine","matlab engine",mb_ok);

建立matlab矩陣記憶體塊:

mxarray *ima;

ima=mxcreatedoublematrix(20,20,mxreal);

設定,將自己的資料拷貝到矩陣中,並在matlab中建立對應的變數:

double a[20][20]

memcpy((void *)mxgetpr(ima),(void *)a,sizeof(a));

engputvariable(eg,"im",ima);

在matlab中進行計算:

engevalstring(eg, "wn=[0.5*2 35*2]/1000");

engevalstring(eg, "[k,l]=butter(1,wn)");

engevalstring(eg, "im2=filtfilt(k,l,im)");

得到matlab中的資料,並拷貝到c++中的變數中:

imc =enggetvariable(eg,"im2");

double c[20][20];

memcpy((void *)c,(void *)mxgetpr(imc),sizeof(mxgetpr(imc))*20*20);

釋放矩陣記憶體:

mxdestroyarray(ima);
關閉引擎:

engclose(eg);
然後這個方法有乙個問題,就是需要將用到的matlab中的dll檔案拷貝到生成的版本中,dll檔案在matlab路徑的:

d:\matlab\r2015b\bin\win64
然後就算完成。

二、生成dll檔案在c++中呼叫

1、在matlab中建立m檔案,使用matlab語句生成matlab可執行語句

2、在命令中使用:mcc -w lib:lib(m檔名) 檔案.m -t link:lib ,將生成動態鏈結庫,然後在c++中就可以呼叫

3、在使用的時候也需要設定matlab鏈結庫

利用C 和Matlab混合程式設計

在c 中引用 dll 檔案 如何引用 程式設計中c 資料型別的轉換 兩者之間的函式變數的傳遞時如何實現的 需要額外新增的dllmwarray.dll 在安裝目錄的toolbox dotnetbuilder bin win64 v2.0資料夾中 脫離matlab安裝的環境下,如何使得程式執行自如 c ...

C 和MATLAB混合程式設計 DLL

先小話一下dll,dll是動態鏈結庫,是源 編譯後的二進位制庫檔案和程式介面,和靜態鏈結庫不同的是,程式在編譯時並不鏈結動態鏈結庫的執行體,而是在檔案中保留乙個呼叫標記,在程式執行時才將動態鏈結庫檔案加載入記憶體。並且dll在執行時是共享的,即當多個程式呼叫時,記憶體中也只保持乙份動態鏈結庫。動態鏈...

c 與matlab混合程式設計

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