1、附录A MATLAB基础 MATLAB是由美国Mathworks公司推出的一个科技应用软件,其名字来源于矩阵(matrix)和实验室(laboratory)两词的前3个字符。它是一种广泛应用于工程计算及数值分析领域的高级语言,可以把科学计算、结果可视化和编程都集中在一个使用非常方便的环境中。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。在国际学术界,MATLAB已经被确认为是准确、可靠的科学计算标准软件。 MATLAB特点如下: (1)MATLAB是一个交互式软件系统,输入一条命令,立即就可以得出该命令的结果。 (2)数值计算功能。以矩阵作为基本单位,但无需预
2、先指定维数(动态定维);按照IEEE的数值计算标准进行计算;提供十分丰富的数值计算函数,方便计算,提高效率;命令与数学中的符号、公式非常接近,可读性强,容易掌握。 (3)强大的符号运算功能。 (4)绘图功能。提供了丰富的绘图命令,能实现一系列可视化操作。 (5)编程功能。具有程序结果控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 (6)丰富的工具箱。工具箱实际上是用MATLAB的基本语句编成的各种子程序集,用于解决某一方面的专门问题或实现某一类的新算法。工具箱可分为功能型和领域型。功能型工具箱主要用来扩充MATLAB的符号计算功能、图形建模仿真功
3、能、文字处理功能以及与硬件实时交互等功能,能用于多种学科。领域型工具箱专业性很强,如控制系统工具箱(Control System Toolbox)、信号处理工具箱(Signal Processing Toolbox)、符号数学工具箱(Symbolic Math Toolbox)、统计工具箱(Statistics Toolbox)、优化工具箱(Optimization Toolbox)、财政金融工具箱(Financial Toolbox)等。 A.1 MATLAB语言的数据结构 强大方便的数值运算功能是MATLAB语言的最显著特色之一。从计算精度要求出发,MATLAB最常用的数据为双精度浮
4、点数,占8个字节(64位)遵从IEEE计数法,有11个指数位、53位尾数及一个符号位,值域的近似范围为,其MATLAB表示为double。MATLAB最基本的数据结构为复数双精度浮点矩阵。考虑到一些特殊的应用,如图像处理,MATLAB语言还引入了无符号的8位整型数据类型,其MATLAB表示为uint8,其值域为,这样可以大大节省MATLAB的存储空间,提高处理速度。此外,在MATLAB中还可以使用其他的数据类型,如int8,int16,int32,uint16和uint32等,每个类型后面的数字表示其位数,其含义不难理解。 除了数值运算外,MATLAB及其符号运算工具箱还可以进行公式推导和解
5、析求解,这时需要使用符号型变量。符号型变量可以由syms命令来定义。 为方便编程,MATLAB还允许其他更高级的数据类型,如字符串、多维数组、结构数组、细胞数组、类和对象等。 A.1.1 常量和变量 1.变量 MATLAB中的变量可用来存放数据,并进行各种运算。 变量的命名规则是:(1)变量名区分大小写;(2)变量名以字母开始,可以由字母、数字、下划线组成,但不能使用标点符号;(3)变量名长度不超过63位,最多只能含有63个字符,后面的字符无效。 2.常量 在MATLAB语言中还为特定常数保留了一些名称,虽然这些常量都可以重新赋值,但建议在编程时应尽量避免对这些量重新赋值。
6、1)eps:机器的浮点运算误差限。PC级上eps的默认值为,若某个量的绝对值小于eps,则从数值运算的角度可以认为这个量为0。 (2)i和j:若i或j量不被改写,则它们表示纯虚数单位。但在MATLAB程序编写过程中经常事先改写这两个变量的值,如在循环过程中常用这两个变量来表示循环变量。如果想恢复该变量,则可以用下面的形式设置:i=sqrt(1),即对1求平方根。 (3)inf:无穷大量的MATLAB表示。同样地,可以表示为inf。在MATLAB程序执行时,即使遇到了以0为除数的运算,也不会终止程序的运行,而只给出一个“除0”警告,并将结果赋成inf,这样的定义方式符合IEEE的标准。
7、4)NaN:不定式(not a number),通常由0/0运算、inf/inf及其他可能的运算得出。 (5)pi:圆周率的双精度浮点表示。 3.符号变量 在MATLAB中进行符号运算时,需要先用syms命令创建符号变量和表达式,如: >>syms x 其中的>>为MATLAB的提示符,由软件自动给出,在提示符下可以输入各种各样的MATLAB命令。 syms不仅可以声明一个变量,还可以指定这个变量的类型,比如: 声明变量x, y为实数类型,可用命令:>>syms x y real 声明变量x, y为整数类型,可用命令:>>syms x y integer 4.变量的查询与清
8、除 在命令窗口中,只要输入who,就可以看到工作空间中所有曾经设定并至今有效的变量。如果输入whos,不但会显示所有的变量,而且会将该变量的名称、性质等都显示出来,即显示变量的详细资料。输入clear,就清除工作空间中的所有变量。如果输入clear 变量名,只清除工作空间中指定变量名的变量。 A.1.2 赋值语句 MATLAB的赋值语句有下面两种结构: 1.直接赋值语句 其基本结构为: 赋值变量=赋值表达式 这一过程把等号右边的表示式直接赋给左边的赋值变量,并返回到MATLAB的工作空间。如果赋值表达式后面没有分号,则将在MATLAB命令窗口中显示表达式的运算结果。若不想显示运
9、算结果,则应在赋值语句末尾加一个分号。如果省略了赋值变量和等号,则表示式运算的结果将赋给保留变量ans。所以说,保留变量ans将永远存放最近一次无赋值变量语句的运算结果。 2.函数调用语句 其基本结构为: [返回变量列表]=函数名(输入变量列表) 其中,函数名的要求和变量名的要求是一致的,一般函数名应该对应于MATLAB路径下的一个文件,例如,函数名myfun一般对应于myfun.m文件。当然,还有一些函数名需对应于MATLAB的内置(built-in)函数。 返回变量列表和输入变量列表均可以由若干个变量名组成,它们之间应该用逗号,返回值变量还允许用空格分隔,如[V, D]=eigs
10、A, 1),该函数求给定矩阵A的模最大的特征值D及对应的特征向量V,所得的结果由V和D两个变量返回。如果不想显示函数调用的最终结果,在函数调用语句后仍应该加个分号,如[V, D]=eigs(A, 1);。 A.1.3 矩阵的MATLAB表示 1.矩阵的输入 复数矩阵为MATLAB的基本变量单元。例如,矩阵可以由下面的语句直接输入到MATLAB的工作空间中: >>A=[1, 2, 3; 4, 5, 6; 7 8 9] 在该语句中,空格和逗号都可以用来分割同一行的元素,而分号(或换行)用来表示换行。给出了上面的命令,就可以在MATLAB的工作空间中建立一个A变量了。同时,该语句将
11、得出如下显示的结果: A= 1 2 3 4 5 6 7 8 9 在MATLAB编程中有一个约定:如果在一个赋值语句后面没有分号,则等号右边的变量将在MATLAB命令窗口中显示出来。如果不想显示中间结果,则应该在语句末尾加一个分号,如: >>A=[1, 2, 3; 4, 5, 6; 7 8 9]; %不显示结果,但进行赋值 这里的%表示后面的语句为注释语句。 在MATLAB中也可以容易地输入向量和标量。 学会了矩阵的基本表示方法之后,就可以容易地理解下面矩阵(由三个子矩阵构成)赋值表达式的方式和结果了。 >>A=[[A; [1,
12、 3, 5]],[1; 2; 3; 4]] %在矩阵下面先补一行,再补一列 这样,新的A矩阵就变成矩阵。可见,利用MATLAB环境可以随意修改矩阵的维数。 MATLAB语言定义了独特的冒号表达式来给行向量赋值,其基本格式 a=s1: s2: s3 其中,s1为起始值,s2为步长间距,s3为终止值。如果s2的值为负值,则要求s1的值大于s3的值,否则结果为一个空向量a。如果省略了s2的值,则步长间距取默认值1。 可以通过下面的语句定义一个行向量: >>b=0: 0.1: 1.05 该语句可以建立起向量b=[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,
13、 0.8, 0.9, 1.0]。 复数矩阵的输入同样也是很简单的,在MATLAB环境中定义了两个记号i和j,可以用来直接输入复数矩阵。例如,如果想在MATLAB中输入如下复数矩阵 , 则可以通过下面的MATLAB语句直接进行赋值: >>c=[1+9i, 2+8i, 3+7i; 4+6i, 5+5i, 6+4i; 7+3i, 8+2i, i] 2.数据类型的转换 可以用B=sym(A)将已知的双精度变量A转换成符号型变量。从符号型到双精度型的变量转换可以用C=double(B)实现。另外,还有其他类型转换函数,如num2str,int2str等。 A.1.4 多维数组的定义
14、除了标准的二维矩阵外,MATLAB还定义了三维或多维数组。假设有若干个维数相同的矩阵,那么把这若干个矩阵一页一页地叠起来,就可以构成一个维数组。三维数组在RGB式彩色图像描述中十分有用,因为,这样的三维数组可以将图像的红色、绿色和蓝色分量分别用像素矩阵表示,然后把这3个矩阵整合成一个三维数组。 假设可以定义如下矩阵 >>A1=[1, 2, 3; 4, 5, 6; 7, 8, 9]; A2=A1'; A3=A1-A2; 则通过下面的方法就可以定义出一个三维数组A4: >>A4(:, :, 1)=A1; A4(:, :, 2)=A2; A4(:, :, 3)=A3 这样可以得出如下的三
15、维数组表示: ,,. MATLAB提供了一个cat函数来构造多维数组,该函数的调用格式为: A=cat(n, A1, A2, …, Am) 其中,n=1和2时分别构造[A1; A2; …; Am]和[A1, A2, …, Am],结果是二维数组,而n=3可以构造出三维数组。例如,例如上面的命令可以由下面的简单函数调用语句取代, >>A5=cat(3, A1, A2, A3) 这样得出的赋值效果和A4完全一致。 A.2 MATLAB的矩阵运算 矩阵是MATLAB数据存储的基本单元,而矩阵的运算是MATLAB语言的核心,在MATLAB语言系统中几乎一切运算均是以对矩阵的操作为基础
16、的。矩阵的运算是按一定的运算规则进行的,其规则是由运算符决定的。 A.2.1 操作符与运算符 1.操作符 在编辑程序或命令中,当标点或其他符号表示特定的操作功能时就称其为操作符。表A.1列出了操作符。 表A.1 操作符 操作符 使用说明 : 冒号。(1)m: n产生一个数组[m, m+1, …, n];(2)m: k: n产生一个数组[m, m+k, …, N](这里Nn);(3)A(:, j)取矩阵的第j列;(4)A(k, :)取矩阵A的第k行;(5)A(:)把A矩阵展开成一个长的列向量。 ; 分号。(1)在矩阵定义中表示行与行之间的分隔符;(2)在命令语句的结尾表示
17、不显示这行语句的执行结果。 … 续行号。一个命令语句非常长,一行写不完,可以分几行写,此时在行的末尾加上续行号,表示是一个命令语句。 % 百分号。在编程时引导注释行,而系统解释执行程序时,%后面的内容不作处理。 2.运算符 算法运算符是构成运算的最基本的操作命令,可以在MATLAB的命令窗口中直接运行。运算符可分为三类:算术运算符、关系运算符与逻辑运算符。不同的运算符及功能说明见表A.2,表A.3,表A.4。 表A.2 算术运算符 运算符 算术运算符 + 加法运算。两个数相加或两个同型矩阵相加。如果是一个矩阵和一个数相加,则这个数自动扩展为与矩阵同维数的一个矩阵。 -
18、 减法运算。两个数相减或两个同型矩阵相减。 * 乘法运算。两个数相乘或两个可乘矩阵相乘。 / 除法运算。两个数a/b表示a÷b,两个矩阵A/B表示A右乘B的广义逆矩阵。 \ 除法运算。两个数a\b表示b÷a,两个矩阵A\B表示B左乘A的广义逆矩阵。 ^ 乘幂运算。数的幂次或一个方阵的幂次。 .* 点乘运算。两个同型矩阵对应元素相乘。 ./ 点除运算。两个同型矩阵对应元素相除。 .\ 点除运算。两个同型矩阵对应元素左除。 .^ 点乘幂运算。A.^B表示矩阵A中每个元素取B中对应元素的幂次。 表A.3 关系运算符 运算符 功能说明 运算符 功能说明
19、> 判断大于关系 >= 判断大于等于关系 < 判断小于关系 <= 判断小于等于关系 == 判断等于关系 ~= 判断不等于关系 表A.4 逻辑运算符 运算符 功能说明 运算符 功能说明 & 与运算 ~ 非运算 | 或运算 xor(a, b) 异或运算 关系运算符主要用于比较数、字符串、矩阵之间的大小或不等关系,其返回值是0或1。 逻辑运算符主要用于逻辑表达式和进行逻辑运算,参与运算的逻辑量以0代表“假”,以任意非0数代表“真”。逻辑表达式和逻辑函数的值以0表示“假”,以1表示“真”。 A.2.1 特殊矩阵和矩阵的操作 1.特殊矩阵 对
20、于一些比较特殊的矩阵,由于其具有特殊的结构,MATLAB提供了一些函数用于生成这些矩阵,见表A.5。 表A.5 生成特殊矩阵的命令函数 命令函数 功能说明 [] 生成空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零。 zeros(m, n) 生成一个m行、n列的零矩阵。 ones(m, n) 生成一个m行、n列的元素全为1的矩阵。 eye(m, n) 生成一个m行、n列的单位矩阵(注意数学上单位矩阵都是方阵)。 rand(m, n) 生成一个m行、n列的[0,1]区间上均匀分布的随机数矩阵。 randn(m, n) 生成一个m行、n列的标准正态分布的随
21、机数矩阵。 2.矩阵中元素或块的操作 对矩阵中元素或块的常用操作见表A.6。 表A.6 矩阵中元素或块的常用操作 表达式或命令函数 功能说明 A(:) 依次提出矩阵A的每一列,将A拉伸为一个列向量。 A([i1:i2], [j1:j2]) 提出矩阵A的第i1~i2行,第j1~j2列,构成新矩阵。 A([i1,i2,i3,i4], :) 提出矩阵A的指定的第i1、i2、i3、i4行,构成新矩阵。 A(:, [j1,j2,j3,j4]) 提出矩阵A的指定的第j1、j2、j3、j4列,构成新矩阵。 A([i2:-1:i1], :) 以逆序提出矩阵A的第i1~i2行,构
22、成新矩阵。 A(:, [j2:-1:j1]) 以逆序提出矩阵A的第j1~j2列,构成新矩阵。 A([i1:i2], :)=[] 删除A的第i1~i2行,构成新矩阵。 A(:, [j1:j2])=[] 删除A的第j1~j2列,构成新矩阵。 [A B]或[A; B] 将矩阵A和B拼接成新矩阵。 diag(A, k) 抽取矩阵A的第k条对角线元素向量(主对角线编号为0,上方的编号依次加1,下方的编号依次减1); 若A为向量,生成一个以A为第k对角线元素的方阵。 tril(A, k) 抽取矩阵A的第k条对角线下面的部分。 triu(A, K) 抽取矩阵A的第k条对角线上面
23、的部分。 flipud(A) 矩阵A进行上下翻转。 fliplr(A) 矩阵A进行左右翻转。 A.’ 矩阵A的转置。 A’ 矩阵A的共轭转置。 rot90(A) 矩阵A逆时针旋转。 3.矩阵的基本函数运算 矩阵的函数运算是矩阵运算中最实用的部分,常用的主要有以下几个,见表A.7。 表A.7 矩阵的函数运算命令 命令 功能 命令 功能 det(A) 求矩阵A的行列式 rref(A) 求矩阵A的行最简形 inv(A) 求方阵A的逆阵 rank(A) 求矩阵A的秩 size(A) 求矩阵A的行数和列数 trace(A) 求矩阵A的迹 ei
24、g(A) 求A的特征值及特征向量 [Q,R]=qr(A) 求正交矩阵Q和上三角阵R满足A=QR orth(A) 将非奇异矩阵A正交规范化 4.矩阵的数据处理 MATLAB具有强大的数据处理功能,比如数据的排序、求最大值、求和、求均值等。常用的数据处理命令见表A.8。 表A.8 常用数据处理的命令 命令 功能 命令 功能 max(A) 求向量或矩阵列的最大值 min(A) 求向量或矩阵列的最小值 mean(A) 求向量或矩阵列的平均值 median(A) 求向量或矩阵列的中间值 sum(A) 求向量或矩阵列的元素和 prod(A) 求向量
25、或矩阵列的元素乘积 var(A) 求向量或矩阵列的方差 std(A) 求向量或矩阵列的标准差 cov(A) 矩阵列向量之间的协方差矩阵 corrcoef(A) 求矩阵列向量之间相关系数矩阵 length(A) 求向量所含元素个数 find(A) 求向量或矩阵中非零元素的地址 A.3 M文件与编程 A.3.1 M文件 M文件是由MATLAB语句(命令或函数)构成的ASCII码文本文件,文件名必须以“.m”为扩展名。M文件通过M文件编辑/调试器生成。在命令窗口调用M文件,可实现一次执行多条MATLAB语句的功能。M文件有命令文件和函数文件两种形式。 1.命令文件
26、 命令文件是MATLAB命令或函数的组合,没有输入输出参数,执行命令文件只需在命令窗口中键入文件名按回车或在M文件编辑/调试器窗口激活状态下按“F5”键。 当用户要运行的指令较多时,可以直接从键盘上逐行输入指令,但这样做显得很麻烦,而命令文件则可以较好地解决这一问题。用于可以将一组相关命令编辑在同一个ASCII码文件中,运行时只需输入文件名,MATLAB就会自动按顺序执行文件中的命令。这类似于批处理文件。命令文件中的语句可以访问MATLAB工作空间(Workspace)中的所有数据。在运行的过程中所产生的变量均是全局变量。这些变量一旦生成,就一直保存在工作空间中,除非用户将它们清除(使用c
27、lear命令)。 2.函数文件 函数文件是另一种形式的M文件,可以有输入参数和返回输出参数,函数在自己的工作空间中操作局部变量,它的第一句可执行语句是以function引导的定义语句。在函数文件中的变量除非用global声明为全局变量外,都是局部变量,它们在函数执行过程中驻留在内存中,在函数执行结束时自动消失。函数文件不单单具有命令文件的功能,更重要的是它提供了与其他MATLAB函数和程序的接口,因此功能更加强大。 MATLAB函数文件的格式为: function [返回参数1,返回参数2,…]=函数名(输入参数1,输入参数2,…) 函数体 注A.1 function是区分命令文
28、件与函数文件的重要标志;函数体包含所有函数程序代码,是函数的主体部分;函数文件保存的文件名应与用户定义的函数名一致。在命令窗口中以文件名调用函数。 例A.1 定义函数,并计算。 在编辑器中写出如下程序: function f=myfunA1(x,y); f=x.*y; 保存为myfunA1.m(这是文件名,与函数名一致),然后在命令窗口中执行 >>myfunA1(2,6) 就可以求得。 3.匿名函数 函数文件一般存储在一个单独的文件中,调用语句放在其他命令文件中,使用起来有时不太方便。匿名函数不需要存储在一个文件中,匿名函数可以接受输入并返回输出,就像标准函数一样。
29、但是,匿名函数只包含一个可执行语句,可以和调用它的语句写在同一个命令文件中。 例A.2(续例A.1)定义匿名函数,并计算。 编写如下的MATLAB程序: funA1=@(x,y)x.*y; z=funA1(2,6) 保存在文件gexA2.m中,在命令窗口运行gexA2就可以求得。 A.3.2 流程控制结构 作为一种程序设计语言,MATLAB提供了循环语句结构、条件控制语句结构和开关语句结构等。 1.循环语句结构 循环语句有两种结构:for…end结构和while…end结构。 (1)for…end结构,其调用格式如下: for 循环变量=初值:步长:终值 循环体 e
30、nd 其执行过程为:将初值赋给循环变量,执行循环体;执行完一次循环之后,循环变量自增一个步长的值,然后再判断循环变量的值是否介于初值和终值之间,如果满足,仍然执行循环体,直至不满足为止。 (2)while…end结构,其调用格式如下: while 表达式 循环体 end 其执行过程为:若表达式的值为真,则执行循环体语句,执行后再判断表达式的值是否为真,直到表达式的值为假时跳出循环。 while语句一般用于事先不能确定循环次数的情况。 2.条件控制语句结构 (1)if…end结构,其调用格式如下: if 条件式 语句体 end 其执行过程为:当条件式为真时,执行语
31、句体,否则不执行。 (2)if…else…end结构,其调用格式如下: if 条件式 语句体1 else 语句体2 end 其执行过程为:当表达式的值为真时,执行语句体1,否则执行语句体2。 (3)if…elseif…else…end结构,其调用格式为: if 条件式1,语句体1 elseif 条件式2,语句体2 elseif 条件式3,语句体3 …… elseif 条件式n,语句体n else,语句体n+1 end 其执行过程为:当条件式i(in)为真时,执行对应的语句体i,否则执行语句体n+1。 例A.3 用MATLAB生成如下的矩阵 .
32、 编写的如下的MATLAB程序: clc, clear ncols=6; nrows=4; A(nrows,ncols)=1; %初始化,赋什么值都可以 for c=1:ncols for r=1:nrows if r==c, A(r,c)=2; elseif abs(r-c)==1, A(r,c)=-1; else, A(r,c)=0; end end end A %显示生成的A矩阵 3.开关语句结构 MATLAB提供的switch开关语句结构,其调用格式如下: switch 开关
33、表达式 case 表达式1,语句体1 case 表达式2,语句体2 …… case 表达式n,语句体n otherwise,语句体n+1 end 其执行过程为:开关表达式的值与每一个case后面表达式的值比较,若与第i(in)个case后面的表达式i的值相等,就执行语句体i;若都不相同,则执行otherwise后面的语句体n+1。 例A.4 输入成绩;时,输出不及格;时,输出一般,时,输出良好;时,输出优秀。 clc, clear n=input('请输入成绩:\n'); k=floor(n/10); switch k cas
34、e {8,9,10}, disp('优秀') case 7, disp('良好') case 6, disp('一般') otherwise, disp('不及格') end 4.其他流程控制语句 其他流程控制语句包括continue语句、break语句和return语句。 (1)continue语句用于for循环和while循环中,其作用就是终止一次循环的执行,跳过循环体中所有剩余的未被执行的语句,去执行下一次循环。 (2)break语句也常用于for循环和while循环中,其作用就是终止当前循环的执行,跳出循环体,去执行循环体外的下一行语句。 (3
35、return语句用于终止当前的命令序列,并返回到调用的函数或键盘。 A.4 MATLAB绘图 MATLAB除了强大的数值分析功能外,其受到工程技术人员广泛接受与使用的另一个重要原因是它提供了方便的绘图功能。用户只需指定绘图方式,并提供充足的绘图数据,即可以得出所需的图形。MATLAB还对绘出的图形提供了各种修饰方法,使绘出的图形更美观。 MATLAB提出了句柄图形学(handle graphics)的概念,为面向对象的图形处理提供了十分有用的工具。在图形绘制时,其中每个图形元素(如其坐标轴或图形上的曲线、文字等)都是一个独立的对象。用户可以对其中任何一个图形元素进行单独修改,而不影响
36、图形的其他部分,具有这样特点的绘图称为向量化的绘图。这种向量化的绘图要求给每个图形元素分配一个句柄(handle),以后再对该图形元素做进一步操作时,则只需对该句柄进行操作即可。 A.4.1 二维绘图函数 1.绘图基本流程 MATLAB提供了丰富的二维和三维绘图函数和绘图工具,绘制图形一般需要经过6个步骤。 (1)准备数据 绘制二维曲线,先需要准备横坐标(自变量)数据,再通过函数关系定义纵坐标(函数值)数据。 (2)创建图形窗口,指定绘图位置 MATLAB默认的图形窗口为Figure1,可以使用函数figure创建图形窗口,作为当前绘图窗口。需要在同一图形窗口绘制多幅图
37、形时,可以使用函数subplot选择子图位置,还可以调用函数set设置窗口属性。 (3)绘制图形 调用绘图函数绘制曲线,并设置曲线的样式和标记属性,如线型、颜色、数据点标记符号等。 (4)设置坐标轴和图形注释 设置坐标轴包括坐标轴的范围、刻度、网格线和坐标轴边框等,图形注释包括图形标题、坐标轴名称、图例、文字说明等。 (5)修饰三维图形 设置三维图形的着色、光照效果、材质、视角和三度(横、纵、高)比例等。 (6)保存或导出图形。 将绘制的图形保存为.fig文件或其他类型的图形文件。 2.基本绘图函数 plot函数是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的
38、可以绘制线段和曲线。函数plot的最典型调用方式是三元组形式: plot(x, y, 'color-style-marker') 其中x, y为同维数的向量(或矩阵),x作为点的横坐标,y作为点的纵坐标,plot命令用直线连接相邻两数据点绘制图形。color、style和marker分别是颜色、线型和数据点标记,它们之间没有先后顺序之分。 颜色、线型和数据点符号如表A.9所示。 表A.9 颜色、线型、数据点符号 颜色符号 颜色 线型符号 线型 数据点符号 标记 b(默认) 蓝色 -(默认) 实线 + 十字 r 红色 : 短虚线 * 星号 y
39、黄色 -- 长虚线 o 圆圈 g 绿色 -. 点划线 x 叉号 c 蓝绿色 s 正方形 m 紫红色 d 菱形 k 黑色 p 五角星 w 白色 h 六角形 画二维曲线图时,当知道曲线的函数表达式时,可以使用3种方式画图: (1)用描点画图命令plot; (2)用函数画图命令fplot; (3)用“Easy-to-use”函数画图命令ezplot,该命令既可以执行符号函数画图,也可以执行匿名函数画图。 3.图形窗口的设置 图形窗口是以图形的方式显示绘图函数的运行结果。 (1)创建新窗口 图形窗口(F
40、igure Window)是MATLAB绘制的所有图形的输出专用窗口。当MATLAB没有打开图形窗口而执行了一条绘图命令时,系统会自动创建一个图形窗口,以后再使用绘图命令时,将刷新当前图形窗口,使用figure函数可以创建多个图形窗口。调用格式为: figure或figure(n) 其中n为窗口编号。 (2)绘制叠加图形 有时希望将后续图形和前面的图形叠加进行比较,MATLAB中采用函数hold启动(或关闭)图形保持功能,将新产生的图形叠加到已有的图形上。常用的3种调用格式如下: hold on:启动图形保持功能,允许在当前图形上绘制其他图形。 hold off:关闭图形保持功能,
41、之后再执行绘图命令,自动清除当前窗口中原有的内容,然后绘制新图形。 hold:在以上两个命令之间切换。 (3)绘制子图 MATLAB中使用函数subplot可以将同一图形窗口分成多个不同子窗口,调用格式为: subplot(m,n,k):将当前图形窗口分割成个子窗口,并选择第k个子窗口作为当前绘图窗口。子窗口的序号按行优先编号,左上方为第一幅,先从左至右再从上至下排列,子窗口彼此独立,有自己的坐标轴。 4.图形修饰 (1)设置坐标轴和网格线 绘制图形时,系统自动给出图形的坐标轴,利用函数axis可以设置坐标轴的刻度和范围。利用函数grid可以设置网格线。调用格式和功能如表A.10
42、所示。 表A.10 设置坐标轴和网格线 类型 调用格式 功能说明 坐标轴显示方式 axis('auto')或axis auto 将坐标轴设置返回默认状态 axis('square')或axis square 将坐标轴设置为正方形(系统默认为矩形) axis('equal')或axis equal 将两个坐标轴刻度设定为相等 axis('off')或axis off 不显示坐标轴 axis('on')或axis on 显示坐标轴的所有设置 坐标轴范围 axis([xmin xmax ymin ymax]) 设定坐标轴的范围为xminxxmax, ymi
43、nyymax 网格线 grid on 显示网格线 grid off 不显示网格线 grid minor 设置网格线间的间距 (2)命令方式添加标注 图形绘制完后,MATLAB提供了一些特殊的图形函数,用于修饰绘制好的图形,如图形标题、坐标轴标记、图例和文字注释等。调用格式和功能如表A.11所示。 表A.11 图形标注函数 标注类型 调用格式 功能说明 标题标注 title('s') 在当前图形的顶部加上字符串s,作为该图形的标题。 title('s', Name, Value) 参数Name、Value定义标注文本的属性和属性值,包括字体 、字体大小、字体
44、粗细等。 坐标轴 标注 xlabel('s') 用字符串s标记轴。 xlabel('s', Name, Value) 参数Name、Value定义标注文本的属性和属性值。 ylabel('s') 用字符串s标记轴。 ylabel('s', Name, Value) 参数Name、Value定义标注文本的属性和属性值。 图例标注 legend({'s1', 's2', …, 'sn'}) 用指定的字符串s1, s2, …, sn在当前图形中添加图例,这里的{}表示使用细胞字符串数组。 legend(labels, 'Location', Value) 在指定位置处添
45、加图例labels。 legend(labels, Name, Value) 参数Name、Value定义标注文本的属性和属性值。 文本标注 text(x, y, 's') 在二维图形指定位置(x, y)处添加文本注释。 text(x, y, z, 's') 在三维图形指定位置(x, y, z)处添加文本注释。 text(…, Name, Value) 参数Name、Value定义标注文本的属性和属性值。 gtext('s1', …, 'sn') 利用鼠标确定位置添加由s1, …, sn组成的一组文本注释。 线条、箭头、图框标注 annotation('line',
46、x, y) 添加从点(x(1), y(1) )到(x(2), y(2) )的线条,x, y表示的是比例数,取值在[0, 1]区间上。 annotation('arrow', x, y) 添加从点(x(1), y(1) )到(x(2), y(2) )的箭头。 annotation('doublearrow', x, y) 添加从点(x(1), y(1) )到(x(2), y(2) )的双箭头。 annotation('textarrow', x, y) 添加从点(x(1), y(1) )到(x(2), y(2) )的带文本框的箭头。 annotation('textbox', [
47、x, y, w, h]) 添加左下角坐标为(x, y),宽为w,高为h的文本框,x,y,w,h表示的是比例数,取值在[0, 1]区间上。 annotation('ellipse', [x, y, w, h]) 添加左下框坐标为(x, y),宽为w,高为h的椭圆。 annotation('rectangle', [x, y, w, h]) 添加左下角坐标为(x, y),宽为w,高为h的矩形框。 annotation(…, Name, Value) 参数Name、Value定义标注的属性和属性值。 例A.5 在同一图形窗口绘制和的图形,用16号的黑体添加标题和图例。 编写MAT
48、LAB程序如下: clc, clear, close all x=-2*pi:0.1:2*pi; y1=sin(x); y2=cos(x); plot(x,y1,'b-*'), hold on, plot(x,y2,'g--o') title('y=sinx和y=cosx','Fontname','黑体','Fontsize',12) legend({'sinx','cosx'},'Location','NorthEast') 所绘制的图形见图A.1。 图A.1 和的图形 例A. 6 在同一图形窗口绘制和的图形,用箭头对图形进行标注。 编写MATLAB程序如下: c
49、lc, clear, close all fplot(@(x)sin(x),[-2*pi,2*pi],'b-*'), hold on fplot(@(x)cos(x),[-2*pi,2*pi],'k--o') annotation('textarrow',[0.25,0.33],[0.49,0.49],'String','y=sinx') annotation('textarrow',[0.21,0.24],[0.40,0.40],'String','y=cosx') 所绘制的图形见图A.2。 图A.2 和的箭头标注图形 (3)特殊符号的标注 图形文本标注中可以使用希腊字
50、符、数学符号或者上标和下标字体等特殊字符,常用的特殊符号如表A.12所示。 表A.12 特殊符号表 函数字符 代表字符 函数字符 代表字符 \alpha \omega \beta \Gamma \gamma \Delta \delta \Pi \epsilon \Sigma \zeta \Omega \eta \infty \theta \partial \lambda \geq \mu \leq \nu \leftrightarrow \xi






