矩阵分解:把一个矩阵分解成为矩阵连乘的形式。
chol | Cholesky分解 |
cholinc | 稀疏矩阵的不完全Cholesky分解 |
lu | 矩阵LU分解 |
luinc | 稀疏矩阵的不完全LU分解 |
qr | 正交三角分解 |
svd | 奇异值分解 |
gsvd | 一般奇异值分解 |
schur | 舒尔分解 |
在MATLAB中线性方程组的求解主要基于四种基本的矩阵分解。
1、对称正定矩阵的Cholesky分解
用chol()函数实现
1)R=chol(X):其中X是对称正定矩阵,R是上三角矩阵,使得X=R' * R。如果X是非正定矩阵,则结果将返回出错信息。
2)[R,p]=chol(X):返回两个参数,并不会返回错误信息。
当X是正定对称矩阵时,返回的上三角矩阵R满足X=R' * R,且p=0;
当X是非正定矩阵时,返回p是正整数,R是上三角形矩阵,其阶数为p-1,并满足X(1:p-1,1:p-1)=R' * R。
考虑线性方程组Ax=b时,可以做Cholesky分解,使得A=R' * R,R' * R*x=b,得到x=R\(R'\b)
>> clear all
>> a=pascal(5)
a =
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
>> eig(a)%【对称阵A是正定矩阵的充分必要条件是A的特征值全为正】
ans =
0.0108
0.1812
1.0000
5.5175
92.2904
>> R=chol(a)
R =
1 1 1 1 1
0 1 2 3 4
0 0 1 3 6
0 0 0 1 4
0 0 0 0 1
>> R'*R
ans =
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
2、一般方程的高斯消去法分解(LU分解)
将任意一个方阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,A=LU,MATLAB中用lu()实现。
[L,U]=lu(X) (X是一个方阵,L为“心理”下三角矩阵,U为上三角矩阵)
[L,U,P]=lu(X) (X是一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,PX=LU)
Y=lu(X) (X是一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中给出,Y的对角元素为上三角矩阵的对角元素,Y=L+U-I)
考虑线性方程组Ax=b时,可以做LU分解,使得A=LU,L* U*x=b,得到x=U\(L\b)
det(A)=det(L)*det(U) (det为求行列式命令)
inv(A)=inv(U)*inv(L) (inv为求匿命令)
>> clear all
>> a=[2 4 5;8 9 6;1 3 5]
a =
2 4 5
8 9 6
1 3 5
>> [l1 u1]=lu(a)
l1 =
0.2500 0.9333 1.0000
1.0000 0 0
0.1250 1.0000 0
u1 =
8.0000 9.0000 6.0000
0 1.8750 4.2500
0 0 -0.4667
>> [l2 u2 p]=lu(a)
l2 =
1.0000 0 0
0.1250 1.0000 0
0.2500 0.9333 1.0000
u2 =
8.0000 9.0000 6.0000
0 1.8750 4.2500
0 0 -0.4667
p =
0 1 0
0 0 1
1 0 0
>> y1=lu(a)
y1 =
8.0000 9.0000 6.0000
0.1250 1.8750 4.2500
0.2500 0.9333 -0.4667
>> l1*u1==a
ans =
1 1 1
1 1 1
1 1 1
>> p*a==l2*u2
ans =
1 1 1
1 1 1
1 1 1
>> l2+u2-eye(3)==y1
ans =
1 1 1
1 1 1
1 1 1
3、舒尔分解
A=U*S*U',用schur()函数实现
U是一个酉矩阵(n阶复方阵U的n个列向量是U空间的一个标准正交基,则U是酉矩阵。显然酉矩阵是正交矩阵往复数域上的推广)
特征值可以由矩阵S的对角块给出,U给出比特征向量更多的数值特征。
>> a=pascal(5)
a =
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
>> [u ,s]=schur(a)
u =
0.1680 -0.5706 -0.7660 0.2429 0.0175
-0.5517 0.5587 -0.3830 0.4808 0.0749
0.7025 0.2529 0.1642 0.6110 0.2055
-0.4071 -0.5179 0.4377 0.4130 0.4515
0.0900 0.1734 -0.2189 -0.4074 0.8649
s =
0.0108 0 0 0 0
0 0.1812 0 0 0
0 0 1.0000 0 0
0 0 0 5.5175 0
0 0 0 0 92.2904
>> u*s
ans =
0.0018 -0.1034 -0.7660 1.3404 1.6143
-0.0060 0.1013 -0.3830 2.6528 6.9142
0.0076 0.0458 0.1642 3.3711 18.9633
-0.0044 -0.0939 0.4377 2.2789 41.6726
0.0010 0.0314 -0.2189 -2.2476 79.8179
>> ans*u'
ans =
1.0000 1.0000 1.0000 1.0000 1.0000
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 3.0000 6.0000 10.0000 15.0000
1.0000 4.0000 10.0000 20.0000 35.0000
1.0000 5.0000 15.0000 35.0000 70.0000
4、矩形矩阵的正交分解(QR分解)
把一个mxn的矩阵分解为正交矩阵Q和上三角矩阵R的乘积,A=Q*R
QR分解用函数qr()实现
[Q,R]=qr(A) (适用于满矩阵和稀疏矩阵)
[Q,R,E]=qr(A) (R是上三角矩阵,Q是正交矩阵,E为置换矩阵,AE=QR)
R=qr(A) (返回上三角矩阵R,R=chol(A'*A))