《MATLAB8.X程序设计及典型应用》课件第2章_第1页
《MATLAB8.X程序设计及典型应用》课件第2章_第2页
《MATLAB8.X程序设计及典型应用》课件第2章_第3页
《MATLAB8.X程序设计及典型应用》课件第2章_第4页
《MATLAB8.X程序设计及典型应用》课件第2章_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

2.1数值数组(NumericArray)2.2字符串数组(StringArray)2.3元胞数组(CellArray)2.4构架数组(StructureArray)第2章MATLAB数组类型及计算

2.1数值数组(NumericArray)

2.1.1数值数组的创建

1.通过赋值语句创建数值数组

数组的创建可以通过赋值语句实现。赋值符号(即“=”)左边为变量名,右边为数组元素。数组元素用方括号[]括住,元素可以是数值或表达式,表达式可以由数字、变量、运算符和函数等组成。矩阵同一行内的元素间用逗号或空格隔开,行与行之间用分号或回车键隔开。

【例2-1】创建复数数组:在命令窗口输入下述语句,创建复数数组:

【例2-2】(续例2-1)计算复数矩阵的模和相位。

2.用冒号生成法创建向量

冒号生成法的通用格式为

x=a:inc:b

【例2-3】用冒号生成法创建向量和矩阵实例。

3.定数采样法

定数采样法,即执行指令linspace()和指令logspace()生成向量。该方法是在给定待创建数组总数的前提下,等间隔采样产生向量。

(1)指令linspace()的通用格式:

linspace(a,b,n)

(2)指令logspace()的通用格式:

logspace(a,b,n)

【例2-4】用指令linspace()和指令logspace()生成向量实例。

4.利用M脚本文件创建中等规模数组

对于经常需要调用的数组,尤其是比较大而复杂的数组,为其专门建立一个脚本文件是值得的。

【例2-5】利用脚本文件创建和保存数组实例。

(1)打开M文件编辑器调试窗(Editor/Debugger)。

打开M文件编辑器调试窗的方法有三种:一是打开MATLAB操作桌面HOME→New→Script;二是在指令窗中输入edit并运行;三是用鼠标左击MATLABHOME操作桌面上的NewScript即可。

(2)在打开的M文件空白处输入需要创建的数据,并在文件的首行编写文件名和简短说明,以便查阅,如图2.1所示。图2.1使用脚本文件创建数组实例

(3)单击M文件编辑调试窗口工具条上的图标,弹出一个Window标准格式的对话框,将文件名修改为MyMatrix并保存,即产生一个文件为MyMatrix.m。

(4)以后只要在MATLAB指令窗中输入MyMatrix并运行,数组A就会自动生成。

5.通过内建函数建立数组

数组也可以通过内建函数来建立,常用内建函数如表2-2所示。

【例2-6】利用内建函数产生数组实例。2.1.2数组元素的标识和寻访

数组是由多个元素组成的,在引用数组的某些元素或重新对某些元素赋值时需要对元素进行标识。

【例2-7】演示使用全下标标识和单下标标识寻访单个

元素。

【例2-8】演示使用全下标标识和单下标标识寻访子数组。

子数组是从数组中取出一部分元素所构成的数组。

【例2-9】演示矩阵元素的全下标标识和单下标标识的

转换。2.1.3“非数”和“空”数组

1.非数(NaN或nan)

“非数”即“NotaNumber”,在MATLAB中用NaN或nan来表示。按IEEE规定,0/0,∞/∞,0×∞等运算结果都是非数。

根据IEEE数学规定,NaN具有以下性质:

(1) NaN具有传递性,即其参与运算时所得结果都是NaN。

(2) NaN没有“大小”概念,不可以比较两个非数的大小。

NaN的功能如下:

(1)真实表达了0/0,∞/∞,0×∞的运算结果,避免因0/0,∞/∞,0×∞等运算而造成程序的中断。

(2)由于MATLAB绘图指令不能在坐标系中绘制NaN,因而在数据可视化中,可用它来裁剪图形。

【例2-10】非数的产生和性质演示。

2.“空”数组

顾名思义,“空”数组即数组的内容为空。“空”数组的维数为零,用符号[]表示。“空”数组不是元素取0的数组。指令isempty()能判断一个数组是否是“空”数组。

“空”数组的功能如下:

(1)在没有“空”数组参与的计算中,计算结果中的“空”可以合理地解释“所得结果的含义”。

(2)运用“空”数组对其他非空数组赋值,可以实现数组的收缩或删减(见下一节例2-12)。

【例2-11】“空”数组的产生和查询。2.1.4数值数组的扩充和收缩

数组的扩充和收缩是对原有数组的维数作变换,其中维数变大为扩充,反之则为收缩。数值数组的扩充和收缩可以通过对原数组赋值的方法实现。利用赋空数组可以减小数组的维数,实现数值数组的收缩。

【例2-12】数值数组的扩充和收缩示例。2.1.5数值数组的计算

MATLAB强大的计算功能是基于数组来进行的。由于其所有变量都被看做数组,因此MATLAB的数值计算遵循数组运算的规则进行。

1.数组的算术运算

1)数组的加减运算

两个数组必须同型时才可以进行加减运算。如果有一个是标量,则该标量与数组的每个元素进行加减运算。

【例2-13】数组加减运算示例。

2)数组的乘法运算

MATLAB中的数组乘法运算遵循线性代数中矩阵乘法的运算规则:两个矩阵必须内维数相等时,才可以进行乘法运算。比如C=A×B中A的列数必须等于B的行数,否则,MATLAB将提示出错。数组的乘法运算符号为“*”。

【例2-14】数组乘法运算示例。

3)数组的除法运算

数组除法运算的运算符为左除“\”和右除“/”。由线性代数中矩阵除法的定义可知:

【例2-15】(续例2-13)数组除法运算示例。

4)数组的乘方运算

数组乘方运算的运算符为“^”,运算表达式为A^B。A是方阵,B是正整数。矩阵乘方运算的含义是:A^B表示方阵A自乘B次。

【例2-16】数组乘方运算示例。

5)数组的点运算

数组的点运算是MATLAB定义的一种特殊运算,它针对数组代数运算中的乘法、除法、乘方运算。两个数组之间的点运算是它们之间对应元素的运算。因此,进行点运算的数组维数必须相同,否则MATLAB将提示出错。另外,标量与数组的运算也可以看成是标量与数组之间的点运算。

【例2-17】数组点运算实例。

2.数组的转置

数组A的转置用A' 来表示。如果A的元素都是实数,则为转置运算;如果A的元素为复数,则为共轭转置运算。求复数数组A的非共轭转置运算用A.' 表示。

【例2-18】数组转置运算示例。

3.数组的关系运算

MATLAB提供了六种数组的关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)和 ~=(不等于)。关系运算表达式中的结果都是一个由0和1组成的逻辑数组(LogicalArray)。逻辑数组中用1表示真,0表示假。

【例2-19】数组的关系运算示例。

【例2-20】数组的关系运算应用:建立任意3×3的数组,并提取其中能被4整除的元素。

4.数组的逻辑运算

MATLAB中提供了3种基本逻辑运算符:&(与)、︱(或)、~(非)。设参与逻辑运算的标量为a和b:a&b即当a,b全为非零时,运算结果为1,否则为0;a︱b即当a,b中只要有一个非零,运算结果为1;~a即当a是零时,运算结果为1,当a为非零时,运算结果为0。参与逻辑运算的两个二维数组的维数必须相同。逻辑运算将对两数组相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原数组相同维数的逻辑数组。

【例2-21】求3阶魔方数组中绝对值大于6并且小于8的元素,并统计这些元素的个数。

5.数组运算中的常用数学函数

MATLAB后台提供了许多不同类型的函数,这些函数通常以指令形式出现。用户只要正确调用这些函数就可以进行相关的数组运算。数组运算的常用数学函数见表2-4所示。

【例2-22】数组运算函数使用示例。2.1.6数组运算符优先级

在MATLAB中,各种运算符的优先级按照由高到低的次序排列如下,同一级别的从左到右依次计算:

2.1.7高维数组

1.创建三维数组

三维数组的创建方式和二维数组相似,大致有三种:

(1)利用赋值方式创建。全下标元素赋值方式是建立三维数组最常用的方式之一。

【例2-23】使用全下标元素赋值方式创建三维数组实例。

(2)利用生成函数直接创建。MATLAB提供了生成高维数组的函数文件,用户可以直接调用它们产生标准高维数组。

【例2-24】用函数ones()、zeros()、rand()和randn()创建标准高维数组实例。

(3)借助一些函数文件将低维数组沿着特定的维串接成高维数组。

【例2-25】借助cat()、repmat()、reshape()等函数构造高维数组实例。

【说明】函数cat()第一个输入变量为构造数组的维数,其后输入变量分别对应于各维方向上放置的数组。

【说明】函数repmat()的第一个输入变量为“模块数组”,第二个输入变量为指定方向上铺放模块的数目。

2.高维数组的信息

多维数组的维数查询函数ndims()可以显示输入数组的维数。对于向量,无论是行向量还是列向量,输出结果为1,代表一维数组;对于矩阵,输出维数为2,代表二维数组;以此类推。函数文件size()可以给出各维的大小。length()给出所有维中的最大长度,即length()等价于max(size())。

【例2-26】获取高维数组维数、大小和长度的MATLAB实例。2.1.8稀疏数组

1.利用转换函数创建稀疏数组

稀疏数组的特点是有较多的0元素。创建稀疏数组的方法与创建数值数组的方法类似,有直接赋值的方法,但用户直接赋值得到的是完全存储方式的数组,还需要利用转换函数将其转换为稀疏数组。

将完全存储方式转化为稀疏存储方式的转换函数sparse()的格式为

A=sparse(S)

将稀疏存储方式转换为完全存储方式的转换函数full()的格式为

full(A)

【例2-27】稀疏矩阵和完全矩阵的相互转换实例。

2.内建函数创建稀疏数组

通过文件函数eye()、rand()和randn(),用户可以创建完全存储方式的矩阵。MATLAB提供了函数文件speye()、sprand()和sprandn(),用户调用它们可以创建相应的稀疏矩阵。单位矩阵只有对角线元素为1,其他元素都为0,是一种具有典型稀疏特征的矩阵。单位矩阵的稀疏存储函数speye()的调用格式如下:

Speye(m,n)

返回一个m×n的稀疏存储单位矩阵。

【例2-28】创建稀疏单位存储矩阵,并增减非零元素,观察其输出显示的变化。

spconvert()函数的格式如下:

B=spconvert(A)

函数文件spdiags()可产生带状稀疏矩阵,其格式如下:

B=spdiags(A,d,m,n)

【例2-29】运用函数spconvert()和spdiags()创建稀疏数组。

2.2字符串数组(StringArray)

2.2.1字符串数组的创建和标识

在MATLAB中,字符串是作为字符串数组引入的。字符串数组的创建方式为:在MATLAB指令窗中将待创建的字符串放在单引号对内,然后按【Enter】键即可创建字符串。

【例2-30】字符串数组的创建和查看。2.2.2字符串数组转换函数

MATLAB提供了字符串数组转换函数,使得MATLAB处理字符串的能力更加强大,如表2-5所示。

【例2-31】字符串转换函数应用示例。2.2.3字符串数组的串接、替换和比较

MATLAB实现字符串数组的串接、替换和比较功能的函数分别见表2-6和表2-7。

【例2-32】常见字符串函数运用实例。

2.3元胞数组(CellArray)

2.3.1元胞数组的创建、标识和获取

元胞数组是MATLAB提供的一种特殊数据类型,允许在一个数组里存放各种不同类型的数据,比如数组、字符串、元胞数组以及下一节要介绍的构架数组。元胞数组中的基本组成是元胞,每一个元胞是用来存放各种不同类型的数据的单元。各个元胞的内容可以不同。

1.元胞数组的创建

赋值语句是最常用的一种创建元胞数组的方法。MATLAB提供了三种不同赋值方式:直接使用{}进行赋值创建;利用创建各元胞来创建;向元胞数组中各元胞赋值创建。

【例2-33】创建元胞数组实例。

2.元胞数组内容的获取

与数值数组类似,可以通过下标方式来获取元胞数组中的元胞内容。

【例2-34】(续例2-33)获取元胞数组中元胞内容示例。

【例2-35】(续例2-33)使用celldisp函数获取元胞数组中元胞内容示例。

【例2-36】(续例2-33)使用cellplot函数以图形方式显示元胞数组中元胞内容示例。

>>cellplot(a)

所得结果如图2.2所示。图2.2图形方式显示元胞数组的内容2.3.2元胞数组的扩充和收缩

和数值数组一样,使用给元胞数组赋值的方法可以实现数组维数的改变,其中赋空数组可以实现维数的减小,实现数组的收缩。

【例2-37】(续例2-33)元胞数组的扩充和收缩示例。2.3.3元胞数组的转换函数

MATLAB提供的元胞数组和其他数组类型的转换函数有cell2mat(),mat2cell()和num2cell(),运用格式如下:

M=cell2mat(C):将元胞数组C转换为单精度矩阵M。其中C为多维元胞数组;M为转换后得到的单精度数值矩阵。要求输入的元胞数组元素必须是同类型的数据。

C=num2cell(A):转换数值数组A为元胞数组C。其中A为数值数组;C为转换得到的元胞数组。

C=mat2cell(X,M,N):将数值矩阵X分解为元胞数组。其中M维数对应元胞行数;N维数对应元胞列数;C为转换后得到的元胞矩阵。

【例2-38】元胞数组和其他数组类型之间的转换实例。

2.4构架数组(StructureArray)

2.4.1构架数组的创建

构架数组的创建方法有三种:使用赋值语句直接创建、使用函数struct()创建和使用转换函数cell2struct()创建。

(1)使用赋值语句直接创建。使用赋值语句创建构架数组是最直接也是最简单的创建方法。

【例2-39】使用赋值语句创建构架数组并获取示例。

(2)使用函数struct()创建。使用函数struct()创建构架数组是最常用的方法,其格式如下:

S=struct(‘fieldl’,VALUES1,‘field2’,VALUES2,...)

创建构架数组S,其中值VALUES1赋给域field1,值VALUES2赋给域field2。

【例2-40】使用函数struct()创建例2-39中的构架数组。

(3)使用转换函数cell2struct()创建。构架数组除了可以通过直接赋值和创建函数创建外,用户还可以通过元胞数组转换得到。转换函数cell2struct()的格式如下:

S=cell2struct(C,FIELDS,DIM)

元胞数组C转换为构架数组S。其中FIELDS为字符串数组或元胞数组;DIM为元胞数组的维数。

【例2-41】使用

温馨提示

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

评论

0/150

提交评论