高慧

摘要
MATLAB有優(yōu)秀的數(shù)值計(jì)算和仿真分析能力,相應(yīng)的C#作為一種面向?qū)ο笤O(shè)計(jì)語言,其數(shù)據(jù)處理和成像功能的實(shí)現(xiàn)相對(duì)困難,本論文結(jié)合實(shí)際實(shí)例,將MATLAB成功的嵌入到C#中,通過基于COM組件的混編技術(shù),實(shí)現(xiàn)了基于遺傳算法的數(shù)據(jù)處理和成像。
【關(guān)鍵詞】MATLAB C# COM組件 數(shù)據(jù)成像
1概述
MATLAB是由美國MathWorks公司推出的一款數(shù)學(xué)軟件,主要功能有算法開發(fā)、數(shù)據(jù)數(shù)據(jù)分析和可視化研究、數(shù)值計(jì)算等。其高效率的計(jì)算功能將用戶從繁雜的數(shù)學(xué)運(yùn)算中解脫,同時(shí),其強(qiáng)大的圖形圖像處理能力、簡易的編程語言以及友好的界面給用戶更簡便和快捷的體驗(yàn)。正因如此,在許多的工程領(lǐng)域和學(xué)科中,MATLAB成為了計(jì)算機(jī)輔助設(shè)計(jì)以及仿真研究的首選工具。
NET技術(shù)的核心是公共語言運(yùn)行時(shí)(CLR)。CLR提供了一個(gè)應(yīng)用程序接口(API),使得程序員能夠調(diào)用一組例程功能,從程序?qū)崿F(xiàn)的繁瑣細(xì)節(jié)中脫身出來,不需考慮底層的源碼和程序內(nèi)部工作機(jī)制。VisualC#.NET是VisualStudio.NET軟件開發(fā)包的重要組成部分,其中,C#編程語言具有面向?qū)ο蟮奶卣?。C#給程序設(shè)計(jì)帶來了新的功能和優(yōu)勢(shì),逐漸成為開發(fā)界面應(yīng)用程序。
MATLABCOMBuilder模 塊 是 由MathWorks公司自MATLAB6.5開始,推薦于混合編程的一項(xiàng)技術(shù)。在工程應(yīng)用中,上位機(jī)軟件需要對(duì)采集樣本進(jìn)行極為復(fù)雜的科學(xué)運(yùn)算,涉及到算法分析和設(shè)計(jì),并需要反饋給工程師和用戶可視化的圖形界面。基于COM組件的混編技術(shù),結(jié)合了MATLAB強(qiáng)大的科學(xué)運(yùn)算能力,又發(fā)揮了VisualC#.NET用戶應(yīng)用程序界面設(shè)計(jì)和開發(fā)的優(yōu)點(diǎn),應(yīng)用前景頗為廣泛。
2 COM組件技術(shù)的具體實(shí)現(xiàn)
2.1前期準(zhǔn)備
(1)環(huán)境部署。 安裝VS2010,MATLAB,在MATLAB中,找到MCRInstallexe安裝包并安裝。
(2)數(shù)據(jù)分析。根據(jù)實(shí)際工程采樣結(jié)果和期望值,設(shè)計(jì)相應(yīng)的算法實(shí)現(xiàn)。并根據(jù)實(shí)際需求擬定數(shù)據(jù)成圖方式和類別。
2.2生成COM組件
(1)在MATLAB中編寫數(shù)據(jù)處理程序以及數(shù)據(jù)成圖的M文件。
(2)在MATLAB中配置編譯器,在MATLAB的命令窗口中,輸入mbuild-setup,根據(jù)提示將編譯器設(shè)置為相應(yīng)版本。在MATLAB命令窗口中運(yùn)行deploy,將MATLAB函數(shù)轉(zhuǎn)變成NET的編譯庫,在NewProjectSettings窗口創(chuàng)建一個(gè)新的Project,鍵入組件名稱和類名。將編寫好的M文件加入新建的工程中,生成的最終的dll文件。
2.3 vs2010對(duì)COM組件進(jìn)行調(diào)用
(1)在VS2010界面下的項(xiàng)目工程中右鍵單擊,添加生成的dll文件引用。
(2)在C#.NET中創(chuàng)建包含COM組件中方法的類的實(shí)例。在MATLAB安裝路徑下的toolbox里找到MWArray.dll并添加。
(3)將MATLAB窗口嵌入到vs的winform中。分別使用到Windows操作系統(tǒng)中的4個(gè)API函數(shù):FindWindoW、SetParent、SetWindowLong、MoveWindow.
3工程實(shí)例
3.1 MATLAB繪圖程序
pcolor(zz);%繪制數(shù)據(jù)的二維顏色變化圖
set(gca,ytick,[1:1:5])
axis([1 91 5l);
set(gca,YDir',reverse);
fm= findall(gcf,'type,uimenu);%找到標(biāo)準(zhǔn)菜單,句柄返回給fm。
ft= findall(gcf,type,uipushtool,-or,type,uitoggletool);%找到工具欄,句柄返回給ft。
st= findall( gef,‘To oltip,‘ZoomIn,-or‘To oltip,‘Zo omOut,‘-or,‘Tooltip,‘Rotate3D,‘or,‘Tooltip,‘Print Figure);
3.2 vs 2010嵌入的實(shí)現(xiàn)
IntPtr hChild;//子窗口句柄
IntPtr hParent;∥父窗口句柄
hParent= dll.FindWindow(null, this.Text);
hChild= dll.FindWindo、v(null, “Figurell”);
dll.SetParent(hChild, hParent);
dll.SetWindowLong(hChild, -16,369164288);
dll.MoveWindow(hChild,0,O,this.Width-324, this.Height, true);}
3.3效果圖
圖1為MATLAB窗口嵌入到vs2010窗口中的實(shí)例。用戶可以方便的查看實(shí)際場(chǎng)地情況。
參考文獻(xiàn)
[1]岳玉芳,尤忠生,張玉雙.基于COM的VB與MATLAB混合編程[J].計(jì)算機(jī)工程與設(shè)計(jì),2005 (01): 61-62.
[2]王昊亮,李剛.VisualC#程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社,2004.
[3]潘愛民.COM原理及應(yīng)用[M].清華大學(xué)出版社,2003.