资源预览内容
第1页 / 共55页
第2页 / 共55页
第3页 / 共55页
第4页 / 共55页
第5页 / 共55页
第6页 / 共55页
第7页 / 共55页
第8页 / 共55页
第9页 / 共55页
第10页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章 程序设计,5.1 M文件,5.2 数据的输入输出,5.3 选择结构,5.4 循环结构,5.5 函数文件,5.6 全局变量和局部变量,补充,程序设计注意事项:,1) 良好的代码习惯;,(1)变量名的定义简单易懂;,(2)程序结构流程清晰;,(3)详细的注释;,5.1 M文件,1)概念:用户把要实现的命令写在一个以m文件作为扩展名的文件中,然后由系统进行解释,运行出结果。,2)格式:函数式M文件和脚本式M文件。,(1)函数式M文件:第1句以Function语句作为引导;,(2)脚本式M文件:命令的简单叠加,与批处理文件类似。,5.1.1 基本概念,(3)相同之处:以m文件作为扩展名的文本文件,都不进入命令窗口,而是由文本编辑器来创建外部文本文件;,(4)不同之处:函数式M文件和脚本式M文件与MATLAB在通信方面不同; 脚本式M文件运行产生的所有变量都是全局变量; 而函数式M文件的所有变量除特别声明外,均是局部变量; 在MATLAB中的M文件绝大多数是函数式M文件。,5.1.2 M文件的建立与编辑,1.建立新M文件:,(1)菜单操作: MATLAB命令窗口的File菜单 New菜单项 M-file命令。,(2)命令操作: 输入命令edit。,(3)命令按钮操作: 单击命令窗口工具栏上的“新建”,2. 编辑已有M文件:,!注意:可在其它文本环境下编辑。,例5.1 建立一个脚本文件将变量a,b的值互换,然后运行该脚本文件。,1)首先建立脚本文件并以文件名exch.m存盘: clear; a=1:10; b=11,12,15,14;15,16,17,18; c=a; a=b; b=c; a b,2)然后,在MATLAB的命令窗口中输入exch,将会执行该脚本文件。,例5.2 建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。,1)首先建立函数文件fexch.m: function a,b=exch(a,b) c=a;a=b;b=c;,2)然后在命令窗口调用该函数文件: clear; x=1:10; y=11,12,15,14;15,16,17,18; x,y=fexch(x,y),5.1.3 M文件性能剖析,MATLAB提供的程序评述器可以记录程序中每一步的运行时间; 评述(profile)文件是提高文件运行的一种方法。,5.2 数据的输入输出,5.2.1 input函数,1)调用格式为: A=input(提示信息,选项);,2)说明: (1)提示信息为一个字符串,用于提示用户输入什么样的数据。 (2)如果在input函数调用时采用s选项,则允许用户输入一个字符串。,例如:想输入一个人的姓名,采用命令: xm=input(Whats your name?,s),5.2.2 disp函数,1)调用格式: disp(输出项),2)说明:输出项既可以为字符串,也可以为矩阵。,注意: 用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。,例5.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);,5.2.3 pause函数,1)调用格式:pause(延迟秒数),2)说明: (1)如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行; (2)若要强行中止程序的运行可使用Ctrl+C命令。,5.3 选择结构,5.3.1 if语句(3种格式),1.单分支if语句,1)语句格式: if 条件 语句组 end,2)说明:当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。,2.双分支if语句,1)语句格式: if 条件 语句组1 else 语句组2 end,2)说明:当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。,例5.4 计算分段函数值,x=input(请输入x的值:); if x=10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x); end,3.多分支if语句,1)语句格式: if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end,例5.5 输入一个字符:若为大写字母,则输出其后继字符;若为小写字母,则输出其前导字符;若为数字字符则输出其对应的数值;若为其他字符则原样输出。,c=input(请输入一个字符,s); if c=A end,5.3.2 switch语句,语句格式: switch 表达式 case 表达式1 语句组1 case 表达式2 语句组2 case 表达式m 语句组m otherwise 语句组m+1 end,例5.6 某商场对顾客所购买的商品实行打折销售,已知打折标准,求所售商品的实际销售价格。,price=input(请输入商品价格); switch fix(price/100) case 0,1 rate=0; case 2,5,4 rate=5/100; case num2cell(5:9) rate=5/100; case num2cell(10:24) rate=8/100; case num2cell(25:49) rate=10/100; otherwise rate=14/100; end price=price*(1-rate),5.3.3 try语句,1)语句格式: try 语句组1 catch 语句组2 end,2)说明: try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。这种试探性执行语句是其他高级语言所没有的。,例5.7 矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。,A=1,2,5;4,5,6; B=7,8,9;10,11,12; try C=A*B; catch C=A.*B; end C lasterr %显示出错原因,5.4 循环结构,5.4.1 for语句,1)语句格式: for 循环变量=表达式1:表达式2:表达式5 循环体语句 end,2)说明:,(1)首先计算三个表达式的值;,(2) 再将表达式1的值赋给循环变量,如果此时循环变量的值介于表达式1和表达式5的值之间,则执行循环体语句,否则结束循环的执行。执行完一次循环之后,循环变量自增一个表达式2的值;,(3)然后再判断循环变量的值是否介于表达式1和表达式5之间,如果满足仍然执行循环体,直至不满足为止。这时将结束for语句的执行,而继续执行for语句后面的语句。,例5.8 已知求y的表达式,当n=100时,求y的值。,程序如下: y=0; n=100; for i=1:n y=y+1/i/i; end y,在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作: n=100; i=1:n; f=1./i.2; y=sum(f),例5.9 求定积分,程序如下: a=0;b=3*pi; n=1000; h=(b-a)/n; x=a:h:b; f=exp(-0.5*x).*sin(x+pi/6); for i=1:n s(i)= (f(i)+f(i+1)*h/2 end s=sum(s),事实上,MATLAB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。,注意:for语句更一般的格式: for 循环变量=矩阵表达式 循环体语句 end,说明:执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。实际上,“表达式1:表达式2:表达式5”是一个仅为一行的矩阵(行向量),因而列向量是单个数据。,例5.10 已知5个学生4门功课的成绩,求每名学生的总成绩。,s=0; a=65,76,56,78; 98,85,74,85; 76,67,78,79; 98,58,42,75; 67,89,76,87; for k=a s=s+k; End disp(s);,5.4.2 while语句,1)格式: while (条件) 循环体语句 end,2)说明:,(1)执行过程:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环;,(2)与循环结构相关的还有一个break语句,当在循环体内执行到该语句时,程序将跳出循环。该语句一般与if语句配合使用。,例5.11 已知求y的表达式,当n=100时,求y的值。,y=0; i=1; while 1 f=1/i/i; y=y+f; if i=100 break; end i=i+1; end y,5.4.3 循环嵌套,1)如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,2)要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。,3)可跳出循环的指令有break和continue 在执行keyboard指令后需要返回正在执行程序的指令是return 。,例5.12 用筛选法求某自然数范围内的全部素数。,程序如下: m=input(m=); p=2:m; for i=2:sqrt(m) n=find(rem(p,i)=0 end p,5.5 函数文件,5.5.1 函数文件的基本结构,1)函数文件由function语句引导;,2)基本结构:function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句,(1)函数文件名: 函数文件名与函数名可以不相同;当两者不同时,MATLAB将忽略函数名而确认函数文件名,故调用时使用函数文件名。,(2) 注释说明部分: 紧随函数文件引导行之后以%开头的第一 注释行; 第一注释行及之后连续的注释行; 与在线帮助文本相隔一空行的注释行。,3)说明:,例5.13 编写函数文件求半径为r的圆的面积和周长。,function s,p=fcircle(r) %CIRCLE calculate the area and perimeter of a circle of radil r %r 圆半径 %s 圆面积 %p 圆周长 s=pi*r*r; p=2*pi*r; 将以上函数文件以文件名fcircle.m存入c:matlabwork下,然后在MATLAB命令窗口调用该函数: s,p=fcircle(10),5.6 全局变量和局部变量,1)定义:命令global;,2)说明:函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。,例5.17 全局变量应用示例,1)先建立函数文件wadd.m,该函数将输入的参数加权相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y;,2)在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号