matlab5_程序设计(2)_第1页
matlab5_程序设计(2)_第2页
matlab5_程序设计(2)_第3页
matlab5_程序设计(2)_第4页
matlab5_程序设计(2)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、2021-11-191第五讲第五讲 Matlab程序设计(程序设计(2)通信与信息工程学院通信与信息工程学院20122013学年冬季学期学年冬季学期2021-11-192 MATLAB作为一种高级语言,它不仅能以一作为一种高级语言,它不仅能以一种人机交互式的命令行的方式工作,还可以种人机交互式的命令行的方式工作,还可以像像BASIC、FORTRAN、C等其他高级计算等其他高级计算机语言一样进行控制流的程序设计,即编制机语言一样进行控制流的程序设计,即编制一种以一种以 . m为扩展名的为扩展名的MATLAB程序(简称程序(简称M文件)。文件)。 2021-11-193Matlab语言的开放性:语

2、言的开放性:nMatlab适应各学科、专业研究的需要,提供了各种专业适应各学科、专业研究的需要,提供了各种专业的工具箱。的工具箱。nMatlab为实现与外部应用程序的为实现与外部应用程序的“无缝无缝”结合,提供了结合,提供了专门的应用程序接口专门的应用程序接口API。七、应用程序接口七、应用程序接口API 2021-11-194Matlab外部接口主要包括:外部接口主要包括:nMEX文件,外部程序调用接口;文件,外部程序调用接口;nMAT文件,应用程序,数据输入输出接口;文件,应用程序,数据输入输出接口;nMatlab计算引擎函数库;计算引擎函数库;nMatlab与其它开发平台的接口,与其它开

3、发平台的接口,Visual C+、Visual Basic、Delphi、Powerpoint等等。等等。2021-11-195MEX文件可应用于以下场合:文件可应用于以下场合:n已经存在的较大规模的已经存在的较大规模的C或或Fortran程序可以比较容易的程序可以比较容易的在在matlab中加以调用,而无需重写成中加以调用,而无需重写成M文件。文件。n在在matlab中运行不很有效的计算瓶颈(一般出现在不可中运行不很有效的计算瓶颈(一般出现在不可避免的循环时),可以用避免的循环时),可以用C或或Fortran重新编写后构成重新编写后构成MEX文件解决。文件解决。n直接面向硬件编写的直接面向硬

4、件编写的C或或Fortran程序可以通过程序可以通过MEX被被matlab调用。调用。1、MEX文件文件2021-11-196nMEX文件是一种可在文件是一种可在matlab中调用的中调用的C或或Fortran语语言的衍生程序,言的衍生程序, MEX文件的源码文件是由文件的源码文件是由C或或Fortran语言编写的。语言编写的。nMEX文件经文件经matlab编译器处理而生成二进制文件,可编译器处理而生成二进制文件,可以被以被matlab解释器自动装载并执行的动态链接程序。解释器自动装载并执行的动态链接程序。这种文件在这种文件在windows操作系统中使用后缀操作系统中使用后缀*.DLL。nM

5、EX文件使用极为方便,其调用方式与文件使用极为方便,其调用方式与matlab内建函内建函数完全相同,在命令窗口键入数完全相同,在命令窗口键入MEX 文件名。文件名。nMEX文件的执行优先级高于文件的执行优先级高于M文件。文件。MEX文件文件2021-11-197MEX文件的编译文件的编译n系统配置完成后,就可以使用命令对文件进行编译了。系统配置完成后,就可以使用命令对文件进行编译了。 MEX filenamesn同时同时Matlab系统为系统为mex提供了参数,通过该命令参数提供了参数,通过该命令参数可以让用户使用不同的选项文件对源文件进行编译,命可以让用户使用不同的选项文件对源文件进行编译,

6、命令格式如下:令格式如下: Mex options filenamesn使用使用help mex查看。查看。2021-11-198help 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, executab

7、le 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 - .dll2021-11-1992、C MEX文件源程序的构成文件源程序的构成n一般形式的一般形式的C源码程序不能直接被编译成在源码程序不能直接被编译成在matlab中可中可以调用的以调用的M

8、EX文件,只有按约定格式编写的文件,只有按约定格式编写的C源码文件源码文件才能转化为有效的才能转化为有效的MEX文件。文件。nC语言语言MEX文件必须以文件必须以#include “mex.h”为起首。为起首。nC语言语言MEX文件一般有如下两个相对独立的子程序组成:文件一般有如下两个相对独立的子程序组成:“计算子程序计算子程序”用于完成所需的计算;用于完成所需的计算;“接口子程序接口子程序”是计算子程序和是计算子程序和matlab空间的接口,用于两个不同内空间的接口,用于两个不同内存空间的通信。存空间的通信。n“计算子程序计算子程序”和和“接口子程序接口子程序”相对独立,它们可以相对独立,它

9、们可以分成两个程序,也可以共写在同一个程序中。分成两个程序,也可以共写在同一个程序中。 2021-11-1910n列出具有实现两个双精度实数标量加法的列出具有实现两个双精度实数标量加法的C+ MEX源码程序;对源码程序;对C+ MEX源码程序进行编译链接;在源码程序进行编译链接;在MATLAB中调用生成的中调用生成的DLL文件。文件。 “计算子程序计算子程序”#include mex.hvoid myplus(double y,double x,double z)y0=x0+z0; 2021-11-1911“接口子程序接口子程序”void mexFunction(int nlhs,mxArra

10、y *plhs, int nrhs,const mxArray *prhs)double *x,*y,*z;int mrows0,ncols0;int mrows1,ncols1; 2021-11-1912mex exm.cppmex exm.cpp a=0.111;b=0.222;a=0.111;b=0.222;c=exm(a,bc=exm(a,b) ) c = 0.3330 2021-11-19133、matlab引擎技术引擎技术nMatlab引擎库函数可使用户在自编的应用程序引擎库函数可使用户在自编的应用程序中方便地实现对中方便地实现对matlab的调用。的调用。n用户自编的界面运行在前

11、台,而用户自编的界面运行在前台,而matlab作为计作为计算引擎运行在后台。算引擎运行在后台。n引擎函数本身用引擎函数本身用C或或Fortran编写。编写。nMatlab在其它语言编制的程序中被当作数学库在其它语言编制的程序中被当作数学库程序调用,充分利用程序调用,充分利用matlab指令简单、计算可指令简单、计算可靠的优点,大大节省用户的开发时间。靠的优点,大大节省用户的开发时间。2021-11-1914 用用C语言编写调用语言编写调用MATLAB引擎计算三次多项引擎计算三次多项式根的源程序。式根的源程序。 #include engine.h int PASCAL WinMain (HAND

12、LE 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;2021-11-1915mex -f D:MATLAB6p5binwin32mexoptsmsvc60engmatopts.bat exm.cmex

13、 -f D:MATLAB6p5binwin32mexoptsmsvc60engmatopts.bat exm.c 编译编译exm.c生成可执行文件生成可执行文件exm.exe。2021-11-19164、Matlab中中ActiveX技术技术nActiveX技术是各种面向对象技术的集合。借助技术是各种面向对象技术的集合。借助ActiveX技术,开发商和终端用户就能把来自不同商家技术,开发商和终端用户就能把来自不同商家的的ActiveX组建无缝地集成在自己的应用程序中,从而组建无缝地集成在自己的应用程序中,从而完成特定的目的。避免低水平的重复开发。完成特定的目的。避免低水平的重复开发。nMatl

14、ab支持两种支持两种ActiveX技术:技术: ActiveX控件封装集控件封装集成和成和ActiveX自动化。自动化。nActiveX控件是指那些可视、可编程的集成于控件是指那些可视、可编程的集成于ActiveX容器的应用组件。最常见有容器的应用组件。最常见有Internet Explorer和和Web Browser Control。2021-11-1917nActiveX自动化使自动化使matlab能施控和受控于其它组件。能施控和受控于其它组件。当当matlab受控于其它组件时,表现为自动化服务器。受控于其它组件时,表现为自动化服务器。当当matlab控制其它组件时,表现为自动化客户。控

15、制其它组件时,表现为自动化客户。nmatlab自动化服务器的功能包括:在自动化服务器的功能包括:在matlab空间中执空间中执行命令;与行命令;与matlab空间直接交换数据。空间直接交换数据。nmatlab自动化客户的功能仅是自动化客户的功能仅是matlab ActiveX控件控件封装集成功能的子集。封装集成功能的子集。2021-11-19182021-11-19192021-11-19202021-11-19212021-11-1922八、八、M文件调试文件调试n编写编写M文件时,错误在所难免。错误一般有两种:文件时,错误在所难免。错误一般有两种:语法错误和运行错误。语法错误和运行错误。n

16、语法错误是指变量名、函数名等的误写,标点符语法错误是指变量名、函数名等的误写,标点符号的缺漏等。对于这类错误号的缺漏等。对于这类错误matlab能在运行时能在运行时立即发现,终止执行,并给出相应的错误原因以立即发现,终止执行,并给出相应的错误原因以及所在行号。及所在行号。n运行错误是算法本身引起的,相对语法错误而言运行错误是算法本身引起的,相对语法错误而言运行错误较难处理。运行错误较难处理。2021-11-1923 1、运行错误来源于算法模型与期望目标是否一致,程、运行错误来源于算法模型与期望目标是否一致,程序模型是否与算法一致,涉及用户对期望目标原理序模型是否与算法一致,涉及用户对期望目标原

17、理的理解、对算法的理解,还涉及用户对的理解、对算法的理解,还涉及用户对matlab指指令的理解,对程序流的理解,对令的理解,对程序流的理解,对matlab工作机理工作机理的理解。的理解。2、运行错误的表现形态较多,程序正常运行,但结果、运行错误的表现形态较多,程序正常运行,但结果错误;程序不能正常运行而中断等。错误;程序不能正常运行而中断等。3、运行错误是动态错误。尤其是、运行错误是动态错误。尤其是M函数文件,它一旦函数文件,它一旦运行停止,其中间变量将被删除一空,错误查找很运行停止,其中间变量将被删除一空,错误查找很难着手。难着手。运行错误难处理的原因在于:运行错误难处理的原因在于:2021

18、-11-19241、直接调试、直接调试n将重点怀疑语句行、指令行后的分号删除或改为将重点怀疑语句行、指令行后的分号删除或改为逗号逗号,使计算机结果显示于屏幕。,使计算机结果显示于屏幕。n在适当的位置,添加在适当的位置,添加显示某些关键变量值的语句显示某些关键变量值的语句。n利用利用echo命令,使运行时在屏幕上逐行显示文命令,使运行时在屏幕上逐行显示文件内容。件内容。n在程序的适当位置增添在程序的适当位置增添keyboard指令。当运行指令。当运行至至keyboard指令时将暂停执行文件,并命令窗指令时将暂停执行文件,并命令窗口出现口出现K提示符。在提示符。在K提示符后键入提示符后键入retu

19、rn命令,结束查看,原文件继续执行。命令,结束查看,原文件继续执行。2021-11-19252、调试器的使用、调试器的使用nMatlab不仅向用户提供了专门的指令调试工具,不仅向用户提供了专门的指令调试工具,而且还提供了使用更为简便的图形调试器。而且还提供了使用更为简便的图形调试器。n它与它与M文件编辑器集成为一体。文件编辑器集成为一体。2021-11-1926图形式调试器图形式调试器2021-11-19273、程序性能优化、程序性能优化nMatlab主要的缺点是运行速度慢。主要的缺点是运行速度慢。nMatlab6.5开始启用开始启用JIT(just in time)和)和加速器(加速器(ac

20、celerator)。)。n程序优化包括两个步骤:找出耗时最多的程序瓶程序优化包括两个步骤:找出耗时最多的程序瓶颈;用更好的程序取代瓶颈程序。颈;用更好的程序取代瓶颈程序。2021-11-1928提高提高matlab运行速度的有效措施运行速度的有效措施n循环向量化。尽量减少使用循环向量化。尽量减少使用for(while),代之以向量),代之以向量化的数组运算。如:化的数组运算。如:n尽可能采用尽可能采用matlab提供的函数指令。提供的函数指令。k=0;for t=0:pi/20:2*pi;k=k+1;y(k)=cos(t);endt=0:pi/20:2*pi;y=cos(t);2021-11

21、-1929n循环内数组的预配置。尽量避免数组在循环中的不断动循环内数组的预配置。尽量避免数组在循环中的不断动态配置。态配置。n采用采用MEX文件执行循环。在循环不可避免又特别费时的文件执行循环。在循环不可避免又特别费时的情况下,建议用户把该循环采用非解释执行的情况下,建议用户把该循环采用非解释执行的MEX文件文件表达。表达。n尽量采用尽量采用M函数文件替代函数文件替代M命令文件。每次运行命令文命令文件。每次运行命令文件都必须把程序装入内存,然后逐句解释执行,十分费件都必须把程序装入内存,然后逐句解释执行,十分费时。函数文件一旦被运行就驻留在内存中,因此较省时。时。函数文件一旦被运行就驻留在内存

22、中,因此较省时。n尽量使用尽量使用save和和load命令实施数据的保存和获取。当命令实施数据的保存和获取。当数据交换既能采用数据交换既能采用save和和load命令,又能采用命令,又能采用I/O函函数实现,应尽可能使用数实现,应尽可能使用save和和load命令。命令。提高提高matlab运行速度的有效措施运行速度的有效措施2021-11-1930九、图形用户界面制作九、图形用户界面制作(GUI)n用户界面用户界面(graphical user interface)指人指人与计算机之间交互作用的工具或方法。与计算机之间交互作用的工具或方法。n图形用户界面是由窗口、光标、按键、菜单、文图形用户

23、界面是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。用户通过一字说明等对象构成的一个用户界面。用户通过一定的方法选择激活这些图形对象,使计算机实现定的方法选择激活这些图形对象,使计算机实现特定功能。特定功能。nMatlab设计的演示程序设计的演示程序demo是使用图形界面是使用图形界面的最好范例。的最好范例。2021-11-19311、GUI设计原则设计原则n简单性简单性simplicityn一致性一致性consistencyn习常性习常性familiarity2021-11-19322、GUI设计步骤设计步骤n明确设计任务,分析主要功能,明确设计任务,分析主要功能,n绘制书面草

24、图。绘制书面草图。n上机制作静态界面。上机制作静态界面。n编写程序。编写程序。2021-11-19333、M文件制作图形用户界面文件制作图形用户界面2021-11-1934str=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

25、 1.5,ylim,0 1.8,fontsize,8);2021-11-1935h_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

26、=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,);2021-11-1936h_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);2021-11-1937界面菜单界面菜单H_fig=figure2021-11-1938菜单的隐去和显示菜单的隐去和显示隐去菜单set(H_fig,MenuBar,none);显示菜单set(gcf,MenuBar,figure);2021-11-1939添加用户菜单添加用户菜单h_menu=uimenu(gcf,lab

温馨提示

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

评论

0/150

提交评论