矩阵分解:把一个矩阵分解成为矩阵连乘的形式。
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 11 2 3 4 51 3 6 10 151 4 10 20 351 5 15 35 70>> eig(a)%【对称阵A是正定矩阵的充分必要条件是A的特征值全为正】ans =0.01080.18121.00005.517592.2904>> R=chol(a)R =1 1 1 1 10 1 2 3 40 0 1 3 60 0 0 1 40 0 0 0 1>> R'*Rans =1 1 1 1 11 2 3 4 51 3 6 10 151 4 10 20 351 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 58 9 61 3 5>> [l1 u1]=lu(a)l1 =0.2500 0.9333 1.00001.0000 0 00.1250 1.0000 0u1 =8.0000 9.0000 6.00000 1.8750 4.25000 0 -0.4667>> [l2 u2 p]=lu(a)l2 =1.0000 0 00.1250 1.0000 00.2500 0.9333 1.0000u2 =8.0000 9.0000 6.00000 1.8750 4.25000 0 -0.4667p =0 1 00 0 11 0 0>> y1=lu(a)y1 =8.0000 9.0000 6.00000.1250 1.8750 4.25000.2500 0.9333 -0.4667>> l1*u1==aans =1 1 11 1 11 1 1>> p*a==l2*u2ans =1 1 11 1 11 1 1>> l2+u2-eye(3)==y1ans =1 1 11 1 11 1 1
3、舒尔分解
A=U*S*U',用schur()函数实现
U是一个酉矩阵(n阶复方阵U的n个列向量是U空间的一个标准正交基,则U是酉矩阵。显然酉矩阵是正交矩阵往复数域上的推广)
特征值可以由矩阵S的对角块给出,U给出比特征向量更多的数值特征。
>> a=pascal(5)a =1 1 1 1 11 2 3 4 51 3 6 10 151 4 10 20 351 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.07490.7025 0.2529 0.1642 0.6110 0.2055-0.4071 -0.5179 0.4377 0.4130 0.45150.0900 0.1734 -0.2189 -0.4074 0.8649s =0.0108 0 0 0 00 0.1812 0 0 00 0 1.0000 0 00 0 0 5.5175 00 0 0 0 92.2904>> u*sans =0.0018 -0.1034 -0.7660 1.3404 1.6143-0.0060 0.1013 -0.3830 2.6528 6.91420.0076 0.0458 0.1642 3.3711 18.9633-0.0044 -0.0939 0.4377 2.2789 41.67260.0010 0.0314 -0.2189 -2.2476 79.8179>> ans*u'ans =1.0000 1.0000 1.0000 1.0000 1.00001.0000 2.0000 3.0000 4.0000 5.00001.0000 3.0000 6.0000 10.0000 15.00001.0000 4.0000 10.0000 20.0000 35.00001.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))