第7章 MATLAB 的混合编程初步.ppt_第1页
第7章 MATLAB 的混合编程初步.ppt_第2页
第7章 MATLAB 的混合编程初步.ppt_第3页
第7章 MATLAB 的混合编程初步.ppt_第4页
第7章 MATLAB 的混合编程初步.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 MATLAB与控制系统仿真实践 第7章MATLAB的混合编程初步 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 第7章MATLAB的混合编程初步 7 1MATLAB的混合编程形式简述7 2常用MATLAB混合编程方法7 2 1使用MATLAB的MATLABCompiler7 2 2利用MATLAB引擎 MATLABEngine 7 2 3利用ActiveX技术7 2 4利用mat文件7 2 5使用mex文件7 2 6利用MatrixVB实现与VisualBasic的混合编程7 2 7利用MATLABBuilder系列工具 7 3MATLAB的混合编程示例 以MATLAB BuilderforJava应用为例7 3 1生成魔方矩阵的演示程序7 3 2输出曲线的演示程序 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 MATLAB的编程效率极高 但因其是解释型的语言 运行效率却相对较低 还有一个问题就是MATLAB的m文件是不能脱离应用程序环境的 这样就限制了其可移植性和通用性 针对这些问题 实现MATLAB与其它程序设计语言的混合编程就显得尤为重要 这有助于充分发挥MATLAB和其它语言各自的优势 降低开发难度 缩短开发周期 提高程序的执行效率 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 1MATLAB的混合编程形式简述 通常 混合编程有以下几种形式 1 在MATLAB环境中调用其它语言编写的程序 以提高数据处理的效率 2 向MATLAB环境传送数据或从MATLAB环境接收数据 实现MATLAB系统同外部环境的数据交换 3 在MATLAB和其它应用程序间建立客户机 服务器关系 将MATLAB作为一个计算引擎 在其它应用程序中调用 从而降低程序设计的工作量 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2常用MATLAB混合编程方法 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 1使用MATLAB的MATLABCompiler 编译器可以将MATLAB程序生成适用于UNIX Windows和Macintosh平台的C和C 程序 也可生成适于MicrosoftWindows的C和C 动态链接库DLLs 可以在命令窗口使用mcc调用MATLABCompiler 也可在命令提示符下输入deploytool调用 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 2利用MATLAB引擎 实际应用中可以将MATLAB作为一个引擎使用 让其在后台使用 以简化前台用户程序的设计任务 MATLAB引擎函数库是MATLAB提供的一组接口函数 它允许用户在自己的应用的程序中对MATLAB函数进行调用 使用MATLAB引擎有如下典型的应用 将MATLAB看作是功能强大的子程序库 例如 调用MATLABengine实现复杂的数学计算 为一个特定任务构建一个完整的系统 如前台采用C语言实现GUI 而后台的分析处理功能完全由MATLAB完成 从而缩短开发周期 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 3利用ActiveX技术 ActiveX是一种支持组件集成的MicrosoftWindows协议 通过ActiveX可以将不同应用环境下开发的组件集成到一个应用环境中 ActiveX同时也是面向对象技术 Object Oriented 的一种 属于基于组件对象模型 COM 的子类 COM为所有的ActiveX对象定义了对象模型 每个ActiveX对象支持一定的接口 即不同方法 属性和事件 通过ActiveX可以在MATLAB和其它软件平台建立客户机服务器体系结构 方便彼此交互 当MATLAB控制其它ActiveX组件时 MATLAB作为一个AutomationClient 当MATLAB被其它ActiveX组件控制时 MATLAB作为一个AutomationServer 换句话说 一方面可以在MATLAB环境下运行其它语言开发的ActiveX组件 一方面其它语言的程序中也可运行MATLAB的ActiveX服务组件 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 a deploytool首界面 b MATLABCompiler界面 图deploytool操作界面 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 4利用mat文件 MATLAB保存文件默认格式为mat格式 它是二进制文件 这种格式方便了不同应用程序间的数据共享 MATLAB正是通过mat格式的数据文件与其它程序进行数据交互的 例如 我们可以将计算复杂度高 编程困难的操作交由MATLAB完成 其运算结果保存为mat格式的文件 供其它应用程序使用 这样 可极大减轻编程负担 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 5使用mex文件 mex MATLABExecutable 是MATLAB的可执行程序 在MicrosoftWindows下mex文件的扩展名为DLL 它可以在MATLAB下像一般的M文件执行 mex文件可以通过编译C C 或FORTRAN源文件产生 这样 我们就可以将一部分工作交给C C 或FORTRAN完成 只要将其编译成mex文件 供MATLAB调用即可 这种方式的优点有 代码重用 可以将以前已有的且成熟的C C 或FORTRAN程序 直接编译为mex文件供MATLAB调用 而无需将其转化为m文件 提高效率 对于C C 或FORTRAN擅长的算法如循环执行交由C C 或FORTRAN完成并编译为mex文件供MATLAB调用 以提高效率 扩展功能 通过mex文件用户可以调用系统函数或访问硬件 如A D或D A等 克服MATLAB底层操作功能不足 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 6利用MatrixVB实现与VisualBasic的混合编程 MATLAB没有与VisualBasic语言的接口 但我们可以通过第三方提供的MatrixVB 利用其提供的COM组件 在VisualBasic中实现MATLAB的许多功能 MatrixVB包含了大量与MATLAB相似的函数与和调用语法 其函数库按功能大致可分为8类 矩阵运算 运算符重载 图形图像处理 最优化处理 多项式 信号处理 随机与统计分析 控制系统 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 2 7利用MATLABBuilder系列工具 MATLAB提供了MATLABBuilderforExcel MATLABBuilderfor NET MATLABBuilderforJava一系列工具 MATLABBuilderforExcel是MATLAB专门为Excel提供的生成器工具 它将复杂的MATLAB算法转换为独立的Excel加载宏 用户可像使用其它加载宏一样使用MATLAB算法 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 MATLABBuilderfor NET目的是让用户可以在自己的应用程序中随意使用MATLAB开发的算法而无需运行或安装MATLAB软件 MATLABBuilderfor NET 将MATLAB函数编译成 NET组件 任何符合CLS CommonLanguageSpecification 的语言如VC NET VB NET C 都可以访问这些组件 也创造能够保持MATLAB灵活性的组件 生成的COM对象可由任何兼容COM技术的程序调用 如C VisualBasic ASP等 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 MATLABBuilderforJava 也称作JavaBuilder 作为MATLABCompiler的扩展 可以将MATLAB函数打包成一个java包 每个MATLAB函数都成为java类的一个方法 这样 在Java应用程序中就可调用这些方法 在打包时生成的相应支持文件及MATLABComponentRuntime MCR 都包含在其中 因此 使用这些java程序的用户无需购买或安装MATLAB MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 3MATLABBuilderforJava应用 本节以MATLAB BuilderforJava应用为例讲述 用户如有其它方面的混合编程需求的话 可以参考相应专门的文献 以下示例所用环境为JBuilder2006和MATLAB7 4 R2007a 用户也可以采用其它JAVA环境 但对JDK版本有一定要求 不可太低 对以下示例的理解需要用户有一定Java语言基础和面向对象程序设计基础 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 3 1生成魔方矩阵的演示程序 下面以生成魔方矩阵的示例演示如何使用MATLAB BuilderforJava打包m文件 如何在Java环境下使用打包文件 完成一定功能 1 MATLAB程序的准备以下函数用于生成指定大小的魔方矩阵 程序名为makesqr m functiony makesqr x 生成指定大小的魔方矩阵y magic x 此函数要求用户输入魔方矩阵大小x 生成x x的魔方矩阵 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 2 打包M函数 生成Java程序这个过程可以使用图形化工具deploytool theDeploymentToolGUI 也可在命令窗口使用mcc命令 我们使用方便的图形化工具deploytool来完成这项工作 1 启动deploytool工具在命令窗口输入 deploytool工具的首页显示了完成整个任务的流程为 创建工程 添加文件 生成Java文件 打包 如图7 2 下面依次进行 2 新建工程选择MATLABBuilderforJava项 并在D javabuilder examples目录下创建magic eg prj工程文件 如图7 3 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 2deploytool工具启动界面 图7 3创建Java工程的首界面 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 3 给工程文件中添加待打包的 m文件将先前编辑好的 m文件添加到类中 同时类名也可以根据需要进行更改 如图7 4 a 添加 m文件和更改类名窗口 b 添加 m文件和更改类名后的窗口 图7 4添加 m文件和更改类名 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 4 编译设置如果需要将所有编译信息逐行显示出来 可选CreateVerboseOutput 此外更重要的一点是要选择编译文件 可在Settings CompilerOptionsFile中输入编译文件路径 这里用到javabuilder jar文件 它应该在MATLAB安装目录下的toolbox javabuilder jar 中 5 执行打包任务点击 Buildtheproject 执行打包 如果任务成功 会有如下信息 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 Copying D javabuilder examples magic eg src magic eg jar D javabuilder examples magic eg distribCopying D javabuilder examples magic eg src magic eg ctf D javabuilder examples magic eg distribCompilationcompletedsuccesfully TheoutputislocatedinD javabuilder examples magic eg distrib 按照提示 我们可以找到转换后生成的Java源文件及打包好的文件 它们分别存放在D javabuilder examples magic eg src和D javabuilder examples magic eg distrib中 而存放在D javabuilder examples magic eg distrib下的 jar文件即是可分发的程序 以上各步完成了将MATLAB程序转化为Java程序的任务 将来我们可以在Java环境下导入这一程序 用来实现生成魔方矩阵的功能 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 3 Java环境下调用打包文件 1 在JBuilder2006中创建工程getMagic 并在工程getMagic中新建类GetMagic java 如图7 5 2 在RequiredLibrary中添加必需的 jar文件 如图7 6 这里要用到2个 jar文件 一个是刚才生成的magic eg jar 如图7 7 一个是MATLAB安装目录下的toolbox javabuilder jar javabuilder jar 如图7 8所示 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 5创建工程界面 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 6添加必需的 jar文件界面 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 7生成魔方矩阵程序的添加 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 8javabuilder jar库文件的添加 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 3 建立GetMagic java程序 文件名 GetMagic java 在程序中导入必需的包 importcom mathworks toolbox javabuilder importmagic eg 注意这里导入的即是用MATLABBuilderforJava打包生成的 jar文件 用户输入参数n要求为正整数 程序生成n阶的魔方矩阵 classGetMagic publicstaticvoidmain String args MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 MWNumericArrayn null 存放输入参数 Object result null 存放结果 magictheMagic null 存放magic类实例 try 如没有输入参数 提示错误并退出 if args length 0 System out println Error mustinputapositiveinteger return 输入参数转换并打印信息 n newMWNumericArray Double valueOf args 0 MWClassID DOUBLE MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 System out println Magicsquareoforder n toString 创建一个magic实例 theMagic newmagic 生成魔方矩阵 并打印出来 result theMagic makesqr 1 n System out println result 0 catch Exceptione System out println Exception e toString finally 释放资源 MWArray disposeArray n MWArray disposeArray result if theMagic null theMagic dispose MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 4 测试运行与分析在JBuilder2006输入运行参数4 得到如下结果 Magicsquareoforder416231351110897612414151分析以上程序 Java程序主要完成了输入数据的类型转换和魔方矩阵结果的输出 真正魔方矩阵的生成是由m文件执行的 只不过是这个m文件的功能体现为经MATLABBuilderforJava打包后类中的一个方法theMagic makesqr 1 n MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 7 3 2输出曲线的演示程序 MATLAB针对数据绘制曲线或图形具有优势 可以利用MATLAB的这一优势编写曲线或图形的绘制程序 转换并打包后 供其它程序调用 1 MATLAB程序的准备drawplot m函数 用于根据输入参数绘制曲线 functiondrawplot x y plot x y MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 2 M函数的转换与打包有关打包m文件的过程我们在上个示例中已有介绍 这里不再重复 需要注意的是在打包前应选定编译器 在Settiing项中设置 如图7 9 添加 m文件后如图7 10 图7 9设置编译文件窗口 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 图7 10添加 m文件的窗口 MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 我们选MATLAB2007a toolbox javabuilder jar javabuilder jar为编译器 另外 如果需要将编译信息全部打印出来的话 选择GenerateVerboseOutput 从以下信息可以看到 编译是成功的并且可知打包文件的具体位置 Copying D javabuilder examples m drawplot src m drawplot jar D javabuilder examples m drawplot distribCopying D javabuilder examples m drawplot src m drawplot ctf D javabuilder examples m drawplot distribCompilationcompletedsuccesfully TheoutputislocatedinD javabuilder examples m drawplot distrib MATLAB与控制系统仿真实践 北京航空航天大学出版社 2009 8 在线交流 有问必答 3 Java环境下调用打包文件编辑如下程序 使用MATLAB的绘图功能完成图形绘制 createplot java程序 导入包 importcom mathworks toolbox javabuilder importm drawplot classcreateplot publicstaticvoidmain String args MWNumericArrayx null Arrayofxvalues

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论