版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 矩阵与数值数组,1,本章学习目标,掌握数组的创建 理解数组元素的标志方法 掌握子数组的寻访和赋值方法 了解MATLAB的数值、变量与表达式的表示方法 自己通过帮助学习MATLAB常用的运算函数 理解数组运算和矩阵运算的区别 掌握MATLAB的关系运算与逻辑运算 了解“非数”和“空”数组的概念 掌握数组操作函数和高维数组方面的内容 掌握多项式及其运算,2,主要内容,2.1 数组的创建 2.2 数组元素的标志 2.3 子数组的寻访和赋值 2.4 MATLAB的数值、变量与表达式 2.5 MATLAB常用的运算函数 2.6 数组运算和矩阵运算 2.7 关系运算与逻辑运算 2.8 “非数”和“
2、空”数组 2.9 数组操作函数和高维数组 2.10 多项式及其运算,3,2.1 数组的创建,1. 直接输入法 直接输入法就是在命令窗口中直接输入数组中的所有 元素,在输入数组时必须遵循以下的规定。 所有数组元素必须置于“ ”中。 数组元素必须由“,”或空格分隔。 数组的行与行之间必须用“;”标志,或用回车键Enter进行换行。 例如,输入九宫图矩阵,只需在命令窗口直接输入 I = 4 9 2; 8 5 7; 3 1 6 I = 4 9 2 8 5 7 3 1 6,4,2 . 载入外部数据文件 载入函数(load function)可以读取由MATLAB早期版本生 成的包含矩阵的二进制文件,或者
3、读取包含数值数据的文本 文件。文本文件中的数字应排列成矩形,每行只能包含矩阵 的一行元素,元素与元素之间用空格分隔,各行元素的个数 必须相等。 例如,用Windows自带的记事本或用MATLAB的文本调试 编辑器创建一个包含下列4行数字的文本文件 1 2 3 4 5 6 7 8 9 101112 13141516 保存该文本为theloadtest.dat文件,在命令窗口中输入 load theloadtest.dat 将读取该文件并创建一个变量theloadtest,包含上面的这 个矩阵,在MATLAB工作空间中可以查到这个变量。,5,【例2-1】 读取二进制数据文件woman.mat。在
4、MATLAB命令窗口中输入 load woman %读取二进制数据文件 woman.mat, 在工作空间会产生数组X image(X) %以图像的方式显示数组X,如图2.6所示 colormap(map) %设置颜色查找表为map,6,3. 用内置函数生成数组 MATLAB还可以利用内置函数直接生成数组。几 种标准数组生成函数及其功能见表2-1。 【例2-2】 标准数组产生的演示。 ones(1,2) %生成一个1行2列的全1数组 ans = 1 1 zeros(2) %生成一个2行2列的全0数组 ans = 0 0 0 0, rand(state,0) rand(2,3) %生成一个2行3列
5、的均匀分布随机数组 ans = 0.9501 0.6068 0.8913 0.2311 0.4860 0.7621 E=eye(3) %生成一个3行3列的单位数组 E = 1 0 0 0 1 0 0 0 1,8,4. 利用M文件创建和保存数组 可以利用M文件创建数组,M文件是包含MATLAB 代码的文本文件。可以用MATLAB自带的文本编辑 调试器或别的文本编辑器来创建一个文件,代码和 要在MATLAB命令窗口中输入的指令一样就可以, 以.m格式保存该文件。,9,【例2-4】 创建和保存数组TEST的TestMatrix.m。 (1) 打开文本编辑调试器,输入以下内容 % TestMatrix
6、.m Creation and preservation of matrix TEST TEST= 11,12,13,14,15,16,17,18,19; . 21,22,23,24,25,26,27,28,29; . 31,32,33,34,35,36,37,38,39; (2) 保存此文件文件名为TestMatrix.m。 (3) 以后只要在MATLAB指令窗口中运行TestMatrix.m文件,就会自动生成数组TEST,并保存于MATLAB内存中。,10,以上介绍的4种创建数组的方法既适用于二维数组的创建,有些方法又完全可以用于高维数组的创建,后面还将对高维数组做进一步的介绍。对于一维数
7、组来说更是适用,不过一维数组形式比较简单,在实际中还有更常用的创建一维数组的方式,下面以例题的形式给出两种方法。,11,【例2-5】 利用冒号运算符生成一维数组。 冒号(:)是MATLAB最重要的运算符之一。它有以 下几种应用方式,输入表达式 1:10 可以生成一个包含从110所有整数的行向量 1 2 3 4 5 6 7 8 9 10 要想获得非单位间隔,可以指定一个步长。例如 100:-7:50 100 93 86 79 72 65 58 51 又如 0:pi/4:pi 得到 0 0.7854 1.5708 2.3562 3.1416,12,【例2-6】 定数线性采样法。 该方法的通用格式为
8、x=linspace(a, b, n),相当 于第一个数为a,最后一个数为b,以n为采样点 数等间距采样,生成1n的数组。 例如 x=linspace (1,12,6) 1.0000 3.2000 5.4000 7.6000 9.8000 12.0000,13,2.2 数组元素的标志 为了叙述方便,首先利用内置函数magic( ) 在MATLAB中生成一个四阶幻方矩阵A。 A=magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1。,14,1. “全下标”标志 对于二维数组来说,“全下标”标志指出是第几行 、第几列的元素。例如,数组A第i行第j列
9、的元素可 以用A(i, j)表示。A(3,4)表示第3行第4列的元素,对 于四阶幻方数组A来说,它的值是12。 2. “单下标”标志 “单下标(Linear Index)”标志就是只用一个下标 A(k)来指明元素在数组的位置。这种方式一般用 来标志只有一行或一列的向量的元素。当然也可 以用来标志二维数组的元素,这种情况首先设想,15,把二维数组的所有列,按先左后右的次序、首尾 相接排成“一维长列”,然后自上往下对元素位置 进行编号。例如,对于四阶幻方数组A来说, A(15)是另外一种标志存储在A(3, 4)中的数值12 的方式。 3. “逻辑1”标志 在实际使用中,常会遇到诸如寻找数组中所有符
10、 合某个条件的元素的问题,这时用“逻辑1”标志显得 很方便。假设X是一个普通数组,L是对数组X进行 某种逻辑操作后得到的相同大小的数组,那么X(L) 得到数组X中的符合某个条件的所有元素。,16,假设有以下一组数据 X = 2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8 其中的非数(NaN)是某个观测中一个丢失 的数据的标记,比如某个调查问卷中没有得 到回答的选项。可以用“逻辑1”标志法去除这 个丢失的数据,使用函数isfinite(X)将得到一 个逻辑数组,对于X中的有限值是真,对于 NaN和无穷大(Inf)是假。,17,2.3
11、 子数组的寻访和赋值 掌握了2.2节所讲的元素标志方法,就容易理 解数组的元素或子数组的寻访和赋值。下面以例 题的形式来讲解本部分内容。 【例2-7】 一维数组子数组的寻访(Address)和赋值(Assign)。 rand(state,0) %把均匀分布伪随机发生器置为0状态 X=rand(1,6) %创建均布随机数组 X = 0.9501 0.2311 0.6068 0.4860 0.8913 0.7621,18, X(2) %寻访数组X的第2个元素 ans = 0.2311 X(1 3 5) %寻访数组X第1、3、5个元素组成的子数组 ans = 0.9501 0.6068 0.8913
12、 X(3) =100 %把上述第3个元素重新赋值为100 x = 0.9501 0.2311 100.0000 0.4860 0.8913 0.7621,19,【例2-8】 二维数组的子数组寻访和赋值。 A=magic(4) %创建44的幻方矩阵 A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 A(4,:)=0 %第4行赋值为零 A = 16 2 3 13 5 11 10 8 9 7 6 12 0 0 0 0 A(1:2,1:3) %寻访由数组A的第1、2行和第1、2 、3列指定的子数组 ans = 16 2 3 5 11 10,20,2.4 MATLAB
13、的数值、变量与表达式 1. 数值 MATLAB的数值采用习惯的十进制表示,可以带小数点及 正负号,以下记述都合法 100 -10 0.1 1.2345 科学计数法采用字符e来表示10的幂,例如 1.60210e-20 6.02252e23 虚数采用i或j作为扩展名,例如 1i -3.14159j 3e5i 所有数值存储时采用IEEE规定的浮点数标准的长格式(long format)形式,数值的相对精度是eps,即大约保持有效数字 16位,数值范围大致为10-30810+308。,21,2. 变量 MATLAB不需要对变量进行类型声明或维数声明 。当MATLAB遇到一个新的变量名,就自动产生一
14、个变量并分配一个合适的存储空间。如果变量已经 存在,MATLAB就会改变变量的内容,如果需要还 会分配新的存储空间。例如 num_students = 25 创建一个1行1列名称为num_students的矩阵,数 值25存储在该矩阵的单一元素中。 变量名由英文字母、数字和下画线组成,并且必 须以字母作为第一个字符。,22,MATLAB区分大小写,也就是说大写字母和小 写字母是有区别的。A和a不是同一个变量。 在MATLAB中对一个变量进行命名的时候,注 意不能使用关键字如for、while等作为变量名, 否则程序就会报错,也不要使用常用的函数名如 sin、cos等作为变量名。 在MATLAB
15、中还有一些所谓的预定义变量,每 当MATLAB启动时这些变量就被产生。这些变量 其实是一些特殊函数,规定了有用常量的值(所 以有些教材中把这部分内容放在函数中讲解), 详见表2-2。,23,3. 表达式 和大多数别的编程语言一样,MATLAB也具有 数学表达式。但是和大多数编程语言不同, MATLAB中的运算操作尽量设计地接近于习惯, 在有些情况下别的编程语言一次只能处理一个数 据,MATLAB却允许快捷方便地对整个矩阵(数 组)进行操作。 MATLAB表达式采用熟悉的数学运算符和优先 级,见表2-3,表中运算符的优先级从上到下依 次升高。,24,2.5 MATLAB常用的运算函数 MATLA
16、B提供了大量标准的基本数学函数, 例如abs、sqrt、exp和sin等。对负数求平方根 或对数不会提示错误,而是自动产生适当的复 数结果。MATLAB还提供很多高级的数学函数 ,例如Bessel和gamma函数等。查看基本数学 函数,可以在命令窗口输入 help elfun 查看高级数学函数或矩阵函数,可输入 help specfun help elmat,25,有些函数,例如sqrt和sin是内置(built in)函数。 内置函数是MATLAB内核(core)的一部分,所以 运算效率很高,但采用的算法细节无法查看。另 外一些函数,例如gamma和sinh,是以M文件的 形式来执行的。 内
17、置函数和别的函数之间有些区别。例如,内 置函数无法查看代码,别的函数可以查看代码, 甚至在需要时可以修改代码。,26,2.6 数组运算和矩阵运算 (1) 数组可以和一个标量(11的矩阵)进行加、 减、乘、除运算,其结果将是此标量和数组中的每 一个元素“相加”、“相减”、“相乘”、“相除”;而经典数 学中矩阵和一个标量不能进行加、减运算,只允许 矩阵和一个标量进行乘、除运算,进行相除运算时 ,标量必须是除数,矩阵为被除数。 (2) 一个标量与一个数组的乘运算和一个标量与 一个矩阵的乘运算是相同的。,27,(3) 执行数组与数组之间的运算时,参与运算的 数组必须同维,运算所得结果数组也总是与原数组
18、 同维;而矩阵执行加、减、除运算时要求数组同维 ,执行乘法运算时只要求矩阵的内维相同。 (4) 两个数组相乘是对应元素相乘;两个矩阵相 乘遵守数学中的规定。 (5) 两个数组的除运算和两个矩阵的除运算比较 复杂。 当两个同维数组相除时,运算为数组的相应 元素相除,计算结果是和参与运算的数组同维的数 组;当参与运算的数组有一个是标量时,运算是标,28,量和数组的每一个元素相除,计算结果是和参与 运算的数组同维的数组;右除与左除的关系为 A./B=B.A,其中A是被除数,B是除数。 在MATLAB中,矩阵左除和右除的含义不 同。矩阵右除定义为:BA=(A/B)。 (6) 数组的乘方和矩阵的乘方也比
19、较复杂。数 组乘方运算规则:矩阵的标量乘方A.p(即A为矩 阵,p为标量),运算为矩阵每个元素的p次方,计 算结果是与矩阵A同维的矩阵;标量的矩阵乘方 p.A,表示以p为底,分别以A的元素为指数求幂 值,计算结果是与矩阵A同维的矩阵。而矩阵的,29,乘方运算只有在矩阵为方阵时才有意义。 (7) 关系运算和逻辑运算仅对数组进行,详见 2.7节的介绍。 【例2-9】 数组相乘与矩阵相乘。 A=1,2;3,4;B=5,6;7,8; %生成矩阵A与B A.*B %数组A与数组B相乘 ans = 5 12 21 32 %结果是数组对应元素的乘积 A*B %矩阵A与矩阵B相乘 ans = 19 22 43
20、 50 %矩阵运算遵守线性代数运算规则,30,2.7 关系运算与逻辑运算 1. 关系运算 MATLAB提供了6种关系运算符,详见表2-4。 关系运算符的运算法则如下。 (1)当两个标量相比较时,直接比较两数的大 小。若关系成立,关系表达式结果为1,否则为0 (2)当一个标量与一个矩阵相比较时,则把标 量与矩阵的每一个元素按标量关系运算规则逐个 比较,并给出元素比较结果。最终关系运算的结 果是一个维数与原矩阵相同的矩阵,它的元素由0 或1组成。,31,(3)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终关系运算的结果是一个维
21、数与原矩阵相同的矩阵,它的元素由0或1组成。 例如,在MATLAB命令窗口输入 A=1:9,r=5,Ar A = 1 2 3 4 5 6 7 8 9 r = 5 ans = 1 1 1 1 0 0 0 0 0,32,2. 逻辑运算 MATLAB提供了3种数组逻辑运算符,见表2-5。 逻辑运算的运算法则如下。 (1) 在逻辑运算中,非零元素为真,用1表示, 零元素为假,用0表示。 (2) 设参与逻辑运算的是两个标量a和b,aA(:)=1:9 %产生一个3行3列的数组A A = 1 4 7 2 5 8 3 6 9,45,继续输入 diag(A) ans = 1 5 9 很显然是取A对角线上的元素。
22、继续输入 tril(A) ans = 1 0 0 2 5 0 3 6 9 结果为A主对角线的下三角阵。,46,继续输入 fliplr(A) ans = 7 4 1 8 5 2 9 6 3 可以看到第1列与第3列交换了位置。 还有几个指令的使用将在后面的高维数组举例说 明。,47,2. 高维数组,本节只以三维数组为例进行叙述,但所有方法也 适用于三维以上的数组。 创建一个三维数组的常用方法有4种。 (1) 直接利用“全下标”元素赋值法创建高维数组。 (2) 由函数ones( )、zeros( )、rand( )、rands( )直 接创建标准高维数组。 (3) 由若干大小相同的低维数组合成高维数
23、组。 (4) 借助cat( )、repmat( )、reshape( )等函数构成 高维数组。,48,例如,在命令窗口输入 A(2,2,2)=1 %直接利用“全下标”元素赋值法 创建高维数组 A(:,:,1) = 0 0 0 0 A(:,:,2) = 0 0 0 1 生成的数组A是一个222的数组。,49,接着输入 B=ones(2,2,2);B(:)=1:8 %由函数ones( ) 直接创建标 准高维数组并全元素赋值 B(:,:,1) = 1 3 2 4 B(:,:,2) = 5 7 6 8 生成的数组B也是一个222的数组。,50,接着输入 C=cat(2,A,B) %借助cat( )把数
24、组A、B在列方 向上串接 C(:,:,1) = 0 0 1 3 0 0 2 4 C(:,:,2) = 0 0 5 7 0 1 6 8,51,已经知道由比较小的数组构成比较大的数组或高维数组,那么反过来,怎么把高维数组或比较大的数组变成比较小的数组呢?MATLAB设计了赋“空阵”的方法和函数squeeze( )来完成这个工作。 例如,在命令窗口输入如下命令。 A=reshape(1:18,2,3,3) %创建一个233 的数组A A(:,:,1) = 1 3 5 2 4 6,52,A(:,:,2) = 7 9 11 8 10 12 A(:,:,3) = 13 15 17 14 16 18 siz
25、e(A) %测量数组A的大小 ans = 2 3 3,53,继续输入 A(:,2:3,:)= %对数组A的第2列、第3列赋“空阵” A(:,:,1) = 1 2 A(:,:,2) = 7 8 A(:,:,3) = 13 14 可见数组A的第2列、第3列已消失。,54,继续输入 size(A) %再次测量数组A的大小 ans = 2 1 3 可见A已经变成了一个213的数组。继续输入 A_1=squeeze(A) A_1 = 1 7 13 2 8 14,55,可见函数squeeze( )可以撤销长度为1的“孤维”, 使原三维数组A“降”为二维,但这种操作不会影响到 数组A本身,只是把数组A“表面
26、”上给降维了。如在 命令窗口输入size(A),可以看到A仍是一个213 的数组,继续输入 A(:,1,:)= %对“孤维”赋“空” A = Empty array: 2-by-0-by-3 可见数组A变成了一个“空”数组。,56,继续输入 size(A) ans = 2 0 3 可见这时A变为一个203的数组。 继续输入 ndims(A) ans = 3 可见A仍是一个三维数组,通过对“孤维”赋“空”不能实 现降维。,57,2.10 多项式及其运算,1. 多项式的表达与创建 MATLAB约定n次多项式用一个长度为n+1的系 数行向量来表示,按降幂排列,缺少的幂次项系数 为0。即多项式 在MATLAB可以用向量表示。 例如,多项式 可以用 来表示,其中的二次幂系数0不能缺少。,2. 多项式的运算 多项式的运算由四则运算符和运算函数组成,主要包 括如下几种。 (1) 多项式加减运算。 (2) 多项式乘运算:利用函数C=conv(A,B)。 (3) 多项式除运算:利用函数Q, R = deconv (B, A) (4) 多项式求导:利用函数polyder( )。 (5) 多项式求值:利用函数polyval( )或polyvalm( )。 (6) 多项式求根:利用函数roots( )。 下面用几个例子简单叙述其中3种运算。,多项式加减运算 MA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 液化石油气充装作业安全规范
- 中小学急救教育课程标准
- 文旅演艺项目营销推广方案
- 危险化学品使用环节追溯管理规范
- 职业资格培训课程营销推广方案
- 数字营销服务营销推广方案
- 药品广告审核管理SOP
- 幼儿园大班健康活动教案
- 危险化学品库房分区分类管理规范
- 预制构件安装安全文明施工专项方案
- CMA历年考试真题及详细答案解析(Part1+Part2)
- DB11T 2543-2026花坛花境植物景观营造与养护技术规程
- 2026年杭州市实业投资集团有限公司人员招聘考试参考试题及答案详解
- 自考00688设计概论高频考点重点
- 2026杭州水务集团笔试题库及答案
- 桩间挡土板墙工程专项施工方案
- 第9课《谈骨气》课件
- 日语N5语法练习加详解
- 成本实操-印制电路板(PCB)行业成本核算报表实例
- 2026智能制造成熟度评估与辅导方案
- 2026广东江门市广悦化工股份有限公司招聘5人考试备考试题及答案解析
评论
0/150
提交评论