附录一 Matlab入门 §1概论 常用的数学软件有 Maple, Mathematica, Matlab等;常用的大型统计软件有 SAS,SPSS等。下面我们简要地介绍一些Maab的功能,应用范围及发展史 Matlab有五大通用功能:数值计算功能 Numeric),符号运算功能( Sybolic)(当要求 Matlab进行符号运算时,它就请求 Malpe计算并将结果返回到 Matlab命令窗口),数据 可视化功能( Graphic),数据图形文字统一处理功能( Notebook)和建模仿真可视化功能 (Simulink) Matlab在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路与 系统,系统动力学,信号和图像处理,控制理论分析和系统设计,过程控制,建模和仿 真,通信系统,财政金融的众多领域的理论研究和工程设计中得到了广泛应用。 MATLAB是1984年由美国 Mathworks公司推向市场。该软件有三大特点:一是功 能强大;二是界面友善,语言自然;三是开放性强(仅 Mathworks公司就推出了30多个 应用工具箱)。 Matlab的版本目前已经发展到 Matlab73 §2 Matlab简介 1.指令行的编辑 启动 Matlab后,就可以利用 Matlab工作。由于 Matlab是一种交互式语言,随时输 入指令,即时给出运算结果是它的工作方式。 2*sin(0.3*pi)(1+sqrt(5))d ans=0.5000(ans是一个保留的 Matlab字符串,它表示上面一个式子的返回结 果,用于结果的缺省变量名) 2.入门演示 intro demo 帮助 %帮助总揽 elp elfun%关于基本函数的帮助信息 help exp %指数函数exp的详细信息 ②10 kfor指令 当要查找具有某种功能但又不知道准确名字的指令时,help的能力就不够了, lookfor可以根据用户提供的完整或不完整的关键词,去搜索出一组与之相关的指令。 lookfor integral,%查找有关积分的指令 lookfor fourie,%查找能进行傅利叶变换的指令 ③超文本格式的帮助文件 在 Matlab中,关于一个函数的帮助信息可以用doc命令以超文本的方式给出, doc doc doc eig.%eig求矩阵的特征值和特征向量 ④pdf帮助文件 4.简单的矩阵输入 ①要直接输入矩阵时,矩阵元素用空格或逗号分隔:矩阵行用分号“;”隔离,整 个矩阵放在方括号“[]”里
-291- 附录一 Matlab 入门 § 1 概论 常用的数学软件有 Maple, Mathematica, Matlab 等;常用的大型统计软件有 SAS ,SPSS 等。下面我们简要地介绍一些 Matlab 的功能,应用范围及发展史。 Matlab 有五大通用功能:数值计算功能(Nemeric),符号运算功能(Sybolic) (当要求 Matlab 进行符号运算时,它就请求 Malpe 计算并将结果返回到 Matlab 命令窗口),数据 可视化功能(Graphic),数据图形文字统一处理功能(Notebook)和建模仿真可视化功能 (Simulink)。 Matlab 在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路与 系统,系统动力学,信号和图像处理,控制理论分析和系统设计,过程控制,建模和仿 真,通信系统,财政金融的众多领域的理论研究和工程设计中得到了广泛应用。 MATLAB 是 1984 年由美国 Mathworks 公司推向市场。该软件有三大特点:一是功 能强大;二是界面友善,语言自然;三是开放性强(仅 Mathworks 公司就推出了 30 多个 应用工具箱)。Matlab 的版本目前已经发展到 Matlab7.3。 §2 Matlab 简介 1. 指令行的编辑 启动 Matlab 后,就可以利用 Matlab 工作。由于 Matlab 是一种交互式语言,随时输 入指令,即时给出运算结果是它的工作方式。 2*sin(0.3*pi)/(1+sqrt(5)) ↵ ans=0.5000 (ans 是一个保留的 Matlab 字符串,它表示上面一个式子的返回结 果,用于结果的缺省变量名) 2. 入门演示 intro↵ demo↵ 3. 帮助 ① help↵ %帮助总揽 help elfun↵ %关于基本函数的帮助信息 help exp↵ %指数函数 exp 的详细信息 ② lookfor 指令 当要查找具有某种功能但又不知道准确名字的指令时,help 的能力就不够了, lookfor 可以根据用户提供的完整或不完整的关键词,去搜索出一组与之相关的指令。 lookfor integral↵ %查找有关积分的指令 lookfor fourier↵ %查找能进行傅利叶变换的指令 ③ 超文本格式的帮助文件 在 Matlab 中,关于一个函数的帮助信息可以用 doc 命令以超文本的方式给出, 如: doc↵ doc doc↵ doc eig↵ %eig 求矩阵的特征值和特征向量 ④ pdf 帮助文件 4. 简单的矩阵输入 ① 要直接输入矩阵时,矩阵元素用空格或逗号分隔;矩阵行用分号“;”隔离,整 个矩阵放在方括号“[ ]”里
A=[1,2,3;4,5,6;7,8,9], 说明:指令执行后,矩阵A被保存在 Matlab的工作间( workspace)中,以备后 用。如果用户不用 clear指令清除它,或对它进行重新赋值,那末该矩阵会一直保存在 作间中,直到本 Matlab指令窗关闭为止 ②矩阵的分行输入 A=[1,2,3 4,5,6 7,8,9] 5.语句与变量 ① Matlab语句有两种最常见的形式 )表达式 ii)变量=表达式 例1]表达式的计算结果 1996/18 ans=110.8889 例2]计算结果的赋值 s=1-1/2+1/3-1/4+1/5-1/6+ 1/7-1/8; 说明:三个小黑点是“连行号”,分号“;”作用是:指令执行结果将不显示在屏幕 上,但变量s将驻留在内存中。若用户想看s的值,可键入以下命令: 0.6345) ②特殊变量 用于结果的缺省变量名 圆周率 计算机的最小数 flops浮点运算次数 无穷大如1/0 不定量如0/0 nargin所用函数的输入变量数目 nargout所用函数的输出变量数目 realmin最小可用正实数 realmax最大可用正实数 6.数据结构:向量、矩阵、结构数组和细胞数组 ①向量的转置 z=[1+j,2+pi*i,-sqrt(-1)] 1.0000-1.0000i 2.0000-3.1416i +1.0000i 当对复数向量进行转置操作时,可以得到其共轭转置向量。 z.’(非共轭转置向量) -292
-292- A=[1,2,3;4,5,6;7,8,9]↵ 说明:指令执行后,矩阵 A 被保存在 Matlab 的工作间(workspace)中,以备后 用。如果用户不用 clear 指令清除它,或对它进行重新赋值,那末该矩阵会一直保存在 工作间中,直到本 Matlab 指令窗关闭为止。 ② 矩阵的分行输入 A=[1,2,3 4,5,6 7,8,9] 5. 语句与变量 ① Matlab 语句有两种最常见的形式 i) 表达式 ii)变量=表达式 [例1] 表达式的计算结果 1996/18↵ ans=110.8889 [例2] 计算结果的赋值 s=1-1/2+1/3-1/4+1/5-1/6+... 1/7-1/8;↵ 说明:三个小黑点是“连行号”,分号“;”作用是:指令执行结果将不显示在屏幕 上,但变量 s 将驻留在内存中。若用户想看 s 的值,可键入以下命令: s↵ (s= 0.6345) ② 特殊变量 ans 用于结果的缺省变量名 pi 圆周率 eps 计算机的最小数 flops 浮点运算次数 inf 无穷大 如 1/0 NaN 不定量 如 0/0 i(j) i=j= −1 nargin 所用函数的输入变量数目 nargout 所用函数的输出变量数目 realmin 最小可用正实数 realmax 最大可用正实数 6. 数据结构:向量、矩阵、结构数组和细胞数组 ①向量的转置 z=[1+j,2+pi*i,-sqrt(-1)]’ z = 1.0000 - 1.0000i 2.0000 - 3.1416i 0 + 1.0000i 当对复数向量进行转置操作时,可以得到其共轭转置向量。 z.' (非共轭转置向量)
②产生一个行向量 t=[0:0.1:10]%产生从0到10的行向量,元素之间间隔为0.1 t=linspace(n1, n2, n) %产生n1和n2之间线性均匀分布的n个数(缺省n时,产生100个数) t=1 ogspace(n1,n2,n)(缺省n时,产生50个点) ③who,whos,size和 length是对提供工作空间变量信息很有用处的四个命令。 执行该命令可列出储存空间的所有变量 whos 显示所有的变量,变量所占的字节数及该变量是否是实数 执行该命令可以得到矩阵a的行数与列数 length(a)执行该命令后,屏幕上显示出向量a的长度。如果a是矩阵,则显示的 参数为行数列数中的最大数。 ④矩阵的标号 A(m,n)表示矩阵A的第m行,第n列的元素; A(1:2,1:3)表示矩阵A的从第一行到第二行,从第一列到第三列的所有元素; A(:)可以得到一个长向量,该向量的元素是按列一一叠加在一起的。例如 ans- 324 矩阵的下标也可以是向量。例如 b=a(x,y),;可以得到一个矩阵b。a的行标来自向量x,而列标来自向量y 例如,矩阵a有n列,那末 (:,n:-1:1) 将使矩阵a按列的逆序排列。 ⑤特殊矩阵 i)单位矩阵 eye(m),eye(size(a))可以得到与矩阵a同样大小的单位矩阵,eye(m,n)可得到 个可允许的最大单位矩阵而其余处补0。 ii所有元素为1的矩阵 ones(n), ones(size(a)), ones(m, n) ii)所有元素为0的矩阵 zeros(n), zeros(m, n) v)空矩阵是一个特殊矩阵,这在线性代数中是不存在的。 例如:q=[] 矩阵q在工作空间之中,但它的大小为零。通过空阵的办法可以删去行与列。例如 a=rand(5);a(:,1:3)=[] 第一条指令执行后得到一个5×5的矩阵;第二条指令将矩阵a的前三列删除。 v)对角矩阵 当ⅴ是向量时,diag(v)得到以v的元素为对角线上元素的对角矩阵 当ⅴ是矩阵时,diag(v)得到一个列向量,其元素为矩阵v对角线上的元素, diag(v,1)得到矩阵v对角线上移一行的元素组成的列向量,diag(v,-1)得到矩阵v对 角线下移一行的元素组成的列向量 ⑥字符串要用单引号。例如 293
-293- ②产生一个行向量 t=[0:0.1:10] %产生从 0 到 10 的行向量,元素之间间隔为 0.1 t=linspace(n1,n2,n) %产生 n1 和 n2 之间线性均匀分布的 n 个数 (缺省 n 时,产生 100 个数) t=logspace(n1,n2,n) (缺省 n 时,产生 50 个点) ③ who,whos,size 和 length 是对提供工作空间变量信息很有用处的四个命令。 who 执行该命令可列出储存空间的所有变量 whos 显示所有的变量,变量所占的字节数及该变量是否是实数 size(a) 执行该命令可以得到矩阵 a 的行数与列数 length(a)执行该命令后,屏幕上显示出向量 a 的长度。如果 a 是矩阵,则显示的 参数为行数列数中的最大数。 ④ 矩阵的标号 A(m,n)表示矩阵 A 的第 m 行,第 n 列的元素; A(1:2,1:3)表示矩阵 A 的从第一行到第二行,从第一列到第三列的所有元素; A(:) 可以得到一个长向量,该向量的元素是按列一一叠加在一起的。例如 a=[1 2;3 4];a(:)↵ ans= 1 3 2 4 矩阵的下标也可以是向量。例如 b=a(x,y)↵; 可以得到一个矩阵 b。a 的行标来自向量 x,而列标来自向量 y。 例如,矩阵 a 有 n 列,那末 b=a(:,n:-1:1) 将使矩阵 a 按列的逆序排列。 ⑤ 特殊矩阵 i)单位矩阵 eye(m),eye(size(a)) 可以得到与矩阵 a 同样大小的单位矩阵,eye(m,n)可得到一 个可允许的最大单位矩阵而其余处补 0。 ii)所有元素为 1 的矩阵 ones(n),ones(size(a)),ones(m,n) iii)所有元素为 0 的矩阵 zeros(n),zeros(m,n) iv)空矩阵是一个特殊矩阵,这在线性代数中是不存在的。 例如: q=[ ] 矩阵 q 在工作空间之中,但它的大小为零。通过空阵的办法可以删去行与列。例如 a=rand(5); a(:,1:3)=[] 第一条指令执行后得到一个5× 5 的矩阵;第二条指令将矩阵 a 的前三列删除。 v) 对角矩阵 当 v 是向量时,diag(v)得到以 v 的元素为对角线上元素的对角矩阵; 当 v 是矩阵时,diag(v) 得到一个列向量,其元素为矩阵 v 对角线上的元素, diag(v,1)得到矩阵 v 对角线上移一行的元素组成的列向量,diag(v,-1)得到矩阵 v 对 角线下移一行的元素组成的列向量。 ⑥ 字符串要用单引号。例如:
disp( text string’) %disp显示命令 还有几个字符串命令可以作为文字说明和绘图标题说明等,如 mum2str,int2str, fprintf和 sprintf。同样,可以借助于help命令了解它们的具体用 ⑦结构数组 有时需要将不同的数据类型组合成一个整体,以便于引用。这些组合在一个整体中 的数据是相互联系的。例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等 项都是和该学生有联系的 下面简单介绍结构体的定义与引用 i)结构数组的定义 定义结构数组可以采用两种方法:用赋值语句定义和用函数 struct定义 用赋值语句定义结构时,只要给出结构的属性赋值, Matlab就会自动把该属性增 加到结构中,赋值时,结构名和属性名用“.”分开。例如,下面三条语句将定义一个1×1 的结构数组,结构名为 student,有三个属性:name、num、test。该结构数组只有 个元素,在命令窗口中键入结构名 student,将显示该元素所有属性的属性值的特性 student. name=John Doe student num=123456 student.test=[797573;807879;908580 再键入以下三行可给该结构数组增加一个元素。 student(2).name=’ Ann lane’; student(2). num=123422 student(2).test=[707673;809979;908580;808586] 现在结构数组 student的维数为1×2。当结构数组的元素超过1个时, MATLAB的 帮助信息中,不再显示不同属性的值,而只显示数组名、属性名和维数大小 函数 struct也可用来定义结构数组,其调用格式为 结构数组名= struct(属性1,'属性值1’,“属性2°,属性值2,…) ii)结构数组属性值的修改、设置和获取 结构数组一旦形成,就可取出数组中的某个元素并修改该元素的某个属性的值。以 上面建立的 student数组为例,命令 str=student(2)name 可取出第二个元素的name属性的值。 命令 n=student(2) test(4, 2) 取出第二个元素test的值中第四行第二列上的数。 同理,可用命令 student(2) test(4, 2)=0 修改第二个元素test的值中第四行第二列上的数的值。 关于结构数组有如下函数: 函数名 作用 struct 生成和转换为结构数组 L fieldnames 查询结构数组的属性名 getfield 查询结构数组的属性值 enfield 设置结构数组的属性值 armfield 删除属性 -294
-294- disp('text string') % disp 显示命令 还有几个字符串命令可以作为文字说明和绘图标题说明等,如 num2str,int2str,fprintf 和 sprintf。同样,可以借助于 help 命令了解它们的具体用 法。 ⑦ 结构数组 有时需要将不同的数据类型组合成一个整体,以便于引用。这些组合在一个整体中 的数据是相互联系的。例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等 项都是和该学生有联系的。 下面简单介绍结构体的定义与引用。 i)结构数组的定义 定义结构数组可以采用两种方法:用赋值语句定义和用函数 struct 定义。 用赋值语句定义结构时,只要给出结构的属性赋值,Matlab 就会自动把该属性增 加到结构中,赋值时,结构名和属性名用“.”分开。例如,下面三条语句将定义一个1×1 的结构数组,结构名为 student,有三个属性:name、num、test。该结构数组只有一 个元素,在命令窗口中键入结构名 student,将显示该元素所有属性的属性值的特性。 student.name='John Doe'; student.num=123456; student.test=[79 75 73;80 78 79;90 85 80]; 再键入以下三行可给该结构数组增加一个元素。 student(2).name='Ann Lane'; student(2).num=123422; student(2).test=[70 76 73;80 99 79;90 85 80;80 85 86]; 现在结构数组 student 的维数为1× 2 。当结构数组的元素超过 1 个时,MATLAB 的 帮助信息中,不再显示不同属性的值,而只显示数组名、属性名和维数大小。 函数 struct 也可用来定义结构数组,其调用格式为: 结构数组名=struct(‘属性 1’,’属性值 1’, ‘属性 2’,’属性值 2’,…) ii)结构数组属性值的修改、设置和获取 结构数组一旦形成,就可取出数组中的某个元素并修改该元素的某个属性的值。以 上面建立的 student 数组为例,命令 str=student(2).name 可取出第二个元素的 name 属性的值。 命令 n=student(2).test(4,2) 取出第二个元素 test 的值中第四行第二列上的数。 同理,可用命令 student(2).test(4,2)=0 修改第二个元素 test 的值中第四行第二列上的数的值。 关于结构数组有如下函数: 函数名 作用 struct 生成和转换为结构数组 fieldnames 查询结构数组的属性名 getfield 查询结构数组的属性值 setfield 设置结构数组的属性值 rmfield 删除属性
isfield 检查是否为数组的属性 Instruct 「检查数组是否为结构型 ⑧细胞数组 细胞数组也是 MATLAB里的一类特殊的数组。在 MATLAB里,由于有细胞数组这个数 据类型,才能把不同类型、不同维数的数组组成为一个数组。 细胞数组的每一个元素可为类型不同、维数不同的矩阵、向量、标量或多维数组, 所有元素用大括号括起来。如矩阵A=[1234;2345;3456],则命令 c=A, sum(A), sum(sum())) 得到一个1×3的细胞数组 于细胞数组有如下函数: 函数名 cellis 显示细胞数组的内容 生成细胞数组 L cellplot 用图形方式显示细胞数组 num2cell 「把数值型转换为细胞型 输入和输出的匹配 ell2struct 把细胞数组转换为结构数组 struct2cell 把结构数组转换为细胞数组 11 「检验数组是否为细胞型 i)细胞数组的生成 有两种方法可以生成细胞数组:用赋值语句直接生成;先用cell函数预分配数组, 然后再对每个元素赋值 有两种方法可对元素赋值:一种方法采用数组元素的下标赋值。下面四句命令将建 立一个2×2的细胞数组。 A(1,1)={[1:5:6:10]}; A(1, 2)=' Anne cat) A(2,1)={3+7i} (2,2)={0:pi/10:pi} 在大括号中,逗号或者空格表示每行元素之间的分割,分号表示不同行之间的分割 另一种方法则把细胞数组的元素用大括号括起来,而所赋的值采用其它数组的形 式。例如下面四句生成的细胞数组和上面所生成的完全一样。 A{1,1}=[1:5:6:10] A1, 2)=Anne cat A{2,1}=3+7i {2,2}=0:pi/10:pi 命令 B=cell(3, 4) 创建一个3×4的细胞矩阵。 ii)细胞数组内容的查看 对于上面建立的数组A,在 Matlab命令窗口键入变量名A,将显示数组的简要信息。 函数 cellis用来显示细胞数组的每个元素的值。函数 cellplot将画出细胞数组 的每个元素的结构图 当给已经定义的细胞数组下标范围外的元素赋值时, Matlab自动扩维,对于没有
-295- isfield 检查是否为数组的属性 isstruct 检查数组是否为结构型 ⑧ 细胞数组 细胞数组也是 MATLAB 里的一类特殊的数组。在 MATLAB 里,由于有细胞数组这个数 据类型,才能把不同类型、不同维数的数组组成为一个数组。 细胞数组的每一个元素可为类型不同、维数不同的矩阵、向量、标量或多维数组, 所有元素用大括号括起来。如矩阵 A=[1 2 3 4;2 3 4 5;3 4 5 6],则命令 c={A,sum(A),sum(sum(A))} 得到一个1× 3的细胞数组。 关于细胞数组有如下函数: 函数名 作用 celldisp 显示细胞数组的内容 cell 生成细胞数组 cellplot 用图形方式显示细胞数组 num2cell 把数值型转换为细胞型 deal 输入和输出的匹配 cell2struct 把细胞数组转换为结构数组 struct2cell 把结构数组转换为细胞数组 iscell 检验数组是否为细胞型 i)细胞数组的生成 有两种方法可以生成细胞数组:用赋值语句直接生成;先用 cell 函数预分配数组, 然后再对每个元素赋值。 有两种方法可对元素赋值:一种方法采用数组元素的下标赋值。下面四句命令将建 立一个 2× 2 的细胞数组。 A(1,1)={[1:5;6:10]}; A(1,2)={'Anne cat'}; A(2,1)={3+7i}; A(2,2)={0:pi/10:pi}; 在大括号中,逗号或者空格表示每行元素之间的分割,分号表示不同行之间的分割。 另一种方法则把细胞数组的元素用大括号括起来,而所赋的值采用其它数组的形 式。例如下面四句生成的细胞数组和上面所生成的完全一样。 A{1,1}=[1:5;6:10]; A{1,2}='Anne cat'; A{2,1}=3+7i; A{2,2}=0:pi/10:pi; 命令 B=cell(3,4) 创建一个3× 4的细胞矩阵。 ii)细胞数组内容的查看 对于上面建立的数组 A,在 Matlab 命令窗口键入变量名 A,将显示数组的简要信息。 函数 celldisp 用来显示细胞数组的每个元素的值。函数 cellplot 将画出细胞数组 的每个元素的结构图。 当给已经定义的细胞数组下标范围外的元素赋值时,Matlab 自动扩维,对于没有
赋值的元素,赋值为空矩阵 7.数学运算与函数 ①基本代数运算操作+,-,*,\,/, ②矩阵运算函数:求行列式(det),矩阵求逆(inv),求秩(rank),求迹( trace), 求模(norm),d=eig(A)求矩阵A的特征值,[v,d]=eig(A)求矩阵A的特征向量和特征 值,这里v的列向量是对应的特征向量。 矩阵基本运算: A\B, B/A, A*B, A/B, A \B, A.Bo ③基本数学函数 常用的数学函数有sin,cos,tan,abs,min,sqrt,log,log10,sign,asin, acos,atan,max,sum,exp,fix等。具体使用方法请参看帮助hel 常用的矩阵函数有expm,logm, sqrt和fum,fum函数可计算任何一个基本数 学函数的矩阵函数。它可以表示为 fa=funm(a,fun’) 式中,fun可以是任意一个基本函数,如sin,cos,log10等。 ④多项式 任意多项式都可以用一个行向量来表示,即n维的向量a表示多项式 y(x)=a(1)x21+a(2)x22+…+a(n-1)x+a(n),反过来,任意一个向量就可以作 为多项式。 例如 [1-611-6];poly2sym(p,’x) X3-6*x2+11*x-6 求s3+22+3s+4的根可用如下命令。 A=[1 2 3 4]: roots(A) i)poly函数 p=poly(A),A是一个n×n的矩阵时,此函数返回矩阵A的特征多项式p,p是n+1 维向量;A是向量时,此函数返回以向量中的元素为根的多项式 ii多项式的数组运算 y= polyol(p,x)计算多项式在x处的值,x可以是矩阵或向量,此时函数计算多 项式在x的每个元素处的值 ii)多项式的矩阵运算 y= polyvalm(p,x)相当于用矩阵x代替多项式的变量来对矩阵而不是对数组进行 运算,x必须是方阵。例如: p(A)=A2+3A+2l 可采用如下的命令进行计算 p=[132] a=[12;34] polyvalm(p, a iv)多项式的乘法和除法运算 w=conv(u,V)此函数求多项式u和v的乘积,即求向量u和v的卷积。如果 m= length(u),n= length(v),则w的长度为m+n-1
-296- 赋值的元素,赋值为空矩阵。 7. 数学运算与函数 ① 基本代数运算操作 +,-,*,\,/,^, ② 矩阵运算函数:求行列式(det),矩阵求逆(inv),求秩(rank),求迹(trace), 求模(norm),d=eig(A)求矩阵 A 的特征值,[v,d]=eig(A)求矩阵 A 的特征向量和特征 值,这里 v 的列向量是对应的特征向量。 矩阵基本运算: A\B, B/A, A.*B, A./B, A.\B, A.^B。 ③ 基本数学函数 常用的数学函数有 sin,cos,tan,abs,min,sqrt,log,log10,sign,asin, acos,atan,max,sum,exp,fix 等。具体使用方法请参看帮助 help。 常用的矩阵函数有 expm,logm,sqrtm 和 funm,funm 函数可计算任何一个基本数 学函数的矩阵函数。它可以表示为 fa=funm(a,'fun') 式中,fun 可以是任意一个基本函数,如 sin,cos,log10 等。 ④ 多项式 任意多项式都可以用一个行向量来表示,即 n 维的向量 a 表示多项式 ( ) (1) (2) ( 1) ( ) 1 2 y x a x a x a n x a n n n = + + + − + − − L ,反过来,任意一个向量就可以作 为多项式。 例如: p=[1 –6 11 -6]; poly2sym(p,’x’) ans = x^3-6*x^2+11*x-6 求 2 3 4 3 2 s + s + s + 的根可用如下命令。 A=[1 2 3 4];roots(A) i) poly 函数 p=poly(A),A 是一个n × n 的矩阵时,此函数返回矩阵 A 的特征多项式 p,p 是 n +1 维向量;A 是向量时,此函数返回以向量中的元素为根的多项式。 ii) 多项式的数组运算 y=polyval(p,x) 计算多项式在 x 处的值,x 可以是矩阵或向量,此时函数计算多 项式在 x 的每个元素处的值。 iii) 多项式的矩阵运算 y=polyvalm(p,x) 相当于用矩阵 x 代替多项式的变量来对矩阵而不是对数组进行 运算,x 必须是方阵。例如: ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ = 3 4 1 2 A , p(A) A 3A 2I 2 = + + 可采用如下的命令进行计算 p=[1 3 2]; a=[1 2; 3 4]; polyvalm(p,a) iv) 多项式的乘法和除法运算 w=conv(u,v) 此函数求多项式 u 和 v 的乘积,即求向量 u 和 v 的卷积。如果 m=length(u),n=length(v),则 w 的长度为 m+n-1
[q,r]= decon(u,v)此函数表示多项式u除以多项式v得到商多项式q和余数多项 式r,如果r的元素全部为零,则表示多项式v可以整除多项式u 8.绘图命令 ①二维图形 二维绘图的基本命令有plot, loglog, semilogx, semilog和 polar。它们的使 用方法基本相同,其不同特点是在不同的坐标中绘制图形。plot命令使用线性坐标空 间绘制图形;10g1og命令在两个对数坐标空间中绘制图形;而 semilogx(或 semilog) 命令使用x轴(或y轴)为对数刻度,另外一个轴为线性刻度的坐标空间绘制图形; polar 使用极坐标空间绘制图形 维绘图命令plot为了适应各种绘图需要,提供了用于控制线色、数据点和线型 的3组基本参数。它的使用格式如下 plot(x, y, 'color_point linestyle) 该命令是绘制y对应x的轨迹的命令。y与x均为向量,且具有相同的元素个数。 用字符串‘ color point_ linestyle’完成对上面3个参数的设置。线色(r-red,g- green b-blue, w-white, k-black, i-invisible, y-yellow), EA(,0, x,+,*,S H,D,V,",>,<,p)与线型( ,:)都可以根据需要适当选择。 当plot(x,y)中的x和y均为mxn矩阵时,plot命令将绘得n条曲线。 plot(t,[x1,x2,x3])在同一坐标轴内同时绘制三条曲线。 如果多重曲线对应不同的向量绘制,可使用命令 lot(t1, xl, t2, x2, t3, x3) 式中x1对应t1,x2对应t2等等。在这种情况下,t1,t2和t3可以具有不同的元 素个数,但要求x1,x2和x3必须分别与t1,t2和t3具有相同的元素数量 subplot命令使得在一个屏幕上可以分开显示n个不同坐标系,且可分别在每一个 坐标系中绘制曲线。其命令格式如下: subplot(r, c, p) 该命令将屏幕分成r*C,而p表示在第几个窗口。窗口的排号是从左到右,自上而下。 在图形绘制完毕后,执行如下命令可以再在图中加入题目、标号、说明和分格线等。 这些命令有 title, xlabel, ylabel,text, gtext等。它们的命令格式如下 title('My Title), xlabel("My X-axis Label), ylabel('My Y-axis Label) text(x, y, 'Text for annotation '), gtext( 'Text for annotation ') grid gtext命令是使用鼠标器定位的文字注释命令。当输入命令后,可以在屏幕上得到 个光标,然后使用鼠标器控制它的位置。按鼠标器的左键,即可确定文字设定的位置。 hold on是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标 系内绘制另外一个图形。hold命令是一个交替转换命令,即执行一次,转变一个状态 (相当于 hold on、 hold off)。 Matlab可以自动选择坐标轴的定标尺度,也可以使用axis命令定义坐标轴的特殊 定标尺度。其命令格式如下: axis([x-min, x-max, y-min, y-max]) axis命令的另一个作用是控制纵横尺度的比例。例如,输入axis( square)后,可得 到一个显示方框,此时再在该框内绘制一个圆形时(如:plot(sin(x),cos(x),在屏 幕上可以看到一个圆(一般情况下,由于屏幕的不规则原因,只能看到一个椭圆)。再 次输入axis( normal”)命令,屏幕返回到一般状态。 例 x=0:0.25:5;
-297- [q,r]=deconv(u,v) 此函数表示多项式 u 除以多项式 v 得到商多项式 q 和余数多项 式 r,如果 r 的元素全部为零,则表示多项式 v 可以整除多项式 u。 8. 绘图命令 ① 二维图形 二维绘图的基本命令有 plot,loglog,semilogx,semilogy 和 polar。它们的使 用方法基本相同,其不同特点是在不同的坐标中绘制图形。plot 命令使用线性坐标空 间绘制图形;loglog 命令在两个对数坐标空间中绘制图形;而 semilogx(或 semilogy) 命令使用 x 轴(或 y 轴)为对数刻度,另外一个轴为线性刻度的坐标空间绘制图形;polar 使用极坐标空间绘制图形。 二维绘图命令 plot 为了适应各种绘图需要,提供了用于控制线色、数据点和线型 的 3 组基本参数。它的使用格式如下: plot(x,y,’color_point_linestyle’) 该命令是绘制 y 对应 x 的轨迹的命令。y 与 x 均为向量,且具有相同的元素个数。 用字符串‘color_point_linestyle’完成对上面 3 个参数的设置。线色(r-red,g-green, b-blue,w-white,k-black,i-invisible,y-yellow),数据点(.,o,x,+,*,S, H,D,V,^,>,<,p)与线型(-,-.,--,:)都可以根据需要适当选择。 当 plot(x,y)中的 x 和 y 均为 m× n 矩阵时,plot 命令将绘得 n 条曲线。 plot(t,[x1,x2,x3])在同一坐标轴内同时绘制三条曲线。 如果多重曲线对应不同的向量绘制,可使用命令 plot(t1,x1,t2,x2,t3,x3) 式中 x1 对应 t1,x2 对应 t2 等等。在这种情况下,t1,t2 和 t3 可以具有不同的元 素个数,但要求 x1,,x2 和 x3 必须分别与 t1,t2 和 t3 具有相同的元素数量。 subplot 命令使得在一个屏幕上可以分开显示 n 个不同坐标系,且可分别在每一个 坐标系中绘制曲线。其命令格式如下: subplot(r,c,p) 该命令将屏幕分成 r*c,而 p 表示在第几个窗口。窗口的排号是从左到右,自上而下。 在图形绘制完毕后,执行如下命令可以再在图中加入题目、标号、说明和分格线等。 这些命令有 title,xlabel,ylabel,text,gtext 等。它们的命令格式如下: title(‘My Title’),xlabel(‘My X-axis Label’),ylabel(‘My Y-axis Label’), text(x,y,'Text for annotation'),gtext('Text for annotation'), grid gtext命令是使用鼠标器定位的文字注释命令。当输入命令后,可以在屏幕上得到 一个光标,然后使用鼠标器控制它的位置。按鼠标器的左键,即可确定文字设定的位置。 hold on 是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标 系内绘制另外一个图形。hold 命令是一个交替转换命令,即执行一次,转变一个状态 (相当于hold on、hold off)。 Matlab可以自动选择坐标轴的定标尺度,也可以使用axis命令定义坐标轴的特殊 定标尺度。其命令格式如下: axis([x-min,x-max,y-min,y-max]) axis 命令的另一个作用是控制纵横尺度的比例。例如,输入 axis(‘square’)后,可得 到一个显示方框,此时再在该框内绘制一个圆形时(如:plot(sin(x),cos(x)),在屏 幕上可以看到一个圆(一般情况下,由于屏幕的不规则原因,只能看到一个椭圆)。再 次输入 axis(‘normal’)命令,屏幕返回到一般状态。 例 x=0:0.25:5;
y2=x.^0.5 0.8 t=0:0.001:2*pi; plot (3*cos(t),3*sin(t)) plot(x, yl,'bo,x, y2,'rH-) plot(x, y3,'gp--) 1ot(x,y4,"mx-,') title(' My Title), xlabel( My X-axis Label ), ylabel(' My Y-axis text(2 ,8, 'Text for annotation ' gtext ( 'Text for annotation),grid 结果如图所示 o中。o 例用极坐标绘图命令绘制方程r=cos2θ(四叶玫瑰线)的图形。 x=0:0.1:2*pi r=cos(2*x) polar(x, r) 例随机地产生20个数据,再根据这些数据画统计直方图。 x=rand (1, 20) y=round(20*x) subplot (1, 2, 1) hist(x) subplot (1, 2, 2) hist(y) ②三维图形 在实际工程计算中,最常用的三维绘图是三维曲线图、三维网格图和三维曲面图3 种基本类型。与此对应,Mat1ab也提供了3个三维基本绘图命令(三维曲线命令plot3、 三维网格命令mesh和三维表面命令surf)。下面先初步介绍其中的两个 298-
-298- y1=x.^0.1; y2=x.^0.5; y3=x.^0.8; y4=x.^1.5; t=0:0.001:2*pi; hold on plot(3*cos(t),3*sin(t)) plot(x,y1,'bo',x,y2,'rH-') plot(x,y3,'gp--') plot(x,y4,'mx-.') title('My Title'),xlabel('My X-axis Label'),ylabel('My Y-axis Label') text(2,8,'Text for annotation') gtext('Text for annotation'),grid 结果如图所示: -3 -2 -1 0 1 2 3 4 5 -4 -2 0 2 4 6 8 10 12 My Title My X-axis Label My Y-axis Label Text for annotation Text for annotation 例 用极坐标绘图命令绘制方程 r = cos 2θ (四叶玫瑰线)的图形。 x=0:0.1:2*pi; r=cos(2*x); polar(x,r) 例 随机地产生 20 个数据,再根据这些数据画统计直方图。 x=rand(1,20); y=round(20*x); subplot(1,2,1) hist(x) subplot(1,2,2) hist(y) ② 三维图形 在实际工程计算中,最常用的三维绘图是三维曲线图、三维网格图和三维曲面图 3 种基本类型。与此对应,Matlab 也提供了 3 个三维基本绘图命令(三维曲线命令 plot3、 三维网格命令 mesh 和三维表面命令 surf)。下面先初步介绍其中的两个
i)三维曲线 plot3(x,y,z)通过描点连线画出曲线,这里x,y,z都是n维向量,分别表示该曲线 上点集的横坐标、纵坐标、竖坐标。 例在区间[0,10*pi]画出参数曲线x=sin(1),y=cos(1),z=1,并分别 标注。 t=0:pi/50:10*pi; plot(sin(t), cos(t), t) xlabel( sin(t)), ylabel(cos(t)), zlabel(t') i)网格 命令mesh(x,y,z)画网格曲面。这里x,y,z是三个同维数的数据矩阵,分别表示数 据点的横坐标、纵坐标、竖坐标,命令mesh(x,y,z)将该数据点在空间中描出,并连成 网格。 例绘制二元函数 sin(xy) 的三维网格图。 x=-3:0.1:3;y=-5:0.1:5 xI=ones(size(y))=x: y1=y*ones (size(x)) [x2, y2]=meshgrid(x, y) z1=(sin(xl. *y1)+eps)./(xl. *y l+eps z2=(sin(x2 *y 2)+eps). /(x2 * y2+eps subplot(1, 2, 1), mesh(xl, yl, z1) subplot (1, 2, 2), mesh(x2, y2, z2) ③符号函数的简易绘图函数 ezplot ezplot(绘制x)的函数图,这里f为代表数学表达式的包含单个符号变量x的字 符串或符号表达式。x轴的近似范围为[-2*pi,2*pi] ezplot(f xmin, xmax)或 ezplot( imin,max)使用输入参数来代替默认横坐标范围 pl, 2 pI. 例画出函数y=tanx的图形 解: ezplot(tan(x) ④绘制函数图函数 fplot fplot(fun, lims)绘制由字符串fun指定函数名的函数在x轴区间为lms=xmin,xmax] 的函数图。若lims= xmin,xmax,ymin, ymax],则y轴也被输入限制。fun必须为M文件 的函数名或对变量ⅹ的可执行字符串,此字符串被送入函数eva后被执行。函数fun(x) 必须要返回针对向量x的每一元素结果的行向量。 例画f(x) 的图形 1+-,x≥1 解:(1)首先用M文件funm定义函数f(x)如下 function y=fun1(x);
-299- i)三维曲线 plot3(x,y,z)通过描点连线画出曲线,这里 x,y,z 都是 n 维向量,分别表示该曲线 上点集的横坐标、纵坐标、竖坐标。 例 在区间[0,10*pi]画出参数曲线 x = sin(t) , y = cos(t), z = t ,并分别 标注。 t=0:pi/50:10*pi; plot3(sin(t),cos(t),t) xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t') ii)网格 命令 mesh(x,y,z)画网格曲面。这里 x,y,z 是三个同维数的数据矩阵,分别表示数 据点的横坐标、纵坐标、竖坐标,命令 mesh(x,y,z)将该数据点在空间中描出,并连成 网格。 例 绘制二元函数 xy xy z sin( ) = 的三维网格图。 x=-3:0.1:3;y=-5:0.1:5; x1=ones(size(y'))*x;y1=y'*ones(size(x)); [x2,y2]=meshgrid(x,y); z1=(sin(x1.*y1)+eps)./(x1.*y1+eps); z2=(sin(x2.*y2)+eps)./(x2.*y2+eps); subplot(1,2,1),mesh(x1,y1,z1) subplot(1,2,2),mesh(x2,y2,z2) ③ 符号函数的简易绘图函数 ezplot ezplot(f)绘制 f(x)的函数图,这里 f 为代表数学表达式的包含单个符号变量 x 的字 符串或符号表达式。x 轴的近似范围为[-2*pi,2*pi]。 ezplot(f,xmin,xmax)或 ezplot(f,[min,max])使用输入参数来代替默认横坐标范围[- 2*pi,2*pi]。 例 画出函数 y = tan x的图形 解:ezplot(‘tan(x)’) ④ 绘制函数图函数 fplot fplot(fun,lims)绘制由字符串 fun 指定函数名的函数在 x 轴区间为 lims=[xmin, xmax] 的函数图。若 lims=[xmin,xmax,ymin,ymax],则 y 轴也被输入限制。fun 必须为 M 文件 的函数名或对变量 x 的可执行字符串,此字符串被送入函数 eval 后被执行。函数 fun(x) 必须要返回针对向量 x 的每一元素结果的行向量。 例 画 ⎪ ⎩ ⎪ ⎨ ⎧ + ≥ + < = , 1 1 1 1, 1 ( ) x x x x f x 的图形。 解:(1)首先用 M 文件 fun1.m 定义函数 f (x) 如下: function y=fun1(x); if x<1
else y=1+1 (2)在 matlab命令窗口输入 fplot(fun1, [ -3,3D) 就可画出函数f(x)的图形。 ⑤画等高线的函数 contour 在 Matlab中,可以用 contour命令绘制平面等高线,用 contour3命令绘制空间等高 绘制平面等高线 contour命令的具体使用格式为 contour(x,y, z, n) contour(x,y, Z contour(.) 其中x,y为其横纵坐标值向量,如果ⅹ为s维,y为m维,则z为m×s维矩阵,为对 应于坐标(xy)的高度。参数n为整数,指定了绘出等高线的条数。参数v为向量, 指定了在哪些高度绘出等高线,如只想在一个高度z绘出等高线,则v=[z,z 令, contour(…)命令的参数与 contour命令完全相同,只是其绘出的等高线图将被自动 c=contour(x, y, z, n) 上面2个命令用来计算所画等高线的x,y坐标值。 clabel(c) 上面2个命令用来标注计算的c阵处的高度值。 clabel(c)将把所绘等高线全部自动 标注, clabel(c,)将自动标注由向量ⅴ确定的若干条等高线的高度值。 例 clc.clf. =0:400:5600; =0:4004800 z{370,470550,600,670,690670620,580,450400300,100,150,2 510620,730,800,850,870,850,780,720,650,500,200,300,350,320 650,760,880,970,1020,1050,1020,830,800,700,300,500,550,480,350; 740,880,1080,1130,1250,1280,1230,1040,900,500,700,780,750,650,550; 830,980,1180,1320,1450,1420,1400,1300,700,900,850,810,380,780,750; 880.1060.1230.1390.1500.1500.1400900.1100.1060.950.870.900.930.950 910,1090,1270,1500,1200,1100,1350,1450,1200,1150,1010,880,1000,1050,1100, 950,1190,1370,1500,1200,1100,1550,1600,1550,1380,1070,900,1050,1150,1200;, 1430,1450,1460,1500,1550,1600,1550,1600,1600,1600,1550,1500,1500,1550,1550; 1420,1430,1450,1480,1500,1550,1510,1430,1300,1200,980850,750,550,500 1380,1410,1430,1450,1470,1320,1280,1200,1080,940,780.620,460,370,350 1370,1390,1410,1430,1440,1140,1110,1050,950,820,690,540,380,300,210; 350,1370,1390,1400,1410,960,940.880,800,690,570430,290,210,150 figure. hold on c=contour(x, y, z, 10); clabel(c) text(0, 800, 'V \leftarrow tt A', 'fontsize, 15, color,'r) text(40002000 Vleftarrow居民点, fontsize,15, color,r) 300-
-300- y=x+1; else y=1+1./x; end (2)在 matlab 命令窗口输入 fplot(‘fun1’,[-3,3]) 就可画出函数 f (x) 的图形。 ⑤ 画等高线的函数 contour 在 Matlab 中,可以用 contour 命令绘制平面等高线,用 contour3 命令绘制空间等高 线。 绘制平面等高线 contour 命令的具体使用格式为: contour(x,y,z,n) contour(x,y,z,v) contourf(…) 其中 x,y 为其横纵坐标值向量,如果 x 为 s 维,y 为 m 维,则 z 为 m×s 维矩阵,为对 应于坐标(x,y)的高度。参数 n 为整数,指定了绘出等高线的条数。参数 v 为向量, 指定了在哪些高度绘出等高线,如只想在一个高度 z 绘出等高线,则 v=[z,z]。 contourf(…)命令的参数与 contour 命令完全相同,只是其绘出的等高线图将被自动 填上颜色。 c=contour(x,y,z,n) c=contour(x,y,z,,v) 上面 2 个命令用来计算所画等高线的 x,y 坐标值。 clabel(c) clabel(c,v) 上面 2 个命令用来标注计算的 c 阵处的高度值。clabel(c)将把所绘等高线全部自动 标注,clabel(c,v)将自动标注由向量 v 确定的若干条等高线的高度值。 例 clc;clf; x=0:400:5600; y=0:400:4800; z=[370,470,550,600,670,690,670,620,580,450,400,300,100,150,250; 510,620,730,800,850,870,850,780,720,650,500,200,300,350,320; 650,760,880,970,1020,1050,1020,830,800,700,300,500,550,480,350; 740,880,1080,1130,1250,1280,1230,1040,900,500,700,780,750,650,550; 830,980,1180,1320,1450,1420,1400,1300,700,900,850,810,380,780,750; 880,1060,1230,1390,1500,1500,1400,900,1100,1060,950,870,900,930,950; 910,1090,1270,1500,1200,1100,1350,1450,1200,1150,1010,880,1000,1050,1100; 950,1190,1370,1500,1200,1100,1550,1600,1550,1380,1070,900,1050,1150,1200; 1430,1450,1460,1500,1550,1600,1550,1600,1600,1600,1550,1500,1500,1550,1550; 1420,1430,1450,1480,1500,1550,1510,1430,1300,1200,980,850,750,550,500; 1380,1410,1430,1450,1470,1320,1280,1200,1080,940,780,620,460,370,350; 1370,1390,1410,1430,1440,1140,1110,1050,950,820,690,540,380,300,210; 1350,1370,1390,1400,1410,960,940,880,800,690,570,430,290,210,150]; figure,hold on c=contourf(x,y,z,10);clabel(c) text(0,800,'▼\leftarrow 起点','fontsize',15,'color','r') text(4000,2000,'▼\leftarrow 居民点','fontsize',15,'color','r')