第 5 章 matlab程序设计2_第1页
第 5 章 matlab程序设计2_第2页
第 5 章 matlab程序设计2_第3页
第 5 章 matlab程序设计2_第4页
第 5 章 matlab程序设计2_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章第五章 MATLAB程序设计(第二讲)程序设计(第二讲)【本章学习目标【本章学习目标】 掌握建立和执行掌握建立和执行M M文件的方法。文件的方法。 掌握利用掌握利用ifif语句、语句、switchswitch语句实现选择结构的方法。语句实现选择结构的方法。 掌握利用掌握利用forfor语句、语句、whilewhile语句实现循环结构的方法。语句实现循环结构的方法。 熟悉利用向量运算来代替循环操作的方法。熟悉利用向量运算来代替循环操作的方法。 掌握定义和调用掌握定义和调用MATLABMATLAB函数的方法。函数的方法。5.3 5.3 函数文件函数文件 5.3.1 5.3.1 函数文件的基本

2、结构函数文件的基本结构 函数式函数式M M文件比较标准的格式如下:其中红色文文件比较标准的格式如下:其中红色文字表示字表示M M文件的基本组成部分。文件的基本组成部分。Function x,y=myfun(a,b,cFunction x,y=myfun(a,b,c) ) 函数定义行函数定义行% %H1H1行行用一行文字来综述函数的功能用一行文字来综述函数的功能% %帮助文本帮助文本用一行或多行文本解释如何使用函数用一行或多行文本解释如何使用函数% %在命令行中键入在命令行中键入”helpfunctionnamehelp”时可以使用时可以使用它它5.3 5.3 函数文件函数文件% %函数体函数体

3、一般从第一个空白行开始一般从第一个空白行开始% %注释注释描述函数的行为,输入输出的类型等描述函数的行为,输入输出的类型等% %在命令行中键入在命令行中键入“helpfunctionnamehelp”时不会时不会显示注释文本显示注释文本X=prod(a,bX=prod(a,b) %) %开始编写开始编写函数代码函数代码 一个完整的函数式一个完整的函数式M M文件应该包括定义行、文件应该包括定义行、H1H1行、帮助文本、函数体、注释和函数代码等内容,行、帮助文本、函数体、注释和函数代码等内容,其中函数定义行和函数代码是必需的。其中函数定义行和函数代码是必需的。5.3 5.3 函数文件函数文件 其

4、中,以其中,以functionfunction开头的一行为引导行,表开头的一行为引导行,表示该示该M M文件是一个函数文件。函数名的命名规则与文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。则应该用方括号括起来。(1 1)函数文件名通常由函数名再加上扩展名)函数文件名通常由函数名再加上扩展名.m.m组成,组成,不过函数文件名与函数名也可以不相同。当两者不过函数文件名与函数名也可以不相同。当两者不同时,不同时,MA

5、TLABMATLAB将忽略函数名而确认函数文件名,将忽略函数名而确认函数文件名,因此,因此,调用时使用函数文件名。调用时使用函数文件名。5.3 5.3 函数文件函数文件【例【例5.145.14】编写求一个向量之和以及向量平均值的】编写求一个向量之和以及向量平均值的函数文件。函数文件。函数文件如下:函数文件如下: function s,m=fvector(vfunction s,m=fvector(v) )%VECTOR fvector.m%VECTOR fvector.m calculates sum and mean calculates sum and mean of a vectorof

6、 a vector%v %v 向量向量%s %s 和和%m %m 平均值平均值%2010%2010年年4 4月月8 8日编日编5.3 5.3 函数文件函数文件m,n=size(vm,n=size(v););if (m1 & n1) | (m=1 & n=1)if (m1 & n1) | (m=1 & n=1) error(Input error(Input must be a vector) must be a vector)endends=sum(vs=sum(v); %); %求向量和求向量和m=s/length(vm=s/length(v); %); %求

7、向量平均值求向量平均值 将以上函数文件以文件名将以上函数文件以文件名fvector.mfvector.m存盘,存盘,然后在然后在MATLABMATLAB命令窗口调用该函数:命令窗口调用该函数: s,ps,p=fvector(1:10)=fvector(1:10)5.3 5.3 函数文件函数文件(2 2)注释说明包括如下)注释说明包括如下3 3部分内容。部分内容。紧随函数文件引导行之后以紧随函数文件引导行之后以% %开头的第一注释行。开头的第一注释行。这一行一般包括大写的函数文件名和函数功能简这一行一般包括大写的函数文件名和函数功能简要描述,供要描述,供lookforlookfor关键词查询和关

8、键词查询和helphelp在线帮助用。在线帮助用。第一注释行及之后连续的注释行。通常包括函数第一注释行及之后连续的注释行。通常包括函数输入输出参数的含义及调用格式说明等信息,构输入输出参数的含义及调用格式说明等信息,构成全部在线帮助文本。成全部在线帮助文本。与在线帮助文本相隔一空行的注释行。包括函数与在线帮助文本相隔一空行的注释行。包括函数文件编写和修改的信息,如作者、修改日期、版文件编写和修改的信息,如作者、修改日期、版本等内容,用于软件档案管理。本等内容,用于软件档案管理。5.3 5.3 函数文件函数文件 采用采用helphelp命令或命令或lookforlookfor命令可以显示出注释命

9、令可以显示出注释说明部分的内容,其功能和一般说明部分的内容,其功能和一般MATLABMATLAB函数的帮函数的帮助信息是一致的。助信息是一致的。 利用利用helphelp命令可查询命令可查询fvectorfvector函数的注释说明:函数的注释说明: help fvectorhelp fvector 再用再用lookforlookfor命令在第一注释行查询指定的关命令在第一注释行查询指定的关键词:键词: lookfor fvectorlookfor fvector(3 3)如果在函数文件中插入了)如果在函数文件中插入了returnreturn语句,则执行语句,则执行到该语句就结束函数的执行,程

10、序流程转至调用到该语句就结束函数的执行,程序流程转至调用该函数的位置。该函数的位置。5.3 5.3 函数文件函数文件5.3.2 5.3.2 函数调用函数调用 函数调用的一般格式为函数调用的一般格式为 输出实参表输出实参表=函数名函数名( (输入实参表输入实参表) ) 函数调用时各实参出现的顺序、个数,应与函函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。实现参数传递,然后再执行函数的功能。5.3 5.

11、3 函数文件函数文件【例【例5.155.15】利用函数文件,实现直角坐标(】利用函数文件,实现直角坐标(x x,y y)与极坐标(与极坐标(, )之间的转换。)之间的转换。函数文件函数文件tran.mtran.m:function rho,theta=tran(x,y)function rho,theta=tran(x,y)rho=sqrt(xrho=sqrt(x* *x+yx+y* *y);y);theta=atan(y/x);theta=atan(y/x);调用调用tran.mtran.m的命令文件的命令文件main1.mmain1.m:x=input(Please input x=:);

12、x=input(Please input x=:);y=input(Please input y=:);y=input(Please input y=:);rho,the=tran(x,yrho,the=tran(x,y););rhorhothethe5.3 5.3 函数文件函数文件 在在MATLABMATLAB中,函数可以嵌套调用,即一个函数中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身。一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用。调用它自身称为函数的递归调用。【例【例5.165.16】利用函数的递归调用,求】利用函数的递归调用,求n n

13、! n!n!本身就是以递归的形式定义的:本身就是以递归的形式定义的: 显然,求显然,求n!n!需要求(需要求(n n1)!1)!,这时可采用递归,这时可采用递归调用。递归调用函数文件调用。递归调用函数文件factor.mfactor.m如下:如下:5.3 5.3 函数文件函数文件factor.m如下:如下:function f=factor(n)if nfirstlevel num1=num1+1; elseif list(i)secondlevel num2=num2+1; else num3=num3+1; endend5.3 5.3 函数文件函数文件global firstlevel s

14、econdlevel firstlevel=85; secondlevel=75; num1,num2,num3=test534(90 89 60,79 89 60,99 98 100)num1 = 1num2 = 2num3 = 0注意:定义全局变量时,与注意:定义全局变量时,与定义输入变量和输出变量定义输入变量和输出变量不同,变量之间必须以空不同,变量之间必须以空格分隔,而不能用逗号分格分隔,而不能用逗号分隔,否则,系统将不能识隔,否则,系统将不能识别逗号后的全局变量。别逗号后的全局变量。5.4 5.4 程序调试程序调试5.4.1 5.4.1 程序调试概述程序调试概述 应用程序的错误有两类

15、,一类是语法错误,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误包括语法或文另一类是运行时的错误。语法错误包括语法或文法的错误,如函数名拼写错、表达式书写错、数法的错误,如函数名拼写错、表达式书写错、数据类型错误等。据类型错误等。MATLABMATLAB能够检查出大部分的语法能够检查出大部分的语法错误,给出相应错误信息,并标出错误在程序中错误,给出相应错误信息,并标出错误在程序中的行号。的行号。5.4 5.4 程序调试程序调试 程序运行时的错误是指程序的运行结果有错程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。误,这类错误也称为程序逻辑错误。MAT

16、LABMATLAB系统系统对逻辑错误是无能为力的,不会给出任何提示信对逻辑错误是无能为力的,不会给出任何提示信息。这时可以通过一些调试手段来发现程序中的息。这时可以通过一些调试手段来发现程序中的逻辑错误,最常见的办法是通过逻辑错误,最常见的办法是通过获取中间结果的获取中间结果的方式来获取错误可能发生的程序段方式来获取错误可能发生的程序段,以便进一步,以便进一步分析错误的原因。分析错误的原因。5.4 5.4 程序调试程序调试(1 1)将程序的一些主要中间结果输出到命令窗口,)将程序的一些主要中间结果输出到命令窗口,从而确定错误的区段。从而确定错误的区段。(2 2)使用)使用MATLABMATLA

17、B的调试菜单(的调试菜单(DebugDebug),通过图形),通过图形界面操作来实现程序调试,包括设置断点、控制界面操作来实现程序调试,包括设置断点、控制程序单步运行等操作。程序单步运行等操作。(3 3)使用键盘终止函数)使用键盘终止函数keyboardkeyboard中断程序的运行,中断程序的运行,此时将程序的运行处于调试状态,命令窗口的提此时将程序的运行处于调试状态,命令窗口的提示符相应变成示符相应变成KK,利用命令操作方式来实现程序,利用命令操作方式来实现程序调试。调试。5.4 5.4 程序调试程序调试5.4.2 MATLAB5.4.2 MATLAB调试菜单调试菜单1 1控制单步运行控制

18、单步运行(1 1)StepStep:单步运行。每单击一次,程序运行:单步运行。每单击一次,程序运行一次,但不进入函数。一次,但不进入函数。(2 2)Step InStep In:单步运行。遇到函数时进入函数:单步运行。遇到函数时进入函数内,仍单步运行。内,仍单步运行。(3 3)Step OutStep Out:停止单步运行。如果是在函数:停止单步运行。如果是在函数中,跳出函数;如果不在函数中,直接运行到中,跳出函数;如果不在函数中,直接运行到下一个断点处。下一个断点处。(4 4)Go Until CursorGo Until Cursor:直接运行到光标所在的:直接运行到光标所在的位置。位置。

19、5.4 5.4 程序调试程序调试2 2断点操作断点操作(1 1)Set/Clear BreakpointSet/Clear Breakpoint:设置或清除断点。:设置或清除断点。(2 2)Set/Modify Conditional BreakpointSet/Modify Conditional Breakpoint:设:设置或修改条件断点。条件断点可以使程序执行到置或修改条件断点。条件断点可以使程序执行到满足一定条件时停止。满足一定条件时停止。(3 3)Enable/Disable BreakpointEnable/Disable Breakpoint:使断点有效:使断点有效或无效。或无

20、效。(4 4)Clear Breakpoints in All FilesClear Breakpoints in All Files:清除所:清除所有断点。有断点。(5 5)Stop If Errors/WarningsStop If Errors/Warnings:在程序执行出:在程序执行出现错误或警告时,停止程序运行,进入调试状态,现错误或警告时,停止程序运行,进入调试状态,不包括不包括trytrycatchcatch语句中的错误。语句中的错误。5.4 5.4 程序调试程序调试【例【例5.215.21】在如图】在如图2.72.7所示的编辑窗口中,所示的编辑窗口中,有一个求两个数的最有一个

21、求两个数的最小公倍数的程序小公倍数的程序commulti.mcommulti.m,试设置,试设置断点来控制程序执行。断点来控制程序执行。5.4 5.4 程序调试程序调试x=input(请输入第一个数请输入第一个数:);y=input(请输入第二个数请输入第二个数:);z=max(x,y);while or(rem(z,x)=0,rem(z,y)=0) z=z+1;enddisp(num2str(x),和和,num2str(y),的最小公倍数的最小公倍数是是:,num2str(z)5.5 5.5 程序性能分析与优化程序性能分析与优化5.5.1 5.5.1 程序性能分析程序性能分析 调试器只负责调

22、试器只负责M M文件中语法错误和运行错误的文件中语法错误和运行错误的定位,而定位,而ProfilerProfiler性能评估器、性能评估器、tictic函数和函数和toctoc函函数能分析程序各环节的耗时情况,分析报告能帮数能分析程序各环节的耗时情况,分析报告能帮助用户寻找影响程序运行速度的助用户寻找影响程序运行速度的“瓶颈瓶颈”所在,所在,以便于进行程序优化。以便于进行程序优化。 通过函数文件性能评估器(通过函数文件性能评估器(ProfilerProfiler)用户)用户可以很方便地了解程序执行过程中各函数及函数可以很方便地了解程序执行过程中各函数及函数中的每条语句所耗费的时间,从而有针对性

23、地改中的每条语句所耗费的时间,从而有针对性地改进程序,提高程序的运行效率。进程序,提高程序的运行效率。5.5 5.5 程序性能分析与优化程序性能分析与优化 在在MATLABMATLAB主窗口的主窗口的“view”view”菜单中选择菜单中选择“Profiler”Profiler”命令或在命令或在M M文件编辑器的文件编辑器的“view”view”菜单菜单中选择中选择“Profiler”Profiler”命令,屏幕上将出现命令,屏幕上将出现ProfilerProfiler性能评估器,如图所示。在性能评估器,如图所示。在“Run this code”Run this code”编辑编辑框中输入一个

24、框中输入一个M M文件名(如文件名(如ch01031ch01031)后,单击)后,单击Start Start ProfilingProfiling命令按钮或按回车键启动分析。命令按钮或按回车键启动分析。ch01031.mch01031.m中的代码如下:中的代码如下:x=-20:0.1:20;x=-20:0.1:20;y=300y=300* *sin(x)./xsin(x)./x; ;plot(x,yplot(x,y););5.5 5.5 程序性能分析与优化程序性能分析与优化 检测综述报表提供了运行文件的时间和相关检测综述报表提供了运行文件的时间和相关函数的调用频率,反映出整个程序耗时函数的调用

25、频率,反映出整个程序耗时0.218s0.218s,其中执行与绘制图形中调用的其中执行与绘制图形中调用的newplotnewplot函数耗函数耗时最多。单击某函数名,则打开相应函数的详时最多。单击某函数名,则打开相应函数的详细报告。细报告。5.5 5.5 程序性能分析与优化程序性能分析与优化5.5.2 5.5.2 程序优化程序优化(1 1)向量化。)向量化。例例5.22 5.22 计算计算 ,当,当n n = = 100100时,求时,求y y的值。的值。用循环结构实现用循环结构实现y=0;y=0;n=100;n=100;for i=1:nfor i=1:n y=y+1/i/i; y=y+1/i/i;endenddisp(ydisp(y) )采用向量求和的方法采用向量求和的方法n=100;n=100;i=1:n;i=1:n;f=1./i./i;f=1./i./i;y=s

温馨提示

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

评论

0/150

提交评论