1.通用的特殊矩阵
zeros函数:产生全0矩阵。
ones函数:产生全1矩阵。
eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
rand函数:产生(0,1)区间均匀分布的随机矩阵。
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
zeros函数的调用格式:
zeros(m):产生m×m零矩阵。
zeros(3)
ans =
0 0 0
0 0 0
0 0 0
zeros(m,n):产生m×n零矩阵。
zeros(3,2)
ans =
0 0
0 0
0 0
zeros(size(A)):产生与矩阵A同样大小的零矩阵。
>> A = zeros(2,3);
>> zeros(size(reshape(A,3,2)))
ans =
0 0
0 0
0 0
2.用于专门学科的特殊矩阵
2.1魔方矩阵(Magic Square)
n阶魔方阵由1,2,3,…,n平方共n平方个整数组成,且每行、每列,主、副对角线上各n个元素之和都相等。
n阶魔方阵每行每列元素的和为(1+2+3+…+ n平方)/n=(n+n立方)/2
n>2时有很多不同的n阶魔方阵,MATLAB函数magic(n)产生一个特定的魔方阵。
>> M=magic(3)
M =
8 1 6
3 5 7
4 9 2
2.2范德蒙矩阵
范得蒙矩阵的最后一列全为1,即向量v各元素的零次方,倒数第二列为指定的向量v,
即向量v各元素的一次方, 其他各列是其后列与倒数第二列的点乘积
>> A = vander(1:5)
A =
1 1 1 1 1
16 8 4 2 1
81 27 9 3 1
256 64 16 4 1
625 125 25 5 1
2.3希尔伯特矩阵
>> format rat
>> H = hilb(4)
H =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
2.4伴随矩阵
MATLAB生成伴随矩阵的函数是compan§,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
例如,生成多项式x3-2x2-5x+6的伴随矩阵。
>> p = [1,-2,-5,6];
>> A = compan(p)
A =
2 5 -6
1 0 0
0 1 0
2.5 帕斯卡矩阵
把二项式系数依次填写在矩阵的左侧对角线上,然后提取左侧的n行n列元素即为n阶帕斯卡(Pascal)矩阵。
帕斯卡矩阵的第一行元素和第一列元素都为1,其余位置的元素是该元素的左边元素与上面元素相加,即P(i,j)=P(i,j-1)+P(i-1,j),且P(i,1)=1,P(1,j)=1。
函数pascal(n)生成一个n阶帕斯卡矩阵。
>> format rat
>> P = pascal(5)
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
3.矩阵变换
3.1对角阵
对角阵:只有对角线上有非零元素的矩阵
数量矩阵:对角线上的元素相等的对角矩阵
单位矩阵:对角线上的元素都为1的对角矩阵
(1) 提取矩阵的对角线元素
diag(A):提取矩阵A主对角线元素,产生一个列向量
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量
(2) 构造对角阵
diag(V):以向量 V为主对角线元素,产生对角矩阵
diag(V,k):以向量 V为第k条对角线元素,产生对角矩阵
3.2三角阵
上三角阵:矩阵的对角线以下的元素全为零的矩阵。
下三角阵:对角线以上的元素全为零的矩阵。
(1)上三角矩阵
triu(A):提取矩阵A的主对角线及以上的元素。
triu(A,k):提取矩阵A的第k条对角线及以上的元素。
>> triu(ones(4),-1)
ans =
1 1 1 1
1 1 1 1
0 1 1 1
0 0 1 1
(2) 下三角矩阵
在MATLAB中,提取矩阵A的下三角矩阵的函数是tril,其用法与triu函
数完全相同。
tril(A):提取矩阵A的主对角线及以上的元素。
tril(A,k):提取矩阵A的第k条对角线及以上的元素。
3.3矩阵的转置
矩阵的转置:
把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,…,依此类推。
如果矩阵的元素是实数,那么转置和共轭转置的结果是一样的。
转置运算符是小数点后面接单引号(.’)。
共轭转置(共轭复数,两个实部相等,虚部互为相反数的复数互为共轭复数(conjugate complex number)),其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭。
>> A = [1,3;3+4i,1-2i]
A =
1.0000 + 0.0000i 3.0000 + 0.0000i
3.0000 + 4.0000i 1.0000 - 2.0000i
>> A.'
ans =
1.0000 + 0.0000i 3.0000 + 4.0000i
3.0000 + 0.0000i 1.0000 - 2.0000i
>> A'
ans =
1.0000 + 0.0000i 3.0000 - 4.0000i
3.0000 + 0.0000i 1.0000 + 2.0000i
3.4矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90º的k倍,当k为1时可省略
>> A = [1,3,2;-3,2,1;4,1,2]
A =
1 3 2
-3 2 1
4 1 2
>> rot90(A)
ans =
2 1 2
3 2 1
1 -3 4
>> rot90(A,2)
ans =
2 1 4
1 2 -3
2 3 1
3.5矩阵的翻转
fliplr(A):对矩阵A实施左右翻转
flipud(A):对矩阵A实施上下翻转。
3.6矩阵的求逆
inv(A):求方阵A的逆矩阵。
4.矩阵求值
4.1方阵的行列式
det(A):求方阵A所对应的行列式的值。
4.2矩阵的秩(不懂)
矩阵线性无关的行数或列数称为矩阵的秩
rank(A):求矩阵A的秩
4.3矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
trace(A):求矩阵A的迹。
4.4向量和矩阵的范数
用来度量矩阵或向量在某种意义下的长度
(1)向量的3种常用范数
向量1—范数:向量元素的绝对值之和。
向量2—范数:向量元素绝对值的平方和的平方根。
向量∞—范数:所有向量元素绝对值中的最大值
在MATLAB中,求向量范数的函数为:
norm(V)或norm(V,2):计算向量V的2—范数。
norm(V,1):计算向量V的1—范数。
norm(V,inf):计算向量V的∞—范数。
(2)矩阵的范数
矩阵A的1—范数:所有矩阵列元素绝对值之和的最大值。
矩阵A的2—范数:A’A矩阵的最大特征值的平方根,其中λ1为A’A的最大特征值。
矩阵A的∞—范数:所有矩阵行元素绝对值之和的最大值。
在MATLAB中,求矩阵范数的函数为:
norm(V)或norm(V,2):计算向量V的2—范数。
norm(V,1):计算向量V的1—范数。
norm(V,inf):计算向量V的∞—范数。
4.5矩阵的条件数
矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积
条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差
cond(A,1):计算A的1—范数下的条件数。
cond(A)或cond(A,2):计算A的2—范数数下的条件数。
cond(A,inf):计算A的∞—范数下的条件数。
5.矩阵的特征值与特征向量
5.1矩阵特征值
设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。
在MATLAB中,计算矩阵的特征值和特征向量的函数是eig,常用的调用格式
有两种:
E=eig(A):求矩阵A的全部特征值,构成向量E。
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。
5.2特征值的几何意义
6.稀疏矩阵
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号。
6.1稀疏存储方式的产生
(1)完全存储方式与稀疏存储方式之间的转化
A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
>> A = sparse(eye(5))
A =
(1,1) 1
(2,2) 1
(3,3) 1
(4,4) 1
(5,5) 1
>> B = full(A)
B =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
(2)直接建立稀疏存储矩阵
sparse函数的其他调用格式:
sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标
>> A = sparse([1,2,2],[2,1,4],[4,5,-7])
A =
(2,1) 5
(1,2) 4
(2,4) -7
>> B = full(A)
B =
0 4 0 0
5 0 0 -7
使用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列。
(3)带状稀疏矩阵的稀疏存储
所有非零元素集中在对角线上的矩阵
[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B,这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,
(其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。)
>> A = [11,0,0,12,0,0;0,21,0,0,22,0;0,0,31,0,0,32;41,0,0,42,0,0;0,51,0,0,52,0]
A =
11 0 0 12 0 0
0 21 0 0 22 0
0 0 31 0 0 32
41 0 0 42 0 0
0 51 0 0 52 0
>> [B,d] = spdiags(A)
B =
0 11 12
0 21 22
0 31 32
41 42 0
51 52 0
d =
-3
0
3
利用带状稀疏矩阵非零对角线元素组成的矩阵B,以及对角线位置组成的向量d,命令执行后产生一个稀疏存储矩阵A。
>> A = spdiags(B,d,5,6)
A =
(1,1) 11
(4,1) 41
(2,2) 21
(5,2) 51
(3,3) 31
(1,4) 12
(4,4) 42
(2,5) 22
(5,5) 52
(3,6) 32
(4)单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏存储单位矩阵。
>> speye(3)
ans =
(1,1) 1
(2,2) 1
(3,3) 1
6.2稀疏矩阵应用举例