矩阵的应用非常广泛,电路与电子、图像处理、计算机图形学、量子力学、排名算法等,这些都是矩阵被广泛应用的领域。这篇文章,希望能让你对矩阵的应用有深入的了解。
矩阵的加法原理非常简单,只需将相应的项相加即可。
然后,将矩阵乘以一个数也非常简单。
但是当涉及到矩阵乘法时,计算开始繁琐且复杂起来,有些老师对此毫无背景知识。
这不是那种让你想学习的矩阵知识。然而,矩阵的应用比你可能想象的要广泛得多。首先我们需要意识到矩阵能做到矢量做不到的事情。
例如,从原点开始并以(1,1)为终点的矢量可以写成矩阵形式,如下图所示:
X分量在顶部,Y分量在底部。当我们通过乘法规则将其乘以一个2x2矩阵时,得到一个新的矢量,
这个矢量是(1,3)。所以输入一个矢量,矩阵将其缩/放并旋转得到一个新的矢量。这就是矩阵对矢量做事,在这种情况下,不同的输入将被旋转和缩放得到不同的结果,稍后我们会看到。现在有些矩阵要简单得多,比如这个矩阵只是旋转,
将一个矢量放进去(即乘以矩阵),输出的将是逆时针旋转90度的相同矢量。
而这个矩阵只是缩放,
任何输入的矢量都会输出长度加倍的矢量。
但是大多数2x2矩阵并不那么简单。不同的输入矢量会被缩放和旋转得到不同的结果。然而,这些变换都是线性的,也就是说,任何与输入矢量在同一条线上的矢量都会被映射到与相应输出矢量在同一条线上。
这些线性变换就是我们称之为线性代数的原因。现在我要再次执行这些变换,但这次请注意这个矢量(1,2)。
你会发现经过矩阵
的变换后,它是唯一一个只被缩放而没有旋转的矢量,
而且这会发生在与该输入(1,2)在同一直线上的任何矢量上。任何只被矩阵缩放而不被旋转的矢量被称为该矩阵的特征向量(Eigenvector),而向量被缩放的程度(在本例中是2,因为长度加倍了)称为特征值(Eigenvalue)。
最后需要提到的是,我们通常学到的矩阵的第一个应用是如何帮助我们解决方程组。
系数可以放入一个矩阵,变量放入另一个,输出放在等式右边。
注意我使用的是与上一张幻灯片中相同的矩阵。使用矩阵乘法的规则,你可以看到它们完全相同的。
所以实际上,这个问题是要求我们找出这个矩阵将哪个输入矢量映射到(1,3)。
我们之前已经看到了答案,
问题是矩阵将哪个矢量映射到这个输出,我们只需要做之前相同的变换,但是反向进行,找到答案是 (1,1)。
反向操作就像应用逆矩阵,当所需的输出被乘时,生成的矢量就是答案。
所以 x=1 和 y=1 是就是解。这篇文章就不讨论如何求解逆矩阵了,我们关注的是矩阵的应用。当方程组变得更复杂时,我们只需要扩展矩阵,就可以分析具有任意多个变量的系统。
矩阵在电路和电子领域的应用之所以重要,是因为这些可以用线性方程表示,其中所有电压和电流都是未知变量。当电路变得复杂时,我们只需要让计算机找到一个逆矩阵,就能得到我们需要的电流和电压。
但这仍然不够激动人心,那么对于一个随时间不断演变的系统呢?例如,假设在一所高中发生了僵尸病毒爆发。学校被隔离,没有人可以进出。但是僵尸感染在传播,学校里有人类和僵尸,由于没有人进出,所以人口数量保持不变。现在假设每小时,由于感染,有20%的人类会变成僵尸。幸运的是,有治愈这种疾病的方法,但并不总是能保证有效,所以每小时,有10%的僵尸会恢复成人类。
此刻,如果有150个僵尸和150个人类,那么长期下来会发生什么呢?
我们要假设变化是离散的,每小时发生一次。让我们看看第一个小时人类的变化,从150个人类开始,其中80%将保持为人类不被感染,但我们还要加上150个僵尸中有10%被治愈并恢复成人类。在第一个小时后,人类数量减少到135人。
对于新的僵尸总数,我们要计算感染的20%的人类加上150个僵尸中没有被治愈的90%,得到的总数当然是165,因为这两个数字加起来总数是300。
但我们想知道长时间之后会发生什么,所以我们必须继续计算。又过了一个小时,写下相同的百分比,只是现在人类的数量是135而不是150,而僵尸的数量是165而不是150。这使得人类的数量变为125,僵尸的数量变为175。所以似乎人类在不断减少,但这会继续吗?
我们在这里看到的是一些线性方程,可以用一个百分比矩阵表示,这些百分比不会改变。
这个矩阵乘以输入的人类和僵尸数量(在任何时候),得到的结果是在给定时间之后的人口数量。这被称为马尔可夫矩阵(markov matrix),因为它的列和为1,没有负值。但这就像我们刚才看到的,矩阵会对输入向量进行变换,缩放和旋转。第一个输入是150,150,即初始人类和僵尸人口。经过一个小时(或一个乘法),它变成了135,165。再一个小时后,变为125,175,也就是两小时后的情况。
因此,当我们不断应用这些乘法时,这个向量将最终变为什么样?
让我在图上画出几个向量来展示这个过程,每个向量代表加起来是300的总人口。
如果我们进行矩阵乘法并观察变换,你会注意到这个向量或者这条线保持不变,而其他向量都朝向它移动。
这个向量就是矩阵的特征向量,相关的特征值是1,因为它没有缩放。由于该向量不旋转或缩放,它就是系统的平衡点,因此是我们问题的答案。经过很长时间,人口将趋于这条线上的数值,并加起来是300,即人类为100,僵尸为200。其他人口值每小时都会更接近这些数值。如果将这些值放入前面的方程中,你会看到输出保持在人类100和僵尸200。
如果百分比发生变化,问题就变成了新矩阵的特征向量是什么。也许不久的将来不会有僵尸横行,但这种数学方法可以用来分析病毒如何在人口中传播。例如,我最喜欢的应用之一就是谷歌的PageRank算法,它涉及到马尔可夫矩阵,并通过将网站之间的链接视为从一个站点转到另一个站点的概率来对网站进行排名。这里就不展开了。
1992年4月29日,一名叫Reginald Denny的男子在直播中被殴打至濒临死亡。Reginald Denny是一名卡车司机,当天他的行驶路线经过了骚乱发生的地区,但他并未得到通知。当他到达那里时,他被暴徒拦住,从卡车上拖下来,然后遭受殴打。由于现场直播画质不佳,确定袭击者身份并不容易。但是,通过一些先进的数学方法,执法部门得以自信地确认其中一名袭击者。
为了理解这是如何实现的,我们首先需要了解数字图像的构成。一个数字图像只是由许多像素组成的,每个像素都有一个单一的颜色。
这些颜色可以用一些数值来表示,例如,一个由一百万像素组成的正方形图片(每边有1000个像素),可以用一个1000乘1000的矩阵表示,其中的每项都是每个像素的颜色值。
不过,处理黑白图片要容易得多,因为黑色像素可以用0表示,白色像素可以用1表示。
我们这里讨论的是灰度图像,这意味着0和1之间的任何数值都可以存在,对应于不同的灰度。
因此,在图像处理中,无论是模糊图像、检测边缘、锐化图像等,都归结为以非常特定的方式操作像素。
举个例子,我们来数学地模糊这个数字1的图像。为此,我将创建一个3x3矩阵,其中每项都是1/9,这在图像处理中被称为内核(kernel,即3x3矩阵)。
接下来,我们要将这个内核覆盖在图像矩阵上,然后将每个方格中的各项相乘,再将结果相加。在这个例子中,它只是1乘以1/9九次,所以总和是1。
是的,这个内核实际上只是找到了它内部像素的平均值。接下来,我们将把1这个和放在新图像的中心像素上。这种情况下,它恰好没有改变,仍然是1,或者说是白色,但这不总是这种情况。
现在,你会注意到右边的网格(模糊图像将出现的地方)与左边的网格大小相同。为了获得整个模糊图像,我们只需在原始图像上扫描红色区域。当向右滑动一格时,所有这些像素仍然是1,所以平均值也是1,这就是这个新像素的来源。
但是,再向右滑动一格,内核包含了一个黑色像素,因此我们要求8个1和一个0的平均值,大约是0.89。这对应于一种非常浅的灰色,我们将其放在中间的方格中。
在扫描整个图像并将每个新数字映射到模糊图像后,这些值将是,
我知道这种方法没有真正考虑到边界,但为了我们的目的,我们只是保持边界为白色。现在,根据它们的实际值上色每个像素,得到了一个模糊的数字1的图像,
实际上,这是极度模糊的,几乎无法辨认。但是,如果我们在彩色区域周围画一个轮廓,我们可以看到数字1。
之所以如此模糊,是因为我们只处理了100个像素。但内核的作用是在原始图像中,在黑色和白色之间的锐利边缘处进行平滑或平均,这样我们就可以在模糊图像中看到从黑色到浅色的过渡。我们使用的内核代表了一种称为方块模糊(box blur)的模糊类型。
如果你输入一个像素较多的图片,然后应用模糊,就会得到模糊的效果。但还有其他几种内核,它们能达到不同的效果。高斯模糊也会模糊图像,但它为中心方格分配更多权重,
因此暗像素保持相对暗,反之亦然。还有锐化内核(Sharpen Kernel)
和边缘检测内核(Edge Detection),
你会注意到,这个内核中的所有数字之和为零。所以,如果我们将它放在图像的某个区域,颜色大致相同,那么将这些数字相乘,再将结果相加,将得到零(或黑色像素),这就是为什么相应的区域是黑色的。唯一不是黑色的区域是颜色急剧变化的地方,也就是边缘。
作为边缘检测的另一个例子,这里有一个拍得不太好的某人手臂的照片
通过使用边缘检测算法,研究人员能够识别出一片某种胎记或纹身的区域,
实际上,这是下面这张照片的放大部分(红色框),
其中可以看到那些人正在攻击某个人。使用图像处理技术,一家公司能够确定这个印记是某帮派的玫瑰纹身,最终帮助确定了袭击者。
这些可能并没有涉及到我们之前看到的那么多矩阵数学,因为我简化了一些东西,以避免过多地涉及图像处理和计算机图形。计算机图形学大量使用矩阵。通过这些矩阵,我们可以将几何数据合并到坐标系统中,然后通过矩阵操作来缩放、旋转、反射、移动图像等。
但是,这会变得更复杂。
对于那些想要从矩阵数学中得到一些实际结果的人,让我们来看看网络和图论。图可以表示很多事物例如城市之间的道路、人际关系、数据包在计算机网络中的流动等。在这些场景中,矩阵可以用来表示图的结构和属性。
人际关系,城市网络,网站之间的链接等等。对于小型网络,我们可以直观地理解正在发生的事情,比如,这是一群同事,他们之间的关系代表相互的友谊,那么很容易看出谁是最受欢迎的人,谁的朋友最少。
但是,当网络变得更加复杂时,我们需要数学工具来帮助我们识别关键信息。比如,哪个网站应该在网上排名最高,也可能是找出谁更容易在大学里传播疾病。在这些情况下,我们需要一些数学技巧,以便找到我们眼睛并不总是能看到的东西。让我们看看矩阵可以揭示什么。
在约会软件方面,假设这个APP中只有三个男性(标签为1到3)和三个女性(标签为4到6)注册,并且他们彼此如图所示的相互连接。
我们看到,第一个男人与所有三个女人配对,第二个男人与两个女人配对,第三个男人与一个女人配对。
现在,这个图为这个情况提供了一个很好的视觉效果,但我们还可以做的是制作一个有六行六列的表格,用于分析这六个人。如果两个人匹配,比如1号和4号,那么我们会在位于第1列和第4行的方格中放置一个1。然而,由于这些是相互的连接,我们还需要在第4列和第1行中也放入一个1。如果1号与4号匹配,那么当然4号也与1号匹配,所以数据必须反映这一点。
这意味着,表格会沿着对角线对称。如果两个人没有连接,比如1号和2号,那么在那个方格里放一个0;因为没有人与自己匹配,对角线上都是0。
所以,如果你想知道5号和2号是否连接,只需查看第5列和第2行,看看是0还是1。
从这里,我们可以看到一些明显的事情,比如对于1号,我们可以沿着他们的列或行找到他们总共有三个匹配,因为有三个1。
但我们将使用一些稍微高级的数学来分析这个图。所以,我们不再把它当作表格,而是称之为矩阵(Matrix)。
去掉网格线,其他的都没有变。在图形方面,这被称为邻接矩阵(邻接矩阵)。另一种解释方法是,它告诉我们任意两个节点之间存在多少条长度为1的路径。在本文的剩余部分中,当我说路径(path)时,是指连接一系列顶点的边。
这到底是什么意思呢?我们看一下第6列和第1行,我们知道这表示那两个人是匹配的。但它也意味着,它们之间存在一条长度为1的路径。
如果我们在1号处放一个点,只能遍历一个边,那么有一种方法可以到达6号。
这就是这个1所代表的。另一方面,从1号到2号有0条边。如果从1号出发,到2号有路径,但它们的长度都是2,这不是我们要找的。
但现在,如果我想快速了解两个人之间有多少共同的匹配,该怎么办呢?我们看1号和2号,这并不难,他们有2个共同的匹配。然而,这个问题与问1号和2号之间存在多少条长度为2的路径完全等同。我们刚刚看到答案是2,因为这是相同的问题。如果从1号开始,先到4号,然后到2号,或者先到5号,然后到2号,这两条路径意味着两个共同的连接。然而,有趣的是,我们可以通过将邻接矩阵相乘(或平方)来找出任意两个节点之间存在多少条长度为2的路径。
可以看到,对于1号和2号,有2个共同的连接,所以这是正确的。然后,如果你观察图中的2号和3号,他们没有共同的连接,在矩阵中也可以看出这一点,因为第3列,第2行是0。然而,1号和3号都与6号连接,没有其他连接,我们也可以在矩阵中找到这一点。
那么,现在对角线上的值代表什么呢?
这表示一个人与他们自己之间存在长度为2的路径。也就是说,他们有多少个匹配。对于1号这个人,如果他自身开始,要在两条边内回到1号,可以先走到4号,然后回到1号,或者先走到5号,再回到1号,又或者先走到6号,再回到1号,总共有3个选择,这就是为什么我们在矩阵中看到那里有一个3。对于拥有两个匹配的2号人物,情况也是如此。
然后,如果我们将新矩阵乘以原始矩阵,就相当于求原始矩阵的立方,可以得到一个人到另一个人之间长度为3的所有路径。
原始矩阵的某个幂次告诉我们,任意两个节点之间存在的长度为该幂次的路径数。可以看出,在实现这个软件时,只需要对邻接矩阵进行小幅调整,平方或立方,就能告诉我们很多事情。实际上,我发现矩阵立方告诉我们的东西非常有趣,特别是对角线。首先,它告诉我们一个人和他们自己之间存在多少条长度为3的路径。但是,观察图形,长度为3的路径回到你自己意味着有一个三角形。
我不打算深入解释这个问题,但是如果你将沿对角线的数字相加,也就是矩阵的迹,然后除以6,那么就能知道网络中总共有多少个三角形。这是矩阵告诉我们的一个很酷的事情,你一开始可能不会想到。
我还没有提到的是机器学习和神经网络,这些都是通过矩阵数学进行编码和操作的。从数学角度来看,矩阵在让机器“学习”方面起着巨大的作用。
对我理解线性代数概念帮助最大的一篇文章,感谢[点赞]
[点赞][点赞],数学科普好
很形象,不过讲特征向量的时候被只被缩放的向量是(2,1),不是(1,2)
我的高数有救了!
虽然我啥都没看懂,但我一直看的津津有味
图论。
高数入门课,那是我逝去的青春[笑着哭][笑着哭]
唉, 高数和线代是最简单的,这两门相对数学后面的课程充其量只算敲门砖而已,可惜已经还给老师了[大笑]
垃圾的矩阵数学。最前面加法,说白了可以理解为平面上的点,偏移后到新点,无须用矩阵。然后所谓相乘,实际为求解2元一次方程组,通过代入法可分别求得xy值,类似鸡兔同笼的解法,很简单。后面电路,各个分支路线可解测试,做过电工吗?真正做过电工才不会用到矩阵。再后面图像,你看起来是矩阵图,但实际每个点都是由01构成的机器码,跟矩阵数学毫无关系。至于僵尸和人类,就只是循环计算的问题,类似同时开水和放水的问题。再后面就越扯越远就不细看了。结论,矩阵数学只是把计算复杂化
矩阵时空,无量元点。
晕
讲真,到现在也没弄懂线性代数
很棒[赞]
矩阵和计算机联系紧密的原因,是不是容易实现01翻转和存储。
看图
[点赞][点赞]
矩阵法,是方程求解法的基本方法之一。[火箭] 在初、高中,就可学行列式与矩阵,它是解方程的重要工具,在理论上,是计算机编程上的依据,实现自动解题。[火箭] 但,对大规模的复数方程、微积分(电路)方程的解的精度表达,需加条件限制,验算时,可能等式一般有微小误差。[火箭]
有点 动态数学的意思
后面太次的例子。YUV转RGB矩阵更合适,适合C++,Java。