资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章,MATLAB,程序设计,3.1 M,文件,3.2,程序控制结构,3.3,函数文件,3.4,程序举例,3.5,程序调试,3.1 M,文件,3.1.1 M,文件概述,用,MATLAB,语言编写的程序,称为,M,文件。,M,文件可以根据调用方式的不同分为两类:命令文件,(Script File),和函数文件,(Function File),。,例,3-1,分别建立命令文件和函数文件,将华氏温度,f,转换为摄氏温度,c,。,程序,1,:,首先建立命令文件并以文件名,f2c.m,存盘。,clear; %,清除工作空间中的变量,f=,input(Input,Fahrenheit temperature,:,);,c=5*(f-32)/9,然后在,MATLAB,的命令窗口中输入,f2c,,将会执行该命令文件,执行情况为:,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,3.1.2 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.2,程序控制结构,3.2.1,顺序结构,1,数据的输入,从键盘输入数据,则可以使用,input,函数来进行,该函数的调用格式为:,A=input(,提示信息,选项,),;,其中提示信息为一个字符串,用于提示用户输入什么样的数据。,如果在,input,函数调用时采用,s,选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:,xm,=,input(Whats,your,name?,s,);,2,数据的输出,MATLAB,提供的命令窗口输出函数主要有,disp,函数,其调用格式为,disp,(,输出项,),其中输出项既可以为字符串,也可以为矩阵。,例,3-2,输入,x,y,的值,并将它们的值互换后输出。,程序如下:,x=,input(Input,x please.);,y=,input(Input,y please.);,z=x;,x=y;,y=z;,disp(x,);,disp(y,);,例,3-3,求一元二次方程,ax2 +,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.2.2,选择结构,1,if,语句,在,MATLAB,中,,if,语句有,3,种格式。,(1),单分支,if,语句:,if,条件,语句组,end,当条件成立时,则执行语句组,执行完之后继续执行,if,语句的后继语句,若条件不成立,则直接执行,if,语句的后继语句。,(2),双分支,if,语句:,if,条件,语句组,1,else,语句组,2,end,当条件成立时,执行语句组,1,,否则执行语句组,2,,语句组,1,或语句组,2,执行后,再执行,if,语句的后继语句。,例,3-4,计算分段函数的值。,程序如下:,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,当表达式的值等于表达式,1,的值时,执行语句组,1,,当表达式的值等于表达式,2,的值时,执行语句组,2,,,,当表达式的值等于表达式,m,的值时,执行语句组,m,,当表达式的值不等于,case,所列的表达式的值时,执行语句组,n,。当任意一个分支的语句执行完后,直接执行,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-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.3,函数文件,3.3.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;,3.3.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-16,利用函数的递归调用,求,n,!。,n!,本身就是以递归的形式定义的:,显然,求,n!,需要求,(n-1)!,,这时可采用递归调用。递归调用函数文件,factor.m,如下:,function f=,factor(n,),if n2),求,Fibonacci,数列的第,20,项。,例,3-23,根据矩阵指数的幂级数展开式求矩阵指数。,3.5,程序调试,3.5.1,程序调试概述,一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。,程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。,3.5.2,调试器,1,Debug,菜单项,该菜单项用于程序调试,需要与,Breakpoints,菜单项配合使用。,2,Breakpoints,菜单项,该菜单项共有,6,个菜单命令,前两个是用于在程序中设置和清除断点的,后,4,个是设置停止条件的,用于临时停止,M,文件的执行,并给用户一个检查局部变量的机会,相当于在,M,文件指定的行号前加入了一个,keyboard,命令。,3.5.3,调试命令,除了采用调试器调试程序外,,MATLAB,还提供了一些命令用于程序调试。命令的功能和调试器菜单命令类似,具体使用方法请读者查询,MATLAB,帮助文档。,
展开阅读全文