MATLAB程序设计实用教案_第1页
MATLAB程序设计实用教案_第2页
MATLAB程序设计实用教案_第3页
MATLAB程序设计实用教案_第4页
MATLAB程序设计实用教案_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4 4章章 MATLAB MATLAB程序设计程序设计(chn x (chn x sh j)sh j)uM文件的概念(ginin)与基本操作u MATLAB程序控制结构u MATLAB函数文件u MATLAB程序调试第1页/共42页第一页,共43页。 MatLab命令有两种执行方式:一种是交互式命令执行方式,另一种是M文件的程序执行方式。命令执行方式即“所见即所得”的方式,在命令窗口中逐条输入命令,MatLab逐条解释执行,同时输出结果。这种方式简单、直观,但速度慢,且执行过程不能保留。当某些操作需要反复执行时,更感到不便。程序执行方式是将有关命令编成程序存储在一个文件中(称为M文件),当

2、运行该程序时,matLab将自动依次(yc)执行该文件中的命令,直至全部命令执行完毕。以后需要这些命令时,只需再次运行该程序。4.1 M文件(wnjin)4.1.1 M文件的分类 用MATLAB语言编写的程序,称为M文件。实际上,MatLab提供的内部函数以及各种工具箱,都是利用MatLab开发的M文件。M文件可以根据调用方式(fngsh)的不同分为两类:命令文件(Script File)和函数文件(Function File)。第2页/共42页第二页,共43页。命令文件和函数文件的主要区别:1、命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可以返回输出参数;2、命令文件

3、对MatLab工作(gngzu)空间中的变量进行操作,文件中所有命令的执行结果也返回到工作(gngzu)空间中,而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除;3、命令文件可以直接运行,在MatLab命令窗口输入命令文件的名字,就会顺序执行命令文件中的命令,而函数文件不能直接运行,而要以函数调用的方式调用它。例4.1 分别建立命令文件和函数(hnsh)文件,将变量a,b的值互换。第3页/共42页第三页,共43页。程序1:建立命令(mng lng)文件exch.mclear;a=1:10;b=11:18;c=a;a=b;b=c;然后在命令窗口(chungku)中输入: e

4、xch a,b程序2:建立(jinl)函数文件fexch.mfunction a,b=fexch(a,b)c=a;a=b;b=c;然后在命令窗口调用该函数文件: clear a=1:10,b=11:18 a,b=fexch(a,b)比较这两种文件的主要区别,哪一种形式更具通用性?第4页/共42页第四页,共43页。4.1.2 M文件的建立(jinl)与打开M文件是文本文件,可以用任何文本编辑器来建立(jinl)和编辑。最常用的方式是用MatLab自带的程序编辑器。1建立新的M文件为建立新的M文件,启动MATLAB文本编辑器有3种方法:(1) 菜单操作(cozu),在MatLab主菜单中选File

5、NewM-file(2) 命令操作(cozu),在MATLAB命令窗口输入命令edit(3) 命令按钮操作(cozu),单击MATLAB主窗口工具栏上的 按钮2打开已有的M文件打开已有的M文件,也有3种方法:(1)菜单操作:FileOpen(2) 命令操作,在MATLAB命令窗口输入命令edit(3) 命令按钮操作:按 按钮第5页/共42页第五页,共43页。4.2 程序控制(chngxkngzh)结构程序的控制结构有三种:顺序结构、选择(xunz)结构和循环结构4.2.1 顺序结构1数据的输入从键盘输入数据,则可以使用input函数来进行,该函数的调用(dioyng)格式为: A=input(

6、提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在input函数调用(dioyng)时采用s选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令: xm=input(Whats your name?,s)2数据的输出MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为 : disp(输出项)其中输出项既可以为字符串,也可以为矩阵。第6页/共42页第六页,共43页。例4.2 输入x,y的值,并将它们的值互换后输出(shch)。 程序如下: x=input(Input x please.); y=input(Input y please

7、.); z=x; x=y; y=z; disp(x); disp(y);例4.3 求一元二次方程 的根。 程序(chngx)如下: 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);02cbxax第7页/共42页第七页,共43页。3程序的暂停 当程序运行时,为了查看程序的中间结果或者观看输出的图形,有时需要暂停程序的执行,这时可以使用pause函数,调用格式为: pause(延迟(

8、ynch)秒数) 如果省略延迟(ynch)时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。 若要强行中止程序的运行可使用Ctrl+C命令。4.2.2 选择(xunz)结构 选择结构是根据(gnj)给定的条件成立或是不成立,分别执行不同的语句。MatLab用于实现选择结构的语句有if语句、switch语句和try语句。第8页/共42页第八页,共43页。1if语句 在MATLAB中,if语句有3种格式。 (1) 单分支(fnzh)if语句: if 条件 语句组 end 当条件成立时,则执行语句组,执行完之后(zhhu)继续执行end语句后面的语句,若条件不成立,则直接执行e

9、nd语句后面的语句。例如,当x是整数矩阵时,输出(shch)x的值,否则不输出(shch),语句如下 x=input(value x:); if fix(x)=x disp(x); end第9页/共42页第九页,共43页。(2) 双分支if语句(yj): if 条件 语句(yj)组1 else 语句(yj)组2 end例4.4 计算分段(fn dun)函数当条件成立(chngl)时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行end语句的后继语句。22() 01ln(1) 0 2exxyxxxx=input(请输入x的值:);if x=A & c=a& c=0& c=9 d

10、isp(abs(c)-abs(0);else disp(c);end第11页/共42页第十一页,共43页。2switch语句 switch语句根据(gnj)表达式的取值不同,分别执行不同的语句switch 表达式 case 表达式1 语句(yj)组1 case 表达式2 语句(yj)组2 case 表达式m 语句(yj)组m otherwise 语句(yj)组n endcase子句(z j)后面的表达式还可以是一个集合,当表达式的值等于集合中元素时,执行相应语句组。第12页/共42页第十二页,共43页。例4.6 某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示(bio

11、sh): price200 没有折扣 200price500 3%折扣 500price1000 5%折扣 1000price2500 8%折扣 2500price switch fix(price/100) case0,1 rate=0; case2,3,4 rate=3/100; case num2cell(5:9) rate=5/100; otherwise rate=15/100; end price=price*(1-rate) price = 570 price200 没有(mi yu)折扣 200price500 3%折扣 500price1000 5%折扣 1000price2

12、500 8%折扣 2500price 0) sum mean=sum/n %输入(shr)数据的平均值end第19页/共42页第十九页,共43页。例4.12 利用迭代公式 计算正数(zhngsh)C的算术平方根 的近似值,如取C=10,要求误差不超过11()2kkkCxxxC12103break语句(yj)和continue语句(yj) 与循环(xnhun)结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。break语句用于终止循环(xnhun)的执行。当在循环(xnhun)体内执行到该语句时,程序将跳出循环(xnhun),继续执行循环(xnhun)语句的下一

13、语句。continue语句控制跳过循环(xnhun)体中的某些语句。当在循环(xnhun)体内执行到该语句时,程序将跳过循环(xnhun)体中所有剩下的语句,继续下一次循环(xnhun)。例4.13 求100,200之间第一个能被21整除的整数。第20页/共42页第二十页,共43页。 for n=100:200 if rem(n,21)=0 continue end break end n n = 105 for n=100:200 if rem(n,21)=0 break end end n n = 105第21页/共42页第二十一页,共43页。练习(linx)1)求100,200之间前两个

14、(lin )能被21整除的整数。2)求100,200之间第二个能被21整除的整数。第22页/共42页第二十二页,共43页。 1)k=0; for n=100:200 if rem(n,21)=0 disp(n); k=k+1; if k=2 break end end end 105 126 2)for n=100:200 if rem(n,21)=0 k=k+1; if k=2 disp(n); break end end end 126第23页/共42页第二十三页,共43页。 k=0; for n=100:200 if rem(n,21)=0 disp(n); k=k+1;continue

15、 if k=2 break end end end 105 126 147 168 189第24页/共42页第二十四页,共43页。4循环(xnhun)的嵌套如果一个循环结构(jigu)的循环体又包括一个循环结构(jigu),就称为循环的嵌套,或称为多重循环结构(jigu)。例4.14 若一个(y )数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求1,500之间的全部完数。 for m=1:500 s=0; for k=1:m/2 if rem(m,k)=0 s=s+k; end end if m=s disp(m); end end 6 28 496第25页/共42

16、页第二十五页,共43页。例4.15 用筛选法求某自然数范围(fnwi)内的全部素数。 m=input(m=); m=15 p=1:m;p(1)=0; for i=2:sqrt(m) for j=2*i:i:m p(j)=0; end end n=find(p=0); p(n) ans = 2 3 5 7 11 13用筛选法求素数的基本思想(sxing)是:要找出2m之间的全部素数,首先在2m中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数(不包括5),直到再划去不超过 的倍数,剩下的数都是素数。m第26页/共42页第二十六页,共43页。改进(gijn) m

17、=input(m=); m=15 p=2:m; for i=2:sqrt(m) n=find(rem(p,i)=0&p=i); p(n)=; end p p = 2 3 5 7 11 13第27页/共42页第二十七页,共43页。4.3 函数(hnsh)文件4.3.1 函数文件(wnjin)的基本结构 函数文件(wnjin)由function语句引导,其基本结构为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 其中以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则(guz)与变量名相同。输入形参为函数的输入参数,输出形参为函数的输

18、出参数。当输出形参多于一个时,则应该用方括号括起来。说明:函数文件名应尽量与函数名相同,以免出错;以%开始到该行结束的部分均视为注释部分,主要用于对函数的功能和使用方法进行说明,不参与运算;如果在函数文件中出现return语句,则执行到该语句时就结束函数的执行,程序流程返回到调用该函数的位置。第28页/共42页第二十八页,共43页。例4.16 编写(binxi)函数文件求半径为r的圆的面积和周长。function s,p=fcircle(r)%CIRCLE calculate the area and perimeter of a circle of radii r%r 圆半径(bnjng)%

19、s 圆面积%p 圆周长 %2012年9月5日编%作者:wqhs=pi*r*r;p=2*pi*r;在命令窗口(chungku)输入: s,p=fcircle(10) help fcircle第29页/共42页第二十九页,共43页。4.3.2 函数调用函数调用的一般(ybn)格式是: 输出实参表=函数名(输入实参表) 要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。例4.17 利用函数文件,实现(shxin)直角坐标(x,y)与极坐标(,)之间的转换。函数(hnsh)文件tr

20、an.m:function rho,theta=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用函数tran.m: rho,the=tran(5,3)第30页/共42页第三十页,共43页。 在MATLAB中,函数可以嵌套调用,即一个(y )函数可以调用别的函数,甚至调用它自身。一个(y )函数调用它自身称为函数的递归调用。例4.18 利用函数(hnsh)的递归调用,求n!递归调用函数文件factor.m如下:function f=factor(n)% 求正整数n的阶乘(ji chn) n!if ntol y=y+s; n=n+1;s=1/factor(

21、n);end function fact=factor(n)fact=prod(1:n);第32页/共42页第三十二页,共43页。4.3.3 函数参数的可调性 在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确(zhnqu)地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。例4.20 nargin用法示例,函数(hnsh)文件examp.m:function fout=charray(a,b,c)if nargin=1 fout=a;elseif nargin=2 f

22、out=a+b;elseif nargin=3 fout=(a*b*c)/2;end 在命令窗口(chungku)进行测试:x=1:3;y=1;2;3;examp(x)examp(x,y)examp(x,y,3)第33页/共42页第三十三页,共43页。4.3.4 全局变量与局部变量 在MatLab中函数文件中的变量是局部的,与其他函数文件及MatLab工作空间相互隔离,即在一个函数文件中定义的变量不能被另一个函数文件引用。如果(rgu)希望把函数文件里的某个变量的值传递给其他文件,可以定义该变量为全局标量。全局变量的作用域是整个工作空间,即全程有效,所有的函数文件都可以对它进行存储和修改。因此

23、定义全局变量是函数间传递信息的一种手段。全局变量用global命令(mng lng)定义,格式为: global 变量名 在实际编程时,在所有需要使用全局变量的函数里定义全局变量,如果要在基本工作空间中使用全局变量,也要定义。全局变量的定义要放在变量使用之前,为了便于管理,一般放在文件(wnjin)的前部.第34页/共42页第三十四页,共43页。 例如(lr) function fun=sub(z) global x x=x+z; x=1:5;y=2:6;sub(y);第35页/共42页第三十五页,共43页。4.4 程序调试4.4.1 程序调试概述 一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行(ynxng)时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。 程序运行(ynxng)时的错误是指程序的运行(ynxng)结果有错误,这类错误也称为程序逻辑错误。 MatLab能够检查出大部分的语法错误,给出相应的错误信息,并标出错误在程序中的行号。但是,对

温馨提示

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

评论

0/150

提交评论