《第五章MATLAB程序设计.ppt》由会员分享,可在线阅读,更多相关《第五章MATLAB程序设计.ppt(63页珍藏版)》请在优知文库上搜索。
1、第五章 MATLAB程序设计u5.1 M文件介绍u5.2 程序控制结构及语句u5.3 变量作用域u5.4 文件操作u5.5 面向对象的程序设计u5.6 程序设计辅助函数u5.7 Matlab编译u5.8 程序调试u5.9 程序设计优化u5.10 应用程序接口5.1 M文件介绍 Matlab的文件类型一般可以分为两种,分别为.mat文件和.m文件。.mat数据文件是matlab以标准二进制格式保存的数据文件,可将工作空间中有用的数据变量保存下来,其生成和调用是由函数save和load完成的。 .m文件起因于用户灵活使用Matlab,充分使用Matlab的科技资源;另外,命令行方式程序可读性差,对
2、于复杂的问题,需要编写成易存储的程序文件,由此产生了.m文件。其编辑可以使用多种编辑器,通常可以把.m文件简称为M文件。5.1.1 M文件的创建与编辑1.建立新的M文件(1)菜单操作:MATLAB命令窗口的File菜单 New菜单项 M-file命令。(2)命令操作:在MATLAB命令窗口输入命令edit。(3)命令按钮操作:单击MATLAB命令窗口工具栏上的“新建”命令按钮(4)使用DOS状态的edit编辑器编辑(5)使用windows系统的notbook/记事本进行创建(6)使用word进行创建2.M文件的编辑在使用上述方式创建好M文件后可以通过上面的各类编辑器进行编辑,之后将M文件进行保
3、存。文件保存的目录一般默认为用户当前设置的工作目录注意:所创建编辑的m文件必须纳入matlab搜索路 径后,才能在matlab命令窗口运行。5.1.2 M文件的分类 m文件的语法类似于c语言,但又有其自身特点。它只是一个简单的ASCII码文本文件,执行程序时逐行解释运行程序,matlab是解释性的编程语言。 m文件有两类独立的m文件 称命令文件 可调用m文件 称函数文件(1). 命令文件 简单的m文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。 命令式M 文件在运行过程中可以调用MATLAB 工作域内所有的数据,而且,所产生的所有变
4、量均为全局变量,直到用户执行clear命令清除。 另外需注意的是: 标点符号要运用恰当; 注意程序的书写风格,保持程序的可读性;(2).matlab内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入口、 出口参数即可。 例如:sin.m函数用type sin查不到。 调用格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y) 又如 sqrt(x) 求x的平方根 abs(x) 求x的绝对值 det(a) 求行列式的值 等等。matlab拥有大量的内置数学函数,供我们在数值 运算和
5、符号运算中调用。(3). 函数m文件 需要输入变量,返回输出变量 matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。 对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。 这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。函数m文件的格式: function 返回变量=函数名(输入变量) 注释说明语句段 程序语句段特定规则: 函数m文件第一行必须以单词function作为引导词,必 须遵循如下形式: function =() m文件的文件名必须是 .m。 程序中的变量均
6、为局部变量,不保存在工作空间中。 其变量只在函数运行期间有效。 函数被调用时按 函数名(输入变量)格式执行 函数执行完后,只保留返回结果,不保留中间过程例如:function CustomVar01 = SimpleFunction(a,b)%SimpleFunction用于显示两个数进行四则运算后的结果%使用help语句时应该能将此句注释显示出来,而使用%lookfor语句时应不能显示c = a + b;%对参数a,b进行加运算d = a - b;%对参数a,b进行减运算e = a * b;%对参数a,b进行乘运算f = a / (b + eps);%对参数a,b进行除运算CustomVar
7、01 = c,d,e,f;%将四项基本运算的结果放到一向量中去并显示; 调用此函数,则有SimpleFunction(2,3)ans = 5.0000 -1.0000 6.0000 0.6667 使用help语句获得帮助help SimpleFunction SimpleFunction用于显示两个数进行四则运算后的结果 使用help语句时应该能将此句注释显示出来,而使用 lookfor语句时应不能显示 使用lookfor语句查询关键字lookfor 四则运算SimpleFunction.m: %SimpleFunction用于显示两个数进行四则运算后的结果注:为了利用MATLAB的关键字搜索
8、功能,应该在M文件的第一行注释中,尽可能多的包含函数的特征信息。(4). 系统文件s函数 用于描述系统运动的专用函数,是特殊的 m 文件。 s 函数有3类: 由simulink结构图自动创建 可用c语言程序设计mex文件直接定义 用函数m文件编写 s函数一旦创建,即可在框图中使用,也可在文件中调用。 s函数的调用格式 sys, x0=sfunction( t, x, u, flag) 其中 sys 系统状态 x0 状态初值 sfunction 用户定义的系统 t 当前时刻 x 当前状态值 u 当前输入值 flag 标志量s函数与函数m文件类似,只是输入输出变量是限定的。例5.1.2-1 建立一
9、个命令文件将变量a,b的值互换,然后运行该命令文件。 首先建立命令文件并以文件名exch.m存盘: clear; a=1:10; b=11,12,13,14;15,16,17,18; c=a;a=b;b=c; a b 然后在MATLAB的命令窗口中输入exch,将会执行该命令文件。例5.1.2-2 建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。 首先建立函数文件fexch.m: function a,b=fexch(a,b) c=a;a=b;b=c; 然后在MATLAB的命令窗口调用该函数文件: clear; x=1:10; y=11,12,13,14;15,16,17,
10、18; x,y=fexch(x,y)5.2 程序控制结构及语句 matlab语言的程序结构与其它高级语言是一致的,分为顺序结构,分支结构,循环结构。(1).顺序结构 依次顺序执行程序的各条语句(2).分支结构 根据一定条件来执行的各条语句。 有些资料中也称其 为选择结构, 主要是因为其语句往往是一些选择 判断性的语句。 (3).循环结构 被重复执行的一组语句,循环是计 算机解决问题的主要手段。5.2.1 常见程序控制流语句input函数 调用格式为: A=input(提示信息,选项); 其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在input函数调用时采用s选项,则允许用户输
11、入一个字符串。例如,想输入一个人的姓名,可采用命令: xm=input(Whats your name?nHow are you?nHow old are you?,s)disp函数 调用格式为 disp(输出项) 其中输出项既可以为字符串,也可以为矩阵。 注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。 例5.2.1-1 求一元二次方程ax2 +bx+c=0的根。 程序如下: a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c; e=sqrt(d); x=(-b+e)/(2*a),(-b-e
12、)/(2*a); disp(x1=,num2str(x(1),x2=,num2str(x(2);pause函数 其调用格式为: pause(延迟秒数) 如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。 若要强行中止程序的运行可使用Ctrl+C命令。 pause暂停程序,等待回应; pause(n)等待n秒后继续执行; pause on 显示并执行pause命令; pause off 显示但不执行pause命令keyboard 与input类似,功能更强 keyboard 调用键盘与调用m文件一样,当keyboard在m文件中出现时,它停止文件的执行并控制键盘
13、,用于修改程序,重新返回原m文件时使用return语句。break 中断 break 中断for, while循环语句的执行,在嵌套循环结构中, break进从最里层循环推出。menu 产生一个拥护可选择输入的菜单 格式:k=menu( 标题,菜单1,菜单2,菜单3) echo 指令 用来控制m文件在执行过程中是否显示 echo on 打开所有命令文件的显示方式 echo off 关闭所有命令文件的显示方式 echo 在以上两者间切换 echo对于命令文件函数文件有所不同,命令文件用法简单,函数对所有命令起作用;函数文件用法较复杂,具体请help查询。 echo file on 打开file函
14、数文件的显示方式 echo file off 关闭file函数文件的显示方式 echo file 切换file函数文件的显示方式 echo on all 打开所有函数文件的显示方式 echo off all 关闭所有函数文件的显示方式5.2.2 分支结构5.2.2.1 if语句 在MATLAB中,if语句有3种格式。 1.单分支if语句 语句格式为: if 条件 语句组 end 当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。 2.双分支if语句 语句格式为: if 条件 语句组1 else 语句组2 end 当条件成立时,执行语句
15、组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。条件语句组语句组1语句组2是否 例5.2.2.1-1 计算分段函数值。 程序如下: x=input(请输入x的值:); if x=10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x); end y3.多分支if语句语句格式为:if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件n 语句组n else 语句组n+1end条件1语句组1条件2是语句组2是否条件n语句组n语句组n+1否否是例5.2.2.1-2输入一个字符,若为大写字母,则输出其后继字符,若
16、为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。 程序如下: c=input(请输入一个字符,s); if c=A & c=a& c=0& c A=1:9;B=2:10; C=A*B? Error using = *Inner matrix dimensions must agree.执行错误 发生在程序运行过程中,出现溢出或死循环等引起,错误与程序有关,较难发现。a=1;while (a=1) a=1end错误检测语法错误会给出相应的信息,容易检查定位;将程序执行的中间结果输出到命令窗口,以方便检查;使用keyboard函数中断程序,进入调试状态,实现交互式调试;将函数头注释掉,从而函数变为脚本文件调试;使用调试菜单或调试函数。调试函数dbstop in M文件名 at 行号 用来在M文件中设置断点;函数dbstatus用来显示断点信息;函数dbtype显示M文件文本(包括行号);函数dbstep从断点处继续执行M文件;函数dbstack显示M文件执行时调用的堆栈等;函数dbup/dbdown可以实现工作空间的切换;5.9 程序设计优化以矩阵为操