Matlab引擎是Matlab提供的一系列程序的結合,它允許用戶在自己的應用程序中對Matlab進行調用,將Matlab作為一個操作引擎使用,使其在后臺運行。一般Matlab 引擎采用客戶機/ 服務器(Client/ Sever) 計算方式,就是一種把應用處理負載分布到客戶機和服務器上的一種計算模式,客戶機和服務器既可以是存在于同一臺計算機,也可以通過網(wǎng)絡來實現(xiàn)信息共享。一般情況下,客戶機是運行前端軟件的PC機,并且知道如何與服務器通信,服務器與此相對應,是接收請求信息,并采取相應行的機器。由于客戶機和服務器共同承擔處理負載,使系統(tǒng)總體性能大為提高。在實際應用過程中,把VC的C語言或C + + 語言的程序作為前端客戶機程序,它從Matlab 引擎接收數(shù)據(jù)信息,并與引擎?zhèn)鬟f命令的數(shù)據(jù)信息。表1是幾種常用的Matlab引擎調用函數(shù)。 表1:Matlab引擎常用調用函數(shù) 通過Matlab引擎用戶可以完成以下任務:首先,可以將Matlab作為一個功能強大的和可編程的數(shù)學函數(shù)庫,調用Matlab中的大量的數(shù)學計算函數(shù),完成復雜的計算任務;其次,可以為一個特定的任務構建一個完整的系統(tǒng),前臺的用戶界面用高級語言編寫,后臺的計算任務由Matlab引擎來完成;最后,用戶不但可以在本地計算機上調用Matlab引擎,而且還可以通過網(wǎng)絡調用其它計算機上的Matlab引擎,這樣可以很好的實現(xiàn)資源的共享和作業(yè)的分工合作。
3、Matlab引擎實現(xiàn)VC和Matlab混合編程的步驟
要想在VC集成環(huán)境下利用Matlab引擎實現(xiàn)VC和Matlab的混合編程,一般需要經(jīng)過以下幾個必要的步驟: (1)Visual C++6.0 編譯環(huán)境的設置:通過菜單 Tools/ Options,打開Visual C++6.0設置屬性頁,進入 Directorie頁面,在 Show Directories for下拉列表中選擇Include Files,添加路徑:D:\Matlab6p5\extern\include(在Matlab的安裝路徑下);再選擇下拉列表中的 Library Files,添加路徑:D:\Matlab6p5\extern\ lib\win32\Microsoft\msvc60(在Matlab的安裝路徑下)。編譯環(huán)境只需設置一次。(2)添加庫文件: 通過菜單 Projects|settings,進入 Link 頁面,在 Object/Library Modules 框中,添加庫文件名:libmx.lib 、libmat.lib 、libeng.lib。每個新的工程文件都要單獨添加庫文件。(3)在使用 engine 函數(shù)的程序頭文件中包含如下兩個頭文件: #include "engine.h" #include (4)在應用程序中添加調用Matlab引擎的程序代碼: { Engine *ep;if(!(ep=engOpen(" \0"))) //打開Matlab引擎,建立與本地Matlab的連接{fprintf(stderr,"\n Can''t start MATLAB engine\n");exit(-1);}
以上步驟是對VC與Matlab混合編程的編譯環(huán)境進行設置,在完成了以上基本步驟后就可以利用Matlab引擎庫函數(shù)engEvalString來調用Matlab的內建函數(shù)了。
4、VC與Matlab混合編程應用實例
根據(jù)上面的方法,下面通過一個具體的實力來說明如何實現(xiàn)VC與Matlab混合編程
、它們之間的數(shù)據(jù)通信以及VC環(huán)境下對Matlab命令的調用。 首先,利用VC++6.0的MFC建立一個單文檔結構的應用程序,加入一個菜單資源,為其映射相應的功能函數(shù); 其次,根據(jù)Matlab引擎實現(xiàn)VC和Matlab的混合編程步驟(見第三部分)為程序設置相應的編譯環(huán)境并添加連接庫函數(shù);然后,調用Matlab的內建函數(shù)和命令,主要編寫程序代碼如下: …static double Areal[6]={1,2,3,4,5,6};mxArray *T=NULL,*a=NULL,*d=NULL;double time[10]={0,1,2,3,4,5,6,7,8,9};/*利用mx函數(shù)庫創(chuàng)建矩陣,傳遞參數(shù)。*/T=mxCreateDoubleMatrix(1,10,mxREAL);memcpy((char*)mxGetPr(T),(char*)time,10*sizeof(double));/*通過上面創(chuàng)建的Matlab Engine連接句柄將參數(shù)傳遞給Server端*/engPutVariable(ep,"T",T);/*調用Matlab內建的函數(shù)和指令*/engEvalString(ep,"D=.5.*(-9.8).*T.^5;");engEvalString(ep,"plot(T,D);");…
最后,添加頭文件: #include "matlab.h" 編譯運行,就可以得到如(圖1)所示的結果。
圖1:調用Matlab引擎輸出結果 上面例子是VC和Matlab的混合編程的一個簡單應用,在實際的數(shù)值計算,控制系統(tǒng)開發(fā)等工程應用中,可以很好的利用VC和Matlab的混合編程技術,從而簡化應用程序的開發(fā)工作量。
5、結論
Matlab提供了強大的數(shù)學計算功能和豐富的工具箱, 使用VC和Matlab的混合編程, 可以發(fā)揮各自特長, 縮短工程應用軟件的開發(fā)周期, 同時也提高了程序的運行效率。其中,基于客戶機/服務器計算模式的Matlab引擎是實現(xiàn)VC與Matlab 混合編程的一種常用方法。通過對引擎調用與數(shù)據(jù)組織方式的面向對象的設計,將數(shù)據(jù)組織透明化,極大地簡化了程序設計過程, 封裝了對Matlab 引擎的訪問和與Matlab 服務器進行數(shù)據(jù)交換的細節(jié),為用戶提供了一個友好的編程接口環(huán)境。