资源描述
*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,MATLAB,程序设计与应用,作者:周冬梅,邮箱:,zhoudongmeitd,兰州交通大学电子与信息工程学院,第,3,章 编程,3.1,M,文件,3.2,程序控制结构,3.3,函数文件,4.4,程序举例,4.5,程序调试,第,3,章 编程,3.1 Top-down,设计模式,3.2,伪代码,3.3,顺序结构程序,3.4,分支结构程序,3.5,循环结构,3.6,函数编写,3.1,Top-down,设计模式,分解大任务的过程(,P73,图,3.1,),步骤:,简明扼要阐述待解决的问题,确定输入和输出变量,任务分解,设计代数算法,将代数算法转换为,MATLAB,语言,测试每一子模块,剔除错误,确保无误,整合程序,测试程序,3.2,伪代码,1,、借助数学表述和文字语言对所编写程序运算过程的阐述。,2,、将伪代码中的数学语言和文字陈述翻译为,MATLAB,语句就要编写程序。,M,文件,M,文件概述,用,MATLAB,语言编写的程序,称为,M,文件。,M,文件可以根据调用方式的不同分为两类:命令文件,(Script File),和函数文件,(Function File),。,例,4-1,分别建立命令文件和函数文件,将华氏温度,f,转换为摄氏温度,c,。,程序,1,:,首先建立命令文件并以文件名,f2c1.m,存盘。,clear; %,清除工作空间中的变量,f=,input(Input,Fahrenheit temperature,:,);,c=5*(f-32)/9,然后在,MATLAB,的命令窗口中输入,f2c1,,将会执行该命令文件,执行情况为:,Input Fahrenheit temperature,:,73,c =,22.7778,程序,2,:,首先建立函数文件,f2c.m,。,function c=f2c(f),c=5*(f-32)/9,然后在,MATLAB,的命令窗口调用该函数文件。,clear;,y=,input(Input,Fahrenheit temperature,:,);,x=f2c(y),输出情况为:,Input Fahrenheit temperature,:,70,c =,21.1111,x =,21.1111,M,文件的建立与打开,M,文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是使用,MATLAB,提供的文本编辑器。,1,建立新的,M,文件,为建立新的,M,文件,启动,MATLAB,文本编辑器有,3,种方法:,(1),菜单操作。,从,MATLAB,主窗口的,File,菜单中选择,New,菜单项,再选择,M-file,命令,屏幕上将出现,MATLAB,文本编辑器窗口。,(2),命令操作。,在,MATLAB,命令窗口输入命令,edit,,启动,MATLAB,文本编辑器后,输入,M,文件的内容并存盘。,(3),命令按钮操作。,单击,MATLAB,主窗口工具栏上的,New M-File,命令按钮,启动,MATLAB,文本编辑器后,输入,M,文件的内容并存盘。,2,打开已有的,M,文件,打开已有的,M,文件,也有,3,种方法:,(1),菜单操作。,从,MATLAB,主窗口的,File,菜单中选择,Open,命令,则屏幕出现,Open,对话框,在,Open,对话框中选中所需打开的,M,文件。在文档窗口可以对打开的,M,文件进行编辑修改,编辑完成后,将,M,文件存盘。,(2),命令操作。,在,MATLAB,命令窗口输入命令:,edit,文件名,则打开指定的,M,文件。,(3),命令按钮操作。,单击,MATLAB,主窗口工具栏上的,Open File,命令按钮,再从弹出的对话框中选择所需打开的,M,文件。,3.3,顺序结构程序,是最简单的一种程序结构。,执行是一行接一行进行的。,1,数据的输入,从键盘输入数据,则可以使用,input,函数来进行,该函数的调用格式为:,A=input(,提示信息,选项,),;,其中提示信息为一个字符串,用于提示用户输入什么样的数据。,如果在,input,函数调用时采用,s,选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:,xm,=,input(Whats,your,name?,s,);,2,数据的输出,MATLAB,提供的命令窗口输出函数主要有,disp,函数,其调用格式为,disp,(,输出项,),其中输出项既可以为字符串,也可以为矩阵。,2,数据的输出,例,A=,Hello,Tom,;,disp(A,),例,A=1,2,3;4,5,6;7,8,9,disp(A,),2,数据的输出,例,3-3,求一元二次方程,ax,2,+,bx+c,=0,的根。,程序如下:,a=,input(a,=?);,b=,input(b,=?);,c=,input(c,=?);,d=b*b-4*a*c;,x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);,disp(x1=,num2str(x(1),x2=,num2str(x(2);,3,程序的暂停,暂停程序的执行可以使用,pause,函数,其调用格式为:,pause(,延迟秒数,),如果省略延迟时间,直接使用,pause,,则将暂停程序,直到用户按任一键后程序继续执行。,若要强行中止程序的运行可使用,Ctrl+C,命令。,3.4,分支结构结构程序,1,if,语句,在,MATLAB,中,,if,语句有,3,种格式。,(1),单分支,if,语句:,if,条件,语句组,end,当条件成立时,则执行语句组,执行完之后继续执行,if,语句的后继语句,若条件不成立,则直接执行,if,语句的后继语句。,1,if,语句,(2),双分支,if,语句:,if,条件,语句组,1,else,语句组,2,end,当条件成立时,执行语句组,1,,否则执行语句组,2,,语句组,1,或语句组,2,执行后,再执行,if,语句的后继语句。,1,if,语句,例,3-4,计算分段函数的值,Y=,程序如下:,x=input(,请输入,x,的值,:);,if x=A & c=a& c=0& c=9,disp(abs(c)-abs(0);,else,disp(c,);,end,2,switch,语句,switch,语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:,switch,表达式,case,表达式,1,语句组,1,case,表达式,2,语句组,2,case,表达式,m,语句组,m,otherwise,语句组,n,end,2,switch,语句,当表达式的值等于表达式,1,的值时,执行语句组,1,,当表达式的值等于表达式,2,的值时,执行语句组,2,,,,当表达式的值等于表达式,m,的值时,执行语句组,m,,当表达式的值不等于,case,所列的表达式的值时,执行语句组,n,。当任意一个分支的语句执行完后,直接执行,switch,语句的下一句。,2,switch,语句,例,3-6,某商场对顾客所购买的商品实行打折销售,标准如下,(,商品价格用,price,来表示,),:,price200,没有折扣,200price500 3%,折扣,500price1000 5%,折扣,1000price2500 8%,折扣,2500price 0),sum,mean=sum/,cnt,end,3,break,语句和,continue,语句,与循环结构相关的语句还有,break,语句和,continue,语句。它们一般与,if,语句配合使用。,break,语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。,continue,语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。,3,break,语句和,continue,语句,例,3-12,求,100,,,200,之间第一个能被,21,整除的整数。,程序如下:,for n=100:200,if rem(n,21)=0,continue,end,break,end,n,4,循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,例,3-13,若一个数等于它的各个真因子之和,则称该数为完数,如,6=1+2+3,,所以,6,是完数。求,1,500,之间的全部完数。,for m=1:500,s=0;,for k=1:m/2,if,rem(m,k,)=0,s=,s+k,;,end,end,if m=s,disp(m,);,end,end,3.6,函数文件,1,、 函数文件的基本结构,函数文件由,function,语句引导,其基本结构为:,function,输出形参表,=,函数名,(,输入形参表,),注释说明部分,函数体语句,其中以,function,开头的一行为引导行,表示该,M,文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。,例,3-14,编写函数文件求半径为,r,的圆的面积和周长。,函数文件如下:,function ,s,p,=,fcircle(r,),%CIRCLE calculate the area and perimeter of a circle of radii r,%r,圆半径,%s,圆面积,%p,圆周长,%2004,年,7,月,30,日编,s=pi*r*r;,p=2*pi*r;,2,、函数调用,函数调用的一般格式是:,输出实参表,=,函数名,(,输入实参表,),要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。,例,3-15,利用函数文件,实现直角坐标,(,x,y,),与极坐标,(,),之间的转换。,函数文件,tran.m,:,function ,rho,theta,=,tran(x,y,),rho,=,sqrt(x,*,x+y,*y);,theta=,atan(y/x,);,调用,tran.m,的命令文件,main1.m,:,x=,input(Please,input x=:);,y=,input(Please,input y=:);,rho,the,=,tran(x,y,);,rho,the,在,MATLAB,中,函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身。一个函数调用它自身称为函数的递归调用。,3,、 函数调用,例,3-16,利用函数的递归调用,求,n,!。,n!,本身就是以递归的形式定义的:,显然,求,n!,需要求,(n-1)!,,这时可采用递归调用。递归调用函数文件,factor.m,如下:,function f=,factor(n,),if n2),求,Fibonacci,数列的第,20,项。,例,3-23,根据矩阵指数的幂级数展开式求矩阵指数。,程序调试,程序调试概述,一般来说,应用程序的错误有两类,,一类是语法错误,另一类是运行时的错误,。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。,程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。,MATLAB,调试菜单(,Debug,),1,控制单步运行,该菜单项命令共有,5,个,在程序运行之前,仅有,Save and Run,命令是激活的。只有当程序中设置了断点,且程序停止在第一个断点时处时其他菜单命令才被激活,这些菜单命令有:,(,1,),Step,:单步运行(不进入函数),(,2,),Step In,:单步运行(进入函数),(,3,),Step Out,:停止单步运行,(,4,),Save and Run,:存储文件并开始运行,(,5,),Go Until Cursor,:直接运行到光标所在位置,MATLAB,调试菜单(,Debug,),2,Breakpoints,菜单项,该菜单项共有,6,个菜单命令,前两个是用于在程序中设置和清除断点的,后,4,个是设置停止条件的,用于临时停止,M,文件的执行,并给用户一个检查局部变量的机会,相当于在,M,文件指定的行号前加入了一个,keyboard,命令。,谢 谢!,
展开阅读全文