收藏 分销(赏)

第五章MATLAB程序设计教学内容.ppt

上传人:快乐****生活 文档编号:7832664 上传时间:2025-01-19 格式:PPT 页数:62 大小:460KB
下载 相关 举报
第五章MATLAB程序设计教学内容.ppt_第1页
第1页 / 共62页
第五章MATLAB程序设计教学内容.ppt_第2页
第2页 / 共62页
第五章MATLAB程序设计教学内容.ppt_第3页
第3页 / 共62页
第五章MATLAB程序设计教学内容.ppt_第4页
第4页 / 共62页
第五章MATLAB程序设计教学内容.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第五章MATLAB程序设计,5.1 M文件,MATLAB软件的使用有两种常用方式:,人机直接交互的命令行操作方式,MATLAB作为一种高级“数学演算和图视器”,M文件的编程工作方式,MATLAB作为一种高级计算机程序语言,不仅可以象C,FORTRAN等语言一样进行程序设计,而且由于其本身的特点,更具有语言简单、可读性强、调试容易、调用方便等其它语言无法比拟的优点。,5.1 M文件,为了编写、运行、调试和修改MATLAB程序的方便,可以把程序中的命令写入一个文本文件,当用户输入运行这个程序的指令时,程序中的命令就

2、由MATLAB按顺序逐条执行。,MATLAB可以识别的文本文件称为M文件,它可以用适当的文本编辑器创建,但其扩展名必须是“m”。即M文件的文件名应为:,*.m,。,MATLAB 环境下M文件的建立、编辑与保存,1.,建立新的M文件,(1)菜单操作:MATLAB命令窗口的File菜单,New,菜单项,M-file,命令。,(2)命令操作:在MATLAB命令窗口输入命令,edit,。,(3),快捷图标按钮操作,:单击MATLAB命令窗口工具栏上的“,New M-file,”命令按钮。,2.打开已有M文件的方法,(1)在MATIAB指令窗运行指令,edit filename,filename是待打开

3、文件名,可不带扩展名。,(2)点击MATLAB命令窗口工具栏上的相应图标,再从弹出对话框中点选所需打开的文件。,(3)利用MATLAB命令窗口菜单栏指令,File,Open,再从弹出对话框中点选所需打开的文件。,3.M文件的保存方法,编写一个新M文件后,点击工具栏快捷图标,save,,或选取下拉菜单,File,save,,则会弹出“保存”文件对话框,经过存放目录和文件名的选择,才可完成保存。,修改一个已有M文件后,点击工具栏快捷图标,save,,或选取下拉菜单,File,save,,则完成了文件的保存。,M文件的分类,M文件有两种形式,1 命令式,(Script),2 函数式,(Functio

4、n),1 命令式M文件,命令式M文件就是一个MATLAB命令的集合,即将一组相关的MATLAB命令编辑在同一个文本文件中,,将此文件保存在指定的文件夹中。运行时只需在命令窗口输入文件名,,MATLAB就会自动按顺序执行文件中的命令。这样就解决了在命令窗口逐条运行多条命令的麻烦,也可以避免作许多重复性的工作。,命令式M文件在运行中可以调用MATLAB工作空间(Work Space)的所有数据(变量),而且所产生的变量均一直保存在工作空间中,直到用户清除为止。,例5.1 建立命令文件将给定矩阵a,b的值互换。,在M文本编辑器窗口输入如下命令:,c=a;a=b;b=c;a,b,并以文件名,exch.

5、m,保存在,MATLAB work,文件夹中。,在MATLAB命令窗口输入并运行,a=1:8;b=9:14;15:20;,exch,a=9 10 11 12 13 14,15 16 17 18 19 20,b=1 2 3 4 5 6 7 8,2 函数式M文件,为了实现计算中的参数传递,需要用到函数式M文件。大多数函数式M文件有返回值。,MATLAB中的绝大多数功能函数(命令)都是由函数式M文件实现的。,使用MATLAB函数时,MATLAB根据用户通过有效途径传递给它的输入变量,计算出所要求解的结果。然后,把这些结果按要求返回给用户。,2 函数式M文件,函数式M文件执行之后,除最后返回值之外,不

6、保留任何中间过程。即函数式M文件所定义的变量仅在函数内部起作用(,局部变量,),并随文件调用(执行)的结束而被清除。,由MATLAB函数执行的命令,以及由这些命令所创建的中间变量,都是隐含的。所有可见的东西只是输入和输出,也就是说函数可以看成是一个黑箱,把一些数据送进去,经过加工处理,把结果送出来。,函数式M文件的结构,函数式M文件一般由五部分构成,函数定义行,(必须在文本的第一行),H1行,(可省略,如果有,其位置必须在函数定义行的下一行),函数帮助文本,(可省略,如果有,其位置必须紧随H1行),注释,(可省略,如果有,其位置一般在函数帮助文本下,与函数帮助文本隔一行),函数体,注意,函数式

7、M文件的第一行,即函数定义行,其格式必须为,function,输出变量=,函数名,(输入变量),保存函数式M文件时,,文件名,应与,函数名,相同。,H1行的内容可由MATLAB命令lookfor搜索到,因此该行应该提供函数的重要信息。,H1行和函数帮助文本可由help命令显示。,例5.2 编写函数式M文件求半径为r的圆的面积和周长。,function,x,y=cir(r),函数定义行,%CIR area and perimeter of a circle,H1行,函数帮助文本,函数体,x=pi*r2;y=2*pi*r;,%With one output argument,x=cir(r),%i

8、s the area x of a circle of radii r.,%With two output argument,x,y=cir(r),%are area x and perimeter y of a circle,%of radii r.,%r:,圆半径,x:,圆面积,y:,圆周长,%2011年3月编,注释,将此函数文件以文件名cir存入matlabwork文件夹中,然后在MATLAB命令窗口调用该函数,例如运行如下命令,x=cir(10),y,z=cir(5),x=314.1593,y=78.5398,z=31.4159,help cir,CIR area and perime

9、ter of a circle,With one output argument,x=cir(r),is the area of a circle of radii r.,With two output argument,x,y=cir(r),are area x and perimeter y of a circle of radii r.,r:,圆半径,a:,圆面积,p:,圆周长,H1,行,函数帮助文本,5.2 运算符,1算术运算符(略),2关系运算符,小于,大于,=,大于等于,=,等于,=,不等于,关系运算法则,关系运算符可以比较两个同型矩阵,关系运算的结果生成一个同型的0-1矩阵。两矩

10、阵相应元素比较结果为真时,结果矩阵对应位置生成1,否则为0。,注:关系运算也适用于矩阵与数量。,例5.3,A=1 2 3;4 5 6;7 8 9,B=5*ones(3),P=,AB,R=,A=B,S=,A=B,R=0 0 0,0,1,0,0 0 0,A=1 2 3 B=5 5 5,4 5 6 5 5 5,7 8 9 5 5 5,P=,AB,P=,1 1 1,1 1,0,0 0 0,Q=0 0 0,0 0,1,1 1 1,R=,A=B,S=,A=B,S=,1 1 1,1,0,1,1 1 1,3逻辑运算符,逻辑运算符包括三种,&,(and),,|,(or),,(not),逻辑运算可以进行同型矩阵或

11、一个矩阵的运算,运算的结果生成一个同型的0-1矩阵。,&,(and)两同型矩阵,相同位置元素都非0时,结果矩阵相应位置为1,否则为0;,|,(or)两同型矩阵,相同位置元素不全为0时,结果矩阵相应位置为1,否则为0;,(not)对一个矩阵,元素非0时,结果矩阵相应位置为0,否则为1。,R=0 0,1,1,0 0,A=1 2 0 B=-1 0 0,0 3 4 0 1 0,P=,A&B,Q=,A|B,P=,1,0 0,0,1,0,Q=,1 1,0,0,1 1,R=,A,S=,B,S=0,1 1,1,0,1,例5.4 逻辑运算的例子,A=1,2,0;0,3,4,B=-1,0,0;0,1,0,P=A&

12、B,Q=A|B,R=A,S=B,在一个表达式中,算术运算符优先级最高,其次是关系运算符,最低级别是逻辑运算符。圆括号可以改变其顺序。,注意,例如,x1=1,&,5,6-4,x1=0,x2=1,&,(5,6)-4,x3=(1,&,5),6-4,x4=(1,&,5),1000的最小正整数n,输入并运行如下程序,k=1;,while,2k=1000,k=k+1;,end,k,k=10,5.3.3 循环的嵌套,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,按照嵌套层数,分别叫做二重循环、三重循环等。,处于内部的循环叫作内循环,处于外部的循环叫作外循环。,在设计多重

13、循环时,要特别注意内、外循环之间的关系以及各语句放置的位置,不要搞错。,例5.8 求5阶方阵A=(a,ij,),其中a,ij,=i,2,+j,2,输入并运行如下程序,for,n=1:5,for,m=5:-1:1,A(n,m)=n2+m2;,end,end,A,A=2 5 10 17 26,5 8 13 20 29,10 13 18 25 34,17 20 25 32 41,26 29 34 41 50,5.4 选择结构,5.4.1,if,语句,在MATLAB中,if语句有3种格式,1.单分支if语句,格式:,if,关系表达式,语句组,end,当关系表达式的值为1(真)时,则执行语句组,执行完之

14、后继续执行end的后继语句;若关系表达式的值为0(假)时,则直接执行end的后继语句。,例5.9 假设定义mn矩阵A。编写程序判断矩阵A的第1列元素是否为0,若全为0,则从矩阵A中删除第1列。,解:编写如下程序:,if,A(:,1)=0,A=A(:,2:size(A,2),end,如果A=0 2 3;0 5 6,则运行结果为,A=,2 3,5 6,2.双分支if语句,格式:,if,关系表达式,语句组1,else,语句组2,end,当关系表达式的值为1(真)时,执行语句组1,否则执行语句组2。,语句组1或语句组2执行后,再执行end的后继语句。,例5.10 判定给定整数N的奇偶性,输入并运行如下

15、的程序:,if,rem(N,2)=0,N is a even.,else,N is a odd.,end,如果N是偶数,输出字符串:,ans=N is a even.,如果N是奇数,输出字符串:,ans=N is a odd.,3.多分支if语句,格式:,if,关系表达式1,语句体1,elseif,关系表达式2,语句体2,elseif,关系表达式n,语句体n,else,语句体n+1,end,如果关系表达式j(j=1,2,n)为真,则执行语句j,然后执行end的后续语句;如果if和elseif后所有的关系表达式都为假时,则执行语句n+1,然后执行end的后续语句。,例5.11 复杂条件语句的例子

16、,给定整数N,输入并运行如下的程序:,if,N*,Inner matrix dimensions must agree.,try,C=A*B;,catch,C=A.*B;,end,C,lasterr,%显示出错原因,5.4.3,break,语句,break,语句的作用是使,for,while,等循环语句人为终止(不必等待循环自然结束)。,如果一个循环语句内包含,break,语句时,则该循环语句内部应设置是否执行,break,语句的条件语句。若执行,break,语句,程序将跳出该循环。,break,语句一般与,if,语句配合使用。,对于多重循环,,break,语句仅对本层循环起作用。,例5.13

17、,鸡兔同笼问题求解程序,h=input(,input the number of head h=,);,f=input(,input the number of feet f=,);,for,k=0:h,if,2*k+4*(h-k)=f,break,end,end,ji=k,tu=h-k,5.5 数据的输入输出,5.5.1 键盘输入函数,input,格式1:,A=input(string);,格式2:,A=input(string,s),;,其中字符串,string,用于提示用户利用键盘输入什么样的数据,并把输入的数据赋值给变量A。,如果使用格式2,则用户利用键盘输入的数据被作为一个字符串。例

18、如,输入一个人的姓名,可采用命令,xm=input(Whats your name?,s),5.5.2,输出函数,disp,格式:,disp,(输出项),其中输出项既可以为字符串,也可以为矩阵。,注意:,用disp函数显示矩阵时将不显示矩阵的变量名,其格式更紧密,且不留任何没有意义的空行。,例5.14 求一元二次方程ax,2,+bx+c=0的根,输入并运行如下程序:,a=input(input a real number a=);,b=input(input a real number b=);,c=input(input a real number c=);,d=b2-4*a*c;,x=(-

19、b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);,disp,(,x1=,num2str(x(1),x2=,num2str(x(2),),5.6 程序设计的有关问题,5.6.1,两种M文件的比较,命令式M文件与函数式M文件,形式上的差别,就是有无函数定义行,即函数式M文件去掉函数定义行就转变为命令式M文件。,命令式M文件与函数式M文件,本质的差别,是:命令式M文件的所有变量都是全局变量,函数式M文件的中间变量都是局部变量。,例5.15,鸡兔同笼问题求解的比较,命令式M文件,h=input(h=);,f=input(f=);,for,k=0:h,if,2*k+4*(h-k)=f

20、,break,end,end,ji=k,tu=h-k,函数式M文件,function,ji,tu=jth(h,f),for,k=0:h,if,2*k+4*(h-k)=f,break,end,end,ji=k;tu=h-k;,运行结果比较,函数式M文件,clear,j,t=jth(36,100),j=22,t=14,who,Your variables are:,j t,命令式M文件,clear,jt,%文件名,h=,36,f=,100,ji=22,tu=14,who,%工作空间变量查询,Your variables are:,f h ji k tu,使用命令式M文件应注意的问题,命令式M文件与

21、函数式M文件相比,一般地说,工作空间变量数目会增加,甚至大大增加,因而造成内存紧张。影响机器运行速度。,命令式M文件中变量与工作空间中同名变量会发生冲突。编程时要特别注意不同的命令式M文件中变量的设置,以防止由于使用了工作空间中已有变量的同名变量而使程序的运行结果出错。,5.6.2 函数调用,在MATLAB中,函数调用是编写高质量程序所必不可少的。一个较大的计算任务可以分成若干个较小的任务,即一个程序可以由若干个子程序组成,并通过函数调用来实现数据传递。,一个函数可以调用其它函数,甚至调用该函数本身。,函数调用的一般格式是:,输出变量表=函数名(输入变量表),例5.16 利用函数文件,实现直角

22、坐标(x,y)与极坐标(,)之间的转换。,编写并保存函数文件,tran.m,:,function,rho,theta=tran(x,y),rho=sqrt(x2+y2);theta=atan(y/x);,运行调用,tran.m,的命令文件,main1.m,:,x=input(Please input x=);,y=input(Please input y=);,rho,the=tran(x,y),例5.17 编写MATLAB程序,对任意给定正整数N,输出N的阶乘,编写并保存函数文件,jc.m,:,function,y=jc(n),if,n=0,y=1;,else,y=n*jc(n-1);,en

23、d,运行命令,s=jc(5),s=120,5.6.3子函数,在一个函数式M文件中可以包含多个函数,第一个函数称为主函数,其函数名与文件名相同,它可以由其它M文件引用。,其它函数称为子函数,这些子函数只能由该函数式M文件中的主函数或其它子函数引用。,每个子函数的格式与函数式M文件的格式相同。各子函数的顺序任意,但主函数必须是第一个函数。,例5.18 子函数应用的例子,function,av,me=test1(x),if,size(x,1)=1,x=x;,end,n=size(x,1);,av=,MEAN,(x,n);me=,MEDIAN,(x,n);,function,a=,MEAN,(y,n)

24、,%子函数1,a=sum(y)/n;,function,m=,MEDIAN,(y,n);,%子函数2,z=sort(y);,if,rem(n,2)=0,m=z(n+1)/2,:);,else,m=(z(n/2,:)+z(n/2+1,:)/2;,end,注意,在M文件中调用另一函数时,MATLAB首先检查该函数是否为此文件中的子函数,如果不是子函数,再检查是否为标准的M文件。,在M文件中使用子函数时,子函数的名称可以与已有的M文件同名。,在同一个M文件中,函数名应该唯一。,5.6.4,函数传递参数的可调性,在调用函数时,MATLAB用两个永久变量,nargin,和,nargout,分别记录调用该

25、函数时的输入变量和输出变量的个数。,只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出变量个数,从而决定函数如何进行处理。,5.6.4,函数传递参数的可调性,在调用MATLAB函数时,输入输出变量的数目可以少于函数自身要求的输入输出变量的数目。这时在函数的设计中,一般要利用函数变量nargin和nargout进行适当的处理。,例5.19 nargin用法示例,编写函数:输入一个矩阵时,输出其各元素的平方;输入两个矩阵时,判断其维数是否相同,如果相同,输出其对应元素的乘积,否则输出错误信息。,function,c=intest(a,b),if,nargin=1,c=a.

26、2;,elseif,nargin=2&size(a)=size(b),c=a.*b;,else,disp(矩阵维数不一致);,end,例5.20 nargout 用法示例,编写函数:输入一个实数r,没有明确函数的输出时,输出以r为半径的圆的图形,要求一个输出时,输出以r为半径的圆的面积,要求两个输出时,输出以r为半径的圆的面积和周长。,function,s1,s2=outtest(r),if,nargout=0,t=0:pi/100:2*pi;x=r*cos(t);y=r*sin(t);,plot(x,y);axis square,elseif,nargout=1,s1=pi*r2;,else

27、,s1=pi*r2;s2=2*pi*r;,end,5.6.5 循环的向量化,MATLAB 以矩阵为基本元素,特别适用于矩阵处理。因此 MATLAB程序设计中,有些循环可以直接转换成向量操作,这样可以大大提高程序的运行速度。这种技术称为循环的向量化。,如何将循环转换成向量操作是一个比较复杂的问题。简单循环很容易接转换成向量操作,但复杂问题有一些可能很难直接转换成向量操作,有一些可能根本无法转换成向量操作。因此在实际问题中应根据具体情况处理。,5.6.6 变量(矩阵)的预定义,MATLAB以矩阵为基本元素,它把任何一个变量都看成一个矩阵。,通常情况下,变量的大小不需要预先定义。但在程序设计中,经常会涉及到循环重复,而每次循环都会产生一个结果元素,如果不对变量(矩阵)预定义存储单元,则变量(矩阵)每次都将自动增大,从而大大降低计算效率。,利用变量(矩阵)的预定义可减少程序运行的时间,提高运行效率。,例5.21 变量(矩阵)预定义的例子。,n=2000;x=rand(10);,y=;z=zeros(1,n);,tic,for,k=1:n,y(k)=det(x);,end,toc,tic,for,k=1:n,z(k)=det(x);,end,toc,此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢,

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服