[计算机软件及应用]matlab5_程序设计.ppt_第1页
[计算机软件及应用]matlab5_程序设计.ppt_第2页
[计算机软件及应用]matlab5_程序设计.ppt_第3页
[计算机软件及应用]matlab5_程序设计.ppt_第4页
[计算机软件及应用]matlab5_程序设计.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

2019/4/20,1,第五讲 Matlab程序设计(2),通信与信息工程学院 20122013学年冬季学期,2019/4/20,2,MATLAB作为一种高级语言,它不仅能以一种人机交互式的命令行的方式工作,还可以像BASIC、FORTRAN、C等其他高级计算机语言一样进行控制流的程序设计,即编制一种以 . m为扩展名的MATLAB程序(简称M文件)。,3,Matlab语言的开放性: Matlab适应各学科、专业研究的需要,提供了各种专业的工具箱。 Matlab为实现与外部应用程序的“无缝”结合,提供了专门的应用程序接口API。,七、应用程序接口API,2019/4/20,4,Matlab外部接口主要包括: MEX文件,外部程序调用接口; MAT文件,应用程序,数据输入输出接口; Matlab计算引擎函数库; Matlab与其它开发平台的接口,Visual C+、Visual Basic、Delphi、Powerpoint等等。,2019/4/20,5,MEX文件可应用于以下场合: 已经存在的较大规模的C或Fortran程序可以比较容易的在matlab中加以调用,而无需重写成M文件。 在matlab中运行不很有效的计算瓶颈(一般出现在不可避免的循环时),可以用C或Fortran重新编写后构成MEX文件解决。 直接面向硬件编写的C或Fortran程序可以通过MEX被matlab调用。,1、MEX文件,2019/4/20,6,MEX文件是一种可在matlab中调用的C或Fortran语言的衍生程序, MEX文件的源码文件是由C或Fortran语言编写的。 MEX文件经matlab编译器处理而生成二进制文件,可以被matlab解释器自动装载并执行的动态链接程序。这种文件在windows操作系统中使用后缀*.DLL。 MEX文件使用极为方便,其调用方式与matlab内建函数完全相同,在命令窗口键入MEX 文件名。 MEX文件的执行优先级高于M文件。,MEX文件,2019/4/20,7,MEX文件的编译,系统配置完成后,就可以使用命令对文件进行编译了。 MEX filenames 同时Matlab系统为mex提供了参数,通过该命令参数可以让用户使用不同的选项文件对源文件进行编译,命令格式如下: Mex options filenames 使用help mex查看。,2019/4/20,8,help mex MEX Compile MEX-function. MEX option1 . optionN sourcefile1 . sourcefileN objectfile1 . objectfileN libraryfile1 . libraryfileN Description: MEX compiles and links source files into a shared library called a MEX-file, executable from within MATLAB. The resulting file has a platform-dependent extension, as shown in the table below: solaris - .mexsol hpux - .mexhpux glnx86 - .mexglx glnxi64 - .mexi64 Mac OS X - .mexmac Windows - .dll,2019/4/20,9,2、C MEX文件源程序的构成,一般形式的C源码程序不能直接被编译成在matlab中可以调用的MEX文件,只有按约定格式编写的C源码文件才能转化为有效的MEX文件。 C语言MEX文件必须以#include “mex.h”为起首。 C语言MEX文件一般有如下两个相对独立的子程序组成:“计算子程序”用于完成所需的计算;“接口子程序”是计算子程序和matlab空间的接口,用于两个不同内存空间的通信。 “计算子程序”和“接口子程序”相对独立,它们可以分成两个程序,也可以共写在同一个程序中。,2019/4/20,10,列出具有实现两个双精度实数标量加法的C+ MEX源码程序;对C+ MEX源码程序进行编译链接;在MATLAB中调用生成的DLL文件。 “计算子程序” #include “mex.h“ void myplus(double y,double x,double z) y0=x0+z0; ,2019/4/20,11,“接口子程序” void mexFunction(int nlhs,mxArray *plhs, int nrhs,const mxArray *prhs) double *x,*y,*z; int mrows0,ncols0; int mrows1,ncols1; ,2019/4/20,12,mex exm.cpp a=0.111;b=0.222; c=exm(a,b) c = 0.3330,2019/4/20,13,3、matlab引擎技术,Matlab引擎库函数可使用户在自编的应用程序中方便地实现对matlab的调用。 用户自编的界面运行在前台,而matlab作为计算引擎运行在后台。 引擎函数本身用C或Fortran编写。 Matlab在其它语言编制的程序中被当作数学库程序调用,充分利用matlab指令简单、计算可靠的优点,大大节省用户的开发时间。,2019/4/20,14,用C语言编写调用MATLAB引擎计算三次多项式根的源程序。 #include “engine.h“ int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) Engine *ep; mxArray *P=NULL,*r=NULL; char buffer301; double poly4=1,0,-2,5; if (!(ep=engOpen(NULL) fprintf(stderr,“nCant start MATLAB enginen“); return EXIT_FAILURE; ,2019/4/20,15,mex -f D:MATLAB6p5binwin32mexoptsmsvc60engmatopts.bat exm.c 编译exm.c生成可执行文件exm.exe。,2019/4/20,16,4、Matlab中ActiveX技术,ActiveX技术是各种面向对象技术的集合。借助ActiveX技术,开发商和终端用户就能把来自不同商家的ActiveX组建无缝地集成在自己的应用程序中,从而完成特定的目的。避免低水平的重复开发。 Matlab支持两种ActiveX技术: ActiveX控件封装集成和ActiveX自动化。 ActiveX控件是指那些可视、可编程的集成于ActiveX容器的应用组件。最常见有Internet Explorer和Web Browser Control。,2019/4/20,17,ActiveX自动化使matlab能施控和受控于其它组件。当matlab受控于其它组件时,表现为自动化服务器。当matlab控制其它组件时,表现为自动化客户。 matlab自动化服务器的功能包括:在matlab空间中执行命令;与matlab空间直接交换数据。 matlab自动化客户的功能仅是matlab ActiveX控件封装集成功能的子集。,2019/4/20,18,2019/4/20,19,2019/4/20,20,2019/4/20,21,2019/4/20,22,八、M文件调试,编写M文件时,错误在所难免。错误一般有两种:语法错误和运行错误。 语法错误是指变量名、函数名等的误写,标点符号的缺漏等。对于这类错误matlab能在运行时立即发现,终止执行,并给出相应的错误原因以及所在行号。 运行错误是算法本身引起的,相对语法错误而言运行错误较难处理。,2019/4/20,23,1、运行错误来源于算法模型与期望目标是否一致,程序模型是否与算法一致,涉及用户对期望目标原理的理解、对算法的理解,还涉及用户对matlab指令的理解,对程序流的理解,对matlab工作机理的理解。 2、运行错误的表现形态较多,程序正常运行,但结果错误;程序不能正常运行而中断等。 3、运行错误是动态错误。尤其是M函数文件,它一旦运行停止,其中间变量将被删除一空,错误查找很难着手。,运行错误难处理的原因在于:,2019/4/20,24,1、直接调试,将重点怀疑语句行、指令行后的分号删除或改为逗号,使计算机结果显示于屏幕。 在适当的位置,添加显示某些关键变量值的语句。 利用echo命令,使运行时在屏幕上逐行显示文件内容。 在程序的适当位置增添keyboard指令。当运行至keyboard指令时将暂停执行文件,并命令窗口出现K提示符。在K提示符后键入return命令,结束查看,原文件继续执行。,2019/4/20,25,2、调试器的使用,Matlab不仅向用户提供了专门的指令调试工具,而且还提供了使用更为简便的图形调试器。 它与M文件编辑器集成为一体。,2019/4/20,26,图形式调试器,2019/4/20,27,3、程序性能优化,Matlab主要的缺点是运行速度慢。 Matlab6.5开始启用JIT(just in time)和加速器(accelerator)。 程序优化包括两个步骤:找出耗时最多的程序瓶颈;用更好的程序取代瓶颈程序。,2019/4/20,28,提高matlab运行速度的有效措施,循环向量化。尽量减少使用for(while),代之以向量化的数组运算。如: 尽可能采用matlab提供的函数指令。,k=0; for t=0:pi/20:2*pi; k=k+1; y(k)=cos(t); end,t=0:pi/20:2*pi; y=cos(t);,2019/4/20,29,循环内数组的预配置。尽量避免数组在循环中的不断动态配置。 采用MEX文件执行循环。在循环不可避免又特别费时的情况下,建议用户把该循环采用非解释执行的MEX文件表达。 尽量采用M函数文件替代M命令文件。每次运行命令文件都必须把程序装入内存,然后逐句解释执行,十分费时。函数文件一旦被运行就驻留在内存中,因此较省时。 尽量使用save和load命令实施数据的保存和获取。当数据交换既能采用save和load命令,又能采用I/O函数实现,应尽可能使用save和load命令。,提高matlab运行速度的有效措施,2019/4/20,30,九、图形用户界面制作(GUI),用户界面(graphical user interface)指人与计算机之间交互作用的工具或方法。 图形用户界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一定的方法选择激活这些图形对象,使计算机实现特定功能。 Matlab设计的演示程序demo是使用图形界面的最好范例。,2019/4/20,31,1、GUI设计原则,简单性simplicity 一致性consistency 习常性familiarity,2019/4/20,32,2、GUI设计步骤,明确设计任务,分析主要功能, 绘制书面草图。 上机制作静态界面。 编写程序。,2019/4/20,33,3、M文件制作图形用户界面,2019/4/20,34,str=fontname隶书 归一化二阶系统的阶跃响应曲线; text(0.12,0.93,str,fontsize,13); h_fig=get(H,parent); set(h_fig,unit,normalized,position,. 0.1,0.2,0.7,0.4); h_axes=axes(parent,h_fig,unit,. normalized,position,0.1,0.15,0.55,0.7,. xlim,0 1.5,ylim,0 1.8,fontsize,8);,2019/4/20,35,h_text=uicontrol(h_fig,style,text,. unit,normalized,position,. 0.67,0.73,0.25,0.14,horizontal,. left,string,输入阻尼系数,z=); h_edit=uicontrol(h_fig,style,edit,. unit,normalized,position,. 0.67,0.59,0.25,0.14,horizontal,left,. callback,z=str2num(get(gcbo,“string“);,. t=0:0.1:15;,. for k=1:length(z);,. y(:,k)=step(1,1 2*z(k) 1,t);,. plot(t,y(:,k);,. if length(z)1,hold on,end,. end;,. hold off,);,2019/4/20,36,h_push1=uicontrol(h_fig,style,push,. unit,normalized,position,. 0.67,0.37,0.12,0.15,string,. grid on,callback,grid on); h_push2=uicontrol(h_fig,style,push,. unit,normalized,position,. 0.67,0.15,0.12,0.15,string,. grid off,callback,grid off);,2019/4/20,37,界面菜单,H_fig=figure,2019/4/20,38,菜单的隐去和显示,隐去菜单 set(H_fig,MenuBar,none);,显示菜单 set(gcf,MenuBar,figure);,2019/4/20,39,添加用户菜单,h_menu=uimenu(gcf,label,color);,2019/4/20,40,制作下拉菜单,h_submenu1=uimenu(h_menu,label,Blue,. callback,set(gcf,Color,blue); h_submenu2=uimenu(h_menu,label,Red,. ca

温馨提示

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

评论

0/150

提交评论