资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,第二讲,MATLAB,程序设计,MATLAB,有两种工作方式:,交互式的命令行工作方式,M,文件的程序工作方式,一.,M,文件,一.,M,文件,用,MATLAB,语言编写的程序,称为,M,文件。,M,文件有两类:命令文件和函数文件。,命令文件:没有输入参数,也不返回输出参数。,函数文件:可以输入参数,也可返回输出参数。,M,文件的建立与编辑,建立新的,M,文件:,从,MATLAB,命令窗口的,File,菜单中选择,New,菜单项,再选择,M-file,命令。,一.,M,文件,编辑已有的,M,文件:,从,MATLAB,命令窗口的,Flie,菜单中选择,Open M-file,命令。,命令文件,将需要运行的命令编辑到一个命令文件中,然后在,MATLAB,命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。,【例1】,建立一个命令文件将变量,a,b,的值互换。,一.,M,文件,e31m,文件,:,a=1:9;,b=11,12,13;14,15,16;17,18,19;,c=a;a=b;b=c;,a,b,在,MATLAB,的命令窗口中输入,e31,,将会执行该命令文件。,二数据的输入输出,1.,input,函数:,用于向计算机输入一个参数。,调用格式:,A=input(,提示信息,选项);,注:,s,选项,则允许用户输入一个字符串。,例如想输入一个人的姓名,可采用命令,xm,=input(,Whats,your name:,s),【,例2】,求一元二次方程,a,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),将该程序以,aa,.m,文件存盘,然后运行,aa,.m,文件。,2,pause,函数:,暂停程序的执行。,调用格式:,pause(,延迟秒数),注:如果省略延迟时间,直接使用,pause,,则将暂停程序,直到用户按任一键后程序继续执行。,二数据的输入输出,3,disp,函数:,命令窗口输出函数。,调用格式:,disp,(,输出项),注:输出项为字符串或矩阵。,例如,A=Hello,MATLAB;,disp,(A),输出为:,Hello,MATLAB,三程序设计,(一)选择结构,选择结构的语句有,if,语句和,switch,语句。,1,if,语句,格式一:,if,条件,语句组,end,三程序设计,格式二:,if,条件,语句组1,else,语句组2,end,(一)选择结构,格式三:,if,条件1,语句组1,elseif,条件2,语句组2,elseif,条件,m,语句组,m,else,语句组,m+1,end,三程序设计,【例4】输入三角形的三条边,求面积。,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,运行:请输入三角形的三条边:4 5 6,9.9216,三程序设计,(一)选择结构,【例5】输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。,c=input(,s);,if c=A&c=a&c=z,disp,(,setstr,(,abs,(c)-1);,else,disp,(c);,end,三程序设计,(一)选择结构,2,switch,语句,switch,语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为:,switch,表达式,case,值1,语句组1,case,值2,语句组2,case,值,m,语句组,m,otherwise,语句组,m+1,end,三程序设计,(一)选择结构,【例6】根据变量,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,三程序设计,(一)选择结构,(二)循环结构,实现循环结构的语句:,for,语句和,while,语句。,1,for,语句:,格式:,for,循环变量=表达式1:表达式2:表达式3,循环体语句,end,注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。,三程序设计,2,while,语句,格式为:,while(,条件),循环体语句,end,【,例7】,根据例3.6中求,y,的表达式,求:,(1),y3,break;,end,i=i+1;,end,n=i-1,y=y-f,三程序设计,(二)循环结构,3 循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。,三程序设计,(二)循环结构,【例8】,求100,1000以内的全部素数。,n=0;,for m=100:1000,flag=1;j=m-1;,i=2;,while i=j&flag,if,rem,(m,i)=0,flag=0;,end,i=i+1;,end,if flag,n=n+1;,prime(n)=m;,end,end,prime%,变量,prime,存放素数,三程序设计,(二)循环结构,四函数文件,函数文件是另一种形式的,M,文件,每一个函数文件都定义一个函数。事实上,,MATLAB,提供的标准函数大部分都是由函数文件定义的。,四.,函数文件,1函数文件格式,函数文件由,function,语句引导,其格式为:,function,输出形参表=函数名(输入形参表),注释说明部分,函数体,注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。,【例9】,编写函数文件求小于任意自然数,n,的,Fibonacci,数列各项。,function f=,ffib,(n),%,用于求,Fibonacci,数列的函数文件,%,f=,ffib,(n),%1999,年9月30日编,f=1,1;,i=1;,while f(i)+f(i+1)n,f(i+2)=f(i)+f(i+1);,i=i+1;,end,将以上函数文件以文件名,ffib,.m,存盘,然后在,MATLAB,命令窗口输入以下命令,可求小于2 000的,Fibonacci,数。,ffib,(2000),四.,函数文件,2函数调用,函数文件编制好后,就可调用函数进行计算了。如上面定义,ffib,函数后,调用它求小于2000的,Fibonacci,数。,函数调用的一般格式是:,输出实参表=函数名(输入实参表),四.,函数文件,【例10】,利用函数文件,实现直角坐标(,x,y),与极坐标(,),之间的转换。,函数文件,tran,.m:,function,gama,theta=,tran,(x,y),gama,=,sqrt,(x*x+y*y);,theta=,atan,(y/x);,调用,tran,.m,的命令文件,main1.m:,x=input(Please input x=:);,y=input(Please input y=:);,gam,the=,tran,(x,y);,gam,the,已知转换公式为:,极坐标的矢径:,=,极坐标的幅角:,=,四.,函数文件,【例11】,利用函数的递归调用,求,n!。,function f=factor(n),if n=1,f=1;,else,f=factor(n-1)*n;,end,return;%,返回,在命令文件,main2.m,中调用函数文件,factor.m:,for i=1:10,fac,(i)=factor(i);,end,fac,程序运行结果是:,fac,=,Columns 1 through 6 1 2 6 24 120 720 Columns 7 through 10,504 40320 362880 3628800,四.,函数文件,3 函数所传递参数的可调性,MATLAB,在函数调用上有一个与众不同之处:函数所传递参数数目的可调性。凭借这一点,一个函数可完成多种功能。,在调用函数时,,MATLAB,用两个永久变量,nargin,和,nargout,分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。,四.,函数文件,【例12】,nargin,用法示例,函数文件,examp,.m:,function,fout,=,charray,(a,b,c),if,nargin,=1,fout,=a;,elseif nargin,=2,fout,=a+b;,elseif nargin,=3,fout,=(a*b*c)/2;,end,命令文件,mydemo,.m:,x=1:3;y=1;2;3;,examp,(x),examp,(x,y),examp,(x,y,3),执行,mydemo,.m,后的输出是:,ans,=,1 2 3,ans,=,2 4 6,ans,=,21,四.,函数文件,五全局变量和局部变量,在,MATLAB,中,全局变量用命令,global,定义。函数文件的内部变量是局部的,与其他函数文件及,MATLAB,工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个,MATLAB,工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。,四.,函数文件,【例13】全局变量应用示例,先建立函数文件,wadd,.m,,该函数将输入的参数加权相加。,function f=,wadd,(x,y),%add two variable,global ALPHA BETA,f=ALPHA*x+BETA*y;,在命令窗口中输入:,global ALPHA BETA,ALPHA=1;,BETA=2;,s=,wadd,(1,2),输出为:,s=,5,习 题,1.输入20个数,求其中最大数和最小数。要求分别用循环结构和调用,MATLAB,的,max,函数、,min,函数来实现。,2.求,Fibonacci,数列,(1)大于4000的最小项。,(2)5000之内的项数。,3.写出下列程序的输出结果:,s=0;,a=12,13,14;15,16,17;18,19,20;21,22,23;,for k=a,for j=1:4,if,rem,(k(j),2)=0,s=s+k(j);,end,end,end,s,
展开阅读全文