数值计算矩阵浅析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数值计算矩阵浅析相关的知识,希望对你有一定的参考价值。

对于一个m*n的矩阵A,其实质就是一个映射,譬如对于一个n维的矢量x,Am*nx就是将x从n维映射到m维空间。如果A是一个正交矩阵,则A就代表一个旋转,即用A中的列向量作为一组正交基,重新表示x.

一、正交矩阵

Un*n的正交矩阵  <=>  U-1=UT

  • |U| = ±1
  • U的各行(列)为单位向量且相互正交
  • 保范性,即||x|| = ||Ux||,若U为正交矩阵

前两条容易理解,现在证明第三条,||x||表示x的欧式长度,||x|| = (xTx)1/2, 保范性就是矢量x乘以一个正交矩阵,其范数保持不变,假设U为正交矩阵:

||Ux||2 = (Ux)T(Ux) = xTUTUx = xTx = ||x||2

 

二、矩阵的RQ分解

矩阵的RQ分解是指将一个矩阵A分解成RQ两个矩阵相乘的形式,即A = RQ,其中R(Right)为上三角矩阵,Q为正交矩阵。与RQ分解类似的有QL、LQ、QR分解。

1、Givens矩阵实现

以3维Givens矩阵为例,通过计算的到c和s(具体见MVG附录),按步骤依次对三维矩阵A右乘某个Givens矩阵使A的左下角的各个值为0

例如:AQ1Q2Q= R      A = RQ3TQ2TQ1T  = RQ     (其中Q = Q3TQ2TQ1T )

2、HouseHold矩阵实现

HuserHold矩阵实现RQ分解和Givens类似,都是利用特殊矩阵来实现,具体见MVG附录。

 

三、对称和反对称矩阵

如果A T = A,称A为对称矩阵;如果A T = -A,称A为对反称矩阵。

以3*3的反对称矩阵为例,任何3*3的反对称矩阵A,都能找到一个适当的向量a,A = [a]x.

两个3维矢量a、b的叉乘:a*b = [a]xb = (aT[b]x)T

 

四、特征值分解(EVD)

对任意方阵An*n,都可以分解成 A n*n = PDP-1.

若A是实对称矩阵的话,则有A n*n = UDUT,其中U为正交矩阵。若对矢量x做一个A映射,即Ax = UDUTx ,即将A映射分解成三个映射,先做UTx,将x用A的特征向量来表示,再做DUTx,由于D是对角矩阵,对角线上的元素为各个特征向量所对应的特征值,那么该映射表示在新的基上把x做拉伸或压缩(特征值大于1做拉伸,小于1做压缩),最后再用U映射会原来的基。

 

五、Choleshy分解

对于任意正定实对称矩阵A都能分解成KKT,即A = KKT,其中K为对角元素全为正的上三角矩阵。

证明:A为实对称矩阵,故  A = UDUT

          因为A正定,故D对角线上的元素全为正值,故D可写成D = EET,其中E为对角阵,对角线元素值为D的平方根

          则A  =  UEETUT = UE(UE)T,记V = UE,则A = VVT

          对V进行RQ分解,V = KQ, 则A = KQQTKT = KKT(因为Q为正交矩阵)

以上证明的过程也为Choleshy分解的过程。这只是一种构造性方法,还有更加高效的方法,见MVG附录。

 

六、奇异值分解(SVD)

 特征值分解只能分解方阵,那对于非方阵则采用SVD分解,设A为m*n的矩阵,则

m*n = Um*mDm*nVn*nT

其中U和V都为正交矩阵,D为对角矩阵,且可知D对角线上的元素为ATA的特征值得平方根,V中的列向量为其特征值所对应的特征向量。

证明:首先ATA为半正定的,即特征值大于等于0.

           A = UDVT

          则ATA = VDTUTUDVT = VD2VT

          证毕。

注意:SVD是非常有用的矩阵分解方法,用SVD可以干很多事:

  • 求(超定)方程组的根
  • 图像压缩
  • 矩阵分解
  • 求伪逆

七、伪逆

对可逆矩阵求逆比较简单,但对不可逆的矩阵矩阵如何求伪逆呢?

定义:对于对角矩阵D,其伪逆为D+

           D+ii = 0,如果Dii = 0

           D+ii = Dii-1,若果Dii ≠ 0

那么对于m*n的矩阵A,其伪逆为:

           A + = VD+UT

以上是关于数值计算矩阵浅析的主要内容,如果未能解决你的问题,请参考以下文章

Python数值计算基础

2022-2023 春学期 矩阵与数值分析 C3 矩阵分析基础

GPU可以用于Android Environmement上的数值计算(复矩阵乘法)吗?

numpy中计算矩阵数值的核心函数

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度

R语言(数值列表矩阵)上应用函数(sqrtroundmeanlog)将矩阵所有数据求对数就矩阵整体的均值使用apply函数计算矩阵matrix的行均值列均值trim设置返回结果精度