目录
一、对称正定矩阵的Cholesky分解
二、一般方阵的高斯消去法分解
三、矩形矩阵的正交分解
四、舒尔分解
矩阵分解是把一个矩阵分解成几个“较简单”的矩阵连乘的形式。在MATLAB中矩阵分解的相关函数有:
在MATLAB中,线性方程组的求解主要基于4种基本的矩阵分解,即对称正定矩阵的Cholesky分解、一般方阵的高斯消去法分解、舒尔分解和矩形矩阵的正交分解。
一、对称正定矩阵的Cholesky分解
Cholesky分解在MATLAB中用函数chol()来实现,其常用的调用方式如下:
- R = chol(X):其中X为对称正定矩阵,R是上三角矩阵,使得X=R'·R。如果X 是非正定的,则结果将返回出错信息。
- [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。
示例1:利用chol进行矩阵分解
A=pascal(5) %产生5阶帕斯卡矩阵
B=eig(A) %矩阵A的特征值
C=chol(A) %利用chol进行矩阵分解
D=C'*C
运行结果:
对于稀疏矩阵,MATLAB提供了函数cholinc()来做不完全Cholesky分解。函数cholinc()的另一个优点是它可用于计算实半正定矩阵。函数cholinc()的调用格式如下:
- R = cholinc(X,DROPTOL):其中 X 和 R 的含义与函数 chol()中的变量相同,DROPTOL为不完全Cholesky分解的丢失容限。当DROPTOL设为0时,退化为完全Cholesky分解。
- R = cholinc(X,OPTS):其中 OPTS 为结构体,它有3个属性,即DROPTOL、MICHOL和RDIAG。DROPTOL为不完全Cholesky分解的丢失容限;MICHOL为1时采用改进算法的不完全Cholesky分解,否则不采用改进算法;RDIAG为1时R的对角元素中的零值替换成为DROPTOL的平方根,RDIAG为0时不做此替换。
- R = cholinc(X,'0'):完全Cholesky分解。
- [R,p] = cholinc(X,'0'):返回两个参数,并且不会返回出错信息。当X是正定矩阵时,返回的上三角矩阵R满足X=R'·R,且p=0;当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1:p-1,1:p-1)=R'· R。
- R = cholinc(X,'inf' ):采用 Cholesky-Infinity 分解。Cholesky-Infinity分解是基于Cholesky分解的,但它可以处理实半正定矩阵。
示例2:稀疏矩阵Cholesky分解
A=[2 0 3 0;0 25 0 30;3 0 91 0;0 32 0 661];
B=cholinc(sparse(A),'inf') %采用 Cholesky-Infinity 分解
C=full(B) %转为稀疏矩阵
D=C'*C
运行结果:
上面代码无错,我matlab缺少cholinc函数,不知道解决方式
二、一般方阵的高斯消去法分解
高斯消去法分解又称LU分解,它可以将任意一个方阵A分解为一个下三角矩阵L和一个上三角矩阵U 的乘积,即A=LU。LU分解在MATLAB中用函数lu()来实现,其调用方式如下:
- [L,U] = lu(X):X为一个方阵,L为“心理”下三角矩阵,U为上三角矩阵,满足关系X=L·U。
- [L,U,P] = lu(X):X为一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,满足关系P·X = L·U。
- Y = lu(X):X为一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中给出,矩阵Y的对角元素为上三角矩阵的对角元素,即Y=L+U-I。置换矩阵P的信息丢失。
利用LU分解来计算行列式的值和矩阵的逆,其命令形式如下:
- det(A)=det(L)*det(U)。
- inv(A)=inv(U)*inv(L)。
示例3:进行LU分解
A=[2 4 5;8 9 6;1 3 5];
[L1,U1]=lu(A) %矩阵的LU分解
[L2,U2,P]=lu(A)
B=lu(A)
C=L1*U1 %验证
D=L2+U2-eye(size(A))
运行结果:
此外,对于稀疏矩阵,MATLAB提供了函数luinc()来做不完全LU分解,其调用格式如下:
- [L U]= luinc(X,DROPTOL):其中 X、L 和 U 的含义与函数 lu()中的变量相同,DROPTOL为不完全LU分解的丢失容限。当DROPTOL设为0时,退化为完全LU分解。
- [L U] = luinc(X,OPTS):其中 OPTS 为结构体,它有4个属性,即DROPTOL、MICHOL、RDIAG 和 THRESH。DROPTOL 为不完全 LU分解的丢失容限;MICHOL为1时采用改进算法的不完全 LU分解,否则不采用改进算法;RDIAG为1时,R的对角元素中的零值替换成DROPTOL的平方根,为0时不做此替换;THRESH 是绕对角线旋转因子,其取值范围是[0,1],当THRESH 为0时强制绕对角线旋转,THRESH 的默认值是1。
- [L,U,P] = luinc(X,'0'):0级不完全LU分解。
- [L,U] = luinc(X,'0'):0级不完全LU分解。
- Y = luinc(X,'0'):0级完全LU分解。
三、矩形矩阵的正交分解
矩形矩阵的正交分解又称QR分解。QR分解把一个m×n的矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=Q·R。在MATLAB中QR分解由函数qr()来实现,下面介绍QR分解的调用方式:
- [Q,R] = qr(A):其中矩阵R为与矩阵A具有相同大小的上三角矩阵,Q为正交矩阵,它们满足A=Q·R。该调用方式适用于满矩阵和稀疏矩阵。
- [Q,R] = qr(A,0):为“经济”方式的QR分解。设矩阵A是一个m×n 的矩阵,若m>n,则只计算矩阵Q的前n列元素,R为n×n的矩阵;若m≤n,则与[Q,R]=qr(A)效果一致。该调用方式适用于满矩阵和稀疏矩阵。
- [Q,R,E] = qr(A):R 是上三角矩阵,Q 为正交矩阵,E 为置换矩阵。它们满足A·E=Q·R,程序选择一个合适的矩阵 E 使得 abs(diag(R))是降序排列的。该调用方式适用于满矩阵。
- [Q,R,E] = qr(A,0):“经济”方式的QR分解,其中E是一个置换矢量。它们满足A(:,E)= Q·R。该调用方式适用于满矩阵。
- R =qr(A):返回上三角矩阵R,这里R= chol(A'·A)。该调用方式适用于稀疏矩阵。
- R = qr(A,0):以“经济”方式返回上三角矩阵R。
- [C,R] = qr(A,B):其中矩阵B必须与矩阵A具有相同的行数,矩阵R是上三角矩阵,C=Q' ·B。
示例4:通过QR分解分析矩阵的秩
A=[2 4 5;8 9 6;1 3 5];
[Q1,R1]=qr(A) %矩阵的QR分解
B=[2 4 5;8 9 6;1 3 5;5 4 10];
C=rank(B) %矩阵的秩
[Q2,R2]=qr(B) %矩阵的QR分解
运行结果:
四、舒尔分解
舒尔分解定义式为
其中A必须是一个方阵,U是一个酉矩阵,S是一个块对角化矩阵,由对角线上的1×1和2×2块组成。特征值可以由矩阵S的对角块给出,而矩阵U给出比特征向量更多的数值特征。此外,对缺陷矩阵也可以进行舒尔分解。MATLAB中用函数schur()来进行舒尔分解,其调用格式如下:
- [U,S] = schur(A):返回酉矩阵U和块对角矩阵S。
- S = schur(A):仅返回块对角矩阵S。
- schur(A,'real'):返回的实特征值放在对角线上,而把复特征值放在对角线上的2×2块中。
- schur(A,' complex'):返回的矩阵S是上三角矩阵,并且如果矩阵A有复特征值,则矩阵S是复矩阵。
另外,函数rsf2csf()可以把实数形式的舒尔矩阵转换成复数形式的
舒尔矩阵。
示例5:舒尔分解
A=pascal(5); %产生5阶帕斯卡矩阵
[U,S]=schur(A) %矩阵的舒尔分解
B=U*S*U-A %验证
运行结果:文章来源:https://www.toymoban.com/news/detail-717553.html
文章来源地址https://www.toymoban.com/news/detail-717553.html
到了这里,关于11、矩阵的分解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!