1、第2章 MATLAB语言程序设计基础,2.1 MATLAB语言数据类型2.2 数值运算2.3 符号运算2.4 MATLAB语言程序控制结构2.5 M文件概述2.6 MATLAB图形绘制2.7 实例解析,本章目标:了解MATLAB语言程序设计及图形绘制的基本内容,2.1 MATLAB语言数据类型,MATLAB支持的基本数据类型见下图。,MATLAB的数据类型,一、变量与常量,变量是任何程序设计语言的基本元素之一,它是指其数值在数据处理的过程中可能会发生变化的一些数据量名称。而常量则是指在计算过程中数值不发生变化的量。 MATLAB语言变量有如下特点:不要求对所使用的变量进行事先声明,也不需要指定
2、变量类型,MATLAB会自动根据所赋予变量的值或对变量所进行的操作来确定变量的类型;在赋值过程中,如果变量已经存在,MATLAB会用新值代替旧值,并以新的变量类型代替旧的变量类型。 如果没有事先声明,MATLAB中的变量指的是局部变量。此外用户还可以使用global()函数来定义全局变量,全局变量可以用于不同函数文件之间的传递,但也正是由于全局变量的这种特性使得程序的可读性降低甚至容易出错,所以建议读者一般不要使用全局变量。,MATLAB语言中还有一些预定义的变量,这些变量即称为常量。 下表列出了MATLAB语言中常用的几个常量。,注:NaN与Inf的乘积仍为NaN。,二、数值型数据,数值型数
3、据包括整数(带符号和无符号)和浮点数(单精度和双精度)。 在缺省(默认)状态下,MATLAB将所有的数都看作是双精度的浮点数。 使用整型变量和单精度变量可以节约内存空间。,三、符号型数据,符号型数据是一般科学计算软件所不具有的,它可以用于公式的推导 和数学问题的解析解法。在进行解析运算前需要首先将采用的变量申明为 符号变量,这需要用syms()函数实现 。例如:syms a b;,四、字符串,字符与字符串运算是各种高级语言不可缺少的部分,它可以用来表示 一些MATLAB函数的属性值,并用于显示中英文内容等。MATLAB具有强 大的字符处理能力。,1、字符串的定义,MATLAB提供了以下几种方法
4、来定义一个字符串: 直接用单引号赋值; 利用char()函数结合ASCII码来生成字符串(因为字符串中的字符 是以ASCII码存储的,所以大小写是有区别的,可以用double()函数 或abs()函数查看一个字符串的ASCII码); 利用字符数组生成字符串。例如:用户可以在命令窗口中输入如下语句: s1=I love matlab % 方式1 s2=char(73 32 108 111 118 101 32 109 97 116 108 97 98) % 方式2 s3=I, ,l,o,v,e, ,m,a,t,l,a,b % 方式3,2、字符串的连接,字符串可以利用“ ”运算符进行拼接,不过拼接
5、字符串时需要注意以下两点: 若使用“,”作为不同字符串之间的间隔,则相当于扩展字符串成为更长的字符串向量。 若使用“;”作为不同字符串之间的间隔,则相当于扩展字符串成为二维或者多维的数组,这时,不同行上的字符串必须具有同样的长度,,此外还可以利用MATLAB提供的函数实现字符串的拼接:strcat()函数实现字符串水平连接 strvcat()函数实现字符串垂直连接,五、元胞与结构体型数据,1、元胞数组 用户可以使用以下两种方法来建立一个元胞数组。用赋值语句直接定义;由cell()函数预先分配存储空间,然后对细胞的每个元素逐个赋值。 元胞数组中元素一般可以用Am,n或A(m,n)这两种方式来调用
6、,它们的不同之处在于:Am,n得到的结果的类型为元素自身的类型,而A(m,n)的数据类型为元胞数组类型。,2、结构数组,结构体是MATLAB中比元胞数组更广义的数组,它的每一个元素都称为域, 域中可以存放任意类型的数据结构。与其他数组不同的是结构数组用域名来调 用域的内容。结构数组具有层次数据结构,它可以描述一个班级下的每个学生 的姓名、性别、课程和得分这样的层次结构。该层次的结构可以存放广泛的数 据类型,如典型的MATLAB图形结构就是用结构数组来组织的,由屏幕、菜单、 图形和修饰图形的元素自上而下这样的层次组成。 同元胞数组类似,结构数组的创建也有两种方法: 用赋值语句直接定义; 用结构函
7、数structure()来直接产生。,六、不同数据类型之间的转化,MATLAB提供了丰富的函数来实现常用数据类型间的转换,具体见下图。,注:上图中的S2N包括:str2int,str2num,str2mat,sscanf等; N2S包括: int2str,num2str,mat2str,sprintf等。,2.2 数值运算,一、矩阵及其运算,MATLAB中是以矩阵作为基本编程单元的,所以矩阵运算十分重要。 1、矩阵的输入 在MATLAB中,输入矩阵可有以下几种方法: 输入元素列表;(a=1 2 3;4 5 6;7 8 9) 从外部数据文件中读取矩阵;(load data.mat) 利用MATL
8、AB内部函数与工具箱函数产生矩阵;(a=eye(4) 用户自己编写语句产生矩阵。(r=5-10*rand(2, 3) 2、矩阵的基本运算矩阵的基本运算主要包括矩阵的代数运算、逻辑运算和关系运算。代数运算主要包括矩阵转置(通过“”或transpose函数实现)、矩阵加(+)、减(-)、乘(*)、除(左除”,右除”/“)、乘方()和点(.)运算;逻辑运算包括与(&和&)、或(|和|)、非()和异或(xor);关系运算包括等于(=)、不等于(=)、大于()、小于(=)。,二、多项式及其运算,1、多项式的构造 MATLAB中构造多项式主要通过函数poly2sym()和poly2str()实现,这两个函
9、数的调用格式如下: poly2sym(C,V) poly2str(C,V) 其中,C为多项式系数向量,按降幂排列,V为指定的变量,对于poly2sym()函数,V的默认值为x,而对于poly2str()函数V必须指定。 2、多项式的基本运算 多项式的基本运算包括加(+)、减(-)、乘(conv)、除(deconv)、微分(polyder)、积分(polyint)、估值(polyval)和求根(roots)。,三、复数及其运算,1、复数绘图 对于复数函数的绘图主要有两种形式。一种是直角坐标图(plot),即分别以复数的实部和虚部为坐标作出复数的表示图;另一种为极坐标图(polar),即以复数的模
10、和幅角为坐标作图。 例如:编写如下语句: t=0:0.1:2*pi; y=t+i*t.*sin(t); r=abs(y);theta=angle(y); %求极半径和极角 % theta,r = cart2pol(t,t.*sin(t); subplot 121,plot(y),title(直角坐标图) subplot 122,polar(theta,r),title(极坐标图) 输出结果如右图所示。 2、复数的基本运算 复数的基本运算包括求复数的实虚部、幅值和 相角以及其共轭复数等。相关的操作函数为: real,imag,abs,angle和conj。,3、留数的计算由复变函数课程的学习可知
11、,留数的计算可以最终归结为极限的计 算,下面仅介绍留数在MATLAB中的求解。相关的实现语句如下: c=limit(F*(z-z0),z,z0) % 单奇点 c=limit(diff(F*(z-z0)m,z,m-1)/prod(1:m-1),z,a) % m重奇点这里需要对上述两个函数作一点说明:limit()函数是求极限的函数, prod()函数是求连乘的函数。例如: syms x; limit(sin(x)/x) ans =1 prod(1 3 6 4 7) ans =504,2.3 符号运算,一、符号微积分 1、符号极限 MATLAB语言的符号运算工具箱提供的limit()函数可以用来求
12、解极限问题。其具体调用格式如下: L=limit(F,x,a) L=limit(F,x,a,right或left) 其中,F为极限表达式且必须为符号表达式;x为符号自变量,求解之前应先用syms x声明,若x=findsym(F)则可省略;a为极限点,可以是一个确定的值、函数或无穷;right或left是单边极限的定义,给出左右选项。 2、符号导数 如果函数和自变量都已知,且均为符号变量,则可以用diff()函数解出给定函数的各阶导数,该函数的调用格式为: dF=diff(F,x,n) 其中,n为求导的阶次,缺省值为1。其余参数同limit()函数。,3、符号积分 MATLAB符号运算工具箱中
13、提供的int()函数可以直接用来求取积分问题的解析解。该函数的常用调用格式为: I=int(f,x) % 求不定积分 I=int(f,x,a,b) % 求定积分 其中f为被积函数,x是自变量,a,b是积分区间,可以为确定的值,函数或无穷。 4、符号级数 级数展开 单变量函数的Taylor幂级数展开 单变量函数的Taylor幂级数展开可以用符号工具箱的taylor()函数直接导出,其调用格式为 r=taylor(f,x,n,a) 其中f为函数的符号表达式,x为符号自变量,若函数只有一个自变量,则x可以省略,n为需要展开的项数,默认值为6,a为函数展开点,表明需要获得关于x=a的幂级数展开,a的默
14、认值为0。 多变量函数的Taylor幂级数展开 MATLAB并未提供计算多变量函数Taylor幂级数展开的直接函数,但它可以调用maple语言中的mtaylor()函数来直接求取多变量函数的Taylor幂级数展开。该函数的调用格式如下: T=maple(mtaylor,f,x1,x2,.,xn,n) % 格式1 T=maple(mtaylor(f,x1,x2,.,xn,n) % 格式2 T=maple(mtaylor,f,x1=a1,x2=a2,.,xn=an,n) % 格式3 T=maple(mtaylor(f,x1=a1,x2=a2,.,xn=an,n) % 格式4 其中格式1与格式2等价
15、,格式3与格式4等价,格式1与格式2主要用于求解原点处的Taylor展开,格式3和格式4主要用于求解(a1,a2,.,an)处的Taylor展开,n-1为展开的最高阶次。,Fourier级数展开 给定周期函数 ,其中 ,我们可以人为地对该函数在其他区间上进行周期延拓,使得这样可以根据需要将其写成下面的级数形式:,其中,该级数称为Fourier级数。根据上述公式这里编写了函数fseriessym和fseriesquadl 来求解函数的Fourier级数展开。具体的源文件参看教材。,级数的求和 MATLAB符号运算工具箱提供的symsum()函数可以用于求解已知通项的有穷或无穷级数的和。 该函数的
16、调用格式为:r = symsum(s,v,a,b),其中,s为级数的通项,v为级数自变量,a和b为 级数求和的起始项和终止项,并可以将起始项或终止项设置成无穷量inf。如果s变量中只含有 一个变量,则在函数调用时可以省略v。 5、符号积分变换 Fourier变换及其逆变换 MATLAB提供了专门的Fourier变换的求解函数:fourier()和ifourier()。这两个函数的调用格式如下: Fw = fourier(ft,t,w) ft = ifourier(Fw,w,t) Laplace变换及其逆变换 MATLAB中提供了专门的Laplace变换求解函数:laplace()和ilapla
17、ce()。这两个函数的调用格式如下: Fs=laplace(ft,t,s) ft=ilaplace(Fs,s,t) Z变换及其逆变换 MATLAB中提供了专门的Z变换求解函数:ztrans()和iztrans() 。这两个函数的调用格式如下: FZ = ztrans(fn,n,z) fn = iztrans(FZ,z,n),二、符号方程的求解,1、符号代数方程的求解 一般代数方程包括线性(Linear)、非线性(Nonlinear)和超越(Transcendental)方程等,MATLAB提供了统一的求解函数solve(),该函数的调用格式为: S=solve(eqn1,eqn2,eqnn,v
18、1,v2,.,vn) % 格式1 S=solve(eqn1,eqn2,eqnn,v1,v2,.,vn) % 格式2 x1,x2,xn=solve(eqn1,eqn2,eqnn,v1,v2,.,vn) % 格式3 其中,eqni是第i个方程的符号表达式,vi是第i个符号变量,格式1和格式2中的S是一个结构数组,要显示出显式解,可通过S.vi得到。 2、符号微分方程的求解 MATLAB提供了dsolve()函数求解微分方程。该函数允许用字符串的形式描述微分方程及初值、边值条件,最终将给出微分方程的解析解。该函数的调用格式为: sols =dsolve(eq1,eq2,., cond1,cond2,
19、., v) % 格式1 sols =dsolve(eq1,eq2,.,cond1,cond2,.,v) % 格式2 其中eqi表示微分方程组的第i个表达式;condi是第i个初始条件,v是eqi中指定的符号自变量(缺省变量为t)。,2.4 MATLAB语言程序控制结构,一、顺序结构顺序结构是指按照程序中语句排列顺序一次执行,直到程序的最后一个语句。 这是最简单的一种程序结构,一般涉及数据的输入,数据的计算或处理,数据的输 出等内容。 1、数据的输入 从键盘上输入数据,可以使用input()函数,该函数的调用格式为: user_entry = input(prompt) % 格式1 user_e
20、ntry = input(prompt,s) % 格式2 其中,prompt是提示信息,比如提示输入某某参数等,s用于指定输入内容为一个字符串。 2、数据的输出 MATLAB提供的命令窗口输出函数主要是disp()和fprintf()函数。disp()函数的调用格式为: disp(X) 其中,X是需要输出的内容,可以是字符串,也可以是矩阵。 fprintf()函数的使用方法类似于C语言中的printf()函数,但有些参数的含义有细微差别,读者可自行摸索。,2.4.2 选择结构,条件语句 MATLAB中,条件语句由if.end语句实现,if.end一般有以下三种使用形式: 单分支if语句 双分支
21、if语句 多分支if语句 其执行语句组如下:,if 条件语句组 end,if 条件语句组1 else 语句组2 end,if 条件1语句组1 elseif 条件2语句组2. elseif 条件n语句组n else语句组m end,单分支,双分支,多分支,开关语句 开关语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:,switch 开关表达式case 表达式1语句组1case 表达式2语句组2.case 表达式n语句组notherwise语句组m end,三、循环结构,1、for语句 for语句的一般语句格式为:其中,V是一个向量,循环变量每次从向量V中取一个值,执行一次循环体语句,
22、如此下去, 直至执行完V向量中的所有分量,将自动结束循环体的执行。 2、while语句 while语句的一般语句格式为:其中,条件为真时,执行循环体语句。,for 循环变量=V循环体语句 end,while(条件) 循环体语句 end,四、试探结构,试探结构是MATLAB独有的一种语句结构,它主要用来对异常情况进行处理,其一般语句格式为:在执行程序时,该语句结构首先试探性地执行语句段1,如果语句段1出现错误时,控制语句catch就会捕获它,并执行相应的语句段2。,try语句段1 catch语句段2 end,五、递归结构,程序调用自身的编程技巧称为递归(recursion),它是一种在程序设计语
23、言中广泛使用的算法,但同时递归结构也是比较难理解和掌握的。递归结构可以使程序变得简洁,但是程序可读性降低,同时程序的运行效率也比较低。,2.5 M文件概述,一、M文件编辑器 MATLAB的M文件是一个文本文件,可以通过任何编辑器来建立与编辑,最为方便 的是使用MATLAB提供的M文件编辑器(Editor)。建立一个新的M文件可以有以下几 种方法: 单击菜单命令File-New-Blank M-file 在MATLAB命令窗口中输入命令edit创建 单击MATLAB窗口上的 图标创建 打开一个已有的M文件也相应的有以下方法: 单击菜单命令File-Open,从弹出的对话框中选定所需打开的M文件
24、在MATLAB命令窗口中输入命令:edit 文件名 单击MATLAB窗口上的 图标,再从弹出的对话框中选定所需打开的M文件,二、M-脚本文件,M-脚本文件的执行方式很简单,用户只需在MATLAB的提示符“”下键入该M文件的文件名,MATLAB就会自动执行该M文件中的各条语句。M-脚本文件运行产生的变量都驻留在MATLAB的工作空间(Workspace)中,这样可以很方便地查看变量,但值得注意的是M-脚本文件中的变量都是全局变量,因此要十分注意避免变量的覆盖而造成程序出错。,三、M-函数文件,M-函数文件是由function语句引导,其基本结构为:其中,以function开头的一行为声明行,表示
25、该M文件是一个函数文件。函数名的命名规则与变量名相同。函数可以没有输出参数,当只有一个输出参数时,可以不加方括号(),函数一般至少有一个输入参数。 M-函数文件在运行过程中产生的变量都存放在函数本身的工作空间,当文件执行到最后一行或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间中的变量被清除。,function 输出变量列表=函数名(输入变量列表) 注释说明部分 函数体语句,四、几个特殊函数,1、inline()函数 inline()函数的一般调用格式为: fun=inline(expr) % 格式1 fun=inline(expr,arg1,arg2,.) % 格式2 f
26、un=inline(expr,n) % 格式3 其中,expr是任何本身有效的字符串表达式,arg1,arg2,.是出现在expr中的所有变量的名字,格式3是将字符串表达式转换为输入变量为x,P1,P2,.,Pn生成的内联函数。 2、匿名函数 匿名函数是自MATLAB 7.0版起给出的一种全新的函数描述形式,其描述格式类似于inline()函数,但又比inline()函数更简洁,更容易使用,而且效率也更高。匿名函数的一般使用格式为: fun=(arg1,arg2,.)expr 其各参数的含义与内联函数中的相同。,3、feval函数 MATLAB提供的feval()函数是用来执行函数操作的函数,
27、故有“函数的函数”之称,其一般调用格式为: y1, y2, . = feval(fhandle, x1, ., xn) y1, y2, . = feval(function, x1, ., xn) 其中,fhandle是函数句柄,函数句柄是一种数据类型,以“”来引导,例如“sin”;function是函数名,x1,x2,.,xn是输入参数,相应的y1,y2,.,yn是输出参数。,2.6 MATLAB图形绘制,一、图形窗口简介 在MATLAB下建立一个图形窗口可由函数figure()来完成,或者可以选择“File”菜单下的“New Figure”命令来建立图形窗口。每执行一次该命令就产生一个图形
28、窗口, MATLAB会自动在这些窗口的名字上依次添加序号(Figure 1, Figure 2,)作为区别,但是函数figure()可指定创建窗口的编号,其常见的用法如下: figure(n) % 格式1 figure(PropertyName,PropertyValue,.) % 格式2 其中格式1是用于创建标号为n的图形窗口,格式2是创建一个图形窗口对象并设置其相关属性。常用图形窗口对象的属性及属性名见表2-14。 MATLAB还提供了函数close()关闭图形窗口。该函数的调用格式为: close(h) %关闭句柄为h的图形窗口,默认值为gcf close name %关闭指定名称的图形
29、窗口 close all %关闭所有的图形窗口,另外,MATLAB还提供了一个分割图形窗口的函数subplot,该函数的调用格式主要有: subplot(m,n,p) % 格式1 subplot(mnp) or subplot mnp % 格式2 subplot(Position,left bottom width height) % 格式3 其中,格式1和格式2的功能是将当前图形窗口分成mn个绘图区,m和n分别表示图形窗口中子图的行数和列数,p表示子图的序号(序号按行优先编号),格式2是格式1的省略写法(因为格式2只适合m,n和p均为一位整数的情况),格式3的功能是在指定的位置绘制坐标轴,l
30、eft和bottom是坐标轴坐下角点的位置坐标(相对于整个Figure空白区域的比例),width和height是坐标轴的宽和高。,二、二维图形的绘制,MATLAB提供了具有不同功能的二维图形绘制函数。它们以不同的方式来表现各种 数据的涵义,这些涵义的不同本身就体现在曲线的外观上。 具体的函数如下表:函数plot()、semilogx()、semilogy()和loglog()可以用来绘制一般的曲线,它们的用法完全一致,只是曲线的外观有所不同,这几个函数的共同调用格式为: function_plot(Y) % 格式1 function_plot(X,Y,LineSpec,.) % 格式2 fu
31、nction_plot(X,Y,PropertyName,PropertyValue,.) % 格式3 其中,function_plot是函数plot()、semilogx()、semilogy()和loglog()的统一描述。,三、三维图形的绘制,三维图形主要包括三维曲线图和三维曲面图。MATLAB中也就图形形式的不同给出 了不同的图形绘制函数,具体如下: 1、 三维曲线图的绘制 MATLAB提供的绘制三维曲线的函数主要有line()和plot3()。这两个函数的调用格式类似于plot()。下面仅简要介绍plot3()函数的用法,plot3()函数的调用格式为: plot3(X1,Y1,Z1
32、,LineSpec,.) % 格式1 plot3(X1,Y1,Z1,PropertyName,PropertyValue,.) % 格式2 2、三维网格图的绘制 MATLAB提供的mesh()函数可以绘制三维网格图,其调用格式为: mesh(Z) % 格式1 mesh(X,Y,Z) % 格式2 mesh(X,Y,Z,C) % 格式3 mesh(X,Y,Z,PropertyName,PropertyValue,.) % 格式4 另外,MATLAB还提供了surf函数来绘制着色表面图,该函数的调用方法和mesh函数类似,这里不再赘述。,四、图形修饰,1、图形标注 图形标注主要包括坐标轴窗口标注、图
33、题标注、坐标轴的标注和图例标注。 坐标轴窗口标注 text()函数和gtext()函数都是用来在坐标轴窗口标注内容,不同的是gtext()函数只能用来标注二维图形,而text()函数则不然。它们的调用格式为: text(x,y,string) % 格式1 text(x,y,z,string) % 格式2 text(x,y,z,string,PropertyName,PropertyValue) % 格式3 gtext(string) % 格式4 gtext(string1,string2,string3,.) % 格式5 gtext(string1;string2;string3;.) % 格
34、式6 其中x,y,z是标量或长度相等的向量,string是要添加的字符串。 图例添加 legend()函数用来为图形添加图例,它的调用格式很多,下面就其中几种常见的调用格式加以说明: legend(string1,string2,.) % 格式1 legend(h,string1,string2,.) % 格式2 legend(mode)或legend mode或legend(axes_handle,mode) % 格式3 legend(.,pos) % 格式4 其中,string1,string2,.是要标注的字符串,,坐标轴标注 xlabel(ylabel和zlabel)函数用于坐标轴的x
35、(y和z)轴的标注,这3个函数的用法完全相同,这里仅以函数xlabel函数为例介绍其使用方法,其调用格式为: xlabel(string,PropertyName,PropertyValue,.) 其中,string是所要标注的字符串,PropertyName和PropertyValue是设置的属性及属性值,它们必须成对出现,常见的有字体,字号等。 标题添加 title()函数用于给图形添加标题,并对标题设置若干属性。其调用格式为: title(string,PropertyName,PropertyValue,.) 其各参数的含义同于xlabel()函数。 基本图形的绘制 annotatio
36、n()函数可以用来绘制线段、箭头、双向箭头、文本箭头、文本框、椭圆和矩形等基本图形,其调用格式为: annotation(annotation_type,x,y) % 格式1 annotation(annotation_type,x y w h) % 格式2 annotation(.,PropertyName,PropertyValue,.) % 格式3,2、图形编辑 MATLAB中通过一些低级绘图指令可以很好的控制和绘制一些精细的图形。它主要通过set和get函数实现,这两个函数分别用来查询和设置相关属性,它们的调用格式为: returned_value=get(object_handle,
37、PropertyName) %查询句柄为object_handle的图形对象元素的PropertyName属性取值,返回给returned_value set(object_handle,PropertyName,NewPropertyValue) %将句柄为object_handle的图形对象元素的PropertyName属性取值设置为“NewPropertyValue”,五、函数绘图,MATLAB提供了一些根据函数表达式来绘制图形的函数,它们可以很容易地实现符号表达式的图形化。具体介绍如下: 1、fplot函数 fplot函数通过其内部的自适应算法来动态决定自变量的间隔 ,其一般调用格式为
38、: fplot(fun,limits,LineSpec) % 格式1 fplot(fun,limits,tol,LineSpec) % 格式2 fplot(fun,limits,n) % 格式3 fplot(fun,limits,tol,n,LineSpec,p1,p2,.) % 格式4 其中,fun是需要绘制曲线的函数名称;limits表示绘制图形的坐标轴取值范围,可以有两种方式:xmin,xmax表示图形x坐标轴的取值范围,xmin,xmax,ymin,ymax表示x,y坐标轴的取值范围;tol表示函数相对误差精度,其默认值为2e-3,n用于指定绘图的最少点为n+1,因此最大步长为(xma
39、x-xmin)/n,n的默认值为1,LineSpec用于指定曲线的线型、颜色和标记符号等,p1,p2,.是函数fun的附加参数。,2、ezplot函数 MATLAB提供的ezplot()函数可以直接画出字符串函数或符号函数的图形。该函数的调用格式为: ezplot(fun,min,max) % 格式1 ezplot(fun,xmin,xmax,ymin,ymax) % 格式2 ezplot(funx,funy,tmin,tmax) % 格式3 ezplot(.,figure_handle) % 格式4 其中fun是输入函数名或表达式,可以为一元函数或隐函数,当fun是 的形式时,min,max
40、是自变量的取值范围,其默认值为 ,当fun是的形式时,min,max满足minxmax,minymax;xmin,xmax,ymin,ymax用于指定横纵坐标的范围,其默认值为 ;funx,funy是参数方程的表达式,tmin,tmax用于指定参数方程自变量的范围,其默认值为 ;figure_handle是指定的图形窗口,默认值为当前图形窗口。 类似地,MATLAB提供的ezplot3()函数可以用来绘制三维参数曲线,其具体调用格式为: ezplot3(funx,funy,funz,tmin,tmax,animate) 其中animate用来设置动画的绘制曲线过程,可省略。,3、ezconto
41、ur函数 ezcontour()函数是根据函数表达式来绘制等高线的,其调用格式为: ezcontour(fun,domain) ezcontour(fun,domain,n) 其中fun表示函数的表达式;domain表示绘制图形的坐标轴取值范围,可以有两种方式:min,max表示minxmax,minymax,xmin,xmax,ymin,ymax表示xminxxmax,yminyymax,domain的默认值为 ;n用于指定绘制网格时采用的离散取样点数,其默认值为60。,六、专用图形的绘制 1、条形图 条形图适用于绘制离散数据。对于比较不同的数据,用条形图一目了然。MATLAB提供了4个用于
42、绘制条形图的指令:bar,bar3,barh和bar3h;其中函数bar()和bar3()分别用来绘制二维和三维竖条形图,而barh和bar3h则用来绘制水平条形图。上述几个函数的调用格式类似,下面仅以bar()函数为例加以说明其用法,bar()函数的调用格式有: bar(Y) bar(x,Y) bar(.,width) bar(.,style) bar(.,bar_color) bar(.,PropertyName,PropertyValue,.) 其中Y是待统计的数据,它是向量或矩阵。x是x轴的坐标,其默认值为1:size(Y,1)。width用于指定bar的宽度,当width1时相邻的b
43、ar之间就会存在重叠的情况,width的默认值为0.8,style用于指定条形图的分布方式,它有以下几个选项: grouped排列型条形图(默认值) stacked堆型条形图 bar_color是一个单字符,用于指定所有条形图的颜色,可选值为表2-16中颜色栏的所有颜色值,其他的颜色需要通过句柄来设定。,2、面积图 面积图适用于绘制连续数据,从面积图绘制的图形中我们可以很直观地看到各个数据在总和中所占的比例,所以它特别使用于商业统计。 MATLAB专门提供了命令area来绘制面积图,它的调用格式为: area(Y) area(X,Y) area(.,basevalue) area(.,Prop
44、ertyName,PropertyValue,.) 其中,area(X,Y) 的执行过程为先调用plot(x,y),然后根据当前的颜色映像,用均匀分布的颜色进行填充,basevalue是指定填充时到达的最小y坐标。缺省时basevalue=0,即填充到x轴为止;参数PropertyName和PropertyValue为area生成的图形指定属性值,例如表面颜色(facecolor)、边缘颜色(edgecolor)和线宽(linewidth)等。 3、饼图 饼图用于显示向量中的元素占向量元素总和的百分比,不仅直观,而且很美观。MATLAB中提供了函数pie()和pie3()分别用于绘制二维和三维
45、饼图。它们的用法类似,以函数pie为例,该函数的调用格式为: pie(X) pie(X,explode) pie(.,labels) 其中x是欲分析数据对应的数组,explode与x的维数相同,其中的非零元素对应的切片是分离的切片,labels中的参数是增加的自定义标注内容,它与x的维数也相同。,七、动画的制作 利用动画可以观察变化全过程的更多信息,同时可能得到相关的规律,本节将介绍如何利用MATLAB制作动画。MATLAB中动画的制作主要有以下两种方式: 电影动画:在保存多幅图像后以电影的形式播放出来,这种方式适用于获取一幅图像时间较长的情况,用户可以在计算出所有图像后反复观察图像变化过程。
46、 擦除动画:在图形窗口中不断地计算并画出图形,在当前图形窗口中只显示利用当前参数计算所得的图片,这样看起来就具有动画效果了。这种方式适用于获得图像时间较短的情况。,1、电影动画 电影动画的好处就是,运行一次可以多次播放,而且可以直接生成.avi文件,直接独立于MATLAB环境播放。 MATLAB中,创建电影动画的过程主要分为以下2个步骤: (1)调用moviein()函数对内存进行初始化(该步骤在MATLAB 5.3以上均可省略),创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。 (2)调用getframe()函数生成每个帧。该函数可以捕捉动画帧,并保存到
47、矩阵中。一般将该函数放到for循环中得到一系列的动画帧。该函数的调用格式主要有: F=gefframe % 从当前图形框中得到动画帧 F=gefframe(h) % 从图形句柄h中得到动画帧 F=getframe(h,rect) % 从图形句柄h的指定区域rec中得到动画帧 另外,MATLAB还提供了函数avifile()来记录动画过程,利用该函数可以得到一个avi.文件。该函数调用格式为: aviobj = avifile(filename) aviobj = avifile(filename, Param1, Val1, Param2, Val2, .) 其中aviobj用于标记.avi文
48、件,相当于一个句柄。filename是avi文件的名称。Parami和Vali分别是该函数的属性和相应取值,用于控制.avi文件的质量等属性。,2、擦除动画 使用MATLAB的绘图函数不断重复绘制图形对象,重绘过程中递增式地改变图形对象位置将产生动画效果。之所以能产生动画效果是由于对原来的图形对象进行了擦除处理。 MATLAB中,创建擦除重绘动画的过程分为以下三步: (1)设置重绘对象的擦除模式 MATLAB的图形绘制函数允许采用不同的擦除模式来擦除原来的对象,不同的擦除模式将产生不同的动画效果。擦除模式是通过设置“EraseMode”属性来完成的,其相关属性值读者自行参看帮助文档。 (2)在循环语句中使用set()函数更改图形的xdata,ydata和zdata等坐标数据。 (3)使用drawnow命令刷新屏幕或利用pause()函数设置暂停时间。,