1、第5章 程序设计第五章 程序设计5.1 M文件用MATLAB语言编写的程序称为M文件。包括命令文件和函数文件。命令文件:没有输入参数,也不返回输出参数。函数文件:可有输入参数,也可返回输出参数。使用File菜单建立新的M文件或编辑已有的M文件。1、命令文件由命令行序列组成的一个文本型文件,在MATLABd的命令窗口输入该命令文件的名字,就会顺序执行该命令文件中的命令。【例1】 建立一个命令文件将变量a,b的值互换。 E51m文件:a=1:9;b=11,12,13;14,15,16;17,18,19;c=a;a=b;b=c; %变量不要求先定义后使用,如Cab在MATLAB的命令窗口中输入e51
2、,将会执行该命令文件。5.2 数据的输入、输出1、input函数:用于向计算机输入一个参数。调用格式: A=input(提示信息,选项);注:s选项,则允许用户输入一个字符串。例如想输入一个人的姓名: xm=input(What is your name:,s)【例2】 求一元二次方程a2 +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)2、pause函数:暂停程序的执行。调用格式: pause(延迟秒数)注:如果省略延迟时间,直接使用pause,
3、则将暂停程序,直到用户按任一键后程序继续执行。3、disp函数:命令窗口输出函数。调用格式:disp(输出项)注:输出项为字符串或矩阵。【例3】: A=Hello,MATLAB; disp(A)输出为: Hello,MATLAB5.3 程序设计选择结构:选择结构的语句有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(请输入三角形的三条边
4、:);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); % sqrt开方 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 dis
5、p(c);end2、switch语句switch语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为:switch 表达式 case 值1 语句组1 case 值2语句组2 case 值m 语句组motherwise 语句组m+1end【例6】 根据变量 num 的值来决定显示的内容。num=input(请输入一个数);switch numcase -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.)
6、;end循环结构:for语句和while语句1、 for语句:格式: for 循环变量=表达式1:表达式2:表达式3 循环体语句 end注:表达式1:表达式2:表达式3为循环初值:步长:终值。缺省步长为12、while语句格式:while (条件) 循环体语句 end【例7】 设,求: (1)求y3 break; %跳出循坏体 end i=i+1;endn=i-1y=y-f3、 循环的嵌套【例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 % rem函数m除以 i
7、的余数 flag=0; end i=i+1; end if flag n=n+1; prime(n)=m; %变量prime存放素数 endendprime 5.4 函数文件函数文件是另一种形式的M文件,每一个函数文件定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。1、函数文件格式函数文件由function语句引导,其格式为:function 输出形参表=函数名(输入形参表) 注释说明部分 函数体注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。【例9】 编写函数文件求小于任意自然数
8、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命令窗口输入以下命令,可求小于2000的Fibonacci数。ffib(2000)2、函数调用函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。函数调用的一般格式是:输出实参表=函数名(输
9、入实参表)【例10】函数文件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; %令f(1)=1,转向rerurn语句 else f=factor(n-1)*n; %用参数 n-1 继续调用本函
10、数,直至f(1)。 end return; %返回,即退出本函数。 在命令文件main2.m中调用函数文件factor.m: for i=1:10 fac(i)=factor(i); end fac3 函数所传递参数的可调性MATLAB在函数调用上有一个与众不同之处:函数所传递参数数目的可调性。凭借这一点,一个函数可完成多种功能。在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入、输出参数个数,从而决定函数如何进行处理。【例12】 nargin用法示例函数文
11、件examp.m: function fout=examp(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 = 215.5 全局变量和局部变量在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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1