您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > VB调用Matlab神经网络工具箱在测绘软件设计中的应用
VB调用MATLAB神经网络工具箱在测绘软件设计中的应用王新志曹爽丁海勇南京信息工程大学遥感学院,南京210044摘要:本文运用MATLAB引擎技术,实现VB调用MATLAB神经网络工具箱进行测绘软件设计,集成后的软件能够充分发挥两种语言的优势。并以基于BP神经网络的GPS高程转换软件设计为例,详细介绍了VB调用MATLAB及VB编写主界面的详细步骤。关键字:VB;MATLAB;神经网络工具箱;测绘软件1、引言自上世纪80年代末以来,神经网络这个涉及多种学科的新的高科技领域,吸引了众多的数理科学家、工程师等进行研究与应用。神经网络在测绘研究的众多方面都有广泛的应用,如GPS高程转换[1],遥感图像分析与处理[2],路基沉降预测[3]等。然而,神经网络种类繁多,我们常用的有BP神经网络,RBF神经网络、Hopfield神经网络等,并且神经网络层数及每层神经元较多,加上输入矢量的组数庞大,使得采用一般的程序设计神经网络时往往容易出现循环套循环的复杂嵌套程序,从而使得程序设计既费时,又不易调通,将大量的时间浪费在程序编写与调试中而无暇顾及如何设计出具有更好性能的网络。MATLAB是一款强大的工程计算和仿真软件,它集数值计算、信号处理和图形分析等功能于一体,被称为演算纸式的语言。它强大的功能为各领域的应用提供了基础,已经从最初的“矩阵实验室”渗透到科学与工程计算的多个领域,如工程计算、数值分析、信号处理、自动控制等领域[4]。其中的神经网络功能提供了大量可直接调用的函数和命令,用MATLAB来编写各种网络设计与训练的子程序,可以使神经网络设计者从繁琐的编程中解脱出来,集中精力去思考问题和解决问题,从而大大提高效率。然而MATLAB也有不足:它的界面编写功能相对来说简单、粗糙。VB(VisualBasic的简称)是面向对象的可视化编程语言,由于VB程序设计语言为用户提供了可视化的面向对象与事件驱动的程序设计集成开发环境,使程序设计变得极其快捷、方便,用户无须设计大量的程序代码,便可设计出使用的应用系统[5]。VB的图形界面编程能力强大,菜单、工具条、快捷方式等实现起来很简单。如果能将MATLAB强大的神经网络工具箱功能与VB在图形用户界面开发方面的优势结合起来,实现VB与MATLAB的无缝集成,对于有效缩短神经网络算法相关软件的开发周期、优化软件系统性能具有十分重要的意义。2、MATLAB引擎技术及VB调用MATLAB神经网络工具箱的实现方法2.1MATLAB引擎技术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.2VB调用MATLAB神经网络工具箱的实现方法MATLABActiveX的功能主要包括在MATLAB工作空间执行MATLAB命令以及直接从工作空间存取矩阵等,MATLAB提供了一些可以在MATLAB或VB中使用的函数,来实现相应的功能[7]。常用的函数主要有:Execute(CommandasString):调用MATLAB来执行一条MATLAB命令,同时返回一个字符串表示命令的执行情况。任何能在MATLAB中执行的命令都可以被包括在Command字符串中。具体格式为:BSTRExecute([in]BSTRCommand)BSTR表示字符串类型,它与VB存储字符串所采用的数据格式相同。GetFullMatrix:用来将MATLAB的一个矩阵变量传递到VB程序的一个一维或二维数组中。具体格式为:VoidGetFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in,out]SAFEARRAY(double)*pr,[in,out]SAFEARRAY(double)*pi)BSTR表示字符串类型,Name指MATLAB中的矩阵名;Workspace指矩阵所在的工作空间,当Workspace为base时,表示在MATLAB的工作空间操作;pr和pi分别是数组的实部和虚部,为双精度数据类型。PutFullMatrix:用来将VB程序的一个一维或二维数组传递到MATLAB的一个矩阵变量中。具体格式为:VoidPutFullMatrix([in]BSTRName,[in]BSTRWorkspace,[in]SAFEARRAY(double)pr*,[in]SAFEARRAY(double)*pi)参数含义与GetFullMatrix类似。图1利用MATLAB引擎技术实现神经网络工具箱的调用过程MinimizeCommandWindow:用来使MATLAB命令窗口最小化。具体格式为:MinimizeCommandWindow()Quit:关闭MATLAB服务器。VB利用MATLAB引擎技术实现神经网络工具箱调用的过程如图1所示。PutFullMatrix传递样本和网络参数GutFullMatrix读取网络结果VBMatlab神经网络工具箱Execute执行matlab命令图2神经网络在MATLAB中实现的步骤3、基于BP神经网络的GPS高程转换软件的设计与实现MATLAB神经网络工具箱提供了多种神经网络,针对不同的问题,我们首先要选择适合的神经网络,根据样本数据确定神经网络的输入向量与输出向量,并利用样本数据对网络进行训练,通过比较分析,寻找收敛效果较好的隐含层层数、神经元数;各层激活函数、训练函数;各参数确定之后,为了方便使用,一般将其保存起来,一并存入.m文件中。3.1BP神经网络与MATLAB神经网络工具箱函数BP(BackPropagation)神经网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。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优化算法。3.2MATLAB中编写M函数及优化神经网络在MATLAB中实现的步骤如图2所示。在MATLABM-fiteEditor中编辑BP神经网络的实现过程。主要代码如下:function[Z,ey,zwch]=Bp_Net(R1,R2,R3,R4,R5,R6,R7)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为转换结果的中误差值。主要代码如下:p=xlsread('txy.xls');t=xlsread('tych.xls');……[pn,minp,maxp]=premnmx(p);%数据预处理[tn,mint,maxt]=premnmx(t);……net=newff(minmax(pntr),[R1,R2],{'tansig','purelin'},'trainlm');%创建BP神经网络net.trainParam.epochs=R5;net.trainParam.goal=R6;……net=train(net,pntr,tntr);%训练网络A=sim(net,pnte);%网络仿真Z=postmnmx(A,mint,maxt)ey=tnte-Z;%计算转换误差zwch=sqrt((ey*ey')/R4);%计算中误差为了提高软件的运算速度,需要对设计的M函数进行一些优化。主要有:1、编写的M文件名必须与利用function定义的MATLAB函数相同,否则将无法在VB程序实现函数的调用。2、程序中的变量要有明确定义。MATLAB的M程序并不要求预定义变量,MATLAB默认所有的变量都是矩阵,对这些没有定义维数的矩阵编译起来速度较慢,如果预定义变量的类型和维数,则可大大加快编译的速度。3、尽量减少循环的使用。循环在整个程序中耗时较多,要尽量利用MATLAB中的函数和矩阵的操作运算的优势,以减少循环的使用。3.3VB中程序设计在VB下建立一个新窗口,其上添加相关控件,设计程序运行界面,如图3所示。其中,7个是文本框控件,名称为Text1,Text2,…Text7,用来实现相关参数输入功能;一个是按钮控件,名称为Command1,用来实现执行程序代码的功能;一个是高级文本框控件,名称为RichTextBox1,用来输出程序的处理结果;主要代码如下:PrivateSubCommand1_Click()num_S=Val(Text1.Text)……Goal=Val(Text7.Text)SetMatlab=CreateObject(MATLAB.Application)MReal(0)=num_SCallMatlab.PutFullMatrix(R1,base,MReal,MImag)GetfullMatrix……MReal(0)=ShwCallMatlab.PutFullMatrix(R7,base,MReal,MImag)RichTextBox1.Text=MATLAB.execute([Z,ey,zwch]=Bp_Net(R1,R2,R3,R4,R5,R6,R7))CallMatlab.MinimizeCommandWindowCallMatlab.quitEndSub图3程序运行界面该“GPS高程转换系统”主要用于厦门集美大桥区域GPS高程转换,系统界面如图3所示。主要采用BP神经网络算法,采用的样本数据共26个点,分为两部分,训练样本含15个点,用于训练BP网络,检验样本11个点,用于检验网络的仿真精度。经过比较、分析,网络具体设置为输入层神经元数为2,输入向量为GPS水准点的X,Y坐标;隐含层神经元数为20;输出层神经元数为1,为GPS高程异常。通过该系统,我们可以方便地实现该区域内GPS大地高到正常高的快速、高精度转换,同时避免繁琐的算法设计过程。4、结论本文详细讲述了如何利用MATLAB引擎技术实现VB调用MATLAB神经网络工具箱进行测绘软件设计,并通过具体例子演示了软件设计的详细过程。经实例验证,使用VB编写程序主界面,调用MATLAB神经网络工具箱,能
本文标题:VB调用Matlab神经网络工具箱在测绘软件设计中的应用
链接地址:https://www.777doc.com/doc-4286378 .html