王新志,曹 爽,丁海勇
(南京信息工程大學(xué)遙感學(xué)院,江蘇南京210044)
VB調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱在測(cè)繪軟件設(shè)計(jì)中的應(yīng)用
王新志,曹 爽,丁海勇
(南京信息工程大學(xué)遙感學(xué)院,江蘇南京210044)
運(yùn)用Matlab引擎技術(shù),實(shí)現(xiàn)VB調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱進(jìn)行測(cè)繪軟件設(shè)計(jì),集成后的軟件能夠充分發(fā)揮兩種語言的優(yōu)勢(shì)。并以基于BP神經(jīng)網(wǎng)絡(luò)的GPS高程轉(zhuǎn)換軟件設(shè)計(jì)為例,介紹VB調(diào)用Matlab及VB編寫主界面的詳細(xì)步驟。
VB;Matlab;神經(jīng)網(wǎng)絡(luò)工具箱;測(cè)繪軟件
自20世紀(jì)80年代末以來,神經(jīng)網(wǎng)絡(luò)這個(gè)涉及多種學(xué)科的高新科技領(lǐng)域,吸引了眾多的數(shù)理科學(xué)家、工程師等對(duì)其進(jìn)行研究與應(yīng)用。神經(jīng)網(wǎng)絡(luò)在測(cè)繪研究的眾多方面都有廣泛的應(yīng)用,如GPS高程轉(zhuǎn)換[1]、遙感圖像分析與處理[2]、路基沉降預(yù)測(cè)[3]等。然而,由于神經(jīng)網(wǎng)絡(luò)種類繁多,常用的有BP神經(jīng)網(wǎng)絡(luò),RBF神經(jīng)網(wǎng)絡(luò)、Hopfield神經(jīng)網(wǎng)絡(luò)等,并且神經(jīng)網(wǎng)絡(luò)層數(shù)及每層神經(jīng)元較多,加上輸入矢量的組數(shù)龐大,使得采用一般的程序設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)時(shí)往往容易出現(xiàn)循環(huán)套循環(huán)的復(fù)雜嵌套程序,從而使得程序設(shè)計(jì)既費(fèi)時(shí),又不易調(diào)通,將大量的時(shí)間浪費(fèi)在程序編寫與調(diào)試中而無暇顧及如何設(shè)計(jì)出具有更好性能的網(wǎng)絡(luò)。
Matlab是一款強(qiáng)大的工程計(jì)算和仿真軟件,它集數(shù)值計(jì)算、信號(hào)處理和圖形分析等功能于一體,被稱為演算紙式的語言。它強(qiáng)大的功能為各領(lǐng)域的應(yīng)用提供了基礎(chǔ),已經(jīng)從最初的矩陣實(shí)驗(yàn)室滲透到科學(xué)與工程計(jì)算的多個(gè)領(lǐng)域,如工程計(jì)算、數(shù)值分析、信號(hào)處理、自動(dòng)控制等[4]。其中的神經(jīng)網(wǎng)絡(luò)功能提供了大量可直接調(diào)用的函數(shù)和命令,用Matlab來編寫各種網(wǎng)絡(luò)設(shè)計(jì)與訓(xùn)練的子程序,可以使神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)者從繁瑣的編程中解脫出來,集中精力去思考和解決問題,從而能大大提高效率。然而Matlab也有不足,它的界面編寫功能相對(duì)來說簡單、粗糙。
Visual Basic(VB)是面向?qū)ο蟮目梢暬幊陶Z言,它為用戶提供了可視化的面向?qū)ο笈c事件驅(qū)動(dòng)的程序設(shè)計(jì)集成開發(fā)環(huán)境,使得程序設(shè)計(jì)變得極其快捷、方便,用戶無需設(shè)計(jì)大量的程序代碼,便可設(shè)計(jì)出使用的應(yīng)用系統(tǒng)[5]。VB的圖形界面編程能力強(qiáng)大,菜單、工具條、快捷方式等實(shí)現(xiàn)起來很簡單。如果能將Matlab強(qiáng)大的神經(jīng)網(wǎng)絡(luò)工具箱功能與VB在圖形用戶界面開發(fā)方面的優(yōu)勢(shì)結(jié)合起來,實(shí)現(xiàn)VB與Matlab的無縫集成,對(duì)于有效縮短神經(jīng)網(wǎng)絡(luò)算法相關(guān)軟件的開發(fā)周期,優(yōu)化軟件系統(tǒng)性能具有十分重要的意義。
1.Matlab引擎技術(shù)
Matlab引擎函數(shù)庫是Matlab提供的一系列程序的集合,它允許用戶在自己的應(yīng)用程序中對(duì)Matlab函數(shù)進(jìn)行調(diào)用,將Matlab作為一個(gè)計(jì)算引擎使用,讓其在后臺(tái)運(yùn)行。當(dāng)用戶使用Matlab引擎時(shí),相當(dāng)于在后臺(tái)啟動(dòng)了一個(gè)Matlab進(jìn)程。Matlab引擎函數(shù)在用戶程序與Matlab進(jìn)程之間起一個(gè)橋梁的作用,它完成兩者的數(shù)據(jù)交換和命令的傳遞。在Windows環(huán)境中Matlab引擎是通過ActiveX來完成的。而ActiveX是由Microsoft制定的一種獨(dú)立于編程語言的組件集成協(xié)議,它不受開發(fā)環(huán)境的限制,并且ActiveX控件能夠在不同的環(huán)境中使用,包括VC、VB、C++builder等[6]。
在VB編程環(huán)境下通過ActiveX自動(dòng)化接口可將 Matlab作為 VB語言的一個(gè) ActiveX部件調(diào)用[7]。
2.VB調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱的實(shí)現(xiàn)方法
Matlab ActiveX的功能主要包括在Matlab工作空間執(zhí)行Matlab命令以及直接從工作空間存取矩陣等,Matlab提供了一些可以在Matlab或VB中使用的函數(shù),來實(shí)現(xiàn)相應(yīng)的功能[7]。常用的函數(shù)主要有:
1)Execute(Command as String):調(diào)用Matlab來執(zhí)行一條Matlab命令,同時(shí)返回一個(gè)字符串表示命令的執(zhí)行情況。任何能在Matlab中執(zhí)行的命令都可以被包括在Command字符串中。具體格式為
其中,BSTR表示字符串類型,它與VB存儲(chǔ)字符串所采用的數(shù)據(jù)格式相同。
2)GetFullMatrix:用來將Matlab的一個(gè)矩陣變量傳遞到VB程序的一個(gè)一維或二維數(shù)組中。具體格式為
其中,BSTR表示字符串類型;Name指Matlab中的矩陣名;Workspace指矩陣所在的工作空間,當(dāng)Workspace為base時(shí),表示在Matlab的工作空間操作;pr和pi分別是數(shù)組的實(shí)部和虛部,為雙精度數(shù)據(jù)類型。
3)PutFullMatrix:用來將VB程序的一個(gè)一維或二維數(shù)組傳遞到Matlab的一個(gè)矩陣變量中。具體格式為
其中,參數(shù)含義與GetFullMatrix類似。
4)MinimizeCommandWindow:用來使Matlab命令窗口最小化。具體格式為
5)Quit:關(guān)閉Matlab服務(wù)器。
VB利用Matlab引擎技術(shù)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)工具箱調(diào)用的過程如圖1所示。
圖1 VB利用Matlab引擎技術(shù)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)工具箱的調(diào)用過程
Matlab神經(jīng)網(wǎng)絡(luò)工具箱提供了多種神經(jīng)網(wǎng)絡(luò),針對(duì)不同的問題,首先要選擇適合的神經(jīng)網(wǎng)絡(luò),根據(jù)樣本數(shù)據(jù)確定神經(jīng)網(wǎng)絡(luò)的輸入向量與輸出向量,并利用樣本數(shù)據(jù)對(duì)網(wǎng)絡(luò)進(jìn)行訓(xùn)練;然后通過比較分析,尋找收斂效果較好的隱含層層數(shù)、神經(jīng)元數(shù)及各層激活函數(shù)、訓(xùn)練函數(shù);各參數(shù)確定之后,為了方便使用,一般將其保存起來,一并存入M文件中。
1.BP神經(jīng)網(wǎng)絡(luò)與Matlab神經(jīng)網(wǎng)絡(luò)工具箱函數(shù)
BP(back propagation)神經(jīng)網(wǎng)絡(luò)是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之一。BP網(wǎng)絡(luò)能學(xué)習(xí)和存貯大量的輸入-輸出模式映射關(guān)系,而無需事前揭示描述這種映射關(guān)系的數(shù)學(xué)方程。它的學(xué)習(xí)規(guī)則是使用最速下降法,通過反向傳播來不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,使網(wǎng)絡(luò)的誤差平方和達(dá)到最小。
Matlab神經(jīng)網(wǎng)絡(luò)工具箱是以神經(jīng)網(wǎng)絡(luò)理論為基礎(chǔ),用Matlab語言構(gòu)造出的典型神經(jīng)網(wǎng)絡(luò)工具函數(shù)。Matlab神經(jīng)網(wǎng)絡(luò)工具箱中含有大量與BP神經(jīng)網(wǎng)絡(luò)有關(guān)的函數(shù),這些函數(shù)為BP神經(jīng)網(wǎng)絡(luò)的應(yīng)用研究提供了強(qiáng)有力的工具。本文中用到的與BP神經(jīng)網(wǎng)絡(luò)有關(guān)的工具箱函數(shù)有[8]:
1)newff():BP神經(jīng)網(wǎng)絡(luò)創(chuàng)建函數(shù),用于建立一個(gè)BP神經(jīng)網(wǎng)絡(luò)。
2)train():神經(jīng)網(wǎng)絡(luò)訓(xùn)練函數(shù),用于訓(xùn)練建立的BP神經(jīng)網(wǎng)絡(luò)。
3)sim():神經(jīng)網(wǎng)絡(luò)仿真函數(shù),用于對(duì)訓(xùn)練后的BP神經(jīng)網(wǎng)絡(luò)進(jìn)行仿真。
4)tansig()、purelin():神經(jīng)元傳遞函數(shù),又稱激活函數(shù)。tansig為雙曲正切S型(sigmoid)傳遞函數(shù),利用BP算法訓(xùn)練隱層神經(jīng)元時(shí)經(jīng)常采用它; purelin()為線性傳遞函數(shù),利用BP算法訓(xùn)練輸出層神經(jīng)元時(shí)經(jīng)常采用它。
5)trainlm():BP網(wǎng)絡(luò)訓(xùn)練函數(shù),該函數(shù)采用L-M優(yōu)化算法。
2.Matlab中編寫M函數(shù)及優(yōu)化
神經(jīng)網(wǎng)絡(luò)在Matlab中實(shí)現(xiàn)的步驟如圖2所示。
圖2 神經(jīng)網(wǎng)絡(luò)在Matlab中實(shí)現(xiàn)的步驟
在Matlab M-fite Editor中編輯BP神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)過程。主要代碼如下
其中,Bp_Net為函數(shù)名稱;Bp_Net(R1,R2,R3,R4,R5,R6,R7)括號(hào)內(nèi)為輸入?yún)?shù),R1為隱含層神經(jīng)元數(shù),R2為輸出層神經(jīng)元數(shù),R3為訓(xùn)練樣本個(gè)數(shù),R4為檢驗(yàn)樣本個(gè)數(shù),R5為最大循環(huán)步數(shù),R6為網(wǎng)絡(luò)性能參數(shù),R7為兩次顯示之間的訓(xùn)練步數(shù);[Z,ey,zwch]中括號(hào)內(nèi)是輸出參數(shù),Z為轉(zhuǎn)換后GPS高程值,ey為轉(zhuǎn)換后GPS高程誤差值,zwch為轉(zhuǎn)換結(jié)果的中誤差值。主要代碼如下
為了提高軟件的運(yùn)算速度,需要對(duì)設(shè)計(jì)的M函數(shù)進(jìn)行一些優(yōu)化。
1)編寫的M文件名必須與利用function定義的Matlab函數(shù)相同,否則將無法在VB程序?qū)崿F(xiàn)函數(shù)的調(diào)用。
2)程序中的變量要有明確定義。Matlab的M程序并不要求預(yù)定義變量,Matlab默認(rèn)所有的變量都是矩陣,對(duì)這些沒有定義維數(shù)的矩陣編譯起來速度較慢,如果預(yù)定義變量的類型和維數(shù),則可大大加快編譯的速度。
3)盡量減少循環(huán)的使用。循環(huán)在整個(gè)程序中耗時(shí)較多,要盡量利用Matlab中函數(shù)和矩陣的操作運(yùn)算優(yōu)勢(shì),以減少循環(huán)的使用。
3.VB中的程序設(shè)計(jì)
在VB下建立一個(gè)新窗口,在其上添加相關(guān)控件,設(shè)計(jì)程序運(yùn)行界面如圖3所示。
圖3 程序運(yùn)行界面
其中,文本框控件有7個(gè),名稱為Text1、Text2、…、Text7,用來實(shí)現(xiàn)相關(guān)參數(shù)輸入功能;按鈕控件一個(gè),名稱為Command 1,用來實(shí)現(xiàn)執(zhí)行程序代碼的功能;高級(jí)文本框控件一個(gè),名稱為RichTextBox1,用來輸出程序的處理結(jié)果。主要代碼如下
該GPS高程轉(zhuǎn)換系統(tǒng)主要用于廈門集美大橋區(qū)域GPS高程轉(zhuǎn)換,系統(tǒng)界面如圖3所示。主要采用BP神經(jīng)網(wǎng)絡(luò)算法,采用的樣本數(shù)據(jù)共26個(gè)點(diǎn),分為兩部分,訓(xùn)練樣本含15個(gè)點(diǎn),用于訓(xùn)練BP網(wǎng)絡(luò);檢驗(yàn)樣本11個(gè)點(diǎn),用于檢驗(yàn)網(wǎng)絡(luò)的仿真精度。經(jīng)過比較、分析,網(wǎng)絡(luò)具體設(shè)置為輸入層神經(jīng)元數(shù)為2,輸入向量為GPS水準(zhǔn)點(diǎn)的X、Y坐標(biāo);隱含層神經(jīng)元數(shù)為20;輸出層神經(jīng)元數(shù)為1,為GPS高程異常。通過該系統(tǒng),可以方便地實(shí)現(xiàn)該區(qū)域內(nèi)GPS大地高到正常高的快速、高精度轉(zhuǎn)換,同時(shí)可避免繁瑣的算法設(shè)計(jì)過程。
本文詳細(xì)論述了如何利用Matlab引擎技術(shù)實(shí)現(xiàn)VB調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱進(jìn)行測(cè)繪軟件設(shè)計(jì),并通過具體例子演示了軟件設(shè)計(jì)的詳細(xì)過程。經(jīng)實(shí)例驗(yàn)證,使用VB編寫程序主界面,調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱,能充分發(fā)揮VB編程靈活、界面友好等優(yōu)點(diǎn),同時(shí)能高效地利用Matlab強(qiáng)大、豐富的工具箱,降低了開發(fā)工作的復(fù)雜度,使軟件開發(fā)過程更簡單快速。
[1] WANG Xinzhi,CHEN Wei,SUN Jingling.Application of the RBF Neural Network for GPS Height Fitting in Linear Project[C]∥Proceedings of the 2010 International Conference on Application of Mathematics and Physics.London:World Academic Union,2010.
[2] 李艷玲.人工神經(jīng)網(wǎng)絡(luò)在遙感圖像分析與處理中的應(yīng)用[J].黑龍江科技信息,2009(23):23.
[3] 尹珺,邵黎霞,樊琨.帶調(diào)控器人工神經(jīng)網(wǎng)絡(luò)的軟土路基沉降預(yù)測(cè)[J].測(cè)繪通報(bào),2007(9):17-19.
[4] 楊志強(qiáng),路曉峰.基于COM的Matlab和C++Builder在測(cè)量軟件開發(fā)中的應(yīng)用[J].測(cè)繪科學(xué),2007,32(3):184-185.
[5] 李雁翎.Visual Basic程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.
[6] 黃一丹,嚴(yán)洪森,馮麗娟,等.基于C#.NET與Matlab接口和BP網(wǎng)絡(luò)的汽車產(chǎn)量預(yù)測(cè)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008,18(11):36-40.
[7] 王耀龍,梁小冰,黃萍.Visual Basic.NET調(diào)用Matlab神經(jīng)網(wǎng)絡(luò)工具箱的實(shí)現(xiàn)方法[J].現(xiàn)代計(jì)算機(jī),2005,203(1):78-84.
[8] 飛思科技產(chǎn)品研發(fā)中心.神經(jīng)網(wǎng)絡(luò)理論與Matlab 7實(shí)現(xiàn)[M].北京:電子工業(yè)出版社,2005.
Application of Method of Calling Matlab Neural Network Toolbox in VB to Surveying Software Design
WANG Xinzhi,CAO Shuang,DING Haiyong
0494-0911(2011)11-0059-04
P209
B
2010-10-25
王新志(1981—),男,湖南鄭州人,碩士,助教,主要從事GPS數(shù)據(jù)處理及應(yīng)用方面的研究工作。