附录一Matlab入门 §1概论 常用的数学软件有Maple,.Mathematica,Matlab等:常用的大型统计软件有 SAS,SPSS等。下面我们简要地介绍一些Matlab的功能,应用范围及发展史。 Matlab有五大通用功能:数值计算功能Nemeric),符号运算功能(Sybolic)(当要求 Matlab进行符号运算时,它就请求Malpe计算并将结果返回到Matlab 可视 功能(Graphic),数据图形文字统一处理功能(Notebook)和建模仿真可视化功能 (Simulink b在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路与 系统,系统动力学,信号和图像处理,理论 分析和系统设计,过程控 制,建模和仿 真,通信系统,财政金融的众多领域的理论研究和工程设计中得到了广泛应用。 MATLAB是1984年由美国Mathworks公司推向市场。该软件有三大特点:一是功 能强大:二是界面友善,语言自然;三是开放性强(仅Mathworks公司就推出了30多个 应用工具箱)。Matlab的版本目前己经发展到Matlab7.3。 动 ,就可以利用Matlab工作。由于Matlab是一种交互式语言,随时输 入指令,即时给出运算结果是它的工作方式。 2*sin(0.3*pi1+sqt5)) ans=0.5000 (ans是 一个保留的Matlab字符串,它表示上面一个式子的返回结 果,用于结果的缺省变量名) 2.入门演示 ①he %帮助总揽 p elfun. 指数函数 ②1 ookfor指 当要查找具有某种功能但又不知道准确名字的指令时,help的能力就不够了, 1 ookfor可以根据用户提供的完整或不完整的关键词,去搜索出一组与之相关的指令。 lookfor integral」%查找有关积分的指令 ookfor fourier %查找能进行傅利叶变换的指令 ③超文本格式的帮助文件 在Matlab中,关于一个函数的帮助信息可以用doc命令以超文本的方式给出, 如: doc. eig求矩阵的特征值和特征向最 ④pdf帮助文件 4简单的矩阵给入 ①要直接输入矩阵时,矩阵元素用空格或逗号分隔:矩阵行用分号“:”隔离,整 个矩阵放在方括号“[]”里。 -291
-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被保存在Matlab的工作间(workspace)中,以备后 clear指 ,或对它进行重新赋值,那末该矩阵会一直保存在 ②矩件的分行头b指令窗关闭为止 A=[1,2,3 45 6 7.8.91 5.语句与变量 ①Matlab语句有两种最常见的形式 i)表达式 ii)变量=表达 例1 表达式的计算结果 19961 斗结里的陆值 1-1/2+1/3-1/4+1/5-1/6+. 1/7-1/8:d 说明:三个小黑点是“连行号”,分号“:”作用是:指令执行结果将不显示在屏幕 上,但变量s将驻留在内存中。若用户想看s的值,可键入以下命令: s. (s 0.6345) ②特殊 ans 用于结果的缺省变量名 pi 圆周率 eps 计算机的最小数 flops 学点还算次数 如0/ i(j) i=e√-1 nargin所用函数的输入变量数目 所界函的续 所用函数的输出变量数目 realmax最大可用正实数 6。数据结构:向最、矩阵、结构数组和细胞数组 ①向量的转置 z=[1+j,2+pi*i,-s0rt(-1)] Z= -1.0000 当对复数向量进行转置操作时,可以得到其共轭转置向量。 乙.(非共轭转置向最) 299
-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 2,n 匀分布的n个数 时,产生100个数) 省是对提供生作室变量信息很有用处的四个命令 执行该命令可列出储存空间的所有李景 显示所有的变量,变量所占的字节数及该变量是否是实数 size(a) 执行该命令可以得到矩阵a的行数与列数 length(a)执行该命令后,屏幕上显示出向量a的长度。如果a是矩阵,则显示的 参数为行数列数中的最大数。 ④矩阵的标号 A侣2表矩联的第行,第n列的元素 2,13 的从 从第一列到第 二起的所元素: anss 1 矩阵的下标也可以是向量。例如 b=a(,y)小:可以得到 个矩阵b。a的行标来自向量x,而列标来自向量y。 例如,矩 按列的递序排列 ye(国),eye(size(a)可以得到与矩阵a同样大小的单位矩阵,eye(m,n)可得到 个可允许的最大单位矩阵而其余处补0。 )所有元素为1的矩陈 ones(n),ones(size (a)),ones(m,n) iii)所有元素为0的矩阵 得电这在线代数中是不的。 工作空间之中,但它的大小为零。通过空阵的办法可以别去行与列。例如 第条指令执行后得到一个5×5的矩阵:第二条指令将矩阵a的前三列除 )对角矩阵 当v是向量时,dig(w)得到以v的元素为对角线上元素的对角矩阵: 当v是矩阵时,dig(w)得到一个列向量,其元素为矩阵v对角线上的元素, diag(化,1)得到矩阵v对角线上移一行的元素组成的列向量,diag(~,-l)得到矩阵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显示命令 还有儿 子符串 命令可以 明和绘图标说明 有时需要将不同的数据类型组合成一个整体,以便于引用。这些组合在一个整体中 的数据是相互联系的。例如, 一个学生的学号、姓名、性别、年龄、成绩、家庭地址等 项都是和该学生有联系的。 下面简单介绍结构体的定义与引用。 1)结构数组的定义 定义结构数组可以采用两种方法:用赋值语句定义和用函数struct定义 用赋值语句定义结构时, 只要给出结枸的属性赋值,t1b就会自动把该属性增 结构名和属性名用 分开。例如,下面三条语句将定义 个属 个元素 student, 示该元素所有性的 John Doe 10A56 student.test=[797573:807879:908580]: 再键入以下三行可给该结构数组增加一个元素。 student (2).name='Ann lane': student(2).num=123422; student(2).test=[707673:809979:908580:808586]: 现在结构数组student的维数为l× 当构数组的元茶超过 I个时,MATLAB的 帮助信息中,不再显不 同国性的值 而只显示数组名、属性名和维数大小。 t也可用 属性 其调用修 ,属性值2,.) 形成 就可取出数组中的某个元素并修改该元素的某个属性的值。以 上面建立的student数组为例,命令 tr=student(2).name 可取出第二个元素的name属性的值, 命令 student(2).test(4,2) 取出第 猜的值中第行第二列上的 ent test 4,2)= 四行第二列上的数的值。 关于结构 数名 作用 生成和转换为结构数组 field 查询结构数组的屈性 设置结构数组的属性 -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 检查是否为数组的属性 isstruct 检查数组是否为结构型 ⑧细胞数组 胞数组也是MATLAB里的 类特殊的数组。在MATLAB里,由于有细胞数组这个数 据类型 能把 不同维数的数组组 所有元素用大括号括起 不同的矩 向最 元素123423453456.命令多维数组, 得到一个1×3的细数 华王细的知组打相下函影 函数名 celldisp 显示细数组的内容 cell 生细胞新 cellnlot 用图形方式显示细胞数组 把数值型转换为细胞型 deal 输入和输出的匹配 cell2struct 把细胞数组转换为结构数组 struct2cell 把结构数组转换为细购数组 iscell 检验数组是否为细胞型 i)细胞数组的生成 有两种方法可以生成细胞数组:用赋值语句直接生成:先用cl1函数预分配数组, 然后再对每」 有两 的红可对元 赋值: 种方法采用数组元素的下标赋值。下面四句命令将建 A2,2)={0:pi/10:pi} 在大括号中,逗号或者空格表示每行元素之间的分制,分号表示不同行之间的分制。 一种方法则把细胞数组的元素用大括号括起来,而所赋的值采用其它数组的形 式。例如下面四句生成的细胞数组和上面所生成的完全一样。 A{1,1=[1:5:6:10]: A1,2} Anne cat 2=0:pi/10:ni e11(340 创建 ,个3×4的细陶佰陈 )细胞数组内容的查看 对于上面建立的数组A,在Mat1ab命令窗口键入变量名A,将显示数组的简要信息 函数celldisp用来显示细胞数组的每个元素的值。函数cellplot将画出细胞数组 的每个元素的结构图。 当给已经定义的细胞数组下标范围外的元素赋值时,Matlab自动扩维,对于没有 -295
-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 自动扩维,对于没有