
2.5 矩阵
MATLAB为Matrix Laboratory(矩阵实验室)的缩写,可见该软件在处理矩阵问题上的优势。
按照空间结构分类,矩阵可分为一维矩阵、二维矩阵、三维矩阵,向量可以看成是一维矩阵,因此,向量中的点积、叉集运算在矩阵中也适用,本节不再赘述。
2.5.1 矩阵的生成
矩阵的生成主要有直接输入法、M文件生成法和文本文件生成法等。
1.直接输入法
在键盘上直接按行方式输入矩阵是最方便、最常用的创建数值矩阵的方法,尤其适合较小的简单矩阵。在用此方法创建矩阵时,应当注意以下几点。
◆输入矩阵时要以“[]”为其标识符号,矩阵的所有元素必须都在括号内。
◆矩阵同行元素之间由空格(个数不限)或逗号分隔,行与行之间用分号或<Enter>键分隔。
◆矩阵大小不需要预先定义。
◆矩阵元素可以是运算表达式。
◆若“[]”中无元素,表示空矩阵。
◆如果不想显示中间结果,可以用“;”结束。
例2-23:创建矩阵示例。
解:MATLAB程序如下。


在输入矩阵时,MATLAB允许方括号里还有方括号,结果跟不加方括号是一样的。
2.利用M文件创建
当矩阵的规模比较大时,直接输入法就显得笨拙,出差错也不易修改。为了解决这些问题,可以将所要输入的矩阵按格式先写入一文本文件中,并以m作为此文件的扩展名,即M文件。
M文件是一种可以在MATLAB环境下运行的文本文件,它可以分为命令式文件和函数式文件两种。在此处主要用到的是命令式M文件,用它的简单形式来创建大型矩阵。在MATLAB命令窗中输入M文件名,所要输入的大型矩阵即可被输入到内存中。
M文件中的变量名与文件名不能相同,否则会造成变量名和函数名的混乱。
例2-24:编制M文件,包含表2-20中20位25~34周岁的健康女性的测量数据。

表2-20 测量数据

解:在M文件编辑器中输入以下内容。


以文件名“healthy_women.m”保存,然后在MATLAB命令窗口中输入文件名,得到下面的结果。

3.利用文本创建
MATLAB中的矩阵还可以由文本文件创建,即在文件夹(通常为work文件夹)中建立txt文件,在命令窗口中直接调用此文件名即可。
例2-25:用文本文件创建矩阵x,其中
x=1 2 3
4 5 6
7 8 10
解:在记事本中建立以下文件,并以wenben.txt保存。
1 2 3
4 5 6
7 8 10
在MATLAB命令窗口中输入以下内容。


2.5.2 特殊矩阵
在工程计算以及理论分析中,经常会遇到一些特殊的矩阵,比如全0矩阵、全1矩阵单位矩阵、随机矩阵等。对于这些矩阵,在MATLAB中都有相应的命令可以直接生成。
1.全0矩阵
在MATLAB中,全零矩阵使用zeros命令表示,该命令的调用格式见表2-21。
表2-21 zeros调用格式

例2-26:全0矩阵生成示例。
解:在MATLAB命令窗口中输入以下命令。


2.全1矩阵
在MATLAB中,全1矩阵使用ones命令表示,该命令的调用格式见表2-22。
表2-22 ones调用格式

例2-27:全1矩阵生成示例。
解:在MATLAB命令窗口中输入以下命令。


3.单位矩阵
若λ1=λ2=…=λn=1,即

将该矩阵称为单位矩阵。
如果A为m×n矩阵,那么EmA=AEn=A。在MATLAB中,单位矩阵使用eye命令表示,该命令的调用格式见表2-23。
表2-23 eye调用格式

4.魔方矩阵
在MATLAB中,magic函数用来生成零矩阵,该命令的调用格式见表2-24。
表2-24 magic调用格式

例2-28:魔方矩阵示例。
解:在MATLAB命令窗口中输入以下命令。


5.希尔伯特矩阵
在MATLAB中,hilb函数用来生成希尔伯特(Hilbert)矩阵,逆希尔伯特矩阵的函数为invhilb,其调用方法见表2-25。
表2-25 hilb调用格式

在MATLAB中,invhilb函数用来生成逆希尔伯特矩阵,其调用方法见表2-26。
表2-26 invhilb调用格式

例2-29:创建希尔伯特矩阵。
解:在MATLAB命令窗口中输入以下命令。


6.测试矩阵
在MATLAB中,利用gallery生成测试矩阵,它的使用格式见表2-27。
表2-27 gallery命令的使用格式

表2-28 matrixname的名称

(续)

(续)

例2-30:生成对称矩阵。
解:在MATLAB命令窗口中输入以下命令。


例2-31:生成豪斯霍尔德矩阵。
解:在MATLAB命令窗口中输入以下命令。


7.随机矩阵
rand函数、randi函数和randn函数使用随机数生成器生成随机矩阵,具体的调用格式见表2-29。
在MATLAB中rng函数控制随机数生成,具体的调用格式见表2-30。
表2-29 函数调用格式

表2-30 rng函数调用格式

例2-32:检索和还原生成器设置。
解:在MATLAB命令窗口中输入以下命令。


2.5.3 矩阵元素函数
矩阵建立起来之后,还需要对其元素进行引用、修改。表2-31列出了矩阵元素的引用格式,表2-32列出了常用的矩阵元素修改命令。
表2-31 矩阵元素的引用格式

表2-32 矩阵元素修改命令

例2-33:矩阵元素的引用。
解:在MATLAB命令窗口中输入以下命令。


例2-34:扩充矩阵。
解:在MATLAB命令窗口中输入以下命令。


不但矩阵元素可以引用修改,矩阵的维度和方向也可以进行变换,常用的矩阵变维命令见表2-33。常用的矩阵变向命令见表2-34。
表2-33 矩阵变维命令

表5-34 矩阵变向命令

1.矩阵的旋转
在MATLAB中,rot90命令用于将数组旋转90°,该命令的格式与说明见表2-35。
表2-35 rot90命令

例2-35:旋转矩阵示例。
解:在MATLAB命令窗口中输入以下命令。


2.矩阵的镜像
在MATLAB中,flip命令用于镜像矩阵,翻转矩阵元素,该命令的格式与说明见表2-36。
表2-36 flip命令

数组的镜像变换实质是翻转矩阵元素的操作,分为两种:左右翻转与上下翻转。
◆flip(A,1)将翻转每一列中的元素
◆flip(A,2)将翻转每一行中的元素。
例2-36:数组上下翻转示例。
解:在MATLAB命令窗口中输入以下命令。


在MATLAB中,还包括专门的左右翻转与上下翻转命令,下面分别进行介绍。
(1)左右翻转
使用fliplr函数将矩阵中的元素左右翻转,调用方法如下。

例2-37:矩阵左右翻转示例。
解:在MATLAB命令窗口中输入以下命令。


(2)上下翻转
使用flipud函数将矩阵中的元素上下翻转,调用方法如下。


例2-38:矩阵左右翻转示例。
解:在MATLAB命令窗口中输入以下命令。

例2-39:矩阵的变维示例。
解:在MATLAB命令窗口中输入以下命令。



例2-40:矩阵串联与变向示例。
解:在MATLAB命令窗口中输入以下命令。


3.矩阵带宽
矩阵带宽是显示器视频放大器通频带宽度的简称,凡电子电路都存在一个固有的通频带。带宽越宽,响应速度就越快,允许通过的信号频率就越高,信号失真也越小。
矩阵的上带宽和下带宽是通过求包含非零值的最远一个对角线(分别在主对角线上方或下方)测得的。
对于包含元素Aij的矩阵A:
●上带宽B1是最小数,这样无论何时j-i>B1,Aij=0。
●下带宽B2是最小数,这样无论何时i-j<B2,Aij=0。
在MATLAB中,bandwidth命令用于得到矩阵的上下带宽,该命令的格式与说明见表2-37。

表2-37 bandwidth命令

在MATLAB中,isbanded命令用于矩阵是否位于特定的下带宽和上带宽范围内,该命令的格式与说明见表2-38。
表2-38 isbanded命令

例2-41:矩阵带宽示例。
解:MATLAB程序如下。

2.5.4 对角矩阵
对矩阵元素的修改的特例包括对角元素和上(下)三角阵的抽取。在MATLAB中包括专用的命令。
1.对角矩阵
n阶矩阵显示格式为

则称该矩阵为对角矩阵。两个对角矩阵的和是对角矩阵,两个对角矩阵的积也是对角矩阵。
对于矩阵A∈Cn×n,所谓的矩阵对角化就是找一个非奇异矩阵P,使得

其中,λ1,…,λn为A的n个特征值。
矩阵对角化在实际中可以大大简化矩阵的各种运算,但不是每个矩阵均可进行对角化转换,因此判断矩阵是否可以进行对角化转换是首要步骤。
◆定理1:n阶矩阵A可对角化的充要条件是A有n个线性无关的特征向量。
◆定理2:矩阵A可对角化的充要条件是A的每一个特征值的几何重复度等于代数重复度。
◆定理3:实对称矩阵A总可以对角化,且存在正交矩阵P,使得

其中,λ1,…,λn为A的n个特征值。
对于矩阵,斜对角上的元素是主对角线元素,如图2-5所示,包括a11,a22,…,amn。

图2-5 主对角元素
在MATLAB中,diag命令用于抽取矩阵的对角线上的元素,组成对角线数组,该命令的格式与说明见表2-39。
表2-39 diag命令

在MATLAB中,isdiag命令用于确定矩阵是否为对角矩阵,该命令的格式与说明见表2-40。
表2-40 isdiag命令

例2-42:矩阵对角线抽取示例。
解:MATLAB程序如下。


2.上对角矩阵
在MATLAB中,triu命令用于抽取矩阵的对角线上三角部分的元素,下三角元素使用0替代,组成上对角线矩阵,如图2-6所示,该命令的格式与说明见表2-41。

图2-6 上三角矩阵转换
表2-41 triu命令

例2-43:上对角矩阵示例。
解:MATLAB程序如下。


在MATLAB中,istriu命令用于确定矩阵是否为上三角矩阵,该命令的格式与说明见表2-42。
表2-42 istriu命令

例2-44:上三角矩阵示例。
解:MATLAB程序如下。


3.下对角矩阵
在MATLAB中,tril命令用于抽取矩阵的对角线下三角部分的元素,其余部分用0替代,组成下三角矩阵,如图2-7所示,该命令的格式与说明见表2-43。

图2-7 下三角矩阵转换
表2-43 tril命令

在MATLAB中,istril命令用于确定矩阵是否为下三角矩阵,该命令的格式与说明见表2-44。
表2-44 istril命令

例2-45:下三角矩阵示例。
解:MATLAB程序如下。



2.5.5 矩阵基本运算
矩阵的基本运算包括加、减、乘、数乘、点乘、乘方、左乘、右乘、求逆等。其中加、减、乘与大家所学的线性代数中的定义是一样的,相应的运算符为“+”“-”“∗”,而矩阵的除法运算是MATLAB所特有的,分为左除和右除,相应运算符为“\”和“/”。
MATLAB的除法运算较为特殊。对于简单数值而言,算术左除与算术右除不同。算术右除与传统的除法相同,即a/b=a÷b;而算术左除则与传统的除法相反,即a\b=b÷a。
对矩阵而言,算术右除B/A相当于求解线性方程X∗A=B的解;算术左除A\B相当于求解线性方程A∗X=B的解。点左除与点右除与上面点运算相似,是变量对应于元素进行点除。
例2-46:矩阵的基本运算示例。
解:MATLAB程序如下。



MATLAB以矩阵为基本运算单元,而构成矩阵的基本单元是数据。为了更好地学习和掌握矩阵的运算,本章首先对数据的基本函数作简单介绍。
另外,常用的运算还有指数函数、对数函数、平方根函数等。用户可查看相应的帮助获得使用方法和相关信息。