1.3 矩阵
1.3.1 矩阵的建立
MATLAB把矩阵作为基本运算对象。数值(标量)可被看成1×1的矩阵,矢量(一维数组)可被看成n×1或1×n的矩阵。在MATLAB中,不需要对矩阵的维数和类型进行说明,MATLAB会根据用户所输入的内容进行配置。创建矩阵有以下3种方法。
1.直接输入创建矩阵
通过输入矩阵中每个元素的值来建立一个矩阵,只需以左方括号开始,以逗号或空格为间隔输入元素值,行与行之间用分号或单击〈Enter〉键隔开,最后以右方括号结尾即可。当矩阵中的元素个数比较少时,这种方法非常适用。另外,用 “单引号” 界定的字符或字符串可创建字符矩阵。
【例1-6】 创建3×3数值矩阵A,B和字符矩阵C。
当矩阵较大时,可以分行输入,用〈Enter〉键代替分号,这样的输入形式比较接近线性代数中的矩阵。任何矩阵的元素内部都不能有空格,否则会被MATLAB认为是两个元素。
2.矢量法创建矩阵
矢量可以由冒号和数字产生。其格式为:
说明:矢量是从初值开始,以增量为步长,直到不超过终值的所有元素所构成的序列。步长可缺省,默认为 “1”。当矩阵中的元素很多且有规律时,可通过矢量来建立一个矩阵。其基本格式为:
【例1-7】 建立一个10以内的奇数矩阵。
3.函数法创建矩阵
利用函数可快速产生一些特别有用的矩阵,如单位矩阵、随机矩阵及零矩阵等,特殊矩阵如表1-4所示。
表1-4 特殊矩阵
当某一项操作无结果时,MATLAB返回一个空矩阵。空矩阵的大小为零,但其确实存在于工作空间中,可以通过变量名访问。
【例1-8】 建立空矩阵A、单位矩阵B、常数矩阵 C、均匀分布随机矩阵 D、正态分布的随机矩阵E、零矩阵F。
建立的矩阵将保存在MATLAB的工作区中,并可以随时被调用。如果用户不用clear命令清除它,或对它重新赋值,该矩阵将一直保存在工作区中直到MATLAB关闭为止。另外,矩阵函数中只有一个输入参数,则建立的矩阵为方阵。
1.3.2 矩阵的基本运算
1.矩阵与标量的运算
运算包括加、减、乘、除和乘方运算。矩阵与标量运算是矩阵的每个元素对该标量的运算。MATLAB用符号 “∧” 计算乘方时,按照矩阵运算规则计算,要求矩阵为方阵;用符号“.∧” 计算乘方时,按照数组运算规则计算,对矩阵没有限制。
【例1-9】 已知矩阵A=,标量b=3,计算A+b、A∗b、A/b和A.∧b。
2.矩阵与矩阵的运算
(1)加减运算
两个矩阵的维数完全相同时,可以进行矩阵加减法运算。如果两个矩阵的维数不相等,则MATLAB将给出错误信息,提示两个矩阵的维数不相等。
(2)乘法运算
两个矩阵的维数相容时(A的列数等于B的行数),可以进行A乘B的乘法运算。
(3)除法运算
矩阵的除法运算包括左除和右除两种运算。其中
左除:A\ B=A-1B,A为方矩阵。其中A-1=1/A
右除:A/B=AB-1 ,B为方矩阵。其中B-1=1/B
可见,左除和右除的运算过程以及对矩阵的要求是不一样的,其数学意义也不同。
(4)点运算
两个矩阵之间的点运算是按照数组运算规则计算,矩阵的对应元素直接运算。要求参加运算的矩阵大小必须相同。有 “.∗” “./” 和 “.\” 3种运算符。
【例1-10】 已知矩阵 A=,矩阵 B=,求 A∗B、A.∗B、A\B、A/B、A.\B和A./B的运算结果。
1.3.3 矩阵的操作
MATLAB中对矩阵的操作提供了多种简便的方法,可以对矩阵进行元素操作、提取子块、合并矩阵、转置等操作。
1.元素操作
MATLAB允许用户对一个矩阵的单个元素进行操作,可以通过元素的下标进行(行、列的序号是从1开始的),修改某些元素的值不会影响其他元素的值。
2.提取子块
提取矩阵的某一部分,可以使用冒号表达式。在MATLAB中,冒号 “:” 表示 “全部”。
【例1-11】 输入一个4×3的矩阵,选出前3行构成一个矩阵;选出前两列构成另一个矩阵。
3.矩阵合并
把两个矩阵合并成一个大矩阵,有两种形式:
说明:A矩阵与B矩阵的列数必须相同,B矩阵补在A矩阵的下面。
说明:A矩阵与B矩阵的行数必须相同,B矩阵补在A矩阵的右面。
4.矩阵的转置
用符号 “′”(单引号)可以进行矩阵的转置运算。
5.矩阵的展开
矩阵的展开是按照矩阵在内存中的实际存放形式展开的。矩阵的元素在内存中是按列存放的,即先存放第1列,接着存放第2列……把一个矩阵内的所有元素统一展开成一个列矢量,其指令格式为:
【例1-12】 把矩阵A=和矩阵 B=(2 4 6)合并成一个矩阵,再转置后展开。
6.矩阵的线性变换
MATLAB提供了一些矩阵变换函数,可以对矩阵作形式上的变换。矩阵的变换函数如表1-5所示。
表1-5 矩阵的变换函数
【例1-13】 建立一个3×3的魔方矩阵,提取其对角元素和下三角矩阵,并上下翻转。
1.3.4 复数和复数矩阵
MATLAB允许在运算和函数中使用复数或复数矩阵。复数的表示借助于特殊的字符 i或j,其值在工作空间中都显示为0+1.0000i。
1.复数
复数可由以下两种方式输入:
其中,3.14为复数幅角的弧度,3为复数的模。
2.复数矩阵
复数矩阵有下列两种表示方法:
两式具有相同的结果。另外,当复数的虚部为一个确定的数值(而不是变量或矩阵)时,输入时可以省略i(或j)前面的 “∗” 符号。另外,如果 i、j被定义为其他变量(例如在程序设计中常常习惯于将i和j作为循环变量),则应定义另一个新的复数单位,如
这里将i1定义成新的复数单位。
1.3.5 稀疏矩阵
在许多工程实践中,经常会出现一些只包含几个非零元素,而其他大量的元素都为零值的矩阵,这种矩阵被称为稀疏矩阵。如果按普通的矩阵处理方法来处理这些矩阵,不但会占用许多存储空间,同时也会严重地影响运行速度。为了避免这些缺点,对于那些具有大量零元素的矩阵,MATLAB采用一种不同于一般矩阵的处理方法,只存储非零元素的数值以及这些元素所对应的下标。例如,设矩阵A=,A 是具有稀疏特征的矩阵,其完全存储方式是列存储每个元素,共有 12 个元素,即 2,0,0,0,0,0,3,0,0,1,0,0。其稀疏存储方式为(1,1),2,(2,3),3,(3,2),1。稀疏存储方式占用9个元素空间,当原矩阵更大且更加 “稀疏” 时,稀疏存储方式会更有效地提高空间利用率。
虽然MATLAB对稀疏矩阵采用了特殊的处理,但其各种运算的规则仍然和完全矩阵一样。另外,MATLAB也有专门的函数来处理稀疏矩阵,如表1-6所示。
表1-6 处理稀疏矩阵的主要函数
【例1-14】 将矩阵A=转化为稀疏矩阵B,并察看;再将稀疏矩阵B转化为完全矩阵C。