• 矩阵分析与应用+张贤达


    第四章 (一)

    1. 矩阵分解的分类

    矩阵分解
    所谓矩阵的分解(decomposition或factorization),就是通过线性变换,将某个给定或已知的矩阵分解为二个或三个矩阵标准型的乘积(个别情况下分解为两个矩阵标准型之和)。

    虽然矩阵的分解有十几种之多,看似零乱,但是它们之间实则有着明显的类属。在这里,我们主要根据矩阵分解后得到的矩阵的标准型以及是对单个矩阵还是两个矩阵组成的矩阵束或矩阵对进行分解来划分矩阵的分解类别。

    1.1 单个矩阵的分解

    根据矩阵 A A A分解后的矩阵的标准型,可分为以下四大类。
    (1)对角化分解
    这类分解是通过正交变换,将矩阵 A A A对角化的,包括以下三种形式。

    • 奇异值分解(SVD): A = U Σ V H A=U\Sigma V^H A=UΣVH U H A V = Σ U^HAV=\Sigma UHAV=Σ,其中, U U U V V V二者为酉矩阵, Σ \Sigma Σ为对角矩阵(针对一般矩阵的对角化分解)。
    • 特征值分解(EVD): A H A = V Σ V H A^HA=V\Sigma V^H AHA=VΣVH A A H = U Σ U H AA^H=U\Sigma U^H AAH=UΣUH(针对对称矩阵的对角化分解)。
    • CS分解:可看作是正交矩阵分块的同时对角化分解。

    (2)三角化分解
    这类分解将矩阵 A A A分解为正交矩阵三角矩阵之积,或分解为一个上三角矩阵一个下三角矩阵之积,主要有以下一种形式:

    • Cholesky分解: A = G G T A=GG^T A=GGT,其中, G G G为下三角矩阵(针对对称正定矩阵的三角化分解)。
    • QR分解: A = Q R A=QR A=QR Q T A = R Q^TA=R QTA=R,其中, Q Q Q是正交矩阵,而 R R R是上三角矩阵(针对一般矩阵的三角化分解)。
    • LU分解: A = L U A=LU A=LU,其中, L L L是单位下三角矩阵,而 U U U是上三角矩阵(针对非奇异矩阵的三角化分解)。

    (3)三角-对角化分解
    将矩阵分解为三个矩阵标准型(两个三角矩阵和一个对角矩阵)之积,或分解为两个矩阵标准型(对角矩阵和上三角矩阵)之和。这类分解有以下形式。

    • L D M T LDM^T LDMT分解: A = L D M T A=LDM^T A=LDMT,其中, L L L M M M为单位下三角矩阵,而 D D D为对角矩阵(针对非对称矩阵的三角-对角化分解)。
    • L D L T LDL^T LDLT分解: A = L D L T A=LDL^T A=LDLT(针对对称矩阵的三角-对角化分解)。
    • Schur分解: Q H A Q = D + N Q^HAQ=D+N QHAQ=D+N,其中, Q Q Q是酉矩阵, D D D是对角矩阵,而 N N N是严格上三角矩阵(针对复矩阵的三角-对角化分解)。

    (4)三对角化分解
    Householder三对角化分解: H T A H = T H^TAH=T HTAH=T,其中, H = H 1 H 2 … H n − 2 H=H_1H_2…H_{n-2} H=H1H2Hn2为House holder变换之积,且 T T T是三对角矩阵。

    1.2 矩阵束的分解

    矩阵束的分解主要用于求解矩阵束的广义特征值分解(GEVD)问题 A x = λ B x ( x ≠ 0 ) 的 Q Z Ax=\lambda Bx(x\neq 0)的QZ Ax=λBx(x=0)QZ方法中,它涉及两个矩阵的同时分解。这类分解的主要形式是广义Schur分解。

    广义Schur分解: Q H A Z = T Q^HAZ=T QHAZ=T Q H B Z = S Q^HBZ=S QHBZ=S,其中, Q Q Q Z Z Z为酉矩阵,而 T T T S S S为上三角矩阵。

    实现广义Schur分解需要先使用Hessenberg三对角化分解: Q T A Z = H Q^TAZ=H QTAZ=H Q T B Z = T QTBZ=T QTBZ=T,其中, Q Q Q Z Z Z为正交矩阵, H H H为上Hessenberg矩阵,而 T T T是上三角矩阵。
    更形象些,我们可以把矩阵分解的上述各种类型画成图4.41所示的矩阵分解树(呈平躺形式)。
    在这里插入图片描述

    2. 对角化分解

    任意矩阵的奇异值分解和对称矩阵的特征值分解是工程中应用最广泛的两种矩阵分解。

    • 奇异值分解有多种推广,例如两个矩阵乘积的奇异值分解和矩阵束的广义奇异值分解等。
    • 特征值分解也有一种以矩阵束为对象的推广即广义特征值分解。

    定理 CS分解
    ( k + j ) × ( k + j ) (k+j)\times (k+j) (k+j)×(k+j)矩阵
    Q = [ Q 11 Q 12 Q 21 Q 22 ] Q=

    [Q11Q12Q21Q22]" role="presentation" style="position: relative;">[Q11Q12Q21Q22]
    Q=[Q11Q21Q12Q22]
    正交的,其中, Q 11 Q_{11} Q11 k × k k\times k k×k矩阵,并且 k ≥ j k≥j kj;则存在正交矩阵 U 1 , V 1 ∈ R k × k U_1,V_1 \in R^{k\times k} U1,V1Rk×k和正交矩阵 U 2 , V 2 ∈ R j × j U_2,V_2 \in R^{j\times j} U2,V2Rj×j使得
    [ U 1 O O U 2 ] [ Q 11 Q 12 Q 21 Q 22 ] [ V 1 O O V 2 ] = [ I k − j O O O C S O − S C ]
    [U1OOU2]" role="presentation" style="position: relative;">[U1OOU2]
    [Q11Q12Q21Q22]" role="presentation" style="position: relative;">[Q11Q12Q21Q22]
    [V1OOV2]" role="presentation" style="position: relative;">[V1OOV2]
    =
    [IkjOOOCSOSC]" role="presentation" style="position: relative;">[IkjOOOCSOSC]
    [U1OOU2][Q11Q21Q12Q22][V1OOV2]= IkjOOOCSOSC

    其中
    C = d i a g ( c 1 , c 2 , ⋅ ⋅ ⋅ , c j ) , c i = c o s θ i C=diag(c_1,c_2,···,c_j), c_i=cos\theta_i C=diag(c1,c2,⋅⋅⋅,cj),ci=cosθi
    S = d i a g ( s 1 , s 2 , ⋅ ⋅ ⋅ , s j ) , s i = s i n θ i S=diag(s_1,s_2,···,s_j), s_i=sin\theta_i S=diag(s1,s2,⋅⋅⋅,sj),si=sinθi
    0 ≤ θ 1 ≤ θ 2 ≤ … ⋅ ≤ θ j ≤ π / 2 0≤\theta_1≤\theta_2≤…·≤\theta_j≤\pi/2 0θ1θ2θjπ/2.
    粗略地讲, C S CS CS分解相当于将一个正交矩阵的各个分块同时对角化。

    矩阵
    Q = [ − 0.761 − 0.698 − 0.006 0.548 − 0.555 − 0.626 0.433 − 0.451 0.780 ] Q=
    [0.7610.6980.0060.5480.5550.6260.4330.4510.780]" role="presentation" style="position: relative;">[0.7610.6980.0060.5480.5550.6260.4330.4510.780]
    Q= 0.7610.5480.4330.6980.5550.4510.0060.6260.780

    是正交的。因此,选择正交矩阵
    U = [ 0.999 − 0.010 0.000 − 0.010 − 0.999 0.000 0.000 0.000 1.000 ] U=
    [0.9990.0100.0000.0100.9990.0000.0000.0001.000]" role="presentation" style="position: relative;">[0.9990.0100.0000.0100.9990.0000.0000.0001.000]
    U= 0.9990.0100.0000.0100.9990.0000.0000.0001.000

    V = [ − 0.721 − 0.692 0.000 − 0.692 0.721 0.000 0.000 0.000 1.000 ] V=
    [0.7210.6920.0000.6920.7210.0000.0000.0001.000]" role="presentation" style="position: relative;">[0.7210.6920.0000.6920.7210.0000.0000.0001.000]
    V= 0.7210.6920.0000.6920.7210.0000.0000.0001.000

    则有
    U T Q V = [ 1.000 0.000 0.000 0.000 0.780 0.625 0.000 − 0.625 0.780 ] U^TQV=
    [1.0000.0000.0000.0000.7800.6250.0000.6250.780]" role="presentation" style="position: relative;">[1.0000.0000.0000.0000.7800.6250.0000.6250.780]
    UTQV= 1.0000.0000.0000.0000.7800.6250.0000.6250.780

    换言之,在定理中相当于取 k = 2 , j = 1 k=2,j=1 k=2,j=1,并且 c 1 = 0.780 , s 1 = 0.625 c_1=0.780,s_1=0.625 c1=0.780s1=0.625

    3. Cholesky分解

    Cholesky分解
    A = [ a i j ] ∈ R n × n A=[a_{ij}] \in R^{n\times n} A=[aij]Rn×n是对称正定矩阵, A = G G T A=GG^T A=GGT称为矩阵 A A A的Cholesky分解,其中, G ∈ R n × n G\in R^{n\times n} GRn×n是一个具有正的对角线元素的下三角矩阵,即
    G = [ g 11 0 g 21 g 22 ⋮ ⋮ ⋱ g n 1 g n 1 ⋯ g n n ] G=

    [g110g21g22gn1gn1gnn]" role="presentation" style="position: relative;">[g110g21g22gn1gn1gnn]
    G= g11g21gn1g22gn10gnn
    比较 A = G G T A=GG^T A=GGT两边,易得
    a i j = ∑ k = 1 j g j k g i k a_{ij}=\sum_{k=1}^jg_{jk}g_{ik} aij=k=1jgjkgik
    从而有
    g j j g i j = a i j − ∑ k = 1 j − 1 g j k g i k = v ( i ) (1) g_{jj}g_{ij}=a_{ij}-\sum_{k=1}^{j-1}g_{jk}g_{ik}=v(i) \tag{1} gjjgij=aijk=1j1gjkgik=v(i)(1)

    如果知道了 G G G的前 j − 1 j-1 j1列,那么 v ( i ) v(i) v(i)就是可计算的。
    在上式中令 i = j i=j i=j,立即有 g j j 2 = v ( j ) g_{jj}^2=v(j) gjj2=v(j)。然后,由上式得
    g i j = v ( i ) / g j j = v ( i ) / v ( j ) (2) g_{ij}=v(i)/g_{jj}=v(i)/\sqrt{v(j)} \tag{2} gij=v(i)/gjj=v(i)/v(j) (2)
    总结以上讨论,可得到计算Cholesky分解的下述MATLAB算法
    在这里插入图片描述
    这一算法叫做Gaxpy Cholesky算法。Gaxpy意即广义的saxpy,而“saxpy”是在软件包LINPACK中被定义的术语,它是“标量ax+y”的英文(scalar alpha x plus y)缩写。
    saxpy运算定义为
    z = α x + y ⇒ x i = α x i + y i z=\alpha x+y \Rightarrow x_i=\alpha x_i+y_i z=αx+yxi=αxi+yi
    而Gaxpy运算系指矩阵运算 z = A x + y z=Ax+y z=Ax+y
    以上分析结果可以归纳为下面的定理。
    定理 Cholesky分解
    如果 A ∈ R n × n A\in R^{n\times n} ARn×n是对称正定矩阵,则Cholesky分解 A = G G T A=GG^T A=GGT是唯一的,其中,下三角矩阵 G ∈ R n × n G\in R^{n\times n} GRn×n的非零元素由(2)式决定。

    下三角矩阵 G G G称为Cholesky三角。另外,Cholesky分解也谓之平方根方法,因为下三角矩阵 G G G可以视为矩阵 A A A的“平方根”。
    一个非奇异矩阵 A A A的逆矩阵 A − 1 A^{-1} A1可以通过Cholesky分解求得,即有
    A − 1 = G − T G − 1 A^{-1}=G^{-T}G^{-1} A1=GTG1
    其中, G − T = ( G T ) − 1 G^{-T}=(G^T)^{-1} GT=(GT)1

    考虑利用Cholesky分解求解矩阵方程 A x = b Ax=b Ax=b。由于
    G − 1 A x = G − 1 b ⇒ G T x = h G^{-1}Ax =G^{-1}b\Rightarrow G^Tx=h G1Ax=G1bGTx=h
    其中, h = G − 1 b h=G^{-1}b h=G1b,或等价为 G h = b Gh=b Gh=b。比较 G h = b Gh=b Gh=b两边的向量元素,易得向量 h h h的元素 h i h_i hi的递推计算公式如下:
    h 1 = b 1 / g 11 h_1=b_1/g_{11} h1=b1/g11
    h i = 1 g i i ( b i − ∑ k = 1 i − 1 g k i h k ) , i = 2 , 3 , … , n h_i=\frac{1}{g_{ii}}(b_i-\sum_{k=1}^{i-1}g_{ki}h_k), i=2,3,…,n hi=gii1(bik=1i1gkihk),i=2,3,,n

    现在,方程 A x = b Ax=b Ax=b的解等价为 G T x = h G^Tx=h GTx=h的解。注意到 G T G^T GT为上三角矩阵,因此 x x x可以利用熟知的回代法求出:
    x n = h n / g n n x_n=h_n/g_{nn} xn=hn/gnn
    x i = 1 g i i ( h i − ∑ k = 1 n − i g i + k , i x i + k ) , i = n − 1 , n − 2 , . . . , 1 x_i=\frac{1}{g_{ii}}(h_i-\sum_{k=1}^{n-i}g_{i+k,i}x_{i+k}),i=n-1,n-2,...,1 xi=gii1(hik=1nigi+k,ixi+k),i=n1,n2,...,1

  • 相关阅读:
    通过webpack创建并打包js库到npm仓库
    【JS】Chapter13-构造函数&数据常用函数
    国产RK3399开发板如何在Ubuntu保留文件系统
    微信小程序项目实例SSM项目校园活动报名网
    Qt中的线程同步:确保多线程程序的安全性
    使用 Clipdrop 替换长安三万里电影海报中的天空
    【JS】js给对象动态添加、设置、删除属性名和属性值
    一个用C#开发的操作系统的开源项目
    P5718 【深基4.例2】找最小值
    Python自动化测试面试题精选(一)
  • 原文地址:https://blog.csdn.net/m0_45085885/article/details/126233017