matlab第2章矩阵与数值数组.ppt

上传人:sh****n 文档编号:6379455 上传时间:2020-02-24 格式:PPT 页数:64 大小:533KB
返回 下载 相关 举报
matlab第2章矩阵与数值数组.ppt_第1页
第1页 / 共64页
matlab第2章矩阵与数值数组.ppt_第2页
第2页 / 共64页
matlab第2章矩阵与数值数组.ppt_第3页
第3页 / 共64页
点击查看更多>>
资源描述
第2章矩阵与数值数组 1 本章学习目标 掌握数组的创建理解数组元素的标志方法掌握子数组的寻访和赋值方法了解MATLAB的数值 变量与表达式的表示方法自己通过帮助学习MATLAB常用的运算函数理解数组运算和矩阵运算的区别掌握MATLAB的关系运算与逻辑运算了解 非数 和 空 数组的概念掌握数组操作函数和高维数组方面的内容掌握多项式及其运算 2 主要内容 2 1数组的创建2 2数组元素的标志2 3子数组的寻访和赋值2 4MATLAB的数值 变量与表达式2 5MATLAB常用的运算函数2 6数组运算和矩阵运算2 7关系运算与逻辑运算2 8 非数 和 空 数组2 9数组操作函数和高维数组2 10多项式及其运算 3 2 1数组的创建 1 直接输入法直接输入法就是在命令窗口中直接输入数组中的所有元素 在输入数组时必须遵循以下的规定 所有数组元素必须置于 中 数组元素必须由 或空格分隔 数组的行与行之间必须用 标志 或用回车键Enter进行换行 例如 输入九宫图矩阵 只需在命令窗口直接输入 I 492 857 316 I 492857316 4 2 载入外部数据文件载入函数 loadfunction 可以读取由MATLAB早期版本生成的包含矩阵的二进制文件 或者读取包含数值数据的文本文件 文本文件中的数字应排列成矩形 每行只能包含矩阵的一行元素 元素与元素之间用空格分隔 各行元素的个数必须相等 例如 用Windows自带的记事本或用MATLAB的文本调试编辑器创建一个包含下列4行数字的文本文件12345678910111213141516保存该文本为theloadtest dat文件 在命令窗口中输入 loadtheloadtest dat将读取该文件并创建一个变量theloadtest 包含上面的这个矩阵 在MATLAB工作空间中可以查到这个变量 5 例2 1 读取二进制数据文件woman mat 在MATLAB命令窗口中输入 loadwoman 读取二进制数据文件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 11 zeros 2 生成一个2行2列的全0数组ans 0000 rand state 0 rand 2 3 生成一个2行3列的均匀分布随机数组ans 0 95010 60680 89130 23110 48600 7621 E eye 3 生成一个3行3列的单位数组E 100010001 8 4 利用M文件创建和保存数组可以利用M文件创建数组 M文件是包含MATLAB代码的文本文件 可以用MATLAB自带的文本编辑调试器或别的文本编辑器来创建一个文件 代码和要在MATLAB命令窗口中输入的指令一样就可以 以 m格式保存该文件 9 例2 4 创建和保存数组TEST的TestMatrix m 1 打开文本编辑调试器 输入以下内容 TestMatrix mCreationandpreservationofmatrixTESTTEST 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种创建数组的方法既适用于二维数组的创建 有些方法又完全可以用于高维数组的创建 后面还将对高维数组做进一步的介绍 对于一维数组来说更是适用 不过一维数组形式比较简单 在实际中还有更常用的创建一维数组的方式 下面以例题的形式给出两种方法 11 例2 5 利用冒号运算符生成一维数组 冒号 是MATLAB最重要的运算符之一 它有以下几种应用方式 输入表达式 1 10可以生成一个包含从1 10所有整数的行向量12345678910要想获得非单位间隔 可以指定一个步长 例如 100 7 5010093867972655851又如 0 pi 4 pi得到00 78541 57082 35623 1416 12 例2 6 定数线性采样法 该方法的通用格式为x linspace a b n 相当于第一个数为a 最后一个数为b 以n为采样点数等间距采样 生成1 n的数组 例如 x linspace 1 12 6 1 00003 20005 40007 60009 800012 0000 13 2 2数组元素的标志为了叙述方便 首先利用内置函数magic 在MATLAB中生成一个四阶幻方矩阵A A magic 4 A 16231351110897612414151 14 1 全下标 标志对于二维数组来说 全下标 标志指出是第几行 第几列的元素 例如 数组A第i行第j列的元素可以用A i j 表示 A 3 4 表示第3行第4列的元素 对于四阶幻方数组A来说 它的值是12 2 单下标 标志 单下标 LinearIndex 标志就是只用一个下标A k 来指明元素在数组的位置 这种方式一般用来标志只有一行或一列的向量的元素 当然也可以用来标志二维数组的元素 这种情况首先设想 15 把二维数组的所有列 按先左后右的次序 首尾相接排成 一维长列 然后自上往下对元素位置进行编号 例如 对于四阶幻方数组A来说 A 15 是另外一种标志存储在A 3 4 中的数值12的方式 3 逻辑1 标志在实际使用中 常会遇到诸如寻找数组中所有符合某个条件的元素的问题 这时用 逻辑1 标志显得很方便 假设X是一个普通数组 L是对数组X进行某种逻辑操作后得到的相同大小的数组 那么X L 得到数组X中的符合某个条件的所有元素 16 假设有以下一组数据X 2 11 71 61 5NaN1 91 81 55 11 81 42 21 61 8 其中的非数 NaN 是某个观测中一个丢失的数据的标记 比如某个调查问卷中没有得到回答的选项 可以用 逻辑1 标志法去除这个丢失的数据 使用函数isfinite X 将得到一个逻辑数组 对于X中的有限值是真 对于NaN和无穷大 Inf 是假 17 2 3子数组的寻访和赋值掌握了2 2节所讲的元素标志方法 就容易理解数组的元素或子数组的寻访和赋值 下面以例题的形式来讲解本部分内容 例2 7 一维数组子数组的寻访 Address 和赋值 Assign rand state 0 把均匀分布伪随机发生器置为0状态 X rand 1 6 创建均布随机数组X 0 95010 23110 60680 48600 89130 7621 18 X 2 寻访数组X的第2个元素ans 0 2311 X 135 寻访数组X第1 3 5个元素组成的子数组ans 0 95010 60680 8913 X 3 100 把上述第3个元素重新赋值为100 x 0 95010 2311100 00000 48600 89130 7621 19 例2 8 二维数组的子数组寻访和赋值 A magic 4 创建4 4的幻方矩阵A 16231351110897612414151 A 4 0 第4行赋值为零A 162313511108976120000 A 1 2 1 3 寻访由数组A的第1 2行和第1 2 3列指定的子数组ans 162351110 20 2 4MATLAB的数值 变量与表达式1 数值MATLAB的数值采用习惯的十进制表示 可以带小数点及正负号 以下记述都合法100 100 11 2345科学计数法采用字符e来表示10的幂 例如1 60210e 206 02252e23虚数采用i或j作为扩展名 例如1i 3 14159j3e5i所有数值存储时采用IEEE规定的浮点数标准的长格式 longformat 形式 数值的相对精度是eps 即大约保持有效数字16位 数值范围大致为10 308 10 308 21 2 变量MATLAB不需要对变量进行类型声明或维数声明 当MATLAB遇到一个新的变量名 就自动产生一个变量并分配一个合适的存储空间 如果变量已经存在 MATLAB就会改变变量的内容 如果需要还会分配新的存储空间 例如 num students 25创建一个1行1列名称为num students的矩阵 数值25存储在该矩阵的单一元素中 变量名由英文字母 数字和下画线组成 并且必须以字母作为第一个字符 22 MATLAB区分大小写 也就是说大写字母和小写字母是有区别的 A和a不是同一个变量 在MATLAB中对一个变量进行命名的时候 注意不能使用关键字如for while等作为变量名 否则程序就会报错 也不要使用常用的函数名如sin cos等作为变量名 在MATLAB中还有一些所谓的预定义变量 每当MATLAB启动时这些变量就被产生 这些变量其实是一些特殊函数 规定了有用常量的值 所以有些教材中把这部分内容放在函数中讲解 详见表2 2 23 3 表达式和大多数别的编程语言一样 MATLAB也具有数学表达式 但是和大多数编程语言不同 MATLAB中的运算操作尽量设计地接近于习惯 在有些情况下别的编程语言一次只能处理一个数据 MATLAB却允许快捷方便地对整个矩阵 数组 进行操作 MATLAB表达式采用熟悉的数学运算符和优先级 见表2 3 表中运算符的优先级从上到下依次升高 24 2 5MATLAB常用的运算函数MATLAB提供了大量标准的基本数学函数 例如abs sqrt exp和sin等 对负数求平方根或对数不会提示错误 而是自动产生适当的复数结果 MATLAB还提供很多高级的数学函数 例如Bessel和gamma函数等 查看基本数学函数 可以在命令窗口输入 helpelfun查看高级数学函数或矩阵函数 可输入 helpspecfun helpelmat 25 有些函数 例如sqrt和sin是内置 builtin 函数 内置函数是MATLAB内核 core 的一部分 所以运算效率很高 但采用的算法细节无法查看 另外一些函数 例如gamma和sinh 是以M文件的形式来执行的 内置函数和别的函数之间有些区别 例如 内置函数无法查看代码 别的函数可以查看代码 甚至在需要时可以修改代码 26 2 6数组运算和矩阵运算 1 数组可以和一个标量 1 1的矩阵 进行加 减 乘 除运算 其结果将是此标量和数组中的每一个元素 相加 相减 相乘 相除 而经典数学中矩阵和一个标量不能进行加 减运算 只允许矩阵和一个标量进行乘 除运算 进行相除运算时 标量必须是除数 矩阵为被除数 2 一个标量与一个数组的乘运算和一个标量与一个矩阵的乘运算是相同的 27 3 执行数组与数组之间的运算时 参与运算的数组必须同维 运算所得结果数组也总是与原数组同维 而矩阵执行加 减 除运算时要求数组同维 执行乘法运算时只要求矩阵的内维相同 4 两个数组相乘是对应元素相乘 两个矩阵相乘遵守数学中的规定 5 两个数组的除运算和两个矩阵的除运算比较复杂 当两个同维数组相除时 运算为数组的相应元素相除 计算结果是和参与运算的数组同维的数组 当参与运算的数组有一个是标量时 运算是标 28 量和数组的每一个元素相除 计算结果是和参与运算的数组同维的数组 右除与左除的关系为A B B A 其中A是被除数 B是除数 在MATLAB中 矩阵左除和右除的含义不同 矩阵右除定义为 B A A B 6 数组的乘方和矩阵的乘方也比较复杂 数组乘方运算规则 矩阵的标量乘方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 5122132 结果是数组对应元素的乘积 A B 矩阵A与矩阵B相乘ans 19224350 矩阵运算遵守线性代数运算规则 30 2 7关系运算与逻辑运算1 关系运算MATLAB提供了6种关系运算符 详见表2 4 关系运算符的运算法则如下 1 当两个标量相比较时 直接比较两数的大小 若关系成立 关系表达式结果为1 否则为0 2 当一个标量与一个矩阵相比较时 则把标量与矩阵的每一个元素按标量关系运算规则逐个比较 并给出元素比较结果 最终关系运算的结果是一个维数与原矩阵相同的矩阵 它的元素由0或1组成 31 3 当参与比较的量是两个维数相同的矩阵时 比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行 并给出元素比较结果 最终关系运算的结果是一个维数与原矩阵相同的矩阵 它的元素由0或1组成 例如 在MATLAB命令窗口输入 A 1 9 r 5 A rA 123456789r 5ans 111100000 32 2 逻辑运算MATLAB提供了3种数组逻辑运算符 见表2 5 逻辑运算的运算法则如下 1 在逻辑运算中 非零元素为真 用1表示 零元素为假 用0表示 2 设参与逻辑运算的是两个标量a和b a b表示a b全为非零时 运算结果为1 否则为0 a b表示a b中只要有一个非零 运算结果为1 a表示当a是零时 运算结果为1 当a非零时 运算结果为0 33 3 若参与逻辑运算的一个是标量 一个是矩阵 那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行 最终运算结果是一个与矩阵同维的矩阵 其元素由1或0组成 4 若参与逻辑运算的是两个同维矩阵 那么运算将对矩阵相同位置上的元素按标量规则逐个进行 最终运算结果是一个与原矩阵同维的矩阵 其元素由1或0组成 5 逻辑非是单目运算符 也服从矩阵运算规则 34 6 在算术 关系 逻辑运算中 算术运算优先级最高 逻辑运算优先级最低 例如 在MATLAB命令窗口输入 A 3 3 建立一个一行7列的数组A 的作用是输入完3条指令再执行运算 L1 A 逻辑非的作用 L2 A 2 A 2 判断A中大于2或小于 2的元素 注意关系运算优先于逻辑运算A 3 2 10123L1 0001000L2 1000001 35 MATLAB除了提供3种基于数组的逻辑运算符 还提供了另外两种逻辑操作 1 基于二进数位的逻辑操作 指令有bitand 数位与 和 bitor 数位或 bitcmp 数位否 非 bitxor 相异数位返回1 相同数位返回0 2 先决逻辑操作 指令有 这两种逻辑操作不再详述 留给读者通过help自己学习 36 3 关系 逻辑函数 1 关系逻辑函数 xor A B any A all A isequal A B ismember A B 2 特殊数据判断指令 isempty x isfinite x isinf x isletter x isnan x isprime x isreal x isspace x 3 数据类型判断指令 isa x name iscell x iscellstr x ischar x isfield x name isglobal x ishandle x islogic x isnumeric x isobject x issparse x isstruct x 4 状态判断指令 ishold isstudent 37 2 8 非数 和 空 数组1 非数 NaN前面提到在做数据统计时 一个缺失的数据可以用 非数 NaN NotaNumber 来代替 而不能用0来作为其值 其实在做运算的时候也会产生非数 例如按IEEE规定 等运算都会产生非数 在MATLAB中用NaN或nan记述 根据IEEE数学规范 NaN具有以下性质 1 只要NaN参加四则运算或函数作用于非数 其结果也一定是非数 即具有传递性 2 非数没有大小的概念 因此不能进行逻辑运算 也不能比较两个非数的大小 38 2 空 数组当数组的某些维数为0时 称该数组为空数组 在复杂的计算中有时会产生空数组 也可以利用空数组对其他数组进行赋值 需要注意如下几点 1 空数组与全零元素数组不是一回事 2 空数组确实是数组 不能把空看作是 虚无 用which who whos可以看出 3 可以用命令isempty来判断一个数组是否为空数组 4 空数组在运算中不具备传递性 39 首先在命令窗口输入 A A 表示创建了一个空数组A 接着输入 B ones 2 0 B Emptymatrix 2 by 0表示创建了一个空数组B 该数组有2行 列方向是空的 下面用几个指令来对空数组B的属性进行检查 40 class B 空数组的数据类别ans double isnumeric B 判断是否是数值类数组ans 1 isempty B 唯一可以正确判断数组是否是空的指令ans 1 41 接着输入 whichB B是什么Bisavariable ndims B 数组B的维数ans 2 size B 数组B的大小ans 20 42 创建另外一个空数组 C ones 0 2 C Emptymatrix 0 by 2接着输入 D B CD 0000说明D是一个2行2列的数组 而不是空数组 可见空数组运算不具有传递性 43 空数组的作用在2 9节还会有所介绍 简要介绍一下上面叙述中提到的两个重要命令 1 ndims 用于检查数组的维数 比如向量的维数为1 矩阵的维数为2 2 size 用于检查数组各维的大小 还有一个命令length 可以给出数组所有维的最大长度 44 2 9数组操作函数和高维数组利用一些内置函数可以生成数组 另外还有一些数组操作函数 利用这些函数可以由比较小的数组构成比较大的数组或高维数组 常用的数组操作函数见表2 6 下面举两个例子看看这些函数的使用 例如 首先在命令窗口输入 A zeros 3 3 A 1 9 产生一个3行3列的数组AA 147258369 45 继续输入 diag A ans 159很显然是取A对角线上的元素 继续输入 tril A ans 100250369结果为A主对角线的下三角阵 46 继续输入 fliplr A ans 741852963可以看到第1列与第3列交换了位置 还有几个指令的使用将在后面的高维数组举例说明 47 2 高维数组 本节只以三维数组为例进行叙述 但所有方法也适用于三维以上的数组 创建一个三维数组的常用方法有4种 1 直接利用 全下标 元素赋值法创建高维数组 2 由函数ones zeros rand rands 直接创建标准高维数组 3 由若干大小相同的低维数组合成高维数组 4 借助cat repmat reshape 等函数构成高维数组 48 例如 在命令窗口输入 A 2 2 2 1 直接利用 全下标 元素赋值法创建高维数组A 1 0000A 2 0001生成的数组A是一个2 2 2的数组 49 接着输入 B ones 2 2 2 B 1 8 由函数ones 直接创建标准高维数组并全元素赋值B 1 1324B 2 5768生成的数组B也是一个2 2 2的数组 50 接着输入 C cat 2 A B 借助cat 把数组A B在列方向上串接C 1 00130024C 2 00570168 51 已经知道由比较小的数组构成比较大的数组或高维数组 那么反过来 怎么把高维数组或比较大的数组变成比较小的数组呢 MATLAB设计了赋 空阵 的方法和函数squeeze 来完成这个工作 例如 在命令窗口输入如下命令 A reshape 1 18 2 3 3 创建一个2 3 3的数组AA 1 135246 52 A 2 791181012A 3 131517141618 size A 测量数组A的大小ans 233 53 继续输入 A 2 3 对数组A的第2列 第3列赋 空阵 A 1 12A 2 78A 3 1314可见数组A的第2列 第3列已消失 54 继续输入 size A 再次测量数组A的大小ans 213可见A已经变成了一个2 1 3的数组 继续输入 A 1 squeeze A A 1 17132814 55 可见函数squeeze 可以撤销长度为1的 孤维 使原三维数组A 降 为二维 但这种操作不会影响到数组A本身 只是把数组A 表面 上给降维了 如在命令窗口输入size A 可以看到A仍是一个2 1 3的数组 继续输入 A 1 对 孤维 赋 空 A Emptyarray 2 by 0 by 3可见数组A变成了一个 空 数组 56 继续输入 size A ans 203可见这时A变为一个2 0 3的数组 继续输入 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种运算 多项式加减运算MATLAB没有提供专门进行多项式加减运算的函数 事实上多项式的加减就是其所对应的系数向量的加减运算 因此有下面两种约定 a 对于次数相同的多项式 可以直接对其系数向量进行加减运算 b 如果两个多项式次数不同 则应该把低次多项式中系数不足的高次项用0补足 然后进行加减运算 例如 可以用表示 可以用表示 那么就可以用 来表示 两个向量的和刚好是多项式之和的系数 多项式乘运算例如计算多项式和的乘积 只需要在命令窗口输入 A 2 1 0 3 创建多项式A B 2 1 创建多项式B C conv A B 求两个多项式的乘积C 乘积结果仍是一个多项式40 163即乘积为 多项式求值有两个函数polyval 或polyvalm 大家要注意它们之间的区别 函数y polyval p x 用来计算多项式p在x点的值 可能有两种取值 a x是标量 直接把x代入计算即可 b x是向量或矩阵 则采用数组运算 点运算 例如 已知 求p x 在x处的值 其中分别取x 2和2 2矩阵x 1 2 2 1 在命令窗口输入 p 2 1 0 3 创建多项式p x 2 polyval p x 求x为标量2时多项式的值ans 15 继续在命令窗口输入 x 1 2 2 1 polyval p x 求x为2 2矩阵时多项式的值ans 015 174而函数Y polyvalm p X 是以方阵X为自变量 计算多项式p的值 采用矩阵运算 例如 求多项式以2 2矩阵x 1 2 2 1 为自变量的值 多项式p和矩阵X刚才已经创建 只需要继续输入 polyvalm p x ans 12 12120可以看到两个函数的输入相同而运算结果不同 这主要是它们的运算规则不同 polyval p A 2 A A A A A 3 ones size A polyvalm p A 2 A A A A A 3 eye size A
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!