2.1特殊矩阵
通用特殊矩阵:
- zeros函数:零矩阵
A=zeros(2,3)
A =
0 0 0
0 0 0
zeros(size(reshape(A,3,2)))
ans =
0 0
0 0
0 0
- ones函数:全一矩阵
- eye函数:单位矩阵
- rand函数:产生(0,1)之间均匀分布的随机矩阵
- randn函数:产生均值为0,方差为1的标准正态分布矩阵
eg1:首先产生5阶两位随机整数A,再产生均值为0.6、方差为0.1的5阶正态分布随机矩阵B,最后验证(A+B)E=EA+BE
- rand:产生(0,1)开区间均匀分布的随机数x
- fix(a+(b-a)*x):产生[a,b]区间均匀分布的随机整数
- u+6x:得到均值为u,方差为62的随机数
A=fix(10+(99-10+1)*rand(5));
B=0.6+sqrt(0.1)randn(5);
C=eye(5);
(A+B)C==CA+BC
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
用于专门学科的特殊矩阵:
(1)魔方矩阵:魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列、对角线上的和都相等的矩阵。魔方矩阵中的每个元素不能相同。你能构造任何大小(除了2x2)的魔方矩阵。
eg:产生8j魔方阵,求每行每列元素和
M=magic(8);
sum(M(1,:))
ans =
260
sum(M(:,end))
ans =
260
(2)范德蒙矩阵:
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
(3)希尔伯特矩阵:H(i,j)=1/(i+j-1)
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
(4)伴随矩阵
eg:生成多项式x3-2x2-5x+6的伴随矩阵
p=[1,-2,-5,6];
A=compan§
A =
2 5 -6
1 0 0
0 1 0
(5)帕斯卡矩阵
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
inv( P) #逆矩阵也为整数
ans =
5 -10 10 -5 1
-10 30 -35 19 -4
10 -35 46 -27 6
-5 19 -27 17 -4
1 -4 6 -4 1
2.2矩阵变换
对角阵:只有对角线有非0元素
数量矩阵:对角线上元素相等的对角矩阵
eg:建立A-5,然后A的第一行元素乘1,第二行乘2,……,第五行乘5.
A=fix(1+(9-1+1)*rand(5))
A = #矩阵按列
9 1 9 8 6
1 4 2 6 4
7 3 3 5 5
8 8 2 2 4
8 4 2 8 1
D=diag(1:5);
D*A
ans =
9 1 9 8 6
2 8 4 12 8
21 9 9 15 15
32 32 8 8 16
40 20 10 40 5
三角阵:
(1)上三角矩阵
- triu(A):提取矩阵A的主对角线及以上的元素。
- triu(A,k):提取矩阵A的第k条对角线及以上的元素。
(2)下三角矩阵类似
矩阵的转置:
- 转置运算符(.’)
- 共轭转置(’),他在转置基础上求每个数的复共轭
A=[1,3;3+4i,1-2i]
A =
1 + 0i 3 + 0i
3 + 4i 1 - 2i
A.’
ans =
1 + 0i 3 + 4i
3 + 0i 1 - 2i
A’
ans =
1 + 0i 3 - 4i
3 + 0i 1 + 2i
矩阵的旋转:
rot90(A,k):A逆时针旋转90°的k倍,当k为1时可省略
A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
rot90(A)
ans =
3 6 9
2 5 8
1 4 7
rot90(A,2) #180°
ans =
9 8 7
6 5 4
3 2 1
矩阵的翻转:
fliplr(A):将A左右翻转
flipud(A):A上下翻转
eg:验证魔方阵的主对角线、副对角线元素之和相等
A=magic(5);
D1=sum(diag(A))
D1 =
65
B=flipud(A); #上下翻转后主对角线就变成了副对角线
D2=sum(diag(B))
D2 =
65
矩阵的求逆:
A=[1,2,3;1,4,9;1,8,27];
b=[5;-2;6];
x=inv(A)*b
x =
23.0000
-14.5000
3.6667
x=A\b #相当于左乘A逆
x =
23.0000
-14.5000
3.6667
2.3矩阵求值
**方阵的行列式:**det(A)
eg:验证det(A-1)=1/det(A)
A=fix(1+(9+1-1)*rand(5))
A =
8 1 2 2 6
9 3 9 4 1
2 5 9 9 8
9 9 5 8 9
6 9 8 9 7
det(inv(A))
ans =
1/996
1/det(A)
ans =
1/996
**矩阵的秩:**rank(A)
eg:求3-20阶魔方阵的秩
for n=3:20
r(n)=rank(magic(n));
endbar® #画出柱图
grid on#增加网格线
axis([1,21,0,20])#设置坐标系
**矩阵的迹:**对角线元素之和,也是矩阵特征值之和 trace(A)
A =
1 3 2
-3 2 1
4 1 2
trace(A)
ans =
5
sum(diag(A))
ans =
5
向量的范数:
- norm(V)或norm(V,2):计算向量V的2范数
- norm(V,1):计算向量V的1-范数
- norm(V,inf):计算向量V的∞-范数
矩阵的范数:
- 矩阵的1范数(列元素绝对值之和的最大值)
- 矩阵的2范数(A‘A矩阵最大特征值的平方根)#A‘是共轭转置
- 矩阵的∞范数(所有矩阵含元素绝对值之和的最大值)
注:方法与求向量范数的函数完全相同
x=[2 0 1;-1 1 0;-3 3 0]
x =
2 0 1
-1 1 0
-3 3 0
n=norm(x)
n =
5909/1251
n=norm(x,1)
n =
6
矩阵的条件数:
- 矩阵A的条件数等于A的范数与inv(A)范数的乘积
- 条件数越接近1,矩阵性能越好,反之则差
格式:
- cond(A,1):计算A 的1范数下的条件数
- cond(A)或cond(A,2):计算A 的2范数下的条件数
- cond(A,inf):计算A的∞范数下的条件数
2.4矩阵的特征值和特征向量
格式:
- E=eig(A):求矩阵全部特征值,构成向量E
- [X,D]=eig(A):求矩阵全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量
[X,D]=eig(A)
X =
0.0722 0.9751 0.0886
0.5234 -0.0750 -0.6356
0.8490 -0.2089 0.7669
D =
8.2493 0 0
0 0.9231 0
0 0 -6.1723
A*X(:,1) #验证
ans =
0.5956
4.3174
7.0040
D(1)*X(:,1)
ans =
0.5956
4.3174
7.0040
R=[-1,2,0;2,-4,1;1,1,-6];
S=[1,2;2,3];
A=[R,zeros(3,2);zeros(2,3),S];
[X1,D1]=eig®
X1 =
0.8553 0.4517 0.1899
0.4703 -0.8395 -0.5111
0.2173 -0.3021 0.8383
D1 =
0.0996 0 0
0 -4.7165 0
0 0 -6.3832
[X2,D2]=eig(S)
X2 =
-0.8507 0.5257
0.5257 0.8507
D2 =
-0.2361 0
0 4.2361
[X3,D3]=eig(A)
X3 =
0.8553 0.4517 0.1899 0 0
0.4703 -0.8395 -0.5111 0 0
0.2173 -0.3021 0.8383 0 0
0 0 0 -0.8507 -0.5257
0 0 0 0.5257 -0.8507
D3 =
0.0996 0 0 0 0
0 -4.7165 0 0 0
0 0 -6.3832 0 0
0 0 0 -0.2361 0
0 0 0 0 4.2361
**特征值的几何意义
:**
2.5稀疏矩阵
矩阵的存储方式:
- 完全存储:
- 稀疏存储:只存储矩阵的非零元素的值及其位置,即行号和列号。(也是按列存储)
稀疏存储方式的产生:
(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
whos
Name Size Bytes Class Attributes
A 5x5 128 double sparse
B 5x5 200 double
(2)直接建立稀疏存储矩阵
sparse(m,n):生成一个m*n的所有元素都是零的稀疏矩阵
sparse(u,v,S):其中u,v,S,是三个等长的向量。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=[2,2,1;2,1,-1;2,4,3]
A =
2 2 1
2 1 -1
2 4 3
B=spconvert(A)
B =
(2,1) -1
(2,2) 1
(2,4) 3
(3)带状稀疏矩阵的稀疏存储:
类型:无规则结构的稀疏矩阵和有规则结构的稀疏矩阵
带状稀疏矩阵是指非零元素集中在对角线上的元素
- [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d
- A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m,n为带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置
A=[1,0,0,2,0;0,3,0,0,4;0,0,5,0,0;0,0,0,6,0;0,0,0,0,7]
A =
1 0 0 2 0
0 3 0 0 4
0 0 5 0 0
0 0 0 6 0
0 0 0 0 7
[B,d]=spdiags(A)
B =
1 0
3 0
5 0
6 2
7 4
d =
0
3
A=spdiags(B,d,5,5)
A =
(1,1) 1
(2,2) 3
(3,3) 5
(1,4) 2
(4,4) 6
(2,5) 4
(5,5) 7
(4)单位矩阵的稀疏存储:
speye(m,n)返回一个m* n的稀疏存储的单位矩阵
speye(3)
ans =
(1,1) 1
(2,2) 1
(3,3) 1
稀疏矩阵的应用:
k1=[1;1;2;1;0];#注意补零位置
k2=[2;4;6;6;1];#全是列向量
k3=[0;3;1;4;2];
B=[k1,k2,k3];
d=[-1;0;1];
f=[0;3;2;1;5];
A=spdiags(B,d,5,5);
x=A\f #A逆 乘f
x =
-0.1667
0.1111
2.7222
-3.6111
8.6111