第7章MATLAB的混合编程初步方案

PPT
  • 阅读 112 次
  • 下载 0 次
  • 页数 42 页
  • 大小 640.005 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档20.00 元 加入VIP免费下载
此文档由【我爱分享】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第7章MATLAB的混合编程初步方案
可在后台配置第一页与第二页中间广告代码
第7章MATLAB的混合编程初步方案
可在后台配置第二页与第三页中间广告代码
第7章MATLAB的混合编程初步方案
可在后台配置第三页与第四页中间广告代码
第7章MATLAB的混合编程初步方案
第7章MATLAB的混合编程初步方案
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 42
  • 收藏
  • 违规举报
  • © 版权认领
下载文档20.00 元 加入VIP免费下载
文本内容

【文档说明】第7章MATLAB的混合编程初步方案.ppt,共(42)页,640.005 KB,由我爱分享上传

转载请保留链接:https://www.ichengzhen.cn/view-45475.html

以下为本文档部分文字说明:

MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答MATLAB与控制系统仿真实践第7章MATLAB的混合编程初步MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答第7章MA

TLAB的混合编程初步◼7.1MATLAB的混合编程形式简述◼7.2常用MATLAB混合编程方法◼7.2.1使用MATLAB的MATLABCompiler◼7.2.2利用MATLAB引擎(MATLABE

ngine)◼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++程序,也可生成适于MicrosoftWin

dows的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协议。通过Acti

veX可以将不同应用环境下开发的组件集成到一个应用环境中。ActiveX同时也是面向对象技术(Object-Oriented)的一种,属于基于组件对象模型(COM)的子类。COM为所有的ActiveX对象定义了对象模型

,每个ActiveX对象支持一定的接口,即不同方法、属性和事件。◼通过ActiveX可以在MATLAB和其它软件平台建立客户机服务器体系结构,方便彼此交互。当MATLAB控制其它ActiveX组件时,MATLAB作为一个AutomationClient;当MA

TLAB被其它ActiveX组件控制时,MATLAB作为一个AutomationServer。换句话说,一方面可以在MATLAB环境下运行其它语言开发的ActiveX组件,一方面其它语言的程序中也可运行MATLAB的Activ

eX服务组件。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(MAT

LABExecutable)是MATLAB的可执行程序。在MicrosoftWindows下mex文件的扩展名为DLL。它可以在MATLAB下像一般的M文件执行。mex文件可以通过编译C/C++或FORTRAN源文件产生。这样,我们就可以将一部

分工作交给C/C++或FORTRAN完成,只要将其编译成mex文件,供MATLAB调用即可。这种方式的优点有:◼代码重用。可以将以前已有的且成熟的C/C++或FORTRAN程序,直接编译为mex文件供MATLAB调用,而无需将其转化为m文件。◼提高效率。对于C/C++或FORTR

AN擅长的算法如循环执行交由C/C++或FORTRAN完成并编译为mex文件供MATLAB调用,以提高效率。◼扩展功能。通过mex文件用户可以调用系统函数或访问硬件(如A/D或D/A等),克服MATLAB底层操作功能不足。MATLAB与控制

系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答7.2.6利用MatrixVB实现与VisualBasic的混合编程◼MATLAB没有与VisualBasic语言的接口,但我们可以通过第三方提供的MatrixVB,利用其提供的CO

M组件,在VisualBasic中实现MATLAB的许多功能。◼MatrixVB包含了大量与MATLAB相似的函数与和调用语法,其函数库按功能大致可分为8类(矩阵运算、运算符重载、图形图像处理、最优化处理、多项式、信号处理、随机与统计分析、控制系统)。

MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答7.2.7利用MATLABBuilder系列工具◼MATLAB提供了MATLABBuilderforExcel,MATLABBuilde

rfor.NET,MATLABBuilderforJava一系列工具。◼MATLABBuilderforExcel是MATLAB专门为Excel提供的生成器工具,它将复杂的MATLAB算法转换为独立的Excel加载宏。用户可像使用其它加载宏一样使用MATLAB算法。MATLAB与控制系统仿真实

践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼MATLABBuilderfor.NET目的是让用户可以在自己的应用程序中随意使用MATLAB开发的算法而无需运行或安装MATLAB软件。MATLA

BBuilderfor.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.3MATLABBuilderfor

Java应用◼本节以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)新建工程◼选择MATLABBuilderforJ

ava项,并在D:\javabuilder_examples目录下创建magic_eg.prj工程文件,如图7.3。MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答图7.2deploytool工具启动界面图7.3创建Jav

a工程的首界面MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼(3)给工程文件中添加待打包的.m文件◼将先前编辑好的.m文件添加到类中,同时类名也可以根据需要进行更改,如图7.4。(a)添加.m文件和更改类名窗口(b)添加.m文件和更改类名后

的窗口图7.4添加.m文件和更改类名MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼(4)编译设置◼如果需要将所有编译信息逐行显示出来,可选CreateVerboseOutput。此外更重要的一点是要选择编译文件,可在Settin

gs>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\distrib◼Copying:D:\javabuilder_examples\magic_eg\src\magic_eg.ctf->D:\javabuil

der_examples\magic_eg\distrib◼Compilationcompletedsuccesfully.TheoutputislocatedinD:\javabuilder_examples\magic_eg\distrib.◼…◼按照提示,我们可以找到转换后生

成的Java源文件及打包好的文件。它们分别存放在D:\javabuilder_examples\magic_eg\src和D:\javabuilder_examples\magic_eg\distrib中。而存放在D:\javabuilder_examples\magic_eg\dis

trib下的.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.l

ength==0)◼{◼System.out.println("Error:mustinputapositiveinteger");◼return;◼}◼/*输入参数转换并打印信息*/◼n=newMWNumericArray(D

ouble.valueOf(args[0]),MWClassID.DOUBLE);◼MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼System.out.println("Magicsq

uareoforder"+n.toString());◼/*创建一个magic实例*/◼theMagic=newmagic();◼/*生成魔方矩阵,并打印出来*/◼result=theMagic.makesqr(1,n);◼System.out.println(result[0]);◼}◼ca

tch(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,得到如下结果。◼Magicsq

uareoforder4◼162313◼511108◼97612◼414151◼分析以上程序,Java程序主要完成了输入数据的类型转换和魔方矩阵结果的输出。真正魔方矩阵的生成是由m文件执行的。只不过是这个m文件的

功能体现为经MATLABBuilderforJava打包后类中的一个方法theMagic.makesqr(1,n)。MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答7.3.2输出曲线的演示程序◼MATLAB

针对数据绘制曲线或图形具有优势。可以利用MATLAB的这一优势编写曲线或图形的绘制程序,转换并打包后,供其它程序调用。◼1.MATLAB程序的准备◼drawplot.m函数,用于根据输入参数绘制曲线。functiondrawplo

t(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为编译器。另外,如果需要将编译信息全部打印出来的话,选择Genera

teVerboseOutput。从以下信息可以看到,编译是成功的并且可知打包文件的具体位置。◼…◼Copying:D:\javabuilder_examples\m_drawplot\src\m_drawplot.jar◼->D:\javabuild

er_examples\m_drawplot\distrib◼Copying:D:\javabuilder_examples\m_drawplot\src\m_drawplot.ctf◼->D:\javabuilder_examples\m_drawplot\d

istrib◼Compilationcompletedsuccesfully.◼TheoutputislocatedinD:\javabuilder_examples\m_drawplot\distrib.◼…MATLAB与控制系统仿真实践

,北京航空航天大学出版社,2009.8.在线交流,有问必答◼3.Java环境下调用打包文件◼编辑如下程序,使用MATLAB的绘图功能完成图形绘制。◼createplot.java程序◼/*导入包*/◼importcom.

mathworks.toolbox.javabuilder.*;◼importm_drawplot.*;◼classcreateplot{◼publicstaticvoidmain(String[]args){◼MWN

umericArrayx=null;/*Arrayofxvalues*/◼MWNumericArrayy=null;/*Arrayofyvalues*/◼m_drawplotthePlot=null;/*生成新的绘图实例*/◼intn=100

;/*指定绘制曲线点数*/MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼try{◼/*为x和y分配空间*/◼int[]dims={◼1,n};◼x=MWNumericArr

ay.newInstance(dims,MWClassID.DOUBLE,MWComplexity.REAL);◼y=MWNumericArray.newInstance(dims,MWClassID.DOUBLE,M

WComplexity.REAL);◼/*设定值,使y=sin(x)*/◼for(inti=1;i<=n;i++){◼x.set(i,0.1*i);◼y.set(i,java.lang.Math.sin(0.1*i));//java.lang.Math.sin(0.01

*i)◼}◼/*创建绘图对象*/◼thePlot=newm_drawplot();◼/*图形绘制*/MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼thePlot.drawplot(x,y);◼thePlot.w

aitForFigures();//保留显示图形◼}◼catch(Exceptione){◼System.out.println("Exception:"+e.toString());◼}◼finally{◼/*释放资源*/◼MWArra

y.disposeArray(x);◼MWArray.disposeArray(y);◼if(thePlot!=null){◼thePlot.dispose();◼}◼}◼}◼}MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.

在线交流,有问必答◼4.测试运行与分析◼在JBuilder2006下运行结果如图7.11。图7.11程序运行结果MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答◼分析以上java程序,它的工作主要是设置绘图所需的数

据和显示结果。真正的绘图任务由m文件完成,表现为打包后的.jar文件。这样将MATLAB强大的绘图功能引入到Java环境中,使原本在Java环境下难于实现的功能变得十分容易。人有了知识,就会具备各种分析能力,明辨是非的能力。所以我

们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操

,给我们巨大的精神力量,鼓舞我们前进。

我爱分享
我爱分享
分享文档,知识给梦想插上翅膀
  • 文档 1229
  • 被下载 2
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?