王新志,曹 爽,丁海勇
(南京信息工程大學遙感學院,江蘇南京210044)
VB調用Matlab神經網絡工具箱在測繪軟件設計中的應用
王新志,曹 爽,丁海勇
(南京信息工程大學遙感學院,江蘇南京210044)
運用Matlab引擎技術,實現VB調用Matlab神經網絡工具箱進行測繪軟件設計,集成后的軟件能夠充分發揮兩種語言的優勢。并以基于BP神經網絡的GPS高程轉換軟件設計為例,介紹VB調用Matlab及VB編寫主界面的詳細步驟。
VB;Matlab;神經網絡工具箱;測繪軟件
自20世紀80年代末以來,神經網絡這個涉及多種學科的高新科技領域,吸引了眾多的數理科學家、工程師等對其進行研究與應用。神經網絡在測繪研究的眾多方面都有廣泛的應用,如GPS高程轉換[1]、遙感圖像分析與處理[2]、路基沉降預測[3]等。然而,由于神經網絡種類繁多,常用的有BP神經網絡,RBF神經網絡、Hopfield神經網絡等,并且神經網絡層數及每層神經元較多,加上輸入矢量的組數龐大,使得采用一般的程序設計神經網絡時往往容易出現循環套循環的復雜嵌套程序,從而使得程序設計既費時,又不易調通,將大量的時間浪費在程序編寫與調試中而無暇顧及如何設計出具有更好性能的網絡。
Matlab是一款強大的工程計算和仿真軟件,它集數值計算、信號處理和圖形分析等功能于一體,被稱為演算紙式的語言。它強大的功能為各領域的應用提供了基礎,已經從最初的矩陣實驗室滲透到科學與工程計算的多個領域,如工程計算、數值分析、信號處理、自動控制等[4]。其中的神經網絡功能提供了大量可直接調用的函數和命令,用Matlab來編寫各種網絡設計與訓練的子程序,可以使神經網絡設計者從繁瑣的編程中解脫出來,集中精力去思考和解決問題,從而能大大提高效率。然而Matlab也有不足,它的界面編寫功能相對來說簡單、粗糙。
Visual Basic(VB)是面向對象的可視化編程語言,它為用戶提供了可視化的面向對象與事件驅動的程序設計集成開發環境,使得程序設計變得極其快捷、方便,用戶無需設計大量的程序代碼,便可設計出使用的應用系統[5]。VB的圖形界面編程能力強大,菜單、工具條、快捷方式等實現起來很簡單。如果能將Matlab強大的神經網絡工具箱功能與VB在圖形用戶界面開發方面的優勢結合起來,實現VB與Matlab的無縫集成,對于有效縮短神經網絡算法相關軟件的開發周期,優化軟件系統性能具有十分重要的意義。
1.Matlab引擎技術
Matlab引擎函數庫是Matlab提供的一系列程序的集合,它允許用戶在自己的應用程序中對Matlab函數進行調用,將Matlab作為一個計算引擎使用,讓其在后臺運行。當用戶使用Matlab引擎時,相當于在后臺啟動了一個Matlab進程。Matlab引擎函數在用戶程序與Matlab進程之間起一個橋梁的作用,它完成兩者的數據交換和命令的傳遞。在Windows環境中Matlab引擎是通過ActiveX來完成的。而ActiveX是由Microsoft制定的一種獨立于編程語言的組件集成協議,它不受開發環境的限制,并且ActiveX控件能夠在不同的環境中使用,包括VC、VB、C++builder等[6]。
在VB編程環境下通過ActiveX自動化接口可將 Matlab作為 VB語言的一個 ActiveX部件調用[7]。
2.VB調用Matlab神經網絡工具箱的實現方法
Matlab ActiveX的功能主要包括在Matlab工作空間執行Matlab命令以及直接從工作空間存取矩陣等,Matlab提供了一些可以在Matlab或VB中使用的函數,來實現相應的功能[7]。常用的函數主要有:
1)Execute(Command as String):調用Matlab來執行一條Matlab命令,同時返回一個字符串表示命令的執行情況。任何能在Matlab中執行的命令都可以被包括在Command字符串中。具體格式為

其中,BSTR表示字符串類型,它與VB存儲字符串所采用的數據格式相同。
2)GetFullMatrix:用來將Matlab的一個矩陣變量傳遞到VB程序的一個一維或二維數組中。具體格式為

其中,BSTR表示字符串類型;Name指Matlab中的矩陣名;Workspace指矩陣所在的工作空間,當Workspace為base時,表示在Matlab的工作空間操作;pr和pi分別是數組的實部和虛部,為雙精度數據類型。
3)PutFullMatrix:用來將VB程序的一個一維或二維數組傳遞到Matlab的一個矩陣變量中。具體格式為

其中,參數含義與GetFullMatrix類似。
4)MinimizeCommandWindow:用來使Matlab命令窗口最小化。具體格式為

5)Quit:關閉Matlab服務器。
VB利用Matlab引擎技術實現神經網絡工具箱調用的過程如圖1所示。

圖1 VB利用Matlab引擎技術實現神經網絡工具箱的調用過程
Matlab神經網絡工具箱提供了多種神經網絡,針對不同的問題,首先要選擇適合的神經網絡,根據樣本數據確定神經網絡的輸入向量與輸出向量,并利用樣本數據對網絡進行訓練;然后通過比較分析,尋找收斂效果較好的隱含層層數、神經元數及各層激活函數、訓練函數;各參數確定之后,為了方便使用,一般將其保存起來,一并存入M文件中。
1.BP神經網絡與Matlab神經網絡工具箱函數
BP(back propagation)神經網絡是一種按誤差逆傳播算法訓練的多層前饋網絡,是目前應用最廣泛的神經網絡模型之一。BP網絡能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網絡的權值和閾值,使網絡的誤差平方和達到最小。
Matlab神經網絡工具箱是以神經網絡理論為基礎,用Matlab語言構造出的典型神經網絡工具函數。Matlab神經網絡工具箱中含有大量與BP神經網絡有關的函數,這些函數為BP神經網絡的應用研究提供了強有力的工具。本文中用到的與BP神經網絡有關的工具箱函數有[8]:
1)newff():BP神經網絡創建函數,用于建立一個BP神經網絡。
2)train():神經網絡訓練函數,用于訓練建立的BP神經網絡。
3)sim():神經網絡仿真函數,用于對訓練后的BP神經網絡進行仿真。
4)tansig()、purelin():神經元傳遞函數,又稱激活函數。tansig為雙曲正切S型(sigmoid)傳遞函數,利用BP算法訓練隱層神經元時經常采用它; purelin()為線性傳遞函數,利用BP算法訓練輸出層神經元時經常采用它。
5)trainlm():BP網絡訓練函數,該函數采用L-M優化算法。
2.Matlab中編寫M函數及優化
神經網絡在Matlab中實現的步驟如圖2所示。

圖2 神經網絡在Matlab中實現的步驟
在Matlab M-fite Editor中編輯BP神經網絡的實現過程。主要代碼如下

其中,Bp_Net為函數名稱;Bp_Net(R1,R2,R3,R4,R5,R6,R7)括號內為輸入參數,R1為隱含層神經元數,R2為輸出層神經元數,R3為訓練樣本個數,R4為檢驗樣本個數,R5為最大循環步數,R6為網絡性能參數,R7為兩次顯示之間的訓練步數;[Z,ey,zwch]中括號內是輸出參數,Z為轉換后GPS高程值,ey為轉換后GPS高程誤差值,zwch為轉換結果的中誤差值。主要代碼如下


為了提高軟件的運算速度,需要對設計的M函數進行一些優化。
1)編寫的M文件名必須與利用function定義的Matlab函數相同,否則將無法在VB程序實現函數的調用。
2)程序中的變量要有明確定義。Matlab的M程序并不要求預定義變量,Matlab默認所有的變量都是矩陣,對這些沒有定義維數的矩陣編譯起來速度較慢,如果預定義變量的類型和維數,則可大大加快編譯的速度。
3)盡量減少循環的使用。循環在整個程序中耗時較多,要盡量利用Matlab中函數和矩陣的操作運算優勢,以減少循環的使用。
3.VB中的程序設計
在VB下建立一個新窗口,在其上添加相關控件,設計程序運行界面如圖3所示。

圖3 程序運行界面
其中,文本框控件有7個,名稱為Text1、Text2、…、Text7,用來實現相關參數輸入功能;按鈕控件一個,名稱為Command 1,用來實現執行程序代碼的功能;高級文本框控件一個,名稱為RichTextBox1,用來輸出程序的處理結果。主要代碼如下


該GPS高程轉換系統主要用于廈門集美大橋區域GPS高程轉換,系統界面如圖3所示。主要采用BP神經網絡算法,采用的樣本數據共26個點,分為兩部分,訓練樣本含15個點,用于訓練BP網絡;檢驗樣本11個點,用于檢驗網絡的仿真精度。經過比較、分析,網絡具體設置為輸入層神經元數為2,輸入向量為GPS水準點的X、Y坐標;隱含層神經元數為20;輸出層神經元數為1,為GPS高程異常。通過該系統,可以方便地實現該區域內GPS大地高到正常高的快速、高精度轉換,同時可避免繁瑣的算法設計過程。
本文詳細論述了如何利用Matlab引擎技術實現VB調用Matlab神經網絡工具箱進行測繪軟件設計,并通過具體例子演示了軟件設計的詳細過程。經實例驗證,使用VB編寫程序主界面,調用Matlab神經網絡工具箱,能充分發揮VB編程靈活、界面友好等優點,同時能高效地利用Matlab強大、豐富的工具箱,降低了開發工作的復雜度,使軟件開發過程更簡單快速。
[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].黑龍江科技信息,2009(23):23.
[3] 尹珺,邵黎霞,樊琨.帶調控器人工神經網絡的軟土路基沉降預測[J].測繪通報,2007(9):17-19.
[4] 楊志強,路曉峰.基于COM的Matlab和C++Builder在測量軟件開發中的應用[J].測繪科學,2007,32(3):184-185.
[5] 李雁翎.Visual Basic程序設計[M].北京:清華大學出版社,2007.
[6] 黃一丹,嚴洪森,馮麗娟,等.基于C#.NET與Matlab接口和BP網絡的汽車產量預測[J].計算機技術與發展,2008,18(11):36-40.
[7] 王耀龍,梁小冰,黃萍.Visual Basic.NET調用Matlab神經網絡工具箱的實現方法[J].現代計算機,2005,203(1):78-84.
[8] 飛思科技產品研發中心.神經網絡理論與Matlab 7實現[M].北京:電子工業出版社,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數據處理及應用方面的研究工作。