一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VC++與MATLAB混合編程及其應用(轉載)

 奧古斯都1 2011-05-30

VC++與MATLAB混合編程及其應用

 

Matlab 是由Math Works 公司于1984 年推出的數(shù)值計算及圖形處理軟件,可以實現(xiàn)數(shù)值分析、優(yōu)化、統(tǒng)計、偏微分方程數(shù)值解、自動控制、信號處理、圖像處理等若干領域的計算和圖形顯示功能。其中,控制系統(tǒng)工具箱的集成為設計和分析各種復雜的控制系統(tǒng)提供了有效的方法和途徑。

但是,由于Matlab開發(fā)平臺的局限性,在其上面開發(fā)的程序不能脫離Matlab運行環(huán)境,因而在處理一些實際應用問題時顯得靈活性不足,而VC++則在一定程度上能夠彌補這一漏洞,因此,現(xiàn)將二者結合共用,各獻其長,可以為科研工作和工程開發(fā)提供了更為強大的技術支持。

1、Matlab與VC混合編程的實現(xiàn)方法

Matlab作為控制系統(tǒng)設計的一種通用工具,它可以和VC方便的進行連接。一般而言,Matlab與VC混合編程的實現(xiàn)方法主要有以下三種方法:(1)通過引擎(Engine),采用客戶機服務器的計算模式,通過Window的ActiveX通道和Matlab進行連接。具體應用時,往往在VC中設計程序框架,以編譯的程序作為前端客戶機;通過調用Matlab引擎在后臺實現(xiàn)與服務器的連接,實現(xiàn)動態(tài)通信(2)應用Matlab數(shù)學函數(shù)庫,Matlab中包含了內容豐富的函數(shù)庫,而且還提供了與VC的數(shù)學函數(shù)接口,用戶可以方便的在VC的IDE(集成開發(fā)環(huán)境)中調用。(3)通過DLL實現(xiàn)VC與Matlab的混合編程。DLL是一個可執(zhí)行的二進制文件。把很多通用的功能放在DLL中,可以供多個應用程序調用,這樣可以很好的減少外部存儲空間的占有量,并實現(xiàn)代碼的共享[2]。在上述三種方法中,第一種方法對調用Matlab的工具箱很實用,所有在進行控制系統(tǒng)的設計和分析時,一般都是通過調用Matlab引擎(Engine)來實現(xiàn)的。本文主要介紹采用通過引擎(Engine)來實現(xiàn)VC與Matlab的混合編程。

2、MATLAB引擎簡介

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)境。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩成人高清免费在线| 久久国产成人精品国产成人亚洲| 91国自产精品中文字幕亚洲| 亚洲午夜福利视频在线| 又黄又硬又爽又色的视频| 中文字日产幕码三区国产| 好吊日在线视频免费观看| 91日韩在线观看你懂的| 九九蜜桃视频香蕉视频| 国产精品美女午夜福利| 欧美一区二区三区喷汁尤物| 精品国产日韩一区三区| 一区二区不卡免费观看免费| 国产一区欧美一区二区| 国产乱久久亚洲国产精品| 欧美韩日在线观看一区| 99久久婷婷国产亚洲综合精品| 美女被草的视频在线观看| 亚洲欧美国产中文色妇| 国产麻豆一线二线三线| 国产精品尹人香蕉综合网| 国产欧美日产久久婷婷| 国产一区麻豆水好多高潮| 久久精品亚洲情色欧美| 欧美二区视频在线观看| 国产内射一级一片内射高清视频 | 亚洲一区二区三区国产| 99久久人妻精品免费一区| 操白丝女孩在线观看免费高清| 99亚洲综合精品成人网色播| 黑色丝袜脚足国产一区二区| 欧美在线观看视频三区| 婷婷亚洲综合五月天麻豆| 日本高清不卡在线一区| 日本欧美在线一区二区三区| 欧美日韩国产午夜福利| 国产午夜福利在线观看精品| 精品女同一区二区三区| 不卡在线播放一区二区三区| 久久精品免费视看国产成人| 国产一区二区精品高清免费|