收藏 分享(赏)

第三章MATLAB程序设计.ppt

上传人:fmgc7290 文档编号:8697471 上传时间:2019-07-08 格式:PPT 页数:39 大小:546KB
下载 相关 举报
第三章MATLAB程序设计.ppt_第1页
第1页 / 共39页
第三章MATLAB程序设计.ppt_第2页
第2页 / 共39页
第三章MATLAB程序设计.ppt_第3页
第3页 / 共39页
第三章MATLAB程序设计.ppt_第4页
第4页 / 共39页
第三章MATLAB程序设计.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、第3章 MATLAB程序设计,3.1 函数式和脚本式M文件 3.2 M文件的流控制语句 3.3 程序的调试 3.4 匿名函数,1,3.1 脚本式和函数式M文件 3.1.1 M文件概述用MATLAB语言编写的程序,称为M文件。 M文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。M文件可以根据调用方式的不同分为两类: 函数文件(Function File) 主程序文件,即脚本文件 (Script File)。,2,1建立新的M文件为建立新的M文件,启动MATLAB文本编辑器有3种方法:(1) 菜单操作,3,(2) 命令操作 在MATL

2、AB命令窗口输入命令edit,启动MATLAB文本编辑器后,输入M文件的内容并存盘。 (3) 命令按钮操作 单击MATLAB主窗口工具栏上的New M-File命令图标,启动MATLAB文本编辑器后,输入M文件的内容并存盘。,4,2M文件编辑器,5,3.1.2主程序文件Script File,注意事项 用户可以将需要重复输入的所有命令按顺序放到一个扩展名为.m的文本文件下,每次运行时只要输入该M文件的文件名即可。产生的所有变量都是全局变量,可在工作空间查看,或者在命令窗口输入变量名查看。 用户自己创建的M文件的文件名、变量要避免与MATLAB的内置函数和工具箱中的函数及常量重名,以免发生内置函

3、数和常量被替换的情况。 除注释、字符串外不要使用汉字 。 在命令窗口键入文件名,或者在文本编辑器中按F5键运行程序或者点击 。,6,3.1.3 函数式M文件 (1) 函数文件的基本结构function 输出参量1,输出参量2=函数名(输入参量1,输入参量2)% 注释说明部分 函数体语句其中以function开头的一行为引导行,表示该M文件是一个函数文件。 函数名的命名规则与变量名相同。 当输入参量多于一个时,则应该用小括号括起来。 当输出参量多于一个时,则应该用方括号括起来。,7,8,函数式M文件一般都要自带参数,并且有返回结果 。函数式M文件中的中间变量都不是全局变量,仅存在函数本身的工作空

4、间,只与外部文件按位置交换输入、输出变量(交换实参);不会与MATLAB基本工作空间(Base Workplace)的全局变量重复。函数运行完毕之后,它所定义的变量将从工作区间中清除。类似于一个黑箱。因此除了输入变量外,运行过程所需其他变量须自行设定,不推荐在函数文件中使用全局变量,以利于程序的模块化。,9,(2) 函数调用 在命令窗口,函数调用的一般格式是:输出参量表=函数名(输入参量表)函数调用时输入参量出现的顺序、个数和类型,应与函数定义一致,参量名字可以不同,否则会出错。 输出参量可以少于规定的个数,但绝不能多于。 在MATLAB中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调

5、用它自身。调用的函数必须在MATLAB搜索路径范围内,一般把它们放在同一个文件夹内。,10,3.2 M文件的流控制语句 顺序结构选择结构 (if, switch) 循环结构 (for, while) 其他流控制语句(continue, break, return, echo, input, keyboard, pause),11,3.2.1 顺序结构 顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照程序的物理位置顺次执行。 例如 a=1; b=2; c=3; s1=a+b; s2=s1+c; s3=s2/s2;,12,3.2.2 选择结构 1if语句在MATLAB中,if语句有3种

6、格式。(1) 单分支if语句: if 条件语句组end当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。,13,(2) 双分支if语句: if 条件语句组1else语句组2end当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。,14,例 计算分段函数的值x=input(请输入x的值: ); if x=0y= (x+sqrt(pi)/sqrt(2); elsey=(log10(x)+sqrt(1+x*x)/2; end y,15,(3) 多分支if语句: if 条件1语句组1elseif

7、 条件2语句组2elseif 条件m语句组melse 其它情况语句组nend 语句用于实现多分支选择结构。,16,2switch语句switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为: switch 表达式case 表达式1语句组1case 表达式2语句组2 case 表达式m语句组motherwise语句组nend,17,例 选择不同颜色绘制-2 2区间正弦曲线 t=-2*pi:pi/10:2*pi;y=sin(t);colour=input(请输入你要选择的颜色 ,s);switch colourcase redplot(t,y,r);case blueplot(t,y

8、,b);otherwise %其他情况一律用黑色 plot(t,y,k)end,18,3.2.3 循环结构 1for语句For语句是一种循环语句,可以让用户很方地实现循环操作,从而可以从容地应付大规模的循环语句。 (1)单循环 for 循环变量=初值:步长:终值 循环体语句end,19,计算1+2+3+4+5,结果为 m =15,for语句更一般的格式为:for 循环变量=矩阵表达式循环体语句end执行过程是依次将矩阵的各行元素赋给循环变量,然后执行循环体语句,直至各行元素处理完毕。,21,例 s=0; a=12,13,14;15,16,17;18,19,20;21,22,23;for k=a

9、s=s+k;ends 运行结果:39 48 57 66,22,在实际MATLAB编程中,采用循环语句会降低其执行速度,应尽可能采用矩阵运算。,23, b=sum(a,2)b =39485766,2while语句与for循环不同,while循环的判断控制可以是逻辑判断语句,因此,它的循环次数可以是一个不定数。这样就赋予了它比for循环更广泛的用途。while (条件) 循环体语句end其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。,24,例:从0到100累加,当和大于500时候停止。,25,n=1;y=0; while y=500 y=y+n;n=n

10、+1; endny,3.2.4 其他流控制语句与循环结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。 break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句后面的语句。 (2) continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。,26,例 求100,200之间第一个能被21整除的整数。 程序如下:for n=100:200if rem(n,21)=0continue endbreak end n,不能被21整除,能被21整除,结束for循环,2

11、7,(3) echo on(off) 语句 执行每行程序前显示器内容。 (4) pause(n) 语句 执行到此处停留n秒,如果没有括号参数则须用户点击任意键继续。 (5) keyboard 语句 停止执行并将控制权交给键盘,在屏幕上显示K。对程序调控和程序运行中修改变量非常方便。当键入return是恢复原来程序的运行。,28,(6)Input 语句 用来提示用户输入数据或字符串,并接受输入值。 A=input(promt) %在屏幕显示prompt,并将输入数值付与变量A B=input(prompt,s) ) %在屏幕显示prompt,并将输入字符付与字符串变量B (7)menu语句 me

12、nu(说明,选项1,选项2) (8) Ctrl+C 或者 Ctrl+break 强行停止程序运行。,29,30,3.3 程序的调试(debug) 在MATLAB的表达式中可能存在两种类型的错误,即语法错误和运行错误 3.3.1 语法错误 例如:变量名或者函数名的误写,标点符号的缺漏和控制语句end的缺漏等,此类错误MATLAB运行时一般能发现并报错。易于更正。,Editor中语法错误会在后面出现浅色的横杠,鼠标放在上面会给出错误的具体内容,点击“Fix”会修正语法错误。,显示所有的错误,3.3.2 逻辑错误的识别和程序调试1、逻辑错误 ,例如算法本身问题或者对MATLAB指令的使用不当,在程序

13、运行过程中,出现溢出或是死循环等异常现象。,34,(1)直接调试法对于简单的问题,使用下面的一种或几种方法可以方便地求解: 在函数文件头前加“%”,并定义输入变量的值,这样就将函数式M文件变为脚本式M文件,而脚本式M文件运行时,其工作区间就是MATLAB 的工作区间,这样在出现错误的时候就可以查询这个工作区间。 最好在脚本文件头两行输入“clear; clc;”创造良好的运行环境。 将程序中输出关键值的行的分号(;)去掉,这样,这些运算的中间结果将在命令窗口中予以显示,用户可以据此来检查中间结果的正确性。 注意矩阵运算与矩阵元素运算的区别“*、.*、/、./”。 养成每行加注释的良好习惯,以利

14、于程序的调试和可读性,(2)工具调试法,35,点击图标 或者直接在点击行号与文本之间的横杠设置一个断点,编译器用一个大红点标记。程序运行后将在断点处暂停,并出现一个绿色箭此时命令窗口的提示符由“”变为“K”,用户可以查看前面的运行结果。,点击图标 运行下一行语句,绿色箭头向下移动一位。 点击图标 运行余下所有语句,绿色箭头消失。命令窗口的提示符由“K”变回“”。 点击断点,红点消失即可去除断点。 点击图标 清除所有断点。 点击图标 退出调试模式。上面的命令可在菜单debug中找到相应的命令。,ToolOpen Profiler 点击”Satrt Profiling”,给出各行语句时间,并把耗时

15、最大的语句用高亮背景显示。,37,(3) 单元方式调试 在语句的上方空出一行,输入“%”,其下方的所有的程序语句组成一个程序单元,背景变为黄色;采取同样地方法把语句变成几个单元。这样可以用图形工具 重复执行某一单元或 者点击 按顺序执行各个单元,有效地提高调试的效率。,38,3.4 匿名函数, ff=(x,y)1./x+1./y ff = (x,y)1./x+1./y ff(2,4) ans =0.7500 调用已有函数 ss=sin; ss(pi/2) ans =1, f=(x,y)x+y,x-y; g=f(2,3)g =5 -1 f=(x,y)x+y;x-y; f(2,3) ans =5-1,函数句柄以符号后面跟着变量及函数表达式来表示:,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报