




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MATLAB与控制系统仿真实践第第7章章MATLAB 的混合编程初步的混合编程初步第第7章章 MATLAB 的混合编程初步的混合编程初步n7.1 MATLAB 的混合编程形式简述的混合编程形式简述n7.2 常用常用MATLAB 混合编程方法混合编程方法n7.2.1使用MATLAB的MATLAB Compilern7.2.2 利用MATLAB引擎(MATLAB Engine)n7.2.3 利用ActiveX技术n7.2.4 利用mat文件n7.2.5 使用mex文件n7.2.6 利用MatrixVB实现与Visual Basic的混合编程n7.2.7 利用MATLAB Builder系列工具。n
2、7.3MATLAB 的混合编程示例的混合编程示例以以MATLAB Builder for Java应用为例应用为例n7.3.1 生成魔方矩阵的演示程序n7.3.2 输出曲线的演示程序 nMATLAB的编程效率极高,但因其是解释型的语的编程效率极高,但因其是解释型的语言,运行效率却相对较低。还有一个问题就是言,运行效率却相对较低。还有一个问题就是MATLAB的的m文件是不能脱离应用程序环境的,文件是不能脱离应用程序环境的,这样就限制了其可移植性和通用性。针对这些问这样就限制了其可移植性和通用性。针对这些问题,实现题,实现MATLAB与其它程序设计语言的混合编与其它程序设计语言的混合编程就显得尤为
3、重要。这有助于充分发挥程就显得尤为重要。这有助于充分发挥MATLAB和其它语言各自的优势,降低开发难度,缩短开和其它语言各自的优势,降低开发难度,缩短开发周期,提高程序的执行效率。发周期,提高程序的执行效率。7.1 MATLAB 的混合编程形式简述n通常,混合编程有以下几种形式:通常,混合编程有以下几种形式:n1. 在MATLAB环境中调用其它语言编写的程序,以提高数据处理的效率;n2. 向MATLAB环境传送数据或从MATLAB环境接收数据,实现MATLAB系统同外部环境的数据交换;n3. 在MATLAB和其它应用程序间建立客户机/服务器关系,将MATLAB作为一个计算引擎,在其它应用程序中
4、调用,从而降低程序设计的工作量。7.2常用MATLAB 混合编程方法7.2.1使用MATLAB的MATLAB Compiler编译器可以将MATLAB程序生成适用于UNIX, Windows和Macintosh平台的C和C+程序,也可生成适于Microsoft Windows的C和C+动态链接库DLLs。可以在命令窗口使用mcc调用MATLAB Compiler,也可在命令提示符下输入deploytool调用。7.2.2 利用MATLAB引擎n实际应用中可以将实际应用中可以将MATLAB作为一个引擎使用,作为一个引擎使用,让其在后台使用,以简化前台用户程序的设计任让其在后台使用,以简化前台用户
5、程序的设计任务。务。MATLAB引擎函数库是引擎函数库是MATLAB提供的一提供的一组接口函数,它允许用户在自己的应用的程序中组接口函数,它允许用户在自己的应用的程序中对对MATLAB函数进行调用。使用函数进行调用。使用MATLAB引擎引擎有如下典型的应用:有如下典型的应用:n将将MATLAB看作是功能强大的子程序库。例如,看作是功能强大的子程序库。例如,调用调用 MATLAB engine实现复杂的数学计算。实现复杂的数学计算。n为一个特定任务构建一个完整的系统。如前台采为一个特定任务构建一个完整的系统。如前台采用用C语言实现语言实现GUI,而后台的分析处理功能完全,而后台的分析处理功能完全
6、由由MATLAB完成,从而缩短完成,从而缩短开发周期。开发周期。 7.2.3 利用ActiveX技术nActiveX是一种支持组件集成的是一种支持组件集成的Microsoft Windows协议。通协议。通过过ActiveX可以将不同应用环境下开发的组件集成到一个应用可以将不同应用环境下开发的组件集成到一个应用环境中。环境中。ActiveX同时也是面向对象技术(同时也是面向对象技术(Object-Oriented)的一种,属于基于组件对象模型(的一种,属于基于组件对象模型(COM)的子类。)的子类。COM为所为所有的有的ActiveX对象定义了对象模型,每个对象定义了对象模型,每个Active
7、X对象支持一对象支持一定的接口,即不同方法、属性和事件。定的接口,即不同方法、属性和事件。n通过通过ActiveX可以在可以在MATLAB和其它软件平台建立客户机服务和其它软件平台建立客户机服务器体系结构,方便彼此交互。当器体系结构,方便彼此交互。当MATLAB控制其它控制其它ActiveX组组件时,件时,MATLAB作为一个作为一个Automation Client;当;当MATLAB被被其它其它ActiveX组件控制时,组件控制时,MATLAB作为一个作为一个Automation Server。换句话说,一方面可以在。换句话说,一方面可以在MATLAB环境下运行其它语环境下运行其它语言开发
8、的言开发的ActiveX组件,一方面其它语言的程序中也可运行组件,一方面其它语言的程序中也可运行MATLAB的的ActiveX服务组件。服务组件。(a) deploytool首界面首界面 (b) MATLAB Compiler界面界面图图 deploytool操作界面操作界面7.2.4 利用mat文件nMATLAB保存文件默认格式为保存文件默认格式为mat格式,格式,它是二进制文件。这种格式方便了不同应它是二进制文件。这种格式方便了不同应用程序间的数据共享。用程序间的数据共享。MATLAB正是通过正是通过mat格式的数据文件与其它程序进行数据交格式的数据文件与其它程序进行数据交互的。例如,我们
9、可以将计算复杂度高、互的。例如,我们可以将计算复杂度高、编程困难的操作交由编程困难的操作交由MATLAB完成,其运完成,其运算结果保存为算结果保存为mat格式的文件,供其它应用格式的文件,供其它应用程序使用。这样,可极大减轻编程负担。程序使用。这样,可极大减轻编程负担。7.2.5 使用mex文件nmex(MATLAB Executable)是)是MATLAB的可执行程序。的可执行程序。在在Microsoft Windows下下mex文件的扩展名为文件的扩展名为DLL。它可。它可以在以在MATLAB下像一般的下像一般的M文件执行。文件执行。mex文件可以通过文件可以通过编译编译C/C+或或FOR
10、TRAN源文件产生。这样,我们就可以源文件产生。这样,我们就可以将一部分工作交给将一部分工作交给C/C+或或FORTRAN完成,只要将其编完成,只要将其编译成译成mex文件,供文件,供MATLAB调用即可。这种方式的优点有:调用即可。这种方式的优点有:n代码重用。可以将以前已有的且成熟的代码重用。可以将以前已有的且成熟的C/C+或或FORTRAN程序,直接编译为程序,直接编译为mex文件供文件供MATLAB调用,调用,而无需将其转化为而无需将其转化为m文件。文件。n提高效率。对于提高效率。对于C/C+或或FORTRAN擅长的算法如循环执擅长的算法如循环执行交由行交由C/C+或或FORTRAN完
11、成并编译为完成并编译为mex文件供文件供MATLAB调用,以提高效率。调用,以提高效率。n扩展功能。通过扩展功能。通过mex文件用户可以调用系统函数或访问硬文件用户可以调用系统函数或访问硬件(如件(如A/D或或D/A等),克服等),克服MATLAB底层操作功能不足。底层操作功能不足。7.2.6 利用MatrixVB实现与Visual Basic的混合编程nMATLAB没有与没有与Visual Basic语言的接口,但语言的接口,但我们可以通过第三方提供的我们可以通过第三方提供的MatrixVB,利用,利用其提供的其提供的COM组件,在组件,在Visual Basic中实现中实现MATLAB的许
12、多功能。的许多功能。nMatrixVB包含了大量与包含了大量与MATLAB相似的函数相似的函数与和调用语法,其函数库按功能大致可分为与和调用语法,其函数库按功能大致可分为8类(矩阵运算、运算符重载、图形图像处理、类(矩阵运算、运算符重载、图形图像处理、最优化处理、多项式、信号处理、随机与统计最优化处理、多项式、信号处理、随机与统计分析、控制系统)。分析、控制系统)。7.2.7 利用MATLAB Builder系列工具nMATLAB提供了提供了MATLAB Builder for Excel,MATLAB Builder for .NET,MATLAB Builder for Java一系列工具
13、。一系列工具。nMATLAB Builder for Excel是是MATLAB专门专门为为Excel提供的生成器工具,它将复杂的提供的生成器工具,它将复杂的MATLAB算法转换为独立的算法转换为独立的Excel加载宏。用加载宏。用户可像使用其它加载宏一样使用户可像使用其它加载宏一样使用MATLAB算算法。法。nMATLAB Builder for .NET目的是让用户可以目的是让用户可以在自己的应用程序中随意使用在自己的应用程序中随意使用MATLAB开发的开发的算法而无需运行或安装算法而无需运行或安装MATLAB软件。软件。MATLAB Builder for .NET,将,将MATLAB函
14、数函数编译成编译成.NET组件,任何符合组件,任何符合CLS(Common Language Specification)的语言如)的语言如VC.NET、VB.NET、C#都可以访问这些组件;也创造能都可以访问这些组件;也创造能够保持够保持MATLAB 灵活性的组件,生成的灵活性的组件,生成的COM对象可由任何兼容对象可由任何兼容COM技术的程序调用,如技术的程序调用,如C+,Visual Basic,ASP等。等。nMATLAB Builder for Java(也称作(也称作Java Builder)作为)作为MATLAB Compiler的扩展,的扩展,可以将可以将MATLAB函数打包成
15、一个函数打包成一个java包。每个包。每个MATLAB函数都成为函数都成为java类的一个方法。这样,类的一个方法。这样,在在Java应用程序中就可调用这些方法。在打包应用程序中就可调用这些方法。在打包时生成的相应支持文件及时生成的相应支持文件及MATLAB Component Runtime(MCR)都包含在其中。都包含在其中。因此,使用这些因此,使用这些java程序的用户无需购买或安程序的用户无需购买或安装装MATLAB。7.3MATLAB Builder for Java应用n本节以本节以MATLAB Builder for Java应用为例讲应用为例讲述。用户如有其它方面的混合编程需求
16、的话,可述。用户如有其它方面的混合编程需求的话,可以参考相应专门的文献。以参考相应专门的文献。n以下示例所用环境为以下示例所用环境为JBuilder 2006和和MATLAB7.4(R2007a)。用户也可以采用其它。用户也可以采用其它JAVA环境。但对环境。但对JDK版本有一定要求,不可太低。版本有一定要求,不可太低。对以下示例的理解需要用户有一定对以下示例的理解需要用户有一定Java语言基础语言基础和面向对象程序设计基础。和面向对象程序设计基础。7.3.1 生成魔方矩阵的演示程序n下面以生成魔方矩阵的示例演示如何使用下面以生成魔方矩阵的示例演示如何使用MATLAB Builder for
17、Java打包打包m文件,如文件,如何在何在Java环境下使用打包文件,完成一定功能。环境下使用打包文件,完成一定功能。n1. MATLAB程序的准备n以下函数用于生成指定大小 的魔方矩阵,程序名为makesqr.m。nfunction y = makesqr(x)n%生成指定大小的魔方矩阵ny = magic(x);n此函数要求用户输入魔方矩阵大小x,生成xx的魔方矩阵。n2. 打包打包M函数,生成函数,生成Java程序程序n这个过程可以使用图形化工具这个过程可以使用图形化工具deploytool (the Deployment Tool GUI),也可在命令窗口使用,也可在命令窗口使用 mc
18、c命令。我们使用方便的图命令。我们使用方便的图形化工具形化工具deploytool 来完成这项工作。来完成这项工作。n(1) 启动启动deploytool工具工具n在命令窗口输入:在命令窗口输入:n deploytooln工具的首页显示了完成整个任务的流程为:创建工程工具的首页显示了完成整个任务的流程为:创建工程添加文件添加文件生成生成Java文件文件打包,如图打包,如图7.2。下面依次进行。下面依次进行。n(2) 新建工程新建工程n选择选择MATLAB Builder for Java项,并在项,并在D:javabuilder_examples目录下创建目录下创建magic_eg.prj工程
19、文工程文件,如图件,如图7.3。图图7.2deploytool工具启动界面工具启动界面 图图7.3 创建创建Java工程的首界面工程的首界面n(3) 给工程文件中添加待打包的给工程文件中添加待打包的.m文件文件n将先前编辑好的将先前编辑好的.m文件添加到类中,同时类名也可以根据需要进行更改,如文件添加到类中,同时类名也可以根据需要进行更改,如图图7.4。(a) 添加添加.m文件和更改类名窗口文件和更改类名窗口 (b) 添加添加.m文件和更改类名后的窗口文件和更改类名后的窗口图图7.4 添加添加.m文件和更改类名文件和更改类名n(4) 编译设置编译设置n如果需要将所有编译信息逐行显示出来,可选如
20、果需要将所有编译信息逐行显示出来,可选Create Verbose Output。此外更重要的一点是要选择编译。此外更重要的一点是要选择编译文件,可在文件,可在SettingsCompiler Options File中输中输入编译文件路径。这里用到入编译文件路径。这里用到javabuilder.jar文件。它文件。它应该在应该在MATLAB安装目录下的安装目录下的toolboxjavabuilderjar中。中。n(5) 执行打包任务执行打包任务n点击(点击(Build the project),执行打包。如果任务成),执行打包。如果任务成功,会有如下信息:功,会有如下信息:nnCopyin
21、g: D:javabuilder_examplesmagic_egsrcmagic_eg.jar - D:javabuilder_examplesmagic_egdistrib nCopying: D:javabuilder_examplesmagic_egsrcmagic_eg.ctf - D:javabuilder_examplesmagic_egdistrib nCompilation completed succesfully. The output is located in D:javabuilder_examplesmagic_egdistrib. nn按照提示,我们可以找到转换
22、后生成的按照提示,我们可以找到转换后生成的Java源文件及打包好的文件。它们源文件及打包好的文件。它们分别存放在分别存放在D:javabuilder_examplesmagic_egsrc和和D:javabuilder_examplesmagic_egdistrib中。而存放在中。而存放在D:javabuilder_examplesmagic_egdistrib下的下的.jar文件即是可分发文件即是可分发的程序。的程序。n以上各步完成了将以上各步完成了将MATLAB程序转化为程序转化为Java程序的任务。将来我们可以在程序的任务。将来我们可以在Java环境下导入这一程序,用来实现生成魔方矩阵的
23、功能。环境下导入这一程序,用来实现生成魔方矩阵的功能。n3. Java环境下调用打包文件环境下调用打包文件n(1) 在JBuilder 2006中创建工程getMagic,并在工程getMagic中新建类GetMagic.java,如图7.5。n(2) 在Required Library中添加必需的.jar文件,如图7.6。这里要用到2个.jar文件,一个是刚才生成的magic_eg.jar,如图7.7,一个是MATLAB安装目录下的toolboxjavabuilderjarjavabuilder.jar,如图7.8所示。图图7.5 创建工程界面创建工程界面 图图7.6 添加必需的添加必需的.
24、jar文件界面文件界面图图7.7 生成魔方矩阵程序的添加生成魔方矩阵程序的添加 图图7.8 javabuilder.jar库文件的添加库文件的添加n(3) 建立建立GetMagic.java程序:程序:n/* 文件名:文件名:GetMagic.java */n/* 在程序中导入必需的包在程序中导入必需的包 */nimport com.mathworks.toolbox.javabuilder.*;nimport magic_eg.*; /注意这里导入的即是用注意这里导入的即是用MATLAB Builder for Java打包生成的打包生成的.jar文件文件n/*n用户输入参数用户输入参数n要
25、求为正整数,程序生成要求为正整数,程序生成n阶的魔方矩阵阶的魔方矩阵n */nclass GetMagicnn public static void main(String args)n n MWNumericArray n = null; /* 存放输入参数存放输入参数 */n Object result = null; /*存放结果存放结果 */n magic theMagic = null; /* 存放存放magic类实例类实例 */n tryn n /* 如没有输入参数,提示错误并退出如没有输入参数,提示错误并退出 */n if (args.length = 0)n n System.
26、out.println(Error: must input a positive integer);n return;n n /* 输入参数转换并打印信息输入参数转换并打印信息*/n n = new MWNumericArray(Double.valueOf(args0),MWClassID.DOUBLE);n n System.out.println(Magic square of order + n.toString();n /* 创建一个创建一个magic实例实例*/n theMagic = new magic();n /* 生成魔方矩阵,并打印出来生成魔方矩阵,并打印出来*/n res
27、ult = theMagic.makesqr(1, n);n System.out.println(result0);n n catch (Exception e)n n System.out.println(Exception: + e.toString();n n finallyn n /* 释放资源释放资源 */n MWArray.disposeArray(n);n MWArray.disposeArray(result);n if (theMagic != null)n theMagic.dispose();n n nn4. 测试运行与分析测试运行与分析n在JBuilder 2006输
28、入运行参数4,得到如下结果。nMagic square of order 4n 16 2 3 13n 5 11 10 8n 9 7 6 12n 4 14 15 1n分析以上程序,Java程序主要完成了输入数据的类型转换和魔方矩阵结果的输出。真正魔方矩阵的生成是由m文件执行的。只不过是这个m文件的功能体现为经MATLAB Builder for Java打包后类中的一个方法theMagic.makesqr(1, n)。7.3.2 输出曲线的演示程序nMATLAB针对数据绘制曲线或图形具有优势。针对数据绘制曲线或图形具有优势。可以利用可以利用MATLAB的这一优势编写曲线或图的这一优势编写曲线或图
29、形的绘制程序,转换并打包后,供其它程序形的绘制程序,转换并打包后,供其它程序调用。调用。n1. MATLAB程序的准备程序的准备ndrawplot.m函数,用于根据输入参数绘制曲函数,用于根据输入参数绘制曲线。线。function drawplot(x,y)plot(x,y)n2. M函数的转换与打包函数的转换与打包n有关打包m文件的过程我们在上个示例中已有介绍,这里不再重复。需要注意的是在打包前应选定编译器(在Settiing项中设置,如图7.9)。添加.m文件后如图7.10。图图7.9 设置编译文件窗口设置编译文件窗口 图图7.10 添加添加.m文件的窗口文件的窗口n我们选我们选MATLA
30、B2007atoolboxjavabuilderjarjavabuilder.jar为编译器。另外,如果需要将编译信息全部打为编译器。另外,如果需要将编译信息全部打印出来的话,选择印出来的话,选择Generate Verbose Output。从以。从以下信息可以看到,编译是成功的并且可知打包文件的具下信息可以看到,编译是成功的并且可知打包文件的具体位置。体位置。nnCopying: D:javabuilder_examplesm_drawplotsrcm_drawplot.jarn - D:javabuilder_examplesm_drawplotdistrib nCopying: D:j
31、avabuilder_examplesm_drawplotsrcm_drawplot.ctfn- D:javabuilder_examplesm_drawplotdistrib nCompilation completed succesfully. nThe output is located in D:javabuilder_examplesm_drawplotdistrib. nn3. Java环境下调用打包文件环境下调用打包文件n编辑如下程序,使用MATLAB的绘图功能完成图形绘制。ncreateplot.java程序n/*导入包 */nimport com.mathworks.toolbox.javabuilder.*;nimport m_drawplot.*;nclass createplot n public static void main(String args) n MWNumericArray x = null; /* Array
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CIIA 029-2022海洋科学数据共享安全管理要求
- T/CI 364-2024软土长条形基坑变形施工控制规范
- T/CEPPEA 5016-2023电动自行车充电设施设计技术导则
- T/CEMIA 021-2019厚膜集成电路用电阻浆料规范
- T/CECS 10195-2022健康建筑产品评价通则
- T/CCMA 0102-2020工程机械行业基于Handle的供应链的信息交互接口技术要求
- T/CCIAS 020-2023四川风味豆瓣酱
- T/CCAS 013.2-2020水泥企业润滑管理第2部分:水泥企业闭式齿轮油的使用规范
- T/CARD 038.2-2023辅助器具互联网基本公共服务平台第2部分:服务指南
- T/CAPE 11005-2023光伏电站光伏组件清洗技术规范
- 医疗收费收据样式(医院基层)
- 2024年北京市中考物理模拟卷(一)
- MOOC 金融法学-浙江财经大学 中国大学慕课答案
- 浙江省杭州市上城区2022-2023学年六年级下学期期末语文试题
- MOOC 从china到China:中国陶瓷文化三十讲-景德镇陶瓷大学 中国大学慕课答案
- 安徽省芜湖市2022-2023学年高一上学期期末教学质量统测物理试题 含解析
- 崇尚科学拒绝宗教
- 年产5万吨丁苯橡胶的工艺设计样本
- 手术室预防坠床课件
- 人力资源管理公司经营分析报告
- 《复兴号动车组》课件
评论
0/150
提交评论