线性代数学习之矩阵的应用和更多矩阵相关的高级话题

2021年09月15日 阅读数:3
这篇文章主要向大家介绍线性代数学习之矩阵的应用和更多矩阵相关的高级话题,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

矩阵变换和矩阵在图形学中的应用:

前言:

在上一次https://www.cnblogs.com/webor2006/p/14265708.html中已经对于矩阵有了比较详细的了解了,这里则来看一下矩阵的一些具体应用,主要是在图形变换中的应用。其实以前在介绍矩阵其实就是向量的函数时就举了一个转换的应用了,回忆一下:html

其中矩阵T就是transform的意思,这里就能够用一个抽象视角来看的话:python

其中这种T的矩阵就是一种变换矩阵,其实对于变换矩阵能够有N多种,而通常的这种变换矩阵的应用一般是出如今图形学当中,因此下面从图形学的角度来学习更多的一个转换矩阵,固然图形里面的转换是很是复杂的,这里只是学习几种比较简单的,目的是为了进一步加深对于矩阵的乘法操做,由于对于图形的各类转换都须要用到矩阵的乘法。web

更多变换矩阵:

让每一个点关于x轴翻转:

好比说这样的一个效果:函数

那怎么能办到这种效果呢?其实也就是要完成这样的一个式子:学习

其中关键是这个T矩阵的求解了,首先先肯定这个T矩阵的形状,因为矩阵x向量须要知足矩阵的列跟向量的行同样,因此很明显此时矩阵T的列是2列,而根据等号的向量结果是2行的,说明矩阵T的行是2行,因此它的形状是(2,2)的,因此此时T就能够假设是它:spa

这样的话,是否是就能够进一步进行计算成这样:code

而根据最终的结果向量很容易就能求解出此矩形T的元素为:orm

让每一个点关于y轴翻转:

知道了让每一个点关于x轴翻转后,换y转翻转就变得很是简单了,先看一下最终的样子:htm

 

这里直接给出结果:blog

让每一个点关于原点翻转(x轴,y轴均翻转):

其实有一个更加直观的计算方式,既然咱们已经知道向X轴翻转和向Y轴翻转的矩阵了:

那么先让我们的点进行x轴翻转,完了以后再让其进行y轴进行翻转,是否是就是这样的一个运算?

而根据矩阵乘法的结合率来讲,变换一下也能够求出这个变换矩阵:

沿x方向错切:

在图形变换中还有一种比较常见的效果,以下:

 

其中y值不变,只是让x进行必定的变化,其中x坐标的变化让其跟y坐标成必定的比例,具体就不推导了,直接给出结论:

其中错切的幅度是能够自由定义的。

沿y方向错切:

相似的,也能够沿y方向进行错切,以下:

其变换矩阵为:

矩阵旋转变换:

接下来在图形中还有一个很是之常见的矩阵变换,那就是旋转变换,以下:

为啥要单独起一个大标题呢?由于这里要来见证一下它的推导过程,这块的变换是比较麻烦的,如图所示须要用到三角函数的知识,不过也不难,下面一点点来看一下是一个什么变换矩阵能达到此效果:

其实也就要找到一个矩阵T,可是呢因为最终转换的坐标我们也不知道,因此说这个旋转的核心是要肯定等号右边的这个结果坐标的计算,那如何肯定结果坐标点呢?这里回到二维坐标上来:

此时须要假设啦,假设(x,y)跟x成这样的一个角度:

而后假设向量(x,y)的模是d,关于向量的模这里回忆一下:

也就是:

此时能够列一个等式了:

此时d就等于:

 

一样的对于y,也有相似的等式出现,以下:

而对于旋转后的坐标来讲,因为它的模跟(x,y)的模是如出一辙的,也就是向量的长度没变,此时又会出现以下等式啦:

那既然都等于d,就能够造成一个方程式了呀:

此时就能够算出x'y'啦,以下:

接下来就能够进一步演化啦,先来看x'的进一步演化,不过这里得先用到两角和差的公式了,先来回忆一下这公式:

此时就能够变换为:

此时再来分解为:

而sina/cosa就是tana,这又是啥依据呢?本身其实能够推出来,这里就不过多说明了,比较简单,而tan函数回忆一下:

因此:

因此最终又能够变为:

同理,对于y'也能够最终算成:

因此,此时再回到我们的目标旋转式子来,=号右边的就能够确认了:

此时再算变换矩阵T就很是容易啦,以下:

实现矩阵变换在图形学中的应用:

在上面说了这么我矩阵的变换效果,下面则回到python的世界中实际应用一把。

新建文件:

其中先定义一个F样子的坐标点,以下:

if __name__ == "__main__":
    points = [[0, 0], [0, 5], [3, 5], [3, 4], [1, 4],
              [1, 3], [2, 3], [2, 2], [1, 2], [1, 0]]

添加绘制相关的包:

因为须要进行图形的绘制,因此这里须要导这么一个库:

对于这个库若是安装了Anaconda会自动安装它的。

将坐标点绘制出来:

这里先将获取全部的x轴的点和y轴的点,以下:

而后就能够调用绘制库将其显示出来了,以下:

运行:

可是感受这绘制出来的不太好看呀,这是由于看到x轴和y轴的单位都不同,须要设置一下:

再运行:

嗯,正常了,接下来就能够开始领略一下矩阵的各类变换效果啦。

缩放变换:

先将绘制的点放到矩阵中:

 

接下来则来绘制一下转换以后的坐标:

运行看一下效果:

 x轴翻转:

有了上面的第一个转换效果以后,接下来只须要修改变换矩阵T的值既可,以下:

 y轴翻转:

让每一个点关于原点翻转(x轴,y轴均翻转):

沿x轴错切:

其实就是一个斜体字的效果~~

沿y轴错切:

 

旋转:

先回忆一下它的转换矩阵:

因此先来定义旋转的角度,而一般在数学库中对于角度一般使用的是弧度制来表示的,因此日常比较要旋转60度则须要用pi/3来表示,以下:

其中须要用到数学库,记得导一下包:

从缩放变换到单位矩阵:

这里先回忆一下以前的缩放变换矩阵:

那若是让每一个点的横坐标扩大1倍,纵坐标扩大1倍,是否是就有以下式子了?

此时一个新的概念出来了,对于变换矩阵没有对向量对应的坐标产生任何的影响,此矩阵就称之为单位矩阵。一般用i来表示单位矩阵,其中i是指Identity:

上面表示2x2的单位矩阵,而对于矩阵它是有不一样形状的,因此不一样形状的单位矩阵以下:

其中发现规律木有,单位矩阵都是从左上角到右下角的对角线【也称主对角线,这个概念对于将来的学习是有用的,对它有个印象】上的值都为1,而其它的都为0,抽象来概括的话,其实就是:

也就是行数等于列数的元素都是等于1,其它的都为0,另一个重要的结论也出来了:单位矩阵必定是方阵!!。在以前也学过一个必定是方阵的状况,回忆一下:

因此对于方阵这个特殊矩阵是颇有用的。

而单位矩阵有以下性质:

这里简单论证一下:

上面是矩阵与矩阵的乘法式子,因此若是对于结果矩阵中的元素记做是a的话,就有以下式子:

也就是ri这个向量点乘cj这个向量,而若是前面的这个矩阵是单位矩阵的话:

这就意味着ri这个向量中只有第i个元素等于1,其它的元素都为0,而根据向量的点乘就是各个元素进行相乘最后再相加,因此最终式子就变为:

也就是从Cj这个列向量中取出了它的第i个元素,而因为Cj这个列向量是后一个矩阵的列向量,而它的第i个元素就是后一个矩阵的第i行第j列所对应的那个元素,其结果就是结果矩阵的第i行第j列的元素,因此:

一样还有以下两个结论:

对于上面的结论有点抽象,能够用实际数来算一下,而后再来回头看这结论就会踏实不少,以下:

而对于单位矩阵的这个性质,对于非方阵也是合适的,看一下下面的矩阵:

而若是将上面相乘的后面矩阵提早,此时的单位矩阵就是:

而对于单位矩阵跟数字系统中的1同样,很是的重要!!!

矩阵的逆【比较绕】:

在上面已经知道了单位矩阵,其实它就相似于数字1,回忆一下,对于数字有以下特性:

可是除0以外,同理对于矩阵而言,若是知足:

其中I为单位矩阵,则称B是A的逆矩阵,记做:

A称为可逆矩阵,或者叫非奇异矩阵(non - singular)【由于可逆的矩阵是居多的,因此是非奇异的】,可是!!有些矩阵是不可逆的!称为不可逆矩阵,或者奇异矩阵(singular)【由于不可逆的矩阵是居少的,因此是奇异的】

下面具体举一个可逆矩阵的例子:

而它的逆矩阵为:

至此怎么求一个矩阵的逆矩阵以及判断矩阵是否可逆,以后再来探究。下面继续来看其它的一些概念(左逆矩阵、右逆矩阵):

也就是有一些矩阵只能找到它的左逆矩阵,还有一些矩阵只能找到它的右逆矩阵,由于矩阵是乘法是不遵照交换律的嘛,而对于代数的学习中,对于左逆矩阵和右逆矩阵倒不是很关心,其重点是要推出下面这个结论:

若是一个矩阵A既存在左逆矩阵B,⼜又存在右逆矩阵C,则B = C。

对于这个结论能够证实以下:

已知:

 

此时则从AC这个等式开始进行变换,以下:

 

另外若是对于矩阵A,存在矩阵B,知足BA = AB = I,矩阵A可逆,因此能够得出一个很重要的结果:可逆矩阵必定为方阵!!而非方阵必定不可逆!!

有了逆矩阵的知识以后,接下来就能够回答在以前https://www.cnblogs.com/webor2006/p/14265708.html学习矩阵幂运算时的几个疑问了,回忆一下:

结论以下:

其中这里重点知道A的0次方是单位矩阵,而A的-1次方是逆矩阵,而对于A的-2次方其实不是过重要。

实现单位矩阵和Numpy中矩阵的逆:

实现单位矩阵:

接下来回到python中来实现一下单位矩阵:

而后调用一下:

这里回到numpy库也来使用一下:

也来看一下单位矩阵的乘法的特性:

Numpy中矩阵的逆:

因为矩阵的逆我们还没学怎么求:

因此我们本身目前也无法实现,不过可使用数学库numpy先来体会下:

对于求出的结果我们能够用下面方式来验证一下,由于一个矩阵x逆矩阵有以下特性:

因此我们调用一下:

其中看一下精度问题:

对于浮点数,因此像以前咱们设置了一个精度为:

也就是判断浮点数是否为0是这样判断的,只要小于这个精度就认为等于0:

另外对于逆矩阵还有这么一个规定:

因此,我们来试验一下若是用numpy求非方阵的逆矩阵,看看有啥效果:

矩阵的逆的性质:

性质一:

因为矩阵的逆在后续的学习中是很是之重要的概念,如以前学习其它概念同样,下面来看一下矩阵的逆的基本性质,先来回忆一下逆矩阵的概念:

另外它其实还有这么一个结论:对于矩阵A,若是存在逆矩阵B,则B惟一。而对于这个结论能够采用反证法,以下:

结果发现B=C,跟我们的假设矛盾了,因此就论证了上面的结论了。

因此之后若是求解出了一个矩阵的一个逆矩阵以后,就能够万事大吉了,由于一个矩阵的逆矩阵是惟一的。

性质二:

其实也就是要证实,一个矩阵X要知足它:

其实只要证实XA知足矩阵的逆的定义就成了,以下:

而此时对于X能够用下面式子代替:

是否是能够看出A^-1就是矩阵A的逆矩阵,如结论所示。

性质三:

 

按照性质二的论证思路,其实只要证实:

 

论证也比较简单,以下:

而它跟咱们以前学习的矩阵的转置的特性很是像,以下:

而事实上,矩阵的转置和矩阵的逆之间在某些特殊的状况下,也确实存在着很是重要的关系,这里先提早给出结论,待以后再来探讨,那就是:对某一类特殊的矩阵,它的转置其实就等于它的逆。

性质四:

 

一样的证实思路:

学到这,对于上述公式的证实已经不须要再用具体的矩阵来进行推导了,直接能够用矩阵的语言既可进行推导,这也是学习了足够多的线性代数的基础以后的结果。

看待矩阵的关键视角:用矩阵表示空间【很是重要】

对于矩阵还有另一个视角:空间,而在以后的线性代数的学习中也能慢慢体会到它处理的不少问题都是把矩阵看成空间来看待,而空间也是线性代数的核心,因此下面来学习一下这个视角。

回忆:矩阵和向量相乘:

以下:

使用的是行视角来看的。

使用列视角:

既然有行视角,固然也有列视角对吧,对于一样的式子就会为:

其中能够看到结果跟使用行视角使用的状况是如出一辙的对吧,用抽象一点的思惟来看,其实就是:

而更细的话就是:

那,使用列视角来看待矩阵的话有啥意义呢?实际上是颇有意义的,下面再来看一下单位矩阵乘法:

 

其结果跟咱们以前学习的单位矩阵的性质是同样的。而重点看一下它:

其中回忆一下以前https://www.cnblogs.com/webor2006/p/14257300.html提到过标准单位向量:

 

其实也就是对应二维坐标空间的这俩点:

因此,此时式子又能够变化为:

那这样变化有啥意思呢?有意思,下面就能够理解是:

x.e1向量=往e1向量伸缩x倍;

y.e2向量=往e2向量伸缩y倍:

因此在二维坐标中就能够表示为:

而后再结这两个向量求加法,不就是平行四边行的对角线么,因此:

那这样看又有啥意义呢?以下。

矩阵表示空间:

这里就能够这样来看了:

也就是e1向量和e2向量分别表示轴的方向对吧?换言之,二维空间自己就须要由2个轴来定义,而该矩阵就定义了2个坐标轴,因此该矩阵就表示了整个二维空间了。其中又道出了一个很是重要的结论:"矩阵表示空间",那是否是对于任意一个矩阵均可以表示空间呢?好比下面这个矩阵:

是否是这个矩阵就表明了一个由u向量和v向量这俩个向量所组成的空间呢?是的,这里仍是回到二维坐标空间来表示这俩向量:

 

而对于这个空间(其实就是欧拉空间)中,对于这个点:

其实就是在u向量和v向量的空间中分别走2步,以下:

 

而最终的结果就是这俩个向量之和,因此结果为:

那此时能够发现就是这个矩阵定义了一个空间,而后空间*坐标点其实就是在这个空间中看该坐标点在空间的哪一个位置,为了能更加清楚的认知到这个矩阵表示的是一个新的空间,能够在坐标轴上画上虚线来直观的体会一下矩阵表示空间这句话:

此时若是将二维坐标系去掉就长这个样子:

因此矩阵表示空间这个视角就应运而生。

回头看图形变换:

当有了空间的视角来看待矩阵以后,接下来再回头看一下以前在图形中的各类变换,其视角也不同了,以下:

 

其实也能够将这个变换矩阵当作是在这个空间中的是怎么样的,这个新的空间就是:

同理:

它就是在这个空间中的变化:

有了这样的一个视角以后,有一个很是酷的事,就是日常不须要过多的计算,根据效果就能够很容易的推导出变换的矩阵,好比对于这样的翻转效果:

其实就是要将F放到这样的坐标系中:

 

那不很容易的写出这个表示空间的矩阵了?以下:

而原来没有空间的视角对于图形的旋转推导是多么的复杂,回忆一下:

因此,对于三维的矩阵也能够这样看:

而若是对于n维则须要用n轴来定义,而每个维度也应该是n个数,那不就是典型的方阵嘛,因此表示空间的矩阵必定是方阵!!!目前矩阵表示空间可能感受不出它有很大的用处,待以后的慢慢深刻会发现这个概念就很是很是重要了,这里先感性的对它有一个认识既可。

总结:看待矩阵的四个重要视角:

矩阵的运算:

下面来回忆一下对于矩阵的运算我们都学了啥?

  • 矩阵的加法
  • 矩阵的乘法(和数字;和向量【这是最重要的】;和矩阵)
  • 矩阵的幂
  • 矩阵的转置 
  • 矩阵的逆,不过目前尚未学怎么求~~ 

四个重要视角:

而学习矩阵的一个很是有用的就是得要学会不一样的视角来看待它,下面总结一下:

视角一:数据

可是这不是线性代数都要关心的视角。

视角二:系统

这个就是线性代数所关心的视角了,好比:

 

而它又能够用矩阵表示为:

而其实对于未知数也能够不用再关心了,由于根据前面矩阵就能够推导出它有四个未知数,最终将结果向量和前面矩阵就能够合成这么一个矩阵,以下:

 

关于这块未知数能够忽略的这块会在将来再来学习。

视角三:变换(向量的函数)

关于这块主要是用在图形学当中,其式子是:

回忆一下几个变换效果:

视角四:空间 

当以列视角来看待矩阵时,就跟空间挂勾了,好比:

而能够把上面这个乘法当作是向量U和向量V所表明的空间中的某个点的位置 ,以下:

总的来讲就是以下四个视角来看待矩阵:

  • 二维数据
  • 系统
  • 变换
  • 空间

而在下一次的学习就来解决当把矩阵看做是一个系统以后在线性系统中须要处理哪些问题,而它又是在将来学习将矩阵当作是变换和空间的一个很是扎实的基础。因此在数学这个领域真的是一环套一环的,须要认真谨慎对待每个知识点。