高慧
摘要
MATLAB有優(yōu)秀的數(shù)值計算和仿真分析能力,相應的C#作為一種面向對象設計語言,其數(shù)據(jù)處理和成像功能的實現(xiàn)相對困難,本論文結合實際實例,將MATLAB成功的嵌入到C#中,通過基于COM組件的混編技術,實現(xiàn)了基于遺傳算法的數(shù)據(jù)處理和成像。
【關鍵詞】MATLAB C# COM組件 數(shù)據(jù)成像
1概述
MATLAB是由美國MathWorks公司推出的一款數(shù)學軟件,主要功能有算法開發(fā)、數(shù)據(jù)數(shù)據(jù)分析和可視化研究、數(shù)值計算等。其高效率的計算功能將用戶從繁雜的數(shù)學運算中解脫,同時,其強大的圖形圖像處理能力、簡易的編程語言以及友好的界面給用戶更簡便和快捷的體驗。正因如此,在許多的工程領域和學科中,MATLAB成為了計算機輔助設計以及仿真研究的首選工具。
NET技術的核心是公共語言運行時(CLR)。CLR提供了一個應用程序接口(API),使得程序員能夠調用一組例程功能,從程序實現(xiàn)的繁瑣細節(jié)中脫身出來,不需考慮底層的源碼和程序內部工作機制。VisualC#.NET是VisualStudio.NET軟件開發(fā)包的重要組成部分,其中,C#編程語言具有面向對象的特征。C#給程序設計帶來了新的功能和優(yōu)勢,逐漸成為開發(fā)界面應用程序。
MATLABCOMBuilder模 塊 是 由MathWorks公司自MATLAB6.5開始,推薦于混合編程的一項技術。在工程應用中,上位機軟件需要對采集樣本進行極為復雜的科學運算,涉及到算法分析和設計,并需要反饋給工程師和用戶可視化的圖形界面?;贑OM組件的混編技術,結合了MATLAB強大的科學運算能力,又發(fā)揮了VisualC#.NET用戶應用程序界面設計和開發(fā)的優(yōu)點,應用前景頗為廣泛。
2 COM組件技術的具體實現(xiàn)
2.1前期準備
(1)環(huán)境部署。 安裝VS2010,MATLAB,在MATLAB中,找到MCRInstallexe安裝包并安裝。
(2)數(shù)據(jù)分析。根據(jù)實際工程采樣結果和期望值,設計相應的算法實現(xiàn)。并根據(jù)實際需求擬定數(shù)據(jù)成圖方式和類別。
2.2生成COM組件
(1)在MATLAB中編寫數(shù)據(jù)處理程序以及數(shù)據(jù)成圖的M文件。
(2)在MATLAB中配置編譯器,在MATLAB的命令窗口中,輸入mbuild-setup,根據(jù)提示將編譯器設置為相應版本。在MATLAB命令窗口中運行deploy,將MATLAB函數(shù)轉變成NET的編譯庫,在NewProjectSettings窗口創(chuàng)建一個新的Project,鍵入組件名稱和類名。將編寫好的M文件加入新建的工程中,生成的最終的dll文件。
2.3 vs2010對COM組件進行調用
(1)在VS2010界面下的項目工程中右鍵單擊,添加生成的dll文件引用。
(2)在C#.NET中創(chuàng)建包含COM組件中方法的類的實例。在MATLAB安裝路徑下的toolbox里找到MWArray.dll并添加。
(3)將MATLAB窗口嵌入到vs的winform中。分別使用到Windows操作系統(tǒng)中的4個API函數(shù):FindWindoW、SetParent、SetWindowLong、MoveWindow.
3工程實例
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);%找到標準菜單,句柄返回給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嵌入的實現(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窗口中的實例。用戶可以方便的查看實際場地情況。
參考文獻
[1]岳玉芳,尤忠生,張玉雙.基于COM的VB與MATLAB混合編程[J].計算機工程與設計,2005 (01): 61-62.
[2]王昊亮,李剛.VisualC#程序設計教程[M].北京:清華大學出版社,2004.
[3]潘愛民.COM原理及應用[M].清華大學出版社,2003.