Moore-Penrose伪逆(Moore-Penrose广义逆)


对于非方矩阵而言,其逆矩阵没有定义。假设在下面的问题中,我们希望通过矩阵A的左逆B来求解线性方程:
Ax=yAx=y Ax=y
等式两边左乘A−1A^{-1}A−1后,我们得到:
x=A−1yx=A^{-1}y x=A−1y
是否存在一个唯一的映射,将A映射到B,取决于问题的形式。
如果矩阵A的行数大于列数,那么上述方程可能没有解;如果矩阵A的行数小于列数,那么上述矩阵可能有很多解。

Moore-Penrose伪逆使我们能够解决这类问题。矩阵A的伪逆定义为:
A+=lim⁡x→0(ATA+xI)−1ATA^{+}=\lim_{x \to 0}(A^{T}A+xI)^{-1}A^{T} A+=x→0lim​(ATA+xI)−1AT
但是在实际中计算伪逆是使用下面的式子:
A+=VD+UHA^{+}=VD^{+}U^{H} A+=VD+UH
其中V、D+、UHV、D^{+}、U^{H}V、D+、UH都是矩阵A按照奇异值分解后得到的。

  • 矩阵右上角AHA^{H}AH的HHH是什么呢?

    这是一种转置,但是能应用更广泛的范围,被称作共轭转置。当出现复数的时候,才会体现它的不同,在为实数的时候和普通转置的操作是一样的。下面我们举一个共轭转置的例子。
    A=[1+i32−3i6]A=\left[ \begin{matrix} 1+i & 3 \\ 2-3i & 6\\ \end{matrix} \right] A=[1+i2−3i​36​]
    则AAA的共轭转置AHA^{H}AH为:
    AH=[1−i2+3i36]A^{H}=\left[ \begin{matrix} 1-i & 2+3i\\ 3 & 6\\ \end{matrix} \right] AH=[1−i3​2+3i6​]

倘若学了矩阵论,那肯定会想起广义逆,没错,伪逆就是广义逆的一种,从它的定义以及描述来看,不能说毫无关系,只能说是一模一样。


如何求解Moore-Penrose伪逆(Moore-Penrose广义逆)


要想求解伪逆,我们要经过以下两步

    1. 求解矩阵的奇异值分解
    1. 按照求解的奇异值分别进行变换
    1. 按照伪逆公式求解公式求解该矩阵的伪逆

我们通过一个小例子进行引入:

求解矩阵A=[000000100010]A=\left[\begin{matrix} 0 & 0 & 0\\ 0 & 0 & 0\\ 1 & 0 & 0\\ 0 & 1 & 0\\ \end{matrix}\right]A=⎣⎢⎢⎡​0010​0001​0000​⎦⎥⎥⎤​的伪逆A+A^{+}A+。

我们通过这个很简单的例题来引入。

1.矩阵的奇异值分解


首先,我们先进行矩阵AAA的奇异值分解。

奇异值分解的公式是怎样的呢?它的各个元素和我们的最终目的求解矩阵的伪逆很像,这也是为什么我们要先求解奇异值分解。奇异值分解公式为:
A=UDVHA=UDV^{H} A=UDVH

其实在矩阵论这本书上是A=UΣVHA=U\Sigma V^{H}A=UΣVH,但是在我查找资料,推测其定义应该是一样的,所以在这里以伪逆的定义形式来命名。(当然也有可能是我出错了,倘若如此,希望指正,谢谢!)

由之前的讲解我们可以得出:
AH=[001000010000]A^{H}=\left[\begin{matrix} 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ 0 & 0 & 0 & 0\\ \end{matrix}\right]AH=⎣⎡​000​000​100​010​⎦⎤​
则有
AHA=[100010000]A^{H}A=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \\ \end{matrix}\right]AHA=⎣⎡​100​010​000​⎦⎤​
接下来求解AHAA^{H}AAHA的特征值,通过下面的公式求解:
∣λI−AHA∣=(λ−1)2λ|\lambda I-A^{H}A|=(\lambda-1)^{2}\lambda∣λI−AHA∣=(λ−1)2λ
求解可得特征值分别为:
λ1=1,λ2=1,λ3=0\lambda_{1}=1,\lambda_{2}=1,\lambda_{3}=0 λ1​=1,λ2​=1,λ3​=0


  1. 第一步,根据特征值求解DDD

由特征值我们可以求解出DDD,那么DDD的求解公式是咋样的呢?
在这里我给出求解不为零部分的通式:
Δ=[σ1σ2⋱σn]\Delta=\left[\begin{matrix} \sigma_{1} & & &\\ & \sigma_{2} & &\\ & & \ddots &\\ & & & & \sigma_{n}\\ \end{matrix}\right] Δ=⎣⎢⎢⎡​σ1​​σ2​​⋱​​σn​​⎦⎥⎥⎤​
其中的参数σ\sigmaσ与λ\lambdaλ关系如下(只求不为零的):
σi=λi\sigma_{i}=\sqrt{\lambda_{i}} σi​=λi​​
而在该题中DDD应该为多少呢?维度是怎样的呢?我们需要根据DDD的左右矩阵来判断,也就是必须满足矩阵的运算规则。所以它的Δ=[1001]\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]Δ=[10​01​]

而DDD的通式为:
D=[Δ000]D=\left[\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right] D=[Δ0​00​]
在DDD中,000表示的不是单个0,而是000矩阵,具体大小,视左右矩阵而论。


  1. 第二步,求解变量VVV

要想求解VVV,首先需要求解出AHAA^{H}AAHA特征值对应的特征向量。根据特征向量求解公式:
(λiI−A)x=0(\lambda_{i}I-A)x=0 (λi​I−A)x=0

注意,上面公式是指λi\lambda_{i}λi​为AAA的特征值,而在本题中,λi\lambda_{i}λi​是AHAA^{H}AAHA的特征值,所以在计算时应该是:
(λiI−AHA)x=0(\lambda_{i}I-A^{H}A)x=0(λi​I−AHA)x=0

求解对应的基础解系选取一个简单的作为特征向量,求解的各特征值对应的特征向量为:α1=(1,0,0)T,α2=(0,1,0)T,α3=(0,0,1)T\alpha_{1}=(1,0,0)^T,\alpha_2=(0,1,0)^T,\alpha_3=(0,0,1)^Tα1​=(1,0,0)T,α2​=(0,1,0)T,α3​=(0,0,1)T,然后需要将得到的特征向量进行标准正交化,这里将标准正交化后的结果用v1,v2,v3v_1,v_2,v_3v1​,v2​,v3​表示,其实对于当前例子我们可以看出求得的特征向量标准正交化后也是一样的,也就是v1=(1,0,0)T,v2=(0,1,0)T,v3=(0,0,1)Tv_{1}=(1,0,0)^T,v_2=(0,1,0)^T,v_3=(0,0,1)^Tv1​=(1,0,0)T,v2​=(0,1,0)T,v3​=(0,0,1)T。

VVV的求解公式如下:
V=(v1,v2,⋯,vn)V=(v_1,v_2,\cdots,v_n)V=(v1​,v2​,⋯,vn​)

所以,V=(v1,v2,v3)=[100010001]V=(v_1,v_2,v_3)=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right]V=(v1​,v2​,v3​)=⎣⎡​100​010​001​⎦⎤​

  1. 第三步,求解变量 UUU

求解UUU按照以下规则,首先求解特征值不为零的。按照下面的公式进行求解:
ui=1σiAviu_i=\frac{1}{\sigma_i}Av_i ui​=σi​1​Avi​
根据公式可得:u1=1σ1Av1=(0,0,1,0)T,u2=1σ2Av2=(0,0,0,1)Tu_1=\frac{1}{\sigma_1}Av_1=(0,0,1,0)^T,u_2=\frac{1}{\sigma_2}Av_2=(0,0,0,1)^Tu1​=σ1​1​Av1​=(0,0,1,0)T,u2​=σ2​1​Av2​=(0,0,0,1)T,再通过已得到的v1,v2v_1,v_2v1​,v2​来求解,根据性质,UUU中的子列向量必须两两正交,所以剩下的列向量必须满足下面要求:
ui={β∣u1Tβ=0,u2Tβ=0}u_i=\lbrace{\beta}|u_1^T\beta=0,u_2^T\beta=0\rbrace ui​={β∣u1T​β=0,u2T​β=0}
最终求解可得β=(k1,k2,0,0)\beta=(k_1,k_2,0,0)β=(k1​,k2​,0,0),其中k1,k2k_1,k_2k1​,k2​为任意实数。
所以可得u3=(1,0,0,0),u4=(0,1,0,0)u_3=(1,0,0,0),u_4=(0,1,0,0)u3​=(1,0,0,0),u4​=(0,1,0,0)。

从而可知:
U=(u1,u2,u3,u4)=[0010000110000100]U=(u_1,u_2,u_3,u_4)=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right] U=(u1​,u2​,u3​,u4​)=⎣⎢⎢⎡​0010​0001​1000​0100​⎦⎥⎥⎤​


  1. 第四步 确定DDD,得出最后结果

从上面我们已经知道如下结果:
U=[0010000110000100]U=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right] U=⎣⎢⎢⎡​0010​0001​1000​0100​⎦⎥⎥⎤​
V=[100010001]V=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right]V=⎣⎡​100​010​001​⎦⎤​
现在我们就需要来确定DDD了,我们已知:
Δ=[1001]\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]Δ=[10​01​]

D=[Δ000]D=\left[\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right] D=[Δ0​00​]
而矩阵AAA的奇异值分解为下面公式,A=UDVHA=UDV^{H}A=UDVH

所以我们可得DDD的维度,也就是D4×3D_{4\times3}D4×3​,所以最终我们确定DDD:
D=[100010000000]D=\left[\begin{matrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 0\\ 0 & 0 & 0\\ \end{matrix}\right] D=⎣⎢⎢⎡​1000​0100​0000​⎦⎥⎥⎤​

到这里,矩阵的奇异值分解就结束了,我们可以通过公式:A=UDVHA=UDV^{H}A=UDVH来进行验证。

虽然奇异值分解结束了,但是伪逆计算却还没开始,不过当你已经求解出了奇异值分解之后,伪逆也就不难了。


2. 矩阵伪逆的计算

这里我们还是需要摆出伪逆的计算公式。
A+=VD+UHA^{+}=VD^{+}U^{H} A+=VD+UH

而我们刚才奇异值分解的是:A=UDVHA=UDV^{H}A=UDVH

这里有一个很不幸消息,如果你直接这样看的话你会发现,我们所求的DDD其实也是个不可逆矩阵,也就是说如果这样的话,也是要求伪逆的。而且你会有更惊人的发现,它的和AAA是很相似的。所以这里我们需要分解。

也就是真正使用的公式:

A=UDVH=U(Δ000)VHA=UDV^{H}=U\left(\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right)V^{H} A=UDVH=U(Δ0​00​)VH
A+=VD+UH=V(Δ−1000)UHA^+=VD^+U^{H}=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H} A+=VD+UH=V(Δ−10​00​)UH

这样你就会发现很容易求解,由于Δ=[1001]\Delta=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]Δ=[10​01​],所以
Δ−1=[1001]\Delta^{-1}=\left[\begin{matrix} 1 & 0 \\ 0 & 1 \\ \end{matrix}\right]Δ−1=[10​01​]

那么就可以得出:D+=(Δ−1000)=[100001000000]D^+=\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)=\left[\begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{matrix}\right]D+=(Δ−10​00​)=⎣⎡​100​010​000​000​⎦⎤​

所以可得AAA的伪逆,亦即广义逆为:
A+=VD+UH=V(Δ−1000)UH=[100010001][100001000000][0010000110000100]=[001000010000]A^+=VD^+U^{H}=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H}=\left[\begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix}\right]\left[\begin{matrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 0\\ \end{matrix}\right]\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 1& 0 & 0 & 0 \\ 0& 1 & 0 & 0 \\ \end{matrix}\right]=\left[\begin{matrix} 0& 0 & 1 & 0 \\ 0& 0 & 0 & 1 \\ 0& 0 & 0 & 0 \\ \end{matrix}\right] A+=VD+UH=V(Δ−10​00​)UH=⎣⎡​100​010​001​⎦⎤​⎣⎡​100​010​000​000​⎦⎤​⎣⎢⎢⎡​0010​0001​1000​0100​⎦⎥⎥⎤​=⎣⎡​000​000​100​010​⎦⎤​


至此,我们求解完毕,其实在本文中,我们最最主要了解的是,我们一般不使用原始公式,而是使用下面的:

A=U(Δ000)VHA=U\left(\begin{matrix} \Delta & 0 \\ 0 & 0 \\ \end{matrix}\right)V^{H} A=U(Δ0​00​)VH
A+=V(Δ−1000)UHA^+=V\left(\begin{matrix} \Delta^{-1} & 0 \\ 0 & 0 \\ \end{matrix}\right)U^{H} A+=V(Δ−10​00​)UH


Moore-Penrose伪逆(Moore-Penrose广义逆)相关推荐

  1. MATLAB中:左右除法、逆inv、广义逆pinv的区别

    以下是通过实验得出的一些结论: 左除行相等,右除列相等.只要满足此条件便可运算,且左.右除意义不相同!     逆inv()仅针对"非奇异方阵|A|≠0",使得A^(-1) A=A ...

  2. 线性代数学习笔记10-4:左右逆、伪逆/M-P广义逆(从四个子空间和SVD角度理解)

    下面讨论m×nm\times nm×n的秩为rrr的矩阵 对于不同情况,讨论逆矩阵 两侧逆矩阵 2-sided inverse 这也是一般所说的"逆矩阵"的含义 方阵A\bolds ...

  3. 【矩阵论】4. 矩阵运算——广义逆——减号逆

    矩阵论 1. 准备知识--复数域上矩阵,Hermite变换) 1.准备知识--复数域上的内积域正交阵 1.准备知识--Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分 ...

  4. 【矩阵论】4. 矩阵运算——广义逆——加号逆应用

    矩阵论 1. 准备知识--复数域上矩阵,Hermite变换) 1.准备知识--复数域上的内积域正交阵 1.准备知识--Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分 ...

  5. 【矩阵论】4. 矩阵运算——广义逆——加号逆的计算

    矩阵论 1. 准备知识--复数域上矩阵,Hermite变换) 1.准备知识--复数域上的内积域正交阵 1.准备知识--Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分 ...

  6. 线性高斯反问题--广义逆

    0 解与算符 对于线性反问题Gm=d\mathbf{Gm=d}Gm=d的方法,长度方法基于分析解的两个属性:预测误差和解的简单程度.而广义逆的方法,则希望通过研究算符矩阵来获得更多关于反问题的属性. ...

  7. Moore-Penrose广义逆:可解决MATLAB报错“矩阵接近奇异值,或者缩放错误。结果可能不准确”

    上一篇博文讲到:<方程AX=b的解的讨论(特解.通解.零空间向量等概念)及其MATLAB实现>,程序中用到的是mldivide或者A\b的方法(二者相同)来解方程. 但实际上运行过程中我们 ...

  8. 矩阵分析与应用(一)——矩阵基础知识、广义逆

    文章目录 前言 部分符号约定 关于矩阵理论的碎碎念 一些基础知识与本门课知识串讲 矩阵奇异与线性无关 向量空间.内积.范数 行列式.特征值.迹 逆.广义逆 矩阵方程.向量化.Kronecker积 向量 ...

  9. 求非线性方程组的最小二乘解的广义逆法C实现

    求非线性方程组的最小二乘解的广义逆法 #include "math.h"#include "stdlib.h"#include "6gmiv.c&qu ...

  10. 求解线性最小二乘问题的奇异值分解及广义逆法的C++实现

    求解线性最小二乘问题的广义逆法的C++实现 1,功能 2,方法说明 3,函数语句与形参说明 第一步,求对系数矩阵进行奇异值分解(muav函数) #include "stdlib.h" ...

最新文章

  1. vue native
  2. POJ - 3660 Cow Contest(最短路变形+闭包传递)
  3. android 仿真翻页动画,Android 两Activity之间动画效果(1)---------翻页效果
  4. 一周冲刺计划2//第一天
  5. python 序列化压缩成字符串_Python 将json序列化后的字符串转换成字典(推荐)
  6. ubuntu之Matlab安装
  7. flexsession禁用_flex(替代session过期)用户长时间不操作要求重新登录的处理
  8. 留言查看的代码php,php留言板后台管理-查看代码
  9. 对美食评语进行情感分析
  10. hadoop配置文件还原_hadoop通过Configuration对象自定义配置文件
  11. 2018年尚硅谷徐靖博老师的分布式电商项目视频
  12. 汇编语言0x2c,ARM汇编语言(4) 指令、伪操作、伪指令学习
  13. 同步BUCK死区时间产生电路原理及仿真
  14. PHP使用socket TCP通信对接富途牛牛
  15. FOB指定货操作标准流程及相关经验
  16. 【Python3语法】两个一维list列表合并为一个二维list
  17. 小白入门计算机视觉系列——ReID(一):什么是ReID?如何做ReID?ReID数据集?ReID评测指标?
  18. 字符串转换为驼峰格式
  19. MPU6050快速开发使用
  20. 一般线性模型、混合线性模型、广义线性模型

热门文章

  1. Linux——eth0,eth1,eth2,lo及ifconfig命令
  2. 【转】弹出USB大容量存储设备时出问题的解决方法
  3. C++(一)#pragma once用法
  4. 无线路由器和计算机怎么连接网络连接,猫连接无线路由器
  5. Java常量池简单认识
  6. mpu6050常见问题
  7. 2020SpringCloud学习年终总结——第九章-Gateway
  8. matlab z统计量,z统计量(z统计量与t统计量)
  9. shell 搜索文件夹下所有文件
  10. 服务器被入侵怎么办,如何预防