《第5章 MATLAB混合编程技术.ppt》由会员分享,可在线阅读,更多相关《第5章 MATLAB混合编程技术.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、智能中国网提供学习支持智能中国网提供学习支持第第5 5章章 MATLABMATLAB混合编程技术混合编程技术 5.1 5.1 概述概述利用利用利用利用MATLAB COMMATLAB COM生成器和生成器和生成器和生成器和Excel Excel 生成生成生成生成器,可以快速实现基于器,可以快速实现基于器,可以快速实现基于器,可以快速实现基于MATLABMATLAB的混合的混合的混合的混合编程,实现复杂的算法应用。编程,实现复杂的算法应用。编程,实现复杂的算法应用。编程,实现复杂的算法应用。5.2COM5.2COM生成器(生成器(COM COM BuuilderBuuilder)pCOMCOM(
2、Component Object ModelComponent Object Model,组件对象模型),组件对象模型)是以组件为发布单元的对象模型,是一系列面向是以组件为发布单元的对象模型,是一系列面向对象技术和工具的集合。对象技术和工具的集合。p由于由于COMCOM是建立在二进制级别上的规范,所以组是建立在二进制级别上的规范,所以组件对象之间的交互规范不依赖于任何特定的语言。件对象之间的交互规范不依赖于任何特定的语言。pMATLABMATLAB提供了提供了COMCOM生成器。生成器。COMCOM生成器提供了实生成器提供了实现现MATLABMATLAB独立应用的一种新途径。它能把独立应用的一
3、种新途径。它能把MATLABMATLAB开发的算法做成组件,这些组件作为独立的开发的算法做成组件,这些组件作为独立的COMCOM对象,可以直接被对象,可以直接被C+C+、VBVB、VCVC、C#C#、JAVAJAVA或其或其他支持他支持COMCOM的语言所引用的语言所引用 5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p1 1创建创建nnToolKitnnToolKit工程工程(MATLAB6.5MATLAB6.5环环境下)境下)p在在MATLABMATLAB命令行命令行中输入命令中输入命令comtoolcomtool,打开,打开MATLAB CO
4、M MATLAB COM BuilderBuilder对话对话框框 5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p在在“File”File”菜单中选择菜单中选择“New New Project”Project”选项,将弹出选项,将弹出“New New Project Setting”Project Setting”对话框对话框p填写相关项目后点填写相关项目后点“OK”,OK”,弹弹出确认对话框。出确认对话框。5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p点击点击OKOK按钮,将按钮,将在指定目录在指
5、定目录下自动创建下自动创建一个新的工一个新的工程文件程文件nnToolKit.nnToolKit.cblcbl 5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p2 2管理管理M M文件文件 点击Add File按钮或从Project菜单中选择Add File选项,将已调试好的神经网络相关函数(LmTrain.m、LmSimu.m等)加入到项目中。5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p3 3生成生成nnToolKitnnToolKit组件组件 通过“Build”菜单中的“COM Object”选
6、项或直接点击“Build”按钮来调用MATLAB编译器,把中间源文件写到D:MATLAB6p5worknnToolKitsrc目录中,将必要的输出文件写到D:MATLAB6p5worknnToolKitdistrib目录中,“Build Status”面板显示生成过程的输出如图所示 5.2.1 5.2.1 创建创建nnToolKitnnToolKit的的COMCOM组件组件p4 4打包和分发组件打包和分发组件从“Component”菜单中选择“Package Component”选项,将创建安装文件,点击安装文件即可在想要安装的机器上安装该工具包 5.2.2 5.2.2 nnToolKitnn
7、ToolKit组件的安装组件的安装 p直接运行直接运行nnToolKit.exennToolKit.exe自解压安装文件,自解压安装文件,按提示继续操作,完成相关组件的注册,按提示继续操作,完成相关组件的注册,直至直至nnToolKitnnToolKit工具包安装成功工具包安装成功 。5.2.2 5.2.2 nnToolKitnnToolKit组件的安装组件的安装p根据系统安装时的提根据系统安装时的提示,手工配置环境变量示,手工配置环境变量信息。信息。p若工具包安装在若工具包安装在C:2NSOFTPFnnToolKiC:2NSOFTPFnnToolKit t目录,则配置操作如目录,则配置操作如
8、下:下:我的电脑-属性-环境变量,将“C:2NSOFTPFnnToolKitbinwin32”加到path路径中。5.2.3 5.2.3 VBVB调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程 p1 1、创建神经网络应用工程、创建神经网络应用工程打开Visual Basic开发环境,并创建一个新的工程,取名为NetProj。在NetProj工程中,创建两个模板文件CBpnFile.bas,CNetPara.bas和三个窗体表单文件frmAbout.frm,frmLmNet.frm,frmUnitary.frm,其中frmLmNet.frm为系统
9、主界面,在空白的窗体中添加控件,如图5-6所示,并按表5-2中的内容设置控件属性 5.2.35.2.3VBVB调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p2 2、在工程中、在工程中引用引用nnToolKitnnToolKit库库点击菜单点击菜单“Project/RProject/References”eferences”,加载,加载nnToolKitnnToolKit类类型库。型库。5.2.3 5.2.3 VBVB调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p在在Visual Visual
10、 BasicBasic环境环境下,点击下,点击View/ObjecView/Object t Browser”Browser”p类中成员函类中成员函数的参数形数的参数形式与式与.M.M文件文件里的参数形里的参数形式是不同的式是不同的 5.2.3 5.2.3 VBVB调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程pVBVB调用调用nnToolKitnnToolKit神经网络工具包程序神经网络工具包程序5.2.3 5.2.3 VBVB调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p系统运行时,为何报
11、下图所示的错误?系统运行时,为何报下图所示的错误?1、神经网络工具包未能正确安装。平台安装到最后时会出现一个DOS界面(用户如果直接关掉该安装界面,将致使神经网络工具包未能安装),如果是第一次安装,用户一般只需选择默认安装即可(回车操作),如果以前安装过,请选择覆盖操作;2、多次安装工具包时未能将以前的应用删除掉从而导致。如果是这种情况,请将以前的安装过程中产生的相应文件夹(bin及toolbox)及文件删除掉,再重新安装工具包,安装过程中最好选择默认安装;3、系统中曾安装多个MATLAB的不同版本,如同时安装有MATLAB6.5,MATLAB7.0,则要求修改环境变量的配置信息;4、未正确配
12、置环境变量5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p在在CBCB中创建基于中创建基于nnToolKitnnToolKit的自定的自定义义VCLVCL组件组件在图书配套的源程序中,已经建有一个VCL工程,打开项目文件nnToolKit.bpk,出现右图所示的对话框:5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p编译项目文件后,再点击编译项目文件后,再点击“install”install”操操作,安装完成后,在当前开发环境下的作,安装完成后,在当前开发环境下的ActiveXActiveX的组件页中会出现的组件页中会出现nnToolKitnnToolKit
13、 ActiveXActiveX控件,如下图所示:控件,如下图所示:5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p2 2创建神经网络创建神经网络应用工程应用工程打开C+Builder开发环境,并创建一个新的工程,取名为NetProj。在主窗体中加载一个TPageControl控件,并在其中增加两个页面,一个对应网络训练,如右图所示5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p2 2创建神经网络创建神经网络应用工程应用工程打开C+Builder开发环境,并创建一个新的工程,取名为NetProj。在主窗体中加载一个TPageControl控件,并在其中增加两个
14、页面,一个对应网络仿真,如右图所示5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p3 3加载加载nnToolKitnnToolKit ActiveX ActiveX控件控件从工具条ActiveX的组件页中,将nnToolKit ActiveX控件拖至设计窗体中,这时在头文件中将自动加入一行:#include#include nnToolKit_OCX.hnnToolKit_OCX.h 在构造函数中自动定义一个类TnnToolKit对象:TnnToolKitTnnToolKit*nnToolKit1;*nnToolKit1;在实现文件中也会自动加入一行:#pragmapragm
15、a link link nnToolKit_OCXnnToolKit_OCX 5.2.4 CB调用nnToolKit神经网络工具包实现混合编程p程序程序5.2.5 VC5.2.5 VC调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程 p1 1创建创建MFCMFC工程工程打开打开ViusalViusal C+C+,新建一个,新建一个MFC MFC AppWizardexeAppWizardexe 单文档工程单文档工程lmlm。在在“操作操作”菜单菜单中增加两个菜单中增加两个菜单项项“训练训练”和和“仿真仿真”,同时在,同时在工程中相应增加工程中相应
16、增加两个对话框,类两个对话框,类名为名为CSDlgCSDlg和和CTDlgCTDlg,分别对应,分别对应“训练训练”和和“仿仿真真”菜单项。菜单项。“训练训练”界面设计界面设计如右图如右图5.2.5 VC5.2.5 VC调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p“仿真仿真”界面界面设计如设计如右图所右图所示示5.2.5 VC5.2.5 VC调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p2 2将将nnToolKitnnToolKit动态库导入动态库导入VCVC 使用使用MFC MFC Cl
17、assWizardClassWizard,添加一个新类,选,添加一个新类,选择择From a type of libraryFrom a type of library,在弹出的对话框,在弹出的对话框中选中中选中nnToolKit.dllnnToolKit.dll5.2.5 VC5.2.5 VC调用调用nnToolKitnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程p确定后,在确定后,在workspaceworkspace中中可以发现这可以发现这时自动产生时自动产生了类了类InnToolKitInnToolKit。5.2.5 VC5.2.5 VC调用调用nnToolKi
18、tnnToolKit神经网络工具包实现混合编程神经网络工具包实现混合编程pVCVC调用调用nnToolKitnnToolKit神经网络工具包程序神经网络工具包程序5.3 Excel生成器(Excel Builder)pMATLAB还提供了一个称为Excel生成器的工具,利用该工具,可以生成DLL组件和VBA代码。利用DLL组件,可以进行与前面COM生成器组件相似的操作。VBA代码可以在Excel的Visual Basic编辑器中直接使用,可以保存为插件(Add-Ins)。pExcel生成器创建的COM对象暴露给VB程序环境一个类,该类包含一系列称为方法的函数,对应于包含在组件工程中的原始MAT
19、LAB函数。5.3 Excel生成器(Excel Builder)p5.3.1 创建nnxToolKit的Excel插件1 1创建创建nnxToolKitnnxToolKit工程工程 在MATLAB命令行中输入命令mxltool,打开MATLAB Excel生成器主窗口 5.3.1 创建nnxToolKit的Excel插件p2 2管理管理M M文件和文件和MEXMEX文件(神经网络相关函数)文件(神经网络相关函数)创建工程后,主窗口的“Project”,“Build”和“Component”等菜单选项变为可用,点击“Add File”按钮或从“Project”菜单中选择“Add File”选项
20、,在工程中将已调试好的神经网络相关函数(LmTrain.m、LmSimu.m等)加入到项目中。使用Remove按钮或从Project菜单中选择Remove File选项,将删除所有已经选定的M文件或MEX文件。点击Edit按钮或从Project菜单中选择Edit File选项,或双击M文件的文件名,将在MATLAB编辑器中打开选定的M文件,并可以进行修改和调试。5.3.1 创建nnxToolKit的Excel插件p3 3生成生成nnxToolKitnnxToolKit组件组件 定义好工程设置并添加了相关神经网络函数后,点击Build按钮来调用MATLAB编译器,生成一个可配置的DLL文件和必要
21、的VBA代码。在工程目录下生成srcdistrib两个目录,分别放置中间源文件和输出文件5.3.1 创建nnxToolKit的Excel插件p4 4打包和发布组件打包和发布组件 如果模块编译成功,并且创建了如果模块编译成功,并且创建了ExcelExcel插件插件以后,就可以包装组件生成自解压可执行程序以后,就可以包装组件生成自解压可执行程序的名称为的名称为nnxToolKit.exennxToolKit.exe 5.3.2 5.3.2 nnxToolKitnnxToolKit组件的安装组件的安装 p直接运行直接运行nnxToolKit.exennxToolKit.exe安装文件,安装文件,程序
22、首先完成自解压,然后进入安装程序首先完成自解压,然后进入安装过程,具体步骤类似于过程,具体步骤类似于nnToolKitnnToolKit的安的安装装 。p安装过程演示安装过程演示5.3.3 5.3.3 nnxToolKitnnxToolKit组件集成到组件集成到VBA VBA p1 1)启动)启动ExcelExcel。p2 2)从)从ExcelExcel主菜单中,按顺序选择主菜单中,按顺序选择“工具工具”“宏宏”“Visual Visual BasicBasic编辑器编辑器”,启动,启动ExcelExcel的的Visual BasicVisual Basic编辑器。编辑器。p3 3)在编辑器的
23、)在编辑器的“工具工具”菜单中选择菜单中选择“引用引用”选项,显示选项,显示“引用引用”对话框。在该对话框中选择对话框。在该对话框中选择nnxToolKitnnxToolKit 1.0 Type Library 1.0 Type Library和和MWComUtilMWComUtil 1.0 Type Library 1.0 Type Library。p插件需要一些初始化代码和一些全局变量来控制应用程序的状态。插件需要一些初始化代码和一些全局变量来控制应用程序的状态。要达到这个目的,按照后面的步骤实现要达到这个目的,按照后面的步骤实现Visual BasicVisual Basic代码模块。代
24、码模块。p4 4)在工程窗口中右击)在工程窗口中右击VBAProjectVBAProject选项并从弹出式菜单中按顺序选选项并从弹出式菜单中按顺序选择择“插入插入”“模块模块”。p5 5)在)在VBAProjectVBAProject中的中的ModulesModules下面出现一个新的模块。在该模块的下面出现一个新的模块。在该模块的属性页中,将属性页中,将NameName属性设置为属性设置为LmNetMainLmNetMain,如图所示。,如图所示。5.3.3 5.3.3 nnxToolKitnnxToolKit组件集成到组件集成到VBAVBAp在在LmNetMainLmNetMain模块中输
25、入下面的代码模块中输入下面的代码 5.3.4 创建图形用户界面p按照以下步骤创建一个新的用户窗体,并在窗按照以下步骤创建一个新的用户窗体,并在窗体上添加必要的控件。体上添加必要的控件。1)在工程窗口中右击VBAProject选项,并从弹出式菜单中按顺序选择“插入”“用户窗体”选项。2)现在,在VBA工程中,一个新的窗体显示在Forms下面。在窗体的属性页中,将Name属性设置为frmLmNet,将Caption属性设置为:VBA调用nnxToolKit示例。3)给空白的窗体中添加控件,如图5-20所示,并按表5-4中的内容设置控件属性。5.3.4 创建图形用户界面p右击窗体并从弹出式菜单中选择
26、右击窗体并从弹出式菜单中选择“查看代码查看代码”选项。然后在代码窗选项。然后在代码窗口中输入下面的代码口中输入下面的代码 5.3.4 创建图形用户界面p集成的最后一步是给集成的最后一步是给ExcelExcel添加一个菜单选项。添加一个菜单选项。这样,就可以从这样,就可以从ExcelExcel的的“工具工具”菜单中调用该菜单中调用该工具了。进行这一步工作,需要为工作簿的工具了。进行这一步工作,需要为工作簿的AddinInstallAddinInstall和和AddinUninstallAddinUninstall事件添加事件事件添加事件句柄。该菜单项调用句柄。该菜单项调用LoadLmNetLoa
27、dLmNet模块中的模块中的LoadLmNetLoadLmNet函数。按照下面的步骤实现菜单选项:函数。按照下面的步骤实现菜单选项:p在在Visual BasicVisual Basic工程窗口中右击工程窗口中右击ThisWorkbookThisWorkbook选项,并从弹出式菜单中选择选项,并从弹出式菜单中选择“查看代码查看代码”选项,结果如图选项,结果如图5-215-21所示。所示。5.3.4 创建图形用户界面p将下面的代码放到将下面的代码放到ThisWorkbookThisWorkbook对象中对象中 5.3.5 5.3.5 保存和测试插件保存和测试插件 p1)1)将插件命名为将插件命名
28、为“VBAVBA调用调用nnxToolKitnnxToolKit示例示例”,按照下,按照下面的步骤保存它:面的步骤保存它:在Excel主菜单中依次选择“文件”“属性”;当“Workbook属性”对话框出现时,选择“摘要信息”选项卡,并输入“VBA调用nnxToolKit示例”作为工作簿的标题;点击“OK”,保存编辑内容;从Excel主菜单中依次选择“文件”“另存为”;在“另存为”对话框中选择“Microsoft Excel Add-In(*.xla)”作为文件类型;输入“LmNet.xla”作为文件名,并点击“保存”按钮,保存插件。p在分发插件以前,对它进行测试。在分发插件以前,对它进行测试。
29、5.3.5 5.3.5 保存和测试插件保存和测试插件p2)2)通过下面的步骤完成示例程序:通过下面的步骤完成示例程序:启动一个新的Excel进程,它有一个空白的工作簿;从菜单中依次选择“工具”“加载”,打开“加载宏”对话框;在“加载宏”对话框中单击“浏览”按钮;找到LmNet.xla文件并单击“确定”按钮;在列表框中找到“VBA调用nnxToolKit示例”插件,选择它;点击“OK”按钮,装载插件。p本插件在本插件在ExcelExcel的的“工具工具”菜单下安装一个菜单项。可以菜单下安装一个菜单项。可以通过依次选择通过依次选择“工具工具”“VBAVBA调用调用nnxToolKitnnxTool
30、Kit示例示例”来来显示本神经网络应用的图形用户界面。显示本神经网络应用的图形用户界面。5.3.6 分发应用程序p将将COMCOM组件和所有的支持库打包到一个自组件和所有的支持库打包到一个自解压可执行程序解压可执行程序nnxToolKit.exennxToolKit.exe中。这样,中。这样,本包就可以安装到其他需要使用本包就可以安装到其他需要使用nnxToolKitnnxToolKit组件的计算机上了。同样需要组件的计算机上了。同样需要将将LmNet.xlaLmNet.xla文件复制到所有的在文件复制到所有的在ExcelExcel中中使用本组件的计算机中。使用本组件的计算机中。5.3.7 5
31、.3.7 应用示例应用示例p1 1案例描述案例描述窃电者为了达到窃电目的,往往采用各种窃电手法进行窃电,手法五花八门,但万变不离其宗,最常见的是从电能计量原理入手。一个电能表计量电量的多少,主要决定于电压、电流、功率因数三因素和时间的乘积,因此,只要想办法改变三要素中的任何一个要素都可以使电表慢转、停转甚至反转,从而达到窃电的目的;另外,通过采用改变电能表本身的结构性能的手法,使电能表慢转,也可以达到窃电的目的。为了有效地抑制这种窃电行为,为开展窃电侦查工作和计量装置检查工作提供依据和锁定范围。有必要通过归纳出若干指标,同时根据最终用电客户用电现场计量装置的报警数据,结合客户历史用电数据和相关
32、线路的线损数据,总结出一个预测分析模型。以便为管理者提供漏窃电的嫌疑人列表和嫌疑系数。5.3.7 5.3.7 应用示例应用示例p2 2案例分析案例分析预测模型的建立,关键在于预测模型及评价指标的选取(注意:在选取指标时,要充分考虑到采集数据的可行性)及数据的可靠性,目前有一种比较常用的简便的预测分析方法(加权平均法),实现对漏窃电的预测,如下图所示 5.3.7 5.3.7 应用示例应用示例 ppp161pp1615.3.7 5.3.7 应用示例应用示例p预测评价指标体系预测评价指标体系p专家样本数据专家样本数据 终终端端类类型型电电能表能表类类型型额额定定电电压压线损线损率率用用户户功率因功率
33、因数数漏窃漏窃电电嫌嫌疑系数疑系数5.3.7 5.3.7 应用示例应用示例p3 3程序实现程序实现 1)启动Excel,在菜单中选择“工具”“加载宏”“浏览”,选定LmNet.xla文件并确定,在可用加载宏框中会出现宏“VBA神经网络示例程序”,如图5-24所示,打勾后“确定”,这时在Excel菜单中将出现一个新的“LmNet神经网络”菜单项。5.3.7 5.3.7 应用示例应用示例2)在Sheet1表单项中输入神经网络建模的相关数据(见图5-25),在Sheet2表单项中输入专家样本数据和预测数据。5.3.7 5.3.7 应用示例应用示例p点击菜单点击菜单“LmNetLmNet神经网络神经网络”“”“切换至切换至建模建模”,将打开神经网络建模应用程序,将打开神经网络建模应用程序 小结小结p概述概述pnnToolKitnnToolKit的的COMCOM组件组件pVBVB调用调用nnToolKitnnToolKit实现混合编程实现混合编程pCBCB调用调用nnToolKitnnToolKit实现混合编程实现混合编程pVCVC调用调用nnToolKitnnToolKit实现混合编程实现混合编程pExcelExcel生成器生成器
限制150内