[计算机软件及应用]第5章 MATLAB程序设计.ppt_第1页
[计算机软件及应用]第5章 MATLAB程序设计.ppt_第2页
[计算机软件及应用]第5章 MATLAB程序设计.ppt_第3页
[计算机软件及应用]第5章 MATLAB程序设计.ppt_第4页
[计算机软件及应用]第5章 MATLAB程序设计.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章 程序设计,5.1 M文件,5.2 数据的输入输出,5.3 选择结构,5.4 循环结构,5.5 函数文件,5.6 全局变量和局部变量,补充,程序设计注意事项:,1) 良好的代码习惯;,(1)变量名的定义简单易懂;,(2)程序结构流程清晰;,(3)详细的注释;,2) 与其它高级语言区别:,(1) 交互式语言,解释性语言;,(2) 矩阵运算的思想;,(3) 号表示续行;,3) 编程积累,(1)在实践中积累,(2)注重交流,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),补充:,1、Matlab预定义变量Inf和nargin的含义分别是无穷大、函数输入总量数。 2、eps是机器阈值:比2小的最大数是2-eps ;比2大的最小数是2+eps; alpha(v):对面、块、象三种图形对象的透明度加以控制; 控制浓淡的函数shading函数; Matlab预定义变量realmin和eps的含义分别是最小正实数、机器零阈值 ; NaN是非数,inf+NaN ?0/0+1 ?inf-inf ?inf/inf ?,编程综合练习,指令阅读 有指令如下: clear syms w X t u v x y k=sym(4) A=sin(x)+k+u*w*v 则findsym(A,1),findsym(A,2),findsym(A)三条指令的执行结果分别是什么?,编程综合练习,findsym(A,1) x findsym(A,2) x,w findsym(A) u, v, w, x,编程综合练习,程序阅读 clear x=1:4 y=linspace(1,2,2) X,Y=meshgrid(x,y) 则如下三个指令的运算结果分别是什么? X+Y X*(Y) X.*Y,编程综合练习,X+Y ans = 2 3 4 5 3 4 5 6 X*(Y) ans = 10 20 10 20 X.*Y ans = 1 2 3 4 2 4 6 8,编程综合练习,指令阅读 如下指令执行后q1、q2、q3、q4、q5、q6的值分别是什么? clear a=1;b=2;c=3;d=4; Mn=a,b;c,d Mc=a,b;c,d Ms=sym(Mc) q1=size(Mn) q2=size(Mc) q3=size(Ms) q4=class(Mn) q5=class(Mc) q6=class(Ms),编程综合练习,指令阅读 q1 = 2 2 q2 = 1 9 q3 = 2 2 q4 = double q5 = char q6 = sym,clear A=zeros(2,4) A(:)=2:2:16 q1=A(2,3) q2=A(6) q3=A(end-3) q4=A(:,1,4) q5=A(:,4:end) iL1=A12 A(iL2)=NaN q6=A 运算结束后,q1、q2、q3、q4、 q5 q6的结果分别是什么?,clear A=zeros(2,6); A(:)=1:12; q1=A(2,5); q2=A(7); q3=A(:,1,4); q4=A(1,2,5); q5=A(:,4:end) q6=A(2,1:2:5)=-1,-3,-5 运算结束后,A、q1、q2、q3、q4、q5、q6的结果分别是什么?,clear A=1:9 B=10-A r0=(A6) r1=(A=B) 则执行后A、B、r0、r1的运算结果分别是什么,?上机,clear x=(2:5)-3 y=find(x2) 请写出x、y的计算结果,clear syms a b t u v x y A=a+b*x,sin(t)+u;x*exp(-t),log(y)+v 则findsym(A,1),findsym(A,2),findsym(A)三条指令的执行结果分别是什么,编程综合练习,如下指令执行后,数组A、变量q1、q2的值分别是什么? clear A=reshape(1:19,1,7) A(:,1,2)= q1=all(A(A10) q2=any(A(A12),使用Matlab函数plot绘制一个圆(圆心处x、y都是0,半径为2),要求:a、图形有标题(标题为圆的直径);b、圆为红色细实线;c、纵横坐标轴等长刻度;d、对坐标轴进行标注,横轴标注“X”,纵轴标注“Y”;e、在圆心或其附近绘制一个十字符,并用向上箭头指向圆心并标明“圆心”二字。,参考程序: clear; clf; x=(-2:0.05:2); y1=(4-x.2).(0.5); y2=-(4-x.2).(0.5); plot(x,y1,-r); hold on; plot(x,y2,-r); axis equal;,title(4); xlabel(X); ylabel(Y); plot(0,0,+); c_s1=uparrow; c_s2=圆心; text(0,-0.25,c_s); hold off,给定某函数,在0,10内绘制此函数的曲线。采样间隔可取0.05。要求:1)使用蓝色虚点线;2)加图形标题“测试”;3)添加X、Y轴说明,分别为“t”和“y”;4)在t=5处绘制一个红色米字符,并绘制一向上箭头指向该米字符,并标注“中点”。,clear; clf; t=0:0.05:10; y=1-exp(-0.4*t).*cos(2*t); plot(t,y,.b); title(测试); xlabel(t); ylabel(y); hold on plot(5,1-exp(-0.4*5)*cos(2*0.5),r*); c_s1=uparrow; c_s2=中点; text(5,0.9-exp(-0.4*5)*cos(2*0.5),c_s); hold off,编制满足如下要求的程序:程序启动后进入循环,提示用户输入一个整数(假设用户输入正确整数而非其它字符),若数字超过26或小于0,输出“不是字母”;若数字在26以内,则按照字母表顺序输出该数字对应的小写字母,并等待2秒后进入下一个循环,若用户输入数字“0”,则退出程序;当程序连续输出5个以上字母后,也可以退出程序;不论何时程序退出,推出前都要提示用户按任意键退出,用户按键后方可结束程序。,clear; clc; zmb=abcdefghijklmnopqrstuvwxyz; zmnum=0; while(1) sz=input(请输入一个数字:); if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论