2.7、matlab矩阵分解汇总:LU矩阵分解、Cholesky分解、QR分解和SVD分解

1、矩阵分解简介

矩阵分解是指将一个矩阵分解成子矩阵或其他形式的矩阵表示的过程。常见的矩阵分解方法包括LU分解、QR分解、奇异值分解(SVD)、特征值分解等。

LU分解:将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。

QR分解:将一个矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积,即A=QR。

奇异值分解(SVD):将一个矩阵分解为三个矩阵的乘积,即A=UΣV^T,其中U和V是正交矩阵,Σ是一个对角矩阵。

特征值分解:将一个方阵分解为一个特征向量矩阵和一个特征值对角矩阵的乘积,即A=VΛV^(-1)。

这些矩阵分解方法在数值计算、机器学习等领域有着广泛的应用,能够简化复杂矩阵的运算和分析

2、LU矩阵分解

LU矩阵分解简介

LU矩阵分解是将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积的过程。它的主要思想是将原始矩阵通过一系列行变换和列变换转化为上、下三角矩阵的乘积形式。

具体地,对于一个n×n的矩阵A,LU分解的步骤如下:

  1. 将矩阵A表示为A=LU的形式,其中L为下三角矩阵,U为上三角矩阵。
  2. 对矩阵A进行初等行变换,将其化为上、下三角形式,即A~ = LU。
  3. 对L和U进行分解,得到L为单位下三角矩阵,U为具有非零对角线元素的上三角矩阵。
  4. 根据L和U的定义,可以通过解两个方程组来求解未知元素,得到矩阵L和U的具体数值。

LU矩阵分解的优点是可以简化矩阵运算,特别是在求解线性方程组、矩阵求逆等计算中有着重要的应用。通过LU分解,可以使问题的求解更加高效和精确,并且可以减少计算量。LU矩阵分解是线性代数中的一种重要技术,在数值计算、科学计算等领域有着广泛的应用。

语法

语法1:[L,U] = lu(A) 将满矩阵或稀疏矩阵 A 分解为一个上三角矩阵 U 和一个经过置换的下三角矩阵 L,使得 A = L*U。
语法2:[L,U,P] = lu(A) 还返回一个置换矩阵 P,并满足 A = P'*L*U。
语法3:[L,U,P] = lu(A,outputForm) 以 outputForm 指定的格式返回 P。

1)矩阵的 LU 分解

代码及运算

A = [8 -7 0
     -4  0 6
      5 -1 9];
[L,U] = lu(A)
L*U

L =

    1.0000         0         0
   -0.5000    1.0000         0
    0.6250   -0.9643    1.0000


U =

    8.0000   -7.0000         0
         0   -3.5000    6.0000
         0         0   14.7857


ans =

     8    -7     0
    -4     0     6
     5    -1     9

代码及运算

[L,U,P] = lu(A)
P'*L*U

L =

    1.0000         0         0
   -0.5000    1.0000         0
    0.6250   -0.9643    1.0000


U =

    8.0000   -7.0000         0
         0   -3.5000    6.0000
         0         0   14.7857


P =

     1     0     0
     0     1     0
     0     0     1


ans =

     8    -7     0
    -4     0     6
     5    -1     9

 2)用 LU 分解对线性系统求解

 A = magic(5);
b = 65*ones(5,1);
x = A\b
[L,U,P] = lu(A)
y = L\(P*b);
x = U\y
dA = decomposition(A,'lu');
x = dA\b

x =

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000


L =

    1.0000         0         0         0         0
    0.7391    1.0000         0         0         0
    0.4783    0.7687    1.0000         0         0
    0.1739    0.2527    0.5164    1.0000         0
    0.4348    0.4839    0.7231    0.9231    1.0000


U =

   23.0000    5.0000    7.0000   14.0000   16.0000
         0   20.3043   -4.1739   -2.3478    3.1739
         0         0   24.8608   -2.8908   -1.0921
         0         0         0   19.6512   18.9793
         0         0         0         0  -22.2222


P =

     0     1     0     0     0
     1     0     0     0     0
     0     0     0     0     1
     0     0     1     0     0
     0     0     0     1     0


x =

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000


x =

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

 3、Cholesky 分解:chol  Cholesky 分解

Cholesky 分解简介

Cholesky分解是一种特殊的矩阵分解方法,用于分解对称正定矩阵为一个下三角矩阵的转置与该下三角矩阵的乘积。Cholesky分解适用于对称正定矩阵,因为对称正定矩阵的特征值都是正数,可以保证Cholesky分解的存在唯一性。

具体地,对于一个n×n的对称正定矩阵A,Cholesky分解的步骤如下:

  1. 将矩阵A分解为A=LL^T的形式,其中L为下三角矩阵。
  2. 通过对矩阵A进行分解,得到下三角矩阵L的具体数值。
  3. 利用Cholesky分解后的下三角矩阵L,可以有效地求解线性方程组、计算矩阵的逆等操作。

Cholesky分解相比LU分解有更高的数值稳定性和更高的计算效率,尤其适用于对称正定矩阵的操作。在实际应用中,Cholesky分解常用于求解线性最小二乘问题、模拟实验中的协方差矩阵求逆等问题。

     总的来说,Cholesky分解是一种重要且高效的矩阵分解方法,适用于对称正定矩阵的分解和求解问题。

语法

语法1:R = chol(A) 将对称正定矩阵 A 分解成满足 A = R'*R 的上三角 R。
语法2:R = chol(A,triangle) 指定在计算分解时使用 A 的哪个三角因子。
语法3:[R,flag] = chol(___) 还返回输出 flag,指示 A 是否为对称正定矩阵。


1)矩阵的 Cholesky 分解

代码及运算

A = gallery('lehmer',6);
R = chol(A)
norm(R'*R - A)
L = chol(A,'lower')
norm(L*L' - A)

R =

    1.0000    0.5000    0.3333    0.2500    0.2000    0.1667
         0    0.8660    0.5774    0.4330    0.3464    0.2887
         0         0    0.7454    0.5590    0.4472    0.3727
         0         0         0    0.6614    0.5292    0.4410
         0         0         0         0    0.6000    0.5000
         0         0         0         0         0    0.5528


ans =

   2.3587e-16


L =

    1.0000         0         0         0         0         0
    0.5000    0.8660         0         0         0         0
    0.3333    0.5774    0.7454         0         0         0
    0.2500    0.4330    0.5590    0.6614         0         0
    0.2000    0.3464    0.4472    0.5292    0.6000         0
    0.1667    0.2887    0.3727    0.4410    0.5000    0.5528


ans =

   2.3682e-16

 2)用对称正定矩阵求解线性系统

代码及运算

A = [1 0 1; 0 2 0; 1 0 3]
R = chol(A)%计算矩阵的 Cholesky 因子
b = sum(A,2);
x = R\(R'\b)

A =

     1     0     1
     0     2     0
     1     0     3


R =

    1.0000         0    1.0000
         0    1.4142         0
         0         0    1.4142


x =

    1.0000
    1.0000
    1.0000

4、QR分解: qr QR 分解

QR分解简介

QR分解是将一个矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积的过程。正交矩阵是一个方阵,其列向量是单位正交的,即Q^TQ=I,其中I为单位矩阵。上三角矩阵则具有主对角线以下的元素均为零的特点。

具体地,对于一个m×n的矩阵A,QR分解的步骤如下:

  1. 将矩阵A表示为A=QR的形式,其中Q为正交矩阵,R为上三角矩阵。
  2. 利用Gram-Schmidt正交化方法或Householder变换等技术,对矩阵A进行QR分解。
  3. 通过QR分解后的正交矩阵Q和上三角矩阵R,可以简化矩阵的运算和求解问题。

QR分解在数值计算中有着重要的应用,特别是在求解最小二乘问题、特征值计算、奇异值分解等方面。它有较好的数值稳定性,适用于各种类型的矩阵。QR分解在科学计算、信号处理、图像处理等领域都有着广泛的应用,可以提高计算的精度和效率。

    总的来说,QR分解是一种常用且有效的矩阵分解方法,能够将复杂的矩阵分解为简单的正交矩阵和上三角矩阵的乘积形式,为数值计算和相关领域提供了重要的工具和技术支持。

语法

语法1:R = qr(A) 返回 QR 分解 A = Q*R 的上三角 R 因子。
语法2:[Q,R] = qr(A) 对 m×n 矩阵 A 执行 QR 分解,满足 A = Q*R。
语法3:[Q,R,P] = qr(A) 还返回一个置换矩阵 P,满足 A*P = Q*R。


1)Q-Less QR 分解

 代码及运算

A = magic(5);%5*5幻方矩阵
R = qr(A)

R =

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
    0.4648   19.8943   12.3234    1.9439    4.0856
    0.0808   -0.0496  -24.3985  -11.6316   -3.7415
    0.2021   -0.0460    0.3950  -20.0982   -9.9739
    0.2223   -0.1755    0.4959   -0.8587  -16.0005

 2)矩阵的完整 QR 分解

代码及运算

A = magic(5);
[Q,R] = qr(A)
norm(A-Q*R)

Q =

   -0.5234    0.5058    0.6735   -0.1215   -0.0441
   -0.7081   -0.6966   -0.0177    0.0815   -0.0800
   -0.1231    0.1367   -0.3558   -0.6307   -0.6646
   -0.3079    0.1911   -0.4122   -0.4247    0.7200
   -0.3387    0.4514   -0.4996    0.6328   -0.1774


R =

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005


ans =

   9.6765e-15

5、SVD分解

 SVD分解简介

奇异值分解(SVD,Singular Value Decomposition)是一种重要的矩阵分解技术,在数学和计算机科学领域中具有广泛的应用。SVD将一个矩阵分解为三个部分的乘积:一个正交矩阵、一个对角矩阵和另一个正交矩阵的转置。

对于一个m×n的实数矩阵A,其SVD分解为:A = UΣV^T,其中U是一个m×m的正交矩阵,Σ是一个m×n的对角矩阵(对角线上的元素称为奇异值),V^T是一个n×n的正交矩阵的转置。SVD的奇异值通常按降序排列,因此Σ的对角线上的元素可能是非零的奇异值。

SVD分解具有以下特点和应用:

  1. 降维和特征提取:通过保留最重要的奇异值,可以将原始矩阵进行降维,实现特征提取和数据压缩,从而减少存储空间和计算开销。
  2. 矩阵逆的计算:对于奇异值大于某个阈值的情况,可以利用SVD分解求得矩阵的逆,用于解决求解逆逼格矩阵的问题。
  3. 矩阵近似:由于可以通过保留部分奇异值来重建原矩阵,因此SVD分解也广泛应用于矩阵的压缩表示、矩阵近似等方面。

总的来说,SVD分解是一种十分重要的矩阵分解技术,具有广泛的应用领域,包括数据分析、图像处理、信号处理、推荐系统等,同时也为许多机器学习算法和数据挖掘方法提供了基础和支持。SVD的稳定性和数学性质使其成为处理大规模数据和复杂问题的有力工具。

1)语法

语法:S = svd(A) 以降序顺序返回矩阵 A 的奇异值。
语法:[U,S,V] = svd(A) 执行矩阵 A 的奇异值分解,因此 A = U*S*V'。
[___] = svd(___,outputForm) 还可以指定奇异值的输出格式。您可以将此选项与上述任一输入或输出参量组合一起使用。指定 "vector" 以列向量形式返回奇异值,或指定 "matrix" 以对角矩阵形式返回奇异值。

2)参数

A :输入矩阵                                                    outputForm :奇异值的输出格式   

U :左奇异向量                       S :奇异值                         V :右奇异向量

3)矩阵的奇异值

代码及运算

A = [1 0 1; -1 -2 0; 0 1 -1]%满秩矩阵
s = svd(A)

A =

     1     0     1
    -1    -2     0
     0     1    -1


s =

    2.4605
    1.6996
    0.2391

4) 奇异值分解

代码及运算

 A = [1 2; 3 4; 5 6; 7 8]
[U,S,V] = svd(A)
U*S*V'

A =

     1     2
     3     4
     5     6
     7     8


U =

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407


S =

   14.2691         0
         0    0.6268
         0         0
         0         0


V =

   -0.6414    0.7672
   -0.7672   -0.6414


ans =

    1.0000    2.0000
    3.0000    4.0000
    5.0000    6.0000
    7.0000    8.0000

6、总结

矩阵分解是线性代数中一种重要的技术,通过将一个复杂的矩阵分解为简单的特定形式,可以提高计算效率、降低求解复杂性,同时可以更好地理解和分析矩阵的性质和结构。在实际应用中,常见的矩阵分解方法包括LU分解、Cholesky分解、QR分解、SVD分解等。

  1. LU分解:

    • 将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。
    • 适用于非奇异矩阵的分解和求解线性方程组。
  2. Cholesky分解:

    • 将一个对称正定矩阵分解为一个下三角矩阵的转置与该下三角矩阵的乘积。
    • 适用于对称正定矩阵的分解和求解。
  3. QR分解:

    • 将一个矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。
    • 适用于求解最小二乘问题、特征值计算等。
  4. SVD分解:

    • 将一个矩阵分解为三个部分的乘积,包括一个正交矩阵、一个对角矩阵和另一个正交矩阵的转置。
    • 适用于降维、特征提取、矩阵逆的计算等。

这些矩阵分解方法在数值计算、科学计算、机器学习等领域都有着广泛的应用,并且对于提高计算效率、数值稳定性以及算法的可解释性都至关重要。选择合适的矩阵分解方法能够帮助我们更好地处理和分析复杂的线性代数问题。

  • 42
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逼子歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值