
2.3 矩阵及其操作
MATLAB是基于矩阵运算的软件,所有数据都以矩阵形式存储。最基本的数据结构是二维的m×n矩阵(1×1的矩阵为标量、1×n的矩阵为向量),矩阵的创建及操作非常灵活、简便。
2.3.1 矩阵的创建
1.数值矩阵的生成
矩阵可直接按行输入每个元素来生成。同一行中的元素用逗号“,”或者空格符来分隔,且空格个数不限;不同的行用分号“;”分隔;所有元素在同一方括号“[]”内。
例如:

2.特殊矩阵的生成
(1)全零阵

(2)全1阵

(3)单位阵

(4)产生以输入元素为对角线元素的矩阵

说明:将向量v写入矩阵X的主对角线上,而矩阵其他元素为0。k表示上移或下移行数,正数表上移,负数表下移,0(默认值)表在对角线上。
例如:

(5)Magic(魔方)矩阵
格式:M=magic(n) %产生n阶魔方矩阵
例如:

2.3.2 矩阵元素操作
1)矩阵A的第r行:A(r,:)。
2)矩阵A的第r列:A(:,r)。
3)依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)。
4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2,j1:j2)。
5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:)。
6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:,j2:-1:j1)。
7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[]。
8)删除A的第j1~j2列,构成新矩阵:A(:,j1:j2)=[]。
9)将矩阵A和B拼接成新矩阵(A和B的维数要适当):[A B];[A;B]。
2.3.3 矩阵的维数
对于m×n的矩阵A,可以使用函数size获得A的维数。

例如:

2.3.4 矩阵赋值与扩展
MATLAB允许用户对一个矩阵的单个元素进行赋值和操作。例如,如果要将矩阵A中第2行第3列的元素赋为10,则可以通过下面的语句来完成:
>>A(2,3)=10
这时将只改变该元素的值,而不影响其他元素的值。如果给出的行下标或列下标大于原来矩阵的行数和列数,则MATLAB将自动扩展原来的矩阵,并将扩展后未赋值的矩阵元素置为0。例如:

2.3.5 矩阵元素及重排
1.矩阵元素
在MATLAB中,也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序。在MATLAB中,矩阵元素按列存储,先存储第一列,再存储第二列,依此类推。例如:

这与人们常用的取法A(3,1),A(1,3)的结果相同。
2.矩阵重排
当向量的元素个数能表示成m×n的形式时,可以将其排为矩阵形式。
格式:A-reshape(x,m,n) %将向量x重新排成mXn的矩阵A
例如:

注:A(:)将矩阵A每一列元素堆叠起来,成为一个列向量,产生一个12×1的矩阵,等价于reshape(A,12,1),其转置A(:)'就是行向量x。
2.3.6 矩阵复制
矩阵的阶次在4阶以下时,矩阵元素的输入可以逐个写入。但是当矩阵阶次较大且结构相同时,用逐个输入的方法太费时间,这时可以用矩阵复制的办法来加快输入的速度,常用函数repmat()来进行矩阵复制。
格式:repmat(A,m,n)%A为待复制的向量或矩阵,m、n为需要复制的行数和列数
【例2-10】 已知A=[1 3 6 9 12],试求:1)写出对向量A复制6行的矩形B。
2)生成对向量A复制6行和两列的矩阵C。

2.3.7 矩阵元素的查找
用find命令查找矩阵元素所在的位置及其对应的值。

【例2-11】 己知,分别找出矩阵中大于0、等于20、大于等于30的位置。


2.3.8 稀疏矩阵
当矩阵的大部分元素是零,只有少数元素为非零元素时,这种矩阵称为稀疏矩阵。

例如,对【例2-11】给定的矩阵A,试求出其稀疏矩阵B,再转换成全矩阵C,并绘出稀疏矩阵B的标示图。


图2-1 稀释矩阵图

图2-2 稀释矩阵标示图