鄧科 在上一章中對matlab 編譯器做了簡要介紹,並介紹了如何將m檔案轉換成vc可呼叫的dll檔案,在這章中介紹如何利用編譯器將m檔案轉換成對應的c/c++檔案,並在vc中呼叫。這章節中的例子是在第四章中介紹過的解線形方程組。
首先要保證編譯器設定正確,編譯器的設定可以參考前面兩章的內容。如果以前已經進行了配置就不需要這一步。
1、在matlab中編寫如下函式:
function [x]=gjfcz(a,b)儲存名為gjfcz.m,該函式的功能為求解線形方程組,可參考第四章的內容。%a=[-1.5 1 2; 4 2 3 ; -3 2 8]
%b=[3;5;6]
x=a/b
2、在matlab的命令視窗輸入以下命令:
mcc –m gjfcz.m該命令用來生成對應的c檔案和可執行程式。在matlab工作目錄下(一般是matlab/work)將會生成如下檔案:gjfcz.exe,gjfcz.c,gjfcz.h,gjfcz_main.c,其中gjfcz.c,gjfcz.h是我們需要的檔案。
3、新建名為jxxfc基於對話方塊的工程,面板上新增乙個按扭。
4、拷貝gjfcz.c,gjfcz.h兩檔案到工程目錄下,並將檔案引入工程(project->add to project->files)。
5、為按扭新增如下響應**:
void cjxxfcdlg::onbutton1()編譯、連線,執行結果如圖1:; static double bdata=;
double xdata[100];
mxarray *a = null;//賦初值
mxarray *b = null;
mxarray *x = null;
/* 使用自動記憶體管理*/
mlfenternewcontext(0, 0);
//建立矩陣
mlfassign(&a, mlfdoublematrix(3, 3, adata, null));
mlfassign(&b, mlfdoublematrix(3, 1, bdata, null));
initializemodule_gjfcz();
x=mlfgjfcz(a,b);//呼叫gjfcz.c中的函式求解
terminatemodule_gjfcz();
memcpy(xdata,mxgetpr(x),3*sizeof(double));
// mxgetpr(x)用來得到x的位址
cstring r;
r.format("%f/n%f/n%f",xdata[0],xdata[1],xdata[2]);
messagebox(r);
/* 釋放矩陣所佔的記憶體*/
mxdestroyarray(a);
mxdestroyarray(b);
mxdestroyarray(x);
/* 禁用自動記憶體管理*/
mlfrestorepreviouscontext(0, 0);
}
圖1本程式在vc6.0+matlab6.5環境下調式通過,在vc和matlab介面程式設計中,使用編譯器將m檔案編譯成c/c++檔案,然後在vc中呼叫該c/c++檔案是最常用的方法。 本例中雖然使用了c/c++函式庫中的函式,但比起完全使用c/c++函式編寫程式要簡單了許多,可見要靈活的使用編譯器,對c/c++函式庫有一定的了解是很必要的,matlab提供有函式庫的幫助文件cmath_ref2b.pdf和cmath_ug2b.pdf,使用的時候可以查閱。再次說明的是,很多朋友已經在使用matlab7.0的版本,7.0的版本在對c/c++接**術上做了很大改動,不是一般的公升級,對以前的版本也不相容。新的版本提供了乙個類似於vc的類庫,用了一下,感覺不是很好。
LabVIEW與MATLAB聯合程式設計
labview與matlab的聯合程式設計一般可以通過2種方式進行 1.公式節點 formula node 2.matlab指令碼節點 matlab script node 1.公式節點 formula node 位置 函式選板 數學 指令碼與公式 公式節點 在程式框圖上計算數學公式和類似於c語言的...
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...