资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,第二讲,MATLAB,程序设计,第1页,MATLAB有两种工作方式:,交互式命令行工作方式,M文件程序工作方式,第2页,一.M文件,第3页,一.,M文件,用MATLAB语言编写程序,称为M文件。,M文件有两类:命令文件和函数文件。,命令文件:没有输入参数,也不返回输出参数。即命令批处理文件,函数文件:能够输入参数,也可返回输出参数。,第4页,M文件建立与编辑,建立新M文件:,从MATLAB命令窗口File菜单中选择New菜单项,再选择M-file命令。,一.,M文件,编辑已经有M文件:,从MATLAB命令窗口Flie菜单中选择Open M-file命令。,第5页,命令文件,将需要运行命令编辑到一个命令文件中,然后在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,将会执行该命令文件。,第6页,二数据输入输出,第7页,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文件。,第8页,2 pause函数,:,暂停程序执行。,调用格式:pause(延迟秒数),注:假如省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。,二数据输入输出,3 disp函数:,命令窗口输出函数。,调用格式:disp(输出项),注:输出项为字符串或矩阵。,比如,A=Hello,MATLAB;,disp(A),输出为:Hello,MATLAB,第9页,三程序设计,第10页,(一)选择结构,选择结构语句有if语句和switch语句。,1 if语句,格式一:if 条件,语句组,end,三程序设计,格式二:if 条件,语句组1,else,语句组2,end,第11页,(一)选择结构,格式三:if 条件1,语句组1,elseif 条件2,语句组2,elseif 条件m,语句组m,else,语句组m+1,end,三程序设计,第12页,【例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,三程序设计,(一)选择结构,第13页,【例5】输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其它字符则原样输出。,c=input(,s);,if c=A&c=a&c=z,disp(setstr(abs(c)-1);,else,disp(c);,end,三程序设计,(一)选择结构,第14页,2 switch语句,switch语句依据变量或表示式取值不一样,分别执行不一样语句。其格式为:,switch 表示式,case 值1,语句组1,case 值2,语句组2,case 值m,语句组m,otherwise,语句组m+1,end,三程序设计,(一)选择结构,第15页,【例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,三程序设计,(一)选择结构,第16页,(二)循环结构,实现循环结构语句:for语句和while语句。,1 for语句:,格式:for 循环变量=表示式1:表示式2:表示式3,循环体语句,end,注:其中表示式1值为循环变量初值,表示式2值为步长,表示式3值为循环变量终值。步长为1时,表示式2能够省略。,三程序设计,第17页,2 while语句,格式为:,while(条件),循环体语句,end,【例7】,依据例3.6中求y表示式,求:,(1)y3,break;,end,i=i+1;,end,n=i-1,y=y-f,三程序设计,(二)循环结构,第19页,3 循环嵌套,假如一个循环结构循环体又包含一个循环结构,就称为循环嵌套,或称为多重循环结构。,多重循环嵌套层数能够是任意。能够按照嵌套层数,分别叫做二重循环、三重循环等。处于内部循环叫作内循环,处于外部循环叫作外循环。,三程序设计,(二)循环结构,第20页,【例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存放素数,三程序设计,(二)循环结构,第21页,四函数文件,第22页,函数文件是另一个形式M文件,每一个函数文件都定义一个函数。实际上,MATLAB提供标准函数大部分都是由函数文件定义。,四.,函数文件,1函数文件格式,函数文件由function语句引导,其格式为:,function 输出形参表=函数名(输入形参表),注释说明部分,函数体,注:其中函数名命名规则与变量名相同。输入形参为函数输入参数,输出形参为函数输出参数。当输出形参多于1个时,则应该用方括号括起来。,第23页,【例9】,编写函数文件求小于任意自然数nFibonacci数列各项。,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 000Fibonacci数。,ffib(),四.,函数文件,第24页,2函数调用,函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于Fibonacci数。,函数调用普通格式是:,输出实参表=函数名(输入实参表),四.,函数文件,第25页,【例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,已知转换公式为:,极坐标矢径:,极坐标幅角:,四.,函数文件,第26页,【例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,四.,函数文件,第27页,3 函数所传递参数可调性,MATLAB在函数调用上有一个与众不一样之处:函数所传递参数数目标可调性。凭借这一点,一个函数可完成各种功效。,在调用函数时,MATLAB用两个永久变量nargin和nargout分别统计调用该函数时输入实参和输出实参个数。只要在函数文件中包含这两个变量,就能够准确地知道该函数文件被调用时输入输出参数个数,从而决定函数怎样进行处理。,四.,函数文件,第28页,【例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,四.,函数文件,第29页,五全局变量和局部变量,第30页,在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,第31页,习 题,1.输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLABmax函数、min函数来实现。,2.求Fibonacci数列,(1)大于4000最小项。,(2)5000之内项数。,第32页,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,第33页,
展开阅读全文