矩阵分解及其应用

时间:2025-03-30 10:55:03

Ln=101ln+1,nlN,n01 L n = ( 1 0 ⋱ 1 l n + 1 , n ⋱ ⋮ ⋱ 0 l N , n 1 )

​ 于是,定义: An=LnAn1 A n = L n A n − 1 ,其中

li,n=an1i,nan1n,n,i=n+1,n+2,,N l i , n = − a i , n n − 1 a n , n n − 1 , i = n + 1 , n + 2 , ⋯ , N

​ 经过 N1 N − 1 轮操作后,所有在主对角线下的系数都为 0 了,于是我们得到了一个上三

​ 角矩阵: AN1 A N − 1 ,这时就有:

A=L11L1A0=L11A1=L11L12L2A1=L11L12A2==L11L1N1AN1 A = L 1 − 1 L 1 A 0 = L 1 − 1 A 1 = L 1 − 1 L 2 − 1 L 2 A 1 = L 1 − 1 L 2 − 1 A 2 = ⋯ = L 1 − 1 ⋯ L N − 1 − 1 A N − 1

​ 令 L=L11L1N1,U=AN1 L = L 1 − 1 ⋯ L N − 1 − 1 , U = A N − 1 ,则分解得证。显然能正常分解一般要求

an1n,n0,n=1,2,,N1 a n , n n − 1 ≠ 0 , n = 1 , 2 , ⋯ , N − 1

​ 即前 N1 N − 1 个顺序主子式不等于零(否则消元后主对角还为零则需要交换两行——对应

​ 着另外一种置换初等矩阵,这种初等矩阵可不是下三角的哦~)

​ 这类算法的复杂度一般在 2n33 2 n 3 3 左右,对充分消元的分解则不然。

应用

首先最为简单直白的遍历自然是行列式的求解:

det(A)=det(L)det(U)=i=1nLiiUii d e t ( A ) = d e t ( L ) d e t ( U ) = ∏ i = 1 n L i i U i i

实际上还可以引申出高斯约当消去法来求解矩阵的逆,实际上 matlab 就是利用这个原理来求解大部分矩阵的逆的。

QR Q R 分解

基本概念

矩阵的 QR Q R 分解是指,如果实非奇异矩阵 A A 可以表示为

A=QR

其中 Q Q 为正交矩阵,R 为实非奇异上三角矩阵。其实际算法多种多样,有 Schmidt 正交方法,Givens 方法和 Household 方法,各有优劣。下面简单介绍Household 方法的 QR Q R 分解

此方法利用反射矩阵,即 Householder 矩阵

H=E2uuT H = E − 2 u u T

其中 u u 是单位向量,H 是正交矩阵, det(A)=1 d e t ( A ) = − 1 。可以证明两个 H H 矩阵的乘积就是 Givens 矩阵,并且任何实非奇异矩阵 A 可以通过连乘 H H 阵化为上三角矩阵 R 。则 A=QR A = Q R

应用

矩阵的 QR Q R 分解可以用来解决线性最小二乘问题,也可以用来降低矩阵求逆的代价。因为正交矩阵的转置就是其逆 ,这是其他的矩阵分解无法比拟的。

可以看到上述两种分解都要求是方阵,这便使得下面的满秩分解与奇异值分解有了特殊的意义。

满秩分解

基本概念

满秩分解也称为最大秩分解。满秩分解是指:把秩为 r r m×n 的矩阵 A A 分解为 A=FG ,其中 F F 为秩为 r m×r m × r 阶矩阵, G G 为秩为 r r×n r × n 阶矩阵。这由初等变换是很显然的。

应用

其最有用的一个结论是:对于任意的非奇异矩阵 Q Q 和置换矩阵 P ,使得

QAP=(Er000) Q A P = ( E r 0 0 0 )

奇异值分解

基本概念

矩阵的奇异值分解是在线性代数中一种重要的矩阵分解,在最优化问题、特征值问题、最小二乘问题、广义逆问题以及统计学问题,中都有重要应用

对秩为 r r m×n 的矩阵 A A 进行奇异值分解的步骤依次是:

Step 1: 求得 ATA 的特征值 γ1,γ2,,γn γ 1 , γ 2 , ⋯ , γ n 及对应的特征向量并正交单位化得到矩阵 V V 使得

VT(ATA)V=(M2000)

其中 M=diag(γ1,γ2,,γn) M = d i a g ( γ 1 , γ 2 , ⋯ , γ n )

一般矩阵 A A 做不到总是可逆,但是复矩阵 ATA 总是可逆的,也可以做特征值分解。可以说奇异值分解一定程度上推广了特征值分解

Step 2: 将 V V 的前 r 列作为 V1 V 1 ,令 U=A(VT1)1 U = A ( V 1 T ) − 1 ,再扩张 U1 U 1 m m 阶的矩阵 U

Step 3: 那么

A=U(M000)VT A = U ( M 0 0 0 ) V T

应用

实例上线中,未完待续~