国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

VisuaI Studio與MATLAB協(xié)同編程方法研究

2016-12-21 00:55:04袁培燕宋明陽
計(jì)算機(jī)教育 2016年9期

袁培燕+宋明陽

摘要:Visual Studio(vs)與MATLAB協(xié)同編程技術(shù)充分結(jié)合了前者在程序設(shè)計(jì)方面的靈活性與后者強(qiáng)大的數(shù)學(xué)函數(shù)庫功能,優(yōu)勢(shì)互補(bǔ)。然而,該結(jié)合在工程實(shí)踐方面偏弱,不利于兩者的大規(guī)模應(yīng)用。針對(duì)該問題,文章基于VS與MATLAB協(xié)同編程的3種方案,通過具體實(shí)例詳細(xì)闡述兩者協(xié)同編程的實(shí)現(xiàn)步驟,分析了3種方案各自的優(yōu)缺點(diǎn),以期降低初學(xué)者的學(xué)習(xí)門檻。

關(guān)鍵詞:Visual Studio;MATLAB;協(xié)同編程;DLL文件;COM組件

0引言

Visual Studio(VS)是一款面向?qū)ο蟮某绦蜷_發(fā)平臺(tái),它通過生成程序框架減少編程人員的工作量,通過可視化的圖形開發(fā)控件設(shè)計(jì)簡(jiǎn)潔美觀的軟件界面,并支持多種編程語言,具有較好的程序設(shè)計(jì)靈活性和用戶體驗(yàn)友好性,但在數(shù)學(xué)運(yùn)算和函數(shù)繪圖方面存在不足之處。

MATLAB作為專業(yè)的數(shù)學(xué)軟件,具有高效的數(shù)學(xué)運(yùn)算能力和強(qiáng)大的函數(shù)圖形處理能力,是實(shí)驗(yàn)室中一款常用的專業(yè)軟件。然而,由于其專業(yè)性較強(qiáng)、用戶界面操作復(fù)雜,用戶的體驗(yàn)友好度不高。

在程序設(shè)計(jì)中,有效結(jié)合VS良好的用戶體驗(yàn)性、程序設(shè)計(jì)靈活性和MATLAB強(qiáng)大的數(shù)學(xué)函數(shù)庫,可以充分發(fā)揮雙方的優(yōu)點(diǎn)。但現(xiàn)有的VS與MATLAB協(xié)同編程工作側(cè)重于相關(guān)學(xué)術(shù)理論知識(shí),在工程實(shí)踐方面的應(yīng)用不夠深入。本文針對(duì)MATLAB引擎法、DLL文件法和COM組件法3種方案,結(jié)合實(shí)例重點(diǎn)描述VS與MATLAB協(xié)同編程的具體操作方法和詳細(xì)步驟,最后通過對(duì)比實(shí)驗(yàn)過程和實(shí)驗(yàn)結(jié)果,闡述3種方案各自的優(yōu)點(diǎn)和不足。

1.MATLAB與VS協(xié)同編程方法簡(jiǎn)介

1.1VS調(diào)用MATLAB引擎的方法

MATLAB引擎是一組API函數(shù)接口,用戶可以使用這組接口以發(fā)送腳本命令的方式調(diào)用MATLAB中的函數(shù)。在具體實(shí)例中,C/C++程序作為前端,可以向作為后臺(tái)的MATLAB引擎發(fā)送控制命令,MATLAB引擎根據(jù)控制命令的種類做出不同的響應(yīng)。這種方法的實(shí)質(zhì)是ActiveX控件調(diào)用MATLAB進(jìn)程。

1.2VS調(diào)用DLL文件的方法

DLL文件即動(dòng)態(tài)鏈接庫文件,是應(yīng)用程序的一部分。exe程序啟動(dòng)時(shí),與之對(duì)應(yīng)的DLL文件會(huì)被調(diào)用。MATLAB自帶編譯器,用戶可以借助該編譯器把已經(jīng)編寫好的*m文件編譯為DLL文件,然后在C/C++程序中直接使用DLL文件中寫好的MATLAB函數(shù)。

1.3VS調(diào)用COM組件的方法

COM組件,即組件對(duì)象模型,是一種通用的對(duì)象接口模型,適用于任何語言。任何語言的程序通過生成COM組件都可以被其他語言程序調(diào)用。而MATLAB的編譯器可以把用戶編寫的*m文件編譯為COM組件,供其他平臺(tái)程序使用。

2.MATLAB與VS協(xié)同編程的實(shí)現(xiàn)

2.1實(shí)驗(yàn)-MATLAB引擎法

在VS2010中建立MFC工程,以向MATLAB引擎發(fā)送命令的方式實(shí)現(xiàn)協(xié)同編程。

2.1.1前期配置

1)系統(tǒng)環(huán)境變量配置。

在“我的電腦→屬性→高級(jí)→環(huán)境變量→用戶變量/系統(tǒng)變量→PATH”選項(xiàng)中添加路徑:\bin:\bin\win64。

2)VS2010環(huán)境配置。

(1)首先建立一個(gè)基于對(duì)話框程序的MFC工程,工程名為test。

(2)設(shè)置工程目錄,設(shè)置方法如下:

在“項(xiàng)目→test屬性頁→配置屬性→VS2010目錄→包含目錄”選項(xiàng)中添加\extemkinclude;

在“項(xiàng)目→test屬性頁一配置屬性→VS2010目錄→庫目錄”選項(xiàng)中添加\extem\lib\win64/kmicrosoft;

在“項(xiàng)目→test屬性頁→配置屬性→c/c++一常規(guī)一附加包含目錄”選項(xiàng)中添加\extemklib\win64haaicrosoft和\extemkinclude;

在“項(xiàng)目→test屬性頁→配置屬性→鏈接器>常規(guī)→附加庫目錄”選項(xiàng)中添加\extem\lib和\extem\lib\win64hnicrosofl;

在“項(xiàng)目→test屬性頁→配置屬性→鏈接器>輸入>附加依賴項(xiàng)”選項(xiàng)中添加4個(gè)1ib文件,分別是libmx.1ib、libmat.1ib和libeng.1ib、mclmcrrt.1ib;

在“項(xiàng)目→test屬性頁→平臺(tái)”選項(xiàng)中選擇X64選項(xiàng)(只針對(duì)64位版本的MATLAB)。

2.1.2代碼編寫

(1)在testDlg.cpp文件中添加#include“engine.h”。

(2)在對(duì)話框界面上添加按鈕控件,為其增加消息響應(yīng)函數(shù),代碼如下所示:

2.1.3實(shí)驗(yàn)結(jié)果

編譯運(yùn)行程序,單擊確定按鈕會(huì)彈出窗口,其中顯示了正弦函數(shù)和余弦函數(shù)的直角坐標(biāo)系圖形,如圖1所示。

該方法雖然功能全面、編碼簡(jiǎn)單,但exe程序運(yùn)行時(shí)需要MATLAB在后臺(tái)運(yùn)行,脫離不了MATLAB環(huán)境,造成了運(yùn)行速度慢、程序執(zhí)行效率低的問題。

2.2實(shí)驗(yàn)二調(diào)用DLL文件法

將用戶自定義的*m文件通過MATLAB自帶的編譯器編譯為DLL文件。在VS2010中建立基于對(duì)話框的MFC程序,然后調(diào)用DLL文件中的MATLAB函數(shù)。

2.2.1前期配置

(1)實(shí)驗(yàn)一的全部前期配置步驟。

(3)配置MATLAB編譯環(huán)境并導(dǎo)出DLL文件。在MATLAB的Command window中輸人mbuild-setup命令,選擇VS2010編譯器,并輸入y進(jìn)行確認(rèn);接下來,將Current Folder目錄修改為m文件所在的目錄,然后向Command window輸入mcc-w cpplib:xinQPCAfootball-T link:libxinQPCAfootball.m命令(本文使用的m文件名為xinQPCAfootball.m);完成以上步驟后,xinQPCAfootball.m所在目錄中會(huì)產(chǎn)生庫文件所需文件,將這些文件全部復(fù)制到MFC工程目錄下。

(4)設(shè)置工程目錄。在“test屬性頁一配置屬性→鏈接器→輸入→附加依賴項(xiàng)”選項(xiàng)中添加m文件編譯后生成的lib文件,如xinQPCAfootball.m文件編譯后生成的xinQPCAfootball.lib文件。

在“項(xiàng)目→test屬性頁→配置屬性→鏈接器→常規(guī)→附加庫目錄”選項(xiàng)中添加。

2.2.2代碼編寫

在testDlg.cpp文件中添加頭文件#include”xinQPCAfootball.h”。添加成功之后打開它可以找到用戶在*m文件中編寫的MATLAB函數(shù)的接口,如下所示:

extem LIB_xinQPCAfootbalLCPP_API void MW-CALL-CONV xinQPCAfootball(int nargout,mwArray&f)

在對(duì)話框界面上添加按鈕控件并增加消息響應(yīng)函數(shù),在其中調(diào)用該接口函數(shù),代碼如下所示:

void CtestDlg::OnBnClickedOk20

mwArray a(1100,100,mxDOUBLE_CLASS);

xinQPCAfootballlnitializeo;

xinQPCAfootball(NULL,a);

2.2.3實(shí)驗(yàn)結(jié)果

編譯運(yùn)行程序,單擊確定按鈕會(huì)彈出窗口,其內(nèi)容為正弦函數(shù)和余弦函數(shù)的極坐標(biāo)圖形,如圖2所示。

該方法生成的exe程序在運(yùn)行時(shí)不需要啟動(dòng)MATLAB,可以提高程序運(yùn)行效率。但前期配置步驟較為復(fù)雜且易出錯(cuò)。

2.3實(shí)驗(yàn)三調(diào)用COM組件法

通過MATLAB中自帶的編譯器將用戶自定義的*m文件編譯為COM組件,在VS2010中建立基于對(duì)話框的MFC工程,然后用該程序調(diào)用COM組件實(shí)現(xiàn)協(xié)同編程。

2.3.1前期準(zhǔn)備

(1)創(chuàng)建community.m文件,其內(nèi)容為畫一個(gè)綠色的圓柱螺旋線,代碼如下所示:

(2)在MATLAB的Command window中輸入mbuild-setup命令,選擇VS2010編譯器的選項(xiàng)。

(3)在Command window中繼續(xù)輸入deploytool出現(xiàn)名為Deployment Project的界面,其中,Name和Location選項(xiàng)可以自定義,而Type選項(xiàng)需要選擇Generic COM component;點(diǎn)擊OK出現(xiàn)名為Generic COM Component的界面;點(diǎn)擊Add classes并輸入類名,如輸入類名為test;點(diǎn)擊Add files添加*m文件,如添加community.m文件。

點(diǎn)擊build圖標(biāo)開始生成COM組件;生成成功后會(huì)在Location目錄下生成文件夾,在該文件夾的src文件夾中可以找到調(diào)用COM組件所需的3個(gè)文件:wmCOMtypes.h、test idl.h、testidl_i.c。

(4)建立基于對(duì)話框的MFC工程,在界面上添加按鈕并創(chuàng)建消息響應(yīng)函數(shù),將3個(gè)COM組件文件復(fù)制到該工程目錄下。

(5)在“項(xiàng)目→test屬性頁→配置屬性→C/c++→預(yù)編譯頭”選項(xiàng)中選擇“不適用預(yù)編譯頭”。

2.3.2代碼編寫

2.3.3實(shí)驗(yàn)結(jié)果

編譯運(yùn)行程序,單擊確定按鈕會(huì)彈出窗口,內(nèi)容為一個(gè)圓柱螺旋線,如圖3所示。

使用COM組件的協(xié)同編程方法擁有較為簡(jiǎn)單的前期配置步驟,并包含較為全面的MATLAB功能,也可以獨(dú)立于MATLAB環(huán)境運(yùn)行,是一種較為理想的協(xié)同編程方法。

甘孜| 贵溪市| 怀仁县| 浙江省| 肃宁县| 渭源县| 洪雅县| 武威市| 儋州市| 财经| 吉水县| 油尖旺区| 长乐市| 铜鼓县| 高要市| 弥勒县| 屏东市| 澄江县| 沐川县| 仲巴县| 巴青县| 贵州省| 揭阳市| 东明县| 开封市| 满城县| 安宁市| 衡山县| 邢台县| 辰溪县| 朝阳市| 四川省| 龙井市| 佛学| 泌阳县| 隆德县| 克什克腾旗| 茌平县| 蓬莱市| 孟津县| 涡阳县|