《线性代数》4. 矩阵的高级话题
作者:@古明地盆
喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号
更多的变换矩阵
之前我们说矩阵可以看作是向量的函数,矩阵可以改变一个点的坐标,比如将一个点的横坐标扩大 a 倍,纵坐标扩大 b 倍,那么就可以让如下矩阵与之相乘。
本次就来介绍更多的变换矩阵,假设我们希望一个点沿着 轴翻转,也就是让坐标 变成 ,那么变换矩阵 是多少呢?很明显,此时相当于将横坐标扩大为原来的 倍(不变),纵坐标扩大为原来的 倍,所以 如下。
如果希望一个点沿着 轴翻转,也就是让坐标 变成 ,那么变换矩阵 的值就是下面这样。
如果希望一个点沿着原点翻转,也就是让坐标 变成 ,那么变换矩阵 的值就是下面这样。
如果希望一个点沿着 轴错切,也就是让坐标 变成 ,那么变换矩阵 的值就是下面这样。
如果希望一个点沿着 轴错切,也就是让坐标 变成 ,那么变换矩阵 的值就是下面这样。
矩阵的旋转变换
假设有一个点 ,然后 ,如果我们希望 相对于 是顺时针旋转 度,那么 是多少呢?首先要想求 ,我们首先要知道 旋转 度之后的 是多少。
我们对式子化简,可以得出:
所以 顺时针旋转 度之后,坐标点会变成 ,那么现在的问题就变成了如果想让矩阵 和 相乘之后,变成 ,那么 是多少?
首先 肯定是一个 的矩阵,我们计算一下就知道了。
所以很明显:,矩阵 就是:
以后让 乘上某个向量,就可以让它顺时针旋转 度,这个 是一个已知值。
单位矩阵
在介绍向量的时候,我们说模为 1 向量叫做单位向量,比如半径为 1 的圆,那么圆上任意一点都是单位向量。同理也有单位矩阵,那么单位矩阵是怎么定义的呢?很简单,如果矩阵 和向量 相乘之后,或者说对 进行映射之后,得到的结果还是 ,那么我们就称矩阵 是单位矩阵。
而单位矩阵有两个特点:
它是一个方阵
主对角线的元素都是 1,其它元素是 0
那么单位矩阵都有哪些性质呢?
矩阵的逆
在数字系统中,如果存在一个非零整数 ,使得 ,那么 就叫 的倒数,记作 。
同理在矩阵中也是如此,如果 ,则称 是 的逆矩阵,记作 。也就说,两个矩阵相乘(无论是 还是 )如果等于单位矩阵 ,那么其中一个矩阵就是另一个矩阵的逆矩阵。需要注意的是,不是所有矩阵都有逆矩阵,如果一个矩阵没有逆矩阵,那么该矩阵就是不可逆矩阵,或者叫奇异矩阵(non-singular)。反之就是可逆矩阵,或者非奇异矩阵。
值得一提的是,矩阵的乘法不满足交换律,有可能 ,但是 ,那么此时我们称 是 的右逆矩阵。如果 ,但是 ,那么我们称 是 的左逆矩阵。
当然,在 是 的左逆矩阵的同时, 也是 的右逆矩阵,反之依然。
因为有的矩阵可能只有左逆矩阵,或者只有右逆矩阵,如果左逆矩阵和右逆矩阵同时存在,那么它们一定是相等的。换言之,如果矩阵 既存在左逆矩阵 又存在右逆矩阵 ,那么 和 一定是相等的,并且是 的逆矩阵。
咋一看这个结论不好理解,但证明起来很简单,证明:如果 ,那么 和 相等。
因为矩阵乘以单位矩阵还等于原矩阵,所以 ,矩阵乘法虽然没有交换律,但满足结合律,所以可以得出 ,进而得出 。
在线性代数中,我们只关心逆矩阵,至于是左逆还是右逆则不太关心。
然后可逆矩阵要满足 ,那么可逆矩阵一定是方阵,如果不是方阵,那么该矩阵就是不可逆矩阵(奇异矩阵)。
- 补充:一个整数的 次幂等于 ,那么一个矩阵的 次幂等于多少呢?显然是单位矩阵。
- 就是 的逆矩阵,而 就是 。
再来看看如何用 Numpy 生成单位矩阵和逆矩阵。
import numpy as np
# 生成单位矩阵
print(np.eye(5))
"""
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
"""
print(np.eye(5, k=1))
"""
[[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0.]]
"""
print(np.eye(5, k=2))
"""
[[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
"""
print(np.eye(5, k=-2))
"""
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]]
"""
单位矩阵比较简单,就是主对角线上的值都为 1,然后 np.eye 还支持一个参数 k,含义就是代码演示的那样。
import numpy as np
# 2 x 2 的矩阵
m = np.array(
[[1, 2], [3, 4]]
)
# 获取逆矩阵
m_inv = np.linalg.inv(m)
print(m_inv)
"""
[[-2. 1. ]
[ 1.5 -0.5]]
"""
# 矩阵乘上逆矩阵,结果是单位矩阵
print(m @ m_inv)
"""
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
"""
print(m_inv @ m)
"""
[[1.00000000e+00 0.00000000e+00]
[2.22044605e-16 1.00000000e+00]]
"""
# 注:浮点数存在误差
try:
np.linalg.inv(
np.array([[1, 2, 3], [2, 3, 4]])
)
except Exception as e:
# 计算矩阵的逆,那么该矩阵必须是方阵
print(e)
"""
Last 2 dimensions of the array must be square
"""
try:
np.linalg.inv(
np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
)
except Exception as e:
# 该矩阵为奇异矩阵,不存在逆矩阵
print(e)
"""
Singular matrix
"""
以上我们就通过编程实现了单位矩阵和逆矩阵,首先和单位矩阵一样,可逆矩阵也必须是方阵。但如果一个矩阵已经是方阵了,我们要如何判断它是否可逆呢?换句话说,什么的方阵才可逆呢?我们一会再说。
矩阵的逆的性质
介绍完矩阵的逆,再来说说它的性质。
性质:如果矩阵 存在逆矩阵 ,则 唯一。
下面我们来证明这一点,假设矩阵 存在两个不同的逆矩阵 和 ,那么:
但是推出来, 和 是相等的,所以一个矩阵如果可逆,那么它的逆矩阵一定是唯一的。
性质:,一个矩阵的逆矩阵的逆矩阵,还等于它自身。
证明:首先 的逆矩阵是 ,那么意味着 的逆矩阵是 。我们记 ,那么 ,显然等于 。
性质:
证明:显然 ,进而得出 ,又因为 ,所以 。该性质和上面那个性质,和矩阵的转置比较像。
不过既然提到了转置,那么再补充一个,,它的证明也很简单。
基于 可以得出 ,因为 ,所以 。
而 ,所以 ,进而得出 。
如果觉得文章对您有所帮助,可以请囊中羞涩的作者喝杯柠檬水,万分感谢,愿每一个来到这里的人都生活愉快,幸福美满。
微信赞赏
支付宝赞赏
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2020-08-29 《深度剖析CPython解释器》17. Python类机制的深度解析(第一部分): 回顾Python中的对象模型
2020-08-29 《深度剖析CPython解释器》16. Python函数机制的深度解析(第三部分): 闭包的底层实现以及调用