专题二 MATLAB矩阵处理
--------------------------------------------------------------------------------
一、特殊矩阵
特殊矩阵包括2大类:通用性的特殊矩阵、用于专门学科的特殊矩阵
1. 通用性的特殊矩阵
- 函数zeros():产生全0矩阵,即零矩阵。
- 函数ones():产生全1矩阵,即幺矩阵。
- 函数eye():产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
- 函数rand():产生(0,1)区间均匀分布的随机矩阵。不包括0和1。
- 函数randn():产生均值为0,方差为1的标准正态分布随机矩阵。(产生一个随机分布的指定均值和方差的矩阵:将randn产生的结果乘以标准差,然后加上期望均值即可)
例如:产生均值为0.6,方差为0.1的一个5×5矩阵。
例如:zeros(size(A)) 返回一个与矩阵A同大小的零矩阵。其他特殊矩阵也可使用这种用法。
例如:fix(a+(b-a+1)*rand(m,n)):产生[a, b]区间上均匀分布的随机整数。
2. 用于专门学科的特殊矩阵
2.1 魔方矩阵 magic square
在MATLAB中,函数magic(n)生成n阶魔方矩阵。例如:3阶魔方矩阵。
n阶魔方矩阵由1,2,3,…,n²共n²个整数组成,且每行、每列以及主对角线、副对角线上各n个元素之和都相等。且和为(1+2+3+...+n²)/n = (n+n³)/2。
2.2 范得蒙矩阵 vandermonde
在MATLAB中,函数vander(V)生成以向量V为基础的范得蒙矩阵。
2.3 希尔伯特矩阵
可以归纳出:希尔伯特矩阵的元素为 H(i, j) = 1 / (i+j-1)
在MATLAB中,生成n阶希尔伯特矩阵的函数是 hilb(n)
2.4 伴随矩阵
在MATLAB中,函数compan(p)生成伴随矩阵,其中p是一个多项式的系数向量,高次幂系数在前,低次幂系数在后。
例如:生成多项式 x³-2x²-5x+6 的伴随矩阵
--------------------------------------------------------------------------------
二、矩阵变换
1. 对角阵
- 对角矩阵:只有对角线上有非零元素的矩阵。
- 数量矩阵:对角线上的元素相等的对角矩阵。
- 单位矩阵:对角线上的元素都为1的对角矩阵。
1.1 提取矩阵的对角线元素
- diag(A):提取矩阵A主对角线元素,产生一个列向量。
- diag(A, k):提取矩阵A第k条对角线的元素,产生一个列向量。
1.2 构造对角矩阵
- diag(V):以向量V为主对角线元素,产生对角矩阵。
- diag(A, k):以向量V为第k条对角线元素,产生对角矩阵。
2. 三角阵
- 上三角阵:对角线以下的元素全为0的矩阵。
- 下三角阵:对角线以上的元素全为0的矩阵。
2.1 上三角阵
- triu(A):提取矩阵A的主对角线及以上的元素。
- triu(A, k):提取矩阵A的第k条对角线及以上的元素。
例如:提取4阶魔方矩阵第-1条对角线及以上的元素
2.2 下三角阵
- tril(A):提取矩阵A的主对角线及以下的元素。
- tril(A, k):提取矩阵A的第k条对角线及以下的元素。
例如:提取4阶魔方矩阵第-1条对角线及以下的元素
3. 矩阵的转置
- 转置运算符是小数点后接单引号(.')
- 共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共轭。
如果矩阵是实矩阵,那么转置和共轭转置是等效的;两者的区别在于矩阵是复矩阵时。
4. 矩阵的翻转
- fliplr(A):对矩阵A实施左右翻转。
- flipud(A):对矩阵A实施上下翻转。
举例:验证魔方矩阵的主对角线、副对角线元素之和相等。
>> A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> V1 = diag(A)
V1 =
17
5
13
21
9
>> s1 = sum(V1)
s1 =
65
>> B = fliplr(A)
B =
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
>> V2 = diag(B)
V2 =
15
14
13
12
11
>> s2 = sum(V2)
s2 =
65
5. 矩阵的求逆
- 对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=I(I为单位矩阵),则A和B互称逆矩阵。
- inv(A):求方阵A的逆矩阵。
--------------------------------------------------------------------------------
三、矩阵求值
3.1 方阵的行列式
- 把一个方阵看做一个行列式,并对其按行列式的规则求值,这个值就是方阵所对应的行列式的值。
- det(A):求方阵A所对应的行列式的值。
3.2 矩阵的秩
- 矩阵线性无关的行数或列数称为矩阵的秩。
- rank(A):求矩阵A的秩。
举例:求3~20阶魔方阵的秩。
3.3 矩阵的迹
- 矩阵的迹等于矩阵的主对角线元素之和,也等于矩阵的特征值之和。
- trace(A):求矩阵A的迹。
3.4 向量和矩阵的范数
向量或矩阵的范数用来度量向量或矩阵在某种意义下的长度。
(1) 向量的3种常用范数
对应地,在MATLAB中,有:
- norm(V, 1):计算向量V的1范数。
- norm(V)或者norm(V, 2):计算向量V的2范数。
- norm(V, inf):计算向量V的∞范数。
(2) 矩阵的3种常用范数
对应地,在MATLAB中,有:
- norm(A, 1):计算矩阵A的1范数。
- norm(A)或者norm(A, 2):计算矩阵A的2范数。
- norm(A, inf):计算矩阵A的∞范数。
--------------------------------------------------------------------------------
四、矩阵的特征值与特征向量
1. 定义
设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。
2. 计算
在MATLAB中,采用函数eig()计算矩阵的特征值和特征向量,调用方式如下:
- E = eig(A):求矩阵A的全部特征值,构成向量E
- [X, D] = eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。
--------------------------------------------------------------------------------
五、稀疏矩阵
1.定义
零元素远远多于非零元素的矩阵。
2. 矩阵的存储方式
完全存储方式和稀疏存储方式
完全存储方式:将矩阵所有元素按列存储在内存单元中。
稀疏存储方式:只存储矩阵非零元素的值及其位置(即行号和列号)。采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
(1) 完全存储方式和稀疏存储方式之间的转化
采用函数sparse()实现稀疏存储,采用函数full()实现完全存储。
(2) 直接建立稀疏存储矩阵
函数sparse()的其他调用格式:
- sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
- sparse(u,v,S):其中u,v,S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)和v(i)分别是S(i)的行下标与列下标。
另一种直接建立稀疏存储矩阵的方式是调用函数spconvert(),格式为B=spconvert(A)
A是一个m×3或者m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
A(i,1)表示第i个非零元素所在的行;A(i,2)表示第i个非零元素所在的列;A(i,3)表示第i个非零元素的实部;A(i,4)表示第i个非零元素的虚部;若矩阵的全部元素都是实数,那则无需第4列。