置换矩阵是一种非常实用的数学工具, 其确切定义如下:

一个正方矩阵,若其每一行和每一列有且仅有一个非零元素111,则称之为置换矩阵。

顾名思义,其作用是:

当将某一矩阵左乘置换矩阵,相当于将矩阵的行重新排列。 而右乘置换矩阵,则相当于对列重新排列。

因此,当我们想对矩阵的行或列重新排列时,就可以等效地将其写为左/右乘置换矩阵的形式。 插一句题外话,对某矩阵左乘一个对角阵,相当于对其每一行都分别乘上对应的对角元素。 右乘一个对角阵,则相当于每一列乘上一个对角元素。 因此,左乘代表对行操作,右乘代表对列操作

以一个实例来说明,假设有如下矩阵:

A=[a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44a51a52a53a54]A=\left[\begin{array}{llll} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ a_{51} & a_{52} & a_{53} & a_{54} \end{array}\right] A=⎣⎢⎢⎢⎢⎡​a11​a21​a31​a41​a51​​a12​a22​a32​a42​a52​​a13​a23​a33​a43​a53​​a14​a24​a34​a44​a54​​⎦⎥⎥⎥⎥⎤​

和置换矩阵
P4=[0001010010000010]\boldsymbol{P}_{4}=\left[\begin{array}{llll} 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right] P4​=⎣⎢⎢⎡​0010​0100​0001​1000​⎦⎥⎥⎤​
那么我们有:
AP4=[a13a12a14a11a23a22a24a21a33a32a34a31a43a42a44a41a53a52a54a51]A P_{4}=\left[\begin{array}{llll} a_{13} & a_{12} & a_{14} & a_{11} \\ a_{23} & a_{22} & a_{24} & a_{21} \\ a_{33} & a_{32} & a_{34} & a_{31} \\ a_{43} & a_{42} & a_{44} & a_{41} \\ a_{53} & a_{52} & a_{54} & a_{51} \end{array}\right] AP4​=⎣⎢⎢⎢⎢⎡​a13​a23​a33​a43​a53​​a12​a22​a32​a42​a52​​a14​a24​a34​a44​a54​​a11​a21​a31​a41​a51​​⎦⎥⎥⎥⎥⎤​

注意到,AP4AP_4AP4​事实上就是将原矩阵AAA中的列的顺序重新调换后的结果。我们再来看看这是如何操作的:首先可以将A写为:
A=[a1,a2,a3,a4]A = [a_1,a_2,a_3,a_4]A=[a1​,a2​,a3​,a4​]
其中ana_nan​分别代表第nnn列。 那么,根据线性代数基本知识,可知,AP4AP_4AP4​的第一列由Ap1Ap_1Ap1​给出,其中p1p_1p1​代表P4P_4P4​的第一列,也即:
[a1,a2,a3,a4][0010]=a3[a_1,a_2,a_3,a_4]\left[\begin{array}{c}0\\0\\1\\0\end{array}\right] =a_3[a1​,a2​,a3​,a4​]⎣⎢⎢⎡​0010​⎦⎥⎥⎤​=a3​
因此,AP4AP_4AP4​的第一列就是AAA的第三列。 其他列的结果可类似得出。 好,我们可以发现其中的规律:

右乘置换矩阵的第nnn列的非零元素在第mmm行,则代表将第mmm列换到第nnn列。比如P4P_4P4​第一列的1元素在第三行,因此就将AAA的第3列换到第1列。 这也就是为什么置换矩阵的定义中,要求每一行,每一列均只有一个1的原因,只有这样才能保证最后的结果是将AAA矩阵的列进行调换。

类似的,假如有:
P5=[0000100100010000001010000]P_{5}=\left[\begin{array}{lllll} 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 & 0 \end{array}\right] P5​=⎣⎢⎢⎢⎢⎡​00001​00100​01000​00010​10000​⎦⎥⎥⎥⎥⎤​
则有:
P5A=[a51a52a53a54a31a32a33a34a21a22a23a24a41a42a43a44a11a12a13a14]P_{5} A=\left[\begin{array}{llll} a_{51} & a_{52} & a_{53} & a_{54} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ a_{11} & a_{12} & a_{13} & a_{14} \end{array}\right] P5​A=⎣⎢⎢⎢⎢⎡​a51​a31​a21​a41​a11​​a52​a32​a22​a42​a12​​a53​a33​a23​a43​a13​​a54​a34​a24​a44​a14​​⎦⎥⎥⎥⎥⎤​
其操作与右乘置换矩阵时类似。 对于左乘的置换矩阵,第nnn行的非零元素在第mmm列,则代表将第mmm行调换到第nnn行。

接下来介绍下置换矩阵的几个性质,对后面的推导将有所帮助:

  • PTP=PPT=IP^TP=PP^T=IPTP=PPT=I,也就是说,置换矩阵是正交矩阵。因此我们也可知P−1=PTP^{-1}=P^TP−1=PT。这也就是说,如果我们通过PPP矩阵调换了行列的顺序,我们可以通过乘以其转置,将行列顺序复原。
  • PTAPP^TAPPTAP与AAA的对角线元素相同,但顺序可能不同。

接下来,我们讨论问题,如何求出逆矩阵(ATA)−1(A^TA)^{-1}(ATA)−1的对角元素结果?

先给出结论为:

[(ATA)−1]nn=1anTan−anTAn(AnTAn)−1AnTan\left[\left(\mathbf{A}^{T} \mathbf{A}\right)^{-1}\right]_{n n}=\frac{1}{\mathbf{a}_{n}^{T} \mathbf{a}_{n}-\mathbf{a}_{n}^{T} \mathbf{A}_{n}\left(\mathbf{A}_{n}^{T} \mathbf{A}_{n}\right)^{-1} \mathbf{A}_{n}^{T} \mathbf{a}_{n}} [(ATA)−1]nn​=anT​an​−anT​An​(AnT​An​)−1AnT​an​1​

ana_nan​代表矩阵AAA的第nnn列。

我们不妨先考虑最后一个对角元素的求取。 将AAA矩阵写为:A=[Anan]A=\left[\begin{array}{ll}A_{n} & a_{n}\end{array}\right]A=[An​​an​​],因此
ATA=[AnTAnAnTananTAnanTan]A^{T} A=\left[\begin{array}{cc} A_{n}^{T} A_{n} & A_{n}^{T} a_{n} \\ a_{n}^{T} A_{n} & a_{n}^{T} a_{n} \end{array}\right] ATA=[AnT​An​anT​An​​AnT​an​anT​an​​]
此时,我们利用块对角矩阵求逆公式,即:
[AUVD]−1=[A−1+A−1U(D−VA−1U)−1VA−1−A−1U(D−VA−1U)−1−(D−VA−1U)−1VA−1(D−VA−1U)−1]\left[\begin{array}{ll} \boldsymbol{A} & \boldsymbol{U} \\ \boldsymbol{V} & \boldsymbol{D} \end{array}\right]^{-1}=\left[\begin{array}{cc} \boldsymbol{A}^{-1}+\boldsymbol{A}^{-1} \boldsymbol{U}\left(\boldsymbol{D}-\boldsymbol{V} \boldsymbol{A}^{-1} \boldsymbol{U}\right)^{-1} \boldsymbol{V} \boldsymbol{A}^{-1} & -\boldsymbol{A}^{-1} \boldsymbol{U}\left(\boldsymbol{D}-\boldsymbol{V} \boldsymbol{A}^{-1} \boldsymbol{U}\right)^{-1} \\ -\left(\boldsymbol{D}-\boldsymbol{V} \boldsymbol{A}^{-1} \boldsymbol{U}\right)^{-1} \boldsymbol{V} \boldsymbol{A}^{-1} & \left(\boldsymbol{D}-\boldsymbol{V} \boldsymbol{A}^{-1} \boldsymbol{U}\right)^{-1} \end{array}\right] [AV​UD​]−1=[A−1+A−1U(D−VA−1U)−1VA−1−(D−VA−1U)−1VA−1​−A−1U(D−VA−1U)−1(D−VA−1U)−1​]
由于我们只关心最后一个对角元素,因此只考虑(D−VA−1U)−1\left(\boldsymbol{D}-\boldsymbol{V} \boldsymbol{A}^{-1} \boldsymbol{U}\right)^{-1}(D−VA−1U)−1这一项, 我们把 D=anTanD=a_n^Ta_nD=anT​an​,V=anTAnV=a_n^TA_nV=anT​An​,U=AnTanU=A_n^Ta_nU=AnT​an​和A=AnTAnA=A_n^TA_nA=AnT​An​代入,即可得到:
[(ATA)−1]nn=1anTan−anTAn(AnTAn)−1AnTan\left[\left(\mathbf{A}^{T} \mathbf{A}\right)^{-1}\right]_{n n}=\frac{1}{\mathbf{a}_{n}^{T} \mathbf{a}_{n}-\mathbf{a}_{n}^{T} \mathbf{A}_{n}\left(\mathbf{A}_{n}^{T} \mathbf{A}_{n}\right)^{-1} \mathbf{A}_{n}^{T} \mathbf{a}_{n}} [(ATA)−1]nn​=anT​an​−anT​An​(AnT​An​)−1AnT​an​1​
因此,最后一个对角元素的取值得到了证明。接下来,考虑一般情况,假设要求取第iii个对角元素。 显然,存在置换矩阵PPP,有:
AP=[Ai,ai]AP = [A_i, a_i]AP=[Ai​,ai​]
即将AAA的第iii列aia_iai​调换到最后一列,而将最后一列调换到第iii列,其他列均不变。因此有:
[(PTATAP)−1]nn=1aiTai−aiTAi(AiTAi)−1AiTai[(P^TA^TAP)^{-1}]_{nn} =\frac{1}{\mathbf{a}_{i}^{T} \mathbf{a}_{i}-\mathbf{a}_{i}^{T} \mathbf{A}_{i}\left(\mathbf{A}_{i}^{T} \mathbf{A}_{i}\right)^{-1} \mathbf{A}_{i}^{T} \mathbf{a}_{i}}[(PTATAP)−1]nn​=aiT​ai​−aiT​Ai​(AiT​Ai​)−1AiT​ai​1​
此时注意到:根据P−1=PTP^{-1}=P^TP−1=PT,我们有:
(PTATAP)−1=PT(ATA)−1P(P^TA^TAP)^{-1}=P^T(A^TA)^{-1}P(PTATAP)−1=PT(ATA)−1P
也就是说,(PTATAP)−1(P^TA^TAP)^{-1}(PTATAP)−1是将(ATA)−1(A^TA)^{-1}(ATA)−1的第iii列与最后一列调换,第iii行与最后一行调换后的结果。换言之, 我们刚刚求取的(PTATAP)−1(P^TA^TAP)^{-1}(PTATAP)−1的最后一个对角元素就是(ATA)−1(A^TA)^{-1}(ATA)−1的第iii个对角元素!因此,得证。

对此其实我们也可以看出:

调换顺序后求逆,等价于求逆后再调换顺序,不过前提是形式应为(ATA)−1(A^TA)^{-1}(ATA)−1。

置换矩阵的应用:逆矩阵的对角线元素求法相关推荐

  1. Matlab Tricks(十三)—— 提取矩阵的对角线元素

    >> A = randi(3, 3)A =3 3 11 2 23 3 3 1. diag(A)(尽可以查看,不可以修改) >> diag(A) ans =323 2. 进行索引 ...

  2. C++矩阵的对角线之和

    下面我会围绕奇数型矩阵和偶数型矩阵来展开. 什么是奇数型矩阵? eg.a[3][3].a[5][5].a[7][7].a[9][9]- 什么是偶数型矩阵? eg.a[4][4].a[6][6].a[8 ...

  3. 置换矩阵(P)的逆是其转置(T)

    置换矩阵(Permutation matrix):矩阵的每一行和每一列的元素中只有一个1,其余元素都为0.(不严谨的解释) 转置矩阵(Transpose matrix):矩阵的行变成对应的列,矩阵的列 ...

  4. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  5. 线性表顺序表---逆置所有元素

    1 /*顺序表中所有的元素逆置 2 * 3 */ 4 #include <iostream.h> 5 using namespace std; 6 7 int main(){ 8 void ...

  6. 矩阵的逆(性质、求法)

  7. C语言-求矩阵的对角线之和

    其实这种题往往规律性很强,用笔画一画相信都能发现突破口,下面我就讲最简单的方法去求解. 先画图  无非两种情况,n*n,n要么是双数,即对2求余等于0,要么是单数,对2求余不为0:单数和双数的区别在于 ...

  8. C语言数组fun函数逆置数组元素,C语言

    第一套 1. 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序).请在程序的下划线处填入正 ...

  9. Joint Tx-Rx Beamforming Design for Multicarrier MIMO Channels: A Unified Framework (1)

    前言 这篇博客是对经典paper Joint Tx-Rx Beamforming Design for Multicarrier MIMO Channels: A Unified Framework ...

最新文章

  1. java在线阅读word_java在线预览txt、word、ppt、execel,pdf代码
  2. (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道
  3. Flex布局及其应用
  4. 计算机画画作品 人物 游泳,夏天主题的儿童画-游泳的儿童绘画作品
  5. java错误页面_Java web 项目关于错误页面的处理
  6. socket编程(一)最简单的c/s模式
  7. php sql注入审计,php审计基础一:sql注入
  8. 为什么我电脑的所有浏览器都开不了网页
  9. csdn博客搬家:及其方便的博客迁移、搬家工具,支持主流博客平台----CsdnSyncHexo。
  10. TEX studio:IEEE latex模板的下载与使用
  11. MATLAB去除人声
  12. c语言编程三次方程,c语言求三次方程的根程序设计
  13. 如何将计算机网络作为热点,怎么把笔记本作为WIFI热点供其他电脑使用无线网...
  14. Android程序崩溃处理
  15. java 微信 图灵机器人_SAE服务下用java实现微信公众账号图灵机器人
  16. redis命令之string类型setex命令用法详情
  17. 【已解决】华为手机短接后有提示音但在其他设备里显示未知设备或者USB-SER怎么办 | 华为荣耀手机短接后未知设备里面出现“USB-SER” 端口如何解决
  18. SwiftUI放在Section中的进度条(ProgressView)首次刷新时不显示的解决
  19. 评级更新 | Rchain面临财务危机 铂链开除前CEO宋欣
  20. 合振动的初相位推导_如何确定合振动的初相位

热门文章

  1. U盘强制拔出数据丢失怎么办
  2. css六边形插入图片蜂巢幻灯代码,CSS 实现蜂巢/六边形图集
  3. 计算机组装ppt 免费,【5A版】计算机组装与维护课件.ppt
  4. yolov5详解与改进
  5. [物理学与PDEs]书中出现的符号及其意义汇总
  6. Data Guard、 GoldenGate 的区别
  7. 制作简单进销存管理系统(C#)
  8. win10电脑上WLAN网卡不见了,无线网路连接不上怎么办?
  9. 【Canvas真好玩】从黑客帝国开始
  10. mkdir()和mkdirs()区别