矩阵分解
是把一个矩阵分解为多个矩阵连乘的形式
其中cholinc()和luinc()函数是针对稀疏矩阵的
1. 对称正定矩阵的Cholesky分解
a=pascal(4) % pascal矩阵是对称正定的
e=eig(a) % 返回由a的特征值构成的向量
b=chol(a)
c=b'*b
a =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
e =
0.0380
0.4538
2.2034
26.3047
b =
1 1 1 1
0 1 2 3
0 0 1 3
0 0 0 1
c =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>>
2. 一般方阵的高斯消去法分解(LU分解)
a=pascal(4) % pascal矩阵是对称正定的
[L1, U1]=lu(a)
b=L1*U1==a
[L2,U2,P]=lu(a)
c=L2*U2==P*a
Y=lu(a)
Y1=L2+U2-eye(size(a))
a =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
L1 =
1.0000 0 0 0
1.0000 0.3333 1.0000 0
1.0000 0.6667 1.0000 1.0000
1.0000 1.0000 0 0
U1 =
1.0000 1.0000 1.0000 1.0000
0 3.0000 9.0000 19.0000
0 0 -1.0000 -3.3333
0 0 0 -0.3333
b =
4×4 logical 数组
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
L2 =
1.0000 0 0 0
1.0000 1.0000 0 0
1.0000 0.3333 1.0000 0
1.0000 0.6667 1.0000 1.0000
U2 =
1.0000 1.0000 1.0000 1.0000
0 3.0000 9.0000 19.0000
0 0 -1.0000 -3.3333
0 0 0 -0.3333
P =
1 0 0 0
0 0 0 1
0 1 0 0
0 0 1 0
c =
4×4 logical 数组
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Y =
1.0000 1.0000 1.0000 1.0000
1.0000 3.0000 9.0000 19.0000
1.0000 0.3333 -1.0000 -3.3333
1.0000 0.6667 1.0000 -0.3333
Y1 =
1.0000 1.0000 1.0000 1.0000
1.0000 3.0000 9.0000 19.0000
1.0000 0.3333 -1.0000 -3.3333
1.0000 0.6667 1.0000 -0.3333
>>
3. 舒尔分解
a=pascal(4) % pascal矩阵是对称正定的
[U,S]=schur(a) % S矩阵对角线上是特征值
eig(a) % a的特征值构成的向量
U*U' % 等于单位阵E
U*S*U'-a % 验证
a =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
U =
0.3087 -0.7873 0.5304 0.0602
-0.7231 0.1632 0.6403 0.2012
0.5946 0.5321 0.3918 0.4581
-0.1684 -0.2654 -0.3939 0.8638
S =
0.0380 0 0 0
0 0.4538 0 0
0 0 2.2034 0
0 0 0 26.3047
ans =
0.0380
0.4538
2.2034
26.3047
ans =
1.0000 -0.0000 0.0000 -0.0000
-0.0000 1.0000 0.0000 -0.0000
0.0000 0.0000 1.0000 0.0000
-0.0000 -0.0000 0.0000 1.0000
ans =
1.0e-14 *
0 0.0222 0.0444 0
0.0444 0 0.0888 0.0888
0.0444 0.0888 0.4441 0
0 0.0888 0.1776 0.3553
>>
4. 矩形矩阵的正交分解
a=pascal(4) % pascal矩阵是对称正定的
[q1, r1] = qr(a)
q1*r1
q1*q1'
b=[1 2 3;4 5 6;7 8 9;3 5 7];
[q2,r2]=qr(b)
rank_b=rank(b) % b的秩和r2的非零行相同
a =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
q1 =
-0.5000 0.6708 0.5000 0.2236
-0.5000 0.2236 -0.5000 -0.6708
-0.5000 -0.2236 -0.5000 0.6708
-0.5000 -0.6708 0.5000 -0.2236
r1 =
-2.0000 -5.0000 -10.0000 -17.5000
0 -2.2361 -6.7082 -14.0872
0 0 1.0000 3.5000
0 0 0 -0.2236
ans =
1.0000 1.0000 1.0000 1.0000
1.0000 2.0000 3.0000 4.0000
1.0000 3.0000 6.0000 10.0000
1.0000 4.0000 10.0000 20.0000
ans =
1.0000 -0.0000 -0.0000 0
-0.0000 1.0000 0 0.0000
-0.0000 0 1.0000 -0.0000
0 0.0000 -0.0000 1.0000
q2 =
-0.1155 0.4642 -0.0789 -0.8746
-0.4619 0.0244 0.8866 -0.0060
-0.8083 -0.4154 -0.4102 -0.0768
-0.3464 0.7819 -0.1988 0.4787
r2 =
-8.6603 -10.7387 -12.8172
0 1.6371 3.2741
0 0 -0.0000
0 0 0
rank_b =
2
>>
特征值, 特征向量
a=pascal(4) % pascal矩阵是对称正定的
b=eig(a)
[X,D]=eig(a) % X的列向量是a的特征向量
a*X(:,1)
b(1)*X(:,1)
a*X
X*D
a =
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
b =
0.0380
0.4538
2.2034
26.3047
X =
0.3087 -0.7873 0.5304 0.0602
-0.7231 0.1632 0.6403 0.2012
0.5946 0.5321 0.3918 0.4581
-0.1684 -0.2654 -0.3939 0.8638
D =
0.0380 0 0 0
0 0.4538 0 0
0 0 2.2034 0
0 0 0 26.3047
ans =
0.0117 -0.3573 1.1686 1.5832
-0.0275 0.0741 1.4109 5.2918
0.0226 0.2415 0.8634 12.0497
-0.0064 -0.1204 -0.8679 22.7207
ans =
0.0117 -0.3573 1.1686 1.5832
-0.0275 0.0741 1.4109 5.2918
0.0226 0.2415 0.8634 12.0497
-0.0064 -0.1204 -0.8679 22.7207
ans =
0.0117
-0.0275
0.0226
-0.0064
ans =
0.0117
-0.0275
0.0226
-0.0064
>>