11、矩阵的分解

目录

一、对称正定矩阵的Cholesky分解

二、一般方阵的高斯消去法分解

三、矩形矩阵的正交分解

四、舒尔分解


矩阵分解是把一个矩阵分解成几个“较简单”的矩阵连乘的形式。在MATLAB中矩阵分解的相关函数有:

在MATLAB中,线性方程组的求解主要基于4种基本的矩阵分解,即对称正定矩阵的Cholesky分解、一般方阵的高斯消去法分解、舒尔分解和矩形矩阵的正交分解。

一、对称正定矩阵的Cholesky分解

Cholesky分解在MATLAB中用函数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。

示例1:利用chol进行矩阵分解

A=pascal(5) %产生5阶帕斯卡矩阵

B=eig(A) %矩阵A的特征值

C=chol(A) %利用chol进行矩阵分解

D=C'*C

运行结果:

对于稀疏矩阵,MATLAB提供了函数cholinc()来做不完全Cholesky分解。函数cholinc()的另一个优点是它可用于计算实半正定矩阵。函数cholinc()的调用格式如下:

  1. R = cholinc(X,DROPTOL):其中 X 和 R 的含义与函数 chol()中的变量相同,DROPTOL为不完全Cholesky分解的丢失容限。当DROPTOL设为0时,退化为完全Cholesky分解。
  2. R = cholinc(X,OPTS):其中 OPTS 为结构体,它有3个属性,即DROPTOL、MICHOL和RDIAG。DROPTOL为不完全Cholesky分解的丢失容限;MICHOL为1时采用改进算法的不完全Cholesky分解,否则不采用改进算法;RDIAG为1时R的对角元素中的零值替换成为DROPTOL的平方根,RDIAG为0时不做此替换。
  3. R = cholinc(X,'0'):完全Cholesky分解。
  4. [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。
  5. 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()来实现,其调用方式如下:

  1. [L,U] = lu(X):X为一个方阵,L为“心理”下三角矩阵,U为上三角矩阵,满足关系X=L·U。
  2. [L,U,P] = lu(X):X为一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,满足关系P·X = L·U。
  3. Y = lu(X):X为一个方阵,把上三角矩阵和下三角矩阵合并在矩阵Y中给出,矩阵Y的对角元素为上三角矩阵的对角元素,即Y=L+U-I。置换矩阵P的信息丢失。

利用LU分解来计算行列式的值和矩阵的逆,其命令形式如下:

  1. det(A)=det(L)*det(U)。
  2. 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分解,其调用格式如下:

  1. [L U]= luinc(X,DROPTOL):其中 X、L 和 U 的含义与函数 lu()中的变量相同,DROPTOL为不完全LU分解的丢失容限。当DROPTOL设为0时,退化为完全LU分解。
  2. [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。
  3. [L,U,P] = luinc(X,'0'):0级不完全LU分解。
  4. [L,U] = luinc(X,'0'):0级不完全LU分解。
  5. Y = luinc(X,'0'):0级完全LU分解。

三、矩形矩阵的正交分解

矩形矩阵的正交分解又称QR分解。QR分解把一个m×n的矩阵A分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=Q·R。在MATLAB中QR分解由函数qr()来实现,下面介绍QR分解的调用方式

  1. [Q,R] = qr(A):其中矩阵R为与矩阵A具有相同大小的上三角矩阵,Q为正交矩阵,它们满足A=Q·R。该调用方式适用于满矩阵和稀疏矩阵。
  2. [Q,R] = qr(A,0):为“经济”方式的QR分解。设矩阵A是一个m×n 的矩阵,若m>n,则只计算矩阵Q的前n列元素,R为n×n的矩阵;若m≤n,则与[Q,R]=qr(A)效果一致。该调用方式适用于满矩阵和稀疏矩阵。
  3. [Q,R,E] = qr(A):R 是上三角矩阵,Q 为正交矩阵,E 为置换矩阵。它们满足A·E=Q·R,程序选择一个合适的矩阵 E 使得 abs(diag(R))是降序排列的。该调用方式适用于满矩阵。
  4. [Q,R,E] = qr(A,0):“经济”方式的QR分解,其中E是一个置换矢量。它们满足A(:,E)= Q·R。该调用方式适用于满矩阵。
  5. R =qr(A):返回上三角矩阵R,这里R= chol(A'·A)。该调用方式适用于稀疏矩阵。
  6. R = qr(A,0):以“经济”方式返回上三角矩阵R。
  7. [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()来进行舒尔分解,其调用格式如下:

  1. [U,S] = schur(A):返回酉矩阵U和块对角矩阵S。
  2. S = schur(A):仅返回块对角矩阵S。
  3. schur(A,'real'):返回的实特征值放在对角线上,而把复特征值放在对角线上的2×2块中。
  4. schur(A,' complex'):返回的矩阵S是上三角矩阵,并且如果矩阵A有复特征值,则矩阵S是复矩阵。

另外,函数rsf2csf()可以把实数形式的舒尔矩阵转换成复数形式的

舒尔矩阵。

示例5:舒尔分解

A=pascal(5); %产生5阶帕斯卡矩阵

[U,S]=schur(A) %矩阵的舒尔分解

B=U*S*U-A %验证

运行结果:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值