1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,MATLAB,程序设计,M,文件编写与调试,交互式的命令行工作方式,M,文件的程序工作方式,脚本文件,(,命令文件,),函数文件,两类,M,文件,MATLAB,两种工作方式,6.1,脚本文件,脚本文件(命令文件)是将需要运行的命令编辑到一个命令文件中。,在,MATLAB,命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。,脚
2、本文件没有输入参数,也不返回输出参数。,1.input,函数:,用于向计算机输入一个参数。,调用格式:,A=input(,提示信息,,,选项,),;,注:,s,选项,则允许用户输入一个字符串。,例如想输入一个人的姓名,可采用命令,xm,=,input(Whats,your,name:,s,),数据的输入,【,例,1】,求一元二次方程,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),将该程序以,a1.m,文件存盘,然后运行
3、a1.m,文件。,2,pause,函数:,暂停程序的执行。,调用格式:,pause(,延迟秒数,),注:如果省略延迟时间,直接使用,pause,,,则将暂停程序,直到用户按任一键后程序继续执行。,hold on%,图形迭加,axis(0,100,0,120);%,设置坐标轴,k=0;A=0,0;%,导弹初始位置,B=0,100;%,飞机初始位置,v=1;dt=1;%,离散时间改变量,d=100;%,相距距离,while d0.5,plot(A(1),A(2),r.,);%,画导弹位置,plot(B(1),B(2),b*,);%,画飞机位置,pause(0.2);,k=k+1;,B=,B+v,
4、dt,0;%,飞机移动位置,e=B-A;%,导弹指向飞机向量,d=,norm(e,);e0=,e/d,;%,取向量方向(单位化),A=A+2.0*v*,dt,*e0;%,导弹追击位置,end,a2.m,【,例,2】,数据的输出,3,disp,函数:,命令窗口输出函数。,调用格式:,disp,(,输出项,),注:输出项为字符串或矩阵。,【,例,3】,A=,Hello,MATLAB,;,disp(A,),%,输出为:,Hello,MATLAB,程序结构:,顺序结构,MatLab,程序运算顺序,选择结构(分支结构),If,条件,表达式,;,else(if,),表达式,;endSwitch,表达式,
5、case,表达式,,otherwise,end,循环结构,For,变量,=,表达式,循环语句,;endWhile,条件,语句,;end,6.1.1 MATLAB,的程序结构,【,例,4】if,语句运用举例:输入三角形的三条边,求面积。,A=input(,请输入三角形的三条边:,);,if A(1)+A(2)A(3)&A(1)+A(3)A(2)&A(2)+A(3)A(1),p=(A(1)+A(2)+A(3)/2;,s=,sqrt(p,*(p-A(1)*(p-A(2)*(p-A(3);,disp(s,);,else,disp,(,不能构成一个三角形。,),end,%,运行:请输入三角形的三条边:
6、4 5 6,a4.m,程序结构,:if,选择结构,【,例,5】switch,语句运用举例:根据变量,num,的值来决定显示的内容。,num=input(,请输入一个数,);,switch num,case-1,disp(I,am a teacher.);,case 0,disp(I,am a student.);,case 1,disp(You,are a teacher.);,otherwise,disp(You,are a student.);,end,a5.m,程序结构,:switch,选择结构,实现循环结构的语句:,1,for,语句:,格式:,for,循环变量,=,表达式,1:,表达
7、式,2:,表达式,3,循环体语句,end,注:其中表达式,1,的值为循环变量的初值,表达式,2,的值为步长,表达式,3,的值为循环变量的终值。步长为,1,时,表达式,2,可以省略。,2,while,语句,格式:,while(,条件,),循环体语句,end,程序结构,:,循环结构,【,例,6】,循环语句应用举例:计算满足表达式,的最大,y,、,n,值。,i,为正整数。,y=0;i=1;,while 1,%,循环的条件为,1,。本例循环条件总是满足的,是个永真循环,f=1/(2*i-1);,y=,y+f,;,if y3,break;,end,i=i+1;,end,n=i-1,y=,y-f,Brea
8、k,语句,break,语句常用在,for,或,while,循环语句中,一般与,if,语句一起使用。其作用是当满足,if,语句时,在循环尚未结束时,跳出当前循环,。在嵌套循环中,,break,只能跳出包含它的最内层循环。,程序结构,:while,循环结构,Continue,语句,continue,也常和,if,语句一起用在,for,或,while,循环中。其作用是当满足,if,语句时,跳过循环体内位于,continue,之后的那些尚未执行的语句,,执行下一次循环的判断。(但不会跳出当前循环),循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,多重循环
9、的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。,【,例,7】,多重循环结构举例:求,100,1000,以内的全部素数。,n=0;,for m=100:1000,flag=1;j=m-1;i=2;,while i=j&flag,if,rem(m,i,)=0,%,绝对值求余数,比较,mod(-5,3),flag=0;,end,i=i+1;,end,if flag,n=n+1;,prime(n,)=m;,%,变量,prime,存放素数,end,end,prime,a7.m,程序结构,:,多重循环结构,6.2,函数文件,函数
10、文件:每一个函数文件都定义一个函数。,MATLAB,提供的标准函数大部分都是由函数文件定义的。函数文件可以输入参数,也可返回输出参数。,与脚本(命令)文件不同,函数文件犹如一个“黑箱”,把一些数据送入处理,再把结果送出来。,MATLAB,提供的函数指令大部分都是由函数文件组成。,1,函数文件格式,函数文件由,function,语句引导,其格式为:,function,输出形参表,=,函数名,(,输入形参表,),注释说明部分,函数体,注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。如果输出形参个数多于,1,,则应该用方括号括起来。,2,函数文件调用,函数调
11、用的一般格式是:,输出实参表,=,函数名,(,输入实参表,),function Yd=,DYdt(t,Y,)%,输入量,global G ME%,定义全局变量,xy,=Y(1:2);Vxy=Y(3:4);%,global G ME,G=6.672e-11;ME=5.97e24;,.,t,YY,=ode45(DYdt,tspan,Y0);%,采用,4,、,5,阶,Runge-Kutta,法,结构形式上:,函数文件的第一行总是以“,function”,引导,称为,函数申明行,。,该行以关键字,function,开头,函数名以及函数的输入输出变量都在这一行被定义。,函数申明行之后以,%,开头的第一行
12、称,注释行,。这行供,lookfor,关键字查询。,第一注释行及其之后的连续以,%,开头的所有注释行构成整个在线帮助文本。可通过,help,查询到,称为,帮助文本区,。,与在线帮助文本区相隔一个“空”行,也以,%,开头,标志编写及修改该,M,文件的作者和日期,称为,编写和修改记录,。,接下来是,函数体,。,为清晰起见,它与前面的注释行以“空”格隔开。,6.2.1,函数文件的结构与特点,function Yd=,DYdt(t,Y,)%,输入量,global G ME%,定义全局变量,xy,=Y(1:2);Vxy=Y(3:4);%,r=sqrt(sum(xy.2);%,Yd=,Vxy,;-G*ME
13、xy/r3;%,计算,Y(t,),运行上与脚本文件运行不同:,-,脚本文件运行后,所产生的所有变量都驻留在,MATLAB,基本工作空间,(,Base workspace,),中,。,只要用户不使用清除指令(,clear,),,MATLAB,指令窗不关闭,这些变量将,一直保存,在基本工作空间中。,-,函数文件运行时,,MATLAB,专门为它开辟一个临时工作空间,称为,函数工作空间,(,Function workspace,)。当执行文件最后一行指令时,就结束该函数文件的运行,同时该,临时,函数工作空间及其所有的中间变量就会立即被清除。,6.2.1,函数文件的结构与特点,6.2.2,函数文件调用
14、调用格式:,输出实参表,=,函数名,(,输入实参表,),函数调用时各,实参,出现的顺序、个数,应与函数定义时,形参,的顺序、个数一致,否则会出错。调用时先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。,函数调用可以嵌套,一个函数可以调用别的函数,甚至可以调用它自己(递归调用)。,文件名与函数名必须一一对应,这样才能保证调用成功。如果函数名和文件名不一致时以文件名为主,【,例,8】,编写函数文件求小于任意自然数,n,的,Fibonacci,数列。,function f=,ffib(n,),%,用于求,Fibonacci,数列的函数文件,%f=,ffib(n,),%1999,年
15、30,日编,f=1,1;,i=1;,while f(i)+f(i+1),ffib(2000),函数文件编写与调用,【,例,9】,利用函数文件,实现直角坐标,(x,y),与极坐标,(,),之间的转换。,函数文件,tran.m,:,function,gama,theta,=,tran(x,y,),gama,=,sqrt(x,*x+y*y);,theta=,atan(y/x,);,转换公式:,极坐标的矢径:,=,极坐标的幅角:,tg,(,)=,y/x,命令窗口直接调用:,g,th,=tran(1,2),函数文件编写与调用,调用文件,main1.m,:,x=input(Please input x=:);,y=input(Please input y=:);,gam,the=,tran(x,y,);,gam,the,main1,






