MATLAB基础与应用教程_第1页
MATLAB基础与应用教程_第2页
MATLAB基础与应用教程_第3页
MATLAB基础与应用教程_第4页
MATLAB基础与应用教程_第5页
已阅读5页,还剩408页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

第1章

MATLAB基础知识MATLAB是MathWorks公司开发的科学与工程计算软件,它以矩阵运算为基础,把计算、绘图及动态系统仿真等功能有机地融合在一起。同时,它又具有程序设计语言的基本特征。目前,MATLAB在工程计算与数值分析、控制系统设计与仿真、信号处理、图像处理、金融建模设计与分析等学科领域都有着十分广泛的应用。【本章学习目标】●了解MATLAB的特点和主要功能。●熟悉启动和退出MATLAB的方法。●熟悉MATLAB的操作环境。●掌握建立矩阵的方法。●掌握MATLAB数据对象的特点和基本的运算规则。

1.1MATLAB的发展与主要功能MATrixLABoratory(矩阵实验室)1.1.1MATLAB的发展CleveMoler编写的使用Linpack和Eispack的接口程序——MATLAB1992 MATLAB4.0版1997 MATLAB5.0版2000年10月 MATLAB6.0版2004年7月 MATLAB7.0版2005年9月 MATLAB7.1版随后每年发布两次以年份命名的版本,如R2006a(MATLAB7.2)、R2006b(MATLAB7.3)、R2007a(MATLAB7.4)、R2007b(MATLAB7.5)、R2008a(MATLAB7.6)和最新的版本R2008b(MATLAB7.7)。1.1.2MATLAB的主要功能

1.数值计算和符号计算功能例如,求解线性方程组:在MATLAB命令窗口输入命令:a=[2,3,-1;3,-5,3;6,3,-8];b=[7;8;9];x=inv(a)*b也可以通过符号计算来解此方程symsx1x2x3[x1,x2,x3]=solve(2*x1+3*x2-x3-7,3*x1-5*x2+3*x3-8,6*x1+3*x2-8*x3-9)2.绘图功能例如,分别绘制函数y=300sinx/x和y=x2的曲线x=-20:0.1:20;plot(x,300*sin(x)./x,':',x,x.^2);3.程序设计语言功能MATLAB是解释性语言,程序执行速度较慢,而且不能脱离MATLAB环境而独立运行。MathWorks公司提供了将MATLAB源程序编译为独立于MATLAB集成环境运行的EXE文件以及将MATLAB程序转化为C语言程序的编译器。4.扩展功能MATLAB包含两部分内容:基本部分和各种可选的工具箱。基本部分构成了MATLAB的核心内容,也是使用和构造工具箱的基础。工具箱扩展了MATLAB的功能。功能性工具箱学科性工具箱1.2MATLAB的集成开发环境

1.2.1MATLAB操作界面1.主窗口2.命令窗口命令窗口(CommandWindow)用于输入命令并显示除图形以外的所有执行结果。一般来说,一个命令行输入一条命令,命令行以回车结束。但一个命令行也可以输入若干条命令,各命令之间以逗号分隔,若前一命令后带有分号,则逗号可以省略。例如:x=720,y=86x=720y=86x=720;y=86y=86如果一个命令行很长,一个物理行之内写不下,可以在第1个物理行之后加上3个小黑点并按下回车键,然后接着下一个物理行继续写命令的其他部分。3个小黑点称为续行符,即把下面的物理行看作该行的逻辑继续。例如:z=1+1/(1*2)+1/(1*2*3)+1/(1*2*3*4)+…1/(1*2*3*4*5)3.工作空间窗口工作空间(Workspace)是MATLAB用于存储各种变量和结果的内存空间。4.当前目录窗口对文件进行有效的组织和管理当前目录(CurrentDirectory)是指MATLAB运行时的工作目录,只有在当前目录或搜索路径下的文件、函数才可以被运行或调用。如果没有特殊指明,数据文件也将存放在当前目录下。5.命令历史窗口自动保留自安装起所有用过的命令的历史记录,并且还标明了使用时间,从而方便用户查询。而且,通过双击命令可进行历史命令的再运行。6.Start按钮1.2.2MATLAB的搜索路径MATLAB的文件是通过不同的路径进行组织和管理的。当用户在命令窗口输入一条命令后,MATLAB将按照下列顺序搜索所输入的命令。● 检查该命令是不是一个变量。● 检查该命令是不是一个内部函数。● 检查该命令是否为当前目录下的M文件。● 检查该命令是否为MATLAB搜索路径中其他目录下的M文件。2.设置搜索路径(1)用path命令设置搜索路径例如,将用户目录c:\mydir加到搜索路径下:path(path,'e:\matlab\work')(2)用对话框设置搜索路径在MATLAB的File菜单中选择SetPath命令或在命令窗口执行pathtool命令1.3MATLAB的帮助功能1.3.1帮助界面进入MATLAB帮助界面可以通过以下3种方法。●单击MATLAB主窗口工具栏中的Help按钮。●在命令窗口中输入“helpwin”、“helpdesk”或“doc”命令。●选择Help菜单中的“MATLABHelp”选项。1.3.2帮助命令1.help命令help命令是查询函数语法的最基本方法,查询信息直接显示在命令窗口。在命令窗口中直接输入help命令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。同样,可以通过help加函数名来显示该函数的帮助说明。例如,为了显示magic函数的使用方法与功能helpmagic2.lookfor命令help命令可以帮助用户了解函数的用法。例如,输入命令lookforfourier3.其他帮助命令1.3.3演示系统在帮助窗口中选择演示系统(Demos)选项卡,然后在其中选择相应的演示模块,或者在命令窗口输入“demos”,或者选择主窗口“Help”菜单中的“Demos”子菜单,打开的演示系统如图1.8所示。1.4MATLAB的变量和数据操作1.4.1变量与赋值1.变量命名在MATLAB7.X中,变量名是以字母开头,后接字母、数字或下画线的字符序列,最多63个字符。例如x、x_1、xy12在MATLAB中,变量名区分字母的大小写。例如addr、Addr和ADDR表示3个不同的变量。2.赋值语句MATLAB赋值语句有两种格式:(1)变量=表达式;(2)表达式在第1种语句形式下,MATLAB将右边表达式的值赋给左边的变量,而在第2种语句形式下,将表达式的值赋给MATLAB的预定义变量ans。在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。注释以%开头【例1.1】当时,计算表达式的值,并将结果赋给变量y,然后显示出结果。在MATLAB命令窗口分别输入命令:x=sqrt(1+pi);y=(exp(x)+log(abs(sin(x)^2-sin(x*x))))/(x-5*i)y=0.5690+1.3980i其中,pi和i都是MATLAB定义的变量,分别代表圆周率π和虚数单位。3.预定义变量1.4.2变量的管理1.内存变量的显示与删除显示在MATLAB工作空间中已经驻留的变量名清单。whowhoswhos在给出驻留变量名的同时,还给出它们的维数、所占字节数以及变量的类型。删除MATLAB工作空间中的变量clearMATLAB工作空间窗口专门用于内存变量的管理。变量编辑器2.内存变量文件利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长久地保留下来。MAT文件是MATLAB保存数据的一种标准格式二进制文件,扩展名是.mat。MAT文件的生成和装入save文件名[变量名表][-append][-ascii]load文件名[变量名表][-ascii]假定变量a和b存在于MATLAB工作空间中,输入以下命令便可将a和b保存于当前目录的mydata.mat文件中:savemydataab把mydata.mat中的内容装入MATLAB工作空间:loadmydata1.4.3数据的输出格式用“format”命令设置数据输出格式format格式符“format”命令只影响数据输出格式,而不影响数据的计算和存储。例如输入为x=[4/31.2345e-6]在各种不同的格式符下的输出为短格式(short):1.33330.0000短格式e方式(shorte):1.333e+001.2345e-06长格式(long):1.333333333333330.00000123450000长格式e方式(longe):1.33333333333333e+0001.23450000000000e-006银行格式(bank):1.330.00十六进制格式(hex):3ff55555555555553eb4b6231abfd271+格式(+):++1.5MATLAB矩阵及其基本运算1.5.1矩阵的生成在MATLAB中,生成矩阵时无须对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。1.直接输入法将矩阵的所有元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。例如,输入命令:A=[1,2,3;4,5,6;7,8,9]A=123456789矩阵元素也可以是表达式,MATLAB将自动计算结果。例如:B=[10,5-sqrt(7),sin(pi/2);7,4*8,abs(-7)]在MATLAB中,矩阵元素可以是复数。例如,建立复数矩阵:B=[1,2+7i,5*sqrt(2)*i;3,2/5,3.5+6i]也可以分别建立实部矩阵和虚部矩阵,再合起来构成复数矩阵。例如:R=[1,2,3;4,5,6];I=[1.1,2.2,3.3;4.4,5.5,6.6];ri=R+i*I2.利用M文件建立矩阵对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件【例1.2】利用M文件建立mydata矩阵。(1)启动有关文本编辑程序或MATLAB的M-file编辑器(见第2章),并输入待建矩阵:mydata=[1.11.21.31.41.51.61.71.81.9;2.12.22.32.42.52.62.72.82.9;3.13.23.33.43.53.63.73.83.9];(2)把输入的内容存盘(设文件名为matfund.m)。(3)在MATLAB命令窗口中输入matfund,即运行该M文件,就会自动建立一个名为mydata的矩阵,可供以后使用。3.利用数据文件建立指定矩阵用户能够通过load命令,将外部数据文件中的内容调入到工作空间中创建矩阵,外部文件的扩展名为.dat。例如,利用文本编辑器创建一个数据文件test.dat,包含下列数据:246863567325125在命令窗口输入:loadtest.dattest运行结果为4.利用已建好的矩阵建立更大的矩阵大矩阵可由已建好的小矩阵拼接而成。例如:A=[1,2,3;4,5,6;7,8,9];B=[11:13;14:16;17:19];A=[1,2,3;4,5,6;7,8,9];C=[A,B;B,A]1.5.2冒号表达式在MATLAB中利用冒号可以产生行向量。冒号表达式的一般格式为a:b:c其中,a为初始值,b为步长,c为终止值(c

>

a)。冒号表达式可产生一个由a开始到c结束,以步长b自增的行向量。例如:t=0:2:10t=0246810在MATLAB中,还可以用linspace函数产生行向量。其调用格式为linspace(a,b,n)其中a和b是生成向量的第1个和最后一个元素,n是元素总数。当n省略时,自动产生100个元素。显然,linspace(a,b,n)与a:(b

−

a)/(n

−

1):b等价。例如:x=linspace(0,10,6)x=02468101.5.3矩阵的拆分1.矩阵元素对矩阵的单个元素操作。例如,如果想将矩阵A的第2行第3列的元素赋为76,则可以通过下面语句来完成:A(2,3)=76这时将只改变该元素的值,而不影响其他元素的值。在MATLAB中,也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。矩阵元素按列编号,先第1列,再第2列,依次类推。例如:A=[10,20,30;40,50,60];A(3)序号(Index)与下标(Subscript)是一一对应的,以m

×

n矩阵A为例,矩阵元素A(i,j)的序号为(j−1)*m

+

i。其相互转换关系也可利用sub2ind和ind2sub函数求得。size(A)函数返回包含两个元素的向量,分别是矩阵A的行数和列数length(A):给出行数和列数中的较大者(1)利用冒号表达式获得子矩阵①A(m,n)表示取A矩阵第m行、第n列的元素,A(m,:)表示取A矩阵第m行的全部元素,A(:,n)表示取A矩阵的第n列全部元素。②A(m1:m2,:)表示取A矩阵第m1~m2行的全部元素,A(:,n1:n2)表示取A矩阵第n1~n2列的全部元素,A(m1:m2,n1:n2)表示取A矩阵第m1~m2行内,并在第n1~n2列中的所有元素。③A(:)将矩阵A每一列元素堆叠起来,成为一个列向量(2)利用空矩阵删除矩阵的元素在MATLAB中,空矩阵是指无任何元素的矩阵,表示形式为[]。给变量x赋空矩阵的语句为x=[]将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。例如:A=[123456;789101112;131415161718];A(:,[24])=[]其中第2条命令将删除A的第2列和第4列元素。1.5.4算术运算1.基本算术运算MATLAB的基本算术运算有:+(加)、−(减)、*(乘)、/(右除)、\(左除)、^(乘方)。(1)矩阵加减运算运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。一个标量也可以和其他不同维数的矩阵进行加减运算。例如:x=[2,-1,0;3,2,-4];y=x-1;y=y+x(2)矩阵乘法矩阵A和B进行乘法运算,要求A的列数与B的行数相等,或称A和B两矩阵维数相容。如果两者的维数不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。例如:A=[1,2,3;4,5,6];B=A*A???Errorusing==>mtimesInnermatrixdimensionsmustagree.在MATLAB中,还可以进行矩阵和标量相乘,标量可以是乘数也可以是被乘数。矩阵和标量相乘是矩阵中的每个元素与此标量相乘。(3)矩阵除法在MATLAB中,有两种矩阵除法运算:\和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。(4)矩阵的乘方一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。2.点运算两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。点运算符有.*、./、.\和.^。例如:A=[1,2,3;4,5,6;7,8,9];B=[-1,0,1;1,-1,0;0,1,1];C=A.*BC=-1034-50089如果A、B两矩阵具有相同的维数,则A./B表示A矩阵除以B矩阵的对应元素。B.\A等价于A./B。3.MATLAB常用数学函数(1)函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。例如:y=sin(0:pi/2:2*pi)y=01.00000.0000-1.0000-0.0000y=abs(y)y=01.00000.00001.00000.0000(2)abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。x=[-3.14,3+4i];abs(x)ans=3.14005.0000(3)用于取整的函数有fix、floor、ceil、round,要注意它们的区别。例如:x=[fix(13.37),floor(13.37),ceil(13.37),round(13.37)]x=13131413x=[fix(-13.67),floor(-13.67),ceil(-13.67),round(-13.67)]x=-13-14-13-14(4)rem与mod函数的区别。rem(x,y)和mod(x,y)要求x,y必须为相同大小的实矩阵或为标量。当y

≠

0时,rem(x,y)

=

x

−

y.*fix(x./y),而mod(x,y)

=

x

−y.*floor(x./y),当y

=

0时,rem(x,0)

=

NaN,而mod(x,0)

=

x。显然,当x,y同号时,rem(x,y)与mod(x,y)相等。rem(x,y)的符号与x相同,而mod(x,y)的符号与y相同。例如:x=5;y=3;[rem(x,y),mod(x,y)]ans=22x=-5;y=3;[rem(x,y),mod(x,y)]ans=-211.5.5关系运算MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、=

=(等于)、~=(不等于)。(1)当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。例如:A=5A=5A=A==10A=0(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素的比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的运算结果是一个维数与矩阵相同的矩阵,它的元素由0或1组成。1.5.6逻辑运算MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。此外,MATLAB还提供了4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和xor(a,b)。在逻辑运算中,确认非零元素为真,用1表示;零元素为假,用0表示。设参与逻辑运算的是两个标量a和b,那么,逻辑运算符和逻辑运算函数的含义如下。● a&b或函数and(a,b)表示a和b作逻辑与运算,当a、b全为非零时,运算结果为1,否则为0。● a|b或函数or(a,b)表示a和b作逻辑或运算,当a、b中只要有一个非零,运算结果为1。● ~a和函数not(a)表示对a作逻辑非运算,当a是零时,运算结果为1;当a非零时,运算结果为0。● 函数xor(a,b)表示a和b作逻辑异或运算,当a、b的值不同时,运算结果为1,否则运算结果为0。(1)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。例如:A=[23,54,12,6,-78];B=[5,324,7,-43,76];C1=A>10&B<10C1=10100C2=xor(A>10,B<10)C2=01010(2)若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。(3)逻辑非是单目运算符,也服从矩阵运算规则。在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。【例1.3】建立矩阵A,然后找出在

[10,20]

区间的元素的位置。A=[4,15,-45,10,6;56,0,17,-45,0]A=415-4510656017-450find(A>=10&A<=20)ans=3671.6字符串字符串的每个字符都是字符矩阵的一个元素。其构建方式是通过单撇号括起来的字符序列来实现的。例如:xm='Beijing2008'xm=Beijing2008MATLAB将一个字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。多行字符串要求各行字符数要相等字符串是以ASCII形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII数值矩阵。相反,char函数可以把ASCII矩阵转换为字符串矩阵。【例1.4】建立一个字符串向量,然后对该向量做如下处理。(1)取第1~5个字符组成的子字符串。(2)将字符串中的小写字母变成相应的大写字母,其余字符不变。(3)统计字符串中小写字母的个数。命令如下:ch='WelcometoBeijing';subch=ch(12:18) %取子字符串k=find(ch>='a'&ch<='z'); %找小写字母的位置ch(k)=ch(k)-('a'-'A'); %将小写字母变成相应的大写字母char(ch)length(k)%统计小写字母的个数ans=14把字符串的内容作为对应的MATLAB语句来执行。eval(t)其中t为字符串。例如:x=3;y=4;m='[sqrt(x*x+y*y),x+y]';y=eval(m)y=57(1)若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。例如:disp('It''sabook.')将输出:It'sabook.(2)可以用字符串向量的形式连接多个字符串,即用中括号括起来。例如:x=8;y=10;disp([num2str(x),'+',num2str(y),'=',num2str(x+y)])其中disp函数的自变量是一个长字符串。输出为8+10=18第2章

MATLAB程序设计【本章学习目标】●掌握建立和执行M文件的方法。●掌握利用if语句、switch语句实现选择结构的方法。●掌握利用for语句、while语句实现循环结构的方法。●熟悉利用向量运算来代替循环操作的方法。●掌握定义和调用MATLAB函数的方法。2.1M文件交互式的命令执行方式M文件的程序执行方式2.1.1M文件的建立与打开1.建立新的M文件(1)命令按钮操作。(2)菜单操作。(3)命令操作。2.打开已有的M文件2.1.2M文件的分类M文件可以根据调用方式的不同分为两类:命令文件(ScriptFile)和函数文件(FunctionFile)。(1)命令文件没有输入参数,也不返回输出参数,而函数文件可以带输入参数,也可返回输出参数。(2)命令文件对MATLAB工作空间中的变量进行操作,文件中所有命令的执行结果也完全返回到工作空间中,而函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。(3)命令文件可以直接运行,在MATLAB命令窗口输入命令文件的名字,就会顺序执行命令文件中的命令,而函数文件不能直接运行,而要以函数调用的方式来调用它。【例2.1】建立一个M文件,其功能是:用两个实变量R、M生成复变量RM,然后运行该M文件。程序1:建立一个命令文件。建立命令文件setcomp.mclear;R=[1,2,3;4,5,6];M=[11,12,13;14,15,16];RM=R+i*M然后在MATLAB的命令窗口中输入setcomp,将会执行该命令文件,输出为RM=1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i2.2程序控制结构2.2.1顺序结构顺序结构是指按照程序中语句的排列顺序依次执行,一般涉及数据的输入、数据的计算或处理、数据的输出等内容。1.数据的输入从键盘输入数据,则可以使用input函数来进行,该函数的调用格式为A=input(提示信息,选项);其中,“提示信息”为一个字符串,用于提示用户输入什么样的数据。例如,从键盘输入A矩阵,可以采用下面的命令来完成:A=input('输入A矩阵:');如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input('What''syourname?','s');2.数据的输出MATLAB提供的命令窗口输出函数主要有disp函数,其调用格式为disp(输出项)其中,输出项既可以为字符串,也可以为矩阵。例如:A='Hello,World!';disp(A)【例2.2】求一元二次方程ax2

+

bx

+

c

=

0的根。由于MATLAB能进行复数运算,所以不需要判断方程的判别式,而直接根据求根公式求根。程序如下: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))]);3.程序的暂停当程序运行时,为了查看程序的中间结果或者观看输出的图形,有时需要暂停程序的执行。这时可以使用pause函数,其调用格式为pause(延迟秒数)如果省略延迟时间,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C组合键。2.2.2选择结构选择结构是根据给定的条件成立或不成立,分别执行不同的语句。1.if语句(1)单分支if语句:if条件语句块end当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。(2)双分支if语句:if条件语句块1else语句块2end当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。【例2.3】计算分段函数:程序如下:x=input('请输入x的值:');ifx<0y=log(x*x+1)+sqrt(x*x+1);elsey=sin(x)/(x+1);enddisp(y)(3)多分支if语句:if条件1语句块1elseif条件2语句块2……elseif条件n语句块nelse语句块n+1end【例2.4】输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。c=input('请输入一个字符','s');ifc>='A'&c<='Z'disp(lower(c));elseifc>='a'&c<='z'disp(upper(c));elseifc>='0'&c<='9'disp(str2num(c)^2);elsedisp(c);end2.switch语句switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为switch表达式case结果表1语句块1case结果表2语句块2……case结果表n语句块notherwise语句块n+1end图2.3switch语句的执行过程switch子句后面的表达式应为一个标量或一个字符串,case子句后面的结果不仅可以为一个标量或一个字符串,而且还可以为一个将多个结果用大括号括起来的单元数据(Cell)。如果case子句后面的结果为一个单元数据,则表达式的值等于该单元数据中的某个元素时,执行相应的语句组。【例2.5】将例2.4改用switch语句实现。c=input('请输入一个字符:','s');cc=abs(c);switch(cc)casenum2cell(abs('A'):abs('Z'))disp(lower(c));casenum2cell(abs('a'):abs('z'))disp(upper(c));casenum2cell(abs('0'):abs('9'))disp((abs(c)-abs('0'))^2);otherwisedisp(c);endnum2cell函数是将数值矩阵转化为单元矩阵,num2cell(1:5)等价于{1,2,3,4,5}。3.try语句try语句是一种试探性执行语句,为开发人员提供了一种捕获错误的机制,其语句格式为try语句块1catch语句块2endtry语句先试探性执行语句块1,如果语句块1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句块2。【例2.6】矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。A=input('请输入A矩阵:');B=input('请输入B矩阵:');lasterr('');%清除原有的错误信息tryC=A*B;catchC=A.*B;endCdisp(lasterr)%显示出错原因2.2.3循环结构循环是指按照给定的条件,重复执行指定的语句。1.for语句图2.4for语句执行过程for语句的格式为for循环变量=表达式1:表达式2:表达式3循环体语句end其中,表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。【例2.7】一个3位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。程序如下:shu=[]; %用于存放结果,先赋空值form=100:999m1=fix(m/100); %求m的百位数字m2=rem(fix(m/10),10); %求m的十位数字m3=rem(m,10); %求m的个位数字ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3shu=[shu,m]; %存入结果endendshufor语句的循环变量可以是一个列向量。for语句更一般的格式为for循环变量=矩阵表达式循环体语句end执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。【例2.9】写出下列程序的执行结果。s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s);该程序的功能是求矩阵各行元素之和,执行结果是:394857662.while语句while语句的一般格式为while(条件)循环体语句End【例2.10】求使最小的n。程序如下:y=0;n=0;while(y<=1.5)n=n+1;y=y+1/n/n;enddisp(['满足条件的n是:',num2str(n)])3.break语句和continue语句break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。【例2.11】输入两个整数,求它们的最小公倍数。程序如下:x=input('请输入第一个数:');y=input('请输入第二个数:');z=max(x,y);whileor(rem(z,x)~=0,rem(z,y)~=0)z=z+1;enddisp([num2str(x),'和',num2str(y),'的最小公倍数是:',num2str(z)])4.循环的嵌套【例2.12】设x,y,z均为正整数,求下列不定方程组共有多少组解。这类方程的个数少于未知数的个数的方程称为不定方程,一般没有唯一解,而有多组解。对于这类问题,可采用穷举法,即将所有可能的取值一个一个地去试,看是否满足方程,如满足即是方程的解。首先确定3个变量的可取值,x、y、z均为正整数,所以3个数的最小值是1,而其和为20,所以3者的最大值是18。程序如下:n=0;a=[];forx=1:18fory=1:18z=20-x-y;if25*x+20*y+16*z==400a=[a;x,y,z];n=n+1;endendenddisp(['方程组共有',num2str(n),'组解']);disp(a)2.3函数文件2.3.1函数文件的基本结构函数文件由function语句引导,其基本结构为function输出形参表=函数名(输入形参表)注释说明部分函数体语句其中,以function开头的一行为引导行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来。(1)函数文件名通常由函数名再加上扩展名.m组成,不过函数文件名与函数名也可以不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此,调用时使用函数文件名。【例2.13】编写求一个向量之和以及向量平均值的函数文件。函数文件如下:function[s,m]=fvector(v)%VECTORfvector.mcalculatessumandmeanofavector%v向量%s和%m平均值%2008年12月10日编[m,n]=size(v);if(m>1&n>1)|(m==1&n==1)error('Inputmustbeavector')ends=sum(v);%求向量和m=s/length(v);%求向量平均值将以上函数文件以文件名fvector.m存盘,然后在MATLAB命令窗口调用该函数:[s,p]=fvector(1:10)(2)注释说明包括如下3部分内容。●紧随函数文件引导行之后以%开头的第一注释行。这一行一般包括大写的函数文件名和函数功能简要描述,供lookfor关键词查询和help在线帮助用。●第一注释行及之后连续的注释行。通常包括函数输入输出参数的含义及调用格式说明等信息,构成全部在线帮助文本。●与在线帮助文本相隔一空行的注释行。包括函数文件编写和修改的信息,如作者、修改日期、版本等内容,用于软件档案管理。采用help命令或lookfor命令可以显示出注释说明部分的内容,其功能和一般MATLAB函数的帮助信息是一致的。利用help命令可查询fvector函数的注释说明:helpfvector再用lookfor命令在第一注释行查询指定的关键词:lookforfvector(3)如果在函数文件中插入了return语句,则执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。2.3.2函数调用函数调用的一般格式为[输出实参表]=函数名(输入实参表)函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。【例2.14】利用函数文件,实现直角坐标(x,y)与极坐标(ρ,

)之间的转换。函数文件tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用tran.m的命令文件main1.m:x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe【例2.15】利用函数的递归调用,求n!。n!本身就是以递归的形式定义的:显然,求n!需要求(n−1)!,这时可采用递归调用。递归调用函数文件factor.m如下:functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;%递归调用求(n-1)!end在命令文件main2.m中调用函数文件factor.m,求s

=

1!

+

2!

+

3!

+

4!

+

5!。s=0;fori=1:5s=s+factor(i);ends2.3.3函数参数的可调性MATLAB在函数调用上有一个与一般高级语言不同之处,就是函数所传递参数数目的可调性。在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入/输出参数个数,从而决定函数如何进行处理。【例2.16】nargin用法示例。函数文件examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a.^2;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end命令x=examp(1:3)y=examp(1:3,4:6)z=examp(1:3,[1;2;3],15)2.3.4全局变量与局部变量在MATLAB中,函数文件中的变量是局部的,与其他函数文件及MATLAB工作空间相互隔离,即在一个函数文件中定义的变量不能被另一个函数文件引用。如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效,所有的函数都可以对它进行存取和修改,定义全局变量是函数间传递信息的一种手段。全局变量用global命令定义,格式为global变量名【例2.17】全局变量应用示例。先建立函数文件wadd.m,该函数将输入的参数加权相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;在命令窗口中输入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)2.4程序调试2.4.1程序调试概述应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误包括语法或文法的错误,如函数名拼写错、表达式书写错、数据类型错误等。MATLAB能够检查出大部分的语法错误,给出相应错误信息,并标出错误在程序中的行号。程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。MATLAB系统对逻辑错误是无能为力的,不会给出任何提示信息。这时可以通过一些调试手段来发现程序中的逻辑错误,最常见的办法是通过获取中间结果的方式来获取错误可能发生的程序段,以便进一步分析错误的原因。(1)将程序的一些主要中间结果输出到命令窗口,从而确定错误的区段。(2)使用MATLAB的调试菜单(Debug),通过图形界面操作来实现程序调试,包括设置断点、控制程序单步运行等操作。(3)使用键盘终止函数keyboard中断程序的运行,此时将程序的运行处于调试状态,命令窗口的提示符相应变成K>>,利用命令操作方式来实现程序调试。2.4.2MATLAB调试菜单1.控制单步运行(1)Step:单步运行。每单击一次,程序运行一次,但不进入函数。(2)StepIn:单步运行。遇到函数时进入函数内,仍单步运行。(3)StepOut:停止单步运行。如果是在函数中,跳出函数;如果不在函数中,直接运行到下一个断点处。(4)GoUntilCursor:直接运行到光标所在的位置。2.断点操作(1)Set/ClearBreakpoint:设置或清除断点。(2)Set/ModifyConditionalBreakpoint:设置或修改条件断点。条件断点可以使程序执行到满足一定条件时停止。(3)Enable/DisableBreakpoint:使断点有效或无效。(4)ClearBreakpointsinAllFiles:清除所有断点。(5)StopIfErrors/Warnings:在程序执行出现错误或警告时,停止程序运行,进入调试状态,不包括try…catch语句中的错误。【例2.18】在如图2.7所示的编辑窗口中,有一个求两个数的最小公倍数的程序commulti.m,试设置断点来控制程序执行。2.5程序性能分析与优化2.5.1程序性能分析调试器只负责M文件中语法错误和运行错误的定位,而Profiler性能评估器、tic函数和toc函数能分析程序各环节的耗时情况,分析报告能帮助用户寻找影响程序运行速度的“瓶颈”所在,以便于进行程序优化。通过函数文件性能评估器(Profiler)用户可以很方便地了解程序执行过程中各函数及函数中的每条语句所耗费的时间,从而有针对性地改进程序,提高程序的运行效率。在MATLAB主窗口的“Desktop”菜单中选择“Profiler”命令或在M文件编辑器的“Tools”菜单中选择“OpenProfiler”命令,屏幕上将出现Profiler性能评估器,如图2.8所示。在“Runthiscode”编辑框中输入一个M文件名(如ch01031)后,单击StartProfiling命令按钮或按回车键启动分析。ch01031.m中的代码如下:x=-20:0.1:20;y=300*sin(x)./x;plot(x,y);检测综述报表提供了运行文件的时间和相关函数的调用频率,反映出整个程序耗时7.052s,其中执行与绘制图形中调用的newplot函数耗时最多。单击某函数名,则打开相应函数的详细报告。2.5.2程序优化(1)向量化。例2.19计算,当n

=

100时,求y的值。用循环结构实现y=0;n=100;fori=1:ny=y+1/i/i;enddisp(y)采用向量求和的方法n=100;i=1:n;f=(-1).^(i-1)./i;y=sum(f);disp(y)(2)预分配内存空间。通过在循环之前预分配向量或数组的内存空间可以提高for循环的处理速度。例如,下面的代码用函数zeros预分配for循环中用到的向量a的内存空间,使得这个for循环的运行速度显著加快。程序1:clear;a=0;forn=2:1000a(n)=a(n-1)+10;end程序2:clear;a=zeros(1,1000);forn=2:1000a(n)=a(n-1)+10;end程序2采用了预定义矩阵的方法,运行时间比程序1要短。(3)减小运算强度。采用运算量更小的表达式,一般来说,乘法比乘方运算快,加法比乘法运算快,位运算比求余运算快。例如:clear;a=rand(32);%生成一个32×32的矩阵x=a.^3;y=a.*a.*a;从Profiler的评估报告中可以看出,a.*a.*a运算比a.^3运算所花的时间少得多。第3章

图形绘制MATLAB有两类绘图命令,一类是直接对图形句柄进行操作的低层绘图命令,另一类是在低层命令基础上建立起来的高层绘图命令。高层绘图命令简单明了、方便高效。利用高层绘图函数,用户不需要过多地考虑绘图细节,只需给出一些基本参数就能得到所需图形。【本章学习目标】●掌握绘制二维和三维图形的高层绘图函数。●掌握图形控制函数的使用方法。●了解图像处理的基本方法和动画制作的基本原理。3.1.1绘制二维曲线1.plot函数plot(x,y)其中x和y为大小相同的向量,分别用于存储x坐标和y坐标数据。【例3.1】绘制曲线t=0:0.1:8*pi;x=cos(t)+t.*sin(t);y=sin(t)-t.*cos(t);;plot(x,y);(1)当x和y是同维矩阵时,配对的x、y按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令为x=0:pi/10:2*pi;y=sin(x);plot([x;x;x]',[y;y*2;y*3]')当x是向量,y是有一维与x同维的矩阵时,则绘制出多根曲线,曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令也可以写成:x=0:pi/10:2*pi;y=sin(x);plot(x,[y;y*2;y*3])(2)当plot函数只有一个输入参数时,即plot(y)若y是实型向量,则以该向量元素的下标为横坐标、元素值为纵坐标画出一条连续曲线;若y是复数向量,则分别以向量元素实部和虚部为横、纵坐标绘制一条曲线。若y是实矩阵,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入参数矩阵的列数;若y是复数矩阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。(3)当plot函数有多个输入参数,且都为向量时,即plot(x1,y1,x2,y2,…,xn,yn)其中,x1和y1,x2和y2,……,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。例如,在同一坐标中绘制3条幅值不同的正弦曲线,命令也可以写成:x=0:pi/10:2*pi;y=sin(x);plot(x,y,x,y*2,x,y*3)2.具有两个纵坐标标度的图形绘制出具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。这种图形有利于图形数据的对比分析。plotyy(x1,y1,x2,y2)其中,x1和y1对应一条曲线,x2和y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1、y1数据对,右纵坐标用于x2、y2数据对。【例3.2】用不同标度在同一坐标内绘制曲线y1

=

0.2e−0.5xcos(4

x)和y2

=

1.5e−0.5x

cos(

x)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=1.5*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);3.1.2设置曲线样式MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。例如,“b-.”表示蓝色点画线,“y:d”表示黄色虚线并用菱形符标记数据点。当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次采用表3.2给出的前7种颜色。要设置曲线样式可以在plot函数中加绘图选项,其调用格式为plot(x1,y1,选项1,x2,y2,选项2,…,xn,yn,选项n)【例3.3】在同一坐标内,分别用不同线型和颜色绘制曲线y1

=

0.2e−0.5xcos(4

x)和y2

=

1.5e−0.5x

cos(

x)。标记两曲线交叉点。程序如下:x=linspace(0,2*pi,1

000);y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=1.5*exp(-0.5*x).*cos(pi*x);k=find(abs(y1-y2)<1e-2);%查找y1与y2相等点(近似相等)的下标x1=x(k); %取y1与y2相等点的x坐标y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);%求y1与y2值相等点的y坐标plot(x,y1,x,y2,'k:',x1,y3,'bp');3.1.3图形标注与坐标控制1.图形标注在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明、图形某一部分的含义等,这些操作称为添加图形标注。有关图形标注函数的调用格式如下。● title(图形名称)● xlabel(x轴说明)● ylabel(y轴说明)● text(x,y,图形说明)● legend(图例1,图例2,……)title和xlabel、ylabel函数分别用于说明图形和坐标轴的名称。text函数是在(x,y)坐标处添加图形说明。添加文本说明也可用gtext命令,执行该命令时,十字坐标光标自动跟随鼠标移动,单击鼠标即可将文本放置在十字光标处,如命令gtext('cos(x)'),即可放置字符串cos(x)。legend函数用于绘制曲线所用线型、颜色或数据点标记图例,上述函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX(LaTeX是一种十分流行的数学排版软件)格式的控制字符,这样就可以在图形上添加希腊字母、数学符号、公式等内容。在MATLAB支持的LaTeX字符串中,用\bf、\it、\rm控制字符分别定义黑体、斜体和正体字符,受LaTeX字符串控制部分要加大括号{}括起来。例如使得“MATLAB”一词黑体显示text(0.3,0.5,‘Theuseful{\bfMATLAB}’)得到标注效果sin(

t

+

)text(0.3,0.5,'sin({\omega}t+{\beta})')【例3.4】在0≤x≤2

区间内,绘制曲线y1

=

e−0.5x和y2

=

cos(4

x)e−0.5x,并添加图形标注。程序如下:x=0:pi/100:2*pi;y1=exp(-0.5*x);y2=exp(-0.5*x).*sin(2*x);plot(x,y1,x,y2)title('xfrom0to2{\pi}'); %加图形标题xlabel('VariableX'); %加X轴说明ylabel('VariableY'); %加Y轴说明text(1.5,0.5,'曲线y1=e^{-0.5x}'); %在指定位置添加图形说明text(3,-0.1,'曲线y2=cos(4{\pi}x)e^{-0.5x}');legend('y1','y2') %加图例2.坐标控制根据要绘制曲线数据的范围选择合适的坐标刻度axis([xminxmaxyminymax])系统按照给出的坐标轴的最小值和最大值选择坐标系范围axis函数的其他用法● axisauto:使用默认设置。● axisequal:纵、横坐标轴采用等长刻度。● axissquare:产生正方形坐标系(默认为矩形)。● axison/off:显示/取消坐标轴。给坐标加网格线用grid命令来控制,加边框用box命令来控制。gridon/off命令控制是画还是不画网格线,boxon/off命令控制是加还是不加边框线。【例3.5】绘制曲线及其包络线。程序如下:t=(0:pi/100:pi)';y1=sin(t)*[1,-1];

%包络线函数值y2=sin(t).*sin(9*t);plot(t,[y1,y2]')gridon; %加网格线boxon; %加坐标边框axisequal %坐标轴采用等刻度使用plot函数绘图时,都是等间隔取点。fplot函数可自适应地对函数进行采样,调用格式为fplot(fname,lims,tol,选项)其中,fname为函数名,以字符串形式出现。它可以是由多个分量函数构成的行向量,分量函数可以是函数的直接字符串,也可以是内部函数名或函数文件名,但自变量都必须为x。lims为x、y的取值范围,以行向量形式出现,取二元向量[xmin,xmax]时,x轴的范围被人为确定,取四元向量[xmin,xmax,ymin,ymax]时,x、y轴的范围被人为确定。tol为相对允许误差,其系统默认值为2e

−

3。选项定义与plot函数相同。例如:fplot('[sin(x),cos(x)]',[0,2*pi,-1.5,1.5],1e-3,'r.')观察上述语句绘制的正余弦曲线采样点的分布,可发现曲线变化率大的区段,采样点比较密集。1.图形窗口的分割分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口中的不同图形称为子图。subplot(m,n,p)该函数将当前图形窗口分成m

×

n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。【例3.7】在图形窗口中,以子图形式同时绘制多根曲线。程序如下:subplot(2,2,[13]);fplot('x-cos(x^3)-sin(2*x^2)',[-3,3]);xlabel('(a)');x=-3:0.1:3;subplot(2,2,2);y2=sin(2.*x.^2); plot(x,y2);xlabel('(b)');axis([-33-1.21.2])subplot(2,2,4);y3=cos(x.^3);plot(x,y3);xlabel('(c)');axis([-33-1.21.2]);gridon;2.图形叠加一般情况下,绘图命令每执行一次就刷新当前图形窗口,图形窗口原有图形将不复存在。若希望在已存在的图形上再叠加新的图形,可使用图形保持命令hold。holdon/off命令控制是保持原有图形还是刷新原有图形。例如:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)holdony2=1.5*exp(-0.5*x).*cos(pi*x);plot(x,y2);holdoff3.1.6其他坐标系1.对数坐标图形● semilogx(x1,y1,选项1,x2,y2,选项2,……)● semilogy(x1,y1,选项1,x2,y2,选项2,……)● loglog(x1,y1,选项1,x2,y2,选项2,……)其中,选项的定义与plot函数完全一致,所不同的是坐标轴的选取。semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。semilogy函数也使用半对数坐标,y轴为常用对数刻度,而x轴仍保持线性刻度。loglog函数使用全对数坐标,x、y轴均采用常用对数刻度。【例3.8】绘制y

=

e−x的对数坐标图并与直角线性坐标图进行比较。程序如下:x=0:0.1:10;y=exp(-x);subplot(2,2,1);plot(x,y);title('plot(x,y)');gridon;subplot(2,2,2);semilogx(x,y);title('semilogx(x,y)');gridon;subplot(2,2,3);semilogy(x,y);title('semilogy(x,y)');gridon;subplot(2,2,4);loglog(x,y);title('loglog(x,y)');gridon;2.极坐标图极坐标图用一个夹角和一段相对中心点—极点的距离来表示数据。MATLAB中用polar函数来绘制极坐标图,其调用格式为polar(theta,rho,选项)其中,theta为极坐标极角,rho为极坐标矢径,选项的内容与plot函数相似。【例3.9】已知t

[0,6

],绘制阿基米德螺线r

=

a

+

bt图,并标记数据点。程序如下:t=0:pi/20:6*pi;a=2;b=3;r=a+b*t;polar(t,r,'-*');3.1.7其他二维图形1.二维统计分析图(1)条形图。MATLAB中提供了多个函数可绘制各种条形图,bar函数绘制柱形图,barh函数绘制水平条形图,stem函数绘制杆图,errorbar函数绘制误差条图。下面以bar函数为例,说明条形图函数的用法。bar函数的基本用法与plot函数相似,其调用格式为bar(x,width,style):当x是m

×

n阶的矩阵时,绘制的条形图以分组或堆积的形式表现。矩阵中每一行元素绘制在一组中,每一列元素绘制在每组中相对应的位置上。其中,width设置条形的相对宽度和控制在一组内条形的间距,默认值为0.8,style指定条形的排列模式,类型有'group'(分组)和'stack'(堆积),默认时采用'group'模式。x=[51,82,34,47;67,78,68,90;78,85,65,50]';subplot(1,2,1);bar(x,'group');title('Group');axis([050100]);subplot(1,2,2);barh(x,'stack');title('Stack');(2)饼图。饼图能反映每一数值相对于总数值的大小。MATLAB中绘制饼图的函数是pie,其调用格式为pie(x,explode)pie函数使用x中的数据绘制一个饼图,x可以是向量或矩阵。explode是与x同等大小的向量或矩阵,与explode的非零值对应的部分将从饼图中心分离出来。默认explode时,饼图是一个整体。例如,用饼图分析例3.10中产品A该年度各季度的产品销售情况:pie(x(:,1),[0001])title('饼图');legend('一季度','二季度','三季度','四季度');(3)散点图。散点图是数据点在直角坐标系平面上的分布图。MATLAB中绘制散点图的函数是scatter,其调用格式为scatter(x,y,s,c,'filled')其中,x、y、s和c为同等大小的向量。x和y用于定位数据点;s指定绘图点的大小,s也可以是一个标量,则所有数据点同等大小;c指定绘图所使用的色彩,c也可以是一个标量,所有数据点使用同一种颜色;'filled'表示填充绘图点,默认时,数据点是空心的。2.实心图实心图是将数据的起点和重点连成多边形,并填充颜色。绘制实心图的函数是fill,其调用格式为fill(x1,y1,选项1,x2,y2,选项2,…)fill函数按向量元素下标渐增次序依次用直线段连接x、y对应元素定义的数据点。假若这样连接所得折线不封闭,那么MATLAB将自动把该折线的首尾连接起来,构成封闭多边形,然后将多边形内部涂满指定的颜色。【例3.12】绘制一个蓝色的六边形。程序如下:n=6;dt=2*pi/n;st=0:dt:2*pi;t=[st,st(1)];%数据向量的首尾重合,使图形封闭。x=sin(t);y=cos(t);fill(x,y,'b');axis([-1.51.5-1.51.5])3.复数向量图MATLAB中除可以用plot函数绘制复数向量图外,还可

温馨提示

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

评论

0/150

提交评论