这方面的总结一直都有想写,我们先从矩阵的转置和逆谈起。本篇内容整理自网页。

矩阵的转置和逆

给出这部分叙事的主角,矩阵A和矩阵B
A=[1234]B=[123456]A= \begin{bmatrix}1 &2 \\ 3&4 \end{bmatrix} \ \ \ \ \ B= \begin{bmatrix}1 &2 & 3\\ 4&5 &6 \end{bmatrix} A=[13​24​]     B=[14​25​36​]

矩阵的创建

在Python中借助Numpy的array对象就可以创建一个二维数组(即矩阵)

>>> import numpy as np
>>> A = np.array([[1,2],[3,4]])#python用numpy中的array创建矩阵print(A)
>>> print(A)
[[1 2][3 4]]
>>> B = np.array([[1,2,3],[4,5,6]])
>>> print(B)
[[1 2 3][4 5 6]]

在matlab中这个创建过程更加容易,用逗号或空格作为列的分隔,用分号作为行的分隔

>> A = [1,2;3,4]A =1     23     4>> B = [1 2 3;4 5 6]B =1     2     34     5     6

矩阵的转置

矩阵的转置就是围绕主对角线方向做对称,或者说是将矩阵元素的行下标和列下标进行互换
AT=[1324]BT=[142536]A^{T}= \begin{bmatrix}1 &3 \\ 2&4 \end{bmatrix} \ \ \ \ \ B^{T}= \begin{bmatrix}1 &4 \\ 2&5 \\ 3&6 \end{bmatrix} AT=[12​34​]     BT=⎣⎡​123​456​⎦⎤​
Numpy中提供了transpose函数实现转置

>>> At = np.transpose(A)
>>> print(At)
[[1 3][2 4]]
>>> Bt = np.transpose(B)
>>> print(Bt)
[[1 4][2 5][3 6]]

matlab中直接用一撇就可以实现转置(默认实现共轭转置)。

>> At = A'At =1     32     4>> Bt = B'Bt =1     42     53     6

矩阵的逆

跟矩阵的转置对所有矩阵都有效不同,矩阵的逆首先针对的对象是方阵。对于方阵而言,这几个概念是等价的:

可逆矩阵↔矩阵满秩↔通过有限次初等行变换能转化为单位矩阵↔非奇异矩阵↔行列式不为0

从定义看,逆矩阵是指与原矩阵做矩阵乘法后结果将为单位矩阵,即:
AA−1=A−1A=EAA^{-1}=A^{-1}A=E AA−1=A−1A=E

增广矩阵求解逆矩阵

手算矩阵的逆,我们一般有三种方法,即待定系数法、伴随矩阵法和初等变换法。由于可逆矩阵“通过有限次初等行变换能化为单位矩阵”的性质,所以我们往往利用增广矩阵求解一般性的矩阵的逆。

以A为例, 容易计算A的行列式为-2,不为0,矩阵是可逆的,下面展现用增广矩阵求解A的逆矩阵的步骤。
A=[12∣1034∣01]A= \begin{bmatrix}1 &2 & | & 1 & 0 \\ 3&4 & | & 0 &1 \end{bmatrix} A=[13​24​∣∣​10​01​]
容易看出,先将第二行减去第一行乘以3:
A⇒[12∣100−2∣−31]A\Rightarrow \begin{bmatrix}1 &2 & | & 1 & 0 \\ 0&-2 & | & -3 &1 \end{bmatrix} A⇒[10​2−2​∣∣​1−3​01​]
然后,第二行加回第一行:
A⇒[10∣−210−2∣−31]A\Rightarrow \begin{bmatrix}1 &0 & | & -2 & 1 \\ 0&-2 & | & -3 &1 \end{bmatrix} A⇒[10​0−2​∣∣​−2−3​11​]
最后,第二行乘以负二分之一:
A⇒[10∣−2101∣32−12]A\Rightarrow \begin{bmatrix}1 &0 & | & -2 & 1 \\ 0&1 & | & \frac{3}{2} &-\frac{1}{2} \end{bmatrix} A⇒[10​01​∣∣​−223​​1−21​​]
于是有A的逆矩阵为
A−1=[−2132−12]A^{-1}= \begin{bmatrix} -2 & 1 \\ \frac{3}{2} &-\frac{1}{2} \end{bmatrix} A−1=[−223​​1−21​​]
容易看出AA−1=EAA^{-1} = EAA−1=E,所求逆矩阵确实是正确的。

inv()函数求解逆矩阵

Numpy中线性代数库linalg提供了inv()函数来实现非奇异矩阵的逆矩阵求解。

>>> Ai = np.linalg.inv(A)
>>> print(Ai)
[[-2.   1. ][ 1.5 -0.5]]

matlab中也提供了相似的函数inv()。

>> Ai = inv(A)Ai =-2.0000    1.00001.5000   -0.5000

伪逆

显然非奇异矩阵是少数,那么对于奇异矩阵和非方阵而言,就不存在其逆矩阵,但我们能引入伪逆矩阵作为逆矩阵的广义形式。数学定义如下:

如果存在一个与A的转置矩阵A’ 同型的矩阵X,并且满足:AXA=A,XAX=X.此时,称矩阵X为矩阵A的伪逆,也称为广义逆矩阵。

容易验证逆矩阵是广义逆矩阵的特殊情形,即
AA−1A=EA=A,A−1AA−1=EA−1=A−1,其中X=A−1AA^{-1}A=EA=A , \ \ \ A^{-1}AA^{-1}=EA^{-1}=A^{-1} ,其中X = A^{-1} AA−1A=EA=A,   A−1AA−1=EA−1=A−1,其中X=A−1

满足ALA=EA^{L}A = EALA=E,但不满足AAL=EAA^{L}=EAAL=E 的矩阵ALA^{L}AL称为矩阵A的左逆矩阵。类似的,满足AAR=EA A^{R}= EAAR=E,但不满足ARA=EA^{R}A=EARA=E 的矩阵ARA^{R}AR称为矩阵A的右逆矩阵。我们分三种情况讨论(看得出来总是取秩更小的矩阵):

  1. 当m≥n时,列满秩,矩阵Am×nA_{m\times n}Am×n​有左逆矩阵,An×mL=(ATA)−1ATA^{L}_{n\times m}=(A^{T} A)^{-1}A^{T}An×mL​=(ATA)−1AT
  2. 当n≥m时,行满秩,矩阵Am×nA_{m\times n}Am×n​有右逆矩阵,An×mR=AT(AAT)−1A^{R}_{n \times m}= A^{T}(AA^{T})^{-1}An×mR​=AT(AAT)−1
  3. 当n =m时,Am×nA_{m \times n}Am×n​的秩为r≤m=nr \le m = nr≤m=n,对A进行奇异值分解 A=UDVTA = UDV^{T}A=UDVT ,A的伪逆矩阵为A+=VD+UTA^{+}=VD^{+}U^{T}A+=VD+UT,其中D+D^{+}D+为奇异值矩阵的违逆矩阵,即主角线上的元素均取倒数。(应该指出,奇异值分解这种方法具有一般性,留到写奇异值分解时探讨)

我们以处理比较简单的B为例,已知B有:
B=[123456]BT=[142536]B= \begin{bmatrix}1 &2 & 3\\ 4&5 &6 \end{bmatrix} \ \ \ \ \ B^{T}= \begin{bmatrix}1 &4 \\ 2&5 \\ 3&6 \end{bmatrix} B=[14​25​36​]     BT=⎣⎡​123​456​⎦⎤​
于是BBTBB^{T}BBT为
BBT=[123456]×[142536]=[14323277]BB^{T}= \begin{bmatrix}1 &2 & 3\\ 4&5 &6 \end{bmatrix} × \begin{bmatrix}1 &4 \\ 2&5 \\ 3&6 \end{bmatrix} =\begin{bmatrix}14 &32 \\ 32 & 77 \end{bmatrix} BBT=[14​25​36​]×⎣⎡​123​456​⎦⎤​=[1432​3277​]
计算这个式子的行列式,容易发现其值为-54,逆矩阵是存在的。下面用行变换求解逆矩阵,先将(2,1)元素归零:
BBT⇒[1432∣1003.857∣−2.2861]BB^{T} \Rightarrow \begin{bmatrix} 14 &32 & | & 1 & 0 \\ 0 & 3.857 & | & -2.286 & 1 \end{bmatrix} BBT⇒[140​323.857​∣∣​1−2.286​01​]
再将(1,2)元素归零:
BBT⇒[140∣19.967−8.29703.857∣−2.2861]BB^{T} \Rightarrow \begin{bmatrix} 14 &0 & | & 19.967 &-8.297 \\ 0 & 3.857 & | & -2.286 & 1 \end{bmatrix} BBT⇒[140​03.857​∣∣​19.967−2.286​−8.2971​]
最后将对角线元素归1:
BBT⇒[10∣1.426−0.59301∣−0.5930.259]BB^{T} \Rightarrow \begin{bmatrix} 1 &0 & | & 1.426 &-0.593 \\ 0 & 1 & | & -0.593 & 0.259 \end{bmatrix} BBT⇒[10​01​∣∣​1.426−0.593​−0.5930.259​]

于是就有B的右逆矩阵为(有一定误差):
BR=BT(BBT)−1=[142536]×[1.426−0.593−0.5930.259]=[−0.946−0.443−0.1130.109−0.720−0.225]B^{R}= B^{T}(BB^{T})^{-1}=\begin{bmatrix}1 &4 \\ 2&5 \\ 3&6 \end{bmatrix} \times \begin{bmatrix} 1.426 &-0.593 \\ -0.593 & 0.259 \end{bmatrix} = \begin{bmatrix} -0.946 &-0.443 \\ -0.113 & 0.109 \\ -0.720 &-0.225 \end{bmatrix} BR=BT(BBT)−1=⎣⎡​123​456​⎦⎤​×[1.426−0.593​−0.5930.259​]=⎣⎡​−0.946−0.113−0.720​−0.4430.109−0.225​⎦⎤​
可以验证BRB^{R}BR是满足BBR=EB B^{R}= EBBR=E,但不满足BRB=EB^{R}B=EBRB=E 的矩阵,这也正是“右”的含义所在。

pinv()函数求解伪逆矩阵

相比于繁杂的对违逆情况的讨论,实际编程中求违逆只是一行代码的事。注意尽管逆矩阵是违逆矩阵的特例,但inv()具有比pinv()更高的求解效率,这在我们分别求解A和B的广义逆矩阵时就能体会得到。

Numpy中线性代数库linalg提供了pinv()函数来实现违逆矩阵求解。

>>> Bpi = np.linalg.pinv(B)
>>> print(Bpi)
[[-0.94444444  0.44444444][-0.11111111  0.11111111][ 0.72222222 -0.22222222]]

Matlab中也提供了相似的函数pinv()。

>> Bpi = pinv(B)Bpi =-0.9444    0.4444-0.1111    0.11110.7222   -0.2222

【线性代数01】矩阵的转置和逆相关推荐

  1. 线性代数-01矩阵与行列式

    矩阵 定义 特殊矩阵:上三角.下三角.对角 操作:初等行列变换.矩阵分块 Jacobi矩阵 A = [ ∂ f 1 ( x 0 ) ∂ x 1 ∂ f 1 ( x 0 ) ∂ x 2 ⋯ ∂ f 1 ...

  2. 线性代数 |矩阵【运算、逆、转置】

    文章目录 矩阵 矩阵介绍 矩阵相等 数与矩阵相乘 矩阵的运算规律 矩阵的加法 矩阵与矩阵相乘 矩阵的转置 对称矩阵 反对称矩阵 运算规则 注意 矩阵的逆 逆矩阵的几种求法 性质以及定理 end 矩阵 ...

  3. 搞懂矩阵的转置,矩阵的逆和伴随矩阵(一)

    文章目录 矩阵和行列式的区别: 三种常见的矩阵计算 矩阵的转置 矩阵的逆 伴随矩阵 正交矩阵 矩阵的计算 1. 用伴随矩阵求矩阵的逆 2. 用初等变换来求矩阵的逆 矩阵和行列式的区别: 即使内部元素相 ...

  4. 线性代数之矩阵逆的微分

                                线性代数之矩阵逆的微分 矩阵微分 类似矩阵导数的定义,则矩阵微分的形式见下: 矩阵逆的微分 这里假设X是个可逆(非奇异)的矩阵,求其可逆矩阵的微 ...

  5. 线性代数 --- 用内积重新定义矩阵的转置(个人学习笔记)

    在我的另一篇文章中,我简单的介绍了向量的点积,也叫内积.那篇文章的侧重点是点积或者说是点乘.主要是以的方式来定义两个向量的内积.而这篇文章我会见到内积的另外一种表示方式,从变成了. 线性代数 --- ...

  6. 矩阵的转置与矩阵的逆

    矩阵的转置 设 是一个 矩阵, 将 的行与列互换, 得到的一个 矩阵 . 称 为 的转置矩阵, 简称为 的转置.     矩阵转置的运算规律见提示 2.4. 例 6 证明: 任何一个 阶方阵总可以唯一 ...

  7. 矩阵的基础知识回顾:矩阵乘法,矩阵的逆,伴随矩阵,矩阵的转置,行列式,相似矩阵,实对称矩阵

    Agenda 1. 矩阵matrix 1.1 矩阵运算matrix operations 1.1.1 矩阵乘法matrix multiplication 1.1.1.1 简化矩阵乘法(facilita ...

  8. 【SIMULINK】simulink实现信号矩阵整合、求逆、转置、分解、向量矩阵相乘(非matlab)

    [SIMULINK]simulink实现信号矩阵整合.求逆.转置.分解.乘(非matlab) simulink实现信号矩阵,并实现分解 simulink实现信号矩阵求逆 simulink实现信号矩阵转 ...

  9. MATLAB笔记5:矩阵的转置、求逆、旋转、翻转;矩阵的行列式、秩、迹;矩阵的特征值、特征向量

    矩阵的转置.求逆.旋转.翻转 inv(A):求矩阵A的逆矩阵: 转置:A.'为矩阵A的转置,A'为矩阵A的共轭转置: rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,k为1时可省略: fli ...

  10. 矩阵的基础知识与公式(转置,逆,迹,行列式)

    矩阵的基础知识与公式(转置,逆,迹,行列式) References: MatrixCookBook(Version 2012) Chapter1 Chapter1: Basics 1 Basics 注 ...

最新文章

  1. PMP考试的形式和试题分布
  2. python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别
  3. Java中MySQL事务处理举例
  4. 程序员面试金典 - 面试题 17.16. 理发师(动态规划DP)
  5. Discretized Streams (DStreams)离散化流
  6. hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...
  7. Linux下PHP开发环境搭建(Apache2.4+PHP7.1+MySQL8.0)
  8. Qt中其他类调用窗口中的ui控件
  9. 微信小程序构建新闻列表
  10. c command语言学例子,语言学资料(一)CHAPTER 4
  11. 程序员为啥更赚钱?用Python做副业增长上万,躺赚
  12. 开源java数据库库
  13. 路由器实现不同VLAN间通信
  14. 运行阶段及面向对象技巧
  15. MYSQL-mysql中的truncate的用法
  16. 树莓派与DS18B20获取环境温度(Linux)
  17. H3C_RIP_路由器_动态路由
  18. CRC常用参数模型及C#代码实现
  19. Python二级考试公共基础知识
  20. 几个常见的js插件安装配置

热门文章

  1. Ember学习(1):Ember核心概念
  2. CSTSOFT ActiveX GDIPlus Pack 2021.03
  3. 孤儿进程/僵尸进程/守护进程
  4. activesync同步问题
  5. 网络安全工程师视频教程从入门到精通学习_网络安全入门教程
  6. 换电脑了怎么迁移旧电脑数据?教你一招,轻松搞定!
  7. ActivityManagerService启动过程
  8. 小米android11账号补丁,小米CC9E MIUI11 安卓9 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  9. Cisco 防火墙 ASA DHCP 配置
  10. oracle打cve补丁,Oracle多个产品高危漏洞补丁安全预警